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.
    • paul53
      paul53 last edited by

      @webseb79:

      Bei Javascript habe ich noch suncalc , dewpoint , pi-controller installiert. `
      suncalc ist bereits mit dem Javascript-Adapter installiert und braucht (sollte) nicht nochmal installiert werden.

      1 Reply Last reply Reply Quote 0
      • 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

                          664
                          Online

                          31.7k
                          Users

                          79.7k
                          Topics

                          1.3m
                          Posts

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