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
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.

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.

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:
Download “Anwesenheitssimulator” PresentsSim-1.0.zip – 24-mal heruntergeladen – 2 kB
Feedback
Bei Anmerkungen, Fragen und Kritik gern die Kommentarfunktion unter dem Artikel oder das Fibaro Forum nutzen.
Genau den Nagel auf den Kopf getroffen. Umsetzung am Wochenende.
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
Starke Szene, die soeben eingespielt wurde.
Danke:-)
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
Moin,
schau Dir mal meinen Artikel zu den globalen Variablen an. Der gehört zwar mal überarbeitet, aber aus dem dort angehängten VD kannst Du ganz gut herauslesen wie globale Variablen mit einem VD gesetzt werden.
Gruß
Bastian
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
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
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
Hi,
weg ist weg. Das ist der Grund warum ich Holiday nirgends benutze.
Grüße
Bastian
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.
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 mitif #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