FHEM Geräte per MQTT steuern

Damit angelegte Geräte in FHEM auch per MQTT gesteuert werden können, sind ebenfalls einige Zeilen Code in FHEM notwendig. Der Code stammt von Matthias Kleine.


Es wird ein Gerät definiert, dass auf einem definierten Pfad lauscht um dann Befehle für FHEM entgegen zu nehmen.

define SYS_MQTT MQTT_DEVICE
attr SYS_MQTT alias MQTT-Command
attr SYS_MQTT userattr subscribeReading_cmnd
attr SYS_MQTT subscribeReading_cmnd /fhem/cmnd


Mit einem notify wird dann auf Änderungen die auf cmnd eintreffen reagiert um diese danach an die Perl-Funktion fhem() übergeben, die daraus dann einen Befehl generiert.

define n_SYS_MQTT_cmnd notify SYS_MQTT:cmnd:.* {}


In dieses notify wird der folgende Code eingefügt.

SYS_MQTT:cmnd:.* {
	if ($EVENT =~ qr/.*?: (.*)/p) {
		my $cmnd = $1;
		Log3($NAME, 5, "executed mqtt command: " . $cmnd);
		fhem($cmnd);
	}
}




In Loxone wird pro Gerät ein virtueller Ausgangs-Befehl erstellt. Hier wird dann bei Befehle bei EIN bzw. Befehl bei AUS der gewünschte FHEM Befehl eingegeben.


Beispiel:

/fhem/cmnd set Wohnzimmerlicht on



Der blaue Text ist der FHEM Befehl. Dieser wird 1:1 an FHEM übergeben und somit ist es möglich alle Geräte zu steuern.

Damit kann FHEM vollständig über die MQTT Befehle gesteuert werden, was aber auch natürlich ein Sicherheitsrisiko darstellen könnte, da alle FHEM Befehle über diese Methode ausgeführt werden können.


Vorteil dieser Methode ist, dass nicht bei jedem Gerät ein manuelles subscribe in FHEM erstellt werden muss.