Hi,
ich hab selbst eine dreambox. Da das verfügbare enigma2 plugin aber nur Texte auf die Box schicken kann und ich mich leider mit coffeescript nicht auskenne, hab ich ein Sellscript geschrieben um der Box ein paar mehr Informationen zu entlocken.
#!/bin/bash
###########################################################################
# Script zum ansteuern Receivers mit ENIGMA2 Betriebssystem #
# geschrieben von daice, Juni 2017 #
# #
# Aufruf: script.sh 'ip' 'command' 'nolog' #
# ip: IP-Adresse des E2-Receivers, welcher angesteuert werden soll #
# cmd: auszuführende Funktion (state/info) #
# nolog: mit dem Zusatz d wird die Antwort direkt zurückgegeben #
###########################################################################
#Speicherpfad- und Logdateiangabe
path=/home/pi/pimatic-app/dreambox.info
#Überprüfen ob Gerät erreichbar ist
ping -q -c1 $1 >/dev/null 2>&1
if [ $? -eq 0 ]
then
if [ "$2" = "state" ]
then
#Powerstatus des Receivers ermitteln und zurückgeben
status=$(curl -sm 2 http://$1/web/powerstate?=-1 | grep e2instandby | sed -e 's#.*<e2instandby>##' -e 's#</e2instandby>.*##')
if [ "$status" = "true" ]
then
if [ "$3" = d ]
then
echo Standby
else
sudo sed -i '1cStandby' $path
fi
elif [ "$status" = "false" ]
then
if [ "$3" = d ]
then
echo An
else
sudo sed -i '1cAn' $path
fi
else
if [ "$3" = d ]
then
echo "Ping OK, E2 NOK"
else
sudo sed -i '1cPing OK, E2 NOK' $path
fi
fi
elif [ "$2" = "info" ]
then
#Sendername auslesen und zurückgeben
subservices=$(curl -sm 2 http://$1/web/subservices)
servicename=$(echo $subservices | sed -e 's#.*<e2servicename>##' -e 's#</e2servicename>.*##')
if [ -z "$servicename" ]
then
servicename=Unbekannt
fi
if [ "$3" = d ]
then
echo $servicename
else
servicename_read=$(sed -n '3p' $path)
if [ "$servicename" != "$servicename_read" ]
then
sudo sed -i '3c'"${servicename}"'' $path
fi
fi
#Volume auslesen und zurückgeben
volume=$(curl -s http://$1/web/vol?set=state | grep e2current | sed -e 's#.*<e2current>##' -e 's#</e2current>.*##')
if [ -z "$volume" ]
then
volume=00
fi
if [ "$3" = d ]
then
echo $volume
else
volume_read=$(sed -n '2p' $path)
if [ "$volume" != "$volume_read" ]
then
sudo sed -i '2c'$volume'' $path
fi
fi
#EPG-Daten auslesen und zurückgeben
serviceref=$(echo $subservices | sed -e 's#.*<e2servicereference>##' -e 's#</e2servicereference>.*##')
epgnow=$(curl -sm 2 http://$1/web/epgservicenow?sRef=$serviceref | grep e2eventtitle | sed -e 's#.*<e2eventtitle>##' -e 's#</e2eventtitle>.*##')
if [ -z "$epgnow" ]
then
epgnow="Keine EPG-Daten verfügbar."
fi
if [ "$3" = d ]
then
echo $epgnow
else
if [ $serviceref != 'N/A' ]
then
epg_write=$epgnow
#sudo sed -i '4c'"${epgnow}"'' $path
else
epg_write="Keine EPG-Daten verfügbar"
#sudo sed -i '4c'"Keine EPG-Daten verfügbar."'' $path
fi
epg_read=$(sed -n '4p' $path)
if [ "$epg_write" != "$epg_read" ]
then
sudo sed -i '4c'"${epg_write}"'' $path
fi
fi
else
echo "Falsches oder fehlendes Kommando: "$2""
fi
else
echo "Gerät unter IP: "$1" nicht erreichbar!"
fi
Die Beschreibung steht im Kopf des Scripts. Einfach den code in ne Datei (z.B dreambox_status.sh) packen und mit den angegebenen Parametern aufrufen. Man kann die Ergebnisse der Abfragen direkt zurückgeben lassen oder in einer LOG-Datei Speichern. Die LOG-Datei hat den Vorteil, dass mann nich ständig das Netzwerk und die Dreambox pollen muss.
Ich nutze dann im Pimatic einen ShellSensor um den Status alle 30 Sekunden mit folgendem Befehl abzufragen:
/usr/local/bin/dreambox_status.sh 192.156.1.200 state d
Zusätzlich gibt es noch folgende Regel um im Standby nicht ständig alle Informationen abfragen zu müssen:
every 60 minutes or [every 20 seconds and $dreambox_read_status.status = "An"] THEN execute "/usr/local/bin/dreambox_status.sh $dreambox_ip info"
Die Informationen für den aktuellen Sender, Lautstärke und EPG hol ich mir dann noch alle 10 Sekunden aus der LOG-Datei über einen ShellSensor mit den Befehlen:
sed -n '2p' /home/pi/pimatic-app/dreambox.info
<-- für die Lautstärke
sed -n '3p' /home/pi/pimatic-app/dreambox.info
<-- für den Sendernamen
sed -n '4p' /home/pi/pimatic-app/dreambox.info
<-- für die EPG Anzeige
Die ganzen Daten fließen dann bei mir in ein Variablesdevice ein das wie folgt aussieht (oben links):
Die anderen devices hab ich auch noch dazugebastelt und die Funktionalität per Regeln abgebildet.
Wie gesagt ich hätte gern mal ein eigenes Plugin geschrieben, aber ich kenn mich mit der Programiersprache halt nicht aus.
Gruß daice