Kommunikation: Fritz <-> CCU via Fhem

Begonnen von Dragonfly, 09 Februar 2013, 07:27:55

Vorheriges Thema - Nächstes Thema

Dragonfly

Hallo an alle,
ich bin mal eben vom HomeMatic-Forum rübergerutscht, weil mich eine Idee verfolgt:

Momentan wird daran gearbeitet von der CCU aus die Fritz (OS 5.50) via SHELL zu steuern (WLAN ein/aus, usw).
Dies sollte kein Problem (mehr) sein.

Nur wäre es interessant den aktuellen Status der Fritz in der CCU anzeigen zu können - und hier kommt FHEM ins Spiel:

Ist es möglich, daß FHEM erkennt ob WLAN eingeschalten wurde (z.B. über das Telefon) und dann darauf reagiert?
Es soll von FHEM ein Befehl, ähnlich diesem wget -q -O NUL "http://192.168.125.70:8181/test.exe?x=dom.GetObject('BidCos-Wired.BidCoS-Wir:19.PRESS_SHORT').State(1)" aufgerufen werden, um in der CCU die entsprechende SystemVariable zu aktuallisieren.

In "CCU" gesprochen:
wenn "WLAN ein" dann "Script von FHEM an CCU"

Vielleicht hat ja der Eine oder Andere ein paar Anregungen und/oder Tipps.

Danke schonmal, Tom

Dragonfly

Ein Shell-Script, welches von der CCU oder anderen Linux-Geräten gestartet wird ist fast fertig.

Folgendes soll im OS 5.50 schaltbar sein:
Es kann bereits Wlan, GastWlan, 5GHzWlan, Dect ein und ausschalten und eine Anruferliste exportieren
An den Dect200 Schaltern, einem Reboot und Rufumleitung wird noch gearbeitet.


Nochmal die Frage(n):

* Kann FHEM für Fritz z.B. den WLAN-Status anzeigen und bei Statusänderung eine Aktion ausführen?
* Kann diese Aktion z.B. ein Shell-Script sein?


Für eure Hilfe wäre ich wirklich dankbar, Tom.

Dragonfly

Leider hat sich ja keiner die Zeit genommen einen Neuen etwas unter die Arme zu greifen.
Vielleicht könnt ihr mir ja wenigstens einen Tipp geben, ob ich auf dem richtigen Weg bin.

Ich habe laut diesem Beitrag (FritzBox Parameter in fhem anzeigen) folgendes erarbeitet:

define FritzBoxState weblink htmlCode {ShowFritzBoxState()}
 sub ShowFritzBoxState()
  {
    my %FritzState =
    (
    "WLAN" => `ctlmgr_ctl r wlan settings/ap_enabled`,
    "WLAN5" => `ctlmgr_ctl r wlan settings/ap_enabled_scnd`,  
    "WLANGast" => `ctlmgr_ctl r wlan settings/guest_ap_enabled`,  
    "DECT" => `ctlmgr_ctl r dect settings/enabled`,  
    );
   
    my $tag;
    my $tr_class = "odd";
    my $htmlcode = "";
    $htmlcode .= "<table>\n";
    $htmlcode .= "<tr><td><div class=\"devType\">Status</div></td></tr>\n";
    $htmlcode .= "<tr><td>\n";
    $htmlcode .= "<table class=\"block wide\" id=\"Status\">\n";
   
    foreach $tag (sort keys %FritzState)
    {
     $htmlcode .= "<tr class=\"$tr_class\"><td>\n<div class=\"col1\">$tag: </div></td>\n<td><div class=\"col2\">$FritzState{$tag}</div></td></tr>\n";
     if ($tr_class eq "odd") {$tr_class = "even"} else {$tr_class = "odd"};
    }
    $htmlcode .= "</table>\n";
    $htmlcode .= "</td></tr>\n";
    $htmlcode .= "</table>\n";
    return $htmlcode;
  }


Die Stati werden mit 0 und 1 ausgegeben, folgende Meldung im Logfile:
2013.02.12 13:16:26 1: reload: Error:Modul 99_myFBUtils deactivated:

ist das OK? diese Meldung kommt auch beim original-Script.

Kann ich hiermit aufbauen - also auf eine Statusänderung von 0 auf 1 eine Aktion ausführen lassen?

Vielleicht könnt ihr mir ja hier einen Tipp geben wie ich weitermachen kann.

LG Tom

rudolfkoenig

Ich finde dass FHEM @ FritzBox nur ein umstaendlicher Weg ist, Daten aus dem FritzBox zu extrahieren. Sinnvoller waere es direkt ueber die Fritzbox-Weboberflaeche zu pollen, oder Notfalls ueber einen ssh-server.


Wenn es FHEM sein muss:

> Ist es möglich, daß FHEM erkennt ob WLAN eingeschalten wurde (z.B. über das Telefon) und dann darauf reagiert?

Sicher, Du hast ja die Details in dem letzten Posting selbst ausgegraben. Die Abfrage geht aber auch einfacher (einzugeben im telnet oder FHEMWEB):
{ `ctlmgr_ctl r wlan settings/ap_enabled` }
usw. Da das FB keine FHEM events ausloest, muesste man aus FHEM pollen, z.Bsp. mit einem at
Um das Ergebnis im Forntend einfach pruefen zu koennen, bietet sich an, den Status in einem Dummy zu speichern:

define WLAN_STATUS dummy
define WLAN_check at +*00:05 { fhem "set WLAN_STATUS ".`ctlmgr_ctl r wlan settings/ap_enabled` }



> wget -q ...

Kann in FHEM z.Bsp. mit
{ GetFileFromURL("http://192.168.125.70:8181/test.exe?x=dom.GetObject('BidCos-Wired.BidCoS-Wir:19.PRESS_SHORT').State(1)") }

geloest werden. Es bietet sich an auf die obige Statusaenderung mit notify zu reagieren:
define WLAN_ntfy notify WLAN_STATUS {\
  if(Value("WLAN_STATUS") ne OldValue("WLAN_STATUS") {\
    GetFileFromURL "http://192.168.125.70:8181/test.exe?x=dom.GetObject('BidCos-Wired.BidCoS-Wir:19.PRESS_SHORT').State(" . Value("WLAN_STATUS")\
  }\
}


Getestet habe ich es nicht, prinzipiell koennte es so funktionieren.

Um Befehle auszuloesen kann men FHEM einfach remote steuern, dazu hat es mehrere Schnittstellen, z.Bsp. HTML (Stichwort XHR), oder plain TCP/IP (Stichwort telnet).



> 2013.02.12 13:16:26 1: reload: Error:Modul 99_myFBUtils deactivated:
> ist das OK? diese Meldung kommt auch beim original-Script.

Die Meldung ist ernsthaft so gemeint, und der in myFBUtils.pm eingegebene Code ist von fhem aus nicht zu erreichen.
Vermutlich steht in der Zeile davor, was bemaengelt wurde.

Dragonfly

ZitatIch finde dass FHEM @ FritzBox nur ein umstaendlicher Weg ist, Daten aus dem FritzBox zu extrahieren. Sinnvoller waere es direkt ueber die Fritzbox-Weboberflaeche zu pollen, oder Notfalls ueber einen ssh-server.
 

Leider ist die CCU dermaßen in die Jahre gekommen, daß sie bereits vollkommen überlastet ist - diese fällt also aus, um von der Fritz ständig Daten abzufragen.
Also sollten die Daten von der Fritz gesendet werden und da schien mir FHEM der einfachste Weg zu sein.
So wird die CCU nur beim Schalten und Setzten der Stati belastet.

Hast du auch schon was in Sachen DECT200 gemacht?
Diese Stati möchte ich auch noch auslesen (online, ein/aus).
Über Shell sind sie von der CCU bereits schaltbar.


Vielen Dank auf jedenfall - werde bei Zeiten alles Testen!
Lg Tom

rudolfkoenig

> Leider ist die CCU dermaßen in die Jahre gekommen, daß sie bereits vollkommen überlastet ist

Dann sollte man doch Wechseln :)


>  Hast du auch schon was in Sachen DECT200 gemacht?

Kommt noch.


>  Über Shell sind sie von der CCU bereits schaltbar.

Wie?

Dragonfly

Dann sollte man doch Wechseln :)
> wohin?! Noch gibt es nichts.

Wie?
> sende dir später ein vorab-Script zu

LG Tom

rudolfkoenig

> wohin?! Noch gibt es nichts.

Man koennte FHEM als schlecht bezeichnen, aber "nichts" ist echt nicht fair.
Da bin ich und unser HM-Martin jetzt beleidigt :)

Dragonfly

PN mit Script ist raus.

Dann schaut mal in eurem Forum - irgendwer hat beschrieben wann die CCU die bessere Wahl ist - auf das beziehe ich mich jetzt mal ganz frech ;-)

gaaanz LG - Tom

Dragonfly

Jetzt bin ich gleich nochmal lästig, bevor die Stimmung im Keller ist....

Da ich ja ohne Zusatz-Hardware arbeite habe ich folgendes deaktiviert:

# define autocreate autocreate
# attr autocreate autosave 1
# attr autocreate device_room %TYPE
# attr autocreate filelog ./log/%NAME-%Y.log
# attr autocreate weblink 1
# attr autocreate weblink_room Plots

# Disable this to avoid looking for new USB devices on startup
# define initialUsbCheck notify global:INITIALIZED usb create


# If the above notify did not helped, then you probably have to enable some of
# the following lines.  Verify first that /dev/xxx ist correct.

#define FHZ FHZ /dev/USB0
#define CUL CUL /dev/ttyACM0@9600 1234
#attr CUL rfmode HomeMatic

#define EUL TCM 310 /dev/ttyACM0@57600
#define BscBor TCM 120 /dev/ttyUSB0@9600
#define BscSmartConnect TCM 310 /dev/ttyUSB0@57600

Hab ich jetzt endlich mal was richtig gemacht?!?!

Danke nochmal!

rudolfkoenig

>  Hab ich jetzt endlich mal was richtig gemacht?!?!

Wie mann es nimmt :)
Das Deaktivieren ist nicht notwendig, fhem startet in der Standard config auch ohne Zusatz-Hardware.

Dragonfly

Hallo nochmal!

Habe dies:
define WLAN_STATUS dummy
define WLAN_check at +*00:05 { fhem "set WLAN_STATUS ".`ctlmgr_ctl r wlan settings/ap_enabled` }
in meine fhem.cfg eingetragen - leider kommt beim Status nur ??? raus. Ich habe bei google-groups sowas ähnliches gefunden - mit dem selben Ergebnis, obwohl der Schreiber den Staus auslesen konnte. Aus diesem Grund habe ich es mit der geposteten Variante versucht.

Diese Fehlermeldung habe ich gefunden:
2013.02.13 03:02:00 3: Can't find string terminator '"' anywhere before EOF at (eval 8848) line 1.


Wo kann jetzt der Fehler liegen - hab ich etwas "verkonfiguriert"?
Kann die Installation etwas versemmelt haben?
Root habe ich, die FB neugestartet auch.
Kann hier ein Kommunikationsproblem vorliegen wie bei das Passwortabfrage?


define WLAN_ntfy notify WLAN_STATUS {\
  if(Value("WLAN_STATUS") ne OldValue("WLAN_STATUS") {\
    GetFileFromURL "http://192.168.125.70:8181/test.exe?x=dom.GetObject('BidCos-Wired.BidCoS-Wir:19.PRESS_SHORT').State(" . Value("WLAN_STATUS")\
  }\
}
Das verstehe ich jetzt schon richtig - bei Status-Änderung wird die Aktion ausgelöst.
Das ginge dann nicht - es müßte bei Änderung auslösen und dann aber den aktuellen status übermitteln:
wlan_status 1 mit aktion 1 ausführen bzw. wlan_status 0 mit aktion 0.

Nochmals vielen Dank - Tom

PS: Gibt´s einen Spenden-Button?

rudolfkoenig

Versuch es mal Schritt fuer Schritt, wie es in http://fhem.de/commandref.html#perl beschrieben ist.

Dragonfly

Hallo Rudi.

Ich bin echt am Verzweifeln.

Deinen Rat habe ich mir zu Herzen genommen und habe
{ 1+1 }zusammengezählt - also läuft Perl.

Gebe ich folgendes ein { `ctlmgr_ctl r wlan settings/ap_enabled` } kommt gar nichts raus.

Ich habe root überprüft:
1540 root     10816 S    perl fhem.pl fhem.cfg

Jetzt soll ja noch ein Benutzer mit Namen "fhem" mit FTP-Zugriff angelegt werden, das hatte ich übersehen.
Das Passwort von hier: /etc/passwd

So sieht das bei mir aus:
root:x:0:0:root:/:/bin/sh
boxusr13:xxxx:1013:0:box user:/home-not-used:/bin/sh
boxusr13int:xxxx:2013:0:box user:/home-not-used:/bin/sh
boxusr12:xxxx:1012:0:box user:/home-not-used:/bin/sh
boxusr12int:xxxx:2012:0:box user:/home-not-used:/bin/sh
boxusr11:xxxx:1011:0:box user:/home-not-used:/bin/sh
boxusr11int:xxxx:2011:0:box user:/home-not-used:/bin/sh
boxusr10:xxxx:1010:0:box user:/home-not-used:/bin/sh
boxusr10int:xxxx:2010:0:box user:/home-not-used:/bin/sh

kein fhem, boxusr80 oder boxusr99

Liegt der Fehler dort?

Danke nochmals - ich weiß es nervt :-(

rudolfkoenig

Feststellen, als welcher user fhem laeuft:
{ `id` }

Pruefen, ob du die AVM-chroot oder fhem.de Version hast:
{ `pwd` }
-> fhem.de meldet was von /var/media/ftp, AVM was von /usr...
Bei der AVM Version funktioniert der Aufruf vmtl. nicht, Du hast vmtl. die fhem.de Version.

Mit
{ `ctlmgr_ctl r wlan settings/ap_enabled 2>&1 ` }
muesste man auch die Fehlermeldung im telnet/FHEMWEB sehen, es sei denn es gibt gar keine Fehlermeldung, und dein WLAN ist ausgeschaltet: dann gibt es keine Meldung :)

Ob der Aufruf auch ohne root-rechte geht, weiss ich nicht, evtl. musst Du den Abschnitt in startfhem auskommentieren oder loeschen.