Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Fehler in einem Script welchen den Ladezustand von Batterien ausliest.

    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

    Fehler in einem Script welchen den Ladezustand von Batterien ausliest.

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

      Hallo zusammen,

      ich habe drei Fragen. Leider bin ich nur mit Blocky unterwegs und kenne mich mit Java so gar nicht aus.

      1: Ich nutze dieses Script um den Ladezustand meiner Aquara Sensoren auszulesen. In diesem Script wird dann ein Objekt angelegt und ich verarbeite das in VIS, so das ich ein Batteriesymbol angezeigt bekomme, welches immer leerer wird 😄 Leider bekomme ich einen Fehler angezeigt und kann ihn nicht beheben.

      Script:

      // Batterieanzeige31
      "*/60 * * * *"
      const idBatt31 = 'mihome.0.devices.magnet_158d0002e25252.percent'; // Batterielevel in %
      const idVis31 = 'Batterieanzeige_Tuere_WC_OG'; // Für Vis
      
      createState(idVis31, 0, {
      type: 'number',
      min: 0,
      max: 6,
      role: 'level',
      states: {
      0: '0 %',
      1: '10 %',
      2: '20 %',
      3: '40 %',
      4: '60 %',
      5: '80 %',
      6: '100 %',   
      }
      });
      
      var level31 = getState(idBatt31).val;
      
      function batt31() {
      var state31 = 6; // full
      if(level31 <= 100) state31 = 6; // 100%
      if(level31 <= 80) state31 = 5; // 80 %
      if(level31 <= 60) state31 = 4; // 60 %
      if(level31 <= 40) state31 = 3; // 40 %
      if(level31 <= 20) state31 = 2; // 20 %
      if(level31 <= 10) state31 = 1; // 10 %
      if(level31 <= 5) state31 = 0; // empty
      setState(idVis31, state31, true);
      }
      
      batt31(); // Skriptstart
      
      on(idBatt31, function(dp) {
      level31 = dp.state31.val;
      batt31();
      });
      

      Fehler:

      javascript.0	2019-01-21 20:54:58.753	error	at Manager.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/component-emitter/index.js:133:20)
      javascript.0	2019-01-21 20:54:58.752	error	at Manager. <anonymous>(/opt/iobroker/node_modules/component-bind/index.js:21:15)
      javascript.0	2019-01-21 20:54:58.752	error	at Socket.onpacket (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/socket.js:236:12)
      javascript.0	2019-01-21 20:54:58.752	error	at Socket.onevent (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/socket.js:278:10)
      javascript.0	2019-01-21 20:54:58.752	error	at Socket.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/component-emitter/index.js:133:20)
      javascript.0	2019-01-21 20:54:58.752	error	at Socket. <anonymous>(/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInMemClient.js:52:30)
      javascript.0	2019-01-21 20:54:58.752	error	at Object.change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:3425:37)
      javascript.0	2019-01-21 20:54:58.752	error	at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:358:25)
      javascript.0	2019-01-21 20:54:58.752	error	at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:755:38)
      javascript.0	2019-01-21 20:54:58.751	error	at Object. <anonymous>(script.js.Batterien.31_Batterie_Status_Tuere_WC_OG:39:22)
      javascript.0	2019-01-21 20:54:58.750	error	Error in callback: TypeError: Cannot read property 'val' of undefined</anonymous></anonymous></anonymous>
      

      2: Wie ihr seht, versucht das Script bei jedem Durchlauf das Objekt neu anzulegen. Wie müsste man das umschreiben um das zu vermeiden. So, dass er also beim ersten Start das Objekt anlegt und dann nicht mehr?

      3: Ich habe nun das gleiche Script 31 Mal am laufen. Soweit funktioniert das auch super aber es muss doch möglich sein, daraus ein Script zu machen, welche das gleiche Ergebnis hat. Mit Schleifen oder so?

      In VIS schaut das dann so aus. Es geht auch, will es nur optimieren…
      1955_1.png

      Vielen lieben Dank und Gruß

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

        level31 = dp.state31.val;
        

        dp.state31.val gibt es nicht. Das ist der Grund warum er meckert..

        Es muss

        dp.state.val
        ````sein.
        
        Gruß
        1 Reply Last reply Reply Quote 0
        • S
          Snatch last edited by

          Danke dir, dann ist dieser Fehler damit behoben.

          1 Reply Last reply Reply Quote 0
          • J
            jhuebner1 last edited by

            Hallo,

            irgendwie steh ich auf dem Schlauch:
            Wie sieht denn dann das Widget aus im VIS?
            Das mit dem Script verstehe ich halb, die Funktionen sind klar, aber wo ist der Link zu der Bilddatei?
            Und wie machst du dann die Sichtbarkeit abhängig von dem %-Status?

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

            Support us

            ioBroker
            Community Adapters
            Donate

            686
            Online

            31.8k
            Users

            79.9k
            Topics

            1.3m
            Posts

            3
            4
            322
            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