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. Fehler in Scripte die schon funktionierten!!!

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.7k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.1k

Fehler in Scripte die schon funktionierten!!!

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
13 Beiträge 3 Kommentatoren 2.2k Aufrufe
  • Ä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.
  • W Offline
    W Offline
    webseb79
    schrieb am zuletzt editiert von
    #4

    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 Antwort Letzte Antwort
    0
    • paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #5
      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));
      
      

      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
      • W Offline
        W Offline
        webseb79
        schrieb am zuletzt editiert von
        #6

        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 Antwort Letzte Antwort
        0
        • paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #7

          @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.

          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
          • paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von
            #8

            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 ?

            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
            • W Offline
              W Offline
              webseb79
              schrieb am zuletzt editiert von
              #9

              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 Antwort Letzte Antwort
              0
              • paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von
                #10

                @webseb79:

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

                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
                • W Offline
                  W Offline
                  webseb79
                  schrieb am zuletzt editiert von
                  #11

                  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 Antwort Letzte Antwort
                  0
                  • paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von
                    #12

                    @webseb79:

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

                    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
                    • W Offline
                      W Offline
                      webseb79
                      schrieb am zuletzt editiert von
                      #13

                      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 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

                      357

                      Online

                      32.4k

                      Benutzer

                      81.5k

                      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