Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • 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. Skripten / Logik
  4. JavaScript
  5. Auslesen von Wert eines Objektes

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.6k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    848

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

Auslesen von Wert eines Objektes

Geplant Angeheftet Gesperrt Verschoben JavaScript
4 Beiträge 3 Kommentatoren 216 Aufrufe 2 Watching
  • Ä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.
  • snakepitnetworkS Offline
    snakepitnetworkS Offline
    snakepitnetwork
    schrieb am zuletzt editiert von
    #1

    Hallo zusammen, leider muss ich jetzt hier eine Frage stellen, ich komme nicht weiter, weder mit Google Suche oder anderem.

    Ich habe eine Luxtronix WP und möchte hier den Fehlerspeicher auslesen und bei einem Problem mir eine WhatsApp schicken lassen.

    Die Datenpunkte sind sichtbar und werden auch erkannt. Leider bekomme ich nicht die Werte aus dem Objekt. Die Native Werte, die man im Objekt anziegen kann, konnte das Programm auslesen, aber ein GetState(ID) liefert bei dem Objekt keine Werte.

    /**********************************************
     * Zweck: Wärmepumpe Alarm bei Fehler und Abschaltungen
     * Abhängigkeiten: luxtronik2.0.Informationen.Fehlerspeicher, luxtronik2.0.Informationen.Abschaltungen
     **********************************************/
    const STATE_ID_Fehlerspeicher = "luxtronik2.0.Informationen.Fehlerspeicher";
    const STATE_ID_Abschaltungen = "luxtronik2.0.Informationen.Abschaltungen";
    
    if (existsObject(STATE_ID_Fehlerspeicher)==true){
        console.log("STATE_ID_Fehlerspeicher: Exisitert");
        }
    else
        {console.log("STATE_ID_Fehlerspeicher: Exisitert nicht");}
    
    if (existsObject(STATE_ID_Abschaltungen)==true){
        console.log("STATE_ID_Abschaltungen: Exisitert");
        }
    else
        {console.log("STATE_ID_Abschaltungen: Exisitert nicht");}
    
        let fehlerspeicherState = getObject(STATE_ID_Fehlerspeicher);
        let abschaltungenState = getObject(STATE_ID_Abschaltungen);
        console.log("fehlerspeicherObj:", fehlerspeicherState);
        console.log("abschaltungenObj:", abschaltungenState);
    
        fehlerspeicherState = getObject(STATE_ID_Fehlerspeicher).val;
        abschaltungenState = getObject(STATE_ID_Abschaltungen).val;
        console.log("fehlerspeicherObj:", fehlerspeicherState);
        console.log("abschaltungenObj:", abschaltungenState);
    
        fehlerspeicherState = getState(STATE_ID_Fehlerspeicher);
        abschaltungenState = getState(STATE_ID_Abschaltungen);
        console.log("fehlerspeicherState:", fehlerspeicherState);
        console.log("abschaltungenState:", abschaltungenState);
    
        fehlerspeicherState = getState(STATE_ID_Fehlerspeicher).val;
        abschaltungenState = getState(STATE_ID_Abschaltungen).val;
        console.log("fehlerspeicherState:", fehlerspeicherState);
        console.log("abschaltungenState:", abschaltungenState);
    
        console.log(STATE_ID_Fehlerspeicher.val); 
    
    
    {
      "type": "state",
      "common": {
        "name": "Abschaltungen",
        "type": "object",
        "role": "json",
        "read": true,
        "write": false,
        "custom": {
          "influxdb.0": {
            "enabled": true,
            "storageType": "",
            "aliasId": "",
            "debounceTime": 0,
            "blockTime": 0,
            "changesOnly": true,
            "changesRelogInterval": 0,
            "changesMinDelta": 0,
            "ignoreBelowNumber": "",
            "disableSkippedValueLogging": false,
            "enableDebugLogs": true,
            "debounce": 0
          }
        }
      },
      "native": {
        "$": {
          "id": "0x0x510a90"
        },
        "name": [
          "Abschaltungen"
        ],
        "item": [
          {
            "$": {
              "id": "0x0x545d30"
            },
            "name": [
              "09.05.25 10:26:10"
            ],
            "value": [
              "keine Anf."
            ]
          },
          {
            "$": {
              "id": "0x0x50d548"
            },
            "name": [
              "09.05.25 07:02:00"
            ],
            "value": [
              "keine Anf."
            ]
          },
          {
            "$": {
              "id": "0x0x531038"
            },
            "name": [
              "09.05.25 04:53:05"
            ],
            "value": [
              "keine Anf."
            ]
          },
          {
            "$": {
              "id": "0x0x52d470"
            },
            "name": [
              "09.05.25 02:49:08"
            ],
            "value": [
              "keine Anf."
            ]
          },
          {
            "$": {
              "id": "0x0x510768"
            },
            "name": [
              "08.05.25 23:59:16"
            ],
            "value": [
              "keine Anf."
            ]
          }
        ]
      },
      "_id": "luxtronik2.0.Informationen.Abschaltungen",
      "acl": {
        "object": 1636,
        "state": 1636,
        "owner": "system.user.admin",
        "ownerGroup": "system.group.administrator"
      },
      "from": "system.adapter.admin.0",
      "user": "system.user.admin",
      "ts": 1749716042909
    }
    
    Wert:
    {"12.06.25 07:01:49":"keine Anf.","12.06.25 06:17:52":"keine Anf.","11.06.25 11:33:49":"keine Anf.","11.06.25 05:37:50":"keine Anf.","11.06.25 03:04:55":"keine Anf."}
    

    Ich habe jetzt mal nur das Test Skript angehängt ob man da schon einen groben Fehler sehen kann.

    Danke für Eure Hilfe!

    Hier noch das Vollständige:

    /**********************************************
     * Zweck: Wärmepumpe Alarm bei Fehler und Abschaltungen
     * Abhängigkeiten: luxtronik2.0.Informationen.Fehlerspeicher, luxtronik2.0.Informationen.Abschaltungen
     **********************************************/
    const STATE_ID_Fehlerspeicher = "luxtronik2.0.Informationen.Fehlerspeicher";
    const STATE_ID_Abschaltungen = "luxtronik2.0.Informationen.Abschaltungen";
    console.log("STATE_ID_Fehlerspeicher:", STATE_ID_Fehlerspeicher);
    console.log("STATE_ID_Abschaltungen:", STATE_ID_Abschaltungen);
    
    // Funktion, um das aktuelle Datum im Format "DD.MM.YY" zu erhalten
    function getCurrentDate() {
        const now = new Date();
        return now.toLocaleDateString('de-DE'); // Format: DD.MM.YY
    }
    
    // Variablen, um die letzten bekannten Einträge zu speichern
    let lastFehlerspeicher = {};
    let lastAbschaltungen = {};
    
    // Variable, um den Fehlerfall zu simulieren
    let simulateError = false;
    
    schedule('* * * * *', function () {
        // Objekte auslesen
        const fehlerspeicherObj = getState(STATE_ID_Fehlerspeicher);
        const abschaltungenObj = getState(STATE_ID_Abschaltungen);
    
        if (!fehlerspeicherObj || !abschaltungenObj) {
            console.warn("Fehlerspeicher oder Abschaltungen-Objekt nicht vorhanden.");
            return;
        }
    
        console.log("fehlerspeicherObj.val:", fehlerspeicherObj.val);
        console.log("abschaltungenObj.val:", abschaltungenObj.val);
        console.log("typeof fehlerspeicherObj.val:", typeof fehlerspeicherObj.val, "Inhalt:", fehlerspeicherObj.val);
        console.log("typeof abschaltungenObj.val:", typeof abschaltungenObj.val, "Inhalt:", abschaltungenObj.val);
    
        if (typeof fehlerspeicherObj.val !== "string" || fehlerspeicherObj.val.trim() === "") {
            console.warn("Fehlerspeicher-Objekt ist leer!");
        }
        if (typeof abschaltungenObj.val !== "string" || abschaltungenObj.val.trim() === "") {
            console.warn("Abschaltungen-Objekt ist leer!");
        }
    
        // JSON parsen, falls value ein JSON-String ist
        let fehlerspeicherData, abschaltungenData;
        try {
            if (fehlerspeicherObj.val) {
                fehlerspeicherData = JSON.parse(fehlerspeicherObj.val);
            } else {
                throw new Error("fehlerspeicherObj.val ist leer");
            }
        } catch (e) {
            console.warn("Fehlerspeicher-Objekt konnte nicht geparst werden:", e);
            fehlerspeicherData = {};
        }
        let abschaltungenItems = [];
        try {
            if (abschaltungenObj.val) {
                const parsed = JSON.parse(abschaltungenObj.val);
                // parsed ist ein Objekt mit Datum als Key und Grund als Value
                abschaltungenItems = Object.entries(parsed).map(([date, value]) => ({
                    date,
                    value
                }));
            }
        } catch (e) {
            console.warn("Abschaltungen-Objekt konnte nicht geparst werden:", e);
        }
    
        let fehlerspeicherItems = [];
        try {
            if (fehlerspeicherObj.val) {
                const parsed = JSON.parse(fehlerspeicherObj.val);
                // parsed ist ein Objekt mit Datum als Key und Fehlertext als Value
                fehlerspeicherItems = Object.entries(parsed).map(([date, value]) => ({
                    date,
                    value
                }));
            }
        } catch (e) {
            console.warn("Fehlerspeicher-Objekt konnte nicht geparst werden:", e);
        }
    
        const currentDate = getCurrentDate();
    
        let newFehler = [];
        fehlerspeicherItems.forEach((entry) => {
            // entry.date ist das Datum, entry.value der Fehlertext
            if (entry.date.startsWith(currentDate)) {
                if (!lastFehlerspeicher[entry.date]) {
                    newFehler.push(entry);
                } else {
                    console.log(`Eintrag ignoriert (bereits bekannt): Datum=${entry.date}`);
                }
            }
        });
    
        let newAbschaltungen = [];
        abschaltungenItems.forEach((entry) => {
            // entry.date ist das Datum, entry.value der Grund
            // Prüfe auf aktuelles Datum (nur Tag, nicht Uhrzeit!)
            if (entry.date.startsWith(currentDate)) {
                if (!lastAbschaltungen[entry.date]) {
                    newAbschaltungen.push(entry);
                } else {
                    console.log(`Eintrag ignoriert (bereits bekannt): Datum=${entry.date}`);
                }
            }
        });
    
        if (newFehler.length > 0 || newAbschaltungen.length > 0) {
            const fehlerDetails = newFehler
                .map((entry) => `Datum: ${entry.date}, Fehler: ${entry.value}`)
                .join("\n");
            const abschaltungenDetails = newAbschaltungen
                .map((entry) => `Datum: ${entry.name[0]}, Grund: ${entry.value[0]}`)
                .join("\n");
    
            const message = `Wärmepumpen-Alarm:\n\nNeue Fehlerspeicher-Einträge:\n${fehlerDetails}\n\nNeue Abschaltungen:\n${abschaltungenDetails}`;
            console.log("Nachricht für WhatsApp:", message);
    
            sendTo('whatsapp-cmb.0', 'send', {
                text: message,
                phone: ''
            });
    
            newFehler.forEach((entry) => {
                lastFehlerspeicher[entry.date] = true;
            });
            newAbschaltungen.forEach((entry) => {
                lastAbschaltungen[entry.date] = true;
            });
        } else {
            console.log("Keine neuen Einträge vom heutigen Datum gefunden.");
        }
    });
    
    // Reset lastFehlerspeicher and lastAbschaltungen at midnight
    schedule('0 0 * * *', function () {
        lastFehlerspeicher = {};
        lastAbschaltungen = {};
        console.log("Reset lastFehlerspeicher and lastAbschaltungen.");
    });
    
    
    CodierknechtC paul53P 2 Antworten Letzte Antwort
    0
    • snakepitnetworkS snakepitnetwork

      Hallo zusammen, leider muss ich jetzt hier eine Frage stellen, ich komme nicht weiter, weder mit Google Suche oder anderem.

      Ich habe eine Luxtronix WP und möchte hier den Fehlerspeicher auslesen und bei einem Problem mir eine WhatsApp schicken lassen.

      Die Datenpunkte sind sichtbar und werden auch erkannt. Leider bekomme ich nicht die Werte aus dem Objekt. Die Native Werte, die man im Objekt anziegen kann, konnte das Programm auslesen, aber ein GetState(ID) liefert bei dem Objekt keine Werte.

      /**********************************************
       * Zweck: Wärmepumpe Alarm bei Fehler und Abschaltungen
       * Abhängigkeiten: luxtronik2.0.Informationen.Fehlerspeicher, luxtronik2.0.Informationen.Abschaltungen
       **********************************************/
      const STATE_ID_Fehlerspeicher = "luxtronik2.0.Informationen.Fehlerspeicher";
      const STATE_ID_Abschaltungen = "luxtronik2.0.Informationen.Abschaltungen";
      
      if (existsObject(STATE_ID_Fehlerspeicher)==true){
          console.log("STATE_ID_Fehlerspeicher: Exisitert");
          }
      else
          {console.log("STATE_ID_Fehlerspeicher: Exisitert nicht");}
      
      if (existsObject(STATE_ID_Abschaltungen)==true){
          console.log("STATE_ID_Abschaltungen: Exisitert");
          }
      else
          {console.log("STATE_ID_Abschaltungen: Exisitert nicht");}
      
          let fehlerspeicherState = getObject(STATE_ID_Fehlerspeicher);
          let abschaltungenState = getObject(STATE_ID_Abschaltungen);
          console.log("fehlerspeicherObj:", fehlerspeicherState);
          console.log("abschaltungenObj:", abschaltungenState);
      
          fehlerspeicherState = getObject(STATE_ID_Fehlerspeicher).val;
          abschaltungenState = getObject(STATE_ID_Abschaltungen).val;
          console.log("fehlerspeicherObj:", fehlerspeicherState);
          console.log("abschaltungenObj:", abschaltungenState);
      
          fehlerspeicherState = getState(STATE_ID_Fehlerspeicher);
          abschaltungenState = getState(STATE_ID_Abschaltungen);
          console.log("fehlerspeicherState:", fehlerspeicherState);
          console.log("abschaltungenState:", abschaltungenState);
      
          fehlerspeicherState = getState(STATE_ID_Fehlerspeicher).val;
          abschaltungenState = getState(STATE_ID_Abschaltungen).val;
          console.log("fehlerspeicherState:", fehlerspeicherState);
          console.log("abschaltungenState:", abschaltungenState);
      
          console.log(STATE_ID_Fehlerspeicher.val); 
      
      
      {
        "type": "state",
        "common": {
          "name": "Abschaltungen",
          "type": "object",
          "role": "json",
          "read": true,
          "write": false,
          "custom": {
            "influxdb.0": {
              "enabled": true,
              "storageType": "",
              "aliasId": "",
              "debounceTime": 0,
              "blockTime": 0,
              "changesOnly": true,
              "changesRelogInterval": 0,
              "changesMinDelta": 0,
              "ignoreBelowNumber": "",
              "disableSkippedValueLogging": false,
              "enableDebugLogs": true,
              "debounce": 0
            }
          }
        },
        "native": {
          "$": {
            "id": "0x0x510a90"
          },
          "name": [
            "Abschaltungen"
          ],
          "item": [
            {
              "$": {
                "id": "0x0x545d30"
              },
              "name": [
                "09.05.25 10:26:10"
              ],
              "value": [
                "keine Anf."
              ]
            },
            {
              "$": {
                "id": "0x0x50d548"
              },
              "name": [
                "09.05.25 07:02:00"
              ],
              "value": [
                "keine Anf."
              ]
            },
            {
              "$": {
                "id": "0x0x531038"
              },
              "name": [
                "09.05.25 04:53:05"
              ],
              "value": [
                "keine Anf."
              ]
            },
            {
              "$": {
                "id": "0x0x52d470"
              },
              "name": [
                "09.05.25 02:49:08"
              ],
              "value": [
                "keine Anf."
              ]
            },
            {
              "$": {
                "id": "0x0x510768"
              },
              "name": [
                "08.05.25 23:59:16"
              ],
              "value": [
                "keine Anf."
              ]
            }
          ]
        },
        "_id": "luxtronik2.0.Informationen.Abschaltungen",
        "acl": {
          "object": 1636,
          "state": 1636,
          "owner": "system.user.admin",
          "ownerGroup": "system.group.administrator"
        },
        "from": "system.adapter.admin.0",
        "user": "system.user.admin",
        "ts": 1749716042909
      }
      
      Wert:
      {"12.06.25 07:01:49":"keine Anf.","12.06.25 06:17:52":"keine Anf.","11.06.25 11:33:49":"keine Anf.","11.06.25 05:37:50":"keine Anf.","11.06.25 03:04:55":"keine Anf."}
      

      Ich habe jetzt mal nur das Test Skript angehängt ob man da schon einen groben Fehler sehen kann.

      Danke für Eure Hilfe!

      Hier noch das Vollständige:

      /**********************************************
       * Zweck: Wärmepumpe Alarm bei Fehler und Abschaltungen
       * Abhängigkeiten: luxtronik2.0.Informationen.Fehlerspeicher, luxtronik2.0.Informationen.Abschaltungen
       **********************************************/
      const STATE_ID_Fehlerspeicher = "luxtronik2.0.Informationen.Fehlerspeicher";
      const STATE_ID_Abschaltungen = "luxtronik2.0.Informationen.Abschaltungen";
      console.log("STATE_ID_Fehlerspeicher:", STATE_ID_Fehlerspeicher);
      console.log("STATE_ID_Abschaltungen:", STATE_ID_Abschaltungen);
      
      // Funktion, um das aktuelle Datum im Format "DD.MM.YY" zu erhalten
      function getCurrentDate() {
          const now = new Date();
          return now.toLocaleDateString('de-DE'); // Format: DD.MM.YY
      }
      
      // Variablen, um die letzten bekannten Einträge zu speichern
      let lastFehlerspeicher = {};
      let lastAbschaltungen = {};
      
      // Variable, um den Fehlerfall zu simulieren
      let simulateError = false;
      
      schedule('* * * * *', function () {
          // Objekte auslesen
          const fehlerspeicherObj = getState(STATE_ID_Fehlerspeicher);
          const abschaltungenObj = getState(STATE_ID_Abschaltungen);
      
          if (!fehlerspeicherObj || !abschaltungenObj) {
              console.warn("Fehlerspeicher oder Abschaltungen-Objekt nicht vorhanden.");
              return;
          }
      
          console.log("fehlerspeicherObj.val:", fehlerspeicherObj.val);
          console.log("abschaltungenObj.val:", abschaltungenObj.val);
          console.log("typeof fehlerspeicherObj.val:", typeof fehlerspeicherObj.val, "Inhalt:", fehlerspeicherObj.val);
          console.log("typeof abschaltungenObj.val:", typeof abschaltungenObj.val, "Inhalt:", abschaltungenObj.val);
      
          if (typeof fehlerspeicherObj.val !== "string" || fehlerspeicherObj.val.trim() === "") {
              console.warn("Fehlerspeicher-Objekt ist leer!");
          }
          if (typeof abschaltungenObj.val !== "string" || abschaltungenObj.val.trim() === "") {
              console.warn("Abschaltungen-Objekt ist leer!");
          }
      
          // JSON parsen, falls value ein JSON-String ist
          let fehlerspeicherData, abschaltungenData;
          try {
              if (fehlerspeicherObj.val) {
                  fehlerspeicherData = JSON.parse(fehlerspeicherObj.val);
              } else {
                  throw new Error("fehlerspeicherObj.val ist leer");
              }
          } catch (e) {
              console.warn("Fehlerspeicher-Objekt konnte nicht geparst werden:", e);
              fehlerspeicherData = {};
          }
          let abschaltungenItems = [];
          try {
              if (abschaltungenObj.val) {
                  const parsed = JSON.parse(abschaltungenObj.val);
                  // parsed ist ein Objekt mit Datum als Key und Grund als Value
                  abschaltungenItems = Object.entries(parsed).map(([date, value]) => ({
                      date,
                      value
                  }));
              }
          } catch (e) {
              console.warn("Abschaltungen-Objekt konnte nicht geparst werden:", e);
          }
      
          let fehlerspeicherItems = [];
          try {
              if (fehlerspeicherObj.val) {
                  const parsed = JSON.parse(fehlerspeicherObj.val);
                  // parsed ist ein Objekt mit Datum als Key und Fehlertext als Value
                  fehlerspeicherItems = Object.entries(parsed).map(([date, value]) => ({
                      date,
                      value
                  }));
              }
          } catch (e) {
              console.warn("Fehlerspeicher-Objekt konnte nicht geparst werden:", e);
          }
      
          const currentDate = getCurrentDate();
      
          let newFehler = [];
          fehlerspeicherItems.forEach((entry) => {
              // entry.date ist das Datum, entry.value der Fehlertext
              if (entry.date.startsWith(currentDate)) {
                  if (!lastFehlerspeicher[entry.date]) {
                      newFehler.push(entry);
                  } else {
                      console.log(`Eintrag ignoriert (bereits bekannt): Datum=${entry.date}`);
                  }
              }
          });
      
          let newAbschaltungen = [];
          abschaltungenItems.forEach((entry) => {
              // entry.date ist das Datum, entry.value der Grund
              // Prüfe auf aktuelles Datum (nur Tag, nicht Uhrzeit!)
              if (entry.date.startsWith(currentDate)) {
                  if (!lastAbschaltungen[entry.date]) {
                      newAbschaltungen.push(entry);
                  } else {
                      console.log(`Eintrag ignoriert (bereits bekannt): Datum=${entry.date}`);
                  }
              }
          });
      
          if (newFehler.length > 0 || newAbschaltungen.length > 0) {
              const fehlerDetails = newFehler
                  .map((entry) => `Datum: ${entry.date}, Fehler: ${entry.value}`)
                  .join("\n");
              const abschaltungenDetails = newAbschaltungen
                  .map((entry) => `Datum: ${entry.name[0]}, Grund: ${entry.value[0]}`)
                  .join("\n");
      
              const message = `Wärmepumpen-Alarm:\n\nNeue Fehlerspeicher-Einträge:\n${fehlerDetails}\n\nNeue Abschaltungen:\n${abschaltungenDetails}`;
              console.log("Nachricht für WhatsApp:", message);
      
              sendTo('whatsapp-cmb.0', 'send', {
                  text: message,
                  phone: ''
              });
      
              newFehler.forEach((entry) => {
                  lastFehlerspeicher[entry.date] = true;
              });
              newAbschaltungen.forEach((entry) => {
                  lastAbschaltungen[entry.date] = true;
              });
          } else {
              console.log("Keine neuen Einträge vom heutigen Datum gefunden.");
          }
      });
      
      // Reset lastFehlerspeicher and lastAbschaltungen at midnight
      schedule('0 0 * * *', function () {
          lastFehlerspeicher = {};
          lastAbschaltungen = {};
          console.log("Reset lastFehlerspeicher and lastAbschaltungen.");
      });
      
      
      CodierknechtC Offline
      CodierknechtC Offline
      Codierknecht
      Developer Most Active
      schrieb am zuletzt editiert von
      #2

      @snakepitnetwork sagte in Auslesen von Wert eines Objektes:

      aber ein GetState(ID) liefert bei dem Objekt keine Werte

      Dann zeig doch mal, wie das im Objektbaum aussieht.

      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

      Proxmox 9.1.1 LXC|8 GB|Core i7-6700
      HmIP|ZigBee|Tasmota|Unifi
      Zabbix Certified Specialist
      Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

      1 Antwort Letzte Antwort
      0
      • snakepitnetworkS snakepitnetwork

        Hallo zusammen, leider muss ich jetzt hier eine Frage stellen, ich komme nicht weiter, weder mit Google Suche oder anderem.

        Ich habe eine Luxtronix WP und möchte hier den Fehlerspeicher auslesen und bei einem Problem mir eine WhatsApp schicken lassen.

        Die Datenpunkte sind sichtbar und werden auch erkannt. Leider bekomme ich nicht die Werte aus dem Objekt. Die Native Werte, die man im Objekt anziegen kann, konnte das Programm auslesen, aber ein GetState(ID) liefert bei dem Objekt keine Werte.

        /**********************************************
         * Zweck: Wärmepumpe Alarm bei Fehler und Abschaltungen
         * Abhängigkeiten: luxtronik2.0.Informationen.Fehlerspeicher, luxtronik2.0.Informationen.Abschaltungen
         **********************************************/
        const STATE_ID_Fehlerspeicher = "luxtronik2.0.Informationen.Fehlerspeicher";
        const STATE_ID_Abschaltungen = "luxtronik2.0.Informationen.Abschaltungen";
        
        if (existsObject(STATE_ID_Fehlerspeicher)==true){
            console.log("STATE_ID_Fehlerspeicher: Exisitert");
            }
        else
            {console.log("STATE_ID_Fehlerspeicher: Exisitert nicht");}
        
        if (existsObject(STATE_ID_Abschaltungen)==true){
            console.log("STATE_ID_Abschaltungen: Exisitert");
            }
        else
            {console.log("STATE_ID_Abschaltungen: Exisitert nicht");}
        
            let fehlerspeicherState = getObject(STATE_ID_Fehlerspeicher);
            let abschaltungenState = getObject(STATE_ID_Abschaltungen);
            console.log("fehlerspeicherObj:", fehlerspeicherState);
            console.log("abschaltungenObj:", abschaltungenState);
        
            fehlerspeicherState = getObject(STATE_ID_Fehlerspeicher).val;
            abschaltungenState = getObject(STATE_ID_Abschaltungen).val;
            console.log("fehlerspeicherObj:", fehlerspeicherState);
            console.log("abschaltungenObj:", abschaltungenState);
        
            fehlerspeicherState = getState(STATE_ID_Fehlerspeicher);
            abschaltungenState = getState(STATE_ID_Abschaltungen);
            console.log("fehlerspeicherState:", fehlerspeicherState);
            console.log("abschaltungenState:", abschaltungenState);
        
            fehlerspeicherState = getState(STATE_ID_Fehlerspeicher).val;
            abschaltungenState = getState(STATE_ID_Abschaltungen).val;
            console.log("fehlerspeicherState:", fehlerspeicherState);
            console.log("abschaltungenState:", abschaltungenState);
        
            console.log(STATE_ID_Fehlerspeicher.val); 
        
        
        {
          "type": "state",
          "common": {
            "name": "Abschaltungen",
            "type": "object",
            "role": "json",
            "read": true,
            "write": false,
            "custom": {
              "influxdb.0": {
                "enabled": true,
                "storageType": "",
                "aliasId": "",
                "debounceTime": 0,
                "blockTime": 0,
                "changesOnly": true,
                "changesRelogInterval": 0,
                "changesMinDelta": 0,
                "ignoreBelowNumber": "",
                "disableSkippedValueLogging": false,
                "enableDebugLogs": true,
                "debounce": 0
              }
            }
          },
          "native": {
            "$": {
              "id": "0x0x510a90"
            },
            "name": [
              "Abschaltungen"
            ],
            "item": [
              {
                "$": {
                  "id": "0x0x545d30"
                },
                "name": [
                  "09.05.25 10:26:10"
                ],
                "value": [
                  "keine Anf."
                ]
              },
              {
                "$": {
                  "id": "0x0x50d548"
                },
                "name": [
                  "09.05.25 07:02:00"
                ],
                "value": [
                  "keine Anf."
                ]
              },
              {
                "$": {
                  "id": "0x0x531038"
                },
                "name": [
                  "09.05.25 04:53:05"
                ],
                "value": [
                  "keine Anf."
                ]
              },
              {
                "$": {
                  "id": "0x0x52d470"
                },
                "name": [
                  "09.05.25 02:49:08"
                ],
                "value": [
                  "keine Anf."
                ]
              },
              {
                "$": {
                  "id": "0x0x510768"
                },
                "name": [
                  "08.05.25 23:59:16"
                ],
                "value": [
                  "keine Anf."
                ]
              }
            ]
          },
          "_id": "luxtronik2.0.Informationen.Abschaltungen",
          "acl": {
            "object": 1636,
            "state": 1636,
            "owner": "system.user.admin",
            "ownerGroup": "system.group.administrator"
          },
          "from": "system.adapter.admin.0",
          "user": "system.user.admin",
          "ts": 1749716042909
        }
        
        Wert:
        {"12.06.25 07:01:49":"keine Anf.","12.06.25 06:17:52":"keine Anf.","11.06.25 11:33:49":"keine Anf.","11.06.25 05:37:50":"keine Anf.","11.06.25 03:04:55":"keine Anf."}
        

        Ich habe jetzt mal nur das Test Skript angehängt ob man da schon einen groben Fehler sehen kann.

        Danke für Eure Hilfe!

        Hier noch das Vollständige:

        /**********************************************
         * Zweck: Wärmepumpe Alarm bei Fehler und Abschaltungen
         * Abhängigkeiten: luxtronik2.0.Informationen.Fehlerspeicher, luxtronik2.0.Informationen.Abschaltungen
         **********************************************/
        const STATE_ID_Fehlerspeicher = "luxtronik2.0.Informationen.Fehlerspeicher";
        const STATE_ID_Abschaltungen = "luxtronik2.0.Informationen.Abschaltungen";
        console.log("STATE_ID_Fehlerspeicher:", STATE_ID_Fehlerspeicher);
        console.log("STATE_ID_Abschaltungen:", STATE_ID_Abschaltungen);
        
        // Funktion, um das aktuelle Datum im Format "DD.MM.YY" zu erhalten
        function getCurrentDate() {
            const now = new Date();
            return now.toLocaleDateString('de-DE'); // Format: DD.MM.YY
        }
        
        // Variablen, um die letzten bekannten Einträge zu speichern
        let lastFehlerspeicher = {};
        let lastAbschaltungen = {};
        
        // Variable, um den Fehlerfall zu simulieren
        let simulateError = false;
        
        schedule('* * * * *', function () {
            // Objekte auslesen
            const fehlerspeicherObj = getState(STATE_ID_Fehlerspeicher);
            const abschaltungenObj = getState(STATE_ID_Abschaltungen);
        
            if (!fehlerspeicherObj || !abschaltungenObj) {
                console.warn("Fehlerspeicher oder Abschaltungen-Objekt nicht vorhanden.");
                return;
            }
        
            console.log("fehlerspeicherObj.val:", fehlerspeicherObj.val);
            console.log("abschaltungenObj.val:", abschaltungenObj.val);
            console.log("typeof fehlerspeicherObj.val:", typeof fehlerspeicherObj.val, "Inhalt:", fehlerspeicherObj.val);
            console.log("typeof abschaltungenObj.val:", typeof abschaltungenObj.val, "Inhalt:", abschaltungenObj.val);
        
            if (typeof fehlerspeicherObj.val !== "string" || fehlerspeicherObj.val.trim() === "") {
                console.warn("Fehlerspeicher-Objekt ist leer!");
            }
            if (typeof abschaltungenObj.val !== "string" || abschaltungenObj.val.trim() === "") {
                console.warn("Abschaltungen-Objekt ist leer!");
            }
        
            // JSON parsen, falls value ein JSON-String ist
            let fehlerspeicherData, abschaltungenData;
            try {
                if (fehlerspeicherObj.val) {
                    fehlerspeicherData = JSON.parse(fehlerspeicherObj.val);
                } else {
                    throw new Error("fehlerspeicherObj.val ist leer");
                }
            } catch (e) {
                console.warn("Fehlerspeicher-Objekt konnte nicht geparst werden:", e);
                fehlerspeicherData = {};
            }
            let abschaltungenItems = [];
            try {
                if (abschaltungenObj.val) {
                    const parsed = JSON.parse(abschaltungenObj.val);
                    // parsed ist ein Objekt mit Datum als Key und Grund als Value
                    abschaltungenItems = Object.entries(parsed).map(([date, value]) => ({
                        date,
                        value
                    }));
                }
            } catch (e) {
                console.warn("Abschaltungen-Objekt konnte nicht geparst werden:", e);
            }
        
            let fehlerspeicherItems = [];
            try {
                if (fehlerspeicherObj.val) {
                    const parsed = JSON.parse(fehlerspeicherObj.val);
                    // parsed ist ein Objekt mit Datum als Key und Fehlertext als Value
                    fehlerspeicherItems = Object.entries(parsed).map(([date, value]) => ({
                        date,
                        value
                    }));
                }
            } catch (e) {
                console.warn("Fehlerspeicher-Objekt konnte nicht geparst werden:", e);
            }
        
            const currentDate = getCurrentDate();
        
            let newFehler = [];
            fehlerspeicherItems.forEach((entry) => {
                // entry.date ist das Datum, entry.value der Fehlertext
                if (entry.date.startsWith(currentDate)) {
                    if (!lastFehlerspeicher[entry.date]) {
                        newFehler.push(entry);
                    } else {
                        console.log(`Eintrag ignoriert (bereits bekannt): Datum=${entry.date}`);
                    }
                }
            });
        
            let newAbschaltungen = [];
            abschaltungenItems.forEach((entry) => {
                // entry.date ist das Datum, entry.value der Grund
                // Prüfe auf aktuelles Datum (nur Tag, nicht Uhrzeit!)
                if (entry.date.startsWith(currentDate)) {
                    if (!lastAbschaltungen[entry.date]) {
                        newAbschaltungen.push(entry);
                    } else {
                        console.log(`Eintrag ignoriert (bereits bekannt): Datum=${entry.date}`);
                    }
                }
            });
        
            if (newFehler.length > 0 || newAbschaltungen.length > 0) {
                const fehlerDetails = newFehler
                    .map((entry) => `Datum: ${entry.date}, Fehler: ${entry.value}`)
                    .join("\n");
                const abschaltungenDetails = newAbschaltungen
                    .map((entry) => `Datum: ${entry.name[0]}, Grund: ${entry.value[0]}`)
                    .join("\n");
        
                const message = `Wärmepumpen-Alarm:\n\nNeue Fehlerspeicher-Einträge:\n${fehlerDetails}\n\nNeue Abschaltungen:\n${abschaltungenDetails}`;
                console.log("Nachricht für WhatsApp:", message);
        
                sendTo('whatsapp-cmb.0', 'send', {
                    text: message,
                    phone: ''
                });
        
                newFehler.forEach((entry) => {
                    lastFehlerspeicher[entry.date] = true;
                });
                newAbschaltungen.forEach((entry) => {
                    lastAbschaltungen[entry.date] = true;
                });
            } else {
                console.log("Keine neuen Einträge vom heutigen Datum gefunden.");
            }
        });
        
        // Reset lastFehlerspeicher and lastAbschaltungen at midnight
        schedule('0 0 * * *', function () {
            lastFehlerspeicher = {};
            lastAbschaltungen = {};
            console.log("Reset lastFehlerspeicher and lastAbschaltungen.");
        });
        
        
        paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von paul53
        #3

        @snakepitnetwork sagte: GetState(ID) liefert bei dem Objekt keine Werte.

        Ob ein Zustand (state) vorhanden ist, prüft man mit existsState(id).

        if(!existsState(idFehlerspeicher)) log('Fehlerspeicher-Zustand nicht vorhanden', 'warn');
        else if(!existsState(idAbschaltungen)) log('Abschaltungen-Zustand nicht vorhanden', 'warn');
        else {
            // Werte einlesen und auswerten
        }
        

        Weshalb triggerst du nicht auf die beiden Datenpunkte? Dann muss die Existenz des Zustandes nicht geprüft werden, denn ein Datenpunkt ohne Zustand triggert nicht.

        const idFehlerspeicher = "luxtronik2.0.Informationen.Fehlerspeicher";
        const idAbschaltungen = "luxtronik2.0.Informationen.Abschaltungen";
        
        on(idFehlerspeicher, function(dp) { // triggert bei Wertänderung
            const Fehlerspeicher = dp.state.val;
            const zeit = Object.keys(Fehlerspeicher)[0];
            const fehler = Fehlerspeicher[zeit];
            // Nachricht
        });
        on(idAbschaltungen, function(dp) {
            const Abschaltungen = dp.state.val; // liefert ein Objekt
            const zeit = Object.keys(Abschaltungen)[0];
            const grund = Abschaltungen[zeit];
            // Nachricht
        });
        

        Beim Datenpunkt-Typ "object" darf nicht geparst werden, denn das erledigt der Javascript-Adapter. Offenbar enthält das erste Objekt-Element den neuesten Eintrag.

        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

        1 Antwort Letzte Antwort
        0
        • snakepitnetworkS Offline
          snakepitnetworkS Offline
          snakepitnetwork
          schrieb am zuletzt editiert von
          #4

          Ich danke Euch schon mal für die Aufklärung, ich probiere es gleich mal aus und gebe Rückmeldung!

          1 Antwort Letzte Antwort
          0
          Antworten
          • In einem neuen Thema antworten
          Anmelden zum Antworten
          • Älteste zuerst
          • Neuste zuerst
          • Meiste Stimmen


          Support us

          ioBroker
          Community Adapters
          Donate

          561

          Online

          32.6k

          Benutzer

          82.1k

          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