Willkommen auf unserer neuen Forenplattform für das Bus-Profi Forum

Neue Felder für die persönlichen Daten
Man kann jetzt seine öffentlich einsehbare Daten genau bestimmen. Details findet ihr in in diesem Beitrag.

Durch die neue Forensoftware und die Portierung der Daten konnten die Passwörter aus dem alten Forum nicht übernommen werden, bitte lassen Sie sich ein neues Passwort über die Passwort vergessen Funktion zusenden. Sollte es zu Problemen kommen kontaktieren Sie das Bus-Profi Team per E-Mail.

Anwesenheitssimulation

OpenHAB

Themenersteller
BBL
Schon länger hier...
Schon länger hier...
Beiträge: 99
Registriert: Mi 3. Dez 2014, 13:59
Hat sich bedankt: 3 Mal
Danksagung erhalten: 1 Mal

#1 Anwesenheitssimulation

Beitragvon BBL » So 24. Apr 2016, 08:07

Hallo,

ich habe für mein Haus eine Anwesenheitssimulation geschrieben, die ich gerne teilen möchte. Vielleicht hilft dem einen oder anderen dieses Beispiel bei einer ähnlichen Aufgabenstellung.

Im Vorfeld habe ich alle Items von Lampen, die ich simulieren möchte, zu einer Gruppe zusammengefasst.
Mit Rolläden kann man das genauso machen, in meinem Fall ging es aber nur um 3 Stück, die steuere ich einzeln an.

Hier ist das Regelwerk dazu, inline kommentiert:

Code: Alles auswählen

import org.openhab.core.library.types.*
import org.openhab.model.script.actions.Timer

// Regeln fuer die Anwesenheitssimulation

var int Presence_MinTime = 120  // Mindestleuchtdauer in Sek.
var int Presence_MaxTime = 1200 // Maximalleuchtdauer in Sek.

// Schalte die Lichter der Gruppe gPS zwischen 6 und 23 Uhr zufaellig
rule LightsPresenceSimulation
when
   Time cron "0 */10 6-22 * * ?"
then
   // nur, wenn es draussen dunkel ist
   var int lux = Integer::parseInt(Lux_Outside.state.toString)
   if ((Presence.state == ON) && (lux < 20)) {
      // nur in 50% der Faelle
      if ((new java.util.Random).nextInt(2) == 1) {
          
          // waehle eine Dauer
         var int randomTime = (new java.util.Random).nextInt(Presence_MaxTime - Presence_MinTime) + Presence_MinTime
         // suche eine Lampe aus der Gruppe aus
         var int randLightIndex = (new java.util.Random).nextInt(gPS.members.size)
         logInfo("org.openhab","Switching light ON for " + randomTime + "s: " + gPS.members.get(randLightIndex).name
         sendCommand(gPS.members.get(randLightIndex), ON)
         // Timer zum wieder ausschalten
         createTimer(now.plusSeconds(randomTime)) [|
             logInfo("org.openhab","Switching light OFF: " + gPS.members.get(randLightIndex).name)
             sendCommand(gPS.members.get(randLightIndex), OFF)
              ]
      }
   }
end

// Fahre die Rolladen im OG abends zu unterschiedlichen Zeiten nach 20 Uhr runter
rule Presence_RS_OG_Down
when
   Time cron "0 0 20 * * ?"
then
   if (Presence.state == ON) {
      // KiZi: in den naechsten 30min runter
      createTimer(now.plusMinutes( (new java.util.Random).nextInt(30) )) [|
         sendCommand(RS_OG_KZ, DOWN)
      ]

      // SchlaZi: in den naechsten 90..120min runter
      createTimer(now.plusMinutes(90 + (new java.util.Random).nextInt(30) )) [|
         sendCommand(RS_OG_SZL, DOWN)
         sendCommand(RS_OG_SZR, DOWN)
      ]
 
   }
end

// Fahre die Rolladen im OG morgens zu unterschiedlichen Zeiten ab 7 Uhr hoch
rule Presence_RS_OG_UP
when
   Time cron "0 0 7 * * ?"
then
   if (Presence.state == ON) {
      // KiZi: in den naechsten 30min hoch
      createTimer(now.plusMinutes( (new java.util.Random).nextInt(30) )) [|
         sendCommand(RS_OG_KZ, UP)
      ]

      // SchlaZi: in den naechsten 60min hoch
      createTimer(now.plusMinutes( (new java.util.Random).nextInt(60) )) [|
         sendCommand(RS_OG_SZL, UP)
         sendCommand(RS_OG_SZR, UP)
      ]
   }
end
Home Assistant Nutzer (vormals openHAB Nutzer)

Zurück zu „OpenHAB“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste