Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [Vorlage] Anwesenheitssimulation - Script

NEWS

  • Wartung am 15.11. – Forum ab 22:00 Uhr nicht erreichbar
    BluefoxB
    Bluefox
    11
    2
    214

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

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

[Vorlage] Anwesenheitssimulation - Script

[Vorlage] Anwesenheitssimulation - Script

Scheduled Pinned Locked Moved Skripten / Logik
271 Posts 40 Posters 64.5k Views 36 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • L Offline
    L Offline
    looxer01
    wrote on last edited by looxer01
    #1

    Hallo Alle,

    aus aktuellem Anlass- Heimsuchung letzte Nacht von Unbekannten 😞 - fange ich an ein paar Sicherheitsmassnahmen umzusetzen.
    Die Ermittlung der zu schaltenden Geraete wird ueber eine Zufallszahl durchgeführt.
    Auch die Anschaltdauer und Einschaltverzoegerung wird über Zufallszahl geregelt.
    Der Ansatz ist folgender.

    • Es können beliebig viele Gruppen definiert werden für die jeweils andere Steuerungsdaten vorgebbar sind. (z.B. könnten Gruppen als Räume oder auch als Zeitabschnitte verstehbar sein z.B. Flur ab 22:00 Uhr, Wohnzimmer ab 20:15, Garten etc.)
    • Je Gruppe können folgende Vorgaben gemacht werden
    • Beliebig viele Geraete steuerbar
    • Geräte sind schaltbar für LEVEL und STATE - bei LEVEL wird immer von 0 und 100 ausgegangen
    • Zeitsteuerung: von - bis Uhrzeit - nur in dieser Zeit wird geschaltet - In den Zeiten kann auch ein gültiges Astro-Keyword verwendet werden. Also z.B. 20:00:00 als Zeit oder „sunset“ als Keyword
    • Zeitsteuerung: der Einchaltdauerbereich „von“ und „bis“ kann festgelegt werden. Die eigentliche Einschaltdauer wird per Zufallsgenerator für diesen Bereich ermittelt
    • Jobsteuerung :- Definition von Anzahl minuten für die die AWS aufgerufen wird. z.B. alle 30 Minuten
      Darüber hinaus kann über ein Flag die AWS ein oder ausgeschaltet werden. (wird automatisch angelegt)
      als Widget verwende ich ein HQ ON/OFF Widget, dass auf true/false toggeled
      305_anwesenheit.gif

    Des weiteren gibt es noch ein Extra Log das jede Aktion aufzeichnet. Das wird im CSV Format gemacht. So kann man die Datei auch mit Excel gut einlesen und verarbeiten. Das dient vor allem zur Optimierung der Einstellungen.
    Pfad und Name des Logs: /opt/iobroker/iobroker-data/AWSLog.csv
    Die Einstellungen müssen direkt im Script vorgenommen werden. Ist entsprechend mit Beispielen belegt für Gruppe1

    …...............................................................................................................................................

    hier mal Szenarios um zu zeigen was möglich ist


    1. In der Zeit von Dämmerung bis 20:15 ist viel Leben im Haus. Daher gehen die Lichter in verschiedenen Räumen an und aus.
    Gleichzeitig ist es im Wohnzimmer aber eher durchgehend beleuchtet
    Einstellungen Gruppe 1:
    Für Gruppe1 werden verschiedene IDs aus dem Haus zugeordnet, nicht jedoch Lampen aus dem Wohnzimmer
    IDGruppe11 bis IDGruppe15 - Einstellung der IDs
    Die zufällige Auswahl erfolgt durch eine Zufallsberechnung anhand der Anzahl der Gruppenmitglieder.
    Bei 5 Zeilen wird also jeweils eine zahl 1-5 ermittelt. Man kann z.B. auch eine Gruppe nicht belegen und so hin und wieder auch zufällig keine Schaltung zu haben.
    cron1 = 10 Minuten (alle 10 Minuten wird geprüft, ob eine Lampe eingeschaltet werden soll)
    StartDelay1 = 2 Minute (ist der maximale Delay - entspricht Abweichung von vollen Minuten)
    ein1von 5 ein1bis 10 (häufige an und aus Bewegungen)
    zeit1bis = "20:15:00"
    Gleichzeig werden in Gruppe2 z.B. zwei Lampen eingetragen und entsprechend justiert

    Einstellungen Gruppe 2
    cron2 = 30 Minuten (alle 30 Minuten wird geprüft, ob eine Lampe eingeschaltet werden soll)
    StartDelay2 = 2 Minute (ist der maximale Delay - entspricht abweichung von vollen Minuten)
    ein3von 20 ein3bis 35 (Wenig Bewegung im Wohnzimmer - überlappend mit dem Cron Job)
    Zeit2von „sunset“
    zeit2bis = "23:15:00"

    Die nächste Phase ist dann eher die Fernsehphase. (Gruppe 3 )

    Wohnzimmer ist durchgehend schwach beleuchtet.
    Von jetzt an bis in die Nacht geht unregelmaessig und fuer kurze Zeit das Licht im Flur und im Bad an
    Einstellungen Gruppe 3:
    GruppenIDs mit Lichter für Bad und Flur versehen (z.B 3 IDs)
    cron3 = 45 Minuten (alle 45 Minuten wird geprüft, ob eine Lampe eingeschaltet werden soll)
    StartDelay3 = 2 Minuten (ist der maximale Delay - entspricht abweichung von vollen Minuten)
    ein3von 2 ein3bis 10
    zeit3von = "21:00:00"
    zeit3bis = "03:00:00"


    noch ein Tipp:
    im Prinzip laesst sich mit dem Script alles schalten , da implizit auch eine Programmierschnittstelle enthalten ist
    somit laesst sich z.B. Musik einschalten, Sprachnachrichten aktivieren (z.B. Hundegebell ueber die Lautsprecher),
    Hue Lampen schalten, eben alles was irgendwie schaltbar ist

    Anlegen einer Variable die am Ende ein STATE enthaelt und Reaktion in einem eigenen Programm, wie z.B:

    createState('Anwesenheitssteuerung.Sonos.STATE',false);
    on({id: "Anwesenheitssteuerung.Sonos.STATE", val: true}, function(obj) {     }     // Event:  wenn Status gewechselt
    

    Durch Eintragen von: Anwesenheitssteuerung.Sonos.STATE in einer der IDs im Script
    laesst sich jetzt auf die Statusaenderung reagieren. z.B. einschalten der Musik oder eben ausschalten

    –-------------------------------------------------------------------------------------------------------------------------------------------------------

    Fuer diejenigen, die den Programmablauf verstehen wollen:

    Hauptablauf
    
       Initialisierung und Konfiguration
           Einstellungen wie Aktivzeiten, Einschaltdauer, Startverzögerung, Cron-Intervalle und zu steuernde Geräte pro Gruppe werden definiert.
           Experteneinstellungen wie Logging-Flags, Aktivierungs-ID, Pfad für das externe Log, etc. werden gesetzt.
           Falls Debugging aktiviert ist, wird eine Debug-Meldung ausgegeben.
    
       Konsistenzprüfung
           checkArrays(): Prüft, ob die Konfigurationen der Gruppen konsistent sind (gleiche Anzahl von Einträgen).
    
       Initialisieren der Schaltzeiten
           var SwitchTimes = []: Initialisiert ein Array, das alle aktuellen Schaltzeiten enthält.
    
       Astrozeiten Ausgeben
           Astrozeiten(): Gibt die aktuellen Astrozeiten aus, wenn Debugging aktiviert ist.
    
       Zustand Erstellen
           createStateAsync(): Legt den Zustand der Anwesenheitssteuerung an, falls noch nicht vorhanden.
    
       Initiales Schedule Erstellen
           if (getState(Config.IDAWSaktiv).val || !Config.CronOnlyIfAWStrue) { CreateSchedules(); }
           Wenn das Anwesenheitssteuerungs-Flag aktiv ist, werden die Schedules erstellt.
    
    Event-Handler
    
       AWS Aktivierungs-Handler
           on({ id: Config.IDAWSaktiv, val: true }, handleAWSAktivierung);
           Bei Aktivierung des AWS-Flags werden die Schedules erstellt und ein Aktivierungs-Log geschrieben.
    
       AWS Deaktivierungs-Handler
           on({ id: Config.IDAWSaktiv, val: false }, handleAWSDeaktivierung);
           Bei Deaktivierung des AWS-Flags werden die Schedules gelöscht, Geräte ausgeschaltet und ein Deaktivierungs-Log geschrieben.
    
    Funktionen
    
       executeSchedule(gruppe, index)
           Führt die notwendigen Schaltvorgänge für die angegebene Gruppe durch.
           Prüft, ob die aktuelle Zeit innerhalb der definierten Aktivzeiten liegt (IsTimeInRange).
           Wählt ein zufälliges Gerät und berechnet Einschaltverzögerung und -dauer.
           Führt die Schaltung durch (AWSSchaltung), falls das Gerät existiert und innerhalb des Zeitbereichs liegt.
    
       IsTimeInRange(zeitvon, zeitbis, Gruppe)
           Prüft, ob die aktuelle Zeit innerhalb der angegebenen Zeitbereiche (inkl. Astrozeiten) liegt.
           Gibt true zurück, wenn die aktuelle Zeit innerhalb des definierten Zeitbereichs liegt und aktualisiert die Schaltzeiten-Tabelle (UpdateSwitchTime).
    
       AWSSchaltung(id, einschaltdauer, verzoegerung, gruppe)
           Schaltet ein Gerät für eine bestimmte Dauer ein und nach Ablauf wieder aus.
           Loggt den Schaltvorgang und schreibt die Details in das Log-File (writelog).
    
       handleAWSDeaktivierung()
           Löscht die Schedules und schaltet alle teilnehmenden Geräte aus, wenn das AWS-Flag deaktiviert wird.
           Loggt die Deaktivierung und löscht alle geplanten Schaltvorgänge (clearStateDelayed).
    
       handleAWSAktivierung()
           Erstellt die Schedules, wenn das AWS-Flag aktiviert wird.
           Loggt die Aktivierung.
    
       zufall(min, max)
           Generiert eine zufällige Zahl zwischen min und max.
    
       GeraetExists(id)
           Prüft, ob ein Gerät existiert.
    
       writelog(string)
           Schreibt einen Logeintrag in das externe Log-File und das interne Log-System.
    
       listcheckSwitch()
           Listet die aktuellen Schaltzeiten auf.
    
       checkSwitchTime(Gruppe)
           Prüft, ob ein gültiger Eintrag innerhalb der Zeit für die angegebene Gruppe existiert.
    
       UpdateSwitchTime(Gruppe, VonZeit, BisZeit)
           Aktualisiert die Schaltzeiten-Tabelle für die angegebene Gruppe.
    
       addZero(i)
           Fügt führende Nullen für das Datumsformat hinzu.
    
       addTime(strTime)
           Wandelt eine Zeit im Format HH:MM:SS in ein berechenbares Datumsobjekt um.
    
       millisecToDate(millisec)
           Wandelt Millisekunden in ein Datum/Zeit-Format um.
    
       Astrozeiten()
           Listet die aktuellen Astrozeiten auf, wenn Debugging aktiviert ist.
    
       formatDate(date)
           Formatiert ein Datum für die Ausgabe der Astrozeiten.
    
    Zeitplan-Management
    
       CreateSchedules()
           Erstellt Zeitpläne für alle Gruppen basierend auf den definierten Cron-Intervallen und Aktivzeiten.
    
       DeleteSchedules()
           Löscht alle Zeitpläne, wenn das AWS-Flag deaktiviert wird.
    

    die AWS kann hier heruntergeladen werden:
    AWS_Vers1-30.txt

    S 1 Reply Last reply
    1
    • V Offline
      V Offline
      versteckt
      wrote on last edited by
      #2

      Hab es mir noch nicht durchgelesen, aber klingt vernünftig.

      Gesendet von meinem iPhone mit Tapatalk

      Raspi 1, Raspi 2, iobroker, Mac Mini: alles mit aktueller ioBroker Version

      homegear für Homematic und MAX!

      occ, zWave, rpi, hmm und homekit Entwickler

      1 Reply Last reply
      0
      • P Offline
        P Offline
        pix
        wrote on last edited by
        #3

        Super Idee, wollte ich auch schon lange mal machen. Top!

        Noch nicht genau angesehen, nur Tapatalk zur Hand. Freue mich deshalb immer über die Verwendung der Spoiler Tags im Forum 😉

        Gruß,

        Pix

        PS: Mechanische Einbruchsicherungen sind die wichtigsten!

        Gesendet von meinem iPhone mit Tapatalk

        ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

        1 Reply Last reply
        0
        • L Offline
          L Offline
          looxer01
          wrote on last edited by
          #4

          ok Pix - Wink mit dem Lattenzaun verstanden 😄 und entsprechend geändert.

          vG Looxer

          1 Reply Last reply
          0
          • P Offline
            P Offline
            pix
            wrote on last edited by
            #5

            Hallo Looxer,

            habs mir jetzt nochmal am Laptop angesehn. Wirklich gut. Ich würde zwar nie 5 Gruppen brauchen, aber so gibt es Spielraum. Log in einer Datei benötige ich auch nicht, da reicht mir ein Diagramm von flot oder so.

            Im Executeteil kannst du die drei Zeilen

            setTimeout(function (){ // setze die Zeit zum ausstellen
            setState(Gruppe11,false); // setze die Zeit zum ausstellen 
            }, y); // ausstellzeit
            ````abkürzen mit
            

            setStateDelayed(Gruppe11,false, y);

            Beim Schreiben fällt mir gerade ein: Was ist, wenn die AWS läuft, eine Ausschaltzeit ist eingestellt und ich komme nach Hause? Dann sollten die Delays/Timeouts gelöscht werden, sonst geht irgendwann unverhofft das Licht aus. Alternativ kann natürlich von Ausführung jedes SetState noch gefragt werden, ob aktiveflag noch true ist
            

            if (aktivflag) setState blabla

            aktivflag dann auch passend aktualisieren.
            
            Eine Kleinigkeit: Die Einschaltzeiten sind immer zur vollen Minute, oder? Jemand, der vor der Tür steht und kurz kontrolliert, ob das eine AWS ist oder "lebend" geschaltet wird, würde da beim 3\. Schaltvorgang (Ein oder Aus) schon auf eine AWS tippen. Nutze doch noch
            

            schedule({second: ["zufallszahl 0-59"]}

            
            Und danke für den Spoiler. Der kann aber auch trotzdem noch Code-Tags beinhalten. :)
            
            Gruß
            
            Pix

            ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

            L 1 Reply Last reply
            0
            • L Offline
              L Offline
              looxer01
              wrote on last edited by
              #6

              @pix:

              abs mir jetzt nochmal am Laptop angesehn. `
              super- Pix. Das ist super feedback was ich auch umsetzen werde.

              Folgendes schwebt mir vor:

              Feature/Gap

              • Löschen der TimeOuts wenn das Active Flag auf false gesetzt wird mit (muss noch checken ob das auch mit setStateDelayed geht)

              Das hatte ich glatt übersehen. Mache ich asap.

              function myStopFunction() {

              clearTimeout(myVar);

              Code Hygiene:

              setStateDelayed(Gruppe11,false, y); statt setTimeout

              @pix:

              ie Einschaltzeiten sind immer zur vollen Minute, oder? `
              das muss ich mir nochmal ansehen. Generell started der schedule zur vollen Minute.

              Bei 30 heisst das 30 Minuten nach der vollen Stunde und immer zur vollen Minute.

              Ich müsste also eine Einschaltverzögerung einbauen.

              darüber hinaus werde ich noch für die Startzeit die Option der Verwendung der Astrozeit je Gruppe hinzufügen.

              übrigens vermisse ich schmerzlich die Möglichkeit der indirekten Addressirung von Variablen. Das würde jede Menge Code sparen.

              oder habe ich da was übersehen ?

              vG Looxer

              1 Reply Last reply
              0
              • P Offline
                P Offline
                pix
                wrote on last edited by
                #7

                Was ist das? Indirekte Adressierung?

                Was kann das?

                Gesendet mit Tapatalk

                ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                1 Reply Last reply
                0
                • L Offline
                  L Offline
                  looxer01
                  wrote on last edited by
                  #8

                  @pix:

                  Was ist das? Indirekte Adressierung? `

                  da geht es darum, dass ich eine Variable mit einem Inhalt versehe und den Inhalt dieser Variable dann verwende in weiteren Funktionen

                  ungefähr so, wenn die indrekte Variable mit $ beginnen würde:

                  var gruppe11 = "hm-rpc.0.JEQ0xxxxx.1.STATE"; // dies ist die direkte variable

                  var $gruppenid = gruppe11; // dies ist die indirekte variable

                  setState($gruppenid ,true); // hier mache ich einen setstate für "hm-rpc.0.JEQ0xxxxx.1.STATE"

                  dann bräuchte ich nicht 5 codesegmente, da ja nur die Variablen unterschiedlich sind je segment.

                  vG Looxer

                  1 Reply Last reply
                  0
                  • V Offline
                    V Offline
                    versteckt
                    wrote on last edited by
                    #9

                    Variable variablen kann mann doch mit eval(…) berechnen.

                    Gesendet von meinem iPhone mit Tapatalk

                    Raspi 1, Raspi 2, iobroker, Mac Mini: alles mit aktueller ioBroker Version

                    homegear für Homematic und MAX!

                    occ, zWave, rpi, hmm und homekit Entwickler

                    1 Reply Last reply
                    0
                    • L Offline
                      L Offline
                      looxer01
                      wrote on last edited by
                      #10

                      @versteckt:

                      ariable variablen kann mann doch mit eval(…) berechnen. `
                      das sagst du so einfach - da bin ich als JS-beginner noch nicht drauf gekommen :lol:

                      es scheint in der Tat zu funktionieren, allerdings bekomme ich einen dezenten Hinweis vom editor "eval can be harmful."

                      aha - warum denn ?

                      fakt ist: damit lässt sich der code erheblich kürzen.

                      EDIT: das habe ich dazu gefunden:

                      The eval function is slow. If you're using it unecessarily, you're slowing down your program for no reason. One cause of this is the fact that the engine has to parse the argument as a complete new program

                      1 Reply Last reply
                      0
                      • V Offline
                        V Offline
                        versteckt
                        wrote on last edited by
                        #11

                        Sorry, war nicht so gemeint, hab es auch selten im Einsatz.

                        Musste es jetzt aber bei iobroker.rpi auch einsetzen.

                        Aber halt mit den "Einschränkungen"…

                        Gesendet von meinem iPhone mit Tapatalk
                        6696_bildschirmfoto_2018-11-26_um_20.35.52.png
                        6696_bildschirmfoto_2018-11-26_um_20.36.45.png

                        Raspi 1, Raspi 2, iobroker, Mac Mini: alles mit aktueller ioBroker Version

                        homegear für Homematic und MAX!

                        occ, zWave, rpi, hmm und homekit Entwickler

                        1 Reply Last reply
                        0
                        • P Offline
                          P Offline
                          pix
                          wrote on last edited by
                          #12

                          @looxer01:

                          da geht es darum, dass ich eine Variable mit einem Inhalt versehe und den Inhalt dieser Variable dann verwende in weiteren Funktionen

                          ungefähr so, wenn die indrekte Variable mit $ beginnen würde:

                          var gruppe11 = "hm-rpc.0.JEQ0xxxxx.1.STATE"; // dies ist die direkte variable

                          var $gruppenid = gruppe11; // dies ist die indirekte variable

                          setState($gruppenid ,true); // hier mache ich einen setstate für "hm-rpc.0.JEQ0xxxxx.1.STATE" `
                          Das war schon unter CCU.IO eins der ersten Dinge, die ich gelernt habe.

                          Dein Code:

                          var aktivflag = getState("javascript.0.Anwesenheitssteuerung.AWSAktiv").val;    // Lese Flag ob aktiv
                          ...
                          if  (getState("javascript.0.Anwesenheitssteuerung.AWSAktiv").val === true) { 
                          
                          

                          Besser gehts so:

                          ganz oben werden die id-Variablen definiert und mit den Instanzen, Pfad und Namen gefüllt, die aus createState oder von den Adaptern kommen. Das mache ich einmal und kann das so bei Änderung eines Datenpunktes (also der Instanz oder des Pfades/Namens) schnell für das GANZE Skript ändern.

                          var idAktivFlag = "javascript.0.Anwesenheitssteuerung.AWSAktiv";
                          ...
                          var idGruppe11 = "hm-rpc.0.JEQ0xxxxxx.1.LEVEL";  // Licht Wohnzimmer Esstisch Deckenlampe
                          
                          ...
                          // Funktion, die zeitgesteuert aufgerufen wird, oder auf Änderung reagiert
                          on({id: idAktivFlag,
                          ...
                          }, function () {
                          
                          // in einer Schedulefunktion alle paar Minuten
                          var AktivFlag = getState(idAktivFlag).val;
                          if (AktivFlag) ... // wenn true dann ...
                          
                          

                          Also eigentlich schreibe ich das schon immer so (und andere im Forum hier auch).

                          Die Variable mit dem prefix "id" beinhaltet zB den String mit dem Adapter+Instanz+Kanal+State, dann wird dieser State mit getState(idVariablenname).val in eine weitere Variable ohne das prefix "id" eingelesen. Diese zweite Variable wird dann im ganzen Skript weiterverwendet.

                          Du machst das ja auch schon

                          if (Gruppe11.match('STATE')) {    // ist es ein STATE Geraet ?
                                 if  (getState(Gruppe11).val === false ) {  // nur wenn noch nicht eingeschaltet
                                    setState(Gruppe11,true) ;      // wenn state dann setze true = an
                          
                          

                          Das wär dann mit meiner Schreibweise:

                          var idGruppe11 = "hm-rpc.0.JEQ0xxxxxx.1.LEVEL";  // Licht Wohnzimmer Esstisch Deckenlampe;
                          
                          schedule(cron1job, function() {
                          var Gruppe11 = getState(idGruppe11).val; // wichtig, muss im schedule stehen, sonst nur Befüllung bei Skriptstart
                          var AktivFlag = getState(idAktivFlag).val;
                          if  (AktivFlag) {     // AWS aktiv ?
                              ...
                              ...
                              if (x === 1 && idGruppe11 != " ") {    // ist ein Geraet zugeordnet ?
                              if (idGruppe11.match('STATE')) {    // ist es ein STATE Geraet ?
                                 if  (!Gruppe11) {  // nur wenn noch nicht eingeschaltet
                                    setState(idGruppe11,true) ; 
                                    setStateDelay(idGruppe11,false, y);
                                 } else { logtext = "keine Aktion - Geraet war bereits eingeschaltet"    }    // Ende IF fuer Check ob bereits eingeschaltet
                                  } // Ende IF für STATE Geraete
                           ...
                           ...    
                          
                          ````Ich hoffe, das war verständlich :D
                          
                          Du kannst übrigens den Delay eines setStateDelay löschen, wenn du setStateDelay nochmal mit der gleichen ID aufrufst und ein true anhängst.
                          
                          [https://github.com/ioBroker/ioBroker.javascript#setstatedelayed](https://github.com/ioBroker/ioBroker.javascript#setstatedelayed) ist das ja in der Readme von Javascript andersherum erklärt:
                          
                          setStateDelayed('Kitchen.Light.Lamp', true,  1000);// Switch ON the light in the kitchen in one second
                          setStateDelayed('Kitchen.Light.Lamp', false, 5000, false, function () { // Switch OFF the light in the kitchen in 5 seconds and let first timeout run. 
                              log('Lamp is OFF');
                          });
                          
                          sek Aktion
                          
                          0 Tastendruck
                          
                          1 Licht geht an
                          
                          2
                          
                          3
                          
                          4
                          
                          5
                          
                          6 Licht geht aus
                          
                          Wenn du nun setStateDelayed('Kitchen.Light.Lamp', false, 5000, true); verwendest ist die Lampe schon bei 5 und ein paar Millisekunden Rechenzeit aus, da die Sekunde Delay vom EInschalten gekillt wird.
                          
                          Gruß
                          
                          Pix

                          ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                          1 Reply Last reply
                          0
                          • L Offline
                            L Offline
                            looxer01
                            wrote on last edited by
                            #13

                            so, Script ist umgearbeitet und jetzt auch wesentlich kürzer. Version ist 0.30

                            Das macht die Pflege ein Stück einfacher. Astro Funktion ist ebenfalls eingebaut und scheint zu funktionieren.

                            Demnächst gibt es noch ein paar Hygiene-Massnahmen alla Pix 😉

                            wäre schön, wenn jemand Testen und Feedback geben könnte.

                            vG Looxer

                            1 Reply Last reply
                            0
                            • V Offline
                              V Offline
                              versteckt
                              wrote on last edited by
                              #14

                              Mal so ein Gedankengang, falls noch nicht angedacht….

                              Ist es möglich die Scripte auch per Github zur Verfügung zu stellen?

                              Gesendet von meinem iPhone mit Tapatalk

                              Raspi 1, Raspi 2, iobroker, Mac Mini: alles mit aktueller ioBroker Version

                              homegear für Homematic und MAX!

                              occ, zWave, rpi, hmm und homekit Entwickler

                              1 Reply Last reply
                              0
                              • L Offline
                                L Offline
                                looxer01
                                wrote on last edited by
                                #15

                                @versteckt:

                                Ist es möglich die Scripte auch per Github zur Verfügung zu stellen? `
                                eine Installation aus Github heraus ist wohl nicht mögich - (gehe ich von aus)

                                in diesem Fall stellt sich wahrscheinlich die Sinn-Frage.

                                Der Vorteil wäre dann, dass jede Codeänderung sichtbar ist. Trotzdem eher overkill - oder ?

                                1 Reply Last reply
                                0
                                • V Offline
                                  V Offline
                                  versteckt
                                  wrote on last edited by
                                  #16

                                  Für mich ist eher die Frage, ob die Skripte für alle irgendwann gesammelt zur Verfügung stehen.

                                  Bin aber auch immer noch am überlegen, Jira zu aktivieren.

                                  Gesendet von meinem iPhone mit Tapatalk

                                  Raspi 1, Raspi 2, iobroker, Mac Mini: alles mit aktueller ioBroker Version

                                  homegear für Homematic und MAX!

                                  occ, zWave, rpi, hmm und homekit Entwickler

                                  1 Reply Last reply
                                  0
                                  • L Offline
                                    L Offline
                                    looxer01
                                    wrote on last edited by
                                    #17

                                    Homoran hat mal einen Download-Bereich für Scripte gepflegt.

                                    http://www.iobroker.net/docu/?page_id=57&lang=de

                                    allerdings halte ich es nicht für zielführend Scripte dort anzubieten wo sie nicht gepflegt werden, zumindest nicht,

                                    wenn sie recht häufig geändert werden. Da wären dann links besser. Aber kann man dort auch hinterlegen.

                                    Ich weiss nur nicht wer den Bereich jetzt pflegt.

                                    vG Looxer

                                    1 Reply Last reply
                                    0
                                    • L Offline
                                      L Offline
                                      looxer01
                                      wrote on last edited by
                                      #18

                                      ich habe jetzt Version 0.31 eingepflegt.

                                      Es gab noch Fehler bei den Gruppen drei und vier.

                                      Ich habe auch den Bereich Einstellungen bearbeitet

                                      • GruppeXX heisst jetzt IDGruppeXX

                                      • hinzugefügt habe ich die maximle Startverzoegerung in Minuten je Gruppe ( ist aber noch ohne Funktion)

                                      vG Looxer

                                      1 Reply Last reply
                                      0
                                      • L Offline
                                        L Offline
                                        looxer01
                                        wrote on last edited by
                                        #19

                                        ich habe gerade festgestellt, dass die timeout Funktion mit EVAL ein Problem hat.

                                        JS kann dann nicht parsen. uuuuh 😮

                                        d.h., das das Programm auf einen Fehler läuft beim Versuch den Verbraucher auszuschalten.

                                        Ich versuche es gleich mal mit delay wie von Pix vorgeschlagen.- vielleicht habe ich Glück damit.

                                        Ansonsten muss ich den EVALS wieder entfernen.

                                        Neue Version wahrscheinlich heute Abend, spätestens morgen.

                                        vG Looxer

                                        1 Reply Last reply
                                        0
                                        • L Offline
                                          L Offline
                                          looxer01
                                          wrote on last edited by
                                          #20

                                          so jetzt habe ich auf setstatedelayed umgestellt aber es geht trotzdem nicht.

                                          ich habe jetzt ein paar tests gemacht und einen unschönen Verdacht.

                                          folgenden Fehler bekomme ich im LOG:

                                          raspberrypi	2015-12-30 21:24:00	error	host.raspberrypi instance system.adapter.javascript.0 terminated with code 6 (uncaught exception)
                                          javascript.0	2015-12-30 21:24:00	error	SyntaxError: Unexpected token u at Object.parse (native) at sandbox.getObject (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:1381:33) at AWSSchaltung (script.js.Anwesenheitssimula
                                          javascript.0	2015-12-30 21:24:00	error	uncaught exception: Unexpected token u
                                          
                                          

                                          zum Ausprobieren habe ich mal die Variablen und das Coding für Gruppen 2-4 entfernt und dann funktioniert es, auch mit EVAL.

                                          Gibt es eine Begrenzung für Javascript bezüglich Groesse des Scripts bzw Variablen etc ?

                                          Für mich sieht es so aus. Dann stellt sich aber die nächste Frage: ist das nur bei mir so oder hängt das mit der Konfiguration zusammen ?

                                          Ich könnte die Anzahl der Gruppen reduzieren aber ist dann das Problem für alle anderen auch gelöst ?

                                          EDIT: nach Neustart von ioBroker scheint es zu gehen - muss ich beobachten

                                          Version 0.32 ist jetzt hochgeladen.

                                          vG L…

                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          50

                                          Online

                                          32.4k

                                          Users

                                          81.3k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe