Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Heizungswerte einer UVR1611 via CMI mittels JSON anlegen & refreshen

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Heizungswerte einer UVR1611 via CMI mittels JSON anlegen & refreshen

    This topic has been deleted. Only users with topic management privileges can see it.
    • P
      Patxi last edited by

      Hallo,

      ich bin noch kompletter ioBroker Anfänger und in Java-Script nicht wirklich zu viel bewandert.

      Was ich bis jetzt aus Foren Beiträgen gelesen habe, vermute ich aber, dass es zum Auslesen der Heizungswerte meiner UVR1611 (mittels CMI V1.28.1) nicht dumm wäre.

      Die meisten älteren Versuche die UVR Daten zu bekommen gehen über das parsen der Webschnittstelle. Seit letztem Jahr aber kann man aber problemlos ein JSON formatiertes Ergebnis via http request bekommen. Ein request für "Eingänge - In", einen für "Ausgänge - Out" & Network analog/digital "Na,Nd"

      Beschreibung von der Technischen Alternative:

      https://www.ta.co.at/downloads/datei/17 … -json-api/

      Beispiel request: In, Out, Network anlog & digital

      http://user:password@192.168.31.99/INCL ... =I,O,Na,Nd

      Ergebnis:

      {
        "Header": {
          "Version": 3,
          "Device": "80",
          "Timestamp": 1519813410
        },
        "Data": {
          "Inputs": [
            {
              "Number": 1,
              "AD": "A",
              "Value": {
                "Value": 51.2,
                "Unit": "1"
              }
            },
            {
              "Number": 2,
              "AD": "A",
              "Value": {
                "Value": 48.5,
                "Unit": "1"
              }
            },
            {
              "Number": 3,
              "AD": "A",
              "Value": {
                "Value": -12.3,
                "Unit": "1"
              }
            },
            {
              "Number": 4,
              "AD": "A",
              "Value": {
                "Value": 26.9,
                "Unit": "1"
              }
            },
            {
              "Number": 5,
              "AD": "A",
              "Value": {
                "Value": 32.1,
                "Unit": "1"
              }
            },
            {
              "Number": 6,
              "AD": "A",
              "Value": {
                "Value": 32.5,
                "Unit": "1"
              }
            },
            {
              "Number": 7,
              "AD": "A",
              "Value": {
                "Value": 34.8,
                "Unit": "1"
              }
            },
            {
              "Number": 8,
              "AD": "A",
              "Value": {
                "Value": 57.3,
                "Unit": "1"
              }
            },
            {
              "Number": 9,
              "AD": "D",
              "Value": {
                "Value": 0,
                "Unit": "43"
              }
            },
            {
              "Number": 10,
              "AD": "D",
              "Value": {
                "Value": 0,
                "Unit": "43"
              }
            },
            {
              "Number": 11,
              "AD": "A",
              "Value": {
                "Value": 28.6,
                "Unit": "1"
              }
            },
            {
              "Number": 12,
              "AD": "A",
              "Value": {
                "Value": 17.3,
                "Unit": "1"
              }
            },
            {
              "Number": 13,
              "AD": "A",
              "Value": {
                "Value": 15.2,
                "Unit": "1"
              }
            },
            {
              "Number": 14,
              "AD": "A",
              "Value": {
                "Value": 62.8,
                "Unit": "1"
              }
            },
            {
              "Number": 15,
              "AD": "D",
              "Value": {
                "Value": 0,
                "Unit": "43"
              }
            },
            {
              "Number": 16,
              "AD": "D",
              "Value": {
                "Value": 0,
                "Unit": "43"
              }
            }
          ],
          "Outputs": [
            {
              "Number": 1,
              "AD": "A",
              "Value": {
                "State": 1,
                "Value": 30,
                "Unit": "0"
              }
            },
            {
              "Number": 2,
              "AD": "A",
              "Value": {
                "State": 1,
                "Value": 30,
                "Unit": "0"
              }
            },
            {
              "Number": 3,
              "AD": "D",
              "Value": {
                "Value": 0,
                "Unit": "0"
              }
            },
            {
              "Number": 4,
              "AD": "D",
              "Value": {
                "Value": 0,
                "Unit": "0"
              }
            },
            {
              "Number": 5,
              "AD": "D",
              "Value": {
                "Value": 0,
                "Unit": "0"
              }
            },
            {
              "Number": 6,
              "AD": "A",
              "Value": {
                "State": 0,
                "Value": 0,
                "Unit": "0"
              }
            },
            {
              "Number": 7,
              "AD": "A",
              "Value": {
                "State": 0,
                "Value": 0,
                "Unit": "0"
              }
            },
            {
              "Number": 8,
              "AD": "D",
              "Value": {
                "Value": 1,
                "Unit": "0"
              }
            },
            {
              "Number": 9,
              "AD": "D",
              "Value": {
                "Value": 1,
                "Unit": "0"
              }
            },
            {
              "Number": 10,
              "AD": "D",
              "Value": {
                "Value": 0,
                "Unit": "0"
              }
            },
            {
              "Number": 11,
              "AD": "D",
              "Value": {
                "Value": 0,
                "Unit": "0"
              }
            },
            {
              "Number": 12,
              "AD": "D",
              "Value": {
                "Value": 0,
                "Unit": "0"
              }
            },
            {
              "Number": 13,
              "AD": "D",
              "Value": {
                "Value": 0,
                "Unit": "0"
              }
            }
          ],
          "Network Analog": [
            {
              "Number": 1,
              "AD": "A",
              "Value": {
                "Value": 37,
                "Unit": "1"
              }
            },
            {
              "Number": 2,
              "AD": "A",
              "Value": {
                "Value": 26.7,
                "Unit": "1"
              }
            },
            {
              "Number": 3,
              "AD": "A",
              "Value": {
                "Value": 1601,
                "Unit": "3"
              }
            },
            {
              "Number": 4,
              "AD": "A",
              "Value": {
                "Value": 46.6,
                "Unit": "1"
              }
            },
            {
              "Number": 5,
              "AD": "A",
              "Value": {
                "Value": 38.5,
                "Unit": "1"
              }
            },
            {
              "Number": 6,
              "AD": "A",
              "Value": {
                "Value": 0,
                "Unit": "3"
              }
            },
            {
              "Number": 7,
              "AD": "A",
              "Value": {
                "Value": 0,
                "Unit": "0"
              }
            },
            {
              "Number": 8,
              "AD": "A",
              "Value": {
                "Value": 0,
                "Unit": "0"
              }
            },
            {
              "Number": 9,
              "AD": "A",
              "Value": {
                "Value": 0,
                "Unit": "0"
              }
            },
            {
              "Number": 10,
              "AD": "A",
              "Value": {
                "Value": 0,
                "Unit": "0"
              }
            },
            {
              "Number": 11,
              "AD": "A",
              "Value": {
                "Value": 0,
                "Unit": "0"
              }
            },
            {
              "Number": 12,
              "AD": "A",
              "Value": {
                "Value": 0,
                "Unit": "0"
              }
            },
            {
              "Number": 13,
              "AD": "A",
              "Value": {
                "Value": 0,
                "Unit": "0"
              }
            },
            {
              "Number": 14,
              "AD": "A",
              "Value": {
                "Value": 0,
                "Unit": "0"
              }
            },
            {
              "Number": 15,
              "AD": "A",
              "Value": {
                "Value": 0,
                "Unit": "0"
              }
            },
            {
              "Number": 16,
              "AD": "D",
              "Value": {
                "Value": 0,
                "Unit": "43"
              }
            }
          ],
          "Network Digital": [
            {
              "Number": 1,
              "AD": "D",
              "Value": {
                "Value": 0,
                "Unit": "43"
              }
            },
            {
              "Number": 2,
              "AD": "D",
              "Value": {
                "Value": 0,
                "Unit": "43"
              }
            },
            {
              "Number": 3,
              "AD": "D",
              "Value": {
                "Value": 0,
                "Unit": "43"
              }
            },
            {
              "Number": 4,
              "AD": "D",
              "Value": {
                "Value": 0,
                "Unit": "43"
              }
            },
            {
              "Number": 5,
              "AD": "D",
              "Value": {
                "Value": 0,
                "Unit": "43"
              }
            },
            {
              "Number": 6,
              "AD": "D",
              "Value": {
                "Value": 0,
                "Unit": "43"
              }
            },
            {
              "Number": 7,
              "AD": "D",
              "Value": {
                "Value": 0,
                "Unit": "43"
              }
            },
            {
              "Number": 8,
              "AD": "D",
              "Value": {
                "Value": 0,
                "Unit": "43"
              }
            },
            {
              "Number": 9,
              "AD": "D",
              "Value": {
                "Value": 0,
                "Unit": "43"
              }
            },
            {
              "Number": 10,
              "AD": "D",
              "Value": {
                "Value": 0,
                "Unit": "43"
              }
            },
            {
              "Number": 11,
              "AD": "D",
              "Value": {
                "Value": 0,
                "Unit": "43"
              }
            },
            {
              "Number": 12,
              "AD": "D",
              "Value": {
                "Value": 0,
                "Unit": "43"
              }
            },
            {
              "Number": 13,
              "AD": "D",
              "Value": {
                "Value": 0,
                "Unit": "43"
              }
            },
            {
              "Number": 14,
              "AD": "D",
              "Value": {
                "Value": 0,
                "Unit": "43"
              }
            },
            {
              "Number": 15,
              "AD": "D",
              "Value": {
                "Value": 0,
                "Unit": "43"
              }
            },
            {
              "Number": 16,
              "AD": "D",
              "Value": {
                "Value": 0,
                "Unit": "43"
              }
            }
          ]
        },
        "Status": "OK",
        "Status code": 0
      }
      
      

      Unit 0 = keine Einheit / digital

      Unit 1 = °C

      Unit 3 = l/h (Durchfluss)

      Unit 43 = ?

      Wisst ihr ob schon jemand dafür was geschrieben hat (Adapter oder Skript)?

      Wie parse ich das am einfachsten und lege irgendwo im ioBroker diese Sensorik an?

      Danke für Infos oder etwas Hilfe!

      Patxi

      1 Reply Last reply Reply Quote 0
      • P
        Patxi last edited by

        Jetzt bin ich schon etwas weiter.

        Allerdings habe ich noch Probleme mit den Boolean/State Kanälen.

        Im JSON sind es 0 Werte und wie bekomme ich das im Java Script gescheit hin, daß sie auf true/false gesetzt werden?

        var urlCMI = 'http://user:password@192.168.31.99/INCLUDE/api.cgi?jsonnode=1&jsonparam=I'; //,O,Na,Nd
        
        var forecreation    = false;    // Default: false. true: Datenpunkte werden überschrieben (wenn z.B. Bezeichnungen geändert wurden)
        var request = require("request");
        var myJson = {};
        
        var path = "UVR1611.";
        var pathIn = "Inputs.";
        //var pathOut = "Outputs.";
        //var pathNa = "Network Analog.";
        //var pathNd = "Network Digital.";
        
        var idIn01        = path + pathIn + "In01_A";
        var idIn02        = path + pathIn + "In02_A";
        var idIn03        = path + pathIn + "In03_A";
        var idIn04        = path + pathIn + "In04_A";
        var idIn05        = path + pathIn + "In05_A";
        var idIn06        = path + pathIn + "In06_A";
        var idIn07        = path + pathIn + "In07_A";
        var idIn08        = path + pathIn + "In08_A";
        var idIn09        = path + pathIn + "In09_D";
        var idIn10        = path + pathIn + "In10_D";
        var idIn11        = path + pathIn + "In11_A";
        var idIn12        = path + pathIn + "In12_A";
        var idIn13        = path + pathIn + "In13_A";
        var idIn14        = path + pathIn + "In14_A";
        //var idIn15        = path + pathIn + "In15_D";
        var idIn16        = path + pathIn + "In16_D";
        
        createState(idIn01, 0, forecreation, { name: 'T Solar Kollektor 1',   desc: 'Solar Kollektor T1',       type: 'number', role: 'value.temperature', unit: '°C'});
        createState(idIn02, 0, forecreation, { name: 'T Solar Kollektor 2',   desc: 'Solar Kollektor T2',       type: 'number', role: 'value.temperature', unit: '°C'});
        createState(idIn03, 0, forecreation, { name: 'T Aussen',              desc: 'Aussen-Temperatur',        type: 'number', role: 'value.temperature', unit: '°C'});
        createState(idIn04, 0, forecreation, { name: 'T Speicher unten',      desc: 'Puffer-Temperatur unten',  type: 'number', role: 'value.temperature', unit: '°C'});
        createState(idIn05, 0, forecreation, { name: 'T Speicher unten/mitte',desc: 'Puffer-Temperatur mitte 1',type: 'number', role: 'value.temperature', unit: '°C'});
        createState(idIn06, 0, forecreation, { name: 'T Speicher mitte',      desc: 'Puffer-Temperatur mitte 2',type: 'number', role: 'value.temperature', unit: '°C'});
        createState(idIn07, 0, forecreation, { name: 'T Speicher mitte/oben', desc: 'Puffer-Temperatur mitte 3',type: 'number', role: 'value.temperature', unit: '°C'});
        createState(idIn08, 0, forecreation, { name: 'T Speicher oben',       desc: 'Puffer-Temperatur oben',   type: 'number', role: 'value.temperature', unit: '°C'});
        createState(idIn09, 0, forecreation, { name: 'Heizkreis 2',           desc: 'Heizkreis 2',              type: 'boolean',role: 'switch', def: false});
        createState(idIn10, 0, forecreation, { name: 'Freigabe Elektr',       desc: 'Freigabe Elektr',          type: 'boolean',role: 'switch', def: false});
        createState(idIn11, 0, forecreation, { name: 'T Ruecklauf WW',        desc: 'Warmwasser Ruecklauf T',   type: 'number', role: 'value.temperature', unit: '°C'});
        createState(idIn12, 0, forecreation, { name: 'T Heizkreis VL 1',      desc: 'Heizkreis-Temperatur VL1', type: 'number', role: 'value.temperature', unit: '°C'});
        createState(idIn13, 0, forecreation, { name: 'T Heizraum',            desc: 'Heizraum-Temperatur',      type: 'number', role: 'value.temperature', unit: '°C'});
        createState(idIn14, 0, forecreation, { name: 'T Holzkessel VL',       desc: 'Holzkessel-Temperatur VL', type: 'number', role: 'value.temperature', unit: '°C'});
        //createState(idIn15,0, forecreation, { name: 'T Speicher oben',       desc: 'Puffer-Temperatur oben',   type: 'number', role: 'value.temperature', unit: '°C'});
        createState(idIn16, 0, forecreation, { name: 'Stroemungs-Schalter',   desc: 'Stroemungs-Schalter',      type: 'boolean',role: 'switch', def: false});
        
        function parseJson(text) {
            if (text === "") return {};
            try {
                json = JSON.parse(text);
            } catch (ex) {
                json = {};
            }
            if(!json) json = {};
            return json;
        }
        
        function readJson(url, callback) {
            request(url, function (err, state, body){
                if (body) {
                    var json = parseJson(body);
                    callback(null, json);
                } else {
                    var error = "(" + err + ") ERROR request from: " + url;
                    log(error, "warn");
                    callback(error, null);
                }
            });
        }
        
        function main() {
            readJson(urlCMI, function(err,json) {
                if(!err) {
                    myJson = json;
                    log("Version: "                   + myJson.Header.Version,"info");
                    log("Device: "                    + myJson.Header.Device,"info");
                    log("In01: "                      + myJson.Data.Inputs[0].Value.Value,"info");
                    log("In02: "                      + myJson.Data.Inputs[1].Value.Value,"info");
                    log("In03: "                      + myJson.Data.Inputs[2].Value.Value,"info");
                    log("In04: "                      + myJson.Data.Inputs[3].Value.Value,"info");
                    log("In05: "                      + myJson.Data.Inputs[4].Value.Value,"info");
                    log("In06: "                      + myJson.Data.Inputs[5].Value.Value,"info");
                    log("In07: "                      + myJson.Data.Inputs[6].Value.Value,"info");
                    log("In08: "                      + myJson.Data.Inputs[7].Value.Value,"info");
                    log("In09: "                      + myJson.Data.Inputs[8].Value.Value,"info");
                    log("In10: "                      + myJson.Data.Inputs[9].Value.Value,"info");
                    log("In11: "                      + myJson.Data.Inputs[10].Value.Value,"info");
                    log("In12: "                      + myJson.Data.Inputs[11].Value.Value,"info");
                    log("In13: "                      + myJson.Data.Inputs[12].Value.Value,"info");
                    log("In14: "                      + myJson.Data.Inputs[13].Value.Value,"info");
                    //log("In15: "                      + myJson.Data.Inputs[14].Value.Value,"info");
                    log("In16: "                      + myJson.Data.Inputs[15].Value.Value,"info");
                    setState(idIn01         ,parseFloat(myJson.Data.Inputs[0].Value.Value));
                    setState(idIn02         ,parseFloat(myJson.Data.Inputs[1].Value.Value));
                    setState(idIn03         ,parseFloat(myJson.Data.Inputs[2].Value.Value));
                    setState(idIn04         ,parseFloat(myJson.Data.Inputs[3].Value.Value));
                    setState(idIn05         ,parseFloat(myJson.Data.Inputs[4].Value.Value));
                    setState(idIn06         ,parseFloat(myJson.Data.Inputs[5].Value.Value));
                    setState(idIn07         ,parseFloat(myJson.Data.Inputs[6].Value.Value));
                    setState(idIn08         ,parseFloat(myJson.Data.Inputs[7].Value.Value));
                    setState(idIn09         ,!!parseInt(myJson.Data.Inputs[8].Value.Value));
                    setState(idIn10         ,!!parseInt(myJson.Data.Inputs[9].Value.Value));
                    setState(idIn11         ,parseFloat(myJson.Data.Inputs[10].Value.Value));
                    setState(idIn12         ,parseFloat(myJson.Data.Inputs[11].Value.Value));
                    setState(idIn13         ,parseFloat(myJson.Data.Inputs[12].Value.Value));
                    setState(idIn14         ,parseFloat(myJson.Data.Inputs[13].Value.Value));
        //            setState(idIn15         ,!!parseInt(myJson.Data.Inputs[14].Value.Value));
                    setState(idIn16         ,!!parseInt(myJson.Data.Inputs[15].Value.Value));
        
                } else {
                    log("Error reading JSON from CMI-UVR1611\. No data!","warn");
                    myJson = {};
                }
            });
        }
        
        schedule("*/5 * * * *", function () {   // poll every 5 minutes
            main();
        });
        
        // poll values at startup
        setTimeout(main,2000);
        
        

        –---

        Ich vermute dass doch einige Leute die UVR1611 und CMI haben dürften und genau dieses auch brauchen könnten.

        Ich wundere mich warum ich noch nichts diesbzgl. gefunden habe.

        Eingreifen in die Steuerung der UVR funktioniert ja einscheinend auch durch einen http request (falls man von ioBroker was auslösen will).

        Für jede Hilfe bin ich dankbar!

        1 Reply Last reply Reply Quote 0
        • P
          Patxi last edited by

          wie geht man mit den Boolean Werten um und wie kann man das Script noch besser gestalten?

          1 Reply Last reply Reply Quote 0
          • paul53
            paul53 last edited by

            @Patxi:

            wie geht man mit den Boolean Werten um `
            Versuche es mal mit

                        setState(idIn09         ,!!parseInt(myJson.Data.Inputs[8].Value.Value));
            
            
            1 Reply Last reply Reply Quote 0
            • P
              Patxi last edited by

              danke! das scheint zu klappen.

              Ich habe das o.g. Skript gleich mal angepasst.

              1 Reply Last reply Reply Quote 0
              • First post
                Last post

              Support us

              ioBroker
              Community Adapters
              Donate
              FAQ Cloud / IOT
              HowTo: Node.js-Update
              HowTo: Backup/Restore
              Downloads
              BLOG

              908
              Online

              31.6k
              Users

              79.6k
              Topics

              1.3m
              Posts

              2
              5
              2169
              Loading More Posts
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes
              Reply
              • Reply as topic
              Log in to reply
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
              The ioBroker Community 2014-2023
              logo