NEWS


  • Nabend,
    ich konnt mein Problem zwar inzwischen über NodeRed lösen, aber irgendwie lässt es mir doch keine Ruhe dass ich es nicht über JavaScript hinbekam. Schließlich möchte man ja auch etwas lernen 🙂

    Ich habe einen MHZ19B Co2 Sensor, welcher seine Daten zum MQTT Broker liefert (Sonoff Adapter nutze ich in diesem Fall bewusst nicht).

    Id:

    mqtt.0.SmartHome.Wohnzimmer.Co2.SENSOR
    

    Wert:

    {"Time":"2019-11-28T16:45:07","MHZ19B":{"Model":"B","CarbonDioxide":786,"Temperature":23.0},"TempUnit":"C"}
    

    Ich möchte nun lediglich den Wert von CarbonDioxide in eine neue Variable schreiben. Mein Problem ist dass ich nicht verstanden habe wie ich quasi auf die Unterebene "MHZ19B" gelange.

    Auf Grund der anderen Beiträge hatte ich es mit

    var pfad = "javascript.0.jsonconverter.";
    var channel = "wohnzimmer.";
    var sname = "co2.";
     
     
    var idco2 = pfad + channel + sname + 'co2';
    
     
    // Create States
     
    createState(idco2, 0,{type: 'number',name: 'CarbonDioxid', read: true,write: true,role: 'value'});
     
    // script beginning
    on({id: 'mqtt.0.SmartHome.Wohnzimmer.Co2.SENSOR', change: "any"}, function (obj) {
     
       //variabele erstellen fuer meine 3 beispiel objecte
            var co2;
    
     
       try {obj = JSON.parse(getState('mqtt.0.SmartHome.Wohnzimmer.Co2.SENSOR').val);
       } catch (e) {
               console.error('Cannot parse: ' + getState('mqtt.0.SmartHome.Wohnzimmer.Co2.SENSOR').val);
               return;
        }
     
       co2 = obj.CarbonDioxide;
     
        setState(idco2, co2);
     
       log(co2);
    
    });
    

    probiert, aber das schlug fehl. And Dinge wie TempUnit kam ich zwar beim Testen heran, aber nicht an die innerhalb von "MHZ19B": {}
    was ja ein Array zu sein scheint?

    Ich habe dann eher im Nebel gestochert und Dinge wie

    co2 = obj.MHZ19B.CarbonDioxide;

    ausprobiert, aber das war wohl der falsche Ansatz.

  • Developer

    leif1 dein letztes Beispiel ist richtig. Probier mal nachstehendes.

    let values;
    try {
       values = JSON.parse(getState('mqtt.0.SmartHome.Wohnzimmer.Co2.SENSOR').val);
    } catch (e) {
       console.error('Cannot parse: ' + getState('mqtt.0.SmartHome.Wohnzimmer.Co2.SENSOR').val);
       return;
    }
    let co2 = values.MHZ19B.CarbonDioxide;
    

    J.A.R.V.I.S.


  • Danke J.A.R.V.I.S.

    Nun bekomme ich im log immer

    (856) Error in callback: SyntaxError: Identifier 'co2' has already been declared
    

  • leif1 sagte:

    Identifier 'co2' has already been declared

    Dann lösche die Deklaration in Zeile 17

       //variabele erstellen fuer meine 3 beispiel objecte
            var co2;
    

  • Danke vielmals euch beiden, nun läuft es. Mir war nicht so ganz bewusst das "let" ebenfalls eine Variable deklariert. Man lernt nie aus 🙂

  • Developer

    leif1 das freut mich zu hören. Es gibt auch einige Unterschiede zwischen den beiden Möglichkeiten. Falls dich das näher interessiert, kannst du dir mal folgenden Artikel durchlesen (Unterschiede var und let). Ich würde sagen, dass let die schönere Variante ist.

    J.A.R.V.I.S.


  • J.A.R.V.I.S.
    um die Verwirrung komplett zu machen ,
    dass würde auch gehen:

     const tVal = {"Time":"2019-11-28T16:45:07","MHZ19B":{"Model":"B","CarbonDioxide":786,"Temperature":23.0},"TempUnit":"C"}
     const { MHZ19B: { CarbonDioxide: co2 } } = tVal;
     if(co2)
       log(co2);
    

    guten nacht 😉

  • Developer

    Nahasapee Ist allerdings für eine einzelne Variable nicht unbedingt leserlicher 🙂


  • AlCalzone In der Kürze liegt die Würze. 😉

  • Developer

    Nahasapee kürzer ist es auch nicht 😅

    const co2 = values.MHZ19B.CarbonDioxide;
    const { MHZ19B: { CarbonDioxide: co2 } } = values;
    

    Imo macht diese Form der Destrukturierung nur bei mehreren Variablen Sinn.


  • AlCalzone sagte in JSON parsing (verschachtelt):

    Nahasapee kürzer ist es auch nicht

    Mein Frau sagt immer auf die Länge kommt es nicht an! 🤥

Suggested Topics

2.1k
Online

34.7k
Users

40.8k
Topics

558.7k
Posts