Die Leistungsanzeige habe ich aktuell nicht implementiert.
Bisher kann mein Skript Sonoff Basic und Sonoff TH10 an steuern, andere Hardware hatte ich nicht zum testen.
Als Vorraussetzung sollte auf den Sonoff Geräten die Firmware von https://github.com/xoseperez/espurna/wiki installiert sein, ausserdem muß dort die HTTP API aktiviert sein.
Wie das geht steht unter https://github.com/xoseperez/espurna/wiki/RESTAPI: Desweiteren wird natürlich das CUxD Addon benötigt.
Ist das alles bereits vorhanden können wir nun damit anfangen alles einzurichten.
Als erstes kopieren wir das folgende Skript auf die CCU2 nach /usr/local/addons/cuxd/user/espurna.sh:
Code: Alles auswählen
#!/bin/sh
# set -x
# Version: 0.2
# Date: 2018-05-17
# Changelog:
# small fixes, for wrong apikey
# More Detail and how you enable espurna restapi:
# https://github.com/xoseperez/espurna/wiki/RESTAPI
FUNC=$1
CHANNEL=$2
IPADDR=$3
APIKEY=$4
VALUE=$5
HOMEMATIC="127.0.0.1"
AVAILABLE=2 # Status: unbekannt
DEBUG=0
CURL=/usr/bin/curl
CURL_timout='-m 5'
set_CCU_SysVar(){
Debugmsg1=$Debugmsg1"set_CCU_SysVar: \n\t\tValue: $1\n\t\tCCU-System-Variable: $2\n"
if [ "$1" != "" ]; then
Debugmsg1=$Debugmsg1"\t\thttp://$HOMEMATIC:8181/Test.exe?Status=dom.GetObject%28%27$2%27%29.State%28%22$1%22%29 \n"
TEST=$(${CURL} -s $CURL_timout "http://$HOMEMATIC:8181/Test.exe?Status=dom.GetObject%28%27$2%27%29.State%28%22$1%22%29")
else
Debugmsg1=$Debugmsg1"\t\t$IPADDR -> set_CCU_SysVar: $2 - Fehler, keine Status.\n"
logger -i -t $0 -p 3 "$IPADDR -> set_CCU_SysVar: $2 - Fehler, keine Status."
fi
}
set_CUxD_state(){
Debugmsg1=$Debugmsg1"set_CUxD_state: \n\t\tValue: $1\n\t\tCUX-CHANNEL: $2\n"
if [ "$1" != "" ]; then
Debugmsg1=$Debugmsg1"\t\thttp://$HOMEMATIC:8181/Test.exe?Status=dom.GetObject%28%27CUxD.$2.SET_STATE%27%29.State%28%22$1%22%29 \n"
TEST=$(${CURL} -s $CURL_timout "http://$HOMEMATIC:8181/Test.exe?Status=dom.GetObject%28%27CUxD.$2.SET_STATE%27%29.State%28%22$1%22%29")
else
Debugmsg1=$Debugmsg1"\t\t$IPADDR -> set_CUxD_state: $2 - Fehler, keine Status.\n"
logger -i -t $0 -p 3 "$IPADDR -> set_CUxD_state: $2 - Fehler, keine Status."
fi
}
checkDevice(){
TEST=$(ping -c 1 -w 1 $1)
if [ $? -eq 0 ]
then
AVAILABLE=1 # Status: erreichbar
STATE=$(${CURL} -s $CURL_timout "http://${IPADDR}/apis?apikey=${APIKEY}" | grep api)
if [ $? -eq 0 ]
then
AVAILABLE=1 # Status: erreichbar
else
AVAILABLE=0 # Status: nicht erreichbar
fi
else
AVAILABLE=0 # Status: nicht erreichbar
fi
}
func_switch(){
if [ $AVAILABLE -ge 1 ] ; then
Debugmsg1=$Debugmsg1"func: \t\t$1\ncmd: \t\t${CURL} -s $CURL_timout \"http://${IPADDR}/api/relay/0?apikey=${APIKEY}&value=${VALUE}\" \n"
TEST=$(${CURL} -s $CURL_timout "http://${IPADDR}/api/relay/0?apikey=${APIKEY}&value=${VALUE}")
STATE=$(${CURL} -s $CURL_timout "http://${IPADDR}/api/relay/0?apikey=${APIKEY}")
echo -e "\tswitch[0|1]: ${STATE}"
set_CUxD_state $STATE $CHANNEL
fi
echo -e "\tavailable: $AVAILABLE"
set_CCU_SysVar $AVAILABLE $CHANNEL-status
}
func_switch_temperature(){
STATE=0
if [ $AVAILABLE -ge 1 ] ; then
Debugmsg1=$Debugmsg1"func: \t\t$1\ncmd: \t\t${CURL} -s $CURL_timout \"http://${IPADDR}/api/temperature?apikey=${APIKEY}\" \n"
STATE=$(${CURL} -s $CURL_timout "http://${IPADDR}/api/temperature?apikey=${APIKEY}")
echo -e "\ttemperature: $STATE"
set_CCU_SysVar $STATE $CHANNEL-temperature
fi
}
func_switch_humidity(){
STATE=0
if [ $AVAILABLE -ge 1 ] ; then
Debugmsg1=$Debugmsg1"func: \t\t$1\ncmd: \t\t${CURL} -s $CURL_timout \"http://${IPADDR}/api/humidity?apikey=${APIKEY}\" \n"
STATE=$(${CURL} -s $CURL_timout "http://${IPADDR}/api/humidity?apikey=${APIKEY}")
echo -e "\thumidity: $STATE"
set_CCU_SysVar $STATE $CHANNEL-humidity
fi
}
if [ $DEBUG -eq 1 ] ; then
Debugmsg1=$Debugmsg1"$(basename $0) $1 $CHANNEL $IPADDR $APIKEY $VALUE \n\n"
Debugmsg1=$Debugmsg1"channel: \t$CHANNEL\n"
Debugmsg1=$Debugmsg1"IP-Addr: \t$IPADDR\n"
Debugmsg1=$Debugmsg1"API-Key: \t$APIKEY\n"
Debugmsg1=$Debugmsg1"Value:\t\t$VALUE\n\n"
fi
case $1 in
"switch")
checkDevice $IPADDR
func_switch $1
;;
"switch-t")
checkDevice $IPADDR
func_switch $1
func_switch_temperature $1
;;
"switch-th")
checkDevice $IPADDR
func_switch $1
func_switch_temperature $1
func_switch_humidity $1
;;
"status")
checkDevice $IPADDR
if [ $AVAILABLE -ge 1 ] ; then
Debugmsg1=$Debugmsg1"func: \t\t$1\ncmd: \t\t${CURL} -s $CURL_timout \"http://${IPADDR}/apis?apikey=${APIKEY}\" \n"
TEST=$(${CURL} -s $CURL_timout "http://${IPADDR}/apis?apikey=${APIKEY}")
echo $TEST
else
echo -e "api-key or ip-adresse are wrong"
echo -e "couldn't connect to device\n"
fi
;;
*)
echo -e "Usage:"
echo -e "\t $(basename $0) [switch|switch-t|switch-th] [CUX2801xxx:x] [ipaddr] [apikey] [value]\n\n"
echo -e "Examples:"
echo -e "\t $(basename $0) switch CUX2801xxx:x 192.168.x.x 1234567890123456 \t # status switch"
echo -e "\t $(basename $0) switch CUX2801xxx:x 192.168.x.x 1234567890123456 0 \t # switch off"
echo -e "\t $(basename $0) switch CUX2801xxx:x 192.168.x.x 1234567890123456 1 \t # switch on"
echo -e "\t $(basename $0) switch CUX2801xxx:x 192.168.x.x 1234567890123456 2 \t # switch toggle on/off"
echo -e "\t $(basename $0) switch-t CUX2801xxx:x 192.168.x.x 1234567890123456 \t # status switch and temperature"
echo -e "\t $(basename $0) switch-t CUX2801xxx:x 192.168.x.x 1234567890123456 0 \t # switch off with temperature"
echo -e "\t $(basename $0) switch-t CUX2801xxx:x 192.168.x.x 1234567890123456 1 \t # switch on with temperature"
echo -e "\t $(basename $0) switch-th CUX2801xxx:x 192.168.x.x 1234567890123456 \t # status switch, temperature and humidity"
echo -e "\t $(basename $0) switch-th CUX2801xxx:x 192.168.x.x 1234567890123456 0 \t # switch off with status temperature and humidity"
echo -e "\t $(basename $0) switch-th CUX2801xxx:x 192.168.x.x 1234567890123456 1 \t # switch on with status temperature and humidity"
echo -e "\t $(basename $0) status CUX2801xxx:x 192.168.x.x 1234567890123456 \t # espurna available restapi"
exit 0
;;
esac
if [ $DEBUG -eq 1 ]
then
echo -e "\n\n"
echo -e "-----------------------------------------------------------------------------------------------------"
echo -e " Debug Ausgaben"
echo -e "-----------------------------------------------------------------------------------------------------"
echo -e $Debugmsg1
fi
exit 0
Code: Alles auswählen
chmod +x /usr/local/addons/cuxd/user/espurna.sh
Funktion: Exec
Seriennummer: kann die Vorgabe verwendet werden.
Name: kann die Vorgabe verwendet werden, ich habe es "CUxD espurna1" genannt.
Geräte-Icon: Fernbedienung 19 Tasten
Control: Schalter
Danach "Gerät auf CCU erzeugen" drücken und auf die CCU2 Web Oberfläche wechseln.
Auf der CCU2 Oberfläche fügen wir nun ein neuers Gerät hinzu, im Posteingang sollte das soeben erstelle neue Gerät bereits angezeigt werden. Auf Posteingang klicken: Und mit "Fertig" übernehmen: Danach das Gerät auswählen und die Einstellungen bearbeiten: Falls das Sonoff Gerät ein Temperatur und Feuchtigkeitsfühler hat kann man dies durch ändern des Parameters "switch" ebenfalls abfragen.
- switch = Nur Schalter
- switch-t = Schalter und Temperatur
- switch-th = Schalter, Temperatur und Luftfeuchtigkeit
Aktuell werden folgende drei Systemvariablen aktualisiert:
CUX28001xxx:x-status
CUX28001xxx:x-temperatur
CUX28001xxx:x-humidity
Bei mir sehen die Systemvariablen wie folgt aus: Am Beispiel eines Sonoff TH10 sieht das Gerät nun wie folgt aus: Anmerkung: Der Status ob der Schalter an oder aus ist wird auch dann in der CCU aktualisiert wenn man den Taster am Gerät drückt oder über andere Wege den Schalter betätigt als direkt mit der CCU, allerdings dauert es bis zu 60 Sekunden bis die CCU den neuen Status abfragt. Dies läßt sich über den Parameter "SWITCH|TIMER_PRESET" anpassen. Das habe ich aber nicht getestet.