DriveWithTheDog

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.