{"id":126,"date":"2020-11-25T22:53:57","date_gmt":"2020-11-25T21:53:57","guid":{"rendered":"https:\/\/www.berlinger.cz\/?p=126"},"modified":"2021-01-10T19:57:55","modified_gmt":"2021-01-10T18:57:55","slug":"mereni-elektriny","status":"publish","type":"post","link":"https:\/\/www.berlinger.cz\/blog\/mereni-elektriny\/","title":{"rendered":"M\u011b\u0159en\u00ed spot\u0159eby elekt\u0159iny"},"content":{"rendered":"\n<p><a href=\"https:\/\/www.berlinger.cz\/blog\/uvod-do-mereni-energii\/\" data-type=\"URL\" data-id=\"https:\/\/www.berlinger.cz\/blog\/uvod-do-mereni-energii\/\" target=\"_blank\" rel=\"noreferrer noopener\">Dva<\/a> <a href=\"https:\/\/www.berlinger.cz\/blog\/raspberry-pi-server-pro-senzory\/\" data-type=\"URL\" data-id=\"https:\/\/www.berlinger.cz\/blog\/raspberry-pi-server-pro-senzory\/\" target=\"_blank\" rel=\"noreferrer noopener\">\u010dl\u00e1nky<\/a> teoretick\u00fdch \u00favod\u016f m\u00e1me za sebou. Dneska se pod\u00edv\u00e1me na praktick\u00e9 m\u011b\u0159en\u00ed elekt\u0159iny. Tedy na moje konkr\u00e9tn\u00ed \u0159e\u0161en\u00ed.<\/p>\n\n\n\n<p>P\u0159ipome\u0148me si z\u00e1kladn\u00ed p\u0159ehled. Na za\u010d\u00e1tku m\u00e1me impulzn\u00ed elektrom\u011br, ten pos\u00edl\u00e1 impulzy do Arduina. To je se\u010dte a p\u0159es WiFi a MQTT po\u0161le na server, tam si to p\u0159echroupe NodeRED a po\u0161le do InfluxDB a nakonec n\u00e1m data zobraz\u00ed Grafana.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"768\" src=\"https:\/\/www.berlinger.cz\/wp-content\/uploads\/2020\/11\/IMG_3971-1-1024x768.jpg\" alt=\"\" class=\"wp-image-128\" srcset=\"https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3971-1-1024x768.jpg 1024w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3971-1-300x225.jpg 300w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3971-1-768x576.jpg 768w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3971-1-1536x1152.jpg 1536w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3971-1-2048x1536.jpg 2048w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3971-1-360x270.jpg 360w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3971-1-850x637.jpg 850w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>T\u0159\u00edf\u00e1zov\u00e9 elektrom\u011bry s impulzn\u00edm v\u00fdstupem, 1000 impulz\u016f \/ kWh<\/figcaption><\/figure>\n\n\n\n<!--more-->\n\n\n\n<p>Elektrom\u011bry s impulzn\u00edm v\u00fdstupem jsem na\u0161el a objednal na internetu a nechal elektrik\u00e1\u0159e nasadit do rozvad\u011b\u010de. Jsou to oby\u010d t\u0159\u00edf\u00e1zov\u00e9 elektrom\u011bry, cena okolo tis\u00edcovky. <a rel=\"noreferrer noopener\" href=\"https:\/\/www.elektromery.com\/product\/trifazove-elektromery-na-listu-din-neove\/elektromer-72d--0_25-100a-mid\/177\" data-type=\"URL\" data-id=\"https:\/\/www.elektromery.com\/product\/trifazove-elektromery-na-listu-din-neove\/elektromer-72d--0_25-100a-mid\/177\" target=\"_blank\">J\u00e1 konkr\u00e9tn\u011b kupoval tento<\/a>. Jeden elektrom\u011br m\u011b\u0159\u00ed celou \u010d\u00e1st topen\u00ed v technick\u00e9 m\u00edstnosti (zahrnuje tepeln\u00e9 \u010derpadlo, z\u00e1lo\u017en\u00ed elektro kotel, ob\u011bhov\u00e9 \u010derpadlo, akumula\u010dn\u00ed n\u00e1dr\u017e s patronou), druh\u00fd pak m\u011b\u0159\u00ed \u00fapln\u011b v\u0161echno ostatn\u00ed.<\/p>\n\n\n\n<p>Daj\u00ed se po\u0159\u00eddit i jednof\u00e1zov\u00e9 v \u0159\u00e1du jednotek stokorun. Tak\u00e9 se daj\u00ed po\u0159\u00eddit r\u016fzn\u00e9 moduly co komunikuj\u00ed u\u017e na n\u011bjak\u00fdho hotov\u00fdch protokolech jako nap\u0159\u00edklad Modbus. J\u00e1 jsem se necht\u011bl u\u010dit je\u0161t\u011b dal\u0161\u00ed novou technologii, tak\u017ee jsem s\u00e1hnul po oby\u010dejn\u00fdch impulzech. Je\u0161t\u011b si dejte pozor na po\u010det impulz\u016f za kWh. Mysl\u00edm \u017ee 1000 imp\/kWh je pro rodinn\u00fd d\u016fm nebo byt ide\u00e1ln\u00ed. D\u011blaj\u00ed se tu\u0161\u00edm i 500 nebo 800 imp\/kWh. Do m\u00e9n\u011b impulz\u016f bych ne\u0161el.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"786\" src=\"https:\/\/www.berlinger.cz\/wp-content\/uploads\/2020\/11\/IMG_3973-1024x786.jpg\" alt=\"\" class=\"wp-image-129\" srcset=\"https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3973-1024x786.jpg 1024w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3973-300x230.jpg 300w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3973-768x589.jpg 768w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3973-1536x1179.jpg 1536w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3973-2048x1572.jpg 2048w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3973-352x270.jpg 352w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3973-850x652.jpg 850w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>Sch\u00e9ma zapojen\u00ed m\u00e9ho elektrom\u011bru<\/figcaption><\/figure>\n\n\n\n<p>Princip je pom\u011brn\u011b jednoduch\u00fd. Ka\u017edou 1 Wh se vytvo\u0159\u00ed na kontaktech impulzn\u00edho v\u00fdstupu impulz, kter\u00fd jsme schopni pomoc\u00ed Arduino detekovat. Mus\u00edme tedy propojit Arduino s elektrom\u011brem. P\u00ed\u0161i pro zjednodu\u0161en\u00ed Arduino, ale pou\u017e\u00edv\u00e1m modul Wemos D1 mini. D\u00e1 se programovat p\u0159es Arduino IDE a m\u00e1 v sob\u011b v z\u00e1kladu u\u017e WiFi modul.<\/p>\n\n\n\n<p>Mal\u00e1 odbo\u010dka ohledn\u011b instalace. Modul mi p\u0159i\u0161lo nejvhodn\u011bj\u0161\u00ed um\u00edstit p\u0159\u00edmo do rozvad\u011b\u010de na DIN li\u0161tu. Zakoupil jsem proto <a rel=\"noreferrer noopener\" href=\"https:\/\/www.gme.cz\/univerzalni-montazni-adapter-na-din-listu\" data-type=\"URL\" data-id=\"https:\/\/www.gme.cz\/univerzalni-montazni-adapter-na-din-listu\" target=\"_blank\">dr\u017e\u00e1k na DIN li\u0161tu<\/a>, k n\u011bmu p\u0159i\u0161rouboval univerz\u00e1ln\u00ed plo\u0161n\u00fd spoj a n\u011bj to pak cel\u00e9 p\u00e1jel. Je\u0161t\u011b jsem pot\u0159eboval n\u011bjak\u00e9 nap\u00e1jen\u00ed, to jsem vy\u0159e\u0161il 5V sp\u00ednan\u00fdm zdrojem na DIN li\u0161tu, kter\u00fd se napojil na jisti\u010d p\u0159\u00edmo v rozvad\u011b\u010di. Napojen\u00ed na elektrom\u011bry nebo nap\u00e1jen\u00ed je pak \u0159e\u0161eno p\u0159es svorky, aby bylo mo\u017en\u00e9 cel\u00fd plo\u0161n\u00fd spoj v p\u0159\u00edpad\u011b pot\u0159eby snadno demontovat. P\u00e1jet bych to nedoporu\u010doval.<\/p>\n\n\n\n<p>Celkov\u00e9 sch\u00e9ma zapojen\u00ed je pom\u011brn\u011b jednoduch\u00e9, ale j\u00e1 ho nem\u00e1m, ani si v\u011bt\u0161inou ned\u011bl\u00e1m. K Arduinu p\u0159ivedete z 5V zdroje nap\u00e1jen\u00ed a pak dle n\u00e1sleduj\u00edc\u00edho sch\u00e9matu p\u0159ipoj\u00edte impulzn\u00ed v\u00fdstup elektrom\u011br\u016f na vybran\u00e9 piny na Arduinu. Tato zapojen\u00ed v\u011bt\u0161inou konzultuji s bratrem, kter\u00fd se p\u0159eci jen vyzn\u00e1 v elektronice o trochu v\u00edc a kter\u00e9mu i t\u00edmto d\u011bkuji. N\u00ed\u017ee tedy zapojen\u00ed kter\u00e9 mi doporu\u010dil. Tomu rezistoru se \u0159\u00edk\u00e1 pull up rezistor.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"539\" src=\"https:\/\/www.berlinger.cz\/wp-content\/uploads\/2020\/11\/IMG_3494-1024x539.jpg\" alt=\"\" class=\"wp-image-130\" srcset=\"https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3494-1024x539.jpg 1024w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3494-300x158.jpg 300w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3494-768x404.jpg 768w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3494-513x270.jpg 513w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3494-850x447.jpg 850w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3494.jpg 1193w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>Sch\u00e9ma zapojen\u00ed impulzn\u00edho v\u00fdstupu na Arduino<\/figcaption><\/figure>\n\n\n\n<p>Toto sch\u00e9ma je mou mantrou (a m\u016f\u017ee b\u00fdt i  va\u0161\u00ed), proto\u017ee naprosto toto\u017en\u011b jsem pak zapojoval m\u011b\u0159\u00e1k na vodu, jen jsem pou\u017eil rezistor s vy\u0161\u0161\u00edm odporem. A podobn\u011b byste zapojovali jak\u00e9koli za\u0159\u00edzen\u00ed na kter\u00e9m byste cht\u011bli m\u011b\u0159it impulzy.<\/p>\n\n\n\n<p>Pokud tedy v\u0161e nap\u00e1j\u00edte na plo\u0161n\u00fd spoj, p\u0159ipevn\u00edte na DIN li\u0161tu, m\u016f\u017ee v\u00fdsledek vypadat t\u0159eba jako na obr\u00e1zku n\u00ed\u017ee. Samotn\u00fd modul je na pin headeru (nev\u00edm jak se to \u0159ekne \u010desky) a d\u00e1 se tud\u00ed\u017e sundavat. To je docela fajn, kdy\u017e chci upravovat software, tak ho jednodu\u0161e sund\u00e1m, odnesu si k po\u010d\u00edta\u010di a po \u00faprav\u011b op\u011bt vr\u00e1t\u00edm. M\u016f\u017eu se ale klidn\u011b i p\u00edchnout microUSB kabelem do Arduino p\u0159\u00edmo kdy\u017e je v rozvad\u011b\u010di.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"768\" src=\"https:\/\/www.berlinger.cz\/wp-content\/uploads\/2020\/11\/IMG_3490-1024x768.jpg\" alt=\"\" class=\"wp-image-140\" srcset=\"https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3490-1024x768.jpg 1024w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3490-300x225.jpg 300w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3490-768x576.jpg 768w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3490-1536x1152.jpg 1536w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3490-2048x1536.jpg 2048w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3490-360x270.jpg 360w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3490-850x638.jpg 850w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>Rozpracovan\u00e1 deska spoje. Zespodu ji\u017e p\u0159i\u0161roubov\u00e1n dr\u017e\u00e1k na DIN li\u0161tu.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"768\" src=\"https:\/\/www.berlinger.cz\/wp-content\/uploads\/2020\/11\/IMG_3972-1024x768.jpg\" alt=\"\" class=\"wp-image-131\" srcset=\"https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3972-1024x768.jpg 1024w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3972-300x225.jpg 300w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3972-768x576.jpg 768w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3972-1536x1152.jpg 1536w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3972-2048x1536.jpg 2048w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3972-360x270.jpg 360w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/IMG_3972-850x637.jpg 850w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>Wemos D1 mini modul na DIN li\u0161t\u011b osazen\u00fd v rozvad\u011b\u010di, vpravo od n\u011bj 5V zdroj k nap\u00e1jen\u00ed<\/figcaption><\/figure>\n\n\n\n<p>M\u00e1m tam je\u0161t\u011b p\u0159\u00edpravu na napojen\u00ed na HDO rel\u00e9, abych mohl zaznamen\u00e1vat kdy b\u011b\u017e\u00ed jak\u00fd tarif. Zat\u00edm to ale nem\u00e1m dozapojen\u00e9. Nicm\u00e9n\u011b to bude u\u017eite\u010dn\u00e1 informace, d\u00edky kter\u00e9:<\/p>\n\n\n\n<ol><li>mohu kontrolovat a m\u00edt p\u0159ehled kdy jde kter\u00fd tarif<\/li><li>mohu p\u0159esn\u011bji po\u010d\u00edtat cenu za elekt\u0159inu<\/li><\/ol>\n\n\n\n<p>M\u00e1m tedy vy\u0159e\u0161en kompletn\u011b hardware, elektrom\u011bry m\u00e1m p\u0159ipojeny na piny D3 a D4. Kupodivu jsem to v\u0161echno trefil napoprv\u00e9 a na stran\u011b hardware nebyly \u017e\u00e1dn\u00e9 probl\u00e9my. Na &#8222;historky z nat\u00e1\u010den\u00ed&#8220; se tak m\u016f\u017eete t\u011b\u0161it u zapojov\u00e1n\u00ed m\u011b\u0159i\u010de vody. O serveru jsme se bavili v minul\u00e9m \u010dl\u00e1nku a ten mi t\u00e9\u017e b\u011b\u017e\u00ed. Je \u010das na trochu toho k\u00f3d\u011bn\u00ed. P\u0159ikl\u00e1d\u00e1m k\u00f3d pro Arduino kter\u00fd pou\u017e\u00edv\u00e1m, n\u00ed\u017ee ho pak trochu rozeberu.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;Arduino.h&gt;\n#include &lt;ESP8266WiFi.h&gt;\n#include &lt;PubSubClient.h&gt;\n\n#define PULSEPIN1 D3\nunsigned int pulse1Count;\n\n#define PULSEPIN2 D4\nunsigned int pulse2Count;\n\nvolatile unsigned long delayStart = 0;\n\n\/\/ Update these with values suitable for your network.\nconst char* ssid = \"YourWifiName\";\nconst char* password = \"YourWifiPassword\";\nconst IPAddress mqtt_server(192, 168, 0, 1);\nconst char* mqtt_user = \"ha_mqtt\";\nconst char* mqtt_password = \"YourMQTTPassword\";\nconst String mqtt_client_name = \"WemosD1Mini_EnergyMeter\";\nconst char* mqtt_topic = \"sensors\/electricity\";\nconst char* device_network_name = \"EnergyMeter\";\nconst int measurment_delay = 15; \/\/ delay in seconds\n\nWiFiClient espClient;\nPubSubClient client(espClient);\nunsigned long lastMsg = 0;\n#define MSG_BUFFER_SIZE\t(50)\nchar msg&#91;MSG_BUFFER_SIZE];\n\nvoid setup_wifi() {\n\n  delay(10);\n  \/\/ We start by connecting to a WiFi network\n  Serial.println();\n  Serial.print(\"Connecting to \");\n  Serial.println(ssid);\n\n  WiFi.mode(WIFI_STA);\n  WiFi.hostname(device_network_name);\n  WiFi.begin(ssid, password);\n\n  while (WiFi.status() != WL_CONNECTED) {\n    delay(500);\n    Serial.print(\".\");\n  }\n\n  randomSeed(micros());\n\n  Serial.println(\"\");\n  Serial.println(\"WiFi connected\");\n  Serial.println(\"IP address: \");\n  Serial.println(WiFi.localIP());\n  WiFi.printDiag(Serial);\n}\n\nvoid sendMessage()\n{\n  if(!client.connected())\n  {\n    return;\n  }\n  \n  snprintf (msg, MSG_BUFFER_SIZE, \"{\\\"pulses1\\\": %d, \\\"pulses2\\\": %d, \\\"hdo\\\": false}\", pulse1Count, pulse2Count);\n  Serial.print(\"Publish message: \");\n  Serial.println(msg);\n  client.publish(mqtt_topic, msg);\n\n  pulse1Count = 0;\n  pulse2Count = 0;\n  lastMsg = millis();\n}\n\nvoid reconnect() {\n  if((millis() - delayStart) &gt;= 5000 || millis() &lt; (delayStart - 1000))\n    {\n      Serial.print(\"Attempting MQTT connection...\");\n      \/\/ Attempt to connect\n      if (client.connect(mqtt_client_name.c_str(), mqtt_user, mqtt_password)) {\n        Serial.println(\"connected\");\n        sendMessage();\n      } else {\n        Serial.print(\"failed, rc=\");\n        Serial.print(client.state());\n        Serial.println(\" try again in 5 seconds\");\n        \/\/ Wait 5 seconds before retrying\n        delayStart = millis();\n      }\n    }\n}\n\nICACHE_RAM_ATTR void countPulse1()\n{\n  pulse1Count++;\n}\n\nICACHE_RAM_ATTR void countPulse2()\n{\n  pulse2Count++;\n}\n\nvoid setup() {\n  Serial.begin(9600);\n  \n  attachInterrupt(PULSEPIN1, countPulse1, FALLING); \n  attachInterrupt(PULSEPIN2, countPulse2, FALLING); \n\n  setup_wifi();\n  client.setServer(mqtt_server, 1883);\n}\n\nvoid loop() {\n\n  if (!client.connected()) {\n    reconnect();\n  }\n  client.loop();\n\n  if (millis() - lastMsg &gt; (1000 * measurment_delay) || millis() &lt; (lastMsg - 1000)) {\n    sendMessage();\n  }\n}<\/code><\/pre>\n\n\n\n<p>Krom\u011b standardn\u00ed esp knihovny pro WiFi budeme pot\u0159ebovat je\u0161t\u011b knihovnu pro MQTT protokol. Tedy knihovnu, kter\u00fd za n\u00e1s bude \u0159e\u0161it komunikaci s MQTT brokerem.<\/p>\n\n\n\n<p>\u00davodn\u00ed \u010d\u00e1st obsahuje nastaven\u00ed WiFi, serveru apod. D\u016fle\u017eit\u00e9 je m\u00edt nastavenou spr\u00e1vn\u011b adresu MQTT serveru. To jsem zapomn\u011bl zm\u00ednit u serveru &#8211; nastavte si v r\u00e1mci s\u00edt\u011b na sv\u00e9m routeru statickou IP adresu pro server, aby se v\u00e1m n\u00e1hodou n\u011bkdy v budoucnosti nezm\u011bnila. MQTT server m\u016f\u017ee i po\u017eadovat ov\u011b\u0159en\u00ed v podob\u011b jm\u00e9na a hesla.<\/p>\n\n\n\n<p>Po spu\u0161t\u011bn\u00ed (ve funkci setup) se pou\u017eije funkce <a rel=\"noreferrer noopener\" href=\"https:\/\/www.arduino.cc\/reference\/en\/language\/functions\/external-interrupts\/attachinterrupt\/\" data-type=\"URL\" data-id=\"https:\/\/www.arduino.cc\/reference\/en\/language\/functions\/external-interrupts\/attachinterrupt\/\" target=\"_blank\">attachInterrupt<\/a>, kter\u00e1 d\u011bl\u00e1 to, \u017ee pokud na nastaven\u00e9m pinu dojde ke zm\u011bn\u011b (dle typu nastaven\u00ed) tak se provede zadan\u00e1 funkce. Tzn. v tomto p\u0159\u00edpad\u011b, pokud na PULSEPIN1 (D3) p\u0159ijde impulz a nap\u011bt\u00ed za\u010dne klesat (FALLING), zavol\u00e1 se funkce countPulse1. Tato funkce pak p\u0159ipo\u010d\u00edt\u00e1 impulz a to je v\u0161e. V\u0161imn\u011bte si, \u017ee u metod coutPulse1\/2 je ICACHE_RAM_ATTR. Pro\u010d to tam je si u\u017e nepamatuju, ale \u0159e\u0161ilo to n\u011bjak\u00fd probl\u00e9m, kv\u016fli kter\u00e9mu to ne\u0161lo jinak zkompilovat. Ono v\u016fbec, ne\u010dekejte ode m\u011b n\u011bjakou velkou hloubku, m\u011b sta\u010d\u00ed kdy\u017e to funguje.<\/p>\n\n\n\n<p>D\u00e1le se pak se pak \u0159e\u0161\u00ed pom\u011brn\u011b standardn\u011b p\u0159ipojen\u00ed k WiFi a n\u00e1sledn\u011b p\u0159ipojen\u00ed k MQTT serveru. Tam je\u0161t\u011b zad\u00e1v\u00e1te port, na kter\u00e9m v\u00e1m MQTT broker b\u011b\u017e\u00ed.<\/p>\n\n\n\n<p>P\u0159i b\u011bhu aplikace (funkce loop) pak akor\u00e1t \u0159e\u0161\u00edm, zda jsme p\u0159ipojeni k MQTT serveru a pokud ne tak se sna\u017e\u00edme se znovu p\u0159ipojit. Obnova WiFi p\u0159ipojen\u00ed se \u0159e\u0161\u00ed n\u011bjak sama v dan\u00e9 knihovn\u011b. Nejsem si jist jak p\u0159esn\u011b to funguje, ale k v\u00fdpadk\u016fm WiFi mi do\u0161lo n\u011bkolikr\u00e1t a v\u017edy se v\u0161e bez probl\u00e9m\u016f samo obnovilo. K v\u00fdpadku MQTT serveru (p\u0159esto\u017ee WiFi funguje) m\u016f\u017ee snadno doj\u00edt nap\u0159\u00edklad p\u0159i aktualizaci.<\/p>\n\n\n\n<p>A nakonec, pokud ub\u011bhne ur\u010dit\u00fd \u010das (v m\u00e9m p\u0159\u00edpad\u011b 15s), tak ode\u0161leme po\u010det impulz\u016f na server a po\u010d\u00edtadlo vynulujeme. Data se pos\u00edlaj\u00ed ve form\u00e1tu JSON, co\u017e je op\u011bt pom\u011brn\u011b standard a pos\u00edlaj\u00ed se do ur\u010dit\u00e9ho MQTT topicu. Zpr\u00e1vu pos\u00edl\u00e1m i kdy\u017e je po\u010det pulz\u016f 0 a to z toho d\u016fvodu, abych na stran\u011b serveru mohl dob\u0159e kontrolovat, \u017ee data chod\u00ed a spojen\u00ed funguje, i kdy\u017e by t\u0159eba nebyl aktu\u00e1ln\u011b \u017e\u00e1dn\u00fd odb\u011br.<\/p>\n\n\n\n<p>Odeslan\u00e1 zpr\u00e1va (JSON) pak vypad\u00e1 t\u0159eba takto:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\"pulses1\": 2, \"pulses2\": 1, \"hdo\": false}<\/code><\/pre>\n\n\n\n<p>T\u00edmto m\u00e1m vy\u0159e\u0161enou \u010d\u00e1st hardware i software \u010d\u00e1st v rozvad\u011b\u010di a m\u016f\u017eu se pln\u011b p\u0159esunou k pohodl\u00ed po\u010d\u00edta\u010de. Data zpracov\u00e1v\u00e1m v NodeRED, kde jsem si vytvo\u0159il n\u00e1sleduj\u00edc\u00ed sch\u00e9ma (flow). Je mo\u017en\u00e9, \u017ee abyste vid\u011bli nody pro MQTT nebo Influx, budete muset doinstalovat n\u011bjak\u00e1 roz\u0161\u00ed\u0159en\u00ed pro NodeRED.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"417\" src=\"https:\/\/www.berlinger.cz\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-25-at-21.54.57-1024x417.png\" alt=\"\" class=\"wp-image-132\" srcset=\"https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-25-at-21.54.57-1024x417.png 1024w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-25-at-21.54.57-300x122.png 300w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-25-at-21.54.57-768x313.png 768w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-25-at-21.54.57-1536x626.png 1536w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-25-at-21.54.57-604x246.png 604w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-25-at-21.54.57-850x346.png 850w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-25-at-21.54.57.png 1576w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>Pohled na celkov\u00e9 NodeRED flow<\/figcaption><\/figure>\n\n\n\n<p>Za\u010dnete nodem \u00fapln\u011b vlevo, kter\u00fd v\u00e1m sb\u00edr\u00e1 data z MQTT z ur\u010dit\u00e9ho topicu. Nastaven\u00ed nodu vypad\u00e1 n\u00e1sledovn\u011b. Kdy\u017e vytv\u00e1\u0159\u00edte v\u016fbec prvn\u00ed MQTT node, tak si nastav\u00edte MQTT server, n\u00e1sledn\u011b u\u017e sta\u010d\u00ed jen vybrat z nab\u00eddky p\u0159ednastaven\u00fdch server\u016f.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1012\" height=\"600\" src=\"https:\/\/www.berlinger.cz\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-25-at-21.58.01.png\" alt=\"\" class=\"wp-image-133\" srcset=\"https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-25-at-21.58.01.png 1012w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-25-at-21.58.01-300x178.png 300w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-25-at-21.58.01-768x455.png 768w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-25-at-21.58.01-455x270.png 455w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-25-at-21.58.01-850x504.png 850w\" sizes=\"(max-width: 1012px) 100vw, 1012px\" \/><figcaption>Nastaven\u00ed MQTT nodu v NodeRED<\/figcaption><\/figure>\n\n\n\n<p>Data kter\u00fd tento node p\u0159ijme pak putuj\u00ed do dal\u0161\u00edch nod\u016f, tentokr\u00e1t nod\u016f s javascript funkcemi, kde si mohu data zpracovat. \u00dapln\u011b prvn\u00ed node je debug node, kter\u00fd mi m\u016f\u017ee vypisovat obsah zpr\u00e1v do konzole. D\u00e1le kdy\u017e vezmu \u017elur\u00e9 nody shora: Prvn\u00ed node mi zpracov\u00e1v\u00e1 informaci o HDO a pos\u00edl\u00e1 do Home Assistant senzoru (to te\u010f nebudeme rozeb\u00edrat). Druh\u00fd a t\u0159et\u00ed vyb\u00edr\u00e1 \u00fadaje pro dan\u00fd elektrom\u011br a pos\u00edl\u00e1 je do InfluxDB. T\u0159et\u00ed je s\u010d\u00edt\u00e1, abychom znali celkovou spot\u0159ebu. Tu bychom si pak mohli klidn\u011b s\u010d\u00edtat pak a\u017e v Grafan\u011b, ale co kdyby se to jednou t\u0159eba po\u010d\u00edtalo jinak, tak\u017ee tu celkovou rad\u011bji jednodu\u0161e s\u010d\u00edt\u00e1m. Posledn\u00ed node pak po\u010d\u00edt\u00e1 cenu. Tam to zat\u00edm oby\u010dejn\u011b n\u00e1sob\u00edm \u010d\u00e1stkou. Nicm\u00e9n\u011b by bylo dobr\u00e9 pak zaznamen\u00e1vat spot\u0159ebu i podle tarif\u016f (mimochodem d\u011blaj\u00ed se rovnou i dvoutarifn\u00ed elektrom\u011bry, ale je to dra\u017e\u0161\u00ed, tak jsem si \u0159ekl, \u017ee si to vy\u0159e\u0161\u00edm na stran\u011b software). Po\u010d\u00edtat cenu rovnou a ne a\u017e pak d\u00e1l v Grafan\u011b mi p\u0159ijde chytr\u00e9 kv\u016fli tomu, \u017ee se pak cena elekt\u0159iny m\u016f\u017ee zm\u011bnit a pokud m\u00e1me spot\u0159ebu zaznamenanou a n\u00e1sobenou cenou v dan\u00e9 dob\u011b, neovlivn\u00ed n\u00e1m aktu\u00e1ln\u00ed zm\u011bna ceny historick\u00e1 data, co\u017e by byla \u0161koda.<\/p>\n\n\n\n<p>N\u00ed\u017ee je javascript k\u00f3d funkce pro prvn\u00ed elektrom\u011br. msg.payload je v\u017edy zpr\u00e1va, kter\u00e1 p\u0159i\u0161la z p\u0159edchoz\u00edho node. V m\u00e9m p\u0159\u00edpad\u011b tedy z MQTT node, tedy JSON, kter\u00fd jsem vytvo\u0159ili a poslali z Arduina. Z n\u011bj si vyt\u00e1hneme \u00fadaj o po\u010dtu impulz\u016f pro prvn\u00ed elektrom\u011br. N\u00e1sledn\u011b \u00fadaje ulo\u017e\u00edme op\u011bt do msg.payload a vr\u00e1t\u00edme cel\u00fd objekt msg, kter\u00fd pak putuje podle nastaven\u00ed NodeRED flow do dal\u0161\u00edho nodu.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>p = JSON.parse(msg.payload);\n\nvar total = 0;\nif(Number.isInteger(p.pulses1) &amp;&amp; p.pulses1 &gt; 0)\n{\n    total += p.pulses1;\n}\n\nmsg.payload = total;\nreturn msg;<\/code><\/pre>\n\n\n\n<p>Posledn\u00ed node je InfluxDB node. Tam velmi podobn\u011b jako v p\u0159\u00edpad\u011b MQTT nejprve mus\u00edm nastavit InfluxDB server. \u00dadaje jsem z\u00edskal p\u0159i konfiguraci nebo InfluxDB m\u00e1 p\u0159\u00edpadn\u011b web admin, kde se daj\u00ed nastavovat datab\u00e1ze, u\u017eivatel\u00e9 atp. Kdy\u017e m\u00e1m server tak pak u\u017e jen velmi jednodu\u0161e nastav\u00edm pod jak\u00e9 m\u011b\u0159en\u00ed chci data ukl\u00e1dat. V m\u00e9m p\u0159\u00edpad\u011b jdou po\u010dty impulz\u016f z elektrom\u011bru 1 do m\u011b\u0159en\u00ed topen\u00ed.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1002\" height=\"580\" src=\"https:\/\/www.berlinger.cz\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-25-at-22.12.58.png\" alt=\"\" class=\"wp-image-134\" srcset=\"https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-25-at-22.12.58.png 1002w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-25-at-22.12.58-300x174.png 300w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-25-at-22.12.58-768x445.png 768w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-25-at-22.12.58-466x270.png 466w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-25-at-22.12.58-850x492.png 850w\" sizes=\"(max-width: 1002px) 100vw, 1002px\" \/><\/figure>\n\n\n\n<p>Jeden praktick\u00fd poznatek: p\u016fvodn\u011b jsem jako c\u00edlov\u00fd node pou\u017e\u00edval Home Assistant senzor, ale z n\u011bjak\u00e9ho d\u016fvodu se mi pak n\u011bkter\u00e9 impulzy ztr\u00e1cely a nebylo to v\u016fbec m\u00e1lo, t\u0159eba i polovina. Nedohledal jsem pro\u010d se to tak d\u011bje, asi tam doch\u00e1z\u00ed k n\u011bjak\u00e9 optimalizaci a p\u0159i v\u011bt\u0161\u00edm mno\u017estv\u00ed dat, kter\u00e9 se reportuj\u00ed \u010dasto mo\u017en\u00e1 Home Assistant vyhazuje n\u011bkter\u00e1 data? Je to ale divn\u00e9, proto\u017ee na webu jsem vid\u011bl p\u0159\u00edklady jak t\u00edm n\u011bkdo m\u011b\u0159\u00ed elekt\u0159inu, tak mo\u017en\u00e1 to m\u011b\u0159\u00ed jin\u00fdm zp\u016fsobem. Nap\u0159\u00edklad pro m\u011b\u0159en\u00ed teploty to \u017e\u00e1dn\u00fd probl\u00e9m nen\u00ed, data se pos\u00edlaj\u00ed mnohem m\u00e9n\u011b \u010dasto a i se m\u00e9n\u011b m\u011bn\u00ed. U p\u0159esn\u00e9ho m\u011b\u0159en\u00ed spot\u0159eby je to ale probl\u00e9m. Po zm\u011bn\u011b na pos\u00edl\u00e1n\u00ed dat p\u0159\u00edmo do InfluxDB je v\u0161e v po\u0159\u00e1dku. A zde je vid\u011bt kr\u00e1sa NodeRED a MQTT, sta\u010dilo zm\u011bnit jen c\u00edlov\u00fd NODE bez z\u00e1sahu do software na Arduinu. To si vesele d\u00e1l pos\u00edl\u00e1 data do st\u00e1le stejn\u00e9ho topicu a je mu jedno co s nimi d\u00e1l bude.<\/p>\n\n\n\n<p>A u\u017e jdeme do fin\u00e1le. T\u00edmto m\u00e1m v\u0161e hotovo a data se mi ji\u017e po\u010d\u00edtaj\u00ed a ukl\u00e1daj\u00ed na server. K zobrazov\u00e1n\u00ed dat pou\u017e\u00edv\u00e1m Grafanu. O tom se m\u016f\u017eu mo\u017en\u00e1 v\u00edce rozepsat n\u011bkdy p\u0159\u00ed\u0161t\u011b, i kdy\u017e m\u00e1m pocit, \u017ee jsem zat\u00edm jen nahl\u00e9dl pod pokli\u010dku. V principu si nastav\u00edte zdroj dat (v m\u00e9m p\u0159\u00edpad\u011b op\u011bt zad\u00e1te InfluxDB server) a pak si vytv\u00e1\u0159\u00edte jednotliv\u00e9 grafy a dashboardy.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"669\" src=\"https:\/\/www.berlinger.cz\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-25-at-22.28.10-1-1024x669.png\" alt=\"\" class=\"wp-image-136\" srcset=\"https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-25-at-22.28.10-1-1024x669.png 1024w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-25-at-22.28.10-1-300x196.png 300w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-25-at-22.28.10-1-768x502.png 768w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-25-at-22.28.10-1-1536x1004.png 1536w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-25-at-22.28.10-1-413x270.png 413w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-25-at-22.28.10-1-850x556.png 850w, https:\/\/www.berlinger.cz\/blog\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-25-at-22.28.10-1.png 2010w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>Nastaven\u00ed grafu pro zobrazen\u00ed spot\u0159eby topen\u00ed<\/figcaption><\/figure>\n\n\n\n<p>Grafana m\u00e1m hromadu nastaven\u00ed, je to asi celkem robustn\u00ed n\u00e1stroj. V\u00fd\u0161e vid\u00edte jak vypad\u00e1 nastaven\u00ed pro spot\u0159ebu topen\u00ed. Naho\u0159e m\u00e1te v\u017edy n\u00e1hled grafu, dole pak editujete dan\u00fd dotaz do datab\u00e1ze. Kdy\u017e m\u00e1te graf hotov\u00fd, tak si jej pak m\u016f\u017eete s dal\u0161\u00edmi grafy skl\u00e1dat do v\u0161emo\u017en\u00fdch dashboard\u016f nebo je sd\u00edlet a podobn\u011b.<\/p>\n\n\n\n<p>To je pro dne\u0161ek v\u0161e. Kdyby n\u011bjak\u00e1 \u010d\u00e1st byla nejasn\u00e1, mohu ji rozebrat detailn\u011bji v n\u011bjak\u00e9m dal\u0161\u00edm \u010dl\u00e1nku, dejte kdy\u017etak v\u011bd\u011bt. P\u0159\u00ed\u0161t\u011b m\u00e1m v pl\u00e1nu se pod\u00edvat na m\u011b\u0159en\u00ed spot\u0159eby vody.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dva \u010dl\u00e1nky teoretick\u00fdch \u00favod\u016f m\u00e1me za sebou. Dneska se pod\u00edv\u00e1me na praktick\u00e9 m\u011b\u0159en\u00ed elekt\u0159iny. Tedy na moje konkr\u00e9tn\u00ed \u0159e\u0161en\u00ed. P\u0159ipome\u0148me si z\u00e1kladn\u00ed p\u0159ehled. Na za\u010d\u00e1tku m\u00e1me impulzn\u00ed elektrom\u011br, ten pos\u00edl\u00e1 impulzy do Arduina. To je se\u010dte a p\u0159es WiFi a MQTT po\u0161le na server, tam si to p\u0159echroupe NodeRED a po\u0161le do InfluxDB a nakonec n\u00e1m data zobraz\u00ed Grafana.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/www.berlinger.cz\/blog\/wp-json\/wp\/v2\/posts\/126"}],"collection":[{"href":"https:\/\/www.berlinger.cz\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.berlinger.cz\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.berlinger.cz\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.berlinger.cz\/blog\/wp-json\/wp\/v2\/comments?post=126"}],"version-history":[{"count":7,"href":"https:\/\/www.berlinger.cz\/blog\/wp-json\/wp\/v2\/posts\/126\/revisions"}],"predecessor-version":[{"id":148,"href":"https:\/\/www.berlinger.cz\/blog\/wp-json\/wp\/v2\/posts\/126\/revisions\/148"}],"wp:attachment":[{"href":"https:\/\/www.berlinger.cz\/blog\/wp-json\/wp\/v2\/media?parent=126"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.berlinger.cz\/blog\/wp-json\/wp\/v2\/categories?post=126"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.berlinger.cz\/blog\/wp-json\/wp\/v2\/tags?post=126"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}