Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Fehler in Scripte die schon funktionierten!!!

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Fehler in Scripte die schon funktionierten!!!

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

      Hier mal die Scripte:

      Sonnenstandsberechnung

      /* System Sonnenstand
      
      Sonne Azimut und Elevation in Variablen schreiben
      
      erstellt: 06.07.2015 nach ioBroker Forum http://forum.iobroker.net/viewtopic.php?f=21&t=975&sid=6f0ba055de5f82eed6809424f49ca93b#p7635
      */
      var suncalc = require('suncalc'),
          result = getObject("system.adapter.javascript.0"),
          lat = result.native.latitude,
          long = result.native.longitude;
      
      createState('Sonnenstand.Elevation', 0, {unit: '°'});
      createState('Sonnenstand.Azimut', 0, {unit: '°'});
      
      function Sonnenstand_berechnen () {
          var now = new Date();
          var sunpos = suncalc.getPosition(now, lat, long);
          var h = sunpos.altitude * 180 / Math.PI,
              a = sunpos.azimuth * 180 / Math.PI + 180;
      
          setState("javascript.0.Sonnenstand.Elevation",h.toFixed(1));
          setState("javascript.0.Sonnenstand.Azimut",a.toFixed());
      }
      
      schedule("*/3 * * * *", Sonnenstand_berechnen);
      Sonnenstand_berechnen(); // bei Scriptstart
      

      Sonnenschutz Badezimmer:

      on({
          id: "javascript.0.Sonnenstand.Elevation"/*Sonnenstand.Elevation*/,
          change: "ne",
          logic: "and"
      }, function (obj) {
          Sonnenschutz_ausfuehren();
      });
      
      function Sonnenschutz_ausfuehren() 
      {
          if (getState("hm-rpc.0.LEQ1028794.1.LEVEL"/*Bad Jalousie Fenster:1.LEVEL*/).val <= 90) { return; }
              if (getState("javascript.0.Sonnenstand.Azimut"/*Sonnenstand.Azimut*/).val >= 145 && getState("javascript.0.Sonnenstand.Azimut"/*Sonnenstand.Azimut*/).val <= 289) {
                  if (getState("javascript.0.Beschattung.Jalousien.Sonnenschutz"/*javascript.0.Beschattung.Jalousien.Sonnenschutz*/).val === true) {
                          toLog("Sonnenschutzposition Jalousie Badezimmer angefahren",true);
                          setStateDelayed("hm-rpc.0.LEQ1028794.1.LEVEL"/*Bad Jalousie Fenster:1.LEVEL*/,40,15000);
                  }
              }
      }
      
      on({
          id: "javascript.0.Sonnenstand.Elevation"/*Sonnenstand.Elevation*/,
          change: "ne",
          logic: "and"
      }, function (obj) {
          Sonnenschutz_aufheben();
      });
      
      function Sonnenschutz_aufheben() 
      {
          if (getState("hm-rpc.0.LEQ1028794.1.LEVEL"/*Bad Jalousie Fenster:1.LEVEL*/).val <= 10 || getState("hm-rpc.0.LEQ1028794.1.LEVEL"/*Bad Jalousie Fenster:1.LEVEL*/).val >= 90) { return; }
              if (getState("javascript.0.Sonnenstand.Azimut"/*Sonnenstand.Azimut*/).val >= 290) {
                      toLog("Sonnenschutzposition Jalousie Badezimmer verlassen",true);
                      setState("hm-rpc.0.LEQ1028794.1.LEVEL"/*Bad Jalousie Fenster:1.LEVEL*/,100);
      
              }
      }
      
      

      Sonnenschutz rpüfen:

      //--------------------Sonnenschutz prüfen---------------------------------------
      on({
          id: "javascript.0.Sonnenstand.Elevation"/*Sonnenstand.Elevation*/,
          change: "ne",
          logic: "and"
      }, function (obj) {
          Sonnenschutz_pruefen();
      });
      
      createState("javascript.0.Beschattung.Jalousien.Sonnenschutz", false);
      createState("javascript.0.Beschattung.Jalousien.Aktiv", false);
      
      function Sonnenschutz_pruefen() {
          var SunProtect = false;
          if (getState("javascript.0.Sonnenstand.Elevation"/*Sonnenstand.Elevation*/).val >= 5) {
              if (getState("javascript.0.Sonnenstand.Azimut"/*Sonnenstand.Azimut*/).val >= 100 && getState("javascript.0.Sonnenstand.Azimut"/*Sonnenstand.Azimut*/).val <= 300) {
                  if (getState("javascript.0.Aussentemperatur.Anpassung"/*Aussentemperatur.Anpassung*/).val >= 19 && getState("javascript.0.Aussentemperatur.Anpassung"/*Aussentemperatur.Anpassung*/).val <= 30) {
                      if (getState("javascript.0.Beschattung.Sonnensensor.Sonne"/*javascript.0.Beschattung.Sonnensensor.Sonne*/).val === true && getState("hm-rpc.0.MEQ0203583.3.TEMPERATURE"/*Sonnensensor:3.TEMPERATURE*/).val >= 1.0) {
                          if (getState("javascript.0.Beschattung.Jalousien.Aktiv").val === true){
                          SunProtect = true;
                          }
                      }
                  }
              }
          }
          if (getState("javascript.0.Beschattung.Jalousien.Sonnenschutz").val != SunProtect) {
              // Nur bei Änderung setzen
              //setState("hm-rega.0.8091"/*Jalousie Sonnenschutz*/, SunProtect);
              setState("javascript.0.Beschattung.Jalousien.Sonnenschutz", SunProtect);
              //log("Prüfe Sonnenschutz: " + SunProtect);
          }
      }
      
      // Sonnenschutz wurde aktiviert
      on({
          id: "javascript.0.Beschattung.Jalousien.Sonnenschutz",
          change: "ne",
          val: true,
          logic: "and"
      }, function (obj) {
          Sonnenschutz_ein();
      });
      
      function Sonnenschutz_ein() {
      
          toLog("Der Sonnenschutz global wurde aktiviert",true);
      }
      
      // Sonnenschutz wurde deaktiviert
      on({
          id: "javascript.0.Beschattung.Jalousien.Sonnenschutz",
          change: "ne",
          val: false,
          logic: "and"
      }, function (obj) {
          Sonnenschutz_aus();
      });
      
      on({
          id: "javascript.0.Beschattung.Jalousien.Aktiv",
          change: "ne",
          val: false,
          logic: "and"
      }, function (obj) {
          Sonnenschutz_aus();
      });
      
      on({
          id: "javascript.0.Beschattung.Jalousien.Hitzeschutz",
          change: "ne",
          val: true,
          logic: "and"
      }, function (obj) {
          Sonnenschutz_aus();
      });
      
      function Sonnenschutz_aus() {
      
          toLog("Der Sonnenschutz global wurde deaktiviert",true);
      }
      
      

      Das sind z.B. drei Scripte die zusammen arbeiten.

      Durch Sonne Elevation wird getriggert , Sonnenschutz nach Kriterien prüfen , Sonnenschutz im Badezimmer ausführen.

      Hoffe es ist verständlich.

      Gruß Sebastian

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

        createState('Sonnenstand.Elevation', 0, {unit: '°'});
        

        hat den Datenpunkt in der Instanz "javascript.0" angelegt ?

        error   hm-rpc.0.LEQ1174762.1.STATE [object Object] Cannot read property 'push' of undefined
        

        Der Datenpunkt "hm-rpc.0.LEQ1174762.1.STATE" taucht in den Skripten nicht auf. Woher kommt eine property 'push' ?

        Schau Dir im Reiter "Objekte" die Eigenschaften des betreffenden Datenpunktes an.

        Ersetze bitte

            setState("javascript.0.Sonnenstand.Elevation",h.toFixed(1));
            setState("javascript.0.Sonnenstand.Azimut",a.toFixed());
        
        

        durch

            setState("javascript.0.Sonnenstand.Elevation", Math.round(10 * h) / 10);
            setState("javascript.0.Sonnenstand.Azimut", Math.round(a));
        
        
        1 Reply Last reply Reply Quote 0
        • W
          webseb79 last edited by

          Hallo paul53,

          der Datenpunkt wurde angelegt.

          Habe deinen Vorschlag im Script geändert.

          Der Datenpunkt "hm-rpc.0.LEQ1174762.1.STATE" ist vorhanden…hat sich gerade dazwichen gedrängelt...kommt in einem anderen Script vor.

          Der Fehler ist wieder aufgetreten.

          Die Sonnenstandsberechnung funktioniert ja...aber als Trigger in anderen Scripten kommt es dann zum Fehler

          javascript.0	2016-06-22 17:39:00.643	error	TypeError: Cannot read property 'split' of undefined at toLog (script.js.Veranda.Jalousie_G_Sonnenschutz:143:18) at Sonnenschutz_ausfuehren (script.js.Veranda.Jalousie_G_Sonnenschutz:244:21)
          javascript.0	2016-06-22 17:39:00.643	error	message javascript.0.Sonnenstand.Elevation [object Object] Cannot read property 'split' of undefined
          

          Z.B im Logdatenscript kommt das Wort 'split' ja vor.

          createState('Logdatenerstellung.Log', '');
          
          function getTimeAsString(d) {
              var date = d || new Date();
              return date.getFullYear() + '.' + ('0' + (date.getMonth() + 1)).slice(-2) + '.' + ('0' + date.getDate()).slice(-2) + '  ---   '+
           ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2) + ':' +  ('0' + date.getSeconds()).slice(-2);    
          }
          function toLog(text, addTimestamp) 
          {
              console.log(text);
              var lines = getState('Logdatenerstellung.Log').val;
              lines = lines.split('
          ');
              if (addTimestamp) {
                      lines.push(getTimeAsString() + '  ---  ' + text);
              } else {
                      lines.push(text);
              }
              if (lines.length > 33) lines.splice(0,1);
              setState('Logdatenerstellung.Log', lines.join('
          '), true);
          }
          

          Kann da der Fehler sein?

          Sebastian

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

            @webseb79:

            Kann da der Fehler sein? `
            Ja. Mit

                setState('Logdatenerstellung.Log', lines.join('
            '), true);
            

            soll ein Array in einen Datenpunkt geschrieben werden, was nicht funktioniert. Das Array müsste erst in einen String gewandelt werden.

                var lines = getState('Logdatenerstellung.Log').val;
                lines = lines.split('
            ');
            

            erwartet einen String im Datenpunkt und macht daraus ein Array. Da aber kein String geschrieben wurde, kann split nicht funktionieren.

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

              Muss mich korrigieren:

              lines.join('
              ')
              

              macht aus dem Array einen String mit Zeilentrenner.

              Vielleicht muss man den Datenpunkt 'Logdatenerstellung.Log' erst einmal mit einem einfachen String initialisieren ?

              Wie sieht der Datenpunkt (Wert) jetzt aus ?

              1 Reply Last reply Reply Quote 0
              • W
                webseb79 last edited by

                Also ganz kann ich dir leider nicht mehr folgen in Punkto String und Array…bin gerade dabei mich zu belesen.

                Unter Zustande steht kein Wert geschrieben.

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

                  @webseb79:

                  Unter Zustande steht kein Wert geschrieben. `
                  Dann gib mal einen kurzen Text ein, z.B. startlog.

                  1 Reply Last reply Reply Quote 0
                  • W
                    webseb79 last edited by

                    Habe das Script für Logdatenerfassung erstmal gestoppt und in alle anderen Scripten das "toLog" auskommentiert.

                    Jetzt funktioniert z.B meine Beschattung wieder.

                    Wo soll ich startlog eingeben?

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

                      @webseb79:

                      Wo soll ich startlog eingeben? `
                      Im Reiter Zustände auf den Datenpunkt 'Logdatenerstellung.Log' doppelklicken und im Feld Wert den Text eingeben.

                      1 Reply Last reply Reply Quote 0
                      • W
                        webseb79 last edited by

                        Schlechte Nachricht…

                        Jetzt ist mein System komplett abgeschmiert....werde erstmal wieder zurück auf Raspi umstellen und mein Backup auf den Cubox einspielen.

                        Probiere dann dein Eintrag unter Zustände.

                        Wird ein weilchen dauern , würde mich morgen mit meinen Ergebnissen melden.

                        Danke erstmal paul53 für deine Hilfe.

                        Schönen Abend

                        Sebastian

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        987
                        Online

                        31.7k
                        Users

                        79.7k
                        Topics

                        1.3m
                        Posts

                        3
                        13
                        2111
                        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