Nützliche globale Variablen

Ein LUA Programm benutzt überwiegend lokale Variablen. Manchmal sind stattdessen globale Variablen vorteilhaft. Beispiele für nützliche globale Variablen bei VERA: Mit Service-ID Variablen lassen sich die UPnP Bezeichner der LUUP-Kommandos wesentlich verkürzen. Das spart Platz und vermeidet Tippfehler. Oder man kennzeichnet Scene Trigger mit einer globalen Variable. Auf diese Weise kann man trigger-spezifische Scene Actions generieren. So sind weniger Scenes erforderlich. Das fördert die Übersicht.

1 Abkürzung der LUUP-Kommandos

LUUP Kommandos sehen typischerweise etwa so aus:
luup.variable_get(“urn:micasaverde-com:serviceId:SecuritySensor1″,”ArmedTripped”],dev)
Die lange Spezifikation der Service-ID “urn:…” ist an vielen Stellen im LUA-Code erforderlich. Durch globale Variablen kann man sich die Wiederholung und damit auch Speicherplatz sparen. Und man kann Tippfehler vermeiden. Folgendes Array definiert also einige sehr nützliche globale Variablen:

SID={
 SP={"urn:upnp-org:serviceId:SwitchPower1","Status"},
 TS={"urn:upnp-org:serviceId:TemperatureSensor1","CurrentTemperature"},
 LS={"urn:micasaverde-com:serviceId:LightSensor1","CurrentLevel"},
 HS={"urn:micasaverde-com:serviceId:HumiditySensor1","CurrentLevel"},
 SS={"urn:micasaverde-com:serviceId:SecuritySensor1","ArmedTripped"},
 TP={"urn:upnp-org:serviceId:TemperatureSetpoint1","CurrentSetpoint"},
 GW={"urn:micasaverde-com:serviceId:HomeAutomationGateway1","RunScene"},
 SM={"urn:upnp-org:serviceId:SmtpNotification1","SendEmail"},
 HA={"urn:micasaverde-com:serviceId:HaDevice1"},
 ZW={"urn:micasaverde-com:serviceId:ZWaveDevice1"},
 ZN={"urn:micasaverde-com:serviceId:ZWaveNetwork1"}
}  

Diese Zeilen fügt man in StartupLua ein. Danach lassen sich die LUUP Kommandos in folgender Weise verkürzen:

luup.variable_get(SID.SS[1],SID.SS[2],dev)
oder
luup.call_action(SID.SP[1],"SetTarget",{newTargetValue="0"},dev) 

2 Kennzeichnung der Scene Triggers

Für VERA scenes können mehrere trigger definiert werden. Allerdings läuft der Aktionsteil der scene unabhängig vom auslösenden trigger ab. Manchmal möchte man mit viele triggers ähnliche Aktionen auslösen. Dazu benötigt man eine Vielzahl nahezu identischer scenes. Mehr Übersichtlichkeit und Performance bietet eine gemeinsame scene mit mehreren triggers. Hierbei gibt man jeder trigger Definition der Scene 4711 einen LUA Code mit: scn4711=’ZustandTriggerA’
Der Aktionsteil der scene übernimmt den Inhalt der globalen Variablen und leert sie sofort wieder. Danach dient scnTrig zur logischen Verzweigung.

local scnTrig=scn4711 or ""
scn4711=""  

3 Übersicht bei globalen Variablen

Bei LUA entstehen globale Variablen, wenn eine Variable nicht als local definiert wird. Namensüberschneidungen sind dann eine häufige Fehlerquelle. Die Definition globaler Variablen in Form eines Array kann die Übersicht erhöhen. Beispielsweise durch Definition in folgender Weise:

Gebiet={
 NameA={"abc","def"},
 NameB="ghi"
}
mit Abruf in Form von:
Gebiet.NameA[1] oder Gebiet.NameA[2] oder Gebiet.NameB 

Dieser Beitrag gehört zur Themengruppe
Smarthouse Programmierung

VERA erlaubt individuelle SMART HOUSE Programmierung mit LUA und LUUP. Dabei ist LUUP die Kommandosprache von VERA. LUUP Kommandos können nicht nur aus LUA heraus ausgeführt werden. Der Aufruf von LUUP ist auch von außen über CGI (http-GET) möglich. Dieser Weg ermöglicht vielfältige Zugriffe auf VERA aus Drittsystemen. Bei der LUA Programmierung für SMART HOUSE sind einige Apps und Werkzeuge hilfreich. Zusätzlich ist Entwicklungsdisziplin gefordert. Ein SMART HOUSE Controller wie VERA ist nämlich ein limitiertes Kleinsystem. Deshalb ist eine performante Strukturierung des LUA Programm Codes besonders wichtig. Dabei sollten die Schreib-Aktionen minimiert werden. Es empfiehlt sich, Datenfehler sorgfältig abzufangen. Denn ein nachträgliches Debugging ist bei VERA nicht einfach. Versteckte Programmfehler können viel Ärger machen. Also am besten jede einzelne Programmentwicklung oder -änderung gut austesten, bevor man weitergeht.

Schreibe einen Kommentar

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