Tasmota JSON to JavaVars im IOBroker

Ein einfaches kleines Script im JSON zu splitten und in Java Vars abzulegen

/*
+------------------------------------------------------------------------------------------------+
| DIESES SCRIPT IST FÜR DIE VERWENDUNG VON EINEM SONOFF MIT DEM TEMPERATURFÜHLER SI7021 GEDAC
| Besten Dank an Paul53 der indirekt und an kmxak der direkt zur Lösung beigetragen hatte:
| https://forum.iobroker.net/viewtopic.php?f=21&t=17737#p185518

| https://forum.iobroker.net/viewtopic.php?t=7204

| http://jsonviewer.stack.hu/

+------------------------------------------------------------------------------------------------+
*/

// Source - hier wird der Pfad zum JSON Wert notiert:
const varSourceJSON = "mqtt.0.ICS_Sonoff.Terasse.SENSOR" /*Platzhalter für Notizen*/;

// Destination - hier wird der Pfad zu den Werten als Java VAR notiert:
const varDestHelligKeit = "Terasse.Analog_in_Digit" /*Platzhalter für Notizen*/;
const varDestTEMP = "Terasse.Temperatur_in_C"    /*Platzhalter für Notizen*/;
const varDestTEMPo = "Outside.Temperatur         /*Platzhalter für Notizen*/;
const varDestHUMI = "Terasse.Luftfeuchtigkeit_in_Proz"    /*Platzhalter für Notizen*/;
const varDestDRUC = "Terasse.Luftdruck_in_mBar"       /*Platzhalter für Notizen*/;

// ------------------------------------------------------------------------------------------------- //

// Create States (möglicherweise Schreibzugriff in Objekte??? - keine Ahnung warum ich das angeben muss)
createState(varDestHelligKeit, 0,{type: 'number',name: 'Aktuelle Helligkeit', read: true,write: true,role: 'value'});
createState(varDestTEMP, 0,{type: 'number',name: 'Aktuelle Temperatur', read: true,write: true,role: 'value'});
createState(varDestTEMPo, 0,{type: 'number',name: 'Aktuelle Temperatur', read: true,write: true,role: 'value'});
createState(varDestHUMI, 0,{type: 'number',name: 'Aktuelle Luftfeuchtigkeit', read: true,write: true,role: 'value'});
createState(varDestDRUC, 0,{type: 'number',name: 'Aktuelle Luftdruck', read: true,write: true,role: 'value'});


// Triggere auf jede Änderung vom SourceWert
on({id: varSourceJSON , change: "any"},
function (obj) {
    try {obj = JSON.parse(getState(varSourceJSON).val);
    } catch (e) {
            console.error('Cannot parse: ' + getState(varSourceJSON).val);
            return;
     }
    
    //Variablen für – diesen Schritt könnte man sich sparen, ich korrigiere hier aber Ungenauigkeiten
     varHELLIG = obj.ANALOG.A0;
     varTemperatur = obj.BME280.Temperature-6;
     varLuftfeuchtigkeit = obj.BME280.Humidity;
     varLuftdruck = obj.BME280.Pressure;
    
     // Schreibe die passenden Werte in DESTINATION
     setState(varDestHelligKeit, varHELLIG);
     setState(varDestTEMP, varTemperatur);
     setState(varDestTEMPo, varTemperatur);
     setState(varDestHUMI, varLuftfeuchtigkeit);
     setState(varDestDRUC, varLuftdruck);

});

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.