Klar, das würde auch gehen, dann müsste ich aber Ports aufmachen. So ist es mir lieber
Aber Problem hat sich mittlerweile gelöst - "eres" ist nicht der Weg. Habe in einem anderen Thread die Antwort bekommen:
Klar, das würde auch gehen, dann müsste ich aber Ports aufmachen. So ist es mir lieber
Aber Problem hat sich mittlerweile gelöst - "eres" ist nicht der Weg. Habe in einem anderen Thread die Antwort bekommen:
Ok, vielen Dank - dann werde ich das nochmal neu flashen und hier Feedback geben. Hoffe, dass anderen damit auch geholfen ist.
Benutze Tasmota 8.5.1, hier noch die Core Version: 2_7_4_1/2.2.2-dev(38a443e)
- oder hätte ich die Geräte mit Development 9 nochmals flashen sollen?
Habe den Debug bereits drin gehabt, aber er gibt immer das Gleiche aus wie die Result Message. Habe es aber nochmals reingemacht und versuche den Fehler zu reproduzieren, dann stelle ich es hier rein.
Danke!
Danke nochmal für deine Antwort. Der JSON bleibt immer gleich seitens der php Seite, hier kann ich mir keine Fehlerquelle vorstellen.
Habe zuerst in >D die Variable result statt 0 auf 2 gesetzt. Als der Fehler aufgetaucht ist:
08:13:09 RSL: stat/tasmota_FA565B/RESULT = {"Time":"2020-10-19T09:13:09","WERT":{"Action":1}}
08:13:09 RSL: stat/tasmota_FA565B/RESULT = {"WebSend":"Done"}
08:13:09 Befehl ist 2.00
Anscheinend wurde hier der Wert in Sektion >E nicht übernommen. Dann habe ich wie oben geschrieben in >E den Vorschlag eingetragen:
08:25:00 RSL: stat/tasmota_FA565B/RESULT = {"Time":"2020-10-19T09:25:00","WERT":{"Action":1}}
08:25:00 EVENT: 1.00
08:25:00 RSL: stat/tasmota_FA565B/RESULT = {"WebSend":"Done"}
08:25:00 EVENT: 99.00
08:25:00 Befehl ist 99.00
aber auch schon das hier bekommen:
08:24:28 RSL: stat/tasmota_FA565B/RESULT = {"Time":"2020-10-19T09:24:28","WERT":{"Action":1}}
08:24:28 EVENT: 99.00
08:24:28 RSL: stat/tasmota_FA565B/RESULT = {"WebSend":"Done"}
08:24:28 EVENT: 99.00
08:24:28 Befehl ist 99.00
Irgendwie werde ich aus all dem nicht schlau - vielleicht hat es mit der Firmware selbst zu tun, könnte ja sein dass dort ein Bug ist.
Bei Github habe ich gerade etwas gelesen, vielleicht liegt es ja damit zusammen:
scripting json parsing problems - first key/value pair unavailable #9475
Vielen Dank! Habe das mal so reingemacht, jedoch kommt hier die gleiche Antwort wie oben:
10:10:00 RSL: stat/tasmota_FA565B/RESULT = {"Time":"2020-10-18T11:10:01","WERT":{"Action":1.000}}
Wie gesagt, die Webseitenantwort war korrekt - die Variable hat aber komischerweise den falschen Wert bekommen.
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
Vielen Dank für eure schnellen Antworten und Tipps!
Es war genauso, wie gemu2015 es geschrieben hat und klappt jetzt einwandfrei!
Meine Shelly schickt eine Anfrage mit WebSend an eine PHP Seite, diese prüft die Datenbank und gab dann den Wert 1 oder 0 zurück. Jetzt habe ich in der PHP Programmierung die Ausgabe als JSON String verändert:
if ($result) {
die('{"Time":"' . (date("Y-m-d\TH:i:s")) . '","SCHALTER":{"Befehl":1.000}}');
//Schalter soll auf AN gehen
} else {
die('{"Time":"' . (date("Y-m-d\TH:i:s")) . '","SCHALTER":{"Befehl":0.000}}');
//Schalter soll auf AUS gehen
}
Und in der >E Sektion dann wie beschrieben den Wert abgegriffen:
Damit und einer IF-Anweisung kann ich den Schalter nun ein- oder ausschalten gemäß meiner programmierten Datenbank.
Viele Grüße
PS: Falls jemand anders etwas Ähnliches vor hat: Tasmota erkennt keine https (Port 443) Antworten, es muss über den Port 80 gemacht werden.
Hallo in die Runde,
mithilfe des WebSend Befehls bekomme ich in der Konsole Folgendes angezeigt:
13:55:00 RSL: stat/tasmota_FA5620/RESULT = 1
Jetzt brauche ich diesen Result nur noch abgespeichert in einer Variable in meinem Skript, bzw. möchte ich ihn mit "if-then" verwenden. Weiß hier vielleicht jemand wie das geht? Wenn ich "eres" auslese, wird hier nur 0.00 zurück gegeben. In der Tasmota Beschreibung habe ich Folgendes gefunden:
eres
= result of >E section set this var to 1 in section >E to tell Tasmota event is handled (prevents MQTT)
Kann es vielleicht daran liegen, dass die PHP Seite einen String-Wert übermittelt?
Danke schonmal und viele Grüße
Juri
Mach ich - danke !
Vielen Dank! Das war tatsächlich das Problem, mit dem Port 80 funktioniert der Websend Befehl einwandfrei!
Jetzt bekomme ich den korrekten Wert in der Konsole angezeigt:
13:55:00 RSL: stat/tasmota_FA5620/RESULT = 1
Jetzt brauche ich diesen Result nur noch abgespeichert in einer Variable in meinem Skript, bzw. möchte ich ihn mit "if-then" verwenden. Weiß hier vielleicht jemand wie das geht? Wenn ich "eres" auslese, wird hier nur 0.00 zurück gegeben. In der Beschreibung habe ich Folgendes gefunden:
eres
= result of >E section set this var to 1 in section >E to tell Tasmota event is handled (prevents MQTT)
Hallo in die Runde,
schreibe gerade an einem Skript: meine Shelly1 soll mit Tasmota eine php-Adresse aufrufen, dort kommt entweder der Wert "0" oder "1" zurück. Dementsprechend soll der Schalter Off oder On gehen. Dies sollte entweder alle z.B. 5 Minuten geschehen oder 1 Mal in der Stunde z.B. um 14:55 Uhr, etc.
"Use_Websend_Response" ist aktiviert, da soll laut Dokumentation das Ergebnis von Websend unter >E abzugreifen sein (ich nutze "eres")
Wenn ich mit Port 80 das versuche, bekomme ich eine Antwort vom Webserver, dass eine Umleitung zu https aktiv ist. Sobald ich Port 443 abfrage kommt nur der Response: "Websend completed"
und "eres" zeigt immer 0.00, obwohl die php Seite 1 ausgibt.
Hier noch mein Skript:
>D
minute=0
>B
=>print Bootvorgang
>S
minute=int(time/5)
if chg[minute]>0
then
=>WebSend [url:443] /api.php?id=5
=>print 5 Minuten
=>print %eres%
endif
>E
Alles anzeigen
Liegt das vielleicht an der Ausgabe von der php Seite oder hab ich hier irgendwo einen Denkfehler gemacht? Vielen Dank schonmal für eure Hilfe!
Beste Grüße, Juri