FRITZFON: Unterschied zwischen den Versionen
(Beispiel im LCARS-Stil hinzugefügt.) |
Keine Bearbeitungszusammenfassung |
||
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 47: | Zeile 47: | ||
[http://$IP/cgi-bin/firmwarecfg http://$IP/cgi-bin/firmwarecfg] | [http://$IP/cgi-bin/firmwarecfg http://$IP/cgi-bin/firmwarecfg] | ||
} | } | ||
echo "login ...." | |||
login | |||
echo "change ...." | |||
change</nowiki> | |||
== Shellscript fritzfonpic.sh (Alternative) == | |||
Auf einer Fritz!Box 6360 von Unitymedia hat das Login nicht funktioniert. Nachfolgend das geänderte Shellscript (inspiriert durch [https://home.debian-hell.org/blog/2013/05/13/update-konfiguration-der-avm-fritzbox-7390-per-wgetcurl-script-sichern/]). In dem Script müssen die Variablen _PASSWORD und ggf. _FBOX angepasst werden. | |||
<nowiki>#!/bin/sh | |||
#set -x | |||
PHONEID=$2 | |||
PHONEBOOKID=255 | |||
PHONEBOOKTYPE=1 | |||
TMPFILE=$1 | |||
CURL=$(which curl) | |||
login(){ | |||
# FritzBox credentials | |||
_FBOX="http://fritz.box" | |||
_PASSWORD="PASSWORT_DER_FRITZBOX" | |||
# get challenge key from FB | |||
_CHALLENGE=$(wget --quiet -O- ${_FBOX}/login.lua | \ | |||
grep "^g_challenge" | \ | |||
awk -F'"' '{ print $2 }') | |||
# build md5 from challenge key and password | |||
_MD5=$(echo -n ${_CHALLENGE}"-"${_PASSWORD} | \ | |||
iconv -f ISO8859-1 -t UTF-16LE | \ | |||
md5sum -b | \ | |||
awk '{print substr($0,1,32)}') | |||
# assemble challenge key and md5 | |||
_RESPONSE=${_CHALLENGE}"-"${_MD5} | |||
# build response data for later use | |||
_POSTDATA="response=${_RESPONSE}&page=&username=" | |||
# get sid for later use | |||
_SID=$(wget --quiet -O- --post-data="${_POSTDATA}" "${_FBOX}/login.lua" | \ | |||
grep "home.lua?sid=" | \ | |||
head -1 | \ | |||
awk -F'"' '{ print $6 }' | \ | |||
awk -F'=' '{ print $2 }') | |||
} | |||
change(){ | |||
echo "CHANGE $_SID" | |||
$CURL -o /dev/null \ | |||
-F "sid=${_SID}" \ | |||
-F "PhonebookId=$PHONEBOOKID" \ | |||
-F "PhonebookType=$PHONEBOOKTYPE" \ | |||
-F "PhonebookEntryId=$PHONEID" \ | |||
-F "PhonebookPictureFile=@$TMPFILE" \ | |||
${_FBOX}/cgi-bin/firmwarecfg | |||
} | |||
echo "login ...." | |||
login | |||
echo "change ...." | |||
change</nowiki> | |||
== Shellscript fritzfonpic.sh (weitere Alternative) == | |||
Und ab irgendeiner Firmwareversion (6.50 ???) funktionierte ist nicht mehr. Die nachfolgende Variante lief dann wieder. In dem Script müssen die Variablen avmfbip, avmfbuser (nur wenn bei der Anmeldung auch erforderlich) und avmfbpwd angepasst werden. | |||
<nowiki>#!/bin/sh | |||
#set -x # zur Fehlersuche auskommentieren | |||
PHONEID=$2 | |||
PHONEBOOKID=255 | |||
PHONEBOOKTYPE=1 | |||
TMPFILE=$1 | |||
CURL=$(which curl) | |||
avmfbip=${tempip:-fritz.box} | |||
avmfbuser=${tempuser:-""} | |||
avmfbpwd=${temppwd:-"DEINKENNWORT"} | |||
avmsidfile=${tempid:-/tmp/avmsid} | |||
if [ ! -f $avmsidfile ]; then | |||
touch $avmsidfile | |||
fi | |||
avmsid=$(cat $avmsidfile) | |||
login(){ | |||
# check if current login is valid, otherwise generate session id | |||
result=$(curl -s "http://$avmfbip/login_sid.lua?sid=$avmsid" | grep -c "0000000000000000") | |||
if [ $result -gt 0 ]; then | |||
echo "Login neccessary" | |||
challenge=$(curl -s http://$avmfbip/login_sid.lua | grep -o "<Challenge>[a-z0-9]\{8\}" | cut -d'>' -f 2) | |||
hash=$(echo -n "$challenge-$avmfbpwd" |sed -e 's,.,&\n,g' | tr '\n' '\0' | md5sum | grep -o "[0-9a-z]\{32\}") | |||
curl -s "http://$avmfbip/login_sid.lua" -d "response=$challenge-$hash" -d 'username='${avmfbuser} \ | |||
| grep -o "<SID>[a-z0-9]\{16\}" | cut -d'>' -f 2 > $avmsidfile | |||
fi | |||
avmsid=$(cat $avmsidfile) | |||
echo $avmsid | |||
} | |||
change(){ | |||
echo "CHANGE ${avmsid}" | |||
$CURL -o /dev/null \ | |||
-F "sid=${avmsid}" \ | |||
-F "PhonebookId=$PHONEBOOKID" \ | |||
-F "PhonebookType=$PHONEBOOKTYPE" \ | |||
-F "PhonebookEntryId=$PHONEID" \ | |||
-F "PhonebookPictureFile=@$TMPFILE" \ | |||
${avmfbip}/cgi-bin/firmwarecfg | |||
} | |||
echo "login ...." | echo "login ...." | ||
login | login | ||
Zeile 68: | Zeile 181: | ||
== Beispiel im LCARS-Stil == | == Beispiel im LCARS-Stil == | ||
Die Vorlage im Format 240 x 320. Lt. AVM soll das aktuell (30.01.2015) die | Die Vorlage im Format 240 x 320. Lt. AVM soll das aktuell (30.01.2015) die Mindestgröße sein: | ||
[[Datei:Vorlage_LCARS.jpg]] | [[Datei:Vorlage_LCARS.jpg]] | ||
Aktuelle Version vom 19. Dezember 2016, 20:46 Uhr
Nutzung eines FritzBox!Fon MT-F zur Darstellung von Messwerten
Ich war auf der Suche nach einem Display zur Anzeige von Messwerten in der Wohnung. Der Digitale Bilderrahmen hier im Wiki hat mich dann auf die Idee gebracht unsere vorhandenen FritzBox!Fon MT-F Mobilteile als Anzeigeeinheit zu verwenden.
Beipspiel eines Hintergrundbildes auf dem MT-F
Voraussetzungen
- Fritz!Box 7270 (darauf ist es getestet. Sollte auch bei anderen Fritz!Boxen laufen, die das MT-F unterstützen.
- Fritz!Fon MT-F (MT-D kann das mit dem Hintergrundbild auch. Wurde bis jetzt aber noch nicht getestet)
- curl muss installiert sein
- convert aus ImageMagick wird verwendet um die Daten in das jpg-Bild zu schreiben.
Was ist zu tun
Mit einen Script wird ein Hintergrundbild erzeugt, das die Messdaten in das jpg schreibt. Danach wird das Shellscript mit der jpg-Datei und dem Nummer des Zieltelefons als Parameter aufgerufen.
Update-Intervall
Man sollte nicht zu oft das Hintergrundbild der Telefone tauschen. Manchmal hängen sich diese sonst auf. Alle 30 Minuten ist ein guter Wert. Dann habe ich keine Abstürze seit ca. 2 Monaten festgestellt.
Shellscript fritzfonpic.sh, das mit curl das Hintergrundbild an die Fritz!Box überträgt und für das Mobilteil bekanntgibt.
In dem Script muss das Passwort und ggf. die IP der Fritz!Box angepasst werden
#!/bin/sh PHONEID=$2 PHONEBOOKID=255 PHONEBOOKTYPE=1 IP=fritz.box PASSWD=PASSWORT_DER_FRITZBOX TMPFILE=$1 CURL=$(which curl) login(){ # neues Loginverfahren seit xx.04.76 eval "$($CURL -s "[http://$IP/cgi-bin/webcm http://$IP/cgi-bin/webcm]" -d "getpage=../html/login_sid.xml" -d "sid=$cgisid" | sed -n 's,.*<\(Challenge\|iswriteaccess\|SID\)>\([^<]*\).*,\1=\2;,p')" if [ "$iswriteaccess" = 0 ] && [ "$SID" = "0000000000000000" -o -z "$SID" ]; then chksum="$(echo -n "$Challenge-$PASSWD" | sed -e 's,.,&\n,g' | tr '\n' '\0' | md5sum)" eval "$($CURL -s "[http://$IP/cgi-bin/webcm http://$IP/cgi-bin/webcm]" -d "getpage=../html/login_sid.xml" -d "login:command/response=$Challenge-${chksum%% *}" | sed -n 's,.*<SID>\(.*\)</SID>.*,SID=\1,p')" cgisid="$SID" echo -n "$cgisid" >/tmp/sid fi } change(){ echo "CHANGE $cgisid" $CURL -o /dev/null \ -F "sid=$cgisid" \ -F "PhonebookId=$PHONEBOOKID" \ -F "PhonebookType=$PHONEBOOKTYPE" \ -F "PhonebookEntryId=$PHONEID" \ -F "PhonebookPictureFile=@$TMPFILE" \ [http://$IP/cgi-bin/firmwarecfg http://$IP/cgi-bin/firmwarecfg] } echo "login ...." login echo "change ...." change
Shellscript fritzfonpic.sh (Alternative)
Auf einer Fritz!Box 6360 von Unitymedia hat das Login nicht funktioniert. Nachfolgend das geänderte Shellscript (inspiriert durch [1]). In dem Script müssen die Variablen _PASSWORD und ggf. _FBOX angepasst werden.
#!/bin/sh #set -x PHONEID=$2 PHONEBOOKID=255 PHONEBOOKTYPE=1 TMPFILE=$1 CURL=$(which curl) login(){ # FritzBox credentials _FBOX="http://fritz.box" _PASSWORD="PASSWORT_DER_FRITZBOX" # get challenge key from FB _CHALLENGE=$(wget --quiet -O- ${_FBOX}/login.lua | \ grep "^g_challenge" | \ awk -F'"' '{ print $2 }') # build md5 from challenge key and password _MD5=$(echo -n ${_CHALLENGE}"-"${_PASSWORD} | \ iconv -f ISO8859-1 -t UTF-16LE | \ md5sum -b | \ awk '{print substr($0,1,32)}') # assemble challenge key and md5 _RESPONSE=${_CHALLENGE}"-"${_MD5} # build response data for later use _POSTDATA="response=${_RESPONSE}&page=&username=" # get sid for later use _SID=$(wget --quiet -O- --post-data="${_POSTDATA}" "${_FBOX}/login.lua" | \ grep "home.lua?sid=" | \ head -1 | \ awk -F'"' '{ print $6 }' | \ awk -F'=' '{ print $2 }') } change(){ echo "CHANGE $_SID" $CURL -o /dev/null \ -F "sid=${_SID}" \ -F "PhonebookId=$PHONEBOOKID" \ -F "PhonebookType=$PHONEBOOKTYPE" \ -F "PhonebookEntryId=$PHONEID" \ -F "PhonebookPictureFile=@$TMPFILE" \ ${_FBOX}/cgi-bin/firmwarecfg } echo "login ...." login echo "change ...." change
Shellscript fritzfonpic.sh (weitere Alternative)
Und ab irgendeiner Firmwareversion (6.50 ???) funktionierte ist nicht mehr. Die nachfolgende Variante lief dann wieder. In dem Script müssen die Variablen avmfbip, avmfbuser (nur wenn bei der Anmeldung auch erforderlich) und avmfbpwd angepasst werden.
#!/bin/sh #set -x # zur Fehlersuche auskommentieren PHONEID=$2 PHONEBOOKID=255 PHONEBOOKTYPE=1 TMPFILE=$1 CURL=$(which curl) avmfbip=${tempip:-fritz.box} avmfbuser=${tempuser:-""} avmfbpwd=${temppwd:-"DEINKENNWORT"} avmsidfile=${tempid:-/tmp/avmsid} if [ ! -f $avmsidfile ]; then touch $avmsidfile fi avmsid=$(cat $avmsidfile) login(){ # check if current login is valid, otherwise generate session id result=$(curl -s "http://$avmfbip/login_sid.lua?sid=$avmsid" | grep -c "0000000000000000") if [ $result -gt 0 ]; then echo "Login neccessary" challenge=$(curl -s http://$avmfbip/login_sid.lua | grep -o "<Challenge>[a-z0-9]\{8\}" | cut -d'>' -f 2) hash=$(echo -n "$challenge-$avmfbpwd" |sed -e 's,.,&\n,g' | tr '\n' '\0' | md5sum | grep -o "[0-9a-z]\{32\}") curl -s "http://$avmfbip/login_sid.lua" -d "response=$challenge-$hash" -d 'username='${avmfbuser} \ | grep -o "<SID>[a-z0-9]\{16\}" | cut -d'>' -f 2 > $avmsidfile fi avmsid=$(cat $avmsidfile) echo $avmsid } change(){ echo "CHANGE ${avmsid}" $CURL -o /dev/null \ -F "sid=${avmsid}" \ -F "PhonebookId=$PHONEBOOKID" \ -F "PhonebookType=$PHONEBOOKTYPE" \ -F "PhonebookEntryId=$PHONEID" \ -F "PhonebookPictureFile=@$TMPFILE" \ ${avmfbip}/cgi-bin/firmwarecfg } echo "login ...." login echo "change ...." change
einfaches Beispiel eines Shell-Scripts das 3 Werte in ein jpg schreibt
#!/bin/sh LASTTEMP=-2.1 LASTHYGRO=88 LASTWIND=3.0 convert -pointsize 8 -weight Bold -font Helvetica -fill blue -draw "text 65,40 \"Temp: $LASTTEMP\"" -draw "text 65,60 \"Feuchte: $LASTHYGRO \"" -draw "text 65,80 \"Wind: $LASTWIND \"" fhem120.jpg fritzergebnis.jpg ./fritzfonpic.sh fritzergebnis.jpg 610 ./fritzfonpic.sh fritzergebnis.jpg 611
Die MT-F Telefone erhalten bei der Konfiguration eine interne Nummer. Eines hat in dem Beispiel die 610 und das andere die 611.
Beispielvorlage für das Test-Shellscript
Ich habe mir erlaubt das fhem-Logo zu verwenden :-). Die Vorlage hat den Bereich markiert der von der Fritz!Box mit Daten beschrieben wird.
Beispiel im LCARS-Stil
Die Vorlage im Format 240 x 320. Lt. AVM soll das aktuell (30.01.2015) die Mindestgröße sein:
Das Script, um die Vorlage mit Daten zu füllen:
#!/bin/bash ### Werte auslesen TGV='{Value("TG_TempLuft")}' TGC=`echo -e $TGV | socat -t50 - TCP:fhem:7072` WGV='{Value("WZ_Thermostat_Weather")}' WGC=`echo -e $WGV | socat -t50 - TCP:fhem:7072` KGV='{Value("KE_Thermostat_S")}' KGC=`echo -e $KGV | socat -t50 - TCP:fhem:7072` BGV='{ReadingsVal("FL_Briefkasten_LED","state",0)}' BGC=`echo -e $BGV | socat -t50 - TCP:fhem:7072` ### jpg erstellen convert -pointsize 28 -font /usr/share/fonts/truetype/ttf-lcars3/LCARSGTJ3.ttf -fill black \ -draw 'text 50,60 "Garten"' -draw "text 117,60 \"$TGC\"" \ -draw 'text 50,100 "Wohnz."' -draw "text 117,100 \"$WGC\"" \ -draw 'text 50,138 "Keller"' -draw "text 117,138 \"$KGC\"" \ -draw 'text 50,177 "Briefk."' -draw "text 117,177 \"$BGC\"" \ -pointsize 36 -draw 'text 5,105 "…"' \ -pointsize 20 -draw 'text 5,179 "FHEM"' Vorlage_LCARS.jpg fritzlcars.jpg ### und ab auf's FritzFon ./fritzfonpic.sh fritzlcars.jpg 610