NEWS
Wasserzähler - Version 2 - all-in-device
-
@schweigel da muss ich @Zwer2k zustimmen, konnte dies auch mal beobachten. Nach formatieren und neu beschreiben der SD-Karte lief es wieder
-
Hallo @jomjol,
ich versuche gerade das Rotieren der Log-Dateien und -Bilder zu implementieren.
Rotation von log.txt habe ich bereits implementiert. Bei den Bildern bin ich auf interessanten Effekt gestoßen.
Wenn ich in der Funktion ClassFlowAnalog::doNeuralNetwork nach dem Aufruf tflite->MakeAllocate() ein Verzeichnis erstelle z.B. so mkdir("/sdcard/log/analog/abc", S_IRWXU), wird das Verzeichnis zwar erstellt, der ESP stürzt aber anschließend in der Funktion tflite->LoadInputImage(ioresize); in folgender Zeile abfloat* input_data_ptr = (interpreter->input(0))->data.f;
Wenn ich das Verzeichnis gleich am Anfang von der Funktion doNeuralNetwork erstelle, gibt es keine Probleme.
Da ich nicht genau weiß wie die TFLite-Lib funktioniert, kann ich mir das Verhalten nicht erklären. Kannst du es Verstehen / macht das Sinn?
Eventuell hat es auch etwas mit den Abstürzen zutun die immer wieder auftreten.Gruß
Zwer2k -
Hallo @Zwer2k,
das ist in der Tat eine sehr spannende Beobachtung. Ich kenne diesen Fehler mit dem "mkdir" nicht, verwende aber auch "mkdir" gar nicht. Kannst du mal testen, ob der Fehler auch auftritt, wenn du an dieser Stelle ein File einfach nur öffnest und liest?
Dann könnte das derselbe Effekt sein, der auch für die Reboots sorgt. Diese Stelle im Code ist diesbezüglich sehr auffällig. Wenn du da genauer rein schaust, findest du, dass ich dort sogar zwei jpg/bmp Bibliotheken verwende, damit es funktioniert.
Was da passiert bin ich noch nicht dahinter gestiegen. Leider schaffe ich es nicht einen Debugger anzuschließen :-(.
Wenn du willst können wir uns das auch mal gemeinsam in einer skype Session anschauen - wäre super, wenn diese Reboots endlich verstanden wurden.
Gruß,
jomjol -
@Zwer2k
Danke, habe die Karte nochmal formatiert und die Daten wieder drauf kopiert, nun geht es. -
Hallo @jomjol ,
es scheint tatsächlich nur an mkdir zu liegen, weder das Lesen noch Beschreiben von Daten an der gleichen Stelle verursacht Abstürze.
Hat tflite eventuell Speicherleeks die die Probleme Verursachen, die Lib hat ja noch einige offene Issues die in die Richtung gehen. Es kann aber auch sein, dass der Core von ESP32 noch Fehlerhaft ist. Hab ein anderes Projekt bei dem unregelmäßige Abstürze auftreten, die ich mir nicht erklären kann. Die Abstürze treten öfter auf je mehr der ESP per WiFi kommuniziert (HTTP/MQTT).Während dem Testen ist mir allerdings ein Watchdog-Reboot aufgefallen
handler_wasserzaehler uri: /wasserzaehler.html uri: /img_tmp/alg_roi.jpg 1 uri: /img_tmp/alg_roi.jpg, filename: /alg_roi.jpg, filepath: /sdcard/alg_roi.jpg File to upload: /sdcard/img_tmp//alg_roi.jpg E (109680) task_wdt: Task watchdog got triggered. The following tasks did not reset the watchdog in time: E (109680) task_wdt: - IDLE0 (CPU 0) E (109680) task_wdt: Tasks currently running: E (109680) task_wdt: CPU 0: httpd E (109680) task_wdt: CPU 1: IDLE1 I (109710) serverhelp: Sending file : /sdcard/img_tmp//alg_roi.jpg (46997 bytes)... I (109890) serverhelp: File sending complete abort() was called at PC 0x401c50d5 on core 0 ELF file SHA256: 9d0eb747742923ae Backtrace: 0x4008dd45:0x3fff2ad0 0x4008e0e1:0x3fff2af0 0x401c50d5:0x3fff2b10 0x401c699d:0x3fff2c50 0x401e6d4f:0x3fffacd0 0x401a0101:0x3fffacf0 0x400fb59f:0x3fffad10 0x400fc3c6:0x3fffb360 0x400f1eb1:0x3fffb3d0 0x400d531e:0x3fffb580 0x400d57d8:0x3fffb5d0 0x4008e945:0x3fffb740 Rebooting... ets Jun 8 2016 00:22:57 rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0xee clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 mode:DIO, clock div:2 load:0x3fff0030,len:4 load:0x3fff0034,len:7164 load:0x40078000,len:13856 load:0x40080400,len:4052 entry 0x40080688
-
Hallo
ich habe jetzt auch den Gaszähler am laufen. Schein super zu funktionieren. Mit MQTT scheint das auch besser zu sein als mit dem Parser der als stehen bleibt. Nur sin mir die folgenden Warnings aufgefallen mit denen ich nichts anfangen kann. Kennt das jemand?
(1058) Client [Wasserzaehler] Message 20951 deleted after 11 retries
(1058) Client [Wasserzaehler] Cannot publish message: TypeError [ERR_INVALID_ARG_TYPE]: The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type number
(1058) Client [Gaszaehler] Message 26870 deleted after 11 retries
(1058) Client [Gaszaehler] Cannot publish message: TypeError [ERR_INVALID_ARG_TYPE]: The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type number
(1058) Client [Wasserzaehler] Message 1135 deleted after 11 retries
(1058) Client [Wasserzaehler] Cannot publish message: TypeError [ERR_INVALID_ARG_TYPE]: The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type number
(1058) Client [Gaszaehler] Message 5278 deleted after 11 retries
(1058) Client [Gaszaehler] Cannot publish message: TypeError [ERR_INVALID_ARG_TYPE]: The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type number
(1058) Client [Wasserzaehler] Message 32653 deleted after 11 retries
(1058) Client [Wasserzaehler] Cannot publish message: TypeError [ERR_INVALID_ARG_TYPE]: The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type number
(1058) Client [Wasserzaehler] Message 54757 deleted after 11 retries
(1058) Client [Wasserzaehler] Cannot publish message: TypeError [ERR_INVALID_ARG_TYPE]: The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type numberGruß
Werner -
Hi Werner,
ich das mit dem Parser so gelöst, dass ich die Instanz alle 6 Stunden neu starte. Das geht im Instanzen Reiter, Expertenmodus.
Seitdem ist ruhe...
Liebe Grüße
Paul -
@pfried Hi, was hat das denn mit dem Parser Adapter zu tun wenn die Messages vom mqtt Instanz kommen?
-
@watcherkb Er schreibt, dass er jetzt den MQTT verwendet, weil der Parser nicht geht....
-
@pfried aso jetzt hab ichs. Na wenn er jetzt mqtt nutzt, kann er den Parser ganz ausschalten.
-
Danke für die Info. Vielleicht brauche ich den Parser mal wieder für was anderes.
Habe eben gesehen das der Wasserzähler noch per MQTT Daten liefert aber der Gaszähler nicht mehr. Aber Fotos macht er noch und errechnet den Zählerstand.Vielleicht hat das ja auch was mit den Warnings zu tun die ich etwas weiter oben gepostet habe.
Gruß
Werner -
@MichMein und alle die was dazu beitragen können.
Hallo, anbei mal mein Log der letzten Tage.
Log.txt
Grund dafür ist ein Reset alle 5 Minuten.
Nachdem ich den Wasserzähler aufgebaut hatte ging er ca. 12 Tage und dann fiel auf, dass er nach jedem Einlesen im 5 minuten Takt neu startet. Laut damaligen Log ging das mit 5 Resets am Tag los und wurde dann so ab dem 10 Tag immer schlimmer. Daraufhin wurde eine neuen SD Karte eingesetzt, die Config Daten ohne Log Daten übernommen und die Firmware auf den aktuellen Stand gebracht. MichMein bat mich dann mal um eine Log-Datei zu diesem Problem.Ich kann im Log nix erkennen außer dass es weiterhin so alle 2 - 4 Stunden zu einem Neustart kommt.
Warum ab und zu mal die Temperatur auf > 80 Grad steigt verstehe ich auch nicht. Das Ding ist handwarm.
Würde ja erstmal weiter nicht stören wenn er nicht wieder nach 14 Tagen dann alle paar Minuten einen Reset macht.
Ich hab das Log jetzt erst einmal wieder ausgeschaltet. Auf der SD Karte aber weiter erstmal keine Daten gelöscht.
Vielleicht hilft es euch ja daraus was zu erkennen.
Der ESP wird über ein 5V 1A Handy-Steckernetzteil mit einem 35V 1000uF Kondensator gespeist. Hatte beim Belichten des Zählers in der Aufbauzeit mal ca. 145mA mit einem Vielfach Messinstrument gemessen.
LG Horst -
@Hasont sagte in Wasserzähler - Version 2 - all-in-device:
@pfried @mcchickents
Hallo, hab den alten Thread mal durchgelesen und denke ich könnte eure Einbindung in den IoBrocker gut gebrauchen. Hab dann den Parser installiert und die Daten werden mir auch angezeigt.
Dann habe ich unter JavaScripts einen Ordner Wasserverbrauch angelegt und darin das Blockly von @mcchickents eingefügt. So wie ich das sehe startet es auch ohne Fehler. Hab dann meine 3N Stellen angepasst.
Was bedeutet das hm-rega, sind das nur Datenfelder?Leider komme ich jetzt nicht mehr so recht weiter. Es wird mir ein Objekt angelegt aber scheinbar fehlen mir die nötigen Ausgabefelder.
Ich werde da aus dem alten Thread jetzt nicht ganz schlau. Da steht mal was von neue Instanzen anlegen und dann soll man unter Javascript neue Variablen anlegen (siehe Info aus dem alten Thread an QC1500)
Denke ich brauch da mal eure Hilfe.
Wasseruhr Blockly.txtUpdate 1:
Hab jetzt noch 3 Variablen angelegt und bekomme Daten.
Was aber hat es mit hm-rega.0.3xxxx auf sich?
Wenn ich die auch als Variable anlegen möchte wird das immer in einem eigenem Pfad angelegtUpdate 2:
Denke das Blockly ist neuer und ich brauch auch die hm-rega Variablen.
Hab die jetzt als HM965 - HM103 angelegt und im Blockly entsprechend zugeordnet.
Bei 969 hab ich schon ne 0 bekommen (müsste Verbrauch 5min sein)
Mal sehen was die Tage da so passiert.Zum Thema mit dem Reset alle ca. 3,5 Stunden hab ich das Log jetzt mal eingeschaltet.
Ev. habt Ihr ja ein Script das über Blockly direkt ohne HomeMatic funktioniert.
Ziel sollte es sein den Wasserverbrauch aufzuzeigen und in der Urlaubsphase einen Wasserverbrauch außerhalb der Gießzeiten über Telegram zu melden um Notfalls den Haupthahn abzusperren.Hallo, soll ich zu dem Thema ev. einen eigenen Thread eröffnen da es ja mit der Ursprünglichen Hardware nix zu tun hat.
Es werden mir jetzt einige Daten angezeigt aberes klappt nicht da mir vom Script die Nachkommastellen fehlen. Denke das Script passt aber irgendwas muss ev. in den Objektdaten noch eingestellt werden damit er die Nachkommastellen übernimmt. Habt Ihr nen Tip für mich.
Wasseruhr Blockly_neu.txtDanke schon mal für eure Hilfe
Horst -
@Hasont Hast Du die Variablen unter javascript.x angelegt? Wenn ja, öffne bitte einmal mit click auf das Stiftsymbol die Eigenschaften einer Variable und schaue ob dort Zahl eingestellt ist.
-
@pfried Ja, hab ich. sieht bei mir so aus.
Hab auch schon gemischt und Zeichenkette probiert.
Was etwas komisch gegenüber meinen anderen angelegten Variablen ist, dass das, ich nenne es mal Hauptverzeichnis, auch Variablen enthält.
Danke für deine Hilfe
Horst -
@Hasont Hallo Horst, du fragst oben wegen der hm.rega. Die habe ich angelegt um die Werte zurück in die CCU zu senden.
Kannst Du bitte noch Deine Config.ini posten.
-
Hallo @jomjol,
hab jetzt das Rotieren von Log-Datein implementiert. Es werden sowohl Bilder als auch Message-Log rotiert. Für Bilder gibt es täglich ein Verzeichnis und stündlich ein Unterverzeichnis. Für Message-Log gibt es täglich neue Datei. In config.ini kann eingestellt werden, nach wie vielen Tagen die Dateien gelöscht werden sollen.
Zusätzlich habe ich eine Löschung von Dateien in /img_tmp Ordner eingebaut bevor neuer Flow startet, um zu erzwingen, dass neuer Speicherort auf der SD-Karte verwendet wird (sollte Speicherkarte von sich aus machen), mit der Hoffnung, dass Beschädigungen der Karte nicht mehr so schnell auftreten (wenn es der Grund für Beschädigungen war).
Es waren einige Änderungen im Code notwendig. Index.html hab ich auch aktualisiert.Pull request ist gestartet.
Gruß
Jurij -
@Zwer2k
Hi Jurij,
coole Sache!!! Ich habe es in die Rolling gemerged (nicht Master!) und lasse es gerade auf meinem System laufen. Update der Beschreibung etc. dann im Laufe des Wochenendes. Vielen Dank schonmal für deine Unterstützung!
Gruß,
jomjolEDIT: bei einer Änderung bin ich mir noch nicht ganz sicher: löschen des "/img_tmp" Verzeichnisses zu Beginn des Flows. Da der Flow fast 2 Minuten dauert, werden währendessen keine Bilder oder nur Bilder ohne ROIs angezeigt. Vielleicht gibt es da noch eine andere Lösung?
-
Hallo @jomjol,
bei einer Änderung bin ich mir noch nicht ganz sicher: löschen des "/img_tmp" Verzeichnisses zu Beginn des Flows. Da der Flow fast 2 Minuten dauert, werden währendessen keine Bilder oder nur Bilder ohne ROIs angezeigt. Vielleicht gibt es da noch eine andere Lösung?
Stimmt, da dran habe ich nicht gedacht. Hab ich gestern eingebaut und nur kurz getestet.
Es sollte aber mit zwei Ständen gehen, zwischen denen gewechselt wird. Einer für die Anzeige zweiter für die Erkennung. -
@pfried Danke für deine Hilfe
Denke du meinst eine .ini aus der HomeMatic, oder.
Ich habe gar keine HomeMatik. Denke da kommt ja ursprünglich das hm.rega her.
Ich hab daher aus den hm.rega neue Objekte mit HM.... gebildet und mal geschaut was passiert.
Ich bin kein programmierer und habe das Blockly etwas umgebaut (siehe Blockly_neu.txt.
Dort wird dann auf den Wasserzähler im Pharser verwiesen und ich dachte, dass dann im Script die Daten Wasserverbrauch_alt, _aktuell u.sw als variablen unter HM... ablegt werden. Sah auch ganz gut aus nur dass
er eben nur die ersten drei Stellen (162 m3) anzeigt anstelle 162.0034. Und somit auch alle weiteren Daten
entsprechend falsch sind. Man sieht das oben ganz gut da der Zähler von alt 161 auf 162 neu ging.
Der Wert HM169 , sollte der Verbrauch während der letzten 15 min sein und wird dann als 1000l angezeigt weil er eben die 4 Nachkommastellen (nach dem Punkt) gar nicht auswertet. Kann es daran liegen, dass der Pharser.0 einen Punkt statt ein , verwendet?
Ev. kann ich das Blockly von euch ja auch gar nicht ohne hm.rega verwenden oder ich müsste noch irgendwas tun
um die im Pharser.0 angezeigten Werte auch komplett nach dem Punkt dargestellt zu bekommen.
LG Horst