Sensorwerte von MQTT in Objekt schreiben

  • Ich bin am verzweifeln da ich mich leider mit Javascript nicht auskennte.

    Ich bekomme von MQTT meine Sensordaten leider nur als Json String .

    schimmer-media.de/attachment/1726/

    Den MQTT Adapter muss ich holen da mir mit den Sonoff Adapter der Wert vom Ultraschallsensor nicht angezeigt wird.

    Ich habe jetzt schon verschiedene Script Beispiele gefunden wie man die einzelne Werte in Objekte schreiben kann,

    aber das klappt bei mir alles nicht.

    Kann mir jemand helfen der sich was mit Javascript auskennt?

  • Genau das würde mich auch interessieren. Ich versuche mich gerade an dem Waschmaschinen Script mit dem Sonoff POW.

    Da ich diesen auch unter Node - Red noch benutze möchte ich das gerne weiter per MQTT machen und nicht über den Sonoff Adapter.

    Über MQTT kommen halt die ENERGY Daten als JSON String wobei ich aber die Watt Zahl in einem einzelnen Datenpunkt haben muss.

    Oder jemand hat eine Idee wie ich das mit der Waschmaschine fertig und Telegram direkt in Node - Red hinbekomme.

    Vielleicht hat jemand eine Idee.

  • So habe heute nochmal ein paar Sachen ausprobiert und es dann doch hinbekommen mit den Datenpunkten.

    Ich zeige mal meine Lösung falls das nochjemand braucht.


    schimmer-media.de/attachment/1755/

    schimmer-media.de/attachment/1756/

  • Hallo,

    ich habe ein ähnliches Problem und komme überhaupt nicht weiter:

    Meine JSON-Ausgabe vom Xiaomi Temperatursensor sieht folgendermaßen aus:

    {"temperature":22.23,"humidity":49.28,"battery":"95.00","voltage":2985}

    Nun dachte ich, ich ändere das o.g. Skript so ab:

    on({id: 'mqtt.0.zigbee2mqtt.0x00158d000208ffbf', change: "any"}, function (obj) {


    var Temperatur

    //der try ist wichtig das der adapter nicht abschmiert bei einem fehler, hiermit pasen wird die json in ein object


    try {obj = JSON.parse(getState('mqtt.0.zigbee2mqtt.0x00158d000208ffbf').val);

    } catch (e) {

    console.error('Cannot parse: ' + getState('mqtt.0.zigbee2mqtt.0x00158d000208ffbf').val);

    return;

    }


    Temperatur = obj.temperature;

    setState('javascript.0.Temperatur', (Temperatur));

    });

    Aber leider funktioniert es bei mir nicht ;(

    Kann mir bitte jemand einen Tipp dazu geben?

    Danke & Grüße,

    Homer

  • Was geht denn genau nicht?

    0x00158d000208ffbf ist auch der Datenpunkt unter dem {"temperature":22.23,"humidity":49.28,"battery":"95.00","voltage":2985} zu finden ist?

    Bekommst du auf der Console den "Cannot parse: ..." Fehler angezeigt?

    Wird die Funktion überhaupt aufgerufen (einfach mal als neue Zeile unter "var Temperatur"

    Code
     log("Hier bin ich","info");

    einfügen)?

    Die letzten Worte vor dem Weltuntergang: "...das ist technisch völlig unmöglich..."

    aktuelle Projekte: <<< Magic Mirror +++ RMS +++ Wetterstation +++ Somfy Fernbedienung >>>

  • Ok, jetzt funktioniert es!

    Mit folgendem Skript:

    var idJSON = 'mqtt.0.zigbee2mqtt.0x00158d000208ffbf';

    var idTemperatur = 'mqtt.0.Temperatur';
    var idSpannung = 'mqtt.0.Spannung';

    var idLuftfeuchte = 'mqtt.0.Luftfeuchtigkeit';

    function JSONtoTemp(json) {

    var obj = JSON.parse(json);

    Temperatur = obj.temperature;

    Spannung = obj.voltage/1000;

    Luftfeuchtigkeit = obj.humidity;

    setState(idTemperatur, Temperatur);

    setState(idSpannung, Spannung);
    setState(idLuftfeuchte, Luftfeuchtigkeit);

    }

    JSONtoTemp(getState(idJSON).val); // Script start


    on(idJSON, function(dp) { // triggern bei Wertänderung

    JSONtoTemp(dp.state.val);

    });

    Einmal editiert, zuletzt von Homer73 (26. Juni 2018 um 14:51)

  • könntest Du bitte mal einen Screenshot des Datenpunktes zu obigem Beispiel mitgeben? Das ist für mich grad nicht komplett nachvollziehbar. Ich habe ein ähnliches Problem mit dem Auswerten des JSON vom NFC. Das sieht der Inhalt folgendermaßen aus:

    Code
    {"idx":1,"nvalue":0,"svalue":"3806057774"}

    Auswerten will ich lediglich die zahl am Ende.

  • im Prinzip ja. Also mir fehlt der Zusammenhang zwischen den Variablen und den Werten.

    Code
    var idTemperatur = 'mqtt.0.Temperatur'; 
    var idSpannung = 'mqtt.0.Spannung';
    var idLuftfeuchte = 'mqtt.0.Luftfeuchtigkeit';

    denn z.B. ist humidity ja als englisches Wort nicht dabei...also wie geht das?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!