Status-Update für Enigma2-Receiver (Dreambox, VUplus etc.)

Begonnen von alexmetz, 02 Februar 2013, 20:06:23

Vorheriges Thema - Nächstes Thema

Wzut

Ich habe vor einiger Zeit ein plugin für enigma2 geschrieben um Meldungen auf dem TV anzeigen zu können. Die hier vorschlagene Messagebox hat mir mir zum einen nicht gefallen und ich wollte auch steuern wann die Meldung wieder verschwindet.
1. enigma Plugin installieren und erster Test :
Nach der Installation kann das Setup unter Erweiterungen aufgerufen werden, hier kann man den TCP Port wählen auf welchem das Plugin lauscht, die Schriftgrösse der späteren Meldung. Mit der blauen Taste die Position und Grösse der Alarm Meldung. Position mit dem Steuerkreuz Tasten festlegen, Grösse mit 2/8 und 4/6 ändern.
Um das Plugin zu testen nun von einem anderen Rechner "telnet BoxIP 34111" starten ( ACHTUNG : das telnet der busybox direkt auf der vu Konsole ist dazu ungegeignet !) Die Funktionsweise ist vom SVDR Plugin übernommen :

telnet 192.168.0.5 34111
Trying 192.168.0.5...
Connected to 192.168.0.5.
Escape character is '^]'.
220 0.1 Alarm Text Enigma 2-Plugin

Tippt man nun help ein sieht man die z.Z. unterstützten Funktionen :
214-Alarm Text Plugin version 0.1
214-Topics:
214- ALARM HELP MESG QUIT
214 End of HELP info

um nun einen Text auf den Bilschirm zu bekommen einfach alarm das ist ein Test eintippen
alarm das ist ein Test
250 Alarm is on

um den Alarm wieder zu löschen alarm ohne Text eingeben
alarm
250 Alarm is off

nun können wir uns mit quit wieder ausloggen:
221 closing connection
Connection closed by foreign host.

um nun von einem anderen PC bzw dem fhem Server eine Meldung zur Box zu schicken kann man das angehängte svdrpsend.pl benutzen.
svdrpsend.pl -d BoxIp -p 34111 alarm Testmeldung

EDIT : habe jezt meine 99_myUtils.pm erweitert und in der fhem.cfg mal drei Zeilen definiert
fhem.cfg

define alarm_text_on notify Firmata_OUT_3  { if ("$value{Firmata_OUT_3}" eq "on")  { SVDR_Msg('192.168.0.5', 34111, "alarm Das ist ein Test")}}
define alarm_text_off notify Firmata_OUT_3 { if ("$value{Firmata_OUT_3}" eq "off") { SVDR_Msg('192.168.0.5', 34111, "alarm")}}
define msg_text_on notify Firmata_OUT_2    { if ("$value{Firmata_OUT_2}" eq "on")  { SVDR_Msg('192.168.0.5', 34111, "mesg Das ist ein Test")}}


99_myUtils.pm

use Socket;

sub SVDR_Msg($$$)
{
my ($Dest, $Port, $Cmd)  = @_;
my $iaddr = inet_aton($Dest)                || die "SVDR_Msg no host: $Dest";
my $paddr = sockaddr_in($Port, $iaddr);

my $proto = getprotobyname('tcp');
socket(SOCK, PF_INET, SOCK_STREAM, $proto)  || die "SVDR_Msg socket: $!";
connect(SOCK, $paddr)                       || die "SVDR_Msg connect: $!";
select(SOCK); $| = 1;
SVDR_Receive();
print SOCK "$Cmd\r\n";
my $ret = SVDR_Receive();
print SOCK "quit\r\n";
close(SOCK)                                 || die "SVDR_Msg close: $!";
$ret =~ s,[\r\n]*,,g;
return "SVDR_Msg ".$ret;
}

sub SVDR_Receive
{
  while (<SOCK>) {last if substr($_, 3, 1) ne "-";}
  return $_;
}

Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

punker

Zitat von: alexmetz schrieb am Sa, 02 Februar 2013 20:06Hallo zusammen,


Ziel: aktuellen Status (on|off) des Enigma2-Receivers in fhem anzeigen.

II. Einfache Methode:
Die umständliche Methode funktioniert, ist aber nervig und belastet unnötig das System.
Deshalb habe ich mir überlegt, dass es ja einfacher wäre, wenn nicht fhem den Status dauernd bei dem Enigma2-Receiver abfrägt, sondern selbiger es fhem mitteilt. Und es geht! Der Enigma2-Receiver teilt fhem mit, wenn er hoch- bzw. runterfährt.

So gehts:

1. Man erstelle folgende zwei Dateien auf dem Receiver im Verzeichnis /etc/init.d (am besten gleich vi benutzen):

fhemstatus_on.sh
#!/bin/sh
echo set VUplus_Status on | nc fritz.box 7072
exit 0


fhemstatus_off.sh
#!/bin/sh
echo set VUplus_Status off | nc fritz.box 7072
exit 0

Die Dateien lassen sich noch beliebig erweitern, um weitere Informationen an fhem zu übergeben, z.B. den Sender, die Betriebssystemversion etc.


2. Rechte der beiden Dateien auf 755 setzen, damit sie ausgeführt werden können:
chmod 755 fhemstatus_on.sh
chmod 755 fhemstatus_off.sh

3. Folgende Symlinks erstellen
ln -s /etc/init.d/fhemstatus_on.sh /etc/rcS.d/S50fhemstatus_on.sh
ln -s /etc/init.d/fhemstatus_off.sh /etc/rc0.d/K20fhemstatus_off.sh
Die Ordner rcx.d bilden die Runlevel von Enigma2 ab. Die symlinks in rcS werd beim booten ausgeführt, die in rc0 beim shutdown. Sxx bzw. Kxx ist die Reihenfolge.

4. Fertig!

jetzt wird beim Booten automatisch der Status auf on gesetzt und beim herunterfahren auf off.


Viele Grüße,

Hades.

Hallo,

 habe mal versucht dein Beispiel nachzumachen,
 aber wenn ich den Befehl "nc 192.168.2.20 7072" auf der Dreambox absetze kommt als Antwort "ÿûPassword:"
 Er will also das Passwort haben!
 Wie kann ich dies mit nc übermitteln?
LG

Dieter

The truth is out there!

Predictor

Da ich kein extra shell Script wollte habe ich es direkt in FHEM gelöst und funktioniert bei mir super.

Also den Reciver per FHEM einschalten, ausschalten ...
alles was über das WI vom Reciver möglich ist (inkl. Textnachrichten)

Wenn das Thema noch interessant ist, melde dich einfach und ich poste meinen Code kurz (komme gerade nicht an meinen FHEM).
FHEM auf Fritz!Box 7390
FS20 per CUL

punker

Zitat von: Predictor schrieb am Di, 14 Mai 2013 18:19Da ich kein extra shell Script wollte habe ich es direkt in FHEM gelöst und funktioniert bei mir super.

Also den Reciver per FHEM einschalten, ausschalten ...
alles was über das WI vom Reciver möglich ist (inkl. Textnachrichten)

Wenn das Thema noch interessant ist, melde dich einfach und ich poste meinen Code kurz (komme gerade nicht an meinen FHEM).

@Predictor

wäre nett, wenn du deinen Code hier mal reinstellen würdest!
LG

Dieter

The truth is out there!

Predictor

Ich hatte natürlich auch hilfe aus dem Forum hier: ORIGINALTHREAD von mir

Hier wird ein Dummy Device angelegt und ein paar attr dazu:
define wz_Dreambox dummy
attr wz_Dreambox IPadress 192.168.0.1
attr wz_Dreambox room Wohnzimmer
attr wz_Dreambox setList on off


Hier wird der notify angelegt:
define DreamboxNotify notify wz_Dreambox {if(ReadingsVal('wz_Dreambox', 'state', 0) eq "on") { GetHttpFile(AttrVal('wz_Dreambox', 'IPadress', 0), "/web/powerstate?newstate=4")} elsif(ReadingsVal('wz_Dreambox', 'state', 0) eq "off") { GetHttpFile(AttrVal('wz_Dreambox', 'IPadress', 0), "/web/powerstate?newstate=5")} }
attr DreamboxNotify room Wohnzimmer


tada und schon lässt sich der Reciver ein und auschalten.

Du willst ja aber Nachrichten an die Box senden, dies geht auch einfach mit:
http://192.168.0.1/web/message?text=messagetext&type=1&timeout=10

Wenn den Link im Post von Alex anschaust, findest du weitere Kommandos.

Zitat von: alexmetz schrieb am Sa, 02 Februar 2013 22:36http://dreambox/web/powerstate?newstate={powerstate_number}
0 = Toogle Standby
1 = Deepstandby
2 = Reboot
3 = Restart Enigma2
4 = Wakeup form Standby
5 = Standby


Guck mal auch da: http://dream.reichholf.net/wiki/Enigma2:WebInterface
Da stehen alle Befehle, die Du das webif kann und die Du damit auch aus fhem nutzen kannst.

Aber Obacht: in einigen Details unterscheiden sich das original webif und openwebif, welches in neueren Images drin ist.

LG
Alex.


Das schöne an dieser Lösung ist -> keine Scripte oder veränderungen am Reciver selber.


Einen Nachteil hat die Sache bisher noch :-(
Im Log erscheint leider der komplette Rückgabewert (ganze Website), dies sieht leider so aus:
2013.05.01 10:55:34 3: DreamboxNotify return value: <?xml version="1.0" encoding="UTF-8"?>
<e2powerstate>
<e2instandby>false
</e2instandby>
</e2powerstate>

Evtl. kann mir jemand einen Schubs geben wie ich eine RegEx einbauen kann damit nur noch der Value (also true oder false gelogt wird) - ich finde da einfach keinen Ansatz.
FHEM auf Fritz!Box 7390
FS20 per CUL

punker

Danke schonmal!

Werde erst am WE dazu kommen es auszuprobieren!
LG

Dieter

The truth is out there!

Predictor

Hallo,

ich habe gerade diesen Post von meisterpe gefunden.
Ich habe es noch nicht getestet, aber schaut auf den ersten Blick ganz gut aus!


Grüße
Predi
FHEM auf Fritz!Box 7390
FS20 per CUL

cornelius fillmore

Zitat von: alexmetz schrieb am Sa, 02 Februar 2013 20:06Hallo zusammen,


Ziel: aktuellen Status (on|off) des Enigma2-Receivers in fhem anzeigen.


Alex: Kannst du mir noch mal den Auszug aus deiner fhem.cfg geben, bei mir klappt es irgendwie nicht.
Ich habe die Einträge auf eiener Dreambox gemacht aber leider kommen die Befehle nicht im Fhem an, bzw werden nicht weiter verarbeitet.
3 x Fhem 5.9 mit RPI

alexmetz

Zitat von: cornelius fillmore schrieb am Mi, 05 Juni 2013 22:44Alex: Kannst du mir noch mal den Auszug aus deiner fhem.cfg geben, bei mir klappt es irgendwie nicht.
Ich habe die Einträge auf eiener Dreambox gemacht aber leider kommen die Befehle nicht im Fhem an, bzw werden nicht weiter verarbeitet.

meine fhem.cfg:
define VUplus_Status dummy
attr VUplus_Status room Wohnzimmer,Geräte
attr VUplus_Status setList on off

define VUplus_Statuswechsel notify VUplus_Status:off "wget -q -O- 'http://vuduo/web/powerstate?newstate=1'"
attr VUplus_Statuswechsel room Wohnzimmer


mehr isses nicht. Das notify ist nur, damit man den VUplus/Dreambox von fhem aus ausschalten kann.

Das Skript auf der Dreambox setzt lediglich den dummy-Status auf an oder aus. .

Wenn das bei Dir nicht ankommt, dann geh mal als erstes mit telnet in die Dreambox und versuch den Status manuell zu setzen und schau ob das funktioniert:
echo set VUplus_Status off | nc fritz.box 7072
7072 ist der Standard-port von fhem. Die IP (bei mir fritz.box) und den Namen des Dummy (bei mir VUplus_Status) musst Du natürlich an Deine Verhältnisse anpassen.

Evtl kommt ja eine Fehlermeldung, dann weisst Du was falsch ist.
Evtl. hast Du ein passwort gesetzt, dann musst Du es mit angeben. Wie genau dann die Zeile lautet weiß ich akut nicht.
Evtl ist auch nc nicht auf Deiner Box installiert. Dann musst Du das installieren. Sollte aber drauf sein.

Hoffe das hilft ein wenig. Ansonsten nochmal melden.

LG
Alex.
FHEM auf RaspberryPi 4
Homematic

cornelius fillmore

Hallo Alex,

funktioniert beim manuell setzen sehr gut.

Aber automatisiert, sprich beim starten und beenden der Dreambox nicht.

Auch wenn ich versuche das script im Pfad /etc/init.d mit ./fhemstatus_on.sh zu starten geht dies nicht.
Er meckert ständig fhemstatus.. not found.
Die Rechte sind aber auf 755 eingestellt und mit ls sehe ich die beiden fhem-Stati.

Hast du noch ne Idee?
3 x Fhem 5.9 mit RPI

alexmetz

das kann ich mir nicht erklären. Es müsste gehen. Hab grade nochmal alles neu gemacht und getestet. Da muss irgendein Schreibfehler sein. Guck Dir nochmal die Dateinamen genau an und prüf auch nochmal die Rechte.
Ansonsten mach mal einen Screenshot.

LG
Alex.
FHEM auf RaspberryPi 4
Homematic

cornelius fillmore

So, ich hab den Fehler gefunden.
Ich hatte die scripte mit Proton und FileZilla erstellt.
Proton fügt aber mit jedem Zeilenumbruch ein Sonderzeichen hinzu.
Dieses führt dann zu dem Missverständnis.
Mit mcedit geht dass editieren einfach und schnell

Nochmal Danke für die Hilfe.

P.S. Bitte an die Mods: stellt diesen coolen Schnipsel ins Howto
3 x Fhem 5.9 mit RPI

UliM

Zitat von: cornelius fillmore schrieb am Fr, 07 Juni 2013 07:36P.S. Bitte an die Mods: stellt diesen coolen Schnipsel ins Howto
Hiho,
funktioniert hier anders: Bitte selbst Wiki-Account besorgen und dort Artikel einstellen.
=8-)
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Predictor

Zitat von: cornelius fillmore schrieb am Fr, 07 Juni 2013 07:36P.S. Bitte an die Mods: stellt diesen coolen Schnipsel ins Howto

Ich bin gerade dabei ein Modul zu schreiben, dies kommt dann auch ins Wiki (den Artikel gibt es schon, nur den Inhalt noch nicht) ;-)

Aktuell vorhanden:
    Nachrichten anzeigen (von MeisterPe)
    Ein-/Auschalten  (von MeisterPe)
    Komplette Fernbedienung in FHEM (gerade in arbeit - evtl. per Floorplan auch grafisch darstellbar => Idee ist im Samsung TV Thread hier)
    Scripten von FB befehlen (geplant) um Plugins die nur per FB zu bedienen sind aus FHEM ansprechen zu können (z.B. SHOUTcast)

Also noch ein wenig Geduld, ich hatte ja oben schon auf den Thread von MeisterPe verwiesen.
 
Grüße
Predi
FHEM auf Fritz!Box 7390
FS20 per CUL

cornelius fillmore

Gut ich hänge mich mit meinen Infos hinten dran, da die enigma-Boxen etwas anders funktionieren.
3 x Fhem 5.9 mit RPI