FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Borkk am 24 März 2014, 19:45:13

Titel: Aktionen auf Remoteserver ausführen (FHEM2FHEM)
Beitrag von: Borkk am 24 März 2014, 19:45:13
Hallo zusammen,

ich plage mich seit ein paar Tagen mit einem Problem rum und komme nicht zu einem smarten Ergebnis.

Ausgangslage:
Es geht um 2 FHEM Installationen. Eine auf einem RPI und eine auf einer FB7490. Beide sind via "FHEM2FHEM LOG:.*" gekoppelt. Der RPI ist Haupt- die FB ist Remoteserver. Ich nutze die FB nur für PRESENCE Meldungen von WLAN Geräten um RESIDENTS Stati zu setzen. Das funktioniert einwandfrei da ich am Hauptserver einfach die PRESENCE Readings des Remoteserver direkt über notify´s auswerten kann.

So weit so gut. Ich möchte nun das Gast-WLAN der FB mittels FHEM ein/ausschalten. (siehe : http://forum.fhem.de/index.php/topic,11297.0.html) Das funktioniert über die FHEM Oberfläche auf dem FHEM der FB auch soweit.

So nun zu meinem Problem.

Ich möchte nun mittels einem Homematic Schalter das WLAN ein/ausschalten. Den ganzen HM Kram habe ich natürlich auf dem RPI installiert. Aber wie bekomme ich jetzt irgendeinen Befehl vom Hauptserver auf den Remoteserver. Das klingt erst mal einfach aber der Teufel steckt im Detail.

1.Versuch:
Einfach eine zweite "FHEM2FHEM LOG:-*" Koppelung in umgekehrte Richtung herstellen. -> JA, das funktioniert grundsätzlich allerdings geht die FB unter der Last der ganzen Meldungen vom RPI FHEM in die Knie.

2.Versuch:
Eine auf ein Gerät begrenzte "FHEM2FHEM LOG:HM_Switch" Kopplung von FB zum RPI schalten. -> JA, auch das geht grundsätzlich aber auch hier sausen viele 1000 Meldungen/min völlig sinnlos zur FB und belasten sie.

3. cloneDummy:
Hab ich irgendwie in diese Richtung nicht an den Start bekommen.

Wer hat eine Idee. Es muss lediglich ein Dummy Device mit setstate on/off auf dem Remoteserver geschaltet werden.
Titel: Antw:Aktionen auf Remoteserver ausführen (FHEM2FHEM)
Beitrag von: der-Lolo am 24 März 2014, 20:06:44
ich habs nicht probiert - aber vielleicht reicht es wenn du die fritzbox per telnet von der hauptinstallation aus ansprichst...
Titel: Antw:Aktionen auf Remoteserver ausführen (FHEM2FHEM)
Beitrag von: Joachim am 24 März 2014, 20:56:44
Moin Borkk,

Zitat3. cloneDummy:
Hab ich irgendwie in diese Richtung nicht an den Start bekommen.

Wenn Du nicht penibel aufpasst, gibt das z.Z. noch eine Rekursion, da auf beiden Systemen FHEM2FHEM aktiv sein muß.
Ich würde davon im Moment noch die Finger lassen.

Gruß Joachim
Titel: Antw:Aktionen auf Remoteserver ausführen (FHEM2FHEM)
Beitrag von: rudolfkoenig am 25 März 2014, 11:48:21
Die FHEM2FHEM LOG Regexp koennte genauer spezifiziert werden, damit nur die notwendigen Events verschickt werden.
Titel: Antw:Aktionen auf Remoteserver ausführen (FHEM2FHEM)
Beitrag von: betateilchen am 25 März 2014, 11:51:21
Zitat von: der-Lolo am 24 März 2014, 20:06:44
ich habs nicht probiert - aber vielleicht reicht es wenn du die fritzbox per telnet von der hauptinstallation aus ansprichst...

oder zur Not sogar per http :)

Grundsätzlich funktioniert sowas ganz ohne FHEM2FHEM.
Titel: Antw:Aktionen auf Remoteserver ausführen (FHEM2FHEM)
Beitrag von: Borkk am 25 März 2014, 15:24:34
Per Http wäre mir das lieber da ich aus Sicherheitsgründen den Telnetd auf der FB nicht offen lasen möchte. Allerdings fehlt mir dazu jeder Ansatz wie man sowas macht. Man muss sich ja auch authentifizieren...
Titel: Antw:Aktionen auf Remoteserver ausführen (FHEM2FHEM)
Beitrag von: erwin am 26 März 2014, 13:57:38
Hi Borkk,

evtl. wäre das eine Lösung für dich: http://www.fhemwiki.de/wiki/Anwesenheitserkennung_-_Remote_Fritzbox (http://www.fhemwiki.de/wiki/Anwesenheitserkennung_-_Remote_Fritzbox)
Bei Variante 2 braucht's kein FHEM / Telnet auf der Fritzbox.
Und wie man per http die weboberfläche abfrägt, ist auch mit drin!
l.g. erwin
Titel: Antw:Aktionen auf Remoteserver ausführen (FHEM2FHEM)
Beitrag von: Borkk am 27 März 2014, 08:44:15
Hallo Zusammen,

danke für die Tipp´s aber ich glaube ich stehe kurz vor der Lösung. Ich brauche nur über einen Notify auf dem Hauptserver einen Http Befehl auf dem Remoteserver abzusetzen:

Im Browser klappt das problemlos so:

Gast WLAN einschalten: http://192.168.1.2:8083/fhem?cmd=set WLAN on

Gast WLAN ausschalten: http://192.168.1.2:8083/fhem?cmd=set WLAN off

Eigentlich ganz simpel :-)

Leider klappt es noch nicht über einen GetHttpFile. (http://www.fhemwiki.de/wiki/HTML_Aufruf_senden)

Ich habe bisher folgende Syntax versucht:

define wlan_ein notify w_schalter:on { GetHttpFile("192.168.1.2:8083", "/fhem?cmd=set WLAN on") }
define wlan_ein notify w_schalter:on { GetHttpFile("192.168.1.2:8083", "/fhem?cmd=set%20WLAN%20on") }
define wlan_ein notify w_schalter:on { GetHttpFile("192.168.1.2:8083", "/fhem?cmd=set%%20WLAN%%20on") }

Und das ganze noch mal so:

define wlan_ein notify w_schalter:on { GetHttpFile("192.168.1.2:8083/fhem?cmd=set WLAN on") }
define wlan_ein notify w_schalter:on { GetHttpFile("192.168.1.2:8083/fhem?cmd=set%20WLAN%20on") }
define wlan_ein notify w_schalter:on { GetHttpFile("192.168.1.2:8083/fhem?cmd=set%%20WLAN%%20on") }

Leider passiert gar nichts :-( Weder mit einen trigger noch am Schalter selbst.

Muss evtl. auf RPI FHEM noch was installiert werden um GetHttpFile nutzen zu können?
Titel: Antw:Aktionen auf Remoteserver ausführen (FHEM2FHEM)
Beitrag von: rudolfkoenig am 27 März 2014, 09:16:49
"attr lobal verbose 5" setzen, und beobachten, was gesendet wird.
Titel: Antw:Aktionen auf Remoteserver ausführen (FHEM2FHEM)
Beitrag von: Mitch am 27 März 2014, 09:51:15
Kann jetzt gerade nicht testen, aber sollte es nicht so funktionieren:
system ("http://192.168.1.2:8083/fhem?cmd=set WLAN on")

ansonsten feällt mir noch CURL ein:
curl -s http://192.168.1.2:8083/fhem?cmd=set WLAN on
Titel: Antw:Aktionen auf Remoteserver ausführen (FHEM2FHEM)
Beitrag von: erwin am 27 März 2014, 11:44:40
Hi Borkk,
ZitatIch habe bisher folgende Syntax versucht:

define wlan_ein notify w_schalter:on { GetHttpFile("192.168.1.2:8083", "/fhem?cmd=set WLAN on") }
define wlan_ein notify w_schalter:on { GetHttpFile("192.168.1.2:8083", "/fhem?cmd=set%20WLAN%20on") }
define wlan_ein notify w_schalter:on { GetHttpFile("192.168.1.2:8083", "/fhem?cmd=set%%20WLAN%%20on") }

Und das ganze noch mal so:

define wlan_ein notify w_schalter:on { GetHttpFile("192.168.1.2:8083/fhem?cmd=set WLAN on") }
define wlan_ein notify w_schalter:on { GetHttpFile("192.168.1.2:8083/fhem?cmd=set%20WLAN%20on") }
define wlan_ein notify w_schalter:on { GetHttpFile("192.168.1.2:8083/fhem?cmd=set%%20WLAN%%20on") }

Leider passiert gar nichts :-( Weder mit einen trigger noch am Schalter selbst.
ich denke, du scheiterst am Web-Login:
schau dir bitte die sub FB_doCheckPW (in FritzBoxUtils.pm) an....

ich habs so gelöst:

use FritzBoxUtils;
.
.
.
   my $sid = FB_doCheckPW($ipstring,$user,$pwd);
   Log3 "RemoteFritzBox", 5, "Login SID=$sid";

   if (! $sid || $sid eq "0") {
      Log3 "RemoteFritzBox", 1, "Login to Fritzbox failed";
      return "Fritzbox login failed";
   }

   my $url = "http://$ipstring/wlan/wlan_settings.lua" . '?sid=' . "$sid";
   Log3 "RemoteFritzBoxWeb", 5, "HTTP request=$url";
   my $request = {hideurl   => 0,
               url       => $url,
               timeout   => 3,
               data      => '',
               noshutdown=> 1,
               loglevel  => 5,
             };
   my ($err, $data) = HttpUtils_BlockingGet($request);
   if($err) {
      return "RemoteFritzBoxWeb error $err during Web query";
   }

... danach steht in $data der Inhalt der Web-Seite.....

have fun
erwin
Titel: Antw:Aktionen auf Remoteserver ausführen (FHEM2FHEM)
Beitrag von: limats am 27 März 2014, 14:04:15
Hallo,

ich denke, das ist nicht das Problem, da er ja keinen Request auf die Fritzbox-Oberfläche machen will, sondern auf den FHEM, der auf der Box installiert ist.

Ich hab übrigens genau die gleiche Thematik bei mit mit zwei gegenläufigen FHEM2FHEM gelöst. Funktioniert astrein. Allerdings muss man wie oben bereits erwähnt aufpassen, dass man die RegEx für die zu übermittelnden Log-Einträge richtig setzt.

Gruß
Leo
Titel: Antw:Aktionen auf Remoteserver ausführen (FHEM2FHEM)
Beitrag von: Borkk am 27 März 2014, 14:58:36
@Limats: Genau, ich möchte einen Dummy auf dem FHEM der FB setzen, den Rest macht dann der FHEM schon  und wie schon geschrieben kann ich den o.g. Request von einem beliebigen Browser in meinem LAN ausführen.

@Mitch: Sorry wenn ich auf dem Schlauch stehe. Was sind das für Befehle die du dort erwähnst??? Ist das ein Teil eines Notify´s ??

Titel: Antw:Aktionen auf Remoteserver ausführen (FHEM2FHEM)
Beitrag von: Borkk am 27 März 2014, 23:28:45
Hallo Zusammen,

Ok, ich habs. So gehts:

define wlan_ein notify w_schalter:on { GetHttpFile("192.168.1.2:8083", "/fhem?cmd=set%%20WLAN%%20on") }

Scheinbar hatte ich genau diesen Syntax dann doch nicht ausprobiert.

Danke für Eure Hilfe  :)
Titel: Antw:Aktionen auf Remoteserver ausführen (FHEM2FHEM)
Beitrag von: Gunther am 25 April 2014, 12:42:53
Kannst Du mir bitte im Detail erklären, was Du auf der Fritzbox und auf dem RPI in der fhem.cfg gemacht hast?

Möchte ebenfalls WLAN und Gast-WLAN schalten können.
Titel: Antw:Aktionen auf Remoteserver ausführen (FHEM2FHEM)
Beitrag von: UliM am 25 April 2014, 19:08:30
Hi,
ich hätt auch noch ne Variante zu bieten - in diesem Fall ein Aufruf von fhem auf der FB an einen anderen fhem-Server - sollte aber in der Gegenrichtung ebenso tun:
system("echo 'set myRemoteDevice on' | /sbin/socat - TCP:192.168.1.123:7072");

Ggf muss der Pfads zu socat angepasst werden.

=8-)
Titel: Antw:Aktionen auf Remoteserver ausführen (FHEM2FHEM)
Beitrag von: Gunther am 15 Juni 2014, 00:40:28
hole den Thread gerne nochmal hoch. Keine der Lösungen bekomme ich umgesetzt.

Meine Situation: FHEM auf RPI (Hauptinstallation), FHEM auf Fritzbox (nur für WLAN-Steuerung).

Wie kann ich nun über meinen RPI WLAN an und ausschalten auf der Fritzbox?
Titel: Antw:Aktionen auf Remoteserver ausführen (FHEM2FHEM)
Beitrag von: epsrw1 am 15 Juni 2014, 17:51:00
evtl wäre es langfristig sinnvoll, das fhem2fhem zu erweitern um eine ORIGIN angabe im event. so wären gleichzeitig sowohl zirkelbezüge in den griff zu bekommen, als auch das mod. um funktionalität für umgebungen mit mehr als 2 servern bereichert.
clonedummy o.a. könnte dann in beide richtungen gleichzeitig eingesetzt werden
gruß,florian
Titel: Antw:Aktionen auf Remoteserver ausführen (FHEM2FHEM)
Beitrag von: epsrw1 am 18 Juni 2014, 11:53:22
hat in einer ähnlichen umgebung mit gegenläufigem f2f-remote bei mir mit folgendem code problemlos funktioniert:
(leider mit zusätzlicher LWP lib)

use LWP::Simple;
my($valvepos);
my $zhkValveposDevice = AttrVal($name, "zhkValveposDevice", "valves1");
my $zhkValveposDeviceReading = AttrVal($name, "zhkValveposDeviceReading", "state");
#my $zhkValveposDeviceRemoteUrl = AttrVal($name, "zhkValveposDeviceRemoteUrl", "localhost");
my $zhkValveposDeviceRemoteUrl = AttrVal($name, "zhkValveposDeviceRemoteUrl", "192.168.0.20:8083");
if($zhkValveposDeviceRemoteUrl eq "localhost"){
$valvepos=ReadingsVal($zhkValveposDevice,$zhkValveposDeviceReading,"err");
}else{
my($query)="http://".$zhkValveposDeviceRemoteUrl."/fhem?cmd=get%20".$zhkValveposDevice."%20".$zhkValveposDeviceReading."&XHR=1";
$query= get $query;
my(@res)=split(/: /,$query);
if($#res ne "1"){
$valvepos="split-err";
}else{
$valvepos=$res[1];
}
if($valvepos eq "err"){
Log3($name, 3, "ZHK $name ValvepositionRegler unable to get device reading");
}
readingsSingleUpdate($hash, "valvepos", $valvepos, 1);
Log3($name, 3, "ZHK $name ValvepositionRegler '$query' debug l.".__LINE__);
}
Titel: Antw:Aktionen auf Remoteserver ausführen (FHEM2FHEM)
Beitrag von: Gunther am 18 Juni 2014, 14:20:35
Ich zitiere mal Deine Signatur:
ZitatIch habe keine Ahnung, aber davon wenigstens ganz viel

Leider kann ich mit Deiner lösung noch nicht so richtig was anfangen. LWP habe ich mal gegoogled. Wofür brauche ich das im zusammenhang mit Deinem Code.
Der Code steht in der fhem.cfg?
Titel: Antw:Aktionen auf Remoteserver ausführen (FHEM2FHEM)
Beitrag von: uland2012 am 30 Oktober 2014, 21:32:56
Zitat von: Borkk am 24 März 2014, 19:45:13
Hallo zusammen,



Ausgangslage:
Es geht um 2 FHEM Installationen. Eine auf einem RPI und eine auf einer FB7490. Beide sind via "FHEM2FHEM LOG:.*" gekoppelt. Der RPI ist Haupt- die FB ist Remoteserver. Ich nutze die FB nur für PRESENCE Meldungen von WLAN Geräten um RESIDENTS Stati zu setzen. Das funktioniert einwandfrei da ich am Hauptserver einfach die PRESENCE Readings des Remoteserver direkt über notify´s auswerten kann.


Hallo,

kannst Du mir bitte aufzeigen wie Du das gelöst hast?

Ich habe auch das Presence auf der FB am Laufen
Bekomme auch den Presence auf den Raspi übertragen und angezeigt.

Meine Hürde ist jetzt nur wie bekomme ich den Status presence / absent in den Roommate übertragen ?

Danke für die Hilfe.

Gruß
Uwe
Titel: Antw:Aktionen auf Remoteserver ausführen (FHEM2FHEM)
Beitrag von: Borkk am 03 Dezember 2014, 22:20:14
Hallo Uwe,

ich bin seit längerem mal wieder hier im Forum, falls du das Problem noch nicht gelöst hast, hier meine Lösung.

prs_roman = ist die PRESENCE variable die von der FB gesetzt wird
Roman = ist der ROMANE oder GUEST

prs_roman {
if ( Value("prs_roman") eq "present") {fhem("set Roman state home")}
if ( Value("prs_roman") eq "absent") {fhem("set Roman state absent")}
}