Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. CMI UVR16X2

NEWS

  • Neues YouTube-Video: Visualisierung im Devices-Adapter
    BluefoxB
    Bluefox
    11
    1
    423

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    1.9k

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    11
    1
    817

CMI UVR16X2

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
11 Beiträge 4 Kommentatoren 1.7k Aufrufe 5 Beobachtet
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • A Offline
    A Offline
    andibr
    schrieb am zuletzt editiert von
    #1

    Hallo zusammen
    Ich bin derzeit am ablösen meiner fhem Sache dran. Nun stehe ich aber mit meiner Heizungssteuerung von TA massiv auf dem Schlauch. Ich habe den Modbus-Adapter eingerichtet und auch die IP des CMI eingegeben, auch habe ich als TCP und Slave definiert aber der kann sich nicht verbinden. Adapter leibt gelb.
    Ach so, ja die fhem Instanz habe ich natürlich gestoppt, resp. auf andere IP umgeleitet, als sollte die Schnittstelle frei sein.

    Aus den verschiedenen Einträge hier im Forim komme ich nicht schlau. Gibt es jemanden der einem Anfänger etwas helfen kann?

    Viele Dank
    Andi

    A 1 Antwort Letzte Antwort
    0
    • A andibr

      Hallo zusammen
      Ich bin derzeit am ablösen meiner fhem Sache dran. Nun stehe ich aber mit meiner Heizungssteuerung von TA massiv auf dem Schlauch. Ich habe den Modbus-Adapter eingerichtet und auch die IP des CMI eingegeben, auch habe ich als TCP und Slave definiert aber der kann sich nicht verbinden. Adapter leibt gelb.
      Ach so, ja die fhem Instanz habe ich natürlich gestoppt, resp. auf andere IP umgeleitet, als sollte die Schnittstelle frei sein.

      Aus den verschiedenen Einträge hier im Forim komme ich nicht schlau. Gibt es jemanden der einem Anfänger etwas helfen kann?

      Viele Dank
      Andi

      A Offline
      A Offline
      altas
      schrieb am zuletzt editiert von
      #2

      Hallo

      also mein Fehler lag am Docker.. hatte dort vergessen den PORT 502 weiterzuleiten :)

      Oliver PanarottoO 1 Antwort Letzte Antwort
      0
      • A altas

        Hallo

        also mein Fehler lag am Docker.. hatte dort vergessen den PORT 502 weiterzuleiten :)

        Oliver PanarottoO Offline
        Oliver PanarottoO Offline
        Oliver Panarotto
        schrieb am zuletzt editiert von
        #3

        @altas
        Hallo, ich habe auch das Problem, wie war die Lösung genau ?

        Vielen Dank

        A 1 Antwort Letzte Antwort
        0
        • Oliver PanarottoO Oliver Panarotto

          @altas
          Hallo, ich habe auch das Problem, wie war die Lösung genau ?

          Vielen Dank

          A Offline
          A Offline
          andibr
          schrieb am zuletzt editiert von
          #4

          @oliver-panarotto

          Hallo Oliver, also bei mir läuft nun schon länger dieses Skript. Über die Modbus Schnittstelle habe ich es schlicht nicht hin gekriegt. Für den Modbus musst du sicher auch noch auf dem CMI ganz viel einrichten. Soweit ich mich erinnern mag, musst du alle Werte aus dem CAN importieren und dann auf dem Modbus-Out weiterleiten. Da ich aber keinen voll Zugriff auf die UVR hatte, habe ich das mit externer Hilfe dann mit diesem Skript hingekriegt.

          Aber frage mich bitte nicht was das Skript genau alles macht. Ich kann nur sagen es läuft und schreibt jede Minute die Werte in die Datentabelle rein, daraus habe ich dann einen Alias gemacht.

          Bei ersten Ausführen musste ich irgendwo noch das "false" auf "true" wechseln. (ich meinte dort bei den "Hilfsvariablen".

          var request = require("request");
          
          //username & password for CMI
          var username = "username";
          var password = "Passwort";
          var auth = "Basic " + new Buffer(username + ":" + password).toString("base64");
          
           //URL to CMI Interface, only change IP
          var url1 = 'http://<IP_vom_CMI>/INCLUDE/api.cgi?jsonnode=2&jsonparam=I,O';
          
          // JSON with Unit from CMI_JSON_API_V3 https://www.ta.co.at/downloads/datei/17511763-cmi-json-api/
          
          var unitJson = {
              "0": "",
              "1": "°C",
              "2": "W/m²",
              "3": "l/h",
              "4": "Sek",
              "5": "Min",
              "6": "l/Imp",
              "7": "K",
              "8": "%",
              "10": "kW",
              "11": "kWh",
              "12": "MWh",
              "13": "V",
              "14": "mA",
              "15": "Std",
              "16": "Tage",
              "17": "Imp",
              "18": "KΩ",
              "19": "l",
              "20": "km/h",
              "21": "Hz",
              "22": "l/min",
              "23": "bar",
              "24": "",
              "25": "km",
              "26": "m",
              "27": "mm",
              "28": "m³",
              "35": "l/d",
              "36": "m/s",
              "37": "m³/min",
              "38": "m³/h",
              "39": "m³/d",
              "40": "mm/min",
              "41": "mm/h",
              "42": "mm/d",
              "43": "Aus/Ein",
              "44": "Nein/Ja",
              "46": "°C",
              "50": "€",
              "51": "$",
              "53": "",
              "54": "°",
              "56": "°",
              "57": "Sek",
              "58": "",
              "59": "%",
              "60": "Uhr",
              "63": "A",
              "65": "mbar",
              "66": "Pa",
              "67": "ppm"
          };
          
          // Hilfsvariablen
          var stateanlegen = false;
          var state1anlegen = false;
          var llog = true; // loging ein/aus (true/false)
          
          // zeitlich die Abfrage wiederhohlen
          //jede x minute
          schedule ("*/1 * * * *", function () {
          
              readurl1();
          });
          
          function readurl1() {
              readJson(url1, function (err, json) {
          
                  if (!err) {
          
                      if (json['Statuscode'] === 0) {
          
                          // console.log('ReadStatus_Knoten 1 '+json['Status']);
          
                          setDataObjectsKnoten1(json);
          
           
          
                      }
          
                  } else {
          
                      log("Fehler beim Auslesen des Knoten 1 JSON. Keine Daten erhalten.", "warn");
                      log("Errorcode " + json['Statuscode'], "warn");
                  }
              });
          }
          
          function readJson(url, callback) {
          
              request({
          
                      url: url,
          
                      headers: {
                          "Authorization": auth
                      }
                  },
          
                  function (error, response, body) {
          
                      if (body) {
                          var result = body.replace(/ /g, ''); //alle Leerzeichen durch Unterstrich ersetzten
                          var jdata = JSON.parse(result); //Json Array erzeugen
                          callback(null, jdata);
          
                      } else {
                          log(error, "warn");
                          callback(error, null);
                      }
                  });
          }
          
          function setDataObjectsKnoten1(jsondata) {
              // console.log(jsondata['Data']['Inputs']['0']['Value']['Value']);
              // console.log(jsondata['Data']['Inputs']['0']['Value']['Unit']);
              if (stateanlegen === true) {
          
                  // User Variablen anlegen Achtung keine Punkte im Namen verwenden. 
                  createState('0_userdata.0.UVR16x2.Header.Version', {
          
                      name: 'Version',
                      type: 'number',
                      unit: '',
                      write: true,
                      read: true
                  });
          
                  createState('0_userdata.0.UVR16x2.Header.Device', {
          
                      name: 'Device',
                      type: 'string',
                      unit: '',
                      write: true,
                      read: true
                  });
          
                  createState('0_userdata.0.UVR16x2.Header.Timestamp', {
          
                      name: 'Timestamp',
                      type: 'number',
                      unit: '',
                      write: true,
                      read: true
                  });
          
          
                  var i = 0;
                  for (i = 0; i <= 15; i++) 
                  {  
          
                      if(Object.keys(jsondata['Data']['Inputs']).includes(i.toString()))
                      {
          
                          var inputsUnit = unitJson[jsondata['Data']['Inputs'][i]['Value']['Unit']];
                          if (i < 9) {
                              createState('0_userdata.0.UVR16x2.Input_Number0' + jsondata['Data']['Inputs'][i]['Number'], '', {
          
                                  name: 'Input_Number0' + jsondata['Data']['Inputs'][i]['Number'] + '_' + jsondata['Data']['Inputs'][i]['AD'],
          
                                  type: 'number',
                                  unit: '' + inputsUnit,
                                  write: true,
                                  read: true
                              });
          
                          } else {
          
                              createState('0_userdata.0.UVR16x2.Input_Number' + jsondata['Data']['Inputs'][i]['Number'], '', {
          
                                  name: 'Input_Number' + jsondata['Data']['Inputs'][i]['Number'] + '_' + jsondata['Data']['Inputs'][i]['AD'],
          
                                  type: 'number',
                                  unit: '' + inputsUnit,
                                  write: true,
                                  read: true
                              });
                          }
                      }
                  }
          
           
          
                  i = 0;
                  for (i = 0; i <= 15; i++) 
                  {
                      if(Object.keys(jsondata['Data']['Outputs']).includes(i.toString()))
                      {
                          var outputsUnit = unitJson[jsondata['Data']['Outputs'][i]['Value']['Unit']];
                          if (i < 9) {
                              createState('0_userdata.0.UVR16x2.Output_Number0' + jsondata['Data']['Outputs'][i]['Number'], '', {
          
                                  name: 'Output_Number' + jsondata['Data']['Outputs'][i]['Number'] + '_' + jsondata['Data']['Outputs'][i]['AD'],
          
                                  type: 'number',
                                  unit: '' + outputsUnit,
                                  write: true,
                                  read: true
          
                              });
          
                              if (jsondata['Data']['Outputs'][i]['AD'] === 'A') {
                                  createState('0_userdata.0.UVR16x2.Output_Number_State0' + jsondata['Data']['Outputs'][i]['Number'], '', {
          
                                      name: 'Output_Number_State' + jsondata['Data']['Outputs'][i]['Number'] + '_' + jsondata['Data']['Outputs'][i]['AD'],
          
                                      type: 'number',
                                      unit: '' + outputsUnit,
                                      write: true,
                                      read: true
          
                                  });
                              }
          
                          } else 
          
                          {
          
                              // set +jsondata['Data']['Outputs'][i]['Value']['Value'],
          
                              createState('0_userdata.0.UVR16x2.Output_Number' + jsondata['Data']['Outputs'][i]['Number'], '', {
          
                                  name: 'Output_Number' + jsondata['Data']['Outputs'][i]['Number'] + '_' + jsondata['Data']['Outputs'][i]['AD'],
          
                                  type: 'number',
                                  unit: '' + outputsUnit,
                                  write: true,
                                  read: true
          
                              });
          
                              if (jsondata['Data']['Outputs'][i]['AD'] === 'A') {
          
                                  // set +jsondata['Data']['Outputs'][i]['Value']['Value'],
          
                                  createState('0_userdata.0.UVR16x2.Output_Number_State' + jsondata['Data']['Outputs'][i]['Number'], '', {
          
                                      name: 'Output_Number_State' + jsondata['Data']['Outputs'][i]['Number'] + '_' + jsondata['Data']['Outputs'][i]['AD'],
          
                                      type: 'number',
                                      unit: '' + outputsUnit,
                                      write: true,
                                      read: true
          
                                  });
                              }
                          }
                      }
                  }
          
           
          
                  console.log("Variablen Knoten 1 angelegt");
          
                  state1anlegen = true;
          
              } else 
          
              {       
          
                  //Variablen setstate
          
                  setState('0_userdata.0.UVR16x2.Header.Version', jsondata['Header']['Version']);
          
                  setState('0_userdata.0.UVR16x2.Header.Device', jsondata['Header']['Device']);
          
                  setState('0_userdata.0.UVR16x2.Header.Timestamp', jsondata['Header']['Timestamp']);
          
                  i = 0;
          
                  for (i = 0; i <= 15; i++) 
          
                  {
          
                      if(Object.keys(jsondata['Data']['Inputs']).includes(i.toString()))
          
                      {         
          
                          if (i < 9) {
          
                              //set jsondata['Data']['Inputs'][i]['Value'],['Value']
          
                              setState('0_userdata.0.UVR16x2.Input_Number0' + jsondata['Data']['Inputs'][i]['Number'], jsondata['Data']['Inputs'][i]['Value']['Value']);
          
                          } else {
          
                              setState('0_userdata.0.UVR16x2.Input_Number' + jsondata['Data']['Inputs'][i]['Number'], jsondata['Data']['Inputs'][i]['Value']['Value']);
          
           
                          }
                      }
                  }
          
                  
          
                  i = 0;
          
                  for (i = 0; i <= 15; i++) 
          
                  {
          
                      if(Object.keys(jsondata['Data']['Outputs']).includes(i.toString()))
          
                      {           
          
                          if (i < 9) {
          
                              setState('0_userdata.0.UVR16x2.Output_Number0' + jsondata['Data']['Outputs'][i]['Number'], jsondata['Data']['Outputs'][i]['Value']['Value']);
          
                              if (jsondata['Data']['Outputs'][i]['AD'] === 'A') {
          
                                  setState('0_userdata.0.UVR16x2.Output_Number_State0' + jsondata['Data']['Outputs'][i]['Number'], jsondata['Data']['Outputs'][i]['Value']['State']);
          
                              }
          
                          } else {
          
                              setState('0_userdata.0.UVR16x2.Output_Number' + jsondata['Data']['Outputs'][i]['Number'], jsondata['Data']['Outputs'][i]['Value']['Value']);
          
                              if (jsondata['Data']['Outputs'][i]['AD'] === 'A') {
          
                                  setState('0_userdata.0.UVR16x2.Output_Number_State' + jsondata['Data']['Outputs'][i]['Number'], jsondata['Data']['Outputs'][i]['Value']['State']);
          
                              }
          
                              //setState('javascript.0.PoolController.ADC'+[i-1], parseFloat(Number(wert).toFixed(2)));
          
                          }
                      }
                  }
              }
          }
          

          Irgendwo habe ich gelesen das man anscheinend auch von TA die CAN-Bus Daten bekommen würde. Heute würde ich es vermutlich so machen und von TA den "CAN-Bus Abzweig" einbauen und schauen das ich mittels Iobroker-Multihost einen kleinen RaspberryPi mit CAN Schnittstelle das ganze übernehmen würde. Aus meiner Sicht hat das den grossen Vorteil das der Master sich nicht mit solchen Dingen beschäftigen muss und der Slave kann solange arbeiten wie er will, dafür wären die Daten via CAN dann sicher auch ganz aktuell. Braucht aber dann natürlich auch einen Softwareentwickler Zugriff auf das ganze TA System weil auch damit müsste man dann die Daten an den zusätzlichen CAN-Device senden.

          Oliver PanarottoO 1 Antwort Letzte Antwort
          0
          • A andibr

            @oliver-panarotto

            Hallo Oliver, also bei mir läuft nun schon länger dieses Skript. Über die Modbus Schnittstelle habe ich es schlicht nicht hin gekriegt. Für den Modbus musst du sicher auch noch auf dem CMI ganz viel einrichten. Soweit ich mich erinnern mag, musst du alle Werte aus dem CAN importieren und dann auf dem Modbus-Out weiterleiten. Da ich aber keinen voll Zugriff auf die UVR hatte, habe ich das mit externer Hilfe dann mit diesem Skript hingekriegt.

            Aber frage mich bitte nicht was das Skript genau alles macht. Ich kann nur sagen es läuft und schreibt jede Minute die Werte in die Datentabelle rein, daraus habe ich dann einen Alias gemacht.

            Bei ersten Ausführen musste ich irgendwo noch das "false" auf "true" wechseln. (ich meinte dort bei den "Hilfsvariablen".

            var request = require("request");
            
            //username & password for CMI
            var username = "username";
            var password = "Passwort";
            var auth = "Basic " + new Buffer(username + ":" + password).toString("base64");
            
             //URL to CMI Interface, only change IP
            var url1 = 'http://<IP_vom_CMI>/INCLUDE/api.cgi?jsonnode=2&jsonparam=I,O';
            
            // JSON with Unit from CMI_JSON_API_V3 https://www.ta.co.at/downloads/datei/17511763-cmi-json-api/
            
            var unitJson = {
                "0": "",
                "1": "°C",
                "2": "W/m²",
                "3": "l/h",
                "4": "Sek",
                "5": "Min",
                "6": "l/Imp",
                "7": "K",
                "8": "%",
                "10": "kW",
                "11": "kWh",
                "12": "MWh",
                "13": "V",
                "14": "mA",
                "15": "Std",
                "16": "Tage",
                "17": "Imp",
                "18": "KΩ",
                "19": "l",
                "20": "km/h",
                "21": "Hz",
                "22": "l/min",
                "23": "bar",
                "24": "",
                "25": "km",
                "26": "m",
                "27": "mm",
                "28": "m³",
                "35": "l/d",
                "36": "m/s",
                "37": "m³/min",
                "38": "m³/h",
                "39": "m³/d",
                "40": "mm/min",
                "41": "mm/h",
                "42": "mm/d",
                "43": "Aus/Ein",
                "44": "Nein/Ja",
                "46": "°C",
                "50": "€",
                "51": "$",
                "53": "",
                "54": "°",
                "56": "°",
                "57": "Sek",
                "58": "",
                "59": "%",
                "60": "Uhr",
                "63": "A",
                "65": "mbar",
                "66": "Pa",
                "67": "ppm"
            };
            
            // Hilfsvariablen
            var stateanlegen = false;
            var state1anlegen = false;
            var llog = true; // loging ein/aus (true/false)
            
            // zeitlich die Abfrage wiederhohlen
            //jede x minute
            schedule ("*/1 * * * *", function () {
            
                readurl1();
            });
            
            function readurl1() {
                readJson(url1, function (err, json) {
            
                    if (!err) {
            
                        if (json['Statuscode'] === 0) {
            
                            // console.log('ReadStatus_Knoten 1 '+json['Status']);
            
                            setDataObjectsKnoten1(json);
            
             
            
                        }
            
                    } else {
            
                        log("Fehler beim Auslesen des Knoten 1 JSON. Keine Daten erhalten.", "warn");
                        log("Errorcode " + json['Statuscode'], "warn");
                    }
                });
            }
            
            function readJson(url, callback) {
            
                request({
            
                        url: url,
            
                        headers: {
                            "Authorization": auth
                        }
                    },
            
                    function (error, response, body) {
            
                        if (body) {
                            var result = body.replace(/ /g, ''); //alle Leerzeichen durch Unterstrich ersetzten
                            var jdata = JSON.parse(result); //Json Array erzeugen
                            callback(null, jdata);
            
                        } else {
                            log(error, "warn");
                            callback(error, null);
                        }
                    });
            }
            
            function setDataObjectsKnoten1(jsondata) {
                // console.log(jsondata['Data']['Inputs']['0']['Value']['Value']);
                // console.log(jsondata['Data']['Inputs']['0']['Value']['Unit']);
                if (stateanlegen === true) {
            
                    // User Variablen anlegen Achtung keine Punkte im Namen verwenden. 
                    createState('0_userdata.0.UVR16x2.Header.Version', {
            
                        name: 'Version',
                        type: 'number',
                        unit: '',
                        write: true,
                        read: true
                    });
            
                    createState('0_userdata.0.UVR16x2.Header.Device', {
            
                        name: 'Device',
                        type: 'string',
                        unit: '',
                        write: true,
                        read: true
                    });
            
                    createState('0_userdata.0.UVR16x2.Header.Timestamp', {
            
                        name: 'Timestamp',
                        type: 'number',
                        unit: '',
                        write: true,
                        read: true
                    });
            
            
                    var i = 0;
                    for (i = 0; i <= 15; i++) 
                    {  
            
                        if(Object.keys(jsondata['Data']['Inputs']).includes(i.toString()))
                        {
            
                            var inputsUnit = unitJson[jsondata['Data']['Inputs'][i]['Value']['Unit']];
                            if (i < 9) {
                                createState('0_userdata.0.UVR16x2.Input_Number0' + jsondata['Data']['Inputs'][i]['Number'], '', {
            
                                    name: 'Input_Number0' + jsondata['Data']['Inputs'][i]['Number'] + '_' + jsondata['Data']['Inputs'][i]['AD'],
            
                                    type: 'number',
                                    unit: '' + inputsUnit,
                                    write: true,
                                    read: true
                                });
            
                            } else {
            
                                createState('0_userdata.0.UVR16x2.Input_Number' + jsondata['Data']['Inputs'][i]['Number'], '', {
            
                                    name: 'Input_Number' + jsondata['Data']['Inputs'][i]['Number'] + '_' + jsondata['Data']['Inputs'][i]['AD'],
            
                                    type: 'number',
                                    unit: '' + inputsUnit,
                                    write: true,
                                    read: true
                                });
                            }
                        }
                    }
            
             
            
                    i = 0;
                    for (i = 0; i <= 15; i++) 
                    {
                        if(Object.keys(jsondata['Data']['Outputs']).includes(i.toString()))
                        {
                            var outputsUnit = unitJson[jsondata['Data']['Outputs'][i]['Value']['Unit']];
                            if (i < 9) {
                                createState('0_userdata.0.UVR16x2.Output_Number0' + jsondata['Data']['Outputs'][i]['Number'], '', {
            
                                    name: 'Output_Number' + jsondata['Data']['Outputs'][i]['Number'] + '_' + jsondata['Data']['Outputs'][i]['AD'],
            
                                    type: 'number',
                                    unit: '' + outputsUnit,
                                    write: true,
                                    read: true
            
                                });
            
                                if (jsondata['Data']['Outputs'][i]['AD'] === 'A') {
                                    createState('0_userdata.0.UVR16x2.Output_Number_State0' + jsondata['Data']['Outputs'][i]['Number'], '', {
            
                                        name: 'Output_Number_State' + jsondata['Data']['Outputs'][i]['Number'] + '_' + jsondata['Data']['Outputs'][i]['AD'],
            
                                        type: 'number',
                                        unit: '' + outputsUnit,
                                        write: true,
                                        read: true
            
                                    });
                                }
            
                            } else 
            
                            {
            
                                // set +jsondata['Data']['Outputs'][i]['Value']['Value'],
            
                                createState('0_userdata.0.UVR16x2.Output_Number' + jsondata['Data']['Outputs'][i]['Number'], '', {
            
                                    name: 'Output_Number' + jsondata['Data']['Outputs'][i]['Number'] + '_' + jsondata['Data']['Outputs'][i]['AD'],
            
                                    type: 'number',
                                    unit: '' + outputsUnit,
                                    write: true,
                                    read: true
            
                                });
            
                                if (jsondata['Data']['Outputs'][i]['AD'] === 'A') {
            
                                    // set +jsondata['Data']['Outputs'][i]['Value']['Value'],
            
                                    createState('0_userdata.0.UVR16x2.Output_Number_State' + jsondata['Data']['Outputs'][i]['Number'], '', {
            
                                        name: 'Output_Number_State' + jsondata['Data']['Outputs'][i]['Number'] + '_' + jsondata['Data']['Outputs'][i]['AD'],
            
                                        type: 'number',
                                        unit: '' + outputsUnit,
                                        write: true,
                                        read: true
            
                                    });
                                }
                            }
                        }
                    }
            
             
            
                    console.log("Variablen Knoten 1 angelegt");
            
                    state1anlegen = true;
            
                } else 
            
                {       
            
                    //Variablen setstate
            
                    setState('0_userdata.0.UVR16x2.Header.Version', jsondata['Header']['Version']);
            
                    setState('0_userdata.0.UVR16x2.Header.Device', jsondata['Header']['Device']);
            
                    setState('0_userdata.0.UVR16x2.Header.Timestamp', jsondata['Header']['Timestamp']);
            
                    i = 0;
            
                    for (i = 0; i <= 15; i++) 
            
                    {
            
                        if(Object.keys(jsondata['Data']['Inputs']).includes(i.toString()))
            
                        {         
            
                            if (i < 9) {
            
                                //set jsondata['Data']['Inputs'][i]['Value'],['Value']
            
                                setState('0_userdata.0.UVR16x2.Input_Number0' + jsondata['Data']['Inputs'][i]['Number'], jsondata['Data']['Inputs'][i]['Value']['Value']);
            
                            } else {
            
                                setState('0_userdata.0.UVR16x2.Input_Number' + jsondata['Data']['Inputs'][i]['Number'], jsondata['Data']['Inputs'][i]['Value']['Value']);
            
             
                            }
                        }
                    }
            
                    
            
                    i = 0;
            
                    for (i = 0; i <= 15; i++) 
            
                    {
            
                        if(Object.keys(jsondata['Data']['Outputs']).includes(i.toString()))
            
                        {           
            
                            if (i < 9) {
            
                                setState('0_userdata.0.UVR16x2.Output_Number0' + jsondata['Data']['Outputs'][i]['Number'], jsondata['Data']['Outputs'][i]['Value']['Value']);
            
                                if (jsondata['Data']['Outputs'][i]['AD'] === 'A') {
            
                                    setState('0_userdata.0.UVR16x2.Output_Number_State0' + jsondata['Data']['Outputs'][i]['Number'], jsondata['Data']['Outputs'][i]['Value']['State']);
            
                                }
            
                            } else {
            
                                setState('0_userdata.0.UVR16x2.Output_Number' + jsondata['Data']['Outputs'][i]['Number'], jsondata['Data']['Outputs'][i]['Value']['Value']);
            
                                if (jsondata['Data']['Outputs'][i]['AD'] === 'A') {
            
                                    setState('0_userdata.0.UVR16x2.Output_Number_State' + jsondata['Data']['Outputs'][i]['Number'], jsondata['Data']['Outputs'][i]['Value']['State']);
            
                                }
            
                                //setState('javascript.0.PoolController.ADC'+[i-1], parseFloat(Number(wert).toFixed(2)));
            
                            }
                        }
                    }
                }
            }
            

            Irgendwo habe ich gelesen das man anscheinend auch von TA die CAN-Bus Daten bekommen würde. Heute würde ich es vermutlich so machen und von TA den "CAN-Bus Abzweig" einbauen und schauen das ich mittels Iobroker-Multihost einen kleinen RaspberryPi mit CAN Schnittstelle das ganze übernehmen würde. Aus meiner Sicht hat das den grossen Vorteil das der Master sich nicht mit solchen Dingen beschäftigen muss und der Slave kann solange arbeiten wie er will, dafür wären die Daten via CAN dann sicher auch ganz aktuell. Braucht aber dann natürlich auch einen Softwareentwickler Zugriff auf das ganze TA System weil auch damit müsste man dann die Daten an den zusätzlichen CAN-Device senden.

            Oliver PanarottoO Offline
            Oliver PanarottoO Offline
            Oliver Panarotto
            schrieb am zuletzt editiert von
            #5

            @andibr Hallo,

            das mit dem Json von Dir ist mega interessant - wo hast du das im IO eingebaut ?

            Ich habe heute endlich das MODBus zum laufen bekommen - aber Json ist interessant!

            Viele Grüsse Oli

            A 1 Antwort Letzte Antwort
            0
            • Oliver PanarottoO Oliver Panarotto

              @andibr Hallo,

              das mit dem Json von Dir ist mega interessant - wo hast du das im IO eingebaut ?

              Ich habe heute endlich das MODBus zum laufen bekommen - aber Json ist interessant!

              Viele Grüsse Oli

              A Offline
              A Offline
              andibr
              schrieb am zuletzt editiert von
              #6

              @oliver-panarotto said in CMI UVR16X2:

              das mit dem Json von Dir ist mega interessant - wo hast du das im IO eingebaut ?

              Ich verstehe im Moment nicht genau was du mit "IO" meinst?

              Ich habe das einfach als Skript eingefügt und dann hat es mir die Datenpunkte erstellt

              CMI_JS.png

              Daraus habe ich dann mit dem Alias brauchbare Datenpunkte gebastelt.

              Oliver PanarottoO 1 Antwort Letzte Antwort
              0
              • A andibr

                @oliver-panarotto said in CMI UVR16X2:

                das mit dem Json von Dir ist mega interessant - wo hast du das im IO eingebaut ?

                Ich verstehe im Moment nicht genau was du mit "IO" meinst?

                Ich habe das einfach als Skript eingefügt und dann hat es mir die Datenpunkte erstellt

                CMI_JS.png

                Daraus habe ich dann mit dem Alias brauchbare Datenpunkte gebastelt.

                Oliver PanarottoO Offline
                Oliver PanarottoO Offline
                Oliver Panarotto
                schrieb am zuletzt editiert von
                #7

                @andibr hallo ich meine wo im IO_Broker ? hast du das eingefügt und wie macht man Alias punkte ?

                A 1 Antwort Letzte Antwort
                0
                • Oliver PanarottoO Oliver Panarotto

                  @andibr hallo ich meine wo im IO_Broker ? hast du das eingefügt und wie macht man Alias punkte ?

                  A Offline
                  A Offline
                  andibr
                  schrieb am zuletzt editiert von
                  #8

                  @oliver-panarotto said in CMI UVR16X2:

                  @andibr hallo ich meine wo im IO_Broker ? hast du das eingefügt und wie macht man Alias punkte ?

                  Ich habe mir bei den Skripten einen neuen Ordner erstellt und dort ein neues Skript mit Javascript. Dort rein habe ich dann dieses Skript kopiert und die Zugansdaten zu meinem CMI angepasst. Danach musste ich noch im Skript aus dem "false" ein "true" machen:

                  Ordner_Heizung.png

                  // Hilfsvariablen
                  
                  var stateanlegen = false;   // beim 1.Mal auf true stellen
                  var state1anlegen = false;  // beim 1.Mal auf true stellen
                  
                  

                  So hat er mir dann die Datenpunkte angelegt. Danach zurückstellen und ab jetzt sollte er jede Minute die Daten abholen und reinschreiben, Schneller als jede Minute (60s) lässt das CMI nicht zu und blockt das einfach ohne Meldung einfach ab oder gibt keine Antwort.

                  Danach kann man mit dem Adpater "Alias-Manager" sich die Datenpunkte "zurechtbiegen" und weiter verwenden.

                  Seither läuft es beim mir und ich habe mir auch eine eigene Betriebstundenzählung gemacht, weil mein Heizungsinstallateur behauptet hat, er können mir diese Zahlen nicht exportieren. Vieleicht kann man die via ModBus oder CAN exportieren?

                  Oliver PanarottoO 1 Antwort Letzte Antwort
                  0
                  • Jey CeeJ Online
                    Jey CeeJ Online
                    Jey Cee
                    Developer
                    schrieb am zuletzt editiert von
                    #9

                    @andibr sagte in CMI UVR16X2:

                    Vieleicht kann man die via ModBus oder CAN exportieren?

                    Hast du das hier gesehen: https://forum.iobroker.net/topic/26032/gelöst-modbus-adapter-uvr-16x2-cmi

                    Persönlicher Support
                    Spenden -> paypal.me/J3YC33

                    A 1 Antwort Letzte Antwort
                    0
                    • A andibr

                      @oliver-panarotto said in CMI UVR16X2:

                      @andibr hallo ich meine wo im IO_Broker ? hast du das eingefügt und wie macht man Alias punkte ?

                      Ich habe mir bei den Skripten einen neuen Ordner erstellt und dort ein neues Skript mit Javascript. Dort rein habe ich dann dieses Skript kopiert und die Zugansdaten zu meinem CMI angepasst. Danach musste ich noch im Skript aus dem "false" ein "true" machen:

                      Ordner_Heizung.png

                      // Hilfsvariablen
                      
                      var stateanlegen = false;   // beim 1.Mal auf true stellen
                      var state1anlegen = false;  // beim 1.Mal auf true stellen
                      
                      

                      So hat er mir dann die Datenpunkte angelegt. Danach zurückstellen und ab jetzt sollte er jede Minute die Daten abholen und reinschreiben, Schneller als jede Minute (60s) lässt das CMI nicht zu und blockt das einfach ohne Meldung einfach ab oder gibt keine Antwort.

                      Danach kann man mit dem Adpater "Alias-Manager" sich die Datenpunkte "zurechtbiegen" und weiter verwenden.

                      Seither läuft es beim mir und ich habe mir auch eine eigene Betriebstundenzählung gemacht, weil mein Heizungsinstallateur behauptet hat, er können mir diese Zahlen nicht exportieren. Vieleicht kann man die via ModBus oder CAN exportieren?

                      Oliver PanarottoO Offline
                      Oliver PanarottoO Offline
                      Oliver Panarotto
                      schrieb am zuletzt editiert von
                      #10

                      @andibr Hallo,
                      vielen Dank für die Ausführungen.
                      Ich habe es auch mit MODBUS geschaft, das läuft nun bei mir sehr gut .... Export und Import.

                      1 Antwort Letzte Antwort
                      0
                      • Jey CeeJ Jey Cee

                        @andibr sagte in CMI UVR16X2:

                        Vieleicht kann man die via ModBus oder CAN exportieren?

                        Hast du das hier gesehen: https://forum.iobroker.net/topic/26032/gelöst-modbus-adapter-uvr-16x2-cmi

                        A Offline
                        A Offline
                        andibr
                        schrieb am zuletzt editiert von
                        #11

                        @jey-cee said in CMI UVR16X2:

                        @andibr sagte in CMI UVR16X2:

                        Vieleicht kann man die via ModBus oder CAN exportieren?

                        Hast du das hier gesehen: https://forum.iobroker.net/topic/26032/gelöst-modbus-adapter-uvr-16x2-cmi

                        Das bedingt aber das man vollen Zugriff auf die Steuerung (resp. das Interface CMI) hat. Mein Heizungsmonteur will mir eben genau das nicht geben. Ich frage mich jetzt mal nicht wieso, denn diese Antwort kenne ich selber schon: "dann machst du wieder was".

                        Ich habe es mit den paar wenigen Datenpunkten die ich zur Verfügung hatte, eben nicht geschaft.

                        Bekommt ihr über die Modbus-Schnittstelle auch die Betriebszeiten geliefert? Weil mein Iobroker intern gebastelte Zähler ist etwas ungenau. Mein Heizunginstallateur behauptet eben die Betriebszähler könne er nicht auf das CMI rausschreiben.

                        1 Antwort Letzte Antwort
                        0

                        Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                        Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                        Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                        Registrieren Anmelden
                        Antworten
                        • In einem neuen Thema antworten
                        Anmelden zum Antworten
                        • Älteste zuerst
                        • Neuste zuerst
                        • Meiste Stimmen


                        Support us

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

                        453

                        Online

                        32.9k

                        Benutzer

                        83.0k

                        Themen

                        1.3m

                        Beiträge
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                        ioBroker Community 2014-2025
                        logo
                        • Anmelden

                        • Du hast noch kein Konto? Registrieren

                        • Anmelden oder registrieren, um zu suchen
                        • Erster Beitrag
                          Letzter Beitrag
                        0
                        • Home
                        • Aktuell
                        • Tags
                        • Ungelesen 0
                        • Kategorien
                        • Unreplied
                        • Beliebt
                        • GitHub
                        • Docu
                        • Hilfe