Tasmota An-/aus-Zustand mit JavaScript abfragen

  • Ich kann zwar kein Java nur ein bisschen Python, bin aber sicher, dass es unter Java ähnlich geht:

    Schicke das Statement http://IP.../cm?cmnd=status an das Gerät. Die Antwort ist ein JSON-String in der Form

    Code
    {"Status":{"Module":1,"DeviceName":"Schalter","FriendlyName":["Schalter"],"Topic":"Schalter","ButtonTopic":"0","Power":0,"PowerOnState":3,"LedState":1,"LedMask":"FFFF","SaveData":1,"SaveState":1,"SwitchTopic":"0","SwitchMode":[0,0,0,0,0,0,0,0],"ButtonRetain":0,"SwitchRetain":0,"SensorRetain":0,"PowerRetain":0}}

    Mit einem entsprechende JSON Parser fischt du dir den Wert von Status['Power'] raus und weist in einer Variablen zu. In der steht entweder 0 (aus) oder 1 (an). Damit kannst du weiter arbeiten.

  • Erst einmal vielen Dank für die Antwort, lieber Jörg.

    Verstanden habe ich, dass ungeklärt ist, wie JavaScript den JSON-String übernimmt. Dass es ein JSON-String ist, scheint mir hingegen sicher zu sein. Wenn ich die URL direkt in den Browser eingebe, bekomme ich die gewünschten Werte zurückgemeldet. Aufgrund meiner Unerfahrenheit schaffe ich es aber nicht den String in eine JavaScript-Variable zu übernehmen. Danach käme ich wahrscheinlich klar.


    Hat jemand weitere Ideen?

  • Also ich mache es wie Jörg und lese das ganze in ein Python JSON Objekt ein und nutze dann einen Standardparser und fische den Wert raus.


    Beispielcode dazu hab ich mir ergoogelt und mich Rrangetastet. Bin auch kein erfahrener Python Programmierer

  • Hi.


    normalerweise macht man das so in Javascript:


    Der Respont steht dann in der Variable "this.responseText" und wird mit JSON.parse auf den gewünschten Parameter geparst.

    Allerdings funktioniert das nach meinen Test mit Tasmota nicht. Der Repsonse bleibt immer leer....

    Kommt zum einen kein status "200" als Antwort und wenn man den raus nimmt kommt auch nix. Komisch.

    Online Compiler


    Sonoff-Basic / Sonoff-RF / Sonoff-Touch / Sonoff S20 / PowStro Basic / HomeMagic / Sonoff-RF-Bridge mit diversen 433MHz RF Sender/Empfänger / Shelly_1 / ESP-WiFi-Dimmer / Gosund SP111 / ESP12E

    Sensoren: BME280/BMP280/HC-SR501/HC-SR04/ACS712

    mosquitto/bash/html/cgi auf RPI 2B+/Sprachsteuerung via IFTTT/4xGoogle-Home-Mini

  • Ich bin hochgradig beeindruckt. DANKE!!!!


    Mittlerweile habe ich einen Grundkurs JavaSkript im Internet angesehen und auf dieser Basis die wirklich schlechte Anleitung von HTTP-Shortcuts halbwegs verstanden. Der Erfolg ist ein funktionierendes Skript. Ich benötige zur Unterscheidung von an und aus nur den 43. Buchstaben:


    vibrate();

    // Beispielrückmeldung 1: Congratulations! You've fired the meross1_aus event

    // Beispielrückmeldung 2: Congratulations! You've fired the meross1_an event

    const myBody = response.body.charAt(43);

    // bei aus: 'u', bei an: 'n'

    let g1 = 'n';

    if (myBody === g1) {

    renameShortcut('', 'Roter Stern (an)'); speak('Der rote Stern ist an', 'de');

    } else {

    renameShortcut('', 'Roter Stern (aus)'); speak('Der rote Stern ist aus', 'de');

    }


    Das funkioniert: "Roter Stern" wechselt zwischen "an" und "aus", eine Stimme spricht zusätzlich diese Information.


    Vielleicht hilft das jemandem.

  • Ich kann zwar kein Java nur ein bisschen Python, bin aber sicher, dass es unter Java ähnlich geht:

    Schicke das Statement http://IP.../cm?cmnd=status an das Gerät. Die Antwort ist ein JSON-String in der Form

    Code
    {"Status":{"Module":1,"DeviceName":"Schalter","FriendlyName":["Schalter"],"Topic":"Schalter","ButtonTopic":"0","Power":0,"PowerOnState":3,"LedState":1,"LedMask":"FFFF","SaveData":1,"SaveState":1,"SwitchTopic":"0","SwitchMode":[0,0,0,0,0,0,0,0],"ButtonRetain":0,"SwitchRetain":0,"SensorRetain":0,"PowerRetain":0}}

    Mit einem entsprechende JSON Parser fischt du dir den Wert von Status['Power'] raus und weist in einer Variablen zu. In der steht entweder 0 (aus) oder 1 (an). Damit kannst du weiter arbeiten.


    Hier mal ein Auszug aus meinem Code für mein daily backup; etwas gekürzt und die privaten Daten anonymisiert :-)

    Ohne try/except, aber das kann man einbauen. So schon lauffähig, wenn Mem1 und Mem2 gesetzt sind.


  • So ... hat mich jetzt doch noch interessiert wie es mit Tasmota schön zu lösen ist. Vielleicht interessiert ja jemanden.


    Mit fetch, das ja XMLHttpRequest ablöst, hier nun ein Beispiel wie man den Response erhält und auswertet.

    Allerdings muss für fetch in Tasmota CORS freigegeben werden.

    In der Konsole, für alle Locations:

    CORS *


    HTML:

    - Beispiel IP ist 192.168.1.170

    - der geparste output für Power steht in der Variablen PowerStatus.POWER (.POWER stell den Pararmeter dar der geparst wird)

    - Ausgabe erfolgt im Beispiel als PopupFenster


    Online Compiler


    Sonoff-Basic / Sonoff-RF / Sonoff-Touch / Sonoff S20 / PowStro Basic / HomeMagic / Sonoff-RF-Bridge mit diversen 433MHz RF Sender/Empfänger / Shelly_1 / ESP-WiFi-Dimmer / Gosund SP111 / ESP12E

    Sensoren: BME280/BMP280/HC-SR501/HC-SR04/ACS712

    mosquitto/bash/html/cgi auf RPI 2B+/Sprachsteuerung via IFTTT/4xGoogle-Home-Mini

    2 Mal editiert, zuletzt von HoerMirAuf ()

  • Vielen herzlichen Dank; Es funktioniert tadellos. Habe es auch für andere responses probiert und super !! :)