Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst] - Learning JS - Part 2

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] - Learning JS - Part 2

    This topic has been deleted. Only users with topic management privileges can see it.
    • Codierknecht
      Codierknecht Developer Most Active last edited by Codierknecht

      Ich habe in einem DP ein solches JSON:

      [
        {
          "Device": "Taster Bad",
          "Battery": "50%"
        },{
          "Device": "Heizung Bad",
          "Battery": "90%"
        },{
          "Device": "Heizung Arbeitszimmer",
          "Battery": "30%"
        },{
          "Device": "Gaszähler",
          "Battery": "3V"
        }
      ]
      

      Und dazu folgenden Code:

      var devices = getState("device-watcher.0.batteryList").val;
      var jsonData = JSON.parse(devices);
      var message = '';
      for (var i = 0; i < jsonData.length; i++) {
          message += jsonData[i].Device + '\n';
      }
      console.log(message);
      

      Warum erhalte ich hier diese Fehler?

      1.12.2022, 23:57:02.549	[info ]: javascript.0 (21396) Start javascript script.js.common.Informationen.OfflineWarnung
      1.12.2022, 23:57:02.563	[info ]: javascript.0 (21396) script.js.common.Informationen.OfflineWarnung: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
      1.12.2022, 23:57:02.572	[error]: javascript.0 (21396) script.js.common.Informationen.OfflineWarnung: SyntaxError: Unexpected token o in JSON at position 1
      1.12.2022, 23:57:02.573	[error]: javascript.0 (21396)     at script.js.common.Informationen.OfflineWarnung:2:21
      1.12.2022, 23:57:02.573	[error]: javascript.0 (21396)     at script.js.common.Informationen.OfflineWarnung:8:3
      

      Irgendwas stimmt da mit dem getState nicht.
      Schreibe ich den Inhalt dieses DP direkt (von Hand) in die Variable, funktioniert es einwandfrei.

      M 1 Reply Last reply Reply Quote 0
      • M
        MCU @Codierknecht last edited by MCU

        @codierknecht
        Mach doch mal ein log nach dem getState. Ist der DP ein object, wird er automatich geparsed.
        Einmal die Objekt-Eigenschaften von dem DP device-watcher.0.batteryList

        Codierknecht 1 Reply Last reply Reply Quote 1
        • Codierknecht
          Codierknecht Developer Most Active @MCU last edited by

          @mcu
          Danke für den Schubs in die richtige Richtung 👍

          Der DP enthält bereits ein Array von Objekten. Das wird lediglich im Objektbaum als JSON dargestellt.
          Parsen ist gar nicht nötig.

          {
            "_id": "device-watcher.0.batteryList",
            "type": "state",
            "common": {
              "type": "array",
              "role": "json",
              "read": true,
              "write": false
            },
            "native": {},
            "from": "system.adapter.device-watcher.0",
            "ts": 1669580330469,
            "acl": {
              "object": 1636,
              "state": 1636,
              "owner": "system.user.admin",
              "ownerGroup": "system.group.administrator"
            },
            "user": "system.user.admin"
          }
          

          Damit sieht das dann (prinzipiell) so aus und funzt einwandfrei 😄

          on({id: "device-watcher.0.lowBatteryCount", change: "ne"}, async function (obj) {
              var batteryCount = obj.state.val;
              if (batteryCount > 0) {
                  var devices = getState("device-watcher.0.lowBatteryList").val;
                  var message = 'ACHTUNG: Batterie in ' + batteryCount + ' Gerät(en) schwach:\n';
                  for (var i = 0; i < devices.length; i++) {
                  message += devices[i].Device + '\n';
                  }
              } else {
                  message = 'Alle Batterien sind OK!';  
              }
              sendSignalMessage(message, '+49xxxxxxxxxx');
          });
          
          1 Reply Last reply Reply Quote 0
          • First post
            Last post

          Support us

          ioBroker
          Community Adapters
          Donate

          653
          Online

          31.8k
          Users

          80.0k
          Topics

          1.3m
          Posts

          2
          3
          173
          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