NEWS
Wasserzähler - Selfmade
-
@pfried na klar, ich bin jetzt nicht der Javascript Programmierer, aber es funktioniert
Bei schedule sind 10 Minuten eingestellt.
In der Klammer von body.slice können die Stellen noch angepasst werden, hier ist 0 (Anfang vom Array) und 8 (bis zur 8ten Stelle des Arrays). Könnt ihr anpassen, wie ihr es braucht.createState('javascript.0.Wasserzaehler.Stand',""); schedule('*/10 * * * *', function () { var url = "http://IP:3000/wasserzaehler.html?usePreValue"; var req = require('request'); req(url, function(error, response, body) { if (body){ log("Body OK","warn"); setState("javascript.0.Wasserzaehler.Stand",body.slice(0, 8)); } else {log("Body fehlerhaft","warn"); } }) });
-
@Knallochse Habe mal gerade meine internen Logs geprüft. Bei mir hat die Fehlererkennung gestern noch angeschlagen (ErrorRateTooHigh).
Hast du das Problem jetzt nur beim Übergang auf die nächsten Hunderter?
NNN dürfte es eigentlich gar nicht geben, wenn du mit den Wasserzähler mit dem Parameter "usePreValue" aufrufst - das würde ich unbedingt empfehlen:/wasserzaehler.html?usePrevalue
-
-
@jomjol Hallo jomjol, bei meinem Raspberry 4 mit 2Gbyte Hauptspeicher, verabschiedet sich der Docker immer nach einiger Zeit mit:
Was kann ich da noch tun?
Liebe Grüße
Paul -
@pfried Was heisst den nach einiger Zeit? Scheint, dass irgendein Speicher überläuft, bisher habe ich mich nicht um das Speichermanagement gekümmtert.
-
@pfried Hallo Paul, ich habe eine Speicherlücke in
LoadFileFromHTTPClass.py
gefunden und korrigiert. Da ich bis nächstes Wochenende verreist bin, habe ich keinen Raspi zum testen, ob es überhaupt läuft. Daher habe ich für dich ein neues Docker zum Testen hochgeladen:jomjol/wasserzaehler:raspi-rolling3
Wichtig ist die "3" bei rolling. Ich wollte die alte Version ohne Test auf meinem Raspi (gerade ohne Strom) nicht überschreiben.
-
@jomjol OK, mache mich gleich ans testen. Melde mich asap. Der letzte Overflow war zwischen 2 und 4 Stunden....
-
@pfried Konnte das Image an einem Raspberry B3 testen - zumindest läuft es. Ich erstelle gerade das "raspi-rolling" neu. Sobald es durch ist, lösche ich "raspi-rolling3" - ist aber identisch
Du hast das ganze auf einem Raspi 4 laufen - korrekt? -
@jomjol
Hallo jomjol, habe um 15:35h den Docker gestartet und um 19:15h hat der Docker die Fehlermeldung ausgegeben, die nun bei jedem Aufruf ausgegeben wird. Startet man den Docker neu, läuft er wieder für die circa 4 Stunden. Unten die erste Fehlermeldung nach dem Crash:Mein Docker läuft unter RB4
Ich hoffe irgendwann gibt es wieder eine Version die unter Python läuft, denn im Docker ist man völlig blind wenn man sich nicht auskennt...
Liebe Grüße
Paul -
Moin, ich möchte mich hier mal kurz (oder lang ) mit einklinken.
ich versuche gerade die Kamera zu implementieren, jedoch habe ich beim kompilieren folgenden Fehler
'Adafruit_NeoPixel' does not name a typefrom C:\Users\tajes\Documents\Arduino\all_wasser_skatch_jam\all_wasser_skatch_jam.ino:11: JomjolGitESP32CamComm.h:36:7: error: 'Adafruit_NeoPixel' does not name a type Adafruit_NeoPixel *light; ^ In file included from C:\Users\tajes\AppData\Local\Temp\arduino_build_422536\sketch\JomjolGitESP32CAM-Server-Class.h:2:0, from C:\Users\tajes\AppData\Local\Temp\arduino_build_422536\sketch\JomjolGitESP32CAM-Server-Class.cpp:1: JomjolGitESP32CamComm.h:36:7: error: 'Adafruit_NeoPixel' does not name a type Adafruit_NeoPixel *light; ^ In file included from C:\Users\tajes\AppData\Local\Temp\arduino_build_422536\sketch\JomjolGitESP32CamComm.cpp:1:0: C:\Users\tajes\AppData\Local\Temp\arduino_build_422536\sketch\JomjolGitESP32CAMComm.h:36:7: error: 'Adafruit_NeoPixel' does not name a type Adafruit_NeoPixel *light; ^ C:\Users\tajes\AppData\Local\Temp\arduino_build_422536\sketch\JomjolGitESP32CamComm.cpp: In constructor 'GitESP32CAMCommLibrary::ESP32CAMCommClass::ESP32CAMCommClass(int, int, int, int, int, WebServer*)': JomjolGitESP32CamComm.cpp:7:3: error: 'light' was not declared in this scope light = new Adafruit_NeoPixel(_num_led, _pin, NEO_GRBW + NEO_KHZ800); ^ JomjolGitESP32CamComm.cpp:7:15: error: expected type-specifier before 'Adafruit_NeoPixel' light = new Adafruit_NeoPixel(_num_led, _pin, NEO_GRBW + NEO_KHZ800); ^ C:\Users\tajes\AppData\Local\Temp\arduino_build_422536\sketch\JomjolGitESP32CamComm.cpp: In member function 'virtual void GitESP32CAMCommLibrary::ESP32CAMCommClass::setup()': JomjolGitESP32CamComm.cpp:193:3: error: 'light' was not declared in this scope light->setBrightness(brightness); ^ C:\Users\tajes\AppData\Local\Temp\arduino_build_422536\sketch\JomjolGitESP32CamComm.cpp: In member function 'void GitESP32CAMCommLibrary::ESP32CAMCommClass::LightOn()': JomjolGitESP32CamComm.cpp:213:3: error: 'light' was not declared in this scope light->show(); // Initialize all pixels to 'off' ^ C:\Users\tajes\AppData\Local\Temp\arduino_build_422536\sketch\JomjolGitESP32CamComm.cpp: In member function 'void GitESP32CAMCommLibrary::ESP32CAMCommClass::LightOff()': JomjolGitESP32CamComm.cpp:220:13: error: 'light' was not declared in this scope colorWipe(light->Color(0, 0, 0, 0), 0); // Aus ^ C:\Users\tajes\AppData\Local\Temp\arduino_build_422536\sketch\JomjolGitESP32CamComm.cpp: In member function 'void GitESP32CAMCommLibrary::ESP32CAMCommClass::colorWipe(uint32_t, uint8_t)': JomjolGitESP32CamComm.cpp:226:23: error: 'light' was not declared in this scope for(uint16_t i=0; i<light->numPixels(); i++) { ^ JomjolGitESP32CamComm.cpp:231:1: error: expected '}' at end of input } ^ Mehrere Bibliotheken wurden für "WebServer.h" gefunden Benutzt: C:\Users\tajes\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\WebServer Mehrere Bibliotheken wurden für "ESPmDNS.h" gefunden Benutzt: C:\Users\tajes\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\ESPmDNS Mehrere Bibliotheken wurden für "ArduinoOTA.h" gefunden Benutzt: C:\Users\tajes\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\ArduinoOTA Mehrere Bibliotheken wurden für "Update.h" gefunden Benutzt: C:\Users\tajes\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\Update Mehrere Bibliotheken wurden für "FS.h" gefunden Benutzt: C:\Users\tajes\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\FS Mehrere Bibliotheken wurden für "WiFi.h" gefunden Benutzt: C:\Users\tajes\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\WiFi Nicht benutzt: C:\Program Bibliothek WiFi in Version 1.0 im Ordner: C:\Users\tajes\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\WiFi wird verwendet Bibliothek WebServer in Version 1.0 im Ordner: C:\Users\tajes\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\WebServer wird verwendet Bibliothek ESPmDNS in Version 1.0 im Ordner: C:\Users\tajes\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\ESPmDNS wird verwendet Bibliothek ArduinoOTA in Version 1.0 im Ordner: C:\Users\tajes\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\ArduinoOTA wird verwendet Bibliothek Update in Version 1.0 im Ordner: C:\Users\tajes\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\Update wird verwendet Bibliothek FS in Version 1.0 im Ordner: C:\Users\tajes\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\FS wird verwendet exit status 1 'Adafruit_NeoPixel' does not name a type
Adafruit_NeoPixel *light; int brightness; void colorWipe(uint32_t c, uint8_t wait); framesize_t fr_size; uint8_t fr_quality;
Von diesem in der ersten Zeile, im Sketch Zeile 36
Hat das schon mal jemand gehabt bzw. eine Lösung ad hock parat?
Für Brainstorming oder :"Ey Du siehst den Wald vor lauter Bäume nicht..." wäre ich sehr dankbar...
Und Daumen Hoch für die geleistete Arbeit hier
-
@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