Benutzer:Amenophis86/Artikelentwurf

Aus FHEMWiki
Zur Navigation springen Zur Suche springen


Amenophis86/Artikelentwurf
Zweck / Funktion
Ausführung von Befehlen auf anderer Instanz
Allgemein
Typ Inoffiziell
Details
Dokumentation Thema
Support (Forum) Automatisierung
Modulname 93_RFHEM.pm
Ersteller chris1284 (Forum )
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref!

RFHEM ist ein Modul um zwischen verschiedenen FHEM Instanzen Befehle abzusetzen. Das Modul wird nicht supported und ist somit auch nicht offiziell per Update installiert.

Zielsetzung

Ziel des Moduls ist es Befehle auf einer anderen Instanz abzusetzen. Verwirklich wird das ganze per Telnet. Das Modul ist angelehnt an FHEM2FHEM. Der Unterschied ist, dass hier quasi alle Devices, auch die von FHEM2FHEM nicht unterstützten, gesteuert werden können.

Herunterladen des Moduls

Das Modul selbst bekommen wir in diesem Forums Beitrag. Nochmal, das Modul wird aktuell nicht supported und ist dem entsprechend alt.

Wir laden das Modul in den Ordern ./FHEMInstallation/FHEM/. Bei einem PI wäre das dann /opt/fhem/FHEM. Danach starten wir FHEM neu.

Definieren des Device

Nun müssen wir uns ein Device anlegen. Dies machen wir klassisch in der Kommandozeile mittels

define Name RFHEM hostip [:port] [pw]

Sollte eure zweite Instanz auf der gleichen Hardware laufen, den Port 7073 (Standard ist 7072 bei fhem und auch beim Modul, wenn keiner angegeben wird) und kein Passwort besitzen, wäre die Definition:

define FHEM2 RFHEM 127.0.0.1:7073

Befehle senden

Mittels

set <name> cmd <befehl>

setzt ihr eure Befehle ab, welche in der zweiten Instanz ausgeführt werden. Wollen wir zum Beispiel die Lampe1 anschalten, müssen wir folgendes in die Kommandozeile eingeben:

set FHEM2 cmd set Lampe1 on

Im Log der sendenden Instanz erscheint der Hinweis "command executed" und die zweite Instanz sollte die Lampe1 eingeschaltet haben.

Einschränkungen

Einfache Befehle

Einfache Befehle können auf der zweiten Instanz ausgeführt werden. Beispiele:

Dummy schalten:

set FHEM2 cmd setreading Dummy1 Reading1 'Test 1 2 3'

Dummy definieren:

set FHEM2 cmd define Dummy1 dummy

Notifys erstellen:

set RemotePI cmd define b3lampV1 notify btn3 set lamp on
set RemotePI cmd define b3lampV1 notify btn3 {}

Perlcode

Was nicht funktioniert ist einen Perlcode auf der zweiten Instanz auszuführen. FHEM bezieht den Perlcode auf die erste Instanz. Somit würde zum Beispiel folgender Befehl nicht funktionieren:

set RemotePI cmd define a1 at 17:00:00 {fhem("set xyz on");}

Die Instanz, auf welcher der Befehl abgesetzt wurde, würde selbst den Code "{fhem ("set xyz on");}" ausführen wollen.

SSL Auth

SSL Auth ist leider auch nicht möglich.

Nicht funktionierende Befehle

Bisher sind keine Befehle bekannt. Solltet jemand einen oder mehrere finden, so möge er diese bitte diesem Thread posten. Vielleicht findet sich ja noch jemand, der den Befehl korrigieren kann.

Nützliche Hilfen

Typischer Fall, wie dieses Modul genutzt werden kann ist folgender. Man hat auf der gleichen, oder einer anderen, Hardware eine zweite FHEM Instanz. Der Grund mag sein, dass man blockierende Module auslagert (gleiche Hardware) oder Empfangslücken überbrücken möchte (andere Hardware).

Wir nennen unsere Hauptinstanz MASTER und unsere zweite Instanz SLAVE. Auf SLAVE haben wir ein blockierendes Modul installiert, dessen Daten wir aber regelmäßig in MASTER haben möchten. Das Modul heißt TEST-Modul und hat die Readings TEST-Modul-R1 und TEST-Modul-R2.

Wir installieren auf SLAVE das hier beschriebene Modul RFHEM und nennen es "Daten.Senden". Auf SLAVE muss also regelmäßig, am besten bei einem Update der Readings, die Daten an MASTER gesendet werden. Dies lässt sich am einfachsten mittels eines notify. MASTER muss jedoch auch die Daten empfangen können. Hierfür bietet sich ein Dummy an. Den Dummy definieren wir auf Master wie folgt:

define Dummy.Empfang dummy

Das sendende Notify, wird auf SLAVE wie folgt definiert:

define Daten.Senden.Notify notify Test-Modul.* set Daten.Senden cmd setreading Dummy.Empfang $EVENT

Nun schreibt der SLAVE bei jedem Update eines Readings in den Dummy des MASTERS die Werte. Auf dem Master können wir diese Veränderung nun auch abgreifen, wie bei jedem normalen Modul. Grafisch würde das ganze so aussehen:

SLAVE: Readings Update an Test-Modul --> Meldung an Notify --> Meldung an MASTER --> Empfang der Daten im Dummy

Doppelpunkte im Reading beim Dummy

Es kann vorkommen, dass die Readings im Dummy einen Doppelpunkt haben. In unserem Fall würde dann im Dummy "Dummy.Empfang" das Reading eins wie folgt stehen "Test-Modul-R1:". Doppelpunkte sollte es zum Einen in Readings nicht geben, deswegen gibt es auch einen Hinweis im Log, wenn ihr FHEM startet und dies der Fall ist. Zum Zweiten kann es zu Problemen auf der MASTER Instanz kommen, wenn man zB ein DOIF auf die Readings des Dummy lauschen lässt.

Aktuell muss man sich bei der Lösung des Problems noch selbst helfen, da es keinen Maintainer des Moduls gibt. Die Lösung hierzu könnte wie folgt aussehen. Wir erstellen uns eine Sub in der MyUtils (99_myUtils_anlegen) an, welche für uns die Doppelpunkte löscht. Diese Sub könnte wie folgt aussehen:

sub anzahl_evtparts($$)
{
 my ($EVENT, $Device) = @_;
 my @eingabe = split(/ /,$EVENT);
 my $anzahl = scalar @eingabe;
 my $value = "";
 
 my $reading = substr($eingabe[0],0,length($eingabe[0])-1);
 
 foreach (my $i=1; $i<$anzahl;$i++)
 {
  $value = $value.$eingabe[$i]." "; 
 }
 
 $value = substr($value,0,length($value)-1);
 	 
 fhem ("set FHEM1 cmd setreading $Device $reading $value");
}

Das dazu gehörige Notify, welches auf den die Statusänderung lauscht und die Nötigen Daten weitergibt, würde wie folgt aussehen:

<NameDevice>.* {anzahl_evtparts($EVENT,$NAME)}

Command executed ausschalten

Sollte man viele Befehle mittels RFHEM senden, empfiehlt es sich das Attribut "Verbose" auf 0 zu setzen. Dies führt zwar dazu, dass keine Fehler mehr angezeigt werden, aber es führt auch dazu, dass nicht bei jeder Befehlsausführung das Log voll geschrieben wird.

Hinweis

Es sei nochmals ausdrücklich darauf hingewiesen, dass das Modul kein offizielles Modul ist. Es hat sich bisher niemand gefunden, der dieses Modul supporten möchte. Der Artikel wurde von jemanden erstellt, der das Modul nutzt, aber selbst nicht erstellt hat.