FritzBox 5.5 per cuxd steuern

Anbindung von FS20-Komponenten, ELV-Wetterstationen, EnOcean und DMX an HomeMatic

Moderator: Co-Administratoren

leinich
Beiträge: 157
Registriert: 03.09.2012, 22:30

Re: FritzBox 5.5 per cuxd steuern

Beitrag von leinich » 03.08.2013, 21:35

Ich vermute mal das es sich hier um den Linux exit code 127 handelt: 'command not found error'

Liegt die FritzBox.sh Datei wirklich dort und hast du die Rechte korrekt gesetzt?

Was erhälst du wenn du den gleichen Befehl per Putty absetzt?

Arminhh
Beiträge: 284
Registriert: 09.05.2011, 09:18

Re: FritzBox 5.5 per cuxd steuern

Beitrag von Arminhh » 03.08.2013, 22:04

Hallo und danke für deine Hilfe!
Rechte sind gesetzt. User Root Putty antwortet mit:

~ # clear
~ # sh /usr/local/addons/cuxd/extra/FritzBox.sh DECT200 16 0
/usr/local/addons/cuxd/extra/FritzBox.sh EndFritzBoxSkript()
EXITCODE: 0
MESSAGE : Erfolgreich
LOGGING : Messages so far captured:
FritzBox.sh 0.4
Parameter CPWMD5 = ./cpwmd5
Parameter HOMEMATIC = localhost
Parameter ADDONDIR = /usr/local/addons/cuxd
Parameter CONFIGFILE = /usr/local/addons/cuxd/extra/FritzBox.conf
Parameter FRITZLOGIN = /login_sid.lua
Parameter FRITZWEBCM = /cgi-bin/webcm
Parameter FRITZHOME = /home/home.lua
Parameter TEMPFile = /var/tmp/FritzBox_tempfile.txt=
Parameter CURLFile = /var/tmp/FritzBox_curlfile.html=
Parameter ANRUFLIST = /var/tmp/FritzBox_anruferliste.csv
Parameter Debug = /var/tmp/FritzBox.log
Parameter FritzBoxURL = http://192.168.xxx.xx
Parameter Username = BoxAdmin
Parameter Passwd = xxxxxxxx
INFO: Befehl DECT200 16 0
LOGIN: Challenge 1f12dd08
LOGIN: SID 0000000000000000
LOGIN: Keine gueltige SID - login aufbauen
LOGIN: login senden und SID herausfischen
LOGIN: ?username=BoxAdmin&response=1f12dd08-3e6109e2b4912ad581c5fbe3f3825302
LOGIN: Gueltige SID: 7047ec93146af002
GET/POST wind protokolliert in /var/tmp/FritzBox_curlfile.html=
POST : sid=7047ec93146af002&command=SwitchOnOff&id=16&value_to_set=0&xhr=1
POST : http://192.168.167.1/net/home_auto_query.lua
POST : Abgesendet

0 Erfolgreich
~ #


mfg
Arminhh

Arminhh
Beiträge: 284
Registriert: 09.05.2011, 09:18

Re: FritzBox 5.5 per cuxd steuern

Beitrag von Arminhh » 03.08.2013, 23:45

danke für die Hilfe! Fehler gefunden! Hatte im Cux Gerät vor dem Aufruf der FritzBox.sh sh vergessen einzugeben!! Also der Aufruf muss sh /usr/local/addons/cuxd/extra/FritzBox.sh WLANGast 0 heissen!!
mfg Armin

Skyborg
Beiträge: 82
Registriert: 14.08.2013, 20:21

Re: FritzBox 5.5 per cuxd steuern

Beitrag von Skyborg » 14.08.2013, 20:43

Guten Abend,

ich hoffe es ist nicht schlimm, habe das Script um die Funktion erweitert den Status von Netzwerk-Geräten aus der Fritzbox auszulesen und in die CCU als SysVar einzutragen.

Wenn ich einen eigenen Thread dafür eröffnen soll dann einfach melden und ich mache das. Wollte aber zumindest der Übersicht halber mich hier zu Wort melden.

Eingesetzt wird dabei Curl um die Webseite von der Fritzbox herunterzuladen.
Dies wird dann über div. Funktionen auf der wichtigste reduziert und letztlich werden die aktiven Geräte mit bis zu 5 übergebenen Paramtern verarbeitet/überprüft (5 Geräte können auf Aktivität geprüft werden).

Eingabe:

Code: Alles auswählen

sh /usr/local/addons/cuxd/extra/FritzBox.sh WLANliste Skyborgs-iPhone HTCOneChris
tiane geraet3 geraet4 geraet5
Die Ausgabe sie letztlich so aus:

Code: Alles auswählen

Step1 : WLANListe wird runterladen ...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 43833    0 43833    0     0  30272      0 --:--:--  0:00:01 --:--:-- 31264
Step2 : WLANListe wird angepasst ...
Step3 : WLANListe wird auslesen ...
http://localhost:8181/loksoft.exe?ret=dom.GetObject("ANW-Christiane").State(1)
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   128  100   128    0     0    820      0 --:--:-- --:--:-- --:--:--  2612
http://localhost:8181/loksoft.exe?ret=dom.GetObject("ANW-Ralf").State(1)
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   128  100   128    0     0   1151      0 --:--:-- --:--:-- --:--:--  2723
Step3 : Fertig
/usr/local/addons/cuxd/extra/FritzBox402.sh EndFritzBoxSkript()
EXITCODE: 0
MESSAGE : Erfolgreich
LOGGING : Messages so far captured:
FritzBox.sh 0.4.1
Parameter CPWMD5      = ./cpwmd5
Parameter HOMEMATIC   = localhost
Parameter ADDONDIR    = /usr/local/addons/cuxd
Parameter CONFIGFILE  = /usr/local/addons/cuxd/extra/FritzBox.conf
Parameter FRITZLOGIN  = /login_sid.lua
Parameter FRITZWEBCM  = /cgi-bin/webcm
Parameter FRITZHOME   = /home/home.lua
Parameter TEMPFile    = /var/tmp/FritzBox_tempfile.txt=
Parameter CURLFile    = /var/tmp/FritzBox_curlfile.html=
Parameter ANRUFLIST   = /var/tmp/FritzBox_anruferliste.csv
Parameter Debug       = /var/tmp/FritzBox.log
Parameter FritzBoxURL = http://fritz.box
Parameter Username    = BoxAdmin
Parameter Passwd      = rb2871d!
INFO:  Befehl WLANliste Skyborgs-iPhone HTCOneChristiane
LOGIN: Challenge 657f84a2
LOGIN: SID       0000000000000000
LOGIN: Keine gueltige SID - login aufbauen
LOGIN: login senden und SID herausfischen
LOGIN: ?username=BoxAdmin&response=657f84a2-ea89ebdd0ad8a73258e52579288c360d
LOGIN: Gueltige SID: 93e4492af814baa9
NWDEV:  ohne Uebereinstimmung:  Christiane 192.168.178.25 E4:D5:3D:81:6D:6D
NWDEV:  ohne Uebereinstimmung:  DS412 192.168.178.222 00:11:32:17:E0:C1
NWDEV: HTCOneChristiane gefunden:  HTCOneChristiane 192.168.178.28 E8:99:C4:8B:92:AD
NWDEV:  ohne Uebereinstimmung:  IPHONERalfFirma 192.168.178.27 44:4C:0C:BA:65:48
NWDEV:  ohne Uebereinstimmung:  SkyPC2010 192.168.178.22 E0:CB:4E:55:30:83
NWDEV: Skyborgs-iPhone gefunden:  Skyborgs-iPhone 192.168.178.21 3C:D0:F8:70:E2:B3
NWDEV:  ohne Uebereinstimmung:  homematic-ccu2 192.168.178.29 00:1A:22:02:B4:B4
Nachdem wurden in der CCU die bis zu 5 Systemvariablen angepasst.
sysvars.JPG
ToDo:
In der Config-Datei die 5 Systemvariablen anlegen die später mit den Anwesenheiten gefüllt werden. (Aktuell noch statisch im Code)
Code optimieren und aufräumen

Mit den Quelltext möchte ich nicht geizen, ist aber noch Beta und funktioniert im Grunde nur nach Anpassung

Code: Alles auswählen

#!/bin/bash
# Michael Leinich 14 Juni 2013 - 22:00
# FritzBox.sh
# Version 0.4.1
# - used curl to get active devices from fritzbox
# - set sysvar on ccu via curl and ccu-xml-api
# Changed by Skyborg 14.08.2013
# ----------------------------------------------------------------------

CPWMD5=./cpwmd5
HOMEMATIC="localhost"

ADDONDIR="/usr/local/addons/cuxd"
CONFIGFILE="/usr/local/addons/cuxd/extra/FritzBox.conf"
FRITZLOGIN="/login_sid.lua"
FRITZWEBCM="/cgi-bin/webcm"
FRITZHOME="/home/home.lua"

TEMPFile="/var/tmp/FritzBox_tempfile.txt"
CURLFile=""
ANRUFLIST="/var/tmp/FritzBox_anruferliste.csv"
WLANLIST="/var/tmp/FritzBox_wlanliste.html"

# Wohin soll geloggt werden
Debug="/var/tmp/debug.txt"
# Alle Debugnachrichten Nachrichten
Debugmsg="FritzBox.sh 0.4.1  \n"

FritzBoxURL="http://fritz.box"
Username=""
Passwd=""

# Parameter 1: POST/GET Daten 
# Parameter 2: (default POST) GET -> Get request
# Parameter 3: Servlet (default FRITZWEBCM) 
PerformPOST(){
	local loggingfile="/dev/null"
	if [ "$Debug" != "" ]; then
		loggingfile=$CURLFile
		Debugmsg=$Debugmsg"GET/POST wind protokolliert in $CURLFile \n"
	fi
	# Parameter 3 ueberpruefen (URL)
	if [ "$3" = "" ]; then
		local URL=$FritzBoxURL$FRITZWEBCM
	else
		local URL=$FritzBoxURL$3
	fi
	# Parameter 2 ueberpruefen (POST oder GET)
	if [ "$2" = "GET" ]; then
		Debugmsg=$Debugmsg"GET  : $1 \n"
		Debugmsg=$Debugmsg"GET  : URL $URL?$1 \n"
		../curl -s "$URL?$1" >$loggingfile
		Debugmsg=$Debugmsg"GET : Abgesendet \n"
	else
		Debugmsg=$Debugmsg"POST : $1 \n"
		Debugmsg=$Debugmsg"POST : $URL \n"
		../curl -s -d "$1" "$URL" >$loggingfile
		Debugmsg=$Debugmsg"POST : Abgesendet \n"
	fi
}

EndFritzBoxSkript() {
	local exitcode=$1
	local debugmessage=$2
	if [ "$Debug" != "" ]; then
# Ausgabe in Komandozeile
echo -e "$0 EndFritzBoxSkript() 
EXITCODE: $exitcode
MESSAGE : $debugmessage
LOGGING : Messages so far captured:
$Debugmsg"
# Logging in Debugfile
echo -e "$0 EndFritzBoxSkript() 
EXITCODE: $exitcode
MESSAGE : $debugmessage
LOGGING Messages so far captured: 
$Debugmsg" > $Debug
	fi
	echo $exitcode $debugmessage
	exit $exitcode
}

LOGIN(){
	# Downlod Login XML nach TempFile
	../curl -s "$FritzBoxURL$FRITZLOGIN">$TEMPFile
	SessionInfoChallenge=$(sed -n '/.*<Challenge>\([^<]*\)<.*/s//\1/p' $TEMPFile)
	SessionInfoSID=$(sed -n '/.*<SID>\([^<]*\)<.*/s//\1/p' $TEMPFile)
	Debugmsg=$Debugmsg"LOGIN: Challenge $SessionInfoChallenge \n"
	Debugmsg=$Debugmsg"LOGIN: SID       $SessionInfoSID \n"
		if [ "$SessionInfoSID" = "0000000000000000" ]; then
		Debugmsg=$Debugmsg"LOGIN: Keine gueltige SID - login aufbauen \n"
		CPSTR="$SessionInfoChallenge-$Passwd"
		MD5=`$CPWMD5 $CPSTR`
		RESPONSE="$SessionInfoChallenge-$MD5" 
		Debugmsg=$Debugmsg"LOGIN: login senden und SID herausfischen \n"
		GETDATA="?username=$Username&response=$RESPONSE"
		Debugmsg=$Debugmsg"LOGIN: $GETDATA \n"
		../curl -s "$FritzBoxURL$FRITZLOGIN$GETDATA">$TEMPFile
		SID=$(sed -n '/.*<SID>\([^<]*\)<.*/s//\1/p' $TEMPFile)
		rm $TEMPFile
	else
		SID=$SessionInfoSID
		Debugmsg=$Debugmsg"LOGIN: Bereits erfolgreiche SID: $SID \n"
	fi
	if [ "$SID" = "0000000000000000" ]; then
		Debugmsg=$Debugmsg"LOGIN: ERROR - Konnte keine gueltige SID ermitteln \n"
		EndFritzBoxSkript 3 "Keine-gueltige-Anmeldung-moeglich-PassWortoderUser-falsch"
	else
		Debugmsg=$Debugmsg"LOGIN: Gueltige SID: $SID \n"
	fi
}

# Lese CONFIGFILE und ersetzen KEY: Value
eval `sed '/^ *#/d;s/:/ /;' < "$CONFIGFILE" | while read key val
do
    str="$key='$val'"
    echo "$str"
done`

# Debug Setzte alle Parameter für Logfile
Debugmsg=$Debugmsg"Parameter CPWMD5      = $CPWMD5 \n"
Debugmsg=$Debugmsg"Parameter HOMEMATIC   = $HOMEMATIC \n"
Debugmsg=$Debugmsg"Parameter ADDONDIR    = $ADDONDIR \n"
Debugmsg=$Debugmsg"Parameter CONFIGFILE  = $CONFIGFILE \n"
Debugmsg=$Debugmsg"Parameter FRITZLOGIN  = $FRITZLOGIN\n"
Debugmsg=$Debugmsg"Parameter FRITZWEBCM  = $FRITZWEBCM \n"
Debugmsg=$Debugmsg"Parameter FRITZHOME   = $FRITZHOME \n"
Debugmsg=$Debugmsg"Parameter TEMPFile    = $TEMPFile \n"
Debugmsg=$Debugmsg"Parameter CURLFile    = $CURLFile \n"
Debugmsg=$Debugmsg"Parameter ANRUFLIST   = $ANRUFLIST \n"
Debugmsg=$Debugmsg"Parameter Debug       = $Debug \n"
Debugmsg=$Debugmsg"Parameter FritzBoxURL = $FritzBoxURL \n"
Debugmsg=$Debugmsg"Parameter Username    = $Username \n"
Debugmsg=$Debugmsg"Parameter Passwd      = $Passwd \n"

if [ "$Passwd" = "" ]; then
	EndFritzBoxSkript 1 "Passwort-nicht-gesetzt-CONF-Datei-pruefen"
fi	

# Wechsle in das Addonverzeichnis
export LD_LIBRARY_PATH=$ADDONDIR
cd $ADDONDIR/extra

Debugmsg=$Debugmsg"INFO:  Befehl $1 $2 $3 \n"
case $1 in
	"test")  		LOGIN
					suche="true"
					linie=\"DECT\"
					string=$(wget -O - "$FritzBoxURL$FRITZHOME?sid=$SID" 2>/dev/null | grep $linie )
					if echo "$string" | egrep -q "true" ; then
						echo "TRUE: $string"
					else
						echo "FALSE: $string"
					fi
					;;
	"WLAN")  		LOGIN
					PerformPOST "wlan:settings/ap_enabled=$2&sid=$SID" "POST";;
	"WLAN5")		LOGIN
					PerformPOST "wlan:settings/ap_enabled_scnd=$2&sid=$SID" "POST";;
	"WLANGast")		LOGIN
					PerformPOST "wlan:settings/guest_ap_enabled=$2&sid=$SID" "POST";;
	"WLANNacht")	LOGIN
					PerformPOST "wlan:settings/night_time_control_no_forced_off=$2&sid=$SID" "POST";;
	"DECT")			LOGIN
					PerformPOST "dect:settings/enabled=$2&sid=$SID" "POST";;	
	"NACHTRUHE") 	LOGIN
					PerformPOST "box:settings/night_time_control_enabled=$2&sid=$SID" "POST";;
	"KLINGELSPERRE") LOGIN
					PerformPOST "box:settings/night_time_control_ring_blocked=$2&sid=$SID" "POST";;
	"RUFUMLEITUNG") LOGIN 
					PerformPOST "telcfg:settings/CallerIDActions$2/Active=$3&sid=$SID" "POST";;
	"Diversity")	LOGIN 
					PerformPOST "telcfg:settings/Diversity$2/Active=$3&sid=$SID" "POST";;	
	"ANRUFEN") 		LOGIN 
					PerformPOST "telcfg:command/Dial=$2&sid=$SID" "POST";;
	"DECT200")		LOGIN
					PerformPOST "sid=$SID&command=SwitchOnOff&id=$2&value_to_set=$3&xhr=1" "POST" "/net/home_auto_query.lua" "DECTCOMMAND0.txt";;
	"DECT200Status") LOGIN
					PerformPOST "sid=$SID&command=AllOutletStates&xhr=0" "POST" "/net/home_auto_query.lua" "DECT200Status0.txt"
					PerformPOST "sid=$SID&command=EnergyStats_10&id=$2&xhr=0" "POST" "/net/home_auto_query.lua" "DECT200ENERGIE0.txt";;
	"WLANliste") 	LOGIN
					echo "Step1 : WLANListe wird runterladen ..."
					../curl -o $WLANLIST "$FritzBoxURL/net/network_user_devices.lua?sid=$SID" 
					echo "Step2 : WLANListe wird angepasst ..."
					#Werte werden die Infos werden aus der HTML ausgeschnitten
					more /var/tmp/FritzBox_wlanliste.html | grep '"_node"] = "landevice' -A27 -B2 >/var/tmp/FritzBox_wlanliste.cs1
					#Die " und die Klammern [] werden entfernt
					more /var/tmp/FritzBox_wlanliste.cs1 | sed -e 's/\["//g' -e 's/\"]//g' -e 's/\"//g' >> /var/tmp/FritzBox_wlanliste.cs2
					#Die Kalemmern werden entfernt [] und pro Geräte wird eine Zeile erzeugt
					while read line; do
						case "$line" in
						*[*)
							wlandata=$(echo "$line" | sed -e 's/\[//g' -e 's/\]/ :/g' -e 's/\= {//g')
							outwlan=${outwlan}'\n'${wlandata};;
						*)
							outwlan=$outwlan"$line";;
						esac
					done < /var/tmp/FritzBox_wlanliste.cs2
					#Die Parameter der Netzwerkgeräte werden Zeilenweise in eine Datei geschrieben
					echo -e "$outwlan" >/var/tmp/FritzBox_wlanliste.fin
					#TMP-Dateien aufräumen
					rm /var/tmp/FritzBox_wlanliste.cs2
					rm /var/tmp/FritzBox_wlanliste.cs1
					rm $WLANLIST
					
					echo "Step3 : WLANListe wird auslesen ..."
					#Leerzeilen werden entfernt und nur aktive Geräte werden erfasst
					while read line; do
						case "$line" in
						*'active = 1'*)
							wlandata2=$line
							if [ -n "$outwlanact" ]; then
								outwlanact=${outwlanact}'\n'${wlandata2}
							else
								outwlanact=${wlandata2}
							fi
						esac
					done < /var/tmp/FritzBox_wlanliste.fin
					echo -e "$outwlanact" >/var/tmp/FritzBox_wlanactive.fin
					rm /var/tmp/FritzBox_wlanliste.fin
					#Vergleich er ermittelten Daten mit den übergebenen CCU-Sysvars
					#Aus jeder Zeile (Gerät) werden alle Parameter nacheinander in eine Datei zum Vergleich geschrieben
					while read line; do
						echo $line | awk -F "," '{ for (i=1; i<=NF; i++) print $i }' >/var/tmp/FritzBox_wlanactive.cs1
						while read line; do
							#Vegleich nach Name,Mac,IP
							case "$line" in
								'name ='*)
								   name=`echo $line | cut -f2 -d'='`;;
								*'mac ='*)
								   mac=`echo $line | cut -f2 -d'='`;;
								*'ip ='*)
								   ip=`echo $line | cut -f2 -d'='`;;
							esac
						  done < /var/tmp/FritzBox_wlanactive.cs1
					  # Wenn bis zu 5 System-Variablen übergeben wurden, werden diese Pro Gerät verglichen
					  matched=0
					  if [ -n "$2" ]; then
						  if [ $2 == $name ]; then
							  matched=1
							  ../curl -o $WLANLIST "http://127.0.0.1:8181/loksoft.exe?ret=dom.GetObject(\"ANW-Ralf\").State(\"1\")"
							  Debugmsg=$Debugmsg"NWDEV: "$2" gefunden: "$name$ip$mac" \n"
						  fi
					  fi
					  if [ -n "$3" ]; then
						  if [ $3 == $name ]; then
								matched=1
								../curl -o $WLANLIST "http://127.0.0.1:8181/loksoft.exe?ret=dom.GetObject(\"ANW-Christiane\").State("1")"
								Debugmsg=$Debugmsg"NWDEV: "$3" gefunden: "$name$ip$mac" \n"
						  fi
					  fi
					  if [ -n "$4" ]; then
						  if [ $4 == $name ]; then
								matched=1
								Debugmsg=$Debugmsg"NWDEV: "$4" gefunden: "$name$ip$mac" \n"
						  fi
					  fi
					  if [ -n "$5" ]; then
						  if [ $5 == $name ]; then
								matched=1
								Debugmsg=$Debugmsg"NWDEV: "$5" gefunden: "$name$ip$mac" \n"
						  fi
					  fi
					  if [ -n "$6" ]; then
						  if [ $6 == $name ]; then
								matched=1
								Debugmsg=$Debugmsg"NWDEV: "$6" gefunden: "$name$ip$mac" \n"
						  fi
					  fi
					  if [ $matched == 0 ]; then
						Debugmsg=$Debugmsg"NWDEV: "$6" ohne Uebereinstimmung: "$name$ip$mac" \n"
					  fi
					done < /var/tmp/FritzBox_wlanactive.fin
					
					echo "Step3 : Fertig" ;;
	"Anrufliste") 	LOGIN
					wget -O - "$FritzBoxURL/fon_num/foncalls_list.lua?sid=$SID&csv=" >$ANRUFLIST 
					echo "Step3 : Anrufliste runterladen" ;;
	"Anrufliste2CCU")
					LOGIN
					wget -O - "$FritzBoxURL/fon_num/foncalls_list.lua?sid=$SID&csv=" >$ANRUFLIST 
					echo "Step3 : Anrufliste runterladen"
					out="<table id='fritz'>"
					count=0
					anzahl=`expr $3 + 1`
					while read line; do
						if [ $count -eq $anzahl ]; then
							break       	   
						fi
						if [ "$count" -gt "0" ]; then
							typ=`echo "$line" | cut -f1 -d';'`
							datum=`echo "$line" | cut -f2 -d';'`
							name=`echo "$line" | cut -f3 -d';'`
							rufnummer=`echo "$line" | cut -f4 -d';'`
							nebenstelle=`echo "$line" | cut -f5 -d';'`
							eigene=`echo "$line" | cut -f6 -d';'`
							dauer=`echo "$line" | cut -f7 -d';'`
							echo "DATEN: $count - $rufnummer - $dauer"
							out=$out"<tr><td class='fritz_"$typ"'/><td>"$datum"</td><td>"$name"</td><td>"$rufnummer"</td><td>"$nebenstelle"</td><!--<td>"$eigene"</td>--><td>"$dauer"</td></tr>"
						fi
						count=`expr $count + 1`
					done < $ANRUFLIST
					out=$out"</table>"
					urlencode=$(echo "$out" | sed -e 's/%/%25/g' -e 's/ /%20/g' -e 's/!/%21/g' -e 's/"/%22/g' -e 's/#/%23/g' -e 's/\$/%24/g' -e 's/\&/%26/g' -e 's/'\''/%27/g' -e 's/(/%28/g' -e 's/)/%29/g' -e 's/\*/%2a/g' -e 's/+/%2b/g' -e 's/,/%2c/g' -e 's/-/%2d/g' -e 's/\./%2e/g' -e 's/\//%2f/g' -e 's/:/%3a/g' -e 's/;/%3b/g' -e 's//%3e/g' -e 's/?/%3f/g' -e 's/@/%40/g' -e 's/\[/%5b/g' -e 's/\\/%5c/g' -e 's/\]/%5d/g' -e 's/\^/%5e/g' -e 's/_/%5f/g' -e 's/`/%60/g' -e 's/{/%7b/g' -e 's/|/%7c/g' -e 's/}/%7d/g' -e 's/~/%7e/g')
					wget -O - "http://$HOMEMATIC/addons/webmatic/cgi/set.cgi?id=$2&value=$urlencode"
					echo "Step3 : Anrufliste an CCU gesendet";;
	"reboot") 		LOGIN
					PerformPOST "logic:command/reboot=../gateway/commands/saveconfig.html&sid=$SID" "POST" 
					PerformPOST "security:command/logout=1&sid=$SID" "POST";;
	*) 				Debugmsg=$Debugmsg"MAIN :  ERROR - Bitte wie folgt aufrufen: \n"
					Debugmsg=$Debugmsg"        ./FritzBox.sh BEFEHL WERT (0=aus|1=ein) \n"
					Debugmsg=$Debugmsg"        Verfuegbar:  \n"
					Debugmsg=$Debugmsg"        ./FritzBox.sh WLAN [0|1] \n"
					Debugmsg=$Debugmsg"        ./FritzBox.sh WLAN5 [0|1] \n"
					Debugmsg=$Debugmsg"        ./FritzBox.sh WLANGast [0|1] \n"
					Debugmsg=$Debugmsg"        ./FritzBox.sh WLANNacht [0|1] \n"
					Debugmsg=$Debugmsg"        ./FritzBox.sh DECT [0|1] \n"
					Debugmsg=$Debugmsg"        ./FritzBox.sh NACHTRUHE [0|1] \n"
					Debugmsg=$Debugmsg"        ./FritzBox.sh KLINGELSPERRE [0|1] \n"
					Debugmsg=$Debugmsg"        ./FritzBox.sh ANRUFEN [(Telefonnummer z.B. **610)] \n"
					Debugmsg=$Debugmsg"        ./FritzBox.sh RUFUMLEITUNG [0|1|2|3(Rufumleistung)] [0|1] \n"
					Debugmsg=$Debugmsg"        ./FritzBox.sh Diversity [0|1|2|3(Rufumleistung)] [0|1] \n"
					Debugmsg=$Debugmsg"        ./FritzBox.sh DECT200 [16|17|18|19] [0|1] \n"
					Debugmsg=$Debugmsg"        ./FritzBox.sh Anrufliste \n"
					Debugmsg=$Debugmsg"        ./FritzBox.sh Anrufliste2CCU [0000(HOMEMATIC Webmatic SYSVAR ID)] [Anzahl Eintraege] \n"
					Debugmsg=$Debugmsg"        ./FritzBox.sh reboot \n"
					EndFritzBoxSkript 4 "Falscher-Parameter-Aufruf-$1-$2-$3-$4";;
esac
EndFritzBoxSkript 0 "Erfolgreich"

leinich
Beiträge: 157
Registriert: 03.09.2012, 22:30

Re: FritzBox 5.5 per cuxd steuern

Beitrag von leinich » 15.08.2013, 09:09

Hallo Skyborg,

super. Ich bin immer froh, wenn man jemand findet der sich an der Weiterentwicklung beteiligt.
Räumst du deinen Code noch auf, oder soll ich da ein paar Verbesserungen machen?
Ich denke wir haben den gleichen Ansatz mein WLAN Aktiv war noch nicht ganz fertig. Ich habe bisher nur nach MAC Adressen gesucht.
ggf. können wir das kombinieren

Code: Alles auswählen

# 9 Zeilen über den Treffen ausgeben wo die MAC Adresse 00.00.00.00.00.00 übereinstimmt und such nach active=1
output = `grep -B 9 -n "\"00:00:00:00:00:00\"" $path_to_curl_file`
search="[\"active\"] = \"\1\"";
# Suche nach search in ausgabe
if [ `echo $output | grep -c "$search" ` -gt 0 ]
then
  echo "Success active=1 für Macadresse"
else
  echo "Fail Macadresse";
fi
Dann würde ich mit der nächsten Version auch ein paar Verbesserungen/Features mit reinmachen.
Fertig:
- SID zwischenspeichern. So muss nur alle 10Min ein erneuter Login gemacht werden muss (spat bis zu 3 Sek pro Aufruf)
- FritzBox auf UMTS Modus / DSL Modus stellen

davidmuc
Beiträge: 105
Registriert: 15.08.2010, 00:27
Hat sich bedankt: 1 Mal

Re: FritzBox 5.5 per cuxd steuern

Beitrag von davidmuc » 15.08.2013, 09:18

Ihr seid super! Freue mich schon auf die neue Version! (...mangels Danke-/Like-Button spamme ich meine Freude mit diesem Post)

Skyborg
Beiträge: 82
Registriert: 14.08.2013, 20:21

Re: FritzBox 5.5 per cuxd steuern

Beitrag von Skyborg » 15.08.2013, 10:24

leinich hat geschrieben:Hallo Skyborg,

super. Ich bin immer froh, wenn man jemand findet der sich an der Weiterentwicklung beteiligt.
Räumst du deinen Code noch auf, oder soll ich da ein paar Verbesserungen machen?
Ich denke wir haben den gleichen Ansatz mein WLAN Aktiv war noch nicht ganz fertig. Ich habe bisher nur nach MAC Adressen gesucht.
ggf. können wir das kombinieren

Code: Alles auswählen

# 9 Zeilen über den Treffen ausgeben wo die MAC Adresse 00.00.00.00.00.00 übereinstimmt und such nach active=1
output = `grep -B 9 -n "\"00:00:00:00:00:00\"" $path_to_curl_file`
search="[\"active\"] = \"\1\"";
# Suche nach search in ausgabe
if [ `echo $output | grep -c "$search" ` -gt 0 ]
then
  echo "Success active=1 für Macadresse"
else
  echo "Fail Macadresse";
fi
Dann würde ich mit der nächsten Version auch ein paar Verbesserungen/Features mit reinmachen.
Fertig:
- SID zwischenspeichern. So muss nur alle 10Min ein erneuter Login gemacht werden muss (spat bis zu 3 Sek pro Aufruf)
- FritzBox auf UMTS Modus / DSL Modus stellen
Hi Leinich,

natürlich räume ich ich den Code noch auf !!!
Da muss auch noch ein wenig was angepasst werden. Damit es zu 100% in das ursprüngliche Schema passt.
- Konfigfileanpassung für Systemvariablen der CCU
- Codeoptimierung
- An- und Abmeldefunktion für WLAN-Geräte mit Option ob nur Anmeldungen oder auch Abmeldungen durchgeführt werden sollen.

Wenn du Verbesserungsvorschläge hast, immer her damit :)
So der gut Bash-Programmierer bin ich leider nicht.

Habe es seit gestern Abend für mir hier erst einmal lauffähig für 2 Geräte, das somit erst der erste Test.

Aktuell läuft es :)

Hast du noch eine aktuellere Version als diese hier?
Dann würde ich die Anpassungen daran machen. Oder auf die nächste Version warten und das dort dann implementieren.

Will ja auch Dir keine zusätzliche Arbeit machen!!!

EDIT: Wie ich sehe verfolgen wir den gleichen Ansatz !!! Du ließt auch den Code am Ende aus.

Ich lese übrigens den Code am Ende der HTML-Datei aus Das ist Beispielhaft ein Drucker, dort suche ich dann nach
dem aktiven Geräte und Filtere auf Mac Name IP obwohl der Name schon reichen würde.:

Code: Alles auswählen

["landevice:settings/landevice/list(name,ip,mac,UID,dhcp,wlan,ethernet,active,static_dhcp,manu_name,wakeup,deleteable,source,online,speed,wlan_UIDs,auto_wakeup,guest,url,wlan_station_type,vendorname,parentname,parentuid,ethernet_port,wlan_show_in_monitor,plc,ipv6_ifid)"] = {
    [1] = {
      ["UID"] = "landevice8529", 
      ["_node"] = "landevice0", 
      ["active"] = "0", 
      ["auto_wakeup"] = "0", 
      ["deleteable"] = "1", 
      ["dhcp"] = "1", 
      ["ethernet"] = "0", 
      ["ethernet_port"] = "0", 
      ["guest"] = "0", 
      ["ip"] = "192.168.178.23", 
      ["ipv6_ifid"] = "", 
      ["mac"] = "00:15:99:91:52:BE", 
      ["manu_name"] = "1", 
      ["name"] = "CLX-3185FW", 
      ["online"] = "0", 
      ["parentname"] = "", 
      ["parentuid"] = "", 
      ["plc"] = "0", 
      ["source"] = "0x1114", 
      ["speed"] = "0", 
      ["static_dhcp"] = "1", 
      ["url"] = "", 
      ["vendorname"] = "", 
      ["wakeup"] = "0", 
      ["wlan"] = "0", 
      ["wlan_UIDs"] = "", 
      ["wlan_show_in_monitor"] = "0", 
      ["wlan_station_type"] = ""

Ich helfe gern wenn ich kann und wenn wir irgendwas besser zusammen erarbeiten können, gern!
Kannst dich gern via PN oder so melden.

Gruß Ralf aka. Skyborg

eisenkarl
Beiträge: 148
Registriert: 20.01.2011, 17:16

Re: FritzBox 5.5 per cuxd steuern

Beitrag von eisenkarl » 30.08.2013, 11:10

Ich möchte meine Fritz gerne neu starten lassen und erhalte folgenden Fehler:

~ # sh /usr/local/addons/cuxd/extra/FritzBox.sh reboot
/usr/local/addons/cuxd/extra/FritzBox.sh: 231: ../curl: not found
/usr/local/addons/cuxd/extra/FritzBox.sh: 231: ../curl: not found
/usr/local/addons/cuxd/extra/FritzBox.sh: 231: ../curl: not found
/usr/local/addons/cuxd/extra/FritzBox.sh EndFritzBoxSkript()
EXITCODE: 0
MESSAGE : Erfolgreich
LOGGING : Messages so far captured:
FritzBox.sh 0.4
Parameter CPWMD5 = ./cpwmd5
Parameter HOMEMATIC = localhost
Parameter ADDONDIR = /usr/local/addons/cuxd
Parameter CONFIGFILE = /usr/local/addons/cuxd/extra/FritzBox.conf
Parameter FRITZLOGIN = /login_sid.lua
Parameter FRITZWEBCM = /cgi-bin/webcm
Parameter FRITZHOME = /home/home.lua
Parameter TEMPFile = /var/tmp/FritzBox_tempfile.txt=
Parameter CURLFile = /var/tmp/FritzBox_curlfile.html=
Parameter ANRUFLIST = /var/tmp/FritzBox_anruferliste.csv
Parameter Debug = /var/tmp/FritzBox.log
Parameter FritzBoxURL = 192.168.0.10
Parameter Username = BoxAdmin
Parameter Passwd = 12345
INFO: Befehl reboot
LOGIN: Challenge
LOGIN: SID
LOGIN: Bereits erfolgreiche SID:
LOGIN: Gueltige SID:
GET/POST wind protokolliert in /var/tmp/FritzBox_curlfile.html=
POST : logic:command/reboot=../gateway/commands/saveconfig.html&sid=
POST : 192.168.0.10/cgi-bin/webcm
POST : Abgesendet
GET/POST wind protokolliert in /var/tmp/FritzBox_curlfile.html=
POST : security:command/logout=1&sid=
POST : 192.168.0.10/cgi-bin/webcm
POST : Abgesendet

0 Erfolgreich

Wo sucht er das curl bzw wie bekomme ich es da hin?

EDIT:

Habe neuste CuxD installiert und schon klappts, sorry

h4zz
Beiträge: 130
Registriert: 11.09.2011, 17:13
Wohnort: Rheinland-Pfalz, Kreis Bad Kreuznach

Re: FritzBox 5.5 per cuxd steuern

Beitrag von h4zz » 02.09.2013, 20:33

Hi,

danke das du dein Script weiterentwickelt hast.

Ich habe da ein Problem, evtl habt ihr ja noch eine Idee.

Das alte Script, bei mir hauptsächlich für die Anrufliste abzuziehen verwendet, hat bis zum Umstieg auf die CCu2 einwandfrei funktioniert.
Seither meldet es falsches Passwort. habe schon einen neuen User angelegt, Rechte X mal kontrolliert, alles ohne Erfolg.

Dann dachte ich teste ich doch mal das neue Script... dies meldet ebenfalls

Code: Alles auswählen

3 Keine-gueltige-Anmeldung-moeglich-PassWortoderUser-falsch
Wenn ich mich von "Hand" einlogge funktionieren die User einwandfrei.

Der benutzername wird ebenfalls einwandfrei übernommen

Code: Alles auswählen

LOGIN: ?username=ccu&response=xxx
Vllt hat ja jemand die zündende Idee... Falsche Codierung evtl? wurde per SCP übertragen...
Gruß
Fabian

------------------------------------------
299 Kanäle in 85 Geräten
CUNO,CCU Historian, Webmatic...
--------------------------------------------

dzeh75
Beiträge: 15
Registriert: 03.09.2013, 13:14

Re: FritzBox 5.5 per cuxd steuern

Beitrag von dzeh75 » 03.09.2013, 13:19

Bei mir funktioniert ANRUFEN nicht. Immer wenn ich ..."/FritzBox.sh ANRUFEN [**610]" über die Konsole aufrufe, hängt sich diese auf. Ein Anruf wird nicht getätigt. Kann es sein, dass die FritzBox 6840 LTE (Firmware 5.55) Probleme mit "PerformPOST "telcfg:command/Dial=$2&sid=$SID" "POST";;" hat? Eine Anrufliste erstellen klappt problemlos...

Nehme alles zurück. Die Wählhilfe stand auf Mobilteil 1. Und das wollte ich die ganze Zeit klingeln lassen. Das geht natürlich nicht... :-D

Antworten

Zurück zu „CUxD“