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 13:11]
cyberian [Deep sleep mód]
project:esp8266_adc_grafana [2019/07/10 15:16] (current)
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... 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...
  
-Zpět k deep sleep módu problému ​s tím spojenýchPrincip ​je jednoduchý. Je potřeba nastavit pin D0/wake na WAKEUP_PULLUP.+=== 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 rozpojitProto tam mám jumper. 
 + 
 +=== Kód === 
 +Samotné zavolání deep sleepu ​je jednoduché. Je potřeba nastavit pin D0/wake na WAKEUP_PULLUP.
 <​code>​ <​code>​
 pinMode(D0, WAKEUP_PULLUP);​ pinMode(D0, WAKEUP_PULLUP);​
 </​code>​ </​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. ​ 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 zavoláte v kódu kde to potřebujete+Po nastavení pinu už jen zavoláte v kódu spánek tam, kde to potřebujete
 <​code>​ <​code>​
 ESP.deepSleep(120000000,​ WAKE_NO_RFCAL);​ ESP.deepSleep(120000000,​ WAKE_NO_RFCAL);​
Line 43: Line 50:
 Prodleva je v tomto případě 120 s. Prodleva je v tomto případě 120 s.
  
-Problémy, které deep sleep mód přináší jsou následující. ​První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:+=== 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>​ <​code>​
 WiFi.persistent( false ); WiFi.persistent( false );
 </​code>​ </​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.  +  * 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 problémn aně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. +  ​* ​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ší ​probé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.+  ​* ​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 :) 
 + 
 ===== Instalace mosquitto brokera a klienta ===== ===== Instalace mosquitto brokera a klienta =====
  
Line 78: 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 122: 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 278: 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 294: 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 307: 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.1562152311.txt.gz
  • Last modified: 2019/07/03 13:11
  • by cyberian