Projekt Raspberry Pi: Kommandos per Button in FHEM ausführen

Michael hat mich in einem anderen Beitrag folgendes gefragt:

Hallo Matthias,
eine super Serie. Ich bin gerade dabei Fhem von Raspbian zu Raspbmc umzuziehen, da sind die Post sehr hilfreich. Lässt Du XBMC die ganze Zeit parallel laufen oder beendest Du es, um Ressourcen zu sparen?
Ich schalte den Raspberry Pi abends aus. Gibt es eine Möglichkeit dies über einen Button in Fhem zu realisieren?
Beste Grüße,
Michael

Die Antwort ist: Ja, klar! Wenn man sich die FHEM-Befehlsreferenz durchliest, liest man auch von Shell-Commands. Doch wie führt man diese aus? Folgendes bauen wir zusammen:

Dummy-Attribut:

Set the device attribute dummy to define devices which should not output any radio signals. Associated notifys will be executed if the signal is received. Used e.g. to react to a code from a sender, but it will not emit radio signal if triggered in the web frontend.

Notify-Define:

Execute a command when received an event for the definition <pattern>. If <command> is enclosed in {}, then it is a perl expression, if it is enclosed in „“, then it is a shell command, else it is a „plain“ fhem.pl command (chain). See the trigger command for testing it.

Möglichkeit 1: Einen Schalter umbauen

FS20 ist nicht konfiguriert, macht aber nichts (und wird von meinem auf HomeMatic konfigurierten Stick auch nicht unterstützt). Eigentlich sogar gut, da ich es als Indikator dafür nutzen kann, die entsprechenden Dummy-Buttons ohne Funktion damit zu kennzeichnen. Wie oben gesehen, sorgt das Dummy-Attribut dafür, dass keine Signale versendet werden. Perfekt also – wenn auch etwas umständlich gemacht. Ein notify wird aber dennoch ausgeführt – dieses nutzen wir also, um einen Befehl auszuführen.

Mit dem Befehl eventMap, kann man die Standard-Kommandos umbenennen. So heißt „off“ ab jetzt „speak“. Den On-Button entfernen wir, indem wir per webCmd nur noch den speak-Befehl angeben.

Um zu testen, ob es funktioniert, sende ich „test“ an die Wall. Wenn man nun per SSH angemeldet ist, sieht man die Ausgabe auch sofort. Funktioniert also!

Möglichkeit 2: Einen Dummy anlegen

Beim Erstellen der ersten Möglichkeit, ist mir folgendes in den Sinn gekommen:

Wir legen ein Dummy-Gerät an. Dieses hat noch keine Kommandos, also legen wir welche an (so viele wie man möchte). In diesem Fall nur „test“. Per notify lassen wir uns benachrichtigen, wenn ein entsprechender Befehl gesendet wurde. Das schöne: Wir können beliebig viele Befehle unter einem „Dummy-Gerät“ anlegen und mit verschiedenen Notify-Actions, unterschiedliche Aktionen ausführen. Perfekt!

Ich würde sagen: Frage beantwortet, oder Michael?

Über

Jahrgang 87, gelernter Softwareentwickler und 15 Jahr Erfahrung im Bereich Web-Entwicklung mit PHP. Weiterhin bin ich seit Ende 2013 Magento Certified Developer.