Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Vorlage] Anwesenheitssimulation - Script

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Vorlage] Anwesenheitssimulation - Script

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

      Hallo looxer,

      habe den geänderten Code gerade eingefügt.

      Muß aber wohl bis morgen warten ,bis ich erste Ergebnisse habe.

      Schöne Grüße

      1 Reply Last reply Reply Quote 0
      • M
        Mihaeru last edited by

        Hi looxer01,

        die neue Funktion sieht gut aus - bis auf ein bestimmtes Szenario.

        Ich habe wieder mit VsCode simuliert - dabei mit fixen Astro Zeiten - aber eigentlich sollte das einigermaßen realistisch sein.

        Nehmen wir an, wir haben 08:30 und sunriseEnd ist um 09:00 Uhr. Wenn ich jetzt eine Schaltung hätte, die ab z.B. 20:20:00 bis Sonnenaufgang laufen soll, wären die Parameter zum Beispiel so:

        isTimeInAstroRange2("20:20:00", "09:45:00", false, true)
        

        Die jetzige Funktion würde false liefern, da die upperTime (die ja dann die Astro Zeit ist) einen Offset von einem Tag bekommt.

        Wo lag das Problem in meinem ursprünglichen Vorschlag? Vielleicht kann man das anders lösen.

        Oder man müsste eventuell in deiner Funktion noch unterscheiden, ob beim switchOffNextDay die aktuelle Zeit größer als die lower ist und nur dann die upper einen Tag weiter setzen und wenn nicht, die lower einen Tag zurück.

        Viele Grüße

        Mihaeru

        1 Reply Last reply Reply Quote 0
        • L
          looxer01 last edited by

          @Mihaeru:

          die neue Funktion sieht gut aus - bis auf ein bestimmtes Szenario.

          Ich habe wieder mit VsCode simuliert - dabei mit fixen Astro Zeiten - aber eigentlich sollte das einigermaßen realistisch sein.

          Nehmen wir an, wir haben 08:30 und sunriseEnd ist um 09:00 Uhr. Wenn ich jetzt eine Schaltung hätte, die ab z.B. 20:20:00 bis Sonnenaufgang laufen soll, wären die Parameter zum Beispiel so: isTimeInAstroRange2("20:20:00", "09:45:00", false, true) `

          Hi,

          ja, ich glaube das stimmt. Die Lösung wäre aber die gleiche. 09:45 wäre auf den nächsten Tag zu legen.

          baue ich noch ein. Hatte eh noch einen anderen Fehler gefunden.

          Am Besten wäre es, wenn bei Astro immer eine Dauer mit eingegeben würde. Das ist aber bei den Einstellungen eher verwirrend.

          Ich mache diese Änderung noch.

          vG Looxer

          1 Reply Last reply Reply Quote 0
          • L
            looxer01 last edited by

            Habs jetzt mal eingebaut - ist aber ungetestet

            ! //----------------------------------------------------------------------------------------------------- // Funktion isTimeInAstroRange - // Ermittlung ob die aktuelle Zeit in der vorgegebenen Schaltzeit liegt (inkl Astro) //----------------------------------------------------------------------------------------------------- ! function isTimeInAstroRange (zeitvon, zeitbis, astrovon, astrobis) { var now = new Date(); var sunriseEnd = getAstroDate("sunriseEnd"); // Ende der Nacht nach Astro var sunsetStart = getAstroDate("sunsetStart"); // Ende des Tages nach Astro var lower = addTime(zeitvon); // switch on time im berechenbaren Format var upper = addTime(zeitbis); // switch off time im berechenbaren Format ! if (astrovon === true) { // Astrozeit gesetzt lower = sunsetStart; } if (astrobis === true) { // Astrozeit gesetzt upper = sunriseEnd; } if (upper < lower) { // Die von Zeit ist groesser als die bis Zeit if(astrovon) { // im Falle von Astrovon kann es sein, dass die bis Zeit in den nächsten Tag geht if( (zeitbis.slice(0, 1) ) === "0" ) { // Uewberpruefen ob die BisZeit mit 0 beginng - dann annehmen, dass das Morgen ist upper.setDate(upper.getDate() + 1); // 1 Tag (24 Stunden ) addieren da der bis Wert wahrscheinlich am nächsten Tag liegen muss if (debug) { log("Routine isTimeInAstroRange - bei Astrovon die zeitbis started Morgen","info");} } } if(astrobis) { upper.setDate(upper.getDate() + 1); if (debug) { log("Routine isTimeInAstroRange - AstroBis started Morgen","info");} } if (!astrovon && !astrobis) { // wenn keine Astrozeit gesetzt ist und die bis Zeit kleiner ist --> nächster Tag für die BisZeit upper.setDate(upper.getDate() + 1); // 1 Tag (24 Stunden ) addieren da der bis Wert wahrscheinlich am nächsten Tag liegen muss } ! } if (debug) { log("Routine isTimeInAstroRange lower " + lower,"info");} if (debug) { log("Routine isTimeInAstroRange upper " + upper,"info");} if (upper < lower ) { // dies trifft zu wenn die astrozeit die realzeit eingeholt hat z.B. astrovon = 20:00 und bisZeit 19:00 if (debug) { log("upper ist kleiner als lower - zurück Gruppe nicht im Zeitrange false","info");} return false; } if( now >= lower && now <= upper ) { if (debug) { log("Routine isTimeInAstroRange - aktuelle ist ist > als lower und kleiner als upper - Gruppe wird geschaltet (true)","info");} return true; } if (debug) {log("Routine isTimeInAstroRange - Zeit nicht im Zeitrange - keine Schaltung ","info");} return false; ! } !

            1 Reply Last reply Reply Quote 0
            • L
              looxer01 last edited by

              Hi,

              ich habe die Routinen zur Berechnung der Zeiten nun komplett umgestellt.

              Darüberhinaus auch die Eingaben für Astrozeiten in die Von und Bis Zeiten Integriert

              was jetzt möglich ist:

              var zeit1von = "SunRise"; //Aktivzeit von IDGruppe1

              var zeit1bis = "11:50:00"; //Aktivzeit bis IDGruppe1

              var zeit2von = "SunRise"; //Aktivzeit von IDGruppe2 // war vorher nicht möglich

              var zeit2bis = "SunSet"; //Aktivzeit bis IDGruppe2

              var zeit3von = "23:30:00"; //Aktivzeit von IDGruppe3 // läuft ohne Unterbrechung

              var zeit3bis = "23:30:00"; //Aktivzeit bis IDGruppe3

              var zeit4von = "SunSet"; //Aktivzeit von IDGruppe4

              var zeit4bis = "SunRise"; //Aktivzeit bis IDGruppe4

              var zeit5von = "SunSet"; //Aktivzeit von IDGruppe5

              var zeit5bis = "14:00:00"; //Aktivzeit bis IDGruppe5

              Dabei gibt es auch neue Einstellungen, die die Schwellenzeiten beeinflussen.

              Schwellenzeiten sind die Zeiten, die bei einer Einstellung bewirken, dass ggf die von und oder bis zeit auf den nächsten Tag gelegt werden

              Beispiel:

              Jetzt ist Sonntag Morgen 09:00 Uhr (Schwellenzeit ist die spätesten Stunde des Sonnenaufgangs = 08:00 Uhr)

              Wenn es einen Eintrag gibt der so aussieht

              von: SunRise

              bis 15:00

              Bei dieser Konstellation wird der nächste SunRise berechnet und der liegt am Montag

              und die BIS Zeit ebenfalls am Montag

              Damit liegen die Regeln fest.

              Ausserdem führe ich eine interne Tabelle, die die berechneten Von und Bis Zeiten enthält.

              Damit kann auch in den nächsten Tag geplant werden. Bei abgelaufenen Eintrag wird dann eine Neuberechnung vorgenommen.

              Das Konzept vorher hatte an diesen Stellen Lücken. Jetzt sollte zumindest konzeptionell alles laufen.

              Falls dann doch noch ein Fehler auftaucht kann der innerhalb des Konzeptes korrigiert werden.

              EDIT: Version 0.94 ist jetzt online.

              vG Looxer

              1 Reply Last reply Reply Quote 0
              • B
                Beowolf last edited by

                Hallo zusammen,

                ich habe hier ein paar Sonoff Basics (mit Tasmota) an ein paar Lampen.

                Ist der Eintrag in dem Einstellungsberich so richtig?

                Es tut sich leider nichts.

                var     IDGruppe11 = "sonoff.0.Deckenleuchte Eingang.POWER";  // Licht Wohnzimmer
                

                Grüße

                Manfred

                1 Reply Last reply Reply Quote 0
                • S
                  skorpil last edited by

                  looxer01, ich habe das Script heute mal installiert und wollte nur mal sagen: großartig. Danke für die tolle Arbeit!

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

                    Auch danke.. Weiß wieviel Arbeit da drin steckt… Probiere die neue Version auch mal aus... Die alte lief fuer meine Erfordernisse schon gut...

                    Gesendet von meinem CLT-L09 mit Tapatalk

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

                      Hatte auch mal sonoff drinnen… Glaube das . Power macht Probleme... Hab dann die homematic rein genommen... Kleines hilfsscript könnte helfen mit . STATE am Ende welches die sonoff triggert...vlt geht's aber auch so mittlerweile

                      Gesendet von meinem CLT-L09 mit Tapatalk

                      1 Reply Last reply Reply Quote 0
                      • L
                        looxer01 last edited by

                        @Beowolf:

                        st der Eintrag in dem Einstellungsberich so richtig?

                        Es tut sich leider nichts. `
                        @smartboart:

                        Glaube das . Power macht Probleme. `

                        Hi,

                        Die Schaltung funktioniert entweder mit true oder false oder 0 und einen Werte zwischen 1 und 100 (Level Geräte)

                        versuche mal in den objekten manuell mit true oder false zu schalten - funktioniert das ?

                        vG looxer

                        1 Reply Last reply Reply Quote 0
                        • I
                          ib968142 last edited by

                          Die neue Script-Version teste ich demnächst auch bei mir. Eine Frage / Wunsch hätte ich vielleicht noch.

                          Ich nutze aktuell das AstroDate "goldenHourEnd" (habe ich manuell im alten Script überschrieben).

                          Könnte man eventuell noch das Script oder die KeyWord-Liste für die AstroZeit-Angaben erweitern, so dass abhängig vom SunUp/SunDown Keyword-String eine andere getAstroDate(…) Funktion genutzt wird? Vielleicht könnte man auch einfach den eingetragenen Time-String in der getAstroDate-Funktionen verwenden, dann wäre man komplett flexibel.

                          1 Reply Last reply Reply Quote 0
                          • L
                            looxer01 last edited by

                            @ib968142:

                            Könnte man eventuell noch das Script oder die KeyWord-Liste für die AstroZeit-Angaben erweitern, so dass abhängig vom SunUp/SunDown Keyword-String eine andere getAstroDate(…) Funktion genutzt wird? Vielleicht könnte man auch einfach den eingetragenen Time-String in der getAstroDate-Funktionen verwenden, dann wäre man komplett flexibel. `
                            Hi,

                            gute Idee.

                            Diese Liste kann dann als Doku verwendet werden.

                            ! sunrise": sunrise (top edge of the sun appears on the horizon) "sunriseEnd": sunrise ends (bottom edge of the sun touches the horizon) "goldenHourEnd": morning golden hour (soft light, best time for photography) ends "solarNoon": solar noon (sun is in the highest position) "goldenHour": evening golden hour starts "sunsetStart": sunset starts (bottom edge of the sun touches the horizon) "sunset": sunset (sun disappears below the horizon, evening civil twilight starts) "dusk": dusk (evening nautical twilight starts) "nauticalDusk": nautical dusk (evening astronomical twilight starts) "night": night starts (dark enough for astronomical observations) "nightEnd": night ends (morning astronomical twilight starts) "nauticalDawn": nautical dawn (morning nautical twilight starts) "dawn": dawn (morning nautical twilight ends, morning civil twilight starts) "nadir": nadir (darkest moment of the night, sun is in the lowest position) !
                            Sollte sich schnell umsetzen lassen.

                            Hättest du etwas Zeit um ein paar Kombinationen zu testen ?

                            vG Looxer

                            1 Reply Last reply Reply Quote 0
                            • B
                              Beowolf last edited by

                              @looxer01:

                              @Beowolf:

                              st der Eintrag in dem Einstellungsberich so richtig?

                              Es tut sich leider nichts. `
                              @smartboart:

                              Glaube das . Power macht Probleme. `

                              Hi,

                              Die Schaltung funktioniert entweder mit true oder false oder 0 und einen Werte zwischen 1 und 100 (Level Geräte)

                              versuche mal in den objekten manuell mit true oder false zu schalten - funktioniert das ?

                              vG looxer `

                              Jepp, geht.

                              Ich kann entweder true oder false per Tastatur eingeben, oder das "Häckchen" rein oder raus. Es wird jedesmal geschaltet.

                              Grüße

                              1 Reply Last reply Reply Quote 0
                              • L
                                looxer01 last edited by

                                @Beowolf:

                                Ich kann entweder true oder false per Tastatur eingeben, oder das "Häckchen" rein oder raus. Es wird jedesmal geschaltet. `
                                kannst du mal die Datenpunkt definition aus dem Datenpunkt "…POWER"" posten ?.

                                Die findest du rechts auf dem Änderungssymbol und dann der RAW Tab.

                                vG Looxer

                                1 Reply Last reply Reply Quote 0
                                • I
                                  ib968142 last edited by

                                  @looxer01:

                                  @ib968142:

                                  Könnte man eventuell noch das Script oder die KeyWord-Liste für die AstroZeit-Angaben erweitern, so dass abhängig vom SunUp/SunDown Keyword-String eine andere getAstroDate(…) Funktion genutzt wird? Vielleicht könnte man auch einfach den eingetragenen Time-String in der getAstroDate-Funktionen verwenden, dann wäre man komplett flexibel. `
                                  Hi,

                                  gute Idee.

                                  Diese Liste kann dann als Doku verwendet werden.

                                  ! sunrise": sunrise (top edge of the sun appears on the horizon) "sunriseEnd": sunrise ends (bottom edge of the sun touches the horizon) "goldenHourEnd": morning golden hour (soft light, best time for photography) ends "solarNoon": solar noon (sun is in the highest position) "goldenHour": evening golden hour starts "sunsetStart": sunset starts (bottom edge of the sun touches the horizon) "sunset": sunset (sun disappears below the horizon, evening civil twilight starts) "dusk": dusk (evening nautical twilight starts) "nauticalDusk": nautical dusk (evening astronomical twilight starts) "night": night starts (dark enough for astronomical observations) "nightEnd": night ends (morning astronomical twilight starts) "nauticalDawn": nautical dawn (morning nautical twilight starts) "dawn": dawn (morning nautical twilight ends, morning civil twilight starts) "nadir": nadir (darkest moment of the night, sun is in the lowest position) !
                                  Sollte sich schnell umsetzen lassen.

                                  Hättest du etwas Zeit um ein paar Kombinationen zu testen ? `

                                  Teste ich dann gerne. Wie gesagt die "goldenHourEnd" nutze ich aktuell in einer älteren, manuell angepassten Version deines Scripts.

                                  Danke und Grüße

                                  1 Reply Last reply Reply Quote 0
                                  • B
                                    Beowolf last edited by

                                    @looxer01:

                                    @Beowolf:

                                    Ich kann entweder true oder false per Tastatur eingeben, oder das "Häckchen" rein oder raus. Es wird jedesmal geschaltet. `
                                    kannst du mal die Datenpunkt definition aus dem Datenpunkt "…POWER"" posten ?.

                                    Die findest du rechts auf dem Änderungssymbol und dann der RAW Tab.

                                    vG Looxer `

                                    Meinst du das?

                                    {
                                      "from": "system.adapter.sonoff.0",
                                      "ts": 1548597255406,
                                      "common": {
                                        "name": "Deckenleuchte Eingang POWER",
                                        "type": "boolean",
                                        "role": "switch",
                                        "read": true,
                                        "write": true,
                                        "storeMap": true
                                      },
                                      "native": {},
                                      "acl": {
                                        "object": 1636,
                                        "owner": "system.user.admin",
                                        "ownerGroup": "system.group.administrator",
                                        "state": 1636
                                      },
                                      "_id": "sonoff.0.Deckenleuchte Eingang.POWER",
                                      "type": "state"
                                    }
                                    
                                    1 Reply Last reply Reply Quote 0
                                    • E
                                      etproject last edited by

                                      Hallo,

                                      ich hatte irgendwo mal gelesen das der Objektname kein Leerzeichen enthalten darf.

                                      Schöne Grüße

                                      1 Reply Last reply Reply Quote 0
                                      • L
                                        looxer01 last edited by

                                        @etproject:

                                        ch hatte irgendwo mal gelesen das der Objektname kein Leerzeichen enthalten darf. `
                                        Kann das bei Sonoff beeinflusst werden ? Also kannst du den Namen ändern im Adapter z.B. oder an der Quelle (Sonoff)

                                        vG Looxer

                                        1 Reply Last reply Reply Quote 0
                                        • B
                                          Beowolf last edited by

                                          Ich habe jetzt mal einen neuen Sonoff Basic genommen.

                                          In der Tasmota Einstellung nennt sich das Ding nun "Testschalter"

                                          ` > {

                                          "from": "system.adapter.sonoff.0",

                                          "ts": 1548858428468,

                                          "common": {

                                          "name": "Testschalter POWER",

                                          "type": "boolean",

                                          "role": "switch",

                                          "read": true,

                                          "write": true,

                                          "storeMap": true

                                          },

                                          "native": {},

                                          "acl": {

                                          "object": 1636,

                                          "owner": "system.user.admin",

                                          "ownerGroup": "system.group.administrator",

                                          "state": 1636

                                          },

                                          "_id": "sonoff.0.Testschalter.POWER",

                                          "type": "state"

                                          } `

                                          So event. besser?

                                          ` > {

                                          "_id": "sonoff.0.Testschalter.POWER",

                                          "common": {

                                          "type": "boolean",

                                          "role": "switch",

                                          "read": true,

                                          "write": true,

                                          "storeMap": true,

                                          "name": "Testschalter-POWER"

                                          },

                                          "native": {},

                                          "type": "state",

                                          "from": "system.adapter.sonoff.0",

                                          "ts": 1548860090482,

                                          "acl": {

                                          "object": 1636,

                                          "state": 1636

                                          }

                                          } `

                                          Ich habe jetzt unter ioBroker in der Spalte "NAME" aus "Testschalter POWER" dieses mit Bindestrich gemacht "Testschalter-POWER".

                                          1 Reply Last reply Reply Quote 0
                                          • E
                                            etproject last edited by

                                            Hallo,

                                            der Name des Modules wird in Tasmota eingegeben.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            866
                                            Online

                                            31.6k
                                            Users

                                            79.6k
                                            Topics

                                            1.3m
                                            Posts

                                            40
                                            271
                                            51121
                                            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