Zápisnica - 11.10.2021
Zhrnutie taskov
Všetkým členom sa podarilo vypracovať tasky z minulého týždňa.
Identifikácia nových problémov a riešení
Asynchrónnosť systému
Problém
Kroky receptu (jednotlivé moduly) nepôjdu úplne synchrónne a lineárne.
Príklad: modul č. 1 dostane príkaz "zohrej na XY °C a potom teplotu udržuj XY minút" okrem toho môžem chcieť miešať, tak pošlem do 2. modulu príkaz "miešaj na XY otáčok po dobu XY minút" keď 1. modul dokončí, tak backend môže synchronizovať moduly (2. modul nastaví na 0rpm)
TL;DR - moduly musia vedieť bežať asynchrónne
Návrh riešenia
bude centrálny backend, a moduly budú periodicky oznamovať backendu svoj stav (dáta pôjdu do DB) a zároveň sa môžu spýtať, čo majú robiť
každý modul bude mať nastavený pull-rate --> koľko času musí prejsť medzi dopytmi
- tento pull-rate musí byť variabilný a musí sa dať v priebehu varenia meniť
podľa pull-rate si bude backend checkovať, či je modul živý alebo mŕtvy a môže to rovno backend vyriešiť
backend musí byť robustný, aby vedel spravovať každý modul
modul bude vedieť nahlásiť, v akom stave je (IN PROGRESS, DONE, FAILED) a sám si podľa pull-rate bude pýtať od backendu, čo má vykonať
Architektúra HW
Návrh riešenia
- ESP má oba motory
- ESP má senzory z prvej nádoby
- ESP má senzory z druhej nádoby
- ESPčka sú pripojené cez WiFi na RPI
- moduly si pýtajú veci od backendu, nie priamo z DB
- služby pre moduly napr.
- zapísať hodnoty zo senzorov
- vypýtať, čo má modul robiť
- stav vykonávania
Rozloženie logiky !
Problém
Chceme všetku logiku na backende (moduly budú "blbé"), alebo nejakú logiku delegovať na moduly?
- ak vypadne internet, treba zabezpečiť, aby modul sám zastal
Návrh riešenia
TBD
Tím musí vypracovať analýzu, ako by varenie prebiehalo pri oboch konfiguráciách.
Návrh front-endu
Front-end musí odrážať granularitu receptu a zároveň byť user-friendly aj pre ľudí so základnými počítačovými skillmi.
Front-end by mal vedieť načítať údaje pre časti pivovaru z nejakého konfiguračného súboru.
Granularita receptu
Problém
Akú granularitu zvoliť pre recept, aby podporoval ukladanie do DB, zobrazenie na FE a asynchrónne vykonávanie inštrukcií.
Návrh riešenia
- recept bude rozdelený na KROKY
- KROK - súbor inštrukcií, ktoré môžu byť vykonávané asynchrónne, ale musia byť všetky ukončené, aby sa recept mohol posunúť na ďalší krok
- každý krok sa bude skladať z jednotlivých INŠTRUKCIÍ
- inštrukcia - najmenšia jednotka granularity receptu, obsahuje:
- ID zariadenia, na ktoré je mierená
- konkrétnu inštrukciu, ktorú má vykonať (napr. naštartuj motor, nastav teplotu)
- parametre inštrukcie (napr. trvanie, teplota)
Priebeh receptu:
- backend si do QUEUE nastaví inštrukcie z prvého kroku
- keď backendu príde dopyt z modulu, tak pokiaľ je v queue nejaká inštrukcia pre daný modul, backend mu pošle danú inštrukciu (modul si ju spracuje sám)
- po odovzdaní všetkých inštrukcií modulom bude backend čakať, kým mu moduly neoznámia, že splnili inštrukciu
- pokiaľ všetky moduly majú inštrukcie splnené, vtedy backend prejde na ďalší krok a proces a zopakuje
- toto celé sa opakuje, kým v recepte existujú nesplnené kroky
Poznámky
- backend si musí (napr. v databáze) držať pre každé zariadenie (efektor)
súbor inštrukcií, ktoré vie dané zariadenie vykonať
- asi bude potrebné ukladať aj to, aké parametre inštrukcia berie
Tasky do najbližšieho stretnutia
- všetci - deploy prvej funkčnej iterácie na RPI (aby už to malo aj nejakú jednoduchú statickú HTML stránku)
- všetci - kuknúť Git repozitár predošlého tímu
- budúci týždeň diskusia, čo odtiaľ prevziať
- vytvoriť si template z motora
- v repozitári je problém s HW ako je navrhnutý mikropočítač
- Saška - dokončiť analýzu varenia piva
- Saška - prepísať recept na primitívne a aj pokročilejšie kroky a nastavenia
- Miška - návrh frontendu (inšpirovať sa Lego Mindstorms)
- Peťo - pohľadať ovládateľný chladiaci efektor (napr. čo sa používa pri domácich pivovaroch)
- Lukáš a Marek K. - návrh databázy
- Lukáš - analýza TimeScale
- všetci - vytvoriť analýzu jednotlivých operácií v oboch prípadoch rozloženia logiky, či by náhodou nenastala nejaká veľmi komplikovaná situácia
Doplnenie informácií
Recept
- bude sa zohrievať celá nádoba (hlavne prvá), v druhej nádobe sa bude chladiť (celá nádoba)
- v prvej nádobe sa bude variť slad
- potom sa zapne výveva, vytvorí podtlak a nasaje obsah prvej do druhej nádoby
- v druhej nádobe sa bude chmeliť, chmel bude v sitku, to sa potom vyberie a pivo bude zrieť v druhej nádobe
- nebude sa merať hladina
Senzory a efektory
Senzory
- teplomer (viacero)
- merač prúdu (pre vývevu, či už všetko precucla)
- tlakový senzor
- menič na motor - vie nastaviť:
- ako dlho má ísť
- ako dlho sa má rozbiehať a spomalovať
- na koľko otáčok má ísť
Efektory
- motor
- servomotor
- ventil na prvej nádobe
- výveva
- ohrevné pásy
- kryostat - zariadenie na nastavenie teploty (ešte nie je)
- nemáme ovládateľné chladiace efektory