Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
project:esp8266_adc_grafana [2019/07/03 12:56]
cyberian
project:esp8266_adc_grafana [2019/07/10 15:16]
cyberian [Instalace Node-red]
Line 8: Line 8:
 ===== Úvod ===== ===== Úvod =====
 Vzhledem k netušené náročnosti to trochu potrvá, dokud to nebude dostatečně "​kyber"​. Nicméně tvrdě na tom dělám ;-) Vzhledem k netušené náročnosti to trochu potrvá, dokud to nebude dostatečně "​kyber"​. Nicméně tvrdě na tom dělám ;-)
 +Edit: Už je to dostatečně "​kyber"​. Celý projekt je hotový a odladěný.
  
-Mým cílem je data vizualizovat a mít je na dosah v případě potřeby, bez nutnosti chodit k zařízení.+Mým cílem je měřit pravidelně napětí baterie, ​data vizualizovat a mít je na dosah v případě potřeby, bez nutnosti chodit k zařízení. Dále zaslání emailu v případě, kdy se baterie dostane pod 11 V. Hotové zařízení se namontuje na pojízdnou platformu, na které sedí terapeut s dítětem, případně jen dítě, když je šikovnější a je tam jedno tlačítko, které po stisku platformu rozjede a tato sleduje černou izolační pásku nalepenou na podlaze.
 Předlohou k řešení se stala architektura internetu věcí, kterou využíváme v SensoricNetu,​ který je nejrozsáhlejším projektem Labky a ve kterém stále pokračujeme. Data z ESP8266 budeme posílat skrz Wifi připojení protokolem MQTT. Podrobnosti o protokolu, viz poslední odstavec s referencemi. Tímto protokolem se připojíme k MQTT brokerovi, který schromažďuje data ze zařízení publikovaná pod určitým tématem (topic). Jiná zařízení nebo aplikace naopak mohou data z konkrétního tématu přijímat. Podle obrázku vidíte, že odesílateli se říká publisher a tomu kdo přijímá subscriber. Samozřejmě můžete být obojím. Předlohou k řešení se stala architektura internetu věcí, kterou využíváme v SensoricNetu,​ který je nejrozsáhlejším projektem Labky a ve kterém stále pokračujeme. Data z ESP8266 budeme posílat skrz Wifi připojení protokolem MQTT. Podrobnosti o protokolu, viz poslední odstavec s referencemi. Tímto protokolem se připojíme k MQTT brokerovi, který schromažďuje data ze zařízení publikovaná pod určitým tématem (topic). Jiná zařízení nebo aplikace naopak mohou data z konkrétního tématu přijímat. Podle obrázku vidíte, že odesílateli se říká publisher a tomu kdo přijímá subscriber. Samozřejmě můžete být obojím.
  
Line 18: Line 19:
  
  
-===== Materiál =====+===== Materiál ​a schéma ​=====
  
   * ip66 waterproof case   * ip66 waterproof case
Line 28: Line 29:
   * pájitelné pole   * pájitelné pole
   * menší chladič   * menší chladič
 +
 +{{ :​project:​nodered_adc.png?​600 |}}
  
 ===== Deep sleep mód ===== ===== Deep sleep mód =====
 +Volba pevného stabilizátoru nebyla úplně nejštastnější. Později jsem zjistil, že je lepší step down měnič. Stabilizátor se při tomto rozdílu napětí zahřívá cca na 50°C. Z toho a i znaučného důvodu jsem zvolil jako řešení deep sleep mód, i když mi to v ten moment přišlo jako černá magie :). V momentu kdy ESP8266 spí se během chvilky stabilizátor ochladí. I tak je tam pro jistotu chladič, kdyby se běh programu zasekl a wifi byla stále aktivní. Chladič teplo razantně snížil...
 +
 +=== Jak to funguje? ===
 +Deep sleep mód vypíná celé CPU až na čítač, který při dosažení určitě hodnoty pošle log 0 z pinu D0, který by měl být připojen na pin RST. Pokud to takto zapojíte, počítejte s tím, že při flashování je nutné to rozpojit. Proto tam mám jumper.
 +
 +=== Kód ===
 +Samotné zavolání deep sleepu je jednoduché. Je potřeba nastavit pin D0/wake na WAKEUP_PULLUP.
 +<​code>​
 +pinMode(D0, WAKEUP_PULLUP);​
 +</​code>​
 +Pozor u node mcu je built in LED, ať se vám to pak nekříží a nespadnete do věčné instantní restartovací smyčky. ​
 +Po nastavení pinu už jen zavoláte v kódu spánek tam, kde to potřebujete
 +<​code>​
 +ESP.deepSleep(120000000,​ WAKE_NO_RFCAL);​
 +</​code>​
 +Prodleva je v tomto případě 120 s.
 +
 +=== Problémy ===
 +Problémy, které deep sleep mód přináší jsou následující. ​
 +
 +  * Při flashování je nutno rozpojit D0 a RST.
 +  * Druhým je připojení k wifi. Standardně je ESP schopné se znovupřipojit již za cca 110 ms, avšak dociluje toho tím, že si ukládá do flash paměti SSID, kanál na kterém bylo naposledy připojeno, IP adresu a bránu. Při každém deep sleepu by se tyto hodnoty zapsali znovu do flash paměti a vzhledem k tomu, že flash pamět vydrží kolem 1000 přepisů (pokud se nemýlím), tak tento stav nechcete. Proto je v kódu toto chování zakázáno:
 +<​code>​
 +WiFi.persistent( false );
 +</​code>​
 +  * Vše však něco stojí. Mám sice pevně danou IP, masku, bránu a režim stanice, ale daní za toto je potřeba znovu proskenovat dostupné kanály. Pokud máte v síti jen jednu wifi a zařízení se nepohybuje, pak s tím problém není :) a však v mém případě pojízdná plošina jezdí po chodbách. Připojení k wifi síti tedy trvá zpravidla 2870 ms.
 +  * Dále je problém na některých deskách s probuzením Wifi po deepsleep modu a proto je v kódu force příkaz, který si to preventivně vynucuje.
 +  * Další problém je, že nemusíte stihnout odeslat data, což se v mém případě stalo. Čekal jsem, že se to bude dít jen u instantního deep sleep módu, ale děje se to i u toho klasického. Hledal jsem řešení asi týden, nakonec to vyřešil kód těsně před sleepem, který data čte, dokud to jde.
 +  * Procesor se po tomto druhu spánku neprobouzí,​ ale restartuje. Přijdete tedy o hodnoty všech proměnných,​ pokud si je neuložíte někam externě do EEPROM, nebo interně, ale opět počítejte s tím, že opotřebováváte EEPROM. Do budoucna se chystám využit RTC hodiny, které mají 32K paměti :)
  
  
Line 60: Line 92:
 npm install node-red-dashboard npm install node-red-dashboard
 </​code>​ </​code>​
 +
 +Nastavíme si Node-Red tak, aby běžel aut. po startu jako služba.
 +<​code>​
 +sudo wget -O /​etc/​systemd/​system/​Node-Red.service https://​raw.githubusercontent.com/​ktndesai/​Node-RED/​master/​Node-Red.service
 +</​code>​
 +Je potřebea zkontrolovat skript pro službu, zda ukazuje správně na nodejs a node-red
 +
 +Skript /​etc/​systemd/​system/​Node-Red.service obsahuje následující dva řádky, kde jsem si upravil správně cesty podle mé skutečnosti
 +
 +<​code>​
 +ExecStart=/​usr/​bin/​node $NODE_OPTIONS /​usr/​lib/​node_modules/​node-red/​red.js $NODE_RED_OPTIONS
 +WorkingDirectory=/​root/​.node-red/​
 +</​code>​
 +
 +Po restartu by jste měli nalézt přes příkaz
 +<​code>​
 +systemctl status Node-Red
 +</​code>​
 +
 +svoji službu aut. spuštěnou
  
 Nyní máme připravený node-red s dashboardem. Do node-red editoru se lze dostat přes http://​localhost:​1880. Na dashboard proklikem z editoru přes tab dashboard a následně ikonou šipky na úhlopříčku nebo přes http://​localhost:​1880/​ui Nyní máme připravený node-red s dashboardem. Do node-red editoru se lze dostat přes http://​localhost:​1880. Na dashboard proklikem z editoru přes tab dashboard a následně ikonou šipky na úhlopříčku nebo přes http://​localhost:​1880/​ui
Line 104: Line 156:
  
 ===== Finální kód programu ===== ===== Finální kód programu =====
 +Původní kód najdete v předchozím projektu: [[https://​labka.cz/​wiki/​doku.php?​id=project:​esp8266_adc|Měření napětí pomocí ADC]]
 +
 Úpravy kódu: Úpravy kódu:
   * přidání kódu pro zasílání zpráv s napětím pomocí mqtt protokolu na mqtt brokera   * přidání kódu pro zasílání zpráv s napětím pomocí mqtt protokolu na mqtt brokera
Line 260: Line 314:
  
 ===== Node-red editor ===== ===== Node-red editor =====
-{{ :​project:​node-red.jpg?​400 |}}+{{:​project:​node-red.jpg?​400|}}{{:​project:​node-red_editor.jpg?​400|}} 
 Takto by se vám měl po přihlášení,​ zobrazit editor node-redu sprázdným pracovním prostorem. Případně bez přihlášení,​ pokud jste zabezpečení nepotřebovali. ​ Takto by se vám měl po přihlášení,​ zobrazit editor node-redu sprázdným pracovním prostorem. Případně bez přihlášení,​ pokud jste zabezpečení nepotřebovali. ​
  
 Nejprve bude potřeba vytvořit ve sloupci vpravo layout dashboardu. Vytvoříte si vlastní uzel, kde vyplníte Name a pod ním skupinu. Nejprve bude potřeba vytvořit ve sloupci vpravo layout dashboardu. Vytvoříte si vlastní uzel, kde vyplníte Name a pod ním skupinu.
-Podle toho jak budete přidávat různé grafické prvky, tak bude pak možno na tomto místě měnit pořadí. V tabu Site si lze nastavit rozměry základní dlaždice. V mém případě jsem nastavil 64x64 pro 1x1+Podle toho jak budete přidávat různé grafické prvky, tak bude pak možno na tomto místě měnit pořadí. V tabu Site si lze nastavit rozměry základní dlaždice ​widgetu. V mém případě jsem nastavil 64x64 pro 1x1
 + 
 +Pro každou změnu v node-red editou, u které chcete, aby se projevila, je potřeba kliknout na tlačítko "​Deploy"​
  
 Nyní k popisu uzlů, které jsem použil. Rozdělil jsem si to vizuálně na 3 svislé části. ​ Nyní k popisu uzlů, které jsem použil. Rozdělil jsem si to vizuálně na 3 svislé části. ​
  
 === První část === === První část ===
-První jsou vstupy AkkaMonitor/​napeti,​ wifiTimeMilis,​ pubTime. Tyto vstupy beru jako mqtt subscriber ze serveru, který je jako local MQTT broker. Do názvu jsem dal IP adresu serveru a standardní port 1883. Topic AkkaMonitor/​napeti,​ který odpovídá posílanému topicu v kódu programu. Pozor na lomítka. Pokud napíšeš /​Akkamonitor/​napeti,​ tak se jedná o jiný topic.+První jsou vstupy AkkaMonitor/​napeti,​ wifiTimeMilis,​ pubTime. Tyto vstupy beru jako mqtt subscriber ze serveru, který je jako local MQTT broker. Do názvu jsem dal IP adresu serveru a standardní port 1883. Topic AkkaMonitor/​napeti,​ který odpovídá posílanému topicu v kódu programu. Pozor na lomítka. Pokud napíšete /​Akkamonitor/​napeti,​ tak se jedná o jiný topic. 
 + 
 +{{:​project:​node-red_mqtt_sub.jpg?​400|}}
  
 === Druhá část === === Druhá část ===
Line 276: Line 335:
  
 === Třetí část === === Třetí část ===
-Výstupy do grafických prvků. "​VU"​ metry, grafy a odeslání informací na mail. V defaultním ​nastavneí ​to pošle jako předmět emailu topic a jako obsah emailu hodnotu napětí.+Výstupy do grafických prvků. "​VU"​ metry, grafy a odeslání informací na mail. V defaultním ​nastavení ​to pošle jako předmět emailu topic a jako obsah emailu hodnotu napětí. 
 + 
 +===== Výsledek na dashboardu ===== 
 +Takto to vypadá funkční ve finále  
 +{{ :​project:​akka_gui01.jpg?​400 |}}
  
 ===== Instalace zařízení ===== ===== Instalace zařízení =====
 +Instalace byla poměrně úsměvná. Zjistil jsem že deska není dřevěná ale cca 4-5mm plast, do kterého závit nevyříznu,​ jelikož závit potřebuje ještě výběh pro vrchol vrtáku i závitníku :) Posloužila však hliníková pásovina, na které jsou upevněná kolečka. Kabely jsou připájeny přímo na piny baterie pro fastony. Monitoruje se jen jedna baterie, jelikož se nabíjí v sérii. Pro jistotu jsem měřil i to zda nedochází k napěťovým špičkám při spuštění serv, ale zjevně je to obsloužené a nedochází k nim.
  
 +A teď už jen pár fotek:
  
 +{{:​project:​esp8266_ad0.jpg?​400|}}{{:​project:​zavitnik01.jpg?​400|}}{{:​project:​zavitnik02.jpg?​400|}}{{:​project:​akka.jpg?​400|}}
 ===== Reference ===== ===== Reference =====
 http://​mqtt.org/​ http://​mqtt.org/​
Line 289: Line 355:
  
 https://​nodered.org/​docs/​getting-started/​installation https://​nodered.org/​docs/​getting-started/​installation
 +
 +https://​ketandesai.co.uk/​os/​install-node-red-on-centos-7/​
  
 https://​nodered.org/​docs/​user-guide/​runtime/​securing-node-red#​editor--admin-api-security https://​nodered.org/​docs/​user-guide/​runtime/​securing-node-red#​editor--admin-api-security
  • project/esp8266_adc_grafana.txt
  • Last modified: 2019/07/10 15:16
  • by cyberian