úterý 7. listopadu 2017

Arduino elektroměr, plynoměr a vodoměr

V sobotu 4. listopadu jsem měl na konferenci OpenAlt přednášku na téma odečítání elektroměru a vodoměru. Dlouho jsem se na tuto přednášku těšil, protože jsem ty odečty energií doma řešil déle než čtyři roky, nasbíral jsem při tom hromadu zkušeností a měl jsem velkou chuť se o ně podělit, abych dalším lidem ušetřil procházení slepých uliček a ještě přitom všechny pobavil mými pracovními postupy.

Bohužel jsem na to dostal jen 25 minut, což na tak velké téma nestačilo. Snažil jsem se říct všechno, ale po přednášce jsem měl pocit, že jsem řadu věcí jen nakousl a nedokončil, a některé důležité jsem dokonce zapomněl říct úplně.

Proto teď přistupuji k novému experimentu, kdy zkouším tutéž přednášku udělat znovu, doma, v klidu, bez časového omezení. Samotná prezentace ve formátu PDF je jako všechny moje předchozí dostupná na webu zde: pstehlik.cz/prezent/

Čerstvě natočené domácí video je tady: https://youtu.be/d-WzQa8GsAU


Ještě pár linků k věcem, které zmiňuju v přednášce:

Náhodně vygooglovaný 1fázový elektroměr.

Můj 3D model násadky odečítače vodoměru v OnShape.

Ebay odkaz na elektricky ovládaný ventil (až link přestane časem fungovat, použijte ta klíčová slova pro vyhledání nového prodejce stejné věci):
"DC 12V DN20 CR01 2 Way Brass Motorized Valve Electrical Ball Valve".

Plynoměr 3D tisk: Elster BK-G4 Gas Meter Sensor Clip

Budu rád, když vás tato moje domácí a OpenAlt přednáška povzbudí k vlastnímu bastlení :-) Určitě se pochlubte v komentářích buď tady na blogu nebo na G+ či na příští konferenci, kde se jistě potkáme :-)

P.S. ve videu nejspíš několikrát spletu kW a kWh (okamžitý odběr a celkovou spotřebu za určitý čas), ale nic si z toho nedělám. Hádám, že si to většina lidí dokáže v hlavě opravit. Komu to nějak víc vadí, ať se na to video raději nedívá.

78 komentářů:

  1. Ahoj Petře. Děkuji za tvůj článek a pěkné video. Po zhlédnutí mě to natolik nakoplo, že jsem ihned ze šuplíku vytáhl jeden Wemos mini ESP8266 a začal sestrojovat měření plynoměru :-) Menší problém byl s výběrem vhodně citlivého jazýčkového relé, nicméně vše se podařilo (TAP 15) a po vytvoření PHP stránek na domácím NASu již nemusím chodit opisovat měsíční stavy, vše je plně funkční, zautomatizované a zapisované. Jen brzy vyměním HW za ESP32, protože jako další chci připojit elektroměr, vodoměr a další jiné analogové měření. Takže ještě jednou moc díky a ber to jako pozitivní impuls k prospěšnosti tvé osvěty. Ahoj Tom

    OdpovědětSmazat
  2. Tento komentář byl odstraněn autorem.

    OdpovědětSmazat
  3. Objevil jsem
    - https://www.aliexpress.com/item/5-45-A-220V-50HZ-voltage-current-single-phase-Din-rail-KWH-Watt-hour-energy/32813249295.html
    - https://www.aliexpress.com/item/5-65-A-230V-50HZ-voltage-current-DDS238-2-ZN-S-single-phase-Din-rail/32812065998.html

    To sexy mi prijde, ze je existence RS485/modbus. Takze by se daly vycitat vsechny informace (treba nam se posledni dobou stava, ze zasadne klesne napeti). Jenom jsem jeste nenasel prehled prikazu, na ktere reaguje. Ale asi nemuzu chtit vsechno.

    Jdu jeden koupit na pokusy :)

    OdpovědětSmazat
    Odpovědi
    1. jak ste dopadli? sehnali jste a sprovoznili ho? zaujimalo by mne co vse lze vycist. diky

      Smazat
    2. Proč na měření spotřeby a přímé připojení do lokální sítě (WiFi) nepoužít Itead Sonoff POW R2
      cca 12 dolarů cena

      Smazat
    3. nejspíš proto, že Sonoff nezvládne víc než 15 A? Bavíme se o domovním přívodu, který má třeba 3x20 A, nebo taky 3x32 A.

      Smazat
    4. Potom možná toto... vlevo dole jsou další kategorie pro výběr...
      https://goo.gl/nCLnK8

      Smazat
  4. Ahoj, kdyby jste někdo chtěl podružný vodoměr s originálním impulsním výstupem, pak mohu nabídnou zcela nový kvalitní Siemens. Připojení závit 3/4. Cena 500,- Kč + pošta. A kdyby někomu přebýval s 1" (coulovým) závitem, pak bych měl veliký zájem zase já.

    OdpovědětSmazat
  5. Ahoj Petře, s gustem jsem shlédl tvé video o hledání viníků spotřeby a protože mám rád příběhy s dobrým koncem, tak bych rád věděl, zda ti realizovaná řešení pomohla najít ony viníky zvýšené spotřeby. Dík za odpověď.
    Vláďa

    OdpovědětSmazat
    Odpovědi
    1. To si s dovolením nechám na další přednášku - stavím totiž jedno zařízení, které by mělo pomoci snížit spotřebu a už ho mám skoro hotové, tak bych o něm mohl třeba někde pohovořit :-)

      Smazat
  6. Moc pěkná přednáška, taky mám doma plastový filtr na vodu a magnet proti tvrdosti vody takže jste ve mě vzbudil obavy o budoucnost filtru, jak je vidět u vás, detekci prasknutí filtru bych možná spíš řešíl kýblem pod filtrem a senzorem v arduinu na hladinu vody nevim jestli by to fungovalo dle mých představ ale bylo by snad pro detekci to rychlejší a přesné. Ještě jednou díky z inspiraci. Jarda V.

    OdpovědětSmazat
    Odpovědi
    1. Díky. Řeknu přesně, co by se stalo s kýblem pod filtrem: proud vody o tlaku 6 atmosfér by ten kýbl odfoukl na druhou stranu místnosti, zpřetrhal jakékoliv Arduino senzory a pak by už v poklidu danou místnost vytopil do výše oken, které by poté tlak vody vyvalil ven. Pokud by v místnosti nebyly okna, naplnila by se vodou až po strop.

      Smazat
  7. dobrý den, také jsem jeden čas zkoumal, jak měřit spottřebu u mě doma. Narazil jsem na tento projekt, který je taky zajímavý a má zajímavou myšlenku snímání proudu. Jestli to neznáte tak tady, je tam vše pěkně popsané: https://learn.openenergymonitor.org/electricity-monitoring/ac-power-theory/introduction

    OdpovědětSmazat
  8. Narazil jsem na další zajímavý čip CS5460A, jednofázový měřič el energie. Obsahuje vše potřebné pro měření a má i SPI připojení. Viz Datasheet. http://www.farnell.com/datasheets/32393.pdf

    OdpovědětSmazat
  9. Dobry den, shlédl jsem vudeo a velice poučné ,jen mě zarazil z vodoměru grafg kdek se dost zásadně lisi délka hranyh JeJto zpusobene velikostí toho kolečka? Neni to asi přesně v půlce ale špička oproti dlouhe pauze je zvláštní ..

    OdpovědětSmazat
    Odpovědi
    1. je to nejspíš způsobeno tvarem "kolečka" a umístěním snímače.

      Smazat
  10. Velmi pěkná přednáška :) Jen mě napadlo, není lepší u plynoměru spíše Hallova sonda, než jazýčkové relé? Blbnul jsem s ní jen párkrát ale řekl bych že je citlivější.

    OdpovědětSmazat
    Odpovědi
    1. Určitě ano, sám doma Hallovy sondy používám na detekci otevřených oken a jsem s nimi moc spokojen.

      Smazat
  11. Výborná přednáška, přesně o tomto uvažuji. K tomu vodoměru osobně bych měl problém s Čínou za 500kč. Vím, že Vám to funguje, otázka jak dlouho :-) Máte nějaký TIP na něco "jistějšího" než Čína za 5 stovek co bych mohl napojit na arduino.

    OdpovědětSmazat
    Odpovědi
    1. v Česku dělají ventily za 2500 Kč, dá se to jednoduše najít na webu.

      Smazat
  12. Jak elegantně přehazovat směr otevírání na ventilu? Já jsem našel 2 vývody a pro směr se přehazuje + a -.
    Dík

    OdpovědětSmazat
    Odpovědi
    1. Anglicky se to jmenuje h-bridge. Napr. zde http://www.robotroom.com/BipolarHBridge.html

      Smazat
    2. Případně jsou 3 vodičové a přepínat klasickým relé https://www.ebay.com/itm/DC12V-DN15-CR02-Electrical-Valve-G1-2-Inch-2-Way-CR02-3-Wire-Brass-Motorized-Bal/112795786930

      Smazat
  13. Elektricky ovládaný ventil pro ty co nemohou, nebo nechtějí zasahovat do rozvodu vody:
    https://www.aliexpress.com/item/DSHA-G1-2in-Electric-Automatic-Manipulator-Shut-Off-Valve-High-Pressure-Hydraulic-Valve-for-Alarm-Gas/32899697912.html?spm=2114.search0604.3.37.39b325afsUypy7&ws_ab_test=searchweb0_0,searchweb201602_3_10065_10068_318_319_10696_10084_10083_10618_452_10304_10307_532_10820_10821_10302_5727312_5727212_204_10059_10884_10887_100031_320_10103,searchweb201603_60,ppcSwitch_0&algo_expid=6224b059-544a-4895-886e-0944c1cb8b86-5&algo_pvid=6224b059-544a-4895-886e-0944c1cb8b86&priceBeautifyAB=0

    nebo i z wifinou:
    https://www.aliexpress.com/item/Electronic-Smart-Garden-Water-Shut-Off-Timers-WIFI-Irrigation-Controller-Watering-System-Automatic-Gas-Valve-Home/32903293047.html?spm=2114.search0604.3.36.240921aaXWDZ42&ws_ab_test=searchweb0_0,searchweb201602_3_10065_10068_318_319_10696_10084_10083_10618_452_10304_10307_532_10820_10821_10302_5727312_5727212_204_10059_10884_10887_100031_320_10103,searchweb201603_60,ppcSwitch_0&algo_expid=18d7b1e0-31e8-4e8b-9931-67d3f0ff3d62-5&algo_pvid=18d7b1e0-31e8-4e8b-9931-67d3f0ff3d62&priceBeautifyAB=0

    OdpovědětSmazat
  14. Ahoj,
    stale resim problem s merenim plynomeru BK-G4.
    Nedari se mi najit zadny pouzitelny senzor, kterym bych ho mohl odecitat.

    Zkousel jsem jazyckova rele, ale ty magnet v plynomeru vubec nedokazal sepnout. Bezny magnet z "nastenky" take ne. Uspel jsem az s neodymovym magnetem.
    Jde o tento typ https://www.aliexpress.com/item/10pcs-N-O-Reed-switch-Magnetic-Switch-2-14mm-Normally-Open-Magnetic-Induction-switch/32803902404.html

    Pak jsem zkousel hall sensor, konkretne typ 44E938 a opet modul z aliexpresu https://www.aliexpress.com/item/KY-003-3pin-Hall-Magnetic-Sensor-Module-for-Diy-Starter-Kit-KY003-1PCS/32847591938.html
    pro priblizne magnetu rukou se rozsveci led a dostavam impuls, ale magnet v plynomeru je opet moc slaby.

    Mate nekdo tip na pouzitelny sensor, ktery bude fungovat s plynomreem BK-G4? Idealne z ciny :-)

    Diky.

    OdpovědětSmazat
    Odpovědi
    1. Ahoj! Na plynomeru BK-G4 mám ten istý problém.Magnet v plynomeru nemože zepnút jazýčkový kontakt a tak mám podezrení zda tam vubec je.Vyskúšaných šest citlivých jaz.kontaktú a bez úspechu.Jak máš nejaké rešení daj vedet. Dekuji e-mail: stetijanin@seznam.cz

      Smazat
    2. Ahoj, ano, magnet tam opravdu je. Sam jsem zkusil hodne ruznych jazyckovych kontaktu a ani jeden mi to nesepne.
      Kdyz vsak pouziji hall sensor (KY-024 cca 0,4USD na aliexpresu) KY-024, tak pulzy dostavam. https://laskarduino.cz/vstupni-periferie-cidla/230536-keyes-ky-024-halluv-senzor.html
      Problem hallovky je v zakmitavani. Kdyz se plynomer stale toci a je neustaly odber, je to ok. Jenze kdyz se zastavi v nevhodne poloze - magnet je castecne u hallovky, tak sensor neustale cita. Za 20 minut je tak schopny nacitat vice, nez je vubec schopne protect plynomer za hodinu. Kdyz jsem pripojil logicky analyzator, tak dochazi k zakmitavani.
      Vubec se mi to nedari vyresit :-(
      Tady je videt me pripojeni hallovky: https://twitter.com/tuxmartin/status/1077883399942082560

      Co jsem nasel, tak original snimac taky pouziva jazyckovy kontakt https://www.briandorey.com/post/gas-meter-hall-effect-sensor
      Rad bych to vyresil nejak univerzalne. Ne sehnat nejaky jeden 10 stary uz nevyrabeny jazyckovy kontakt a vedet, ze to je jediny, ktery funguje.

      Jak to resi Petr Stehlik? Stejny problem mam u vodomeru se senzorem TCRT5000 - take dochazi k zakmitum.
      Uvitam jakoukoliv radu.

      Smazat
    3. ukazoval jsem graf naměřených hodnot z TCRT5000 a taky oblast, kterou jsem vymezil jako "zakázanou". Už si to nepamatuju přesně, ale zkrátka je tak velký rozdíl mezi světlou a temnou stranou Síly, že mi to kmitat nemůže. Asi bych měl uveřejnit ten algoritmus, aby to bylo zřejmé.

      Smazat
    4. Ano, to by bylo skvele :-)

      Smazat
  15. Nahoře jsem funkční typ napsal. Spolehlivě snímá už 11 měsíců,

    OdpovědětSmazat
    Odpovědi
    1. Ano, ale "TAP 15" je podle meho hledani nejaky snimac od Jablotronu, ktery se uz neprodava https://domovni-alarmy.heureka.cz/jablotron-tap-15-magneticky-kontakt-tap-15/

      Smazat
  16. např. https://www.abalarm.cz/ishop/magneticke-kontakty/603-tap-15-bila-zavrtny-mensi-2vodic--8595584600378.html

    OdpovědětSmazat
  17. Jazýčkových relé je mnoho typů, nejde jen o citlivost ale kam a jakým způsobem se přivádí magnetické pole. Některá relé reagují lépe, když je magnet přikládán na kraji relé (prakticky nad vodičem, který k relé vede) a ne uprostřed skleněné trubičky. Někdy je potřeba trochu experimentovat.
    https://www.reed-sensor.com/characteristics-reed-switches/
    http://www.hsisensing.com/wp-content/uploads/2016/03/HSI_Reed_Switch_Applicaton_Notes_v12_2013.pdf

    Co se týká trvalých zákmitů hallovy sondy, dá se řešit pomocí mikroprocesoru, který snímá impulsy a v případě, že je doba mezi příchozími impulsy kratší, než doba mezi impulsy, kterou je schopen plynoměr při největším odběru generovat, vyhodnotí se to, jako impuls falešný.

    OdpovědětSmazat
  18. Super video díky za něj :-) Už několik měsíců zbírám informace o měření spotřeby tak jsem se zájmem video celé zhltal. Díky za chuť tohle natočit a zveřejnit.

    Ijacek.007

    OdpovědětSmazat
  19. Pekne reseni, diky za sdileni. Mam trochu strach nacpat invazivne neco do privodu elekriky, nehlede na malo mista v rozvadeci a nutnost nejak posunout ostatni jistice.
    Co takhle merit jen proud neinvasivne? https://www.aliexpress.com/item/32715724000.html?spm=a2g0s.9042311.0.0.8eb74c4dltyk0m

    OdpovědětSmazat
    Odpovědi
    1. přesně tohle už mám nachystané 1,5 roku, že vyzkouším. Snad už se konečně k tomu dostanu!

      Smazat
  20. Dostal jsem se do fáze, kdy z elektroměru odečítám spotřebu a načtené hodnoty ukládám do databáze (ID|TIMESTAMP|kWh). Ukládají se kumulované spotřeby (stejné číslo, jaké je vidět na displeji elektroměru)
    Je nějaká zkušenost, jak z databáze pomocí SQL SELECT načítat spotřebu za dny,týdný, měsíce... ?

    OdpovědětSmazat
    Odpovědi
    1. samozřejmě, to je hračka, ale doporučuji zvážit databázi jménem InfluxDB - ta časem sama agreguje a zapomíná starší data, to se může hodit.
      Anebo použít RRDTool - to je DB generující rovnou grafy.

      Smazat
    2. Tak já nad tím bádám už asi 2 dny a jako hračka mi to rozhodně nepřijde. Rád se naučím něco nového. Je ten SELECT někde k dispozici?
      Ad InfluxeDB a RRDToo nemám zkušenosti, ale vypadá to zajímavě, zkusím postudovat.

      Smazat
    3. Taky bych doporucil InfluxDB, je na ukladani takovych dat primo delana. Vyhoda InfluxDB je, ze nemusite resit schema, proste tam posilate data. Klienti jsou pro vsechny jazyky, jde to jednoduse i "rucne" pres http. Dotazovani je velmi podobne SQL. Udelat prumer za tyden, mesic atd, je strasne jednoduche. Mam s tim profesni zkusenosti a pouzivam to na veskery domaci monitoring. Jen bych doplnil, ze to downsamplovani a zapominani nefunguje samo, musi se to s mensim usilim nastavit.
      Data z InfluxDB umi s minimalnim usilim v hezkych grafech zobrazit jejich Chronograf ci napr. Grafana.
      Vse muze bezet treba na RaspberryPI.

      To jsem se chtel zeptat prave p. Stehlika, proc, kdyz ma arduino s eth. shieldem, ma web na arduino a resi (ne)zapominani hodnot, kdyz je spolehlive to posilat nekam do DB.

      Smazat
    4. nevím teď vůbec, pane Unknown, které řešení (ne)zapomínání hodnot máte na mysli. Pokud u mého třífázového elektroměru, tak to asi bylo myšleno tak, že web server přímo v tom Arduinu má ukazovat stejné hodnoty jako oficiální elektroměr. Ale opravdu nevím, o čem přesně teď mluvíme. Chtělo by to asi živější chat na případné vyjasnění.

      Smazat
    5. Pardon za Uknown, az ted jsem zjistil v ramci googlovke integrace musim nastavit Display name.

      Ve videu zminujete, ze kdyz se z nejakeho duvodu Arduino restartuje, tak zapomene puvodni countery.
      Tak zda misto toho aby Arduino bylo zoodpovedne za snimani spotreby a zaroven to zobrazovalo pres web server, co bezi na nem, jak prezentujete ve videu, proc nezvolit spolehlivejsi zpusob a posilat do db a zobrazit to nejakym jinym serverem (custom web, grafovy), coz zaruci persistenci a jednodussi spravu zobrazovanych informaci (napr spotreba per den/tyden/mesic, jako resi p. Jakes).
      Na druhou stranu chapu, ze architektura se tim zesloziti a uz to neni tak "jednoduche a elegatni" reseni ciste pomoci Arduina.

      Smazat
    6. To je historická záležitost, kdy jsem se ještě nedokázal psychicky připravit/přemluvit na to, že v domě běží nějaký hlavní společný server, který všechno řídí a když klekne, tak nejede nic. Místo toho mám už několik let malinké samostatné jednotky s web servery, které řídí vždycky jednu záležitost, na ničem jiném nezávisí a když náhodou nejedou, tak má problém jen jedna věc, ale všechny ostatní prvky domácnosti fungují normálně.

      Všichni ostatní to dělají přes ten hlavní domácí server. Možná na to jednoho krásného dne taky přejdu, ale zatím se přiznám, že mi vyhovují ty samostatné malé řídicí jednotky.

      Smazat
    7. Tak jsem nainstaloval/rozchodil influxDB a naimportoval data.
      Struktura je jednoduchá: timestamp, value
      value jsou rostoucí hodnoty (postupné načítání elektroměru v kWh).
      Ležím v tom od pátku, ale do teď jsem našel způsob, jak nad těmi daty udělat dotaz, který zobrazí denní (měsíční, hodinovou, ....) spotřebu.
      Pomůže, prosím, někdo?

      Smazat
    8. do DB by to chtělo ukládat nikoliv okamžitou hodnotu, ale rozdíl (přírůstek) od minulého měření.

      Smazat
    9. Pane Jakes, Urcite bych nechal ten counter, z toho se rozdily nechaji dopocitat. Pro vypocet rozdilu pouzijte napr. fuknci Non_negative_derivative ( https://docs.influxdata.com/influxdb/v1.7/query_language/functions/#non-negative-derivative). Druhy parameter je casovy interval pres ktery pocita zmenu. Pokud chcete napr denni prehled, date 24h. Pokud chcete videt prubeh odberu v danem dni, nechate klidne default 1s.
      Cely select musite vhodne omezit casovym oknem pres time > x and time > y (posledni tyden: time > now()-7d). Zkuste to v chronografu ci grafane.

      Smazat
    10. Velmi chytré! Sice to způsobí problém v případě, že dojde k vynulování čítače, ale jinak parádní využití možností InfluxDB. Vy mě snad nakonec přesvědčíte tam tu elektřinu posílat :-)

      Smazat
    11. NON_NEGATIVE_DERIVATIVE jsem zkoušel. Nějak se mi nedařilo. Nepomohl byste s konkrétním selectem? Já zkoušel viz níže a select nevracel žádná data.
      > select derivative(max(value)) from "mrazirna" GROUP BY time(1d)

      V databázi údaje jsou:
      > select max(value) from "mrazirna" GROUP BY time(1d)
      name: mrazirna
      time max
      ---- ---
      1564358400000000000 0
      1564444800000000000 150
      1564531200000000000 346.7
      1564617600000000000 551.1
      1564704000000000000 755.2
      1564790400000000000 939.9
      1564876800000000000 1117
      1564963200000000000 1309.4
      1565049600000000000 1494
      1565136000000000000 1721.1
      1565222400000000000 1936


      PS:
      O ukládání rozdílů jsem nikdy neuvažoval, měřák mi rozdíly neposkytuje a abych k tomu ještě psal nějaký skript... to se mi fakt nechce. A navíc si myslím, že to není příliš systémové řešení.

      Smazat
    12. Agregacni funkce v InfluxDb potrebuji omezit cas zespoda. Takze ve Vasem pripade: select derivative(max(value)) from "mrazirna" where time > now()-7d group by time(1d)

      Smazat
    13. Nádhera, díky.
      https://petr.maxbox.cz/index.php/2019/08/28/monitoring-power-consumption-kwh-using-node-red-and-influxdb/

      Smazat
    14. Asi jsem jásal předčasně. InfluxDB nemá datové funkce jako týden, měsíc, rok....
      Nějaké nápady, zkušenosti?

      Smazat
    15. Co konkretne potrebujete s temi datovymi funkcemi delat? Vetsinou si vypocet casoveho intervalu zaridi aplikace co tu db pouziva.

      Smazat
    16. Myslel jsem, že je (např. pro Grafana) potřeba vytvořit select (tzn. vydolovat spravna data)a ta aplikaci předložit ke zobrazení. Dále se to hodí například pro fakturaci nájemníkům.

      Smazat
    17. Visualizacni tooly maji vetsinou template selectu a casove udaje doplnuji dle nastaveni dashboardu.
      Pro fakturaci, i kdyz to budete delat rucne pres cmd terminal, tak stejne znate datumy.
      Samozrejme, select pres jeden rok a group by pres kalendarni mesic jednoduse nepujde, protoze db ceka stejny interval.
      Pokud to je neco jineho, musite napsat konkretni queru co Vam nejde.

      InfluxDb nove nabizi if Flux jazyk pro praci z daty. Je to defaulne ve verzi InfluxDb 2.0, ale da se to zapnout i na 1.7.
      Je to slozitejsi zapis, ale zase tam lze udelat mnohem vic veci. Literal casove intervalu lze zapsat i s mesicem (1mo) ci rokem (1y), umi napr. i joinu: https://docs.influxdata.com/flux/v0.36/

      Smazat
    18. Pokročil jsem ve zpracování uložených dat z vodoměrů a elektroměrů. Jak zmíněno výše, mám jednoduchou tabulku (ID|TIMESTAMP|total_kWh), kam ukládám aktuální stavy elektroměru.

      Díky OBROVSKÉ pomoci Keith Medcalf na SQLite foru ( http://sqlite.1065341.n5.nabble.com/ ) je zde elegantní řešení k zpřístupnění dat. Schválně píšu zpřístupnění, protože nejde o načítání uložených dat, ale všechna data, která dotaz vrací, jsou počítána lineární interpolací.

      Jinými slovy: na uložené hodnoty se díváme jako na body souřadnic x (timestams) a y (total_kwh).
      Mezi každou dvojicí bodů se při dotazu spočítají směrnice přímky.
      Pomocí těchto směrnic se následně počítají hodnoty, které nás zajímají. Princip je podobný jako u Process Historians.

      Databázi SQLite s daty, SQL query a projekt pro DB browser pro SQLite jsem uložil zde:
      https://www.maxbox.cz/nextcloud/index.php/s/N6DJEYT7MtbzmHf

      Koho by zajímala komunikace s Keith Medcalfem, tak zde:
      http://sqlite.1065341.n5.nabble.com/select-for-power-meter-accumulated-total-readings-tp108058.html

      Tímto Keith Medcalfovi děkuji, naučil jsem se s jeho přispěním mnoho nového.

      Smazat
  21. Tento komentář byl odstraněn autorem.

    OdpovědětSmazat
  22. Zdravím.

    Chtěl bych se zeptat zda jste neřešil napětí přiváděné na S0. Já používám Wemos D1 mini, který pracuje s 3.3V, ale elektroměry (mám dva) pracují s napětím 5-27V (dle jejich datasheetu). Na jednom elektroměru mi to funguje, ale druhý "nic nedělá". Sice na něm naměřím 3.3V, ale nepřijde žádné přerušení i když LED na něm bliká. Samozřejmě otázka je jestli výstup S0 na něm vůbec funguje, protože mi to nedalo a celé jsem to předělal na Arduino UNO a pracoval s 5V a také nic.
    Obecně si myslíte, že by ten S0 výstup měl fungovat i když se použije napětí 3.3V?

    Děkuji za odpověď.

    OdpovědětSmazat
    Odpovědi
    1. Dotazu moc nerozumím. Obecná doporučení pro ESP8266 jsou:
      1) používat jako logickou 1 napětí 3.3V
      2) jako vstupy/výsptupy přednostně používat doporučené piny
      https://randomnerdtutorials.com/esp8266-pinout-reference-gpios/

      odstavec: Best Pins to Use – ESP8266
      Tzn. pro vás asi některý z pinů GPIO12,GPIO13,GPIO14

      Na napájecím napětí elektroměrů nezáleží, záleží na tom, jak se chová jejich výstup, který dává pulsy kWh. Jestli používá logiku 3.3V, nebo 5V.

      Smazat
    2. Díky za snahu pomoci.

      Já použil pin GPIO0 na Wemos D1 mini je to pin D3, tak abych využil PULL-UP rezistor.
      Ohledně napájecího napětí elektroměru se jedná o omyl. Tam problém není, ale dle specifikace elektroměrů oba pracují s napětím 5-27V pro S0. Jeden mi na jednom Wemosu (ESP8266) funguje, ale druhý s druhým Wemosem neregistruje žádné přerušení.

      Bohužel jsem neměl prozatím čas je prohodit, tak abych zjistil zda druhý elektroměr nemá nefunkční S0 výstup.

      Smazat
    3. Mám pocit, že se trochu míjíme.
      Jaký SW na ESP8266 používáte?
      Jak elektroměr signalizuje pulsy? Funguje jako spínač (tak jak píše Petr Stehlík)?
      Pečlivě si přečtěte tabulku, na kterou jsem Vám poslal odkaz.
      D3 (GPIO0) boot fails if pulled LOW!!!!
      Dopourčuji použít některý z pinů GPIO12,GPIO13,GPIO14. I u nich se dá nastavit interní pull-up.

      Smazat
    4. Tak jsem si konečně udělal čas na další testy.
      Použil jsem piny, tak jak jsi napsal, ale výsledek stejný. Tak jsem Wemos připojil k elektroměru, který mi již s jiným Wemosem funguje a i v tomto případě to fungovalo. Takže jsem se zase vrátil k druhému elektroměru a k Arduino UNO (z Wemose 3.3V na UNO 5V) a pořád nic, ale ve chvíli kdy se na elektroměru posunul čítač (jedna pozice za desetinnou čárkou) tak to vyvolalo přerušení. Tak jsem se zase vrátil na Wemos (3.3V) a čekal jsem až se opět posune čítač o další desetinu a opět to zafungovalo i na tom Wemosu.

      Takže i když na elektroměru bliká LED každých 10 Wh (100 bliknutí na 1kWh) tak impuls na S0 přijde až každých 100 Wh až když se posune čítač desetiny kilowathodiny - tzn. 10 impulsů za 1kWh.

      Smazat
    5. Impuls až za 100 Wh je strašně málo. Chce to mnohem častěji. Skoro by se u tohoto konkrétního typu elektroměru oplatilo číst to blikání LEDkou pomocí fotodiody ;-)

      Smazat
    6. Jj, je to dlouhá prodleva pro sledování nízkých odběrů, ale já to mám použité pro sledování spotřeby tepelného čerpadla (vzduch-vzduch) tak mi to tolik nevadí ;-)

      Smazat
    7. Takže to vlastně od začátku fungovalo, jen nechodily impulsy?

      Smazat
    8. Ahoj.

      Jj. Jelikož LEDka má frekvenci 640 bliknutí za 1kWh a impuls jen 10 sepnutí za 1kWh, tak po několika bliknutí LEDky a žádném impulsu jsem to celé vypnul a hledal chybu. Prostě až jsem se jednou přiblížil spotřebovaným 100Wh tak mi přišel impuls. Pak mi to nedalo a našel jsem datasheet od elektroměru a tam to bylo popsané. Prostě jsem se domníval, že to má 100 sepnutí za 1kWh a nikdy jsem to nevydržel až jednou se to stalo :-)

      Teď mám, ale jiný problém. Pořídil jsem si jiný elektroměr, který má frekvenci LED i S0 1000 impulsů/bliknutí za 1kWh. Přerušení funguje, to je v pohodě. Ale co se děje je to, že po cca 20 - 30 impulsech se Wemos resetuje nebo zamrzne. Mám to připojené přes USB a sleduju výpis na seriovém monitoru. Taky se stalo, že se to resetovalo pořád dokola až jsem byl nucen vyvolat reset přes tlačítko na Wemosu a pak se to zase umoudřilo, ale po dalších 20-30 impulsech znovu zátuh.

      Měl jsem to naprogramované tak, že po každém přerušení se volal WifiClient a zapisoval jsem záznam do databáze na DB serveru v síti. Tam se zapsal do tabulky záznam a dopočítala se triggerem průměrná spotřeba od předchozího impulsu a celé se to vrátilo do Wemose kde jsem to opět vypsal na seriový monitor - pro kontrolu.

      Jelikož přerušení, zápis a návrat hodnot byl každé 4 vteřiny, tak jsem to předělal, že se načítala přerušení do čítače a zapisoval jsem to každé páté přerušení. Domníval jsem se, že by mohl být problém při tak častém zápisu a vyhodnocování. Bohužel agregace přerušení a zápis až po splnění podmínky tomu nepomohl.

      Prosím, nenapadá někoho kde by mohl být problém? ;-)

      Díky za případné nakopnutí ;-)

      Smazat
    9. hlavně nezapomenout, že v přerušení se nesmí dělat nic delšího než jen nastavit proměnnou jako signál, že nastalo přerušení :-)

      Smazat
    10. Díky za odpověď.

      Tohle je program volaný při přerušení:

      void countTCE(){
      detachInterrupt(TCE_inp);
      counterTCE = counterTCE+1;
      blinkLED(LED_TCE);
      attachInterrupt(digitalPinToInterrupt(TCE_inp), countTCE, FALLING);
      }

      … je pravda, že tam je navíc volání bliknutí LEDky. Dnes už je pozdě. Zítra to odstraním a zkusím to bez toho.

      S pozdravem

      Dan

      Smazat
    11. já bych tam měl jen ten jeden jediný řádek s inkrementací čítače, víc tam nepatří.
      Pak je ještě potřeba ošetřit čtení a psaní do takto sdílené proměnné, která samozřejmě musí být typu volatile, ale to je na delší povídání.

      Smazat
    12. A co použít ESPEasy, nebo Tasmota? Nemusel byste nic programovat :D

      Já používám ESPEasy plus mqtt plus node-red a naprostá spokojenost.

      Smazat
    13. Díky za návrh na ESPEasy a Tasmotu. Programování mi nevadí, je to jednoduché, jen nejsem znalý elektroniky (původně jsem stavař přeučený na IT ;-) ).
      Každopádně po všech změnách v připojení Wemose a využití PINů jsem nakonec zjistil, že při připojení dvou elektroměrů a vložení do krabičky na Din lištu to po startu fungovalo správně, ale po celkem krátké době to opět začalo blbnout. Mám tam 3 LEDky, kdy jedna jen bliká ve frekvenci 500ms nesvítí/500ms svítí - to je jen takový jako status celého "systému". Druhá LEDka má bliknout po zápisu do DB a návratu určité hodnoty - pro elektroměr pro FVE (jeden panel 250Wpeak a jedním měničem 240V) a třetí LEDka má bliknout po dovršení určité hodnoty čítače a zápisu do DB a návratu určité hodnoty (jiné než v případě FVE).
      Bohužel po čase to celé začalo blbnout a to tak, že stavová LEDka byla úplně mimo frekvenci 500/500ms - svítí/nesvítí - to bych ještě pochopil, protože zápis do DB a návrat hodnoty může chvilku trvat, ale tahle LEDka byla úplně "zmatená".
      No a pak jsem zjistil, že v DB pro FVE byly záznamy i v noci kdy samozřejmě žádné záznamy neměly být a tyto záznamy se podobaly spotřebě tepelného čerpadla ve Stand-by a naopak v DB pro TCE byly záznamy, které elektroměr pro TCE nemohl vygenerovat a taky jsem si všiml, že elektroměr pro TCE má takt pro bliknutí vlastní LEDky a výstupu S0 nastavený na 1000imp/kWh a čítač jsem měl nastavený tak, že LEDka na Wemosu (ne interní, ale vlastní na definovaném PINu) blikla po 3 někdy po 4 bliknutí LEDky na elektroměru přitom zápis do DB a bliknutí na Wemosu mělo dojít po 5ti bliknutí na elektroměru.

      Takže zmatek.

      Nakonec jsem to rozebral a otestoval připojení vždy jen jednoho elektroměru. V obou případech to pak fungovalo spolehlivě. V programu problém nebude, protože ten je hrozně jednoduchý. No asi holt udělám pro každý elektroměr jeden Wemos. Problém v tom není Wemosů mám dost :-)

      Smazat
  23. S0 se chová hodně podobně jako spínač, napětí na něm žádné být nemá, si myslím. Samozřejmě je to polovodičový spínač, takže ohmmetrem změřit nepůjde (leda byste měl štěstí na správnou polaritu při měření). Ale pro představu, jak se to chová k přivedenému napětí, to myslím hodně pomůže.
    Mám tam ale připojeno Arduino na 5V napájení, takže ruku do ohně za 3,3 V nedám.

    OdpovědětSmazat
  24. Dobrý den,
    poslech jsem si tuto super přednášku a chtěl bych také bastlit.

    Sháním nějaký ten ventil a je zde několik možností zapojení. Myslím, že ideální bude CR02 (3 dráty, open,close,GND), ale u těch mi AliExpress stále píše že nelze dodat do ČR. Pak je zde jeden se zapojením CR01 (2 dráty, +-open, -+ close), ale to nevím, jak zapojit do Arduina - je ještě třeba konverzi z 5 na 12V.

    Můžete mi prosím někdo poradit?

    Nejvíce se mi ale líbí zapojení CR05 (5 drátů se signalizací stavů), ale to je třeba stále napájet. Tipuji, že je to právě proto, aby chodila signalizace stavu (např. při uzavření se spojí napájení se signalizací closed). Co se ale stane, když přestanu napájení posílat? Myslím, že mechanická část se nehne (tedy ventil zůstane zavřený), jen přestane chodit signál, ale pokud by mi to někdo potvrdil/vyvrátil, byl bych vděčný.

    Děkuji za rady.
    DT

    OdpovědětSmazat
    Odpovědi
    1. myslím, že já tam mám relé, které nějak přehazuje polaritu. Mohl bych to uveřejnit včetně schématu a plošného spoje...

      Smazat
  25. Mám rozchozeno s "Gas Water Automatic Valve Manipulator" + "ESP8266 NodeMCU" + "ESP-12E (L293D) Motor shield" vše z Aliexpres.
    Něco podobného jako zde: https://www.instructables.com/id/Motorize-IoT-With-ESP8266/

    Existuje také verze toho manipulátoru přímo s vestavěnou WiFi
    (Smart WIFI Water Manipulator Valve)

    OdpovědětSmazat