NEWS
Wasserzähler - Selfmade
-
@Rababersaft Adafruit_Neopixel ist eine Bibliothek, die ich für eine Version mit getrennter Beleuchtung benötige. Ich flashe meinen ESP32 mit der Arduino Umgebung und dann kannst du das über die Bibliothekverwaltung installieren:
Theoretisch kann man den Code auch streichen, aber dann ist es mit meiner alten Hardware nicht kompatibel (ESP3286 mit ArduCAM) - aktuell fehlt mir auch die Zeit dazu
-
@jomjol Nabend
Ja, so flashe ich auch. Er moniert ja den *light Befehl bei mir. Evtl sollte ich auf deine Version von neopixel downgreaden. Das wäre nen Versuch mal wertIch informiere weiter ...
-
@mcchickents sagte in Wasserzähler - Selfmade:
kommt heute Abend
So hier mein Programm.
Programm mcchickents 191017.txtDu brauchst zwei DB Steine meine beiden heißen.
Und dann habe ich SV auf meiner CCU gefühlt hier kannst du aber auch DB im Iobroker füllen.
Gruß Julian
Wie ich schon angemerkt hatte, werden bei mir die "Digitalen" Zahlem (m³) nicht immer richtig erkannt. Das führte bei mir zu Verbrauchswerten, die nicht besonders aussagekräftig waren.
Dagegen habe ich beobachtet, das die Erkennung der Zeiger (analog) sehr zuverlässig funktioniert.
Ich habe mir erlaubt, dass Script von @mcchickents so umzubauen, dass nur noch diese Analogen Werte verwendet werden. die Digitalen (m³) werden nur noch im Script hochgezählt.
Ausgangspunkt sind die Parser Werte mit den Einstellungen von @mcchickents
mit Intervall von 300000 (5min)Ich habe des Script so umgebaut, das mit Anfangszählerständen gearbeitet wird (Tag; Woche; Monat; Jahr) Die dazugehörigen Objekte müssen (wo immer Ihr sie hin haben wollt) angelegt werden.
WICHTIG: Die Plausibilitätsprüfung muss ausgeschaltet sein, so das immer der gerade erkannte Wert im Parser mitgegeben wird.
Bei mir funktioniert das seit 1er Woche ohne Auffälligkeiten.
Ich würde mich über Tester freuen. Auch Verbesserungsvorschläge sind sehr willkommen.
Ich bin wahrlich kein Profi, was das Scripten betrifft.Hier das Blockly Script:
<xml xmlns="http://www.w3.org/1999/xhtml"> <variables> <variable type="" id="+{wu7EACDqh[jz.w|UJ_">Digital</variable> <variable type="" id="CrQs0Fj4!jTiB_=7Z{H#">Analog alt</variable> <variable type="undefined" id="timeout2">timeout2</variable> <variable type="undefined" id="timeout">timeout</variable> <variable type="" id="Y%2waVBVJfgC:UsZNg9^">Analog</variable> <variable type="" id="jD*[#Zlic1jmyurL%.%b">Wasser</variable> <variable type="" id="S~g:}fW6Tm:Aw?GxUkaZ">Wasser gerechnet</variable> <variable type="undefined" id="timeout3">timeout3</variable> </variables> <block type="variables_set" id="GE[E%kt%s0mH*y[T,]`|" x="-1813" y="-637"> <field name="VAR" id="+{wu7EACDqh[jz.w|UJ_" variabletype="">Digital</field> <value name="VALUE"> <block type="get_value" id="f#L%AXrk=Ex$lR)!ag{6"> <field name="ATTR">val</field> <field name="OID">javascript.0.Wasserverbrauch1.Digital</field> </block> </value> </block> <block type="on_ext" id="hW,coeg6nL[_/oRIW8`_" x="-1288" y="-612"> <mutation items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="#1+|n}n82E%YcW~~(OAJ"> <field name="oid">javascript.0.Wasserverbrauch1.Anfangszaehlerstand</field> </shadow> </value> <statement name="STATEMENT"> <block type="variables_set" id="[3s08X/c2]b+g09k=MS2"> <field name="VAR" id="+{wu7EACDqh[jz.w|UJ_" variabletype="">Digital</field> <value name="VALUE"> <block type="get_value" id="~ZWWb=S%vhPDv}PO8g-~"> <field name="ATTR">val</field> <field name="OID">javascript.0.Wasserverbrauch1.Anfangszaehlerstand</field> </block> </value> </block> </statement> </block> <block type="comment" id="{)~[qYJwM%HmTqZC[Dme" x="-1787" y="-537"> <field name="COMMENT">Werte von Url Ausgabe aufbereiten und als Zahl in neuen DB</field> <next> <block type="on_ext" id="O@t;)N+2$SFNG$?Gf{h2"> <mutation items="1"></mutation> <field name="CONDITION">any</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="9K|x1o#+%6GQb*;p%3O#"> <field name="oid">parser.0.Wasserzähler</field> </shadow> </value> <statement name="STATEMENT"> <block type="timeouts_settimeout" id="W]bzQri^_8bvqpKQOrEV"> <field name="NAME">timeout</field> <field name="DELAY">200</field> <field name="UNIT">ms</field> <statement name="STATEMENT"> <block type="variables_set" id="5w0B^2Jki=M**PAtqc+u"> <field name="VAR" id="jD*[#Zlic1jmyurL%.%b" variabletype="">Wasser</field> <value name="VALUE"> <block type="get_value" id=";?U(`UWCL4fsnK8#0#*["> <field name="ATTR">val</field> <field name="OID">parser.0.Wasserzähler</field> </block> </value> <next> <block type="variables_set" id="ixFd@J8)L1oE}OCVbtYq"> <field name="VAR" id="Y%2waVBVJfgC:UsZNg9^" variabletype="">Analog</field> <value name="VALUE"> <block type="text_join" id="/fqyB}E;PHmjBsJJ`0Fh"> <mutation items="6"></mutation> <value name="ADD0"> <block type="math_number" id="SMJBX;~T(pjV^d0~+S)y"> <field name="NUM">0</field> </block> </value> <value name="ADD1"> <block type="text" id="u[@%#8#fi4C^yX.r%d!I"> <field name="TEXT">.</field> </block> </value> <value name="ADD2"> <block type="text_charAt" id="kJ_eC,oa_KKeEhwykd:J"> <mutation at="true"></mutation> <field name="WHERE">FROM_START</field> <value name="VALUE"> <block type="variables_get" id="-y({kI6sfR,nQAjVkA]A"> <field name="VAR" id="jD*[#Zlic1jmyurL%.%b" variabletype="">Wasser</field> </block> </value> <value name="AT"> <block type="math_number" id="hr%jA*b+T]5*Ca|K9m+4"> <field name="NUM">7</field> </block> </value> </block> </value> <value name="ADD3"> <block type="text_charAt" id="5.{HXUkih?pbuhQ3mL)E"> <mutation at="true"></mutation> <field name="WHERE">FROM_START</field> <value name="VALUE"> <block type="variables_get" id="H=fwgeU*yM2BO1So/@rJ"> <field name="VAR" id="jD*[#Zlic1jmyurL%.%b" variabletype="">Wasser</field> </block> </value> <value name="AT"> <block type="math_number" id="Up65|^q^LW$4[4{Q2Kvh"> <field name="NUM">8</field> </block> </value> </block> </value> <value name="ADD4"> <block type="text_charAt" id="ds.0fi_$#ZlQ+?RhAo,4"> <mutation at="true"></mutation> <field name="WHERE">FROM_START</field> <value name="VALUE"> <block type="variables_get" id="O|qHH_xUhqy?KE+,cKX2"> <field name="VAR" id="jD*[#Zlic1jmyurL%.%b" variabletype="">Wasser</field> </block> </value> <value name="AT"> <block type="math_number" id="bLvs%(U/*rs$Ld9Al1[+"> <field name="NUM">9</field> </block> </value> </block> </value> <value name="ADD5"> <block type="text_charAt" id="6OR:#lbqI-PRhCHNec9^"> <mutation at="true"></mutation> <field name="WHERE">FROM_START</field> <value name="VALUE"> <block type="variables_get" id=":H4e}P$k[XW1ul.ATEA5"> <field name="VAR" id="jD*[#Zlic1jmyurL%.%b" variabletype="">Wasser</field> </block> </value> <value name="AT"> <block type="math_number" id="X4xw.sN^lzaqf}IPF.jh"> <field name="NUM">10</field> </block> </value> </block> </value> </block> </value> <next> <block type="timeouts_settimeout" id=".SMM.AW-`BYfdQ}ya?b1"> <field name="NAME">timeout3</field> <field name="DELAY">200</field> <field name="UNIT">ms</field> <statement name="STATEMENT"> <block type="controls_if" id="ju/a2i7Frg:jTfpH!r}c"> <value name="IF0"> <block type="logic_compare" id="iF^jZ2ra(+[,1@C9!+=|"> <field name="OP">GT</field> <value name="A"> <block type="math_arithmetic" id="_GG[w[-[]ELfHI1|/,TP"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="Olf6S3dwBydhTC59hi/:"> <field name="NUM">1</field> </shadow> <block type="convert_tonumber" id="BL,kMdDU#u3!rMwPJmR*"> <value name="VALUE"> <block type="variables_get" id="PhuKa|3GsTTN8QxR{%AZ"> <field name="VAR" id="CrQs0Fj4!jTiB_=7Z{H#" variabletype="">Analog alt</field> </block> </value> </block> </value> <value name="B"> <shadow type="math_number" id="u!#Qj:zrQsUXSN8{%.g1"> <field name="NUM">1</field> </shadow> <block type="convert_tonumber" id="OEPXck6@PFIlEp.OYnhd"> <value name="VALUE"> <block type="variables_get" id="7,s5XP+o{Z?X[7ll.+0Q"> <field name="VAR" id="Y%2waVBVJfgC:UsZNg9^" variabletype="">Analog</field> </block> </value> </block> </value> </block> </value> <value name="B"> <block type="math_number" id="%At]Iu`?WR5ZfT:VCL#z"> <field name="NUM">0.5</field> </block> </value> </block> </value> <statement name="DO0"> <block type="math_change" id="DAIA1CzWMpcy853_!RS!"> <field name="VAR" id="+{wu7EACDqh[jz.w|UJ_" variabletype="">Digital</field> <value name="DELTA"> <shadow type="math_number" id="~^qVXIp-f$qYSGT|k(p*"> <field name="NUM">1</field> </shadow> </value> </block> </statement> <next> <block type="control" id="9n0als[H])_JXK;wZ;Rj"> <mutation delay_input="false"></mutation> <field name="OID">javascript.0.Wasserverbrauch1.Digital</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="convert_tonumber" id="(V-dzVo;qF_Ad-#3qQ{U"> <value name="VALUE"> <block type="variables_get" id="YRQ;vYYHy!{m@:dXStQf"> <field name="VAR" id="+{wu7EACDqh[jz.w|UJ_" variabletype="">Digital</field> </block> </value> </block> </value> <next> <block type="control" id="y/fZ]IDy`tMrbrJLSaCC"> <mutation delay_input="false"></mutation> <field name="OID">javascript.0.Wasserverbrauch1.Analog</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="convert_tonumber" id="duI29L)?T~xuD,TORa9@"> <value name="VALUE"> <block type="variables_get" id="+Y@Az*Mey}}NRlITw$Xi"> <field name="VAR" id="Y%2waVBVJfgC:UsZNg9^" variabletype="">Analog</field> </block> </value> </block> </value> <next> <block type="control" id="K2vn9_SQgwL|)u!!gl1|"> <mutation delay_input="false"></mutation> <field name="OID">javascript.0.Wasserverbrauch1.Wasserverbrauch_aktualisiert</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_arithmetic" id="MM+jsw4UfO(.Hx.u/s:`"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number" id="7Oaw?3HKyclxaVy@qE~p"> <field name="NUM">1</field> </shadow> <block type="convert_tonumber" id="XJ=s_p6$TZ)-avlBa((;"> <value name="VALUE"> <block type="variables_get" id="W0w=_,X/ejFNyHT1XV{R"> <field name="VAR" id="+{wu7EACDqh[jz.w|UJ_" variabletype="">Digital</field> </block> </value> </block> </value> <value name="B"> <shadow type="math_number" id="|=f,]Pr,T6HC8laX|R;o"> <field name="NUM">1</field> </shadow> <block type="convert_tonumber" id="552=i|r`DG0,-Fa.z5km"> <value name="VALUE"> <block type="variables_get" id="9`[$K-.pLdS/93Sr7u]M"> <field name="VAR" id="Y%2waVBVJfgC:UsZNg9^" variabletype="">Analog</field> </block> </value> </block> </value> </block> </value> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </statement> </block> </statement> </block> </next> </block> <block type="on_ext" id="@zG4;]iYO[gk6PE9A8Bd" x="-1788" y="137"> <mutation items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="bo2gx?dIMh?:HL#A@*J["> <field name="oid">parser.0.Wasserzähler</field> </shadow> </value> <statement name="STATEMENT"> <block type="variables_set" id="$^5i[4.V)UQ$0,R53n%|"> <field name="VAR" id="CrQs0Fj4!jTiB_=7Z{H#" variabletype="">Analog alt</field> <value name="VALUE"> <block type="variables_get" id="auf4Vpl?.5xl,2EQDC}x"> <field name="VAR" id="Y%2waVBVJfgC:UsZNg9^" variabletype="">Analog</field> </block> </value> <next> <block type="control" id="6DzKEv?-~d]3U=;Btcop"> <mutation delay_input="false"></mutation> <field name="OID">javascript.0.Wasserverbrauch1.Wasserverbrauch_alt</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="get_value" id="o5`@Rv8Ul:#hrNuvl,2|"> <field name="ATTR">val</field> <field name="OID">javascript.0.Wasserverbrauch1.Wasserverbrauch_aktualisiert</field> </block> </value> </block> </next> </block> </statement> </block> <block type="on_ext" id="g0!@tN:hJ5,@IC03]C(R" x="-1787" y="337"> <mutation items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="i*|8`Z*]C1Z-aKXfx4qF"> <field name="oid">javascript.0.Wasserverbrauch1.Wasserverbrauch_aktualisiert</field> </shadow> </value> <statement name="STATEMENT"> <block type="timeouts_settimeout" id="9)silgejCBBBlJ^K5*h."> <field name="NAME">timeout2</field> <field name="DELAY">1000</field> <field name="UNIT">ms</field> <statement name="STATEMENT"> <block type="controls_if" id="$_^*U)oNg;J39mNWX7iv"> <value name="IF0"> <block type="logic_compare" id="R+]z+~$9PRX.!`-n2j$_"> <field name="OP">GT</field> <value name="A"> <block type="get_value" id="1Q.u,.7hmJgpxgTS!yJJ"> <field name="ATTR">val</field> <field name="OID">javascript.0.Wasserverbrauch1.Wasserverbrauch_aktualisiert</field> </block> </value> <value name="B"> <block type="get_value" id="*^w0O6:fgj}}S|y_?89S"> <field name="ATTR">val</field> <field name="OID">javascript.0.Wasserverbrauch1.Wasserverbrauch_alt</field> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="z)/Gd*s9,-W6[D752=D?"> <field name="VAR" id="S~g:}fW6Tm:Aw?GxUkaZ" variabletype="">Wasser gerechnet</field> <value name="VALUE"> <block type="math_arithmetic" id="xt-H^j-:43Irbg7Fhml("> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="X_rWlPD~o/J^KhVZi%6o"> <field name="NUM">1</field> </shadow> <block type="get_value" id="A4Sx?OtCp2T?h#I(031U"> <field name="ATTR">val</field> <field name="OID">javascript.0.Wasserverbrauch1.Wasserverbrauch_aktualisiert</field> </block> </value> <value name="B"> <shadow type="math_number" id="+qND:7;^kTj.azwuZHHi"> <field name="NUM">1</field> </shadow> <block type="get_value" id="@R6Vro4Waf_mK|.+!]^0"> <field name="ATTR">val</field> <field name="OID">javascript.0.Wasserverbrauch1.Wasserverbrauch_alt</field> </block> </value> </block> </value> <next> <block type="control" id="0(_/h8O2,M[gEb`Ic4=2"> <mutation delay_input="false"></mutation> <field name="OID">hm-rega.0.8533</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_arithmetic" id="s)PN7Vw`prv!A?hv2mLf"> <field name="OP">MULTIPLY</field> <value name="A"> <shadow type="math_number" id="E#zB^cvPPx!3cYPr+Pu{"> <field name="NUM">1</field> </shadow> <block type="math_rndfixed" id="A_V2Dl3Tco*!@[~Lr1n~"> <field name="n">4</field> <value name="x"> <shadow type="math_number" id="a?I?-VQtRV1uduc!*;@I"> <field name="NUM">3.1234</field> </shadow> <block type="math_arithmetic" id="XY5vn6~5Da?Zt0namcfQ"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="TlPoMg6n6S:en?y89?T4"> <field name="NUM">1</field> </shadow> <block type="get_value" id="Il/T*4`06v:{m@*OFmkc"> <field name="ATTR">val</field> <field name="OID">javascript.0.Wasserverbrauch1.Wasserverbrauch_aktualisiert</field> </block> </value> <value name="B"> <shadow type="math_number" id="%8A!l4mo_0a=h,ezfnVP"> <field name="NUM">1</field> </shadow> <block type="get_value" id="=TjWO/63[rWCTbDj7JUs"> <field name="ATTR">val</field> <field name="OID">javascript.0.Wasserverbrauch1.Anfangszaehlerstand_heute</field> </block> </value> </block> </value> </block> </value> <value name="B"> <shadow type="math_number" id="tn*R.05(D.%K3Cq(}nvg"> <field name="NUM">1000</field> </shadow> </value> </block> </value> <next> <block type="control" id="5fng!*j2(M,$$,YwlLHx"> <mutation delay_input="false"></mutation> <field name="OID">hm-rega.0.8568</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_arithmetic" id="j!|XN6hin]+7`7e88l18"> <field name="OP">MULTIPLY</field> <value name="A"> <shadow type="math_number" id="!%YGCtSmGv.!]KU$#6Nw"> <field name="NUM">1</field> </shadow> <block type="math_rndfixed" id="-3@,nGkZ]@$FU1Ry}%PA"> <field name="n">4</field> <value name="x"> <shadow type="math_number" id="a?I?-VQtRV1uduc!*;@I"> <field name="NUM">3.1234</field> </shadow> <block type="math_arithmetic" id="(E?id-LI#NfEL|Jt:.vZ"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="TlPoMg6n6S:en?y89?T4"> <field name="NUM">1</field> </shadow> <block type="get_value" id="0E2;EjD-PBt:GCDwPU~H"> <field name="ATTR">val</field> <field name="OID">javascript.0.Wasserverbrauch1.Wasserverbrauch_aktualisiert</field> </block> </value> <value name="B"> <shadow type="math_number" id="%8A!l4mo_0a=h,ezfnVP"> <field name="NUM">1</field> </shadow> <block type="get_value" id="YDY5~1aA-=^]//;i6MJ+"> <field name="ATTR">val</field> <field name="OID">javascript.0.Wasserverbrauch1.Wasserverbrauch_alt</field> </block> </value> </block> </value> </block> </value> <value name="B"> <shadow type="math_number" id="NUZlH-[?T]-}p@iCL{Au"> <field name="NUM">1000</field> </shadow> </value> </block> </value> <next> <block type="control" id="oBT%X]5xBNnY,5AICE3X"> <mutation delay_input="false"></mutation> <field name="OID">hm-rega.0.8566</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_arithmetic" id="[nv%@@BX,N#hLq#S-k`+"> <field name="OP">MULTIPLY</field> <value name="A"> <shadow type="math_number" id="CL~9xg^p8_Kzc5n_ImjG"> <field name="NUM">1</field> </shadow> <block type="math_rndfixed" id=",P%Ylnd^*u1LkcG9X]:W"> <field name="n">4</field> <value name="x"> <shadow type="math_number" id="a?I?-VQtRV1uduc!*;@I"> <field name="NUM">3.1234</field> </shadow> <block type="math_arithmetic" id="|(*+rA~Ej?$2*?ityV)U"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="TlPoMg6n6S:en?y89?T4"> <field name="NUM">1</field> </shadow> <block type="get_value" id="]ziDJBvg89Wq:.R;J:!,"> <field name="ATTR">val</field> <field name="OID">javascript.0.Wasserverbrauch1.Wasserverbrauch_aktualisiert</field> </block> </value> <value name="B"> <shadow type="math_number" id="%8A!l4mo_0a=h,ezfnVP"> <field name="NUM">1</field> </shadow> <block type="get_value" id="nd_9af.ZMA1/K1,S#U@Q"> <field name="ATTR">val</field> <field name="OID">javascript.0.Wasserverbrauch1.Anfangszaehlerstand_Woche</field> </block> </value> </block> </value> </block> </value> <value name="B"> <shadow type="math_number" id="s#NIPHF{^u=-UljnNO$r"> <field name="NUM">1000</field> </shadow> </value> </block> </value> <next> <block type="control" id="#z,-nejW?jGgjF|6|.H}"> <mutation delay_input="false"></mutation> <field name="OID">hm-rega.0.8648</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_arithmetic" id="y39]M!U/%X9b%6jp*4#}"> <field name="OP">MULTIPLY</field> <value name="A"> <shadow type="math_number" id="CL~9xg^p8_Kzc5n_ImjG"> <field name="NUM">1</field> </shadow> <block type="math_rndfixed" id="2#^Z6@xqJOMGnvvjT6%?"> <field name="n">4</field> <value name="x"> <shadow type="math_number" id="a?I?-VQtRV1uduc!*;@I"> <field name="NUM">3.1234</field> </shadow> <block type="math_arithmetic" id="UN.1V5+(r@))%J,=@gqY"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="TlPoMg6n6S:en?y89?T4"> <field name="NUM">1</field> </shadow> <block type="get_value" id="$mrk)426X5fx_+e!J_gK"> <field name="ATTR">val</field> <field name="OID">javascript.0.Wasserverbrauch1.Wasserverbrauch_aktualisiert</field> </block> </value> <value name="B"> <shadow type="math_number" id="%8A!l4mo_0a=h,ezfnVP"> <field name="NUM">1</field> </shadow> <block type="get_value" id="/Z@4#mZokQ,L-w^bH.Tg"> <field name="ATTR">val</field> <field name="OID">javascript.0.Wasserverbrauch1.Anfangszaehlerstand_Monat</field> </block> </value> </block> </value> </block> </value> <value name="B"> <shadow type="math_number" id="Ha=O,ekrr9a?z]eu4Xs+"> <field name="NUM">1000</field> </shadow> </value> </block> </value> <next> <block type="control" id="=E[:Y4;({rV9PgxM??W#"> <mutation delay_input="false"></mutation> <field name="OID">hm-rega.0.8567</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_rndfixed" id="N~pEF;p}RibZHL@Jj%]8"> <field name="n">4</field> <value name="x"> <shadow type="math_number" id="a?I?-VQtRV1uduc!*;@I"> <field name="NUM">3.1234</field> </shadow> <block type="math_arithmetic" id="(ypJq^YjyV_r2Tja[JzG"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="TlPoMg6n6S:en?y89?T4"> <field name="NUM">1</field> </shadow> <block type="get_value" id="-MMgXsvKFd?[}m13v}9o"> <field name="ATTR">val</field> <field name="OID">javascript.0.Wasserverbrauch1.Wasserverbrauch_aktualisiert</field> </block> </value> <value name="B"> <shadow type="math_number" id="%8A!l4mo_0a=h,ezfnVP"> <field name="NUM">1</field> </shadow> <block type="get_value" id="iD:Yn+mvm5eH]y:k88K+"> <field name="ATTR">val</field> <field name="OID">javascript.0.Wasserverbrauch1.Anfangszaehlerstand_Jahr</field> </block> </value> </block> </value> </block> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </statement> </block> </statement> </block> <block type="comment" id="ox+@jzn`KXVwX.fOTB$," x="-937" y="888"> <field name="COMMENT">Wasserverbrauch letzte 5 min zurücksetzen</field> <next> <block type="on_ext" id="j=c,w9.$Xq;DsB5^}pBB"> <mutation items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="}z+=RenMSy8(B@XhK@0K"> <field name="oid">hm-rega.0.8568</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="%|yEAWaJ*FP|KJ!T/+Y$"> <value name="IF0"> <block type="logic_compare" id="_EAAa*G$MT%4=Rg?[~bP"> <field name="OP">GT</field> <value name="A"> <block type="get_value" id="tZQSY0`YcA7JL[M$Ws@g"> <field name="ATTR">val</field> <field name="OID">hm-rega.0.8568</field> </block> </value> <value name="B"> <block type="math_number" id="Pd*)$#q#9Ay-w#:cv1+7"> <field name="NUM">0</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="lU:dL+CfL4WMPIg8M38w"> <mutation delay_input="true"></mutation> <field name="OID">hm-rega.0.8568</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">5</field> <field name="UNIT">min</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"> <block type="math_number" id="sH;+ugos5JXLrj_4BfDg"> <field name="NUM">0</field> </block> </value> </block> </statement> </block> </statement> </block> </next> </block> <block type="comment" id="qSxx=;Q,jlnWfNVxu*TC" x="-1688" y="1062"> <field name="COMMENT">reset heute</field> <next> <block type="schedule" id="v;%?AXWh:txx%4R+2:U,"> <field name="SCHEDULE">59 23 * * *</field> <statement name="STATEMENT"> <block type="control" id="o03K_LgrizESb@J0r`gL"> <mutation delay_input="false"></mutation> <field name="OID">hm-rega.0.8533</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="+|Dv5/%]/%.QIWBB+**C"> <field name="NUM">0</field> </block> </value> <next> <block type="control" id="8DJ|hXs^UV[]]q|j@$/@"> <mutation delay_input="false"></mutation> <field name="OID">javascript.0.Wasserverbrauch1.Anfangszaehlerstand_heute</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="get_value" id="q#8NRrtE|p##-plw;KZ9"> <field name="ATTR">val</field> <field name="OID">javascript.0.Wasserverbrauch1.Wasserverbrauch_aktualisiert</field> </block> </value> </block> </next> </block> </statement> </block> </next> </block> <block type="comment" id="f}lW@jf:=d$f0yptTr$b" x="-1687" y="1262"> <field name="COMMENT">reset Woche</field> <next> <block type="schedule" id="CS=RSPfa:iN5AMzgx~+$"> <field name="SCHEDULE">59 23 * * 0</field> <statement name="STATEMENT"> <block type="control" id=".l7{U_lCbkh?eh[J76.L"> <mutation delay_input="false"></mutation> <field name="OID">hm-rega.0.8566</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="NQ{Xt.0IXvoF}I^AtomT"> <field name="NUM">0</field> </block> </value> <next> <block type="control" id="lf}%4*+o^Q{FU:7fxp|;"> <mutation delay_input="false"></mutation> <field name="OID">javascript.0.Wasserverbrauch1.Anfangszaehlerstand_Woche</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="get_value" id="nh{y8TyWjpjiIEhFd/tl"> <field name="ATTR">val</field> <field name="OID">javascript.0.Wasserverbrauch1.Wasserverbrauch_aktualisiert</field> </block> </value> </block> </next> </block> </statement> </block> </next> </block> <block type="comment" id="K/RigU5g)ITrS$Z5%z%$" x="-1687" y="1462"> <field name="COMMENT">reset Monat</field> <next> <block type="schedule" id="I+d[tdGa*#NplJWq)l:D"> <field name="SCHEDULE">2 0 1 * *</field> <statement name="STATEMENT"> <block type="control" id="Xs0Vn%@[Z3LhUgSZi.{E"> <mutation delay_input="false"></mutation> <field name="OID">hm-rega.0.8648</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="!8%xuHUE*S.4byz]?#eV"> <field name="NUM">0</field> </block> </value> <next> <block type="control" id="$izuc,5%%3Gb_Y!X,+vb"> <mutation delay_input="false"></mutation> <field name="OID">javascript.0.Wasserverbrauch1.Anfangszaehlerstand_Monat</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="get_value" id="~}P$;7JTwiREk|;4H:.i"> <field name="ATTR">val</field> <field name="OID">javascript.0.Wasserverbrauch1.Wasserverbrauch_aktualisiert</field> </block> </value> </block> </next> </block> </statement> </block> </next> </block> <block type="comment" id="oHR,JG*z8K2lOHmdJgUI" x="-1687" y="1662"> <field name="COMMENT">reset Jahr</field> <next> <block type="schedule" id="#CJ#r$^ohJ=^7![RC?r["> <field name="SCHEDULE">59 23 31 12 *</field> <statement name="STATEMENT"> <block type="control" id="RjxS0F1e!{}R=?k0u5hu"> <mutation delay_input="false"></mutation> <field name="OID">hm-rega.0.8567</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="Gv+;Fb{zqvo$M?Mv;DML"> <field name="NUM">0</field> </block> </value> <next> <block type="control" id="!u17z/OwRnOxh=PKk1UV"> <mutation delay_input="false"></mutation> <field name="OID">javascript.0.Wasserverbrauch1.Anfangszaehlerstand_Jahr</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="get_value" id="@hyKafoqvaHq~H5k.|vG"> <field name="ATTR">val</field> <field name="OID">javascript.0.Wasserverbrauch1.Wasserverbrauch_aktualisiert</field> </block> </value> </block> </next> </block> </statement> </block> </next> </block> </xml>
-
@Knallochse wegen Zeitmangel ruht das Projekt aktuell bei mir. Auch wegen der Anschaffung eines 3D-Druckers. Gehäuse ist schon gedruckt aber keine Zeit gehabt das final einzubauen und zu verlöten. Außerdem kämpfe ich immer noch mit dem Problem dass der ESP nach paar Tagen offline ist. Beschlagen der Uhr ist auch noch ein Problem was ich lösen muss. Wie schaut es bei euch aus?
-
@jomjol Hallo Jomjol, hattest Du schon Zeit Dir den Speicheroverflow anzusehen. Wenn nicht, welche HW verwendest Du, dann kann ich mir ja auch diese bestellen..... Vielen Dank und liebe Grüße Paul
-
@watcherkb also ich hab ja, wie oben beschrieben, vom Parser Adapter auf Scriptabfrage umgestellt, seit dem läuft das Ding jetzt schon seit 20 treffen unterbrechungsfrei, keine disconnects mehr vom ESP
-
@Knallochse schick mir mal ein paar Bilder von deinen digitalen Ziffern. Je Ziffer so 3-5 Stück, dann kann ich die Erkennung damit trainieren.
-
@pfried Hallo Paul,
bin momentan bis Weihnachten beruflich ziemlich beschäftigt und komme erst nach den Feiertagen dazu, es mir genauer anzuschauen. Welche Version verwendest du den genau, denn in der letzten Version habe schon ein kleineres potentielles Leck entfernt.
Dennoch kann ich das nicht richtig gut debuggen, denn bei mir läuft das ganze auf einer Synology DS718+ als Docker Container und dort ist es echt stabil. -
@jomjol Hallo Jomjol,
Ich verwende die letzte Raspi-Rolling Version: jomjol/wasserzaehler:raspi-rolling, die ich über Docker pull bekommen habe, wie Du oben beschrieben hast. Läuft diese Version auf einem RP3+ bei Dir stabil, wenn ja, besorge ich mir noch einen......
Liebe Grüße
Paul -
@pfried Hallo Paul,
bei mir läuft der Docker auf einer Synology mit 12 GB Ram, daher habe ich mit einem Speicherleck keine Probleme. Meinen Raspi B3 verwende ich nur zum Testen. Dort läuft es nicht im Produktivmodus über meherere Stunden.Inzwischen habe ich aber mit googlen auch die Ursache gefunden. Das Problem ist bekannt und liegt in der Tensorflowbibliothek selbst: https://github.com/keras-team/keras/issues/13118.
Ich habe das Workaround eingebaut und gerade läuft der Docker-Build auch für den Raspi-Rolling. Ganz weg ist das Problem nicht, aber deutlich kleiner:
Vorher:
Nachher:
Jeweils nach 20 Aufrufen.Probier mal das aus und melde ich. Bei mir installiere ich es auch, sobald der Build fertig ist.
LG, jomjol -
Servus
Ich hatte gestern die Idee das roi Bild mit in die VIS aufzunehemen.
Schaut sehr gut aus.
Aber leider wird es anscheinend nur aktualisiert, wenn ich die ip:3000/roi.html aufrufe.
Ich hab aber das direkte Bild verlinkt.Kann ich das auch automatisch irgendwie generieren lassen?
Ideal wäre natürlich wenn es nur erstellt wir wenn die VIS aktiv ist und auch wirklich eine Änderung vorliegt.Ist vermutlich eher eine VIS frage aber da es nur mit dem Wasserzähler zu tun hat frag ich hier.
Ich verwende noch die letzte Version die direkt auf dem PI ohner Docker läuft.
Gruß Peer
-
@C1500 Hast Du schon probiert, das mit dem Parser zu machen, würde mich interessieren ob das geht. Wie läuft das mit Deiner Erkennungsrate, ist diese stabil?
-
Servus @pfried
Ich hatte mit dem Parser immer das Problem, dass er pünklich um 0:03 Uhr aufgehört hat und sich auch die CAM weggehängt hat.Ich probier jetzt gerade das Script von weiter oben.
Letzte Nacht lief es schon mal durch.Die Erkennungsrate ist sehr gut, solange ich "usePreValue" verwende.
Sobald die Zahlen anfangen sich wegzudrehen wird es sonst schwierig.Gruß Peer
-
@C1500 Korrekt, das roi-Bild wird nur bei roi.html aktualisiert. Der Aufwand, es jedesmal zu aktualisieren ist nicht sehr groß, kann ich bei nächster Gelegenheit mal machen.
-
Hat einer von Euch diess Projekt erfolgreich in einer VM unter Proxmox am laufen?
-
@jomjol Habe die neue Docker Version getestet. Es dauert nun nicht mehr 4 Stunden bis der Memory überläuft sondern 15 Stunden:
-
@pfried Hallo Paul,
der Memory-Leak liegt intern in Tensorflow. Da kann ich an meiner Software nichts machen. Nicht mal das Löschen und Neuladen der Tensorflowobjekte hilft nicht, da offenbar ein interner Tensor im Speicher bleibt. Habe mehrere Threads dazu gefunden.
Die Tensorflow-Community arbeitet daran und es gibt Hinweise, dass es in der Nightly besser wird, aber anscheinend nicht bei allen.
Bleibt nur das Beobachten und Update, sobald es eine neue Version gibt, testen. Ich beobachte es weiter.
Eventuell kannst du deinen Container regelmäßig nach ein paar Stunden per Script neu starten als Zwischenlösung?
Gruß, jomjol -
Hallo, hat jemand eine Lösung für die Beschlagung des Wasserzählers gefunden?
Wie man sieht sinkt dadurch die Erkennungsrate gegen null:
-
@pfried das Beschlagen hat nur einen Grund: Wasser ist kalt, Umgebung warm. Dadurch beschlägt es. Also entweder dämmt man den Wasserzähler gegen Wärme, oder alternativ probieren eine anti-Beschlagfolie oder Spray verwenden. Alles nur Theorie...hab ich auch noch vor mir.
-
@watcherkb Das mit dem Spray werde ich versuchen. Werde berichten. Außerdem werde ich nun an einem freien Tag einen Ventilator in das Gehäuse einbauen, Vielleicht hilft das ja was.....