Benutzer:Amenophis86/Artikelentwurf: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 2: | Zeile 2: | ||
{{Infobox Modul | {{Infobox Modul | ||
|ModPurpose=Ausführung von Befehlen auf anderer Instanz | |ModPurpose=Ausführung von Befehlen auf anderer Instanz | ||
|ModType=x | |||
|ModForumArea=Automatisierung | |ModForumArea=Automatisierung | ||
|ModFTopic=23638 | |||
|ModTechName=93_RFHEM.pm | |ModTechName=93_RFHEM.pm | ||
|ModOwner=chris1284 ({{Link2FU|5217|Forum}}) | |ModOwner=chris1284 ({{Link2FU|5217|Forum}}) | ||
|Modulname=93_RFHEM.pm | |||
}} | }} | ||
[[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. | [[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. | ||
Zeile 56: | Zeile 59: | ||
=== Nicht funktionierende Befehle === | === Nicht funktionierende Befehle === | ||
Bisher sind keine Befehle bekannt. Solltet jemand einen oder mehrere finden, so möge er diese bitte {{Link2Forum|Topic=23638|Message=169011|LinkText=diesem}} Thread posten. Vielleicht findet sich ja noch jemand, der den Befehl korrigieren kann. | Bisher sind keine Befehle bekannt. Solltet jemand einen oder mehrere finden, so möge er diese bitte {{Link2Forum|Topic=23638|Message=169011|LinkText=diesem}} Thread posten. Vielleicht findet sich ja noch jemand, der den Befehl korrigieren kann. | ||
== Nützliche Hilfen == | == Nützliche Hilfen == | ||
Zeile 75: | Zeile 77: | ||
<pre>SLAVE: Readings Update an Test-Modul --> Meldung an Notify --> Meldung an MASTER --> Empfang der Daten im Dummy</pre> | <pre>SLAVE: Readings Update an Test-Modul --> Meldung an Notify --> Meldung an MASTER --> Empfang der Daten im Dummy</pre> | ||
== Doppelpunkte im Reading beim Dummy == | == Doppelpunkte im Reading beim Dummy == | ||
Zeile 82: | Zeile 83: | ||
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: | 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: | ||
<pre> | <pre> | ||
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"); | |||
} | |||
</pre> | |||
Das dazu gehörige Notify, welches auf den die Statusänderung lauscht und die Nötigen Daten weitergibt, würde wie folgt aussehen: | |||
<pre><NameDevice>.* {anzahl_evtparts($EVENT,$NAME)}</pre> | |||
== Command executed ausschalten == | == 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. | 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. |
Version vom 15. März 2016, 00:26 Uhr
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.