Anwesenheitssimulator

Advertisements

Laut BKA Kriminalstatistik kam es im Jahr 2015 zu insgesamt 167.136 angezeigten Wohnungseinbrüchen. Das ist ein Gesamtanteil von 2,6% aller erfasster Straftaten. In nur 15,2% (25.405 Fälle) dieser Fälle konnte der Täter bzw. die Täter ermittelt werden. Die Zahlen für 2016 liegen noch nicht vor, sollen aber – bei gleichbleibender Aufklärungquote – noch einmal merklich angestiegen sein. Neben der Alarmfunktion den Home Center 2 gibt es noch andere Möglichkeiten sich davor zu schützen. Mit diesem Artikel stelle ich ein, durch Ein- und Ausschalten unterschiedlicher Lichtquellen realisierten, Anwesenheitssimulator vor. Er schaltet zufällig Lampen und virtuelle Devices an und aus. Durch das Ein- und Ausschalten wird simuliert, dass sich jemand im Haus befindet. Ein sicherer Einbruchschutz ist das nicht, aber zumindest ein kleines Mosaiksteinchen welches dazu führen kann, dass Täter sich einem anderen Haus zuwenden.

Anwesenheitssimulator im Home Center 2

Anwesenheitssimulator im Home Center 2

Anwesenheitssimulator

Das zufällige Ein- und Ausschalten von Lichtquellen simuliert die Anwesenheit einer oder mehrerer Personen im Haus. Die Szene wird über die globale Variable PresentState gesteuert. Sobald dieser Status den Zustand Away angenommen hat, werden die in der Konfiguration der Szene definierten Switches und virtuellen Devices zufällig geschaltet. Die Ermittlung des jeweils nächsten Gerätes und dessen Einschaltdauer erfolgt mathematisch zufällig, so dass von Außen kein Muster der Schaltungen erkennbar ist. Sobald die globale Variable PresentState wieder den Wert Home annimmt, wird das zuletzt eingeschaltete Gerät ausgeschaltet und die Szene beendet.

Virtuelle Devices

Die Integration von virtuellen Devices in den Anwesenheitssimulator macht diesen noch flexibler und ermöglicht die Schaltung von Philips Hue Lampen oder sogar TV Geräten zur Simulation der Anwesenheit. Es werden sowohl Buttons als auch Slider unterstützt, so dass bei der Auswahl der Geräte keine Wünsche offen bleiben. (Wenn doch, dann bitte in die Kommentare damit)

Konfiguration der Szene

Um alle unterstützen Gerätetypen abzudecken, fällt die Konfiguration der Szene diesmal etwas aufwendiger aus, so dass ich die Einbindung der Geräte in einem separaten Kapitel untergebracht habe.

-----------------------------------
---------- Einstellungen ----------
varDebug 		= true 					        -- Debug logs true oder false

gVarPresentState	= 'PresentState' 				-- Name der globalen Variable für An- und Abwesenheit
gVarTimeOfDay		= 'TimeOfDay'					-- Name der globalen Variable für die Tageszeit
gVarTimeOfDayValues     = {'Morning','Day','Evening','Night'}	        -- Zu welchen Tageszeiten sollen Lichtquellen geschaltet werden
randomTimeMin		= {3,5}						-- Zufallsminuten von bis {x,y}
secondsNext		= 60					        -- x Sekunden warten bis das nächste Gerät geschaltet wird
simDevices 		= {106, 112, {14,2,50,10}, {22,5,10}, 91}       -- Geräteauswahl
version			= '1.0'
  • varDebug = ausführliches Debug true/false
  • gVarPresentState = Der Name der globalen Variable in der die An- und Abwesenheit gesteuert wird. (Home / Away / Holiday)
  • gVarTimeOfDay = Der Name der globalen Variablen in der die Tageszeiten abgebildet sind.
  • gVarTimeOfDayValues = Die Auswahl der Tageszeiten zu denen die Anwesenheit simuliert werden soll.
  • randomTimeMin = Aus dieser Spanne wird zufällig die Zeit in Minuten ausgewählt die eine Lichtquelle eingeschaltet bleibt. Soll die Lichtquelle also zwischen 4 und 12 Minuten eingeschaltet bleiben, so muss diese Variable folgendermaßen aussehen {4,12}
  • secondsNext = Die Zeit in Sekunden bis nach dem Ausschalten einer Lichtquelle die nächste eingeschaltet wird.

simDevices

Nun wird es ein wenig komplexer. Wir konfigurieren die im Anwesenheitssimulator inbegriffenen Geräte und virtuellen Devices. Im Beispiel sind 5 Geräte aufgeführt. Davon 3 physikalische und 2 virtuelle.

{106, 112, {14,2,50,10}, {22,5,10}, 91}

Physikalische Geräte

Geräte wie der Fibaro Switch und der Dimmer werden einfach mir ihrer ID in die Table eingefügt. Die IDs 106, 112 und 91 sind entweder Switches, Dimmer oder Wallplug. Also alles Geräte die sich mit den folgenden Befehlen ein- und ausschalten lassen.

fibaro:call(ID, "turnOn")
bzw.
fibaro:call(ID, "turnOff")

Diese werden in der Table mit ihrer Fibaro ID hinterlegt.

Virtuelle Devices mit Slider

Bei virtuellen Devices (VD) ist die Konfiguration ein wenig aufwendiger, denn hier reicht kein einfaches turnOn oder turnOff zum Schalten. Ein virtuelles Device verfügt über Buttons und/oder Slider zum Ein- und Ausschalten von Lichtquellen. Hier als Beispiel einmal mein VD zur Steuerung meiner Philips Hue Lampen im Wohnzimmer.

Philips Hue VD

Philips Hue VD

Der Slider Helligkeit wird in diesem Beispiel zum Schalten der Hue Lampen verwendet. Um diesen in der Konfiguration für den Anwesenheissimulator zu hinterlegen wird – zusätzlich zur ID des virtuellen Devices – folgende Werte benötigt:

  • Laufende Nummer des Sliders
  • Einschaltwert
  • Ausschaltwert

Die laufende Nummer von Objekten in virtuellen Devices lässt sich ganz einfach durch das Abzählen der eingefügten Elemente ermitteln. Jeder Slider und jeder Button wird dabei mitgezählt.

Hue VD nummeriert

Hue VD nummeriert

Um dieses virtuelle Device in unsere Konfiguration zu übernehmen wird also der Slider mit der Nummer 2 benötigt. Der Einschaltwert soll 50% und der Ausschaltwert 0% betragen. Der zu hinterlegende Wert innerhalb der Konfiguration ist also:

{14,2,50,10}

{DeviceID, Slider Nummer, Einschaltwert, Ausschaltwert}

Virtuelle Devices mit Buttons

Ganz ähnlich verhält es sich, wenn im VD keine Slider sondern Buttons bedient werden sollen. Auch hier ist wieder das durchzählen der Objekte notwendig. Die Konfiguration setzt sich folgendermaßen zusammen:

{22,5,10}

{DeviceID, Einschaltbutton, Ausschaltbutton}

Zusammenfassung simDevices

In der oben gezeigten Beispielkonfiguration werden also unterschiedlichte Geräte geschaltet, wobei die Szene in der Lage ist anhand der Konfiguration die Art des Geräte zu identifizieren.

Download

Die aktuelle Version des Anwesenheitssimulator befindet sich hier zum Download:

Feedback

Bei Anmerkungen, Fragen und Kritik gern die Kommentarfunktion unter dem Artikel oder das Fibaro Forum nutzen.

Posted in Alarm and tagged .

16 Comments

  1. Moin Bastian! Cool wäre noch eine Endzeit. Sonst ist ja quasi bis morgens die ganze Nacht das Licht an (wenn man nicht daheim ist) Schön wäre wenn man fest sagen kann um 23:00 schalte aus, auch wenn Status Away.

    • Moin Waffel,

      diese Funktion ist indirekt schon vorhanden und lässt sich über die TimeOfDay Variable steuern 😉
      Die Variable gVarTimeOfDayValues beinhaltet bei mir nur den Wert „Evening“. „Night“ beginnt bei mir um 23 Uhr. Dies führt dazu, dass die Szene nur zwischen Sonnenuntergang (siehe Artikel zur Tageszeitvariable) und 23 Uhr die Anwesenheit simuliert.

      Gruß
      Bastian

  2. Moin Bastian,
    ich hab mal ne Frage zu deinem Script. Kann ich die „PresentState“ auch über ein VD füllen und wenn ja wie müsste denn der Lua Code aussehen. Ich weiß wie ich ein VD anlegen muss, hab aber keine Ahnung wie ich das Befüllen machen muss.
    Wie realisierst Du denn, dass das Script weiß ob Du im Urlaub bist?
    Da ich Fibaro nicht als Alarmanlage einsetzte fehlt mir da die Vorstellung wie ich es realisieren kann.
    Es wäre schön, wenn Du mir da helfen könntest.
    Gruß secundani

  3. Super und Dank für die Hilfe,
    hatte bei der Variable „PresentState“ die Anführungszeichen nicht gesetzt.
    Jetzt ist alles schön
    Danke und einen schönen Tag
    Gruß secundani

  4. Hallo Bastian,
    kann ich dich nochmal nerven?
    Ich habe deine Scene übernommen und nur 2 Wallplugs eingetragen. Die Variablen sind ordnungsgemäß gefüllt. Des Weiteren habe ich gVarTimeOfDayValues = {‚Morning‘,’Day‘,’Evening‘,’Night‘} gelassen um zu testen ob die WallPlugs arbeiten.
    Verstehe ich es richtig, dass wenn ich über mein VD auf Holiday schalte, die Scene getriggert werden müsste? So das ein Wallplug angeschaltet wird.
    Bei mir tut sich leider gar nichts.
    Hast Du eine Idee?
    Danke und Gruß
    secundani

    • Moin,

      ich helfe gern, alles gut.
      Da ich den Status „Holiday“ nicht benutze, hat sich in der Szene ein kleiner Fehler eingeschlichen.
      Du musst folgende Zeilen austauschen:

      Suche: if fibaro:getGlobal(gVarPresentState) ~= 'Away' then
      Ersetze mit: if fibaro:getGlobal(gVarPresentState) ~= 'Away' and fibaro:getGlobal(gVarPresentState) ~= 'Holiday' then

      sowie

      Suche: while fibaro:getGlobal(gVarPresentState) == 'Away' do
      Ersetze mit: while fibaro:getGlobal(gVarPresentState) == 'Away' or fibaro:getGlobal(gVarPresentState) == 'Holiday' do

      So sollte es auch im Urlaubsmodus funktionieren. Wenn nicht, lass es mich wissen.

      Grüße
      Bastian

  5. Hallo Bastian, Danke
    wie es immer so ist der Fehler sitzt vorm Monitor. Ich hatte Run Scene auf Manuell und nicht auf Automatik. Ich las in der Scene das mit dem Autostart – aber das bezog sich ja auf den Trigger.
    Nochmal ne Frage, es gibt doch keinen Unterschied zwischen Away und Holiday? dann kann ich ja die Änderung rückgängig machen und nutze nur Away mit meinem VD. Weil weg ist weg, oder ?
    Jedenfalls ist das eine super Scene die Du da gebaut hast, Hut ab !!!

    Danke
    Gruß secundani

  6. Achso eins hätte ich noch, da ich keine HUE Lampen verwende, wie könnte ich mehrere WallPlugs einschreiben? Da ja Position 3 und 4 für Button der HUE voreingestellt sind.

    • Die Positionen sind nicht fest vergeben und/oder auf virtuelle Devices beschränkt. Du kannst dort soviele Geräte eintragen wie Du möchtest. Das Muster der Einträge entscheidet, was es für Einträge sind.
      Schaue Dir dazu nochmal die Abschnitte „Physikalische Geräte“, „Virtuelle Devices mit Slider“ und „Virtuelle Devices mit Buttons“ an. Dort ist es erklärt.

  7. Moin Bastian,
    ich hab mir die Abschnitte durchgelesen und verstehe auch wie es sich mit den VD’s verhält. Leider verstehe ich diesen Teil der function nicht, da ich noch nicht richtig fit bin in Lua
    if type(deviceID) == ‚table‘ then
    if #deviceID == 3 then
    debug(‚green‘,’Virtuelles Device: ‚..fibaro:getName(deviceID[1])..‘ in ‚..fibaro:getRoomNameByDeviceID(deviceID[1])..‘. Drücke Button für ‚..randomTime..‘ Sekunden.‘)
    fibaro:call(deviceID[1], „pressButton“, deviceID[2])
    waitFunction(randomTime, ‚bis ‚..fibaro:getName(deviceID[1])..‘ ausgeschaltet wird‘)
    fibaro:call(deviceID[1], „pressButton“, deviceID[3])

    Könntest Du mir das bitte mal erklären?
    Gruß secundani

    • Hi,

      kein Problem. Dafür bin ich ja da 😉

      Die Variable in der die zu steuernden Geräte definiert werden ist vom Typ Lua Table (siehe Artikel Lua Grundlagen). Das Beispiel aus dem Artikel: {106, 112, {14,2,50,10}, {22,5,10}, 91}
      In dieser Table (nennen wir sie Table_1) sind 5 Variablen gespeichert und mittels Kommata getrennt. Darunter befinden sich zwei unterschiedliche Typen von Variablen: Nummern (106, 112 und 91) und wiederum weitere Tables ( {14,2,50,10} und {22,5,10}).
      Zur Laufzeit der Szene wird nun per Zufall einer der Werte aus Table_1 ausgewählt und der Typ der Variable (Nummer oder Table) bestimmt. Dies geschieht mit der Funktion type(deviceID). Handelt es sich bei der zufällig ausgewählten Variable aus Table_1 um eine Table (nennen wir sie Table_2), so wird mit if #deviceID == 3 geprüft, ob Table_2 genau 3 Elemente beinhaltet. Ist dies der Fall, handelt es sich um ein virtuelles Device welches per Tastendruck ein- und ausgeschaltet wird. Sind in der Variable aus Table_2 keine 3 Elemente (also 4), so ist es ein virtuelles Devices welches per Slider gesteuert wird.
      Und wenn type(deviceID) ergibt, dass es sich um eine Zahl handelt, ist es ein physikalisches Gerät, welches sich mittels On/Off schalten lässt.

      Ich hoffe es ist einigermaßen zu verstehen. Wenn nicht, komme gern nochmal auf mich zu.

      Grüße
      Bastian

      • Hi Bastian ganz großen DANK!
        Die Erklärung ist so super geschrieben, dass ich es auf Anhieb verstanden habe. Da sollten sich alle mal ein Beispiel nehmen, wie man etwas erklären kann.
        Ich wünsche Dir ein schönes Pfingsten und bis bald zur nächsten Frage 😉
        Gruß secundani

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Ich akzeptiere