Skip to main content

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

    1. ESP má oba motory
    1. ESP má senzory z prvej nádoby
    1. 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