Fritz.Repeater N/G Matrixdisplay als FHEM "Frontend"?

Begonnen von dadoc, 04 Juni 2014, 13:40:39

Vorheriges Thema - Nächstes Thema

dadoc

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
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods

dadoc

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
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods

P.A.Trick

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
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

dadoc

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
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods

P.A.Trick

Ok habe mal eben mein Passwort ausgeschaltet und getestet. Klappt!
Vermutung: Prüfe mal deine IP oder nimm direkt fritz.repeater :-)
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

dadoc

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:

  • Wenn ich mein Perl-Script (vom Windows-Rechner aus) aufrufe, dann tut es das, was es soll und setzt den Text des Repeaters.
  • Wenn ich denselben Perl-Code in der oben beschrieben Weise aus FHEM (auf der FritzBox 7490) aufrufe, tut sich nichts bzw. die oben genannten Meldungen. Mit derselben IP wir beim Aufruf aus dem Stand-Alone Perlscript.
Grüße
Martin
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods

P.A.Trick

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!
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

dadoc

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?
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods

P.A.Trick

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?
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

dadoc

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.
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods

P.A.Trick

Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

dadoc

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?
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods

dadoc

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?
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods

Thorsten Pferdekaemper

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
FUIP

dadoc

#14
# 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?
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods