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

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

Vorheriges Thema - Nächstes Thema

alexmetz

Hallo zusammen,


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


I. Umständliche Methode (meine bisherige):

Ich hatte vor einiger Zeit irgendwo in der fhem-users group folgendes Skript entdeckt und angepasst, das den Status eines Enigma2-Receivers (z.B Dreambox oder VUplus) abfrägt:
VU_Status.sh
#!/bin/sh

vu_ip="vuduo"
vu_status=`wget -q -O- http://$vu_ip/web/about -O- | sed -n -e 's/.*<e2model>\(.*\)<\/e2model>.*/\1/p'`
if [ vu_status != "duo" ]
   then echo "set VUplus_Status on" | /sbin/socat -  TCP:127.0.0.1:7072
   else echo "set VUplus_Status off" | /sbin/socat -  TCP:127.0.0.1:7072
fi


Das ganze hatte ich dann über ein notify gestartet:
define VUplus_Abfrage notify VUplus_trigger { system("./FHEM/VU_Status.sh");; \
 my $vuons ="";;\
 $vuons=$value{VUplus_Status}\
 if ($vuons == "on") {system("./FHEM/VU_Abfrage.sh");;}\
 }


Und dieses dann über ein at getriggert:
define VUplus_trigger dummy
define VUplus_Abfrage_at at +*00:10:00 trigger VUplus_trigger


Der Status war dann in einem dummy:
define VUplus_Status dummy
attr VUplus_Status setList on off



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.
FHEM auf RaspberryPi 4
Homematic

alexmetz

Noch ein Codeschnipsel:

Ziel: Enigma2-Receiver herunterfahren.


Ich habe ein dummy, mit dem ich den Receiver (aus-)schalten will.
define VUplus_Status dummy
attr VUplus_Status setList on off


Klicke ich nun beim dummy auf "off" frage ich das mit folgendem notify ab, und fahre den Receiver herunter (Deepstandby):
define VUplus_Statuswechsel notify VUplus_Status:off "wget -q -O- 'http://vuduo/web/powerstate?newstate=1'"

Einschalten geht logischerweise nicht. Man könnte aber auch einen Softstandby schalten.

Viele Grüße,

Alex
FHEM auf RaspberryPi 4
Homematic

MarkusN

Hallo Alex,

danke für deine Lösung! Ich fahre meine dreambox jedoch nicht herunter, sondern schicke sie nur in den Standby. Dafür habe ich bereits eine Lösung gesucht, jedoch nicht gefunden. Hast du da vielleicht eine Idee?

Grüße,

Markus

alexmetz


Du musst einfach statt newstate=1 newstate=5 schreiben

http://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.
FHEM auf RaspberryPi 4
Homematic

alexmetz


Jetzt hab ich Dich wahrscheinlich falsch verstanden. Ich dachte, Du willst aus fhem die Dreambox in standby schalten. Das gehr so wie im letzten post geschrieben.

I. Falls Du aber meinen ersten Post mit Standby umsetzen willst, gibt es folgenden Ansatz, den ich nicht ausprobiert habe, also auf eigene Gefahr!:

in der Datei "/usr/lib/enigma2/python/Screens/Standby.py" folgende Zeilen hinzufügen:

unter:
print "leave standby"
das einfügen:
if fileExists("/etc/init.d/fhemstatus_on.sh") :
eConsoleAppContainer().execute("/etc/init.d/fhemstatus_on.sh")

und unter:
print "enter standby"
das einfügen:
if fileExists("/etc/init.d/fhemstatus_off.sh") :
eConsoleAppContainer().execute("/etc/init.d/fhemstatus_off.sh")


geht aber wahrscheinlich nach jedem update wieder verloren...
Und bitte frag mich nicht nach der Bedeutung. Hab das selber nur gefunden und kann kein Stück pythop...

II. hier gibt's ein plugin, das bei on|off|standby bestimmte Aktionen ausführen kann:
http://www.dreambox-tools.info/thread.php?postid=21365

Da könnte man die o.a. Aktionen einbinden. Verursacht bei mir aber Greenscreen-Schleife, weils wohl für OE2.0 ist und ich 1.6 hab. Aber vielleicht geht's bei Dir.

LG
Alex.
FHEM auf RaspberryPi 4
Homematic

brmpfl

Danke für den Link zum Enigma2-WebIF!
Ich hatte noch auf meiner Liste, eine Nachricht auf den Bildschirm zu schicken, wenn das Garagentor aufgeht.
Zack erledigt!
:)
Hajo

brmpfl

Zitat von: alexmetz schrieb am Sa, 02 Februar 2013 20:06#!/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


Hai,

wie empfängst und verarbeitest Du die Status auf der FritzBox?

:)
Hajo

alexmetz

Na in fhem gibt's nen Dummy "VUplus_Status" der direkt durch das Skript auf dem Receiver geschalten wird.

VG
Alex
FHEM auf RaspberryPi 4
Homematic

brmpfl

Irgendwie fällt der Groschen noch nicht.

Du schickst per netcat 'set VUplus_Status on' bzw. 'set VUplus_Status off' an Deine FritzBox auf Port 7072. Richtig?
Dann muß doch auf der Fritzbox jemand an Port 7072 lauschen?!

:)
Hajo

alexmetz

Ja. Fhem tut das. Fhem lauscht immer auf Port 7072.

Fhem läuft bei mir auf der fritzbox.

LG
Alex
FHEM auf RaspberryPi 4
Homematic

brmpfl

:)
Hajo

MarkusN

Zitat von: alexmetz schrieb am Sa, 02 Februar 2013 23:37Jetzt hab ich Dich wahrscheinlich falsch verstanden. Ich dachte, Du willst aus fhem die Dreambox in standby schalten. Das gehr so wie im letzten post geschrieben.

I. Falls Du aber meinen ersten Post mit Standby umsetzen willst, gibt es folgenden Ansatz, den ich nicht ausprobiert habe, also auf eigene Gefahr!:

in der Datei "/usr/lib/enigma2/python/Screens/Standby.py" folgende Zeilen hinzufügen:

unter:
print "leave standby"
das einfügen:
if fileExists("/etc/init.d/fhemstatus_on.sh") :
eConsoleAppContainer().execute("/etc/init.d/fhemstatus_on.sh")

und unter:
print "enter standby"
das einfügen:
if fileExists("/etc/init.d/fhemstatus_off.sh") :
eConsoleAppContainer().execute("/etc/init.d/fhemstatus_off.sh")


geht aber wahrscheinlich nach jedem update wieder verloren...
Und bitte frag mich nicht nach der Bedeutung. Hab das selber nur gefunden und kann kein Stück pythop...

II. hier gibt's ein plugin, das bei on|off|standby bestimmte Aktionen ausführen kann:
http://www.dreambox-tools.info/thread.php?postid=21365

Da könnte man die o.a. Aktionen einbinden. Verursacht bei mir aber Greenscreen-Schleife, weils wohl für OE2.0 ist und ich 1.6 hab. Aber vielleicht geht's bei Dir.

LG
Alex.

Hallo Alex,

danke! Das funktioniert bei mir hervorragend. Musste jedoch eConsoleAppContainer().execute("/etc/init.d/fhemstatus_off.sh") durch os.system("/etc/init.d/fhemstatus_off.sh") ersetzen, ansonsten gabs Green-Screen und reboot.

Dadurch bekomme ich jetzt auch Nachrichten auf meine Dreambox, natürlich mit vorheriger Abfrage ob sie auch eingeschaltet ist. Top!

Dennis D.

sobald ich

if fileExists("/etc/init.d/fhemstatus_off.sh") :
os.system("/etc/init.d/fhemstatus_off.sh")

if fileExists("/etc/init.d/fhemstatus_on.sh") :
os.system("/etc/init.d/fhemstatus_on.sh")

in der Standby.py drin habe, komme ich in eine reboot-schleife (Dreambox 7020HD mit OE2.0)

Kommentiere ich die zeilen wieder aus, startet die Box wie gewohnt.

Ebenso habe ich ein Problem mit fhemstatus_on.sh und fhemstatus_off.sh. Führe ich das Script mit "sh fhemstatus_on.sh" aus, dann kommt die Meldung:

nc: can't connect to remote host (192.168.178.25): Connection refused

Gebe ich am auf der Console der Dreambox "echo set Dreambox_Status on | nc 192.168.178.25 7072" direkt ein, dann funktioniert es einwandfrei.

Hat jemand ne Ahnung woran das liegen kann?

Gruß,
Dennis
FHEM 5.5 auf RPi Rev. B 512 mit HMLAN (HM-CFG-LAN)

CUL_HM: HM-LC-Bl1PBU-FM,HM-LC-SW1-BA-PCB,HM-LC-SW4-SM,HM-LC-Sw1PBU-FM,HM-OU-LED16,HM-PB-2-WM55,HM-RC-KEY3-B,HM-SEC-KEY,HM-SEC-RHS,HM-SEC-SC,HM-SEC-SD,HM-WDS10-TH-O,HM-WDS40-TH-I

OWDevice: DS18B20,DS2438

brmpfl

Moin,

ich wurde per PN gefragt, wie ich mein Garagentor mit dem Fernseher (bzw. der VUPlus) gekoppelt habe.
Um es für alle zugänglich zu machen (evtl. gibt's ja noch weitere Interesierte), poste ich die Antwort hier:

Voraussetzung sind eine VUPlus, ein HomeMatic Neigungssensor am Garagentor :D und die o.g. Schritte zur Einbindung der beiden Scripte auf der VUPlus, die den Status an FHEM melden:
"fhemstatus_on.sh" & "fhemstatus_off.sh"

In meiner fhem.cfg habe ich folgendes definiert:

#
# VUPlus
#
define VUPlus_Status dummy
attr VUPlus_Status group VUPlus
attr VUPlus_Status room Wohnzimmer
attr VUPlus_Status setList on off
#
# Garage
#
define garage_Tor CUL_HM ******
attr garage_Tor .devInfo 010101
attr garage_Tor .stc 80
attr garage_Tor actCycle 028:00
attr garage_Tor actStatus alive
attr garage_Tor firmware 1.3
attr garage_Tor model HM-SEC-TIS
attr garage_Tor peerIDs
attr garage_Tor serialNr ***********
attr garage_Tor subType threeStateSensor
attr garage_Tor room Garage
#
# Öffnen/Schließen des Garagentores behandeln
#
define NotifyGaragentorOpen notify garage_Tor:open {\
  my $VUPlusStatus = ReadingsVal('VUPlus_Status', 'state', '??');;\
  if ($VUPlusStatus eq 'on') {\
    SendVUPlus('Garagentor wird geoeffnet!', '3', '10');;\
  }\
}
define NotifyGaragentorClosed notify garage_Tor:closed {\
  my $VUPlusStatus = ReadingsVal('VUPlus_Status', 'state', '??');;\
  if ($VUPlusStatus eq 'on') {\
    SendVUPlus('Garagentor geschlossen!', '1', '10');;\
  }\
}

Ich habe wegen der besseren Übersichtlichkeit 2 Notify's definiert ;)

Die Funktion SendVUPlus ist in meiner 99_myUtils.pm wie folgt definiert:

sub SendVUPlus
{
  my $message = shift;
  my $type = shift;
  my $timeout = shift;
  get('http://VUPlus/web/message?text='.$message.'&type='.$type.'&timeout='.$timeout);
}
:)
Hajo

Wiliam