Einführung LUA Programmierung Unterschied Homecenter 2 Homecenter Lite Die Unterschiede zwischen dem Homecenter 2 und Homecenter Lite sind für den Endverbraucher auf den ersten Blick nicht sichtbar. Die Oberfläche, die App und die Bedienelemente sind bei beiden Gateways optisch gleich. Mit beiden Gateways lässt sich zum Beispiel das Licht, die Heizung und Jalousien steuern. Beide Gateways sprechen den Funkstandard Z-Wave und können mit den meisten europäischen Geräten dieses Standards kommunizieren. Einige Ausnahmen wie das Türschloss sind vorhanden, werden aber mit dem Release der Version 4.0 steuerbar sein. Der größte Unterschied zwischen dem Homecenter 2 und Homecenter Lite besteht im Bereich der Automatisierung und Szenensteuerung. Das Homecenter 2 bietet die Möglichkeit Szenen über die offene Programierungsprache LUA durchzuführen. Während im Homecenter Lite nur die grafisch basierte Szenenerstellung implementiert ist. Abbildung 1: Grafische Szenenerstellung Abbildung 2: Codebasierte Szenenerstellung In den beiden Abbildungen ist eine Szene erstellt, die beim Öffnen des Dachfensters alle Lichter im Raum „Büro“ ausschaltet und eine Nachricht als Mail schickt, die die Information über ein offenes Fenster enthält. In der Abbildung 1 ist die grafische Implementation dieser Anwendung abgebildet. Die grafische Szenenerstellung baut sich in Blöcken auf, die einzeln NACHEINANDER hinzugefügt werden können. Verschiedene Module haben verschiedene Funktionen. Jede Funktion eines Modul ist in seinem Block im grünen Bereich auswählbar. Bei Aktoren ist die Funktion, die auszuwählen ist „AUS schalten“ oder „EIN schalten“. Über das „Plus“-Symbol können einzelne Module aus den Bereichen und Räumen ausgewählt und hinzugefügt werden. Darüber werden auch die Konnektoren hinzugefügt. Diese beschränken sich in der grafischen Erstellung auf „dann“, „oder“ und „und“. Wie schon erwähnt erfolgt die Erstellung einer Szene im grafischen Modul Schritt für Schritt. Das bedeutet, dass nachträgliche Änderungen in schon erstellten Blöcken nicht möglich sind. Es lassen sich über das Hinzufügensymbol zwar weitere Module über Konnektoren einfügen. Allerdings wird das Modul nur in der grafischen Oberfläche hinzugefügt, erhält aber im Programmiercode keine Funktion. In der Abbildung 2 ist dieselbe Szene, wie in der grafischen Szenenerstellung zu erkennen. Allerdings wurde hier die Szene im LUA-Code visualisiert und erstellt. Der LUA – Code baut auf einer Syntax von Befehlen an die Module und Operatoren auf. Die Hauptoperatoren sind „if else“, „while“, „repeat“ und „for“. Für die Anwendung der Operatoren wird eine gewisse Kenntnis über die Logik dieser Operatoren vorausgesetzt. Im Folgenden einige Codebeispiele zu den Operatoren: - if a<0 then a = 0 end - if (fibaro.getValue(111, „value“) == 1) then fibaro:call(111, „turnOFF“) - local i = 1 while (i<250) do fibaro:call(i,“turnOFF“) i = i + 1 end end - repeat line = os.read() until line ~= "" print(line) - for var=exp1,exp2,exp3 do something end Für weitere Codebeispiele und Tutorials zum LUA-Code: http://www.lua.org/pil/contents.html Das Nutzen dieser Operatoren ermöglicht es, komplexere auf einen ganz bestimmten Anwendungsfall zugeschnittene Szenen zu programmieren. Die Möglichkeiten der manuellen Programmierung über den LUA-Code übersteigt die Möglichkeiten der grafischen Programmierung um ein Weites. Ein kurzes Beispiel, soll die Funktionaliät und die Komplexität der LUA Programmierung veranschaulichen. Wir betrachten folgenden Anwendungsfall: „Ein Endverbraucher installiert ein Z-Wave System in seinem Haus und hat das Dachgeschoss komplett ausgestattet. In seinem Dachgeschoss befindet sich sein Arbeitszimmer mit vielen technischen Komponenten. Über die Wetterdaten von Yahoo hält er sich auf dem laufenden über die Wettervorhersagen. Bei angekündigtem Regen überprüft er den Status seiner Dachfenster über eine App. Beim Verlassen des Hauses vergisst er manchmal die Dachfenster zu schließen. Wenn Regenwetter bevorsteht, besteht so die Gefahr auf einen enormen Schaden.“ Lösung: Beim Verlassen des Hauses UND einer Wettervorhersage mit Regen überprüft das ZWave System den Status des Dachfensters und warnt den Verbraucher, falls ein Dachfenster offen ist. Falls nur schlechtes Wetter vorhergesagt ist, weißt das Haus den Nutzer per Push-Nachricht oder E-Mail daraufhin einen Schirm oder regengerechte Kleidung zu tragen. --[[ %% properties 122 value %% globals –]] local FrontDoor = fibaro:getValue(122, "value") local openWindows = 0; -- wenn Haustüre sich öffnet if (FrontDoor == "1") and (fibaro:getValue(3, "WeatherConditionConverted") == "rain") then -- wenn Wetter regnerisch ist local Run = 1; -- Schleife für max 259 Geräte while (Run < 260) and (openWindows == 0) do -- wenn Bereich ID des Gerätes Run Dachgeschoss ist if (fibaro:getRoomID(Run) == 7) and (fibaro:getType(Run) == "door_sensor") then -- wenn Gerät Run Türsensor ist local value = fibaro:getValue(Run, "value") -- wenn Gerät Run offen ist if( value == "1") then openWindows = openWindows + 1; -- welcher Text geschrieben wird local text = "Achtung die Fenster im Dachgeschoss sind nicht alle geschlossen"; fibaro:call(2, "sendEmail", "Fibaro Meldung", text) end end Run = Run + 1; end -- wenn keine Fenster offen sind if(openWindows == 0)then -- sende E-Mail aus E-Mailpanel fibaro:call(2, "sendDefinedEmailNotification", "5"); end end Folgende Funktionen für bestimmte Modulgruppen sind für das erstellen von Szenen wichtig. Über die Funktionen können entweder Statis von Geräten abgefragt werden oder die Geräte zu einer ausführbaren Aktion bestimmt werden. Für Aktoren gibt es folgende Aktionen: An oder Ausschalten eines Aktors (z.B. Unterputzrelay) fibaro:call (DeviceID, „TurnOFF/ON“) Dimmen oder einstellen einer Jalousie auf gewisse Höhe fibaro:call (DeviceID, „SetValue“, „Value zwischen 1-100“) Temperatur eines Thermostats einstellen fibaro:call(DeviceID, "setTargetLevel", „Gradzahl“) Gerät aufwecken fibaro:call(1, "wakeUpDeadDevice", Geräte-ID) Für Z-Wave Geräte gibt es folgende Abfragen: Aktorenstatus (An = 1, Aus = 0) fibaro:getValue(DeviceID, "value") Aktor aktiv im Netz = 0 oder inaktiv = 1 fibaro:getValue(DeviceID, "dead") Parent des Aktors (Welches Gateway dem Aktor angehört) fibaro:getValue(DeviceID, "parentID") Auslesen der Raum-ID eines bestimmten Geräts fibaro:getRoomID(DeviceID) Auslesen des Gerätetyps (z.B. door_sensor, binary_switch) fibaro:getType(DeviceID) Auslesen des Hersteller eines Geräts (gibt vollständigen Herstellername zurück) Fibaro:getValue(DeviceID, „zwaveCompany“) Für Sensoren gibt es folgende weitere Abfragen: Status ob Sensor scharf geschalten ist nicht scharf = 0, scharf = 1 fibaro:getValue(DeviceID, "armed") Batteriestatus des Sensors in Prozent fibaro:getValue(DeviceID, "batteryLevel") Bei Multisensoren die Temperatur abfragen fibaro:getValue(DeviceID, "valueSensor") Einheit der Value (valueSensor) fibaro:getValue(DeviceID, "unitSensor") Aufwachzeit in Sekunden des batteriebetriebenen Geräts fibaro:getValue(DeviceID, "wakeUpTime") Beispielliste mit allen Werten, die aus einem Z-Wave Gerät ausgelesen werden können "UIMessageSendTime": "0", "batteryLowNotification": "1", "classConfigure": "0,0,2,0,0,2,0", "classGeneric": "37", "classSupport": "37,39,114,117,130,134,135", "classVersion": "1,1,1,1,1,1,1", "dead": "1", "deviceControlType": "20", "deviceIcon": "2", "disabled": "0", "emailNotificationID": "0", "emailNotificationType": "0", "endPoint": "0", "isBatteryOperated": "0", "isLight": "0", "liliOffCommand": "", "liliOnCommand": "", "log": "", "logTemp": "TxtBlue", "needConfigure": "5", "nodeID": "60", "parametersTemplate": "0", "parentID": "1", "pollingRetryError": "0", "pollingTime": "", "pollingTimeNext": "", "pollingTimeSec": "0", "productInfo": "0,100,48,2,0,0,1,0", "protectionLocal": "0", "protectionLocalSupport": "0", "protectionRF": "0", "protectionRFSupport": "0", "pushNotificationID": "0", "pushNotificationType": "0", "requestNodeNeighborState": "0", "requestNodeNeighborStateTimeStemp": "0", "saveLogs": "1", "showChildren": "1", "smsNotificationID": "0", "smsNotificationType": "0", "sortOrder": "999", "unit": "", "useTemplate": "1", "userDescription": "", "value": "0", "zwaveCompany": "Duwi", "zwaveInfo": "6,2,51", "zwaveVersion": "1,0", "parameters": [], "associationView": [], "associationSet": [] Um die Eigenschaften/Werte aus der obigen Liste von einem Gerät auslesen zu können muss folgende bekannte Funktion in LUA verwendet werden: fibaro:getValue(Device-ID, Eigenschaft aus obiger Liste ) BSP.: fibaro:getValue(154, "associationSet" ) Kontakt: Z – Wave Europe GmbH Denis Pätz Goldbachstraße 13 09337 Hohenstein-Ernstthal
© Copyright 2024 ExpyDoc