Skip to content
  • 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
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [Vorlage] Anwesenheitssimulation - Script

NEWS

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

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

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

[Vorlage] Anwesenheitssimulation - Script

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
271 Beiträge 40 Kommentatoren 64.7k Aufrufe 36 Watching
  • Ä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.
  • P Offline
    P Offline
    pix
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    0
    • L Offline
      L Offline
      looxer01
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      0
      • V Offline
        V Offline
        versteckt
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        0
        • L Offline
          L Offline
          looxer01
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          0
          • V Offline
            V Offline
            versteckt
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            0
            • L Offline
              L Offline
              looxer01
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              0
              • L Offline
                L Offline
                looxer01
                schrieb am zuletzt editiert von
                #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 Antwort Letzte Antwort
                0
                • L Offline
                  L Offline
                  looxer01
                  schrieb am zuletzt editiert von
                  #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 Antwort Letzte Antwort
                  0
                  • L Offline
                    L Offline
                    looxer01
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    0
                    • L Offline
                      L Offline
                      looxer01
                      schrieb am zuletzt editiert von
                      #21

                      Liebe Leutz,

                      Version 0.33 ist hochgeladen.

                      Die Hauptfunktionen sollten jetzt relativ stabil sein.

                      Ich habe mal Beispiele im ersten post eingestellt, um zu zeigen wie man mit den Einstellungen spielen kann

                      Die Logs sind noch nicht so klasse. Da muss ich nochmal ran.

                      Funktional will ich es erstmal belassen und sehen, dass ggf Fehler beseitigt werden.

                      vG und guten Rutsch.

                      Looxer

                      1 Antwort Letzte Antwort
                      0
                      • L Offline
                        L Offline
                        looxer01
                        schrieb am zuletzt editiert von
                        #22

                        Gutes Neues….

                        es gibt jetzt die Version 0.40.

                        Ich habe das Log deutlich aufgeräumt. Sehr schön zu sehen ist im Log jetzt welche berechneten Ein-und Ausschaltzeiten zu Grunde gelegt werden.

                        Das externe Log laesst sich auf dem PC mit Excel oeffnen. Eine Sortierung nach Gruppen zeigt sehr deutlich die Ein und Ausschaltzeiten je Gruppe, so dass alles nachvollziebar ist.

                        Sieht auch alles gut aus und scheint zu funktionieren.

                        Falls es jemand bereits mal laufen lassen hat, bitte das externe LOG einmal loeschen. Es wird dann ein Header mit eingefügt.

                        Das macht das Lesen in Excel leichter.

                        Jetzt hoffe ich, dass es jemand mal testet und feedback gibt.

                        vG

                        1 Antwort Letzte Antwort
                        0
                        • sissiwupS Offline
                          sissiwupS Offline
                          sissiwup
                          schrieb am zuletzt editiert von
                          #23

                          Wo finde ich denn das Skript?

                          MfG

                          Sissi

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

                          1 CCU3 1 CCU2-Gateway 1 LanGateway 1 Pi-Gateway 1 I7 für ioBroker/MySQL


                          1 Antwort Letzte Antwort
                          0
                          • L Offline
                            L Offline
                            looxer01
                            schrieb am zuletzt editiert von
                            #24

                            im ersten post. ist ein spoiler tag - einfach öffnen.

                            vG Looxer

                            1 Antwort Letzte Antwort
                            0
                            • S Offline
                              S Offline
                              starfish
                              schrieb am zuletzt editiert von
                              #25

                              hier gabs etwas roten Text im Log - hab das orig.script nur an meine Gegebenheiten angepasst (nur 1 Aktor aufm Testrechner)

                              ! javascript.0 2016-01-02 02:15:37 info javascript.0 script.js.aws: registered 2 subscriptions and 7 schedules
                              ! javascript.0 2016-01-02 02:15:37 info javascript.0 Start javascript script.js.aws
                              ! javascript.0 2016-01-02 02:15:37 info javascript.0 received all objects
                              ! javascript.0 2016-01-02 02:15:37 info javascript.0 received all states
                              ! javascript.0 2016-01-02 02:15:36 info javascript.0 requesting all objects
                              ! javascript.0 2016-01-02 02:15:36 info javascript.0 requesting all states
                              ! javascript.0 2016-01-02 02:15:36 info javascript.0 starting. Version 1.1.1 in /opt/iobroker/node_modules/iobroker.javascript
                              ! bananapi2 2016-01-02 02:15:30 info host.bananapi2 instance system.adapter.javascript.0 started with pid 2374
                              ! bananapi2 2016-01-02 02:15:00 info host.bananapi2 Restart adapter system.adapter.javascript.0 because enabled
                              ! bananapi2 2016-01-02 02:15:00 error host.bananapi2 instance system.adapter.javascript.0 terminated with code 6 (uncaught exception)
                              ! javascript.0 2016-01-02 02:15:00 error ReferenceError: addTime is not defined at isTimeInRange (script.js.aws:487:17) at Object. (script.js.aws:149:8) at Job.job (/opt/iobroker/node_modules/iobroker.javascript/javasc
                              ! javascript.0 2016-01-02 02:15:00 error uncaught exception: addTime is not defined

                              etwas später:

                              ! host-bananapi2 2016-01-02 02:25:01 error instance system.adapter.javascript.0 terminated with code 6 (uncaught exception)
                              ! ReferenceError: 2016-01-02 02:25:01 error at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
                              ! ReferenceError: 2016-01-02 02:25:01 error at null._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:410:11)
                              ! ReferenceError: 2016-01-02 02:25:01 error at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:139:10)
                              ! ReferenceError: 2016-01-02 02:25:01 error at Job.job (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:1197:34)
                              ! ReferenceError: 2016-01-02 02:25:01 error at Object. (script.js.aws:214:8)
                              ! ReferenceError: 2016-01-02 02:25:01 error at isTimeInRange (script.js.aws:487:17)
                              ! ReferenceError: 2016-01-02 02:25:01 error addTime is not defined
                              ! uncaught 2016-01-02 02:25:01 error exception: addTime is not defined

                              1 Antwort Letzte Antwort
                              0
                              • blauholstenB Offline
                                blauholstenB Offline
                                blauholsten
                                Developer
                                schrieb am zuletzt editiert von
                                #26

                                @starfish:

                                hier gabs etwas roten Text im Log

                                ! javascript.0 2016-01-02 02:15:37 info javascript.0 script.js.aws: registered 2 subscriptions and 7 schedules
                                ! javascript.0 2016-01-02 02:15:37 info javascript.0 Start javascript script.js.aws
                                ! javascript.0 2016-01-02 02:15:37 info javascript.0 received all objects
                                ! javascript.0 2016-01-02 02:15:37 info javascript.0 received all states
                                ! javascript.0 2016-01-02 02:15:36 info javascript.0 requesting all objects
                                ! javascript.0 2016-01-02 02:15:36 info javascript.0 requesting all states
                                ! javascript.0 2016-01-02 02:15:36 info javascript.0 starting. Version 1.1.1 in /opt/iobroker/node_modules/iobroker.javascript
                                ! bananapi2 2016-01-02 02:15:30 info host.bananapi2 instance system.adapter.javascript.0 started with pid 2374
                                ! bananapi2 2016-01-02 02:15:00 info host.bananapi2 Restart adapter system.adapter.javascript.0 because enabled
                                ! bananapi2 2016-01-02 02:15:00 error host.bananapi2 instance system.adapter.javascript.0 terminated with code 6 (uncaught exception)
                                ! javascript.0 2016-01-02 02:15:00 error ReferenceError: addTime is not defined at isTimeInRange (script.js.aws:487:17) at Object. (script.js.aws:149:8) at Job.job (/opt/iobroker/node_modules/iobroker.javascript/javasc
                                ! javascript.0 2016-01-02 02:15:00 error uncaught exception: addTime is not defined `
                                So wie es aussieht hast du das globale script timeinrange nicht.

                                Das musst du vorher anlegen, sonst geht es nicht.

                                Entwickler vom: - Viessman Adapter
                                - Alarm Adapter

                                1 Antwort Letzte Antwort
                                0
                                • L Offline
                                  L Offline
                                  looxer01
                                  schrieb am zuletzt editiert von
                                  #27

                                  Hi,

                                  ich habe die Funktionen von Baetz jetzt dem Main-Program hinzugefuegt.

                                  Damit ist kein globales Script mehr notwendig.

                                  Ich werde spaeter noch den Link zu Baetz Beitrag hinzufuegen.

                                  Version ist jetzt 0.41

                                  habs aber noch nicht getestet :oops:

                                  vG Looxer

                                  1 Antwort Letzte Antwort
                                  0
                                  • S Offline
                                    S Offline
                                    starfish
                                    schrieb am zuletzt editiert von
                                    #28

                                    danke, errors gibts keine mehr und im aws-log tut sich was. zu "baetz" schweigt sich das Forum und auch Google aus (zu TimeInRange ebenfalls).

                                    1 Antwort Letzte Antwort
                                    0
                                    • L Offline
                                      L Offline
                                      looxer01
                                      schrieb am zuletzt editiert von
                                      #29

                                      Forumsmitglied Beatz

                                      http://forum.iobroker.com/viewtopic.php … a40#p11167

                                      vG

                                      1 Antwort Letzte Antwort
                                      0
                                      • L Offline
                                        L Offline
                                        looxer01
                                        schrieb am zuletzt editiert von
                                        #30

                                        Hi,

                                        Beim Testen sind mir zwei unschöne Fehler aufgefallen

                                        1. Das letzte eingetragene Geraet wurde nie per Zufall gewaehlt.

                                        2. Ein Log Fehler "keine Aktion…." auch wenn geschaltet wurde

                                        Version 0.42 hochgeladen

                                        vG Looxer

                                        1 Antwort Letzte Antwort
                                        0
                                        • L Offline
                                          L Offline
                                          looxer01
                                          schrieb am zuletzt editiert von
                                          #31

                                          Hi,

                                          ich habe Version 0.43 hochgeladen mit ein paar Aenderungen am Code.

                                          • Bereinigungen und Dokumentation

                                          • Ausschalten der Geraete bei Deaktivierung der AWS

                                          Folgendes ist noch zu tun

                                          • Ausschalten der Geraete bei Deaktivierung der AWS optional machen oder einen intelligenteren Ansatz finden

                                          • Wenn ein nicht existentes Geraet in den Einstellungen angegeben wird, dann startet der javascript adapter mal eben neu.

                                          Das werde ich abstellen mit dem Ziel, dass nur ein Logeintrag erzeugt wird

                                          Fuer die Zukunft.

                                          Falls das Konzept ok ist wuerde ich die Einstellungen ggf als Profile erweitern. So koennte man z.B. fuer jeden Wochentag ein anderes Profil einstellen koennen ggf auch nach Jahreszeit unterscheiden.

                                          vG Looxer

                                          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

                                          594

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe