FHEM Forum

FHEM => Frontends => Thema gestartet von: dadoc am 04 Juni 2014, 13:40:39

Titel: Fritz.Repeater N/G Matrixdisplay als FHEM "Frontend"?
Beitrag von: dadoc am 04 Juni 2014, 13:40:39
Guten Tag,
mit wachsender Begeisterung experimentiere ich damit, mein FS20-System von IP Symcon/FHZ1300 auf FHEM/Fritz.Box 7490/CUL umzustellen.
Eines der Features, die mir an meiner bisherigen Konfiguration besonders gefielen war, dass es gelungen war, die aktuellen Wetterdaten des KS300 auf dem Display des Fritz.Repeater N/G als Lauftext anzuzeigen, inkl. "Symbole" für "Es regnet" bzw. "Es regnet nicht".
Das geht über CURL, und der (php-)Code in IP Symcon sieht so aus:

<?
$fritzrepeatergui    = 'http://fritz.repeater/cgi-bin/webcm'; // X durch IP des Repeaters ersetzen
$fritzseite  = '../html/de/menus/menu2.html';
$password = "xxxxxxxxxxxx"; //PW fuer Repeater-WebUI
$rain=GetValueBoolean(12345 /*[Wetter\FS20 Regensensor\Status]*/);

if ($rain == true) {
$regen=" /// ";
}
else {
$regen=" *** ";
}

$text = (GetValueFloat(12345 /*[Wetter\KS300 Wettersensor\Temperatur]*/) . " oC " . $regen . GetValueInteger(45678 /*[Wetter\KS300 Wettersensor\Abs. Luftfeuchtigkeit]*/) . "% "); // Anzuzeignde Variablen und Texte (bis max. 240 Zeichen)
$ch   = curl_init($fritzrepeatergui . '?getpage=../html/index_inhalt.html');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_exec($ch);
curl_setopt($ch, CURLOPT_POSTFIELDS, "login:command/password={$password}");
curl_exec($ch);
curl_setopt($ch, CURLOPT_POSTFIELDS, "getpage={$fritzrepeatergui}&var:pagename=infoled&nlr:settings/TDS_ScrollText={$text}");
curl_exec($ch);
curl_close($ch);
?>


Soweit ich das über die SF sehe, war das noch kein Thema hier im Forum, oder hat sich da schon einmal jemand daran versucht? Ginge das über CURL oder gibt es alternative Wege, die Daten auf das Repeater-Display zu bekommen?
Viele Grüße
Martin
Titel: Antw:Fritz.Repeater N/G Matrixdisplay als FHEM "Frontend"?
Beitrag von: dadoc am 08 Juni 2014, 11:04:23
ok, ich gebe es zu, im Eifer der Begeisterung war meine Frage doch sehr ungenau ausgefallen. Daher hier vollständiger.
Der besagte AVM-Repeater ist ein WLAN-Repeater mit einem außergewöhnlichen Display, das aus dicken roten LEDs besteht. Normalerweise wird da als Lauftext die IP, die Bitrate usw.angezeigt. Man kann im Web-UI des Repeaters aber auch einen beliebigen Text einstellen, der dann als Lauftext angezeigt wird.
Mein Ziel ist es, mit FHEM bestimmte Werte/Readings (konkret die des KS300 Wettersensors) in die Repeater-Konfiguration schreibt, wann immer sich einer dieser Werte ändert. Das geht über das Beschicken eines Deep Links des Repeaters, was ich früher über CURL gelöst hatte.
Nachdem ich - als Nicht-Programmierer - mit HttpUtils.pm nicht so recht klar gekommen bin, habe ich es zunächst einmal in purem Perl probiert und bin jetzt so weit, dass das Hineinschreiben mit einem Perl-Script außerhalb von FHEM funktioniert, und zwar mit diesem Code:
use strict;
use HTTP::Request::Common qw(POST);
use LWP::UserAgent;
use LWP::Simple;

my $Text = "Sehr warm heute"; # Inhalt, der als Lauftext angezeigt werden soll

chomp($Text);

my $userag = LWP::UserAgent->new;
my $write_text = POST 'http://192.168.50.201/cgi-bin/webcm', # IP des Repeater
  [       
  'errorpage' => '../html/de/menus/menu2.html',
  'getpage' => '../html/de/menus/menu2.html',
  'nlr:settings/TDS_Timeout' => 300,
  'nlr:settings/TDS_ShowMask' => 4095, 
  'nlr:settings/TDS_Config' => 3,
  'nlr:settings/TDS_Orientation' => '0',
  'nlr:settings/TDS_ScrollText' => $Text.'       ',
  'time:settings/time' => '1258493499,-60',
  'var:errorpagename' => 'infoled',
  'var:menu' => 'system',
  'var:pagemaster' => '',
  'var:pagename' => 'infoled',
  'var:pagetitle' => '',
  'var:settings/time' => ''

  ];

$userag->request($write_text);
1;

M.a.W.: Wenn ich diese Skript laufen lasse, zeigt der Repeater den Lauftext "Sehr warm heute".
Was ich nicht schaffe ist es, das in FHEM zu integrieren. Ich habe den Code in die 99_MyUtils.pm eingefügt, in dieser Form:

sub repgui()
{
#use strict;
use HTTP::Request::Common qw(POST);
use LWP::UserAgent;
use LWP::Simple;

my $Text = "Sehr warm heute"; # Inhalt, der als Lauftext angezeigt werden soll

chomp($Text);

my $userag = LWP::UserAgent->new;

my $write_text = POST 'http://192.168.50.201/cgi-bin/webcm', # IP des Repeater
  [       
  'errorpage' => '../html/de/menus/menu2.html',
  'getpage' => '../html/de/menus/menu2.html',
  'nlr:settings/TDS_Timeout' => 300,
  'nlr:settings/TDS_ShowMask' => 4095, 
  'nlr:settings/TDS_Config' => 3,
  'nlr:settings/TDS_Orientation' => '0',
  'nlr:settings/TDS_ScrollText' => $Text.'       ',
  'time:settings/time' => '1258493499,-60',
  'var:errorpagename' => 'infoled',
  'var:menu' => 'system',
  'var:pagemaster' => '',
  'var:pagename' => 'infoled',
  'var:pagetitle' => '',
  'var:settings/time' => ''

  ];

$userag->request($write_text);
}

Wenn ich das dann mit {repgui()} aufrufe, tut sich eine ganze Weile nichts (in Firefox; auf dem iPad kommt "Connection lost, trying a reconnect every 5 seconds...."); nach einer Weile erscheint dann HTTP::Response=HASH(0x1225290) bzw. auch mit anderen Hash-Werten
Ich wäre überglücklich, wenn mir jemand sagen könnte, was ich falsch mache bzw. wie ich es richtig machen kann.
Viele Grüße
Martin
Titel: Antw:Fritz.Repeater N/G Matrixdisplay als FHEM "Frontend"?
Beitrag von: P.A.Trick am 08 Juni 2014, 11:45:01
Hallo Martin,

ich konnte das Verhalten nachstellen. Was mir aufgefallen ist, dass im Beispiel-Code kein Passwort enthalten ist! Ich denke ohne Passwort,
wird der Repeater das Kommando nicht akzeptieren, oder?

LG
Patrick
Titel: Antw:Fritz.Repeater N/G Matrixdisplay als FHEM "Frontend"?
Beitrag von: dadoc am 08 Juni 2014, 11:51:40
Patrick,
Ich habe das PW des Repeaters vorübergehend deaktiviert, d.h. man kommt nun ohne PW über die IP direkt auf dessen Web-UI. Wie gesagt, über das Perl Skript lässt sich die Einstellung ja korrekt ändern.
Grüße
Martin
Titel: Antw:Fritz.Repeater N/G Matrixdisplay als FHEM "Frontend"?
Beitrag von: P.A.Trick am 08 Juni 2014, 12:23:11
Ok habe mal eben mein Passwort ausgeschaltet und getestet. Klappt!
Vermutung: Prüfe mal deine IP oder nimm direkt fritz.repeater :-)
Titel: Antw:Fritz.Repeater N/G Matrixdisplay als FHEM "Frontend"?
Beitrag von: dadoc am 08 Juni 2014, 12:36:28
Hallo Patrick,
Zitat von: P.A.Trick am 08 Juni 2014, 12:23:11
Klappt!
Ich glaube, wir reden ein wenig aneinander vorbei. Ich vermute, Dein "Klappt!" bezieht sich auf das Ausführen des Stand-Alone Perl-Scripts? Das klappt ja bei mir auch bestens:
Grüße
Martin
Titel: Antw:Fritz.Repeater N/G Matrixdisplay als FHEM "Frontend"?
Beitrag von: P.A.Trick am 08 Juni 2014, 12:41:45
Ich habe deine Perl Funktion in mein fhem integriert und erfolgreich getestet! Ich hatte zuerst auch die falsche Router ip eingetragen und die gleichen Symptome wie du!  Deshalb prüfe bitte die Ip und schaue auch mal ins fhem.log!
Titel: Antw:Fritz.Repeater N/G Matrixdisplay als FHEM "Frontend"?
Beitrag von: dadoc am 08 Juni 2014, 13:11:36
Zitat von: P.A.Trick am 08 Juni 2014, 12:41:45
Ich hatte zuerst auch die falsche Router ip eingetragen und die gleichen Symptome wie du!  Deshalb prüfe bitte die Ip und schaue auch mal ins fhem.log!
Die IP ist definitiv dieselbe, und auch mit http://fritz.repeater ist das Ergebnis dasselbe.
Das Log sagt (verbose 5):

2014.06.08 13:02:25 4: HTTP FHEMWEB:192.168.50.205:51536 GET /fhem&cmd=%7Brepgui%28%29%7D
2014.06.08 13:02:25 5: Cmd: >{repgui()}<
2014.06.08 13:02:46 4: /fhem&cmd=%7Brepgui%28%29%7D / RL:1103 / text/html; charset=UTF-8 / Content-Encoding: gzip
/
2014.06.08 13:02:46 5: CUL/RAW: /T554500AA0004

2014.06.08 13:02:46 4: CUL_Parse: CUL_0 T554500AA0004 -72
2014.06.08 13:02:46 5: CUL_0 dispatch 810c04xx0909a00155450000aa00

ZitatIch habe deine Perl Funktion in mein fhem integriert und erfolgreich getestet!
Ich glaube, da ist mein Problem als Anfänger. Kannst Du mir sagen, wie Du das in FHEM integriert hast und wie Du es aufrufst? So wie ich es im ersten Post beschrieben habe oder anders?
Titel: Antw:Fritz.Repeater N/G Matrixdisplay als FHEM "Frontend"?
Beitrag von: P.A.Trick am 08 Juni 2014, 13:17:01
Ich habe die Funktion aus Post #2 in die 99_MyUtils.pm übernommen. Du kannst die Funktion dann in fhem wie jede andere Perl-Funktion nutzen.
Deine Funktion habe ich noch erweitert, dass man einen String übergeben kann.

##########################################################
# Funktion zum senden eine Nachricht an den FB Repeater
##########################################################
sub repgui($)
{
#use strict;
use HTTP::Request::Common qw(POST);
use LWP::UserAgent;
use LWP::Simple;

my ($Text) = @_;
chomp($Text);

my $userag = LWP::UserAgent->new;

my $write_text = POST 'http://fritz.repeater/cgi-bin/webcm', # IP des Repeater
  [       
  'errorpage' => '../html/de/menus/menu2.html',
  'getpage' => '../html/de/menus/menu2.html',
  'nlr:settings/TDS_Timeout' => 300,
  'nlr:settings/TDS_ShowMask' => 4095, 
  'nlr:settings/TDS_Config' => 3,
  'nlr:settings/TDS_Orientation' => '0',
  'nlr:settings/TDS_ScrollText' => $Text.'       ',
  'time:settings/time' => '1258493499,-60',
  'var:errorpagename' => 'infoled',
  'var:menu' => 'system',
  'var:pagemaster' => '',
  'var:pagename' => 'infoled',
  'var:pagetitle' => '',
  'var:settings/time' => ''

  ];

$userag->request($write_text);
}


Ein notify definiert und mir meinen aktuellen Stromverbrauch anzeigen lassen!

2014.06.08 13:00:03 4: notify_Strom_Repeater_Info exec { repgui("Stromverbrauch: 0.96 KW/h");; }
2014.06.08 13:00:03 3: notify_Strom_Repeater_Info return value: HTTP::Response=HASH(0x164d860)


Ich vermute das das Problem auf deiner Fritte liegt. Kannst du das Perl Skript mal in der Shell auf der Fritzbox direkt starten?
Titel: Antw:Fritz.Repeater N/G Matrixdisplay als FHEM "Frontend"?
Beitrag von: dadoc am 08 Juni 2014, 13:42:34
Danke Patrick...
Zitat von: P.A.Trick am 08 Juni 2014, 13:17:01
Ich vermute das das Problem auf deiner Fritte liegt. Kannst du das Perl Skript mal in der Shell auf der Fritzbox direkt starten?
Bitte entschuldige die banale Nachfrage, den trotz allen Suchens in den letzten Tagen in der Doku, Web, Forum habe ich genau das nicht gefunden: Wie rufe ich ein Perl Skript auf der FB direkt auf? mit "per xyz.pl" im Eingabefeld jedenfalls nicht :( Muss ich per SSH o.ä. auf die FB? Und das Skript speichere ich direkt in fhem / FHEM.
Titel: Antw:Fritz.Repeater N/G Matrixdisplay als FHEM "Frontend"?
Beitrag von: P.A.Trick am 08 Juni 2014, 13:44:38
Du musst den Telnet Zugang via Telefon aktivieren!
Schaue mal hier nach!

http://www.tecchannel.de/server/extra/432803/tuning_hacks_fritzbox_fritz_box_erweiterungen_ftp_telnet/index4.html
Titel: Antw:Fritz.Repeater N/G Matrixdisplay als FHEM "Frontend"?
Beitrag von: dadoc am 08 Juni 2014, 16:13:44
Danke Patrick,
Telnet ist nunaktiviert, aber beim Aufruf
./ perl rep.pl
aus dem Verzeichnis FHEM bekomme ich ein "-sh: ./: Permission denied", ebenso wie bei
./ perl -V
aus dem Verzeichnis fhem.
Muss die Fritz.Box gefreetzed sein, damit das funktioniert? Oder muss man sich beim telnet mit anderen als den normalen Fritz.Box-Web-UI daten einloggen, um perl ausführen zu dürfen?
Titel: Antw:Fritz.Repeater N/G Matrixdisplay als FHEM "Frontend"?
Beitrag von: dadoc am 08 Juni 2014, 16:44:05
ok, bin einen Schritt weiter im Erkenntnisprozess. Anscheinend lief FHEM nicht als root (möglicherweise weil ich es zuerst in Form der AVM Laborversion installiert hatte?).
Das habe ich nun geändert.
ps ergibt nun zwar
1432 root     16636 S    perl fhem.pl fhem.cfg

aber
./ perl -V
ergibt immer noch
-sh: ./: Permission denied
Was mache ich falsch?
Titel: Antw:Fritz.Repeater N/G Matrixdisplay als FHEM "Frontend"?
Beitrag von: Thorsten Pferdekaemper am 08 Juni 2014, 16:51:02
Zitat von: dadoc am 08 Juni 2014, 16:44:05
./ perl -V
ergibt immer noch
-sh: ./: Permission denied
Was mache ich falsch?
Das Blank zwischen "./" und "perl" ? ...oder überhaupt das "./" vor "perl -v"?
Versuch mal einfach nur "perl -v" bzw. "perl rep.pl".
Gruß,
   Thorsten
Titel: Antw:Fritz.Repeater N/G Matrixdisplay als FHEM "Frontend"?
Beitrag von: dadoc am 08 Juni 2014, 16:56:49
# perl rep.pl
-sh: perl: not found
# ./perl -V
./perl: can't load library 'libnsl.so.0'

Wie gesagt, im Verzeichnis var/InternerSpeicher/fhem, in dem ein ls perl anzeigt.
Vielleicht doch etwas mit den Pfaden durcheinander nach der Umstellung von der AVM Laborversion auf das FHEM Image?
Titel: Antw:Fritz.Repeater N/G Matrixdisplay als FHEM "Frontend"?
Beitrag von: dadoc am 08 Juni 2014, 18:07:52
Neue Erkenntnis: wenn ich, wie in einem anderen Thread (http://forum.fhem.de/index.php?topic=18367.0) beschrieben,
source startfhem
eingebe, kommt keine Fehlermeldung mehr, ein "Hallo Welt"-Perl-Skript läuft korrekt von der Shell aus ausfgerufen.
Mein Repeater-Skript läuft auch ohne Fehlermeldung, allerdings auch nach wie vor ohne den gewünschten Effekt. Es dauert nach dem Aufruf ca. 10 sek., bis der Prompt wieder erscheint.
Wird irgendjemand daraus schlau?
Titel: Antw:Fritz.Repeater N/G Matrixdisplay als FHEM "Frontend"?
Beitrag von: dadoc am 09 Juni 2014, 13:22:35
Es geht auf der Fritzbox und in FHEM bei mir zwar immer noch nicht (Hilfe!), aber hier noch eine ergänzende Info für die, die den Repeater nicht ohne Passwortschutz belassen wollen. Da das Login keinen Benutzer, sondern nur ein Passwort hat, habe ich das mit Erfolg so versucht:
my $write_text = POST 'http://:hier_das_passwort@fritz.repeater/cgi-bin/webcm',
Mit Erfolg heisst, dass ich das Script unter Windows (AcrtiveState Perl) laufen lassen kann und es im nun wieder passwortgeschützten Repeater den Lauftext erfolgreich setzt.
Bleibt nur noch mein eigentliches Problem: Warum tut dasselbe Script dies bei mir nicht auch von der Fritzbox aus, bei Patrick aber schon? Ich habe das Gefühl, dass es irgendwie einen Timeout (es läuft ja sehr lange) gibt und das Script die Adresse des Repeaters nicht findet (was ja auch Patricks Hinweis andeutet, dass das Verhalten bei ihm so ist wie bei mir, wenn er die Adresse oder IP fehlerhaft angibt).
Bin weiterhin dankbar für jedwede Ideen, wie ich das Problem einkreisen könnte - gibt es beispielsweise irgendein Systemlog wie bei einem Webserver, in dem man sehen könnte, was wärend der Laufzeit des Scripts passiert?
Edit: Ich habe gerade mal versucht, den Repeater von der Fritzbox Shell aus anzupingen. Weder über die IP noch über fritz.repeater kommt das über

# ping 192.168.50.201
PING 192.168.50.201 (192.168.50.201): 56 data bytes

hinaus. Von anderen PCs im Netzwerk kann ich ihn problemlos anpingen; andere Rechner (auch solche im internen Netzwerk, auch die Fritzbox selbst) lassen sich ebenfalls problemlos von der FB Shell aus anpingen. Ich habe ihn gerade mal auf Werkseinstellungen zurückgesetzt, aber es bleibt unverändert. Ich habe so eine dunkle Erinnerung, dass AVM irgendwann einmal das Pingen im eigenen Netzwerk eingeschränkt hat. Hat jemand eine Idee?
Titel: Antw:Fritz.Repeater N/G Matrixdisplay als FHEM "Frontend"?
Beitrag von: JoWiemann am 09 Juni 2014, 20:36:24
Das funktioniert so leider nicht. Für Kennwort geschützten Repeater folgendes einfügen:

  my $write_text = POST 'http://ip des Repeaters/cgi-bin/webcm',
  [
    'login:command/password' => 'RepeaterPassword',       
    'errorpage' => '../html/de/menus/menu2.html',
   usw....


Grüße Jörg
Titel: Antw:Fritz.Repeater N/G Matrixdisplay als FHEM "Frontend"?
Beitrag von: dadoc am 09 Juni 2014, 22:04:15
Hallo Jörg
Zitat von: JoWiemann am 09 Juni 2014, 20:36:24
Das funktioniert so leider nicht.
Ob es in fhem bzw. als Perl-Skript auf der Fritzbox Shell wie von mir beschrieben funktioniert, kann ich ja leider nicht sagen, aus den beschriebenen Gründen.
Definitiv funktioniert der Login aber wie dargestellt, wenn man es "von außen" als Perl Skript laufen lässt.
Viele Grüße
Martin
Titel: Antw:Fritz.Repeater N/G Matrixdisplay als FHEM "Frontend"?
Beitrag von: dadoc am 11 Juni 2014, 10:28:57
Habe mein Ping- und Zugriffsproblem gelöst. Der DHCP Server der Box war wohl am Delirieren. Mehr zufällig habe ich bemerkt, dass er dem Repeater exakt die IP zuwies, die auch in einer VPN Konfiguration auf der Box als Virtual ID definiert war. Auch wenn die VPN Verbindung nicht aktiv war, schien das auszureichen, um für Probleme zu sorgen.
Zwar verteilt er nun immer noch ein paar Adressen außerhalb des festgelegten Bereichs (u.a. die des Repeaters), aber es läuft.
Dann werde ich mich mal ans erste notifiy meines Lebens machen - und ich ahne schon, dass ich hierzu die eine oder andere Frage im Anfängerforum werde stellen müssen.
Danke an alle, die hier geholfen haben!
Titel: Antw:Fritz.Repeater N/G Matrixdisplay als FHEM "Frontend"?
Beitrag von: JoWiemann am 11 Juni 2014, 14:49:29
Zitat von: dadoc am 09 Juni 2014, 22:04:15
...
Definitiv funktioniert der Login aber wie dargestellt, wenn man es "von außen" als Perl Skript laufen lässt.
...

Hallo Martin,

war wohl nicht präzise genug. Als FHEM-Erweiterung in der 99_myUtils.pm funktioniert die Übergabe in meiner Umgebung, s. Signatur, nicht mit Passwort@IP-FritzRepeater, sondern nur mit der von mir eingefügten Zeile.

Grüße Jörg
Titel: Antw:Fritz.Repeater N/G Matrixdisplay als FHEM "Frontend"?
Beitrag von: dadoc am 11 Juni 2014, 17:17:58
Hallo Jörg,
ich habe es gerade - nachdem ich endlich mit meiner notify-Orgie fertig bin - nochmal ausprobiert: Auf der Fritzbox funktioniert es mit beiden Methoden identisch, ich weiß nicht, ob eine davon zu bevorzugen wäre?
Grüße
Martin