Homematic Script für „Dummies“ Teil 3 – „Wenn, Dann, Sonst…“
Willkommen zu Teil 3!
In diesem Teil lernen wir zusammen, wie die allseits beliebte „Wenn, dann“ Bedingung funktioniert. Wer die Formel in Excel bereits kennt, wird hier nicht viel neues entdecken. Das Prinzip ist gleich. Da die Scriptsprache hier nur auf Englisch funktioniert, heißt das hier dann nur „if, else…“.
Wenn zwei Werte miteinander verglichen werden sollen oder eine Bedingung geprüft wird, sollte man immer einen Blick auf die „Operatoren“ haben. Diese sind in der Anleitung auf Seite 9 abgebildet. Hier noch ein Screenshot davon.
Das System ist Folgendes:
if (<Prüfung>)
{<Dann>;}
else{<Sonst>}
Als Übungsgrundlage nehmen wir mal wieder mein Stromskript, welches alle Powerkanäle zusammen zählt und anschließend in die Variable „Strom_summiert“ schreibt.
! Der erste Block sind die NICHTIP Geraete var a = dom.GetObject("BidCos-RF.NEQ0117543:2.POWER").Value(); var b = dom.GetObject("BidCos-RF.NEQ0115493:2.POWER").Value(); var c = dom.GetObject("BidCos-RF.LTK0123287:2.POWER").Value(); var d = dom.GetObject("BidCos-RF.NEQ0399248:2.POWER").Value(); var e = dom.GetObject("BidCos-RF.OEQ0022831:2.POWER").Value(); var f = dom.GetObject("BidCos-RF.MEQ0487515:2.POWER").Value(); var g = dom.GetObject("BidCos-RF.OEQ0769707:2.POWER").Value(); var h = dom.GetObject("BidCos-RF.NEQ1662548:2.POWER").Value(); ! Ab hier fangen die Homematic IP Geraete an. var i = dom.GetObject("HmIP-RF.0001D569A581D8:6.POWER").Value(); var j = dom.GetObject("HmIP-RF.000213C98DDBB3:6.POWER").Value(); var k = dom.GetObject("HmIP-RF.000213C98DDBB3:6.POWER").Value(); var l = dom.GetObject("HmIP-RF.0001D3C990BFD2:6.POWER").Value(); var m = dom.GetObject("HmIP-RF.0001D3C98DD6F7:6.POWER").Value(); var n = dom.GetObject("HmIP-RF.0001D3C98DD6F7:6.POWER").Value(); var o = dom.GetObject("HmIP-RF.0001D569A581EA:6.POWER").Value(); var p = dom.GetObject("HmIP-RF.0001D3C990BBB7:6.POWER").Value(); ! Ab hier die Lichtschalter var q = dom.GetObject("HmIP-RF.000855699C57F9:7.POWER").Value(); var r = dom.GetObject("HmIP-RF.000855699C57B8:7.POWER").Value(); ! Hier werden die einzelnen Variablen addiert. var z = a + b + c + d + e + f + g + h + i + j + k + l + m + n + o + p + q + r; dom.GetObject("Strom_summiert").State(z);
Ich möchte nun prüfen, ob die Ferienwohnung vermietet ist. Wenn das der Fall ist, dann möchte ich manuell 200 Watt dazu addieren, weil dann mehr Strom verbraucht wird. (Das geht natürlich auch mit Kanälen nach dem Prinzip von Teil 1).
Also brauche ich eine „Wenn, dann…“ Funktion.
Ich möchte also prüfen, ob meine Wohnung unten vermietet ist. Das schalte ich manuell über eine Systemvariable, die bei mir heißt „Wohnung unten bewohnt“ vom Typ Logikwert mit den Bedingungen „Ja“ und „Nein“. (Groß und Kleinschreibung beachten)
Um die Variable im Script nutzen zu können, muss ich diese auch hier erstmal „anlegen“. Das kennen wir bereits aus Teil 1 und ist das gleiche Prinzip, wie mit den Kanälen. Ich habe die Variable im Script „Wub“ genannt.
var Wub = dom.GetObject("Wohnung unten bewohnt");
Nun haben wir die schon mal die Daten im Skript, mit denen wir arbeiten möchten. Als nächstes prüfe ich, ob die Variable auf „Ja“ steht. Wenn ja, dann wird der „Dann“ Bereich ausgeführt.
Wir nehmen also die Vorlage und ergänzen die Formel und die Prüfung. Hier nehme ich nicht „Value()“, sondern „State()“, da ich den aktuellen Status möchte und nicht den zuletzt gemeldeten. Da der „Kanal“ eine Variable ist, wird auch der Duty Cycle nicht strapaziert. Der Operant ist laut obigem Screenshot „==“, da ich einen booleanischen Wert prüfe. (Da gibt es nur „0“ oder „1“).
if (Wub.State()==“Ja“)
Also wenn der Status auf „Ja“ steht, dann führt das Script die „Dann“ Bedingung aus. Wie oben geschrieben, möchte ich also 200 Watt dazu addieren. Also muss ich dem Script sagen, dass die neue Variable „z“ (die später in die Systemvariable „Strom_summiert“ geschrieben wird) z+250 lauten soll.
{z=z+200;}
Ansonsten soll das Script den normalen „z“ Wert nehmen, also nichts tun.
else{}
Fertig sieht die Formel dann also so aus:
if(Wub.Value()=="Ja") {z = z + 200;} else{}
Im Prinzip gar nicht so schwer.
Zusammenfassung:
Benötige Variable ins Script einbinden
var Wub = dom.GetObject("Wohnung unten bewohnt");
„Wenn, dann…“ Bedingungen einsetzen
if(Wub.Value()=="Ja") {z = z + 200;} else{}
Und am Ende mit der Zeile
WriteLine(z)
prüfen, ob auch der gewünschte Wert raus kommt.
Zu guter Letzt darf nicht vergessen werden, den Wert auch wieder in die Variable zurückzuschreiben. Das geschieht (wie auch bei den beiden letzten Tutorials mit:
dom.GetObject("Wohnung unten bewohnt").State(z);
Ich hoffe auch dieses Mal konnten wir zusammen etwas lernen. Wie immer freue ich mich über ein „Like“ auf Facebook und Kommentare unter diesem Beitrag.
Beispielanwendung:
Hier prüfe ich beispielsweise, ob in der Werteliste „offene Fenster“ –> „Alle Fenster zu“ steht. Falls ja, dann mache nichts, falls nein, schreibe die variable „b“ in das Objekt „Telegram“.
var a = dom.GetObject("offene Fenster").Value(); var b = "Du bist nicht da und es sind folgende Fenster offen: "#a; if (a=="Alle Fenster zu") {} else{dom.GetObject("Telegram").State(b)}