Hallo in die Runde,
folgende Konfiguration: Habe eine Shelly1 und eine Sonoff 4CH mit Tasmota geflasht. Dazu jeweils ein Skript geschrieben, welches mit Websend eine php Seite aufruft. Dort kommt ein JSON String zurück, welches das Skript dann im >E Bereich abfängt.
Funktioniert meistens, jedoch übernimmt er manchmal trotz richtigen Response der Webseite den Wert nicht in die Variable. Ich habe an einer Stelle schonmal einen Delay eingebaut, jedoch tritt der Fehler immer noch auf.
Da sich dieser Fehler dann auch 2-3 Mal hintereinander ereignet, sollte das nicht an einer späteren Response der Webseite liegen, sonst würde er den Wert ja spätestens bei der zweiten Abfrage richtig übernehmen in die Variable. Aus gleichem Grund glaube ich nicht, dass ein Delay im >E Bereich helfen würde, oder gibt es da andere Meinungen?
Hier ein Auszug aus der Konsole:
Hier wird der Befehl richtig übernommen:
09:50:00 RSL: stat/tasmota_FA565B/RESULT = {"Time":"2020-10-18T10:50:01","WERT":{"Action":0.000}}
09:50:00 RSL: stat/tasmota_FA565B/RESULT = {"WebSend":"Done"}
09:50:00 Befehl ist 0.00
Hier wird der Wert 1.000 nicht in die Variable "Befehl" eingelesen:
09:55:00 RSL: stat/tasmota_FA565B/RESULT = {"Time":"2020-10-18T10:55:01","WERT":{"Action":1.000}}
09:55:00 RSL: stat/tasmota_FA565B/RESULT = {"WebSend":"Done"}
09:55:00 Befehl ist 0.00
Fehler wiederholt sich noch 2 Mal und dann klappt es doch:
10:10:00 RSL: stat/tasmota_FA565B/RESULT = {"Time":"2020-10-18T11:10:01","WERT":{"Action":1.000}}
10:10:00 RSL: stat/tasmota_FA565B/RESULT = {"WebSend":"Done"}
10:10:00 Befehl ist 1.00
10:10:00 laststate ist 0.00 VOR der Ausfuehrung
10:10:01 Befehl nach Delay ist 1.00
10:10:01 Script: performs "Power1 1 "
10:10:01 RSL: stat/tasmota_FA565B/RESULT = {"POWER":"ON"}
10:10:01 RSL: stat/tasmota_FA565B/POWER = ON
10:10:01 laststate ist 1.00 NACH der Ausfuehrung
Hier noch das Skript:
>D
minute=0
result=0
laststate=0
>B
>S
minute=int(time/5)
if chg[minute]>0
then
=>WebSend [xxx.de] /Seite.php?id=6
=>print Befehl ist %result%
=>print laststate ist %laststate% VOR der Ausfuehrung
delay(1000)
=>print Befehl nach Delay ist %result%
if result==0
then
if laststate==1
then
=>Power1 0
laststate=0
endif
endif
if result==1
then
if laststate==0
then
=>Power1 1
laststate=1
endif
endif
=> print laststate ist %laststate% NACH der Ausfuehrung
endif
>E
result=WERT#Action
Alles anzeigen
Vielen Dank schonmal für eure Meinungen/Hilfe. Ich komme leider nicht mehr weiter. Fehler tritt bei DC als auch AC Betrieb auf, bei 3 Geräten.
Viele Grüße
Juri