ESPEasy TaskValues per http setzen. Vorsicht! Speicherfehler

Moderatoren: schnurzel59, eltoro

Neues Thema Antworten
schnurzel59
Offline
Beiträge: 2
Registriert: Mi Feb 27, 2019 12:16 am

ESPEasy TaskValues per http setzen. Vorsicht! Speicherfehler

Beitrag von schnurzel59 » Mo Mär 04, 2019 12:31 am


Hi,

Hier mal meine Erkenntnisse zum Befehl "TaskValueSet".
Der Befehl kann per Rules oder auch per http von allen Geräten, die per http-Anfrage Informationen versenden können, ausgeführt werden.
Vorweg möchte ich noch erwähnen, das ich Anfangs immer über die richtige Syntax gegrübelt habe, da in jedem Forum was anderes geschrieben wurde.
Wenn dann mit dem gesamten Befehlsstring was nicht funktionierte, dann schob ich es meist auf die falsche Schreibweise. IRRTUM.
Es ist kaum möglich, da viel falsch zu schreiben, denn es gibt hier keine Regeln.
Ziel ist das beschreiben des Dummy-Devices Nr. 10 und seines 3.Values. IP des ESP ist 192.168.55.24.
es existiert eine Rule mit folgendem Inhalt. Es soll der Wert 35.42 geschrieben werden.

Code: Alles auswählen

on test do
   taskvalueset 10 3 %eventvalue%
endon
Folgende Varianten funktionieren bei mir.
In der Browser-Adresszeile zur Ausführung innerhalb der Rules:

Code: Alles auswählen

http://192.168.55.24/control?cmd=event,test=35.42
Direkt in die Variable schreiben:

Code: Alles auswählen

http://192.168.55.24/control?cmd=taskvalueset 10 3 35.42
Oder direkt in den Rules mit:

Code: Alles auswählen

taskvalueset 10 3 35.42
Die Ergebnisse sind immer gleich.
Ich habe bewusst alles in Kleinschreibung und ohne Kommas getestet, um zu sehen, ob die Schreibweise irgend eine Rolle spielt. Groß -Klein-Gemischt-mit Komma-ohne Kommas.
Alles egal. Berechnungen können auch gesendet werden:

Code: Alles auswählen

6*9/8 ergibt 6.75  
94/7-9 ergibt sauber gerundet 4.428572 
Nur Addition mag er nicht. Da wird nach dem + der Rest ignoriert. Zumindest, wenn es per http gesendet wird.
Nun noch ein ineressanter Effekt:

Code: Alles auswählen

2^30 ergibt 1073741824
2^32 ergibt 4294967296
2^45 ergibt 35184372088832
Ebenfalls alles korrekt gespeichert. Sind ja mittlerweile 14 Stellen. Geht aber nur mit 2er-Potenzen. Wenn ich jetzt aber eine 9-stellige Zahl, wie 123456789 ohne Berechnung zu speichern versuche, dann kommen Fehler.

Code: Alles auswählen

123456789 ergibt 123456792
987654321 ergibt 987654336
Äusserst merkwürdig. Wenn ich es jetzt auf die Spitze treibe und "987654321123456789" schreibe, dann beschreibe ich wahrscheinlich Speicherbereiche, wo ich besser nichts schreiben sollte.
Man sieht das daran das die Werte in den Devices kurz angezeigt werden, aber dann sofort wieder überschrieben werden.

Code: Alles auswählen

taskvalueset,8,4,987654321123456789
987654324152696894,14   wird kurzzeitig in den Devices angezeigt. Fehler ab der 9. Stelle einschließlich Nachkommastellen bei einer ganzen Zahl?
987654324152696800,00  wird nach einer weiteren Sekunde angezeigt. Ebenfalls ab 9. Stelle falsch

Diese passiert wie bereits erwähnt nicht mit 2er-Potenzen. Die werden problemlos gespeichert.
Das soll jetzt keine Spielerei sein, sondern soll nur zeigen, dass von der Firmware nichts überwacht wird. Das Problem kann ja auch bei "normalen " Anwendungen passieren.
Ich hatte mir ein Device zum Zählen von Ereignissen eingerichtet, welches ich laufen lasse und vergass es wieder, weil ich es nicht mehr brauchte. Irgendwann verreckt der Kollege,
startet neu und keiner weiß warum. Aber auch ohne eine solche Vorgehensweise kommt es bei mir auch mal vor, das plötzlich alle Values auf 0 gesetzt sind und der ESP wohl neu
gestartet ist. Was passiert ist, steht natürlich in keinem Log mehr drinnen.
Nun kann man sich natürlich auch andere Ungereimtheiten erklären. Wenn es keine richtigen Beschränkungen gibt, und Speicherbereiche willkürlich überschrieben werden können,
kann natürlich der fleißigste Rechenknecht seine Aufgaben nicht immer richtig erledigen.
PLATFORMIO_ESP12E || ESP_Easy_mega-20190315_dev
Wichtige Dinge würde ich damit z. Zeit nicht steuern wollen.

Neues Thema Antworten