mediola

sonoff Geräte mit espurna- oder tasmota-Firmware auf CCU2

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

Werbung


sonoff Geräte mit espurna- oder tasmota-Firmware auf CCU2

Beitragvon frodo. » 17.05.2018, 16:41

Vorab, da ich nach längerer Suche nichts gefunden habe was eine Einbindung von sonoff Geräten mit Status Rückmeldung beschrieben hätte, habe ich mich kurzerhand dazu entschlossen ein Skript hierfür zuschreiben. Leider funktioniert die Parameter Übergabe an curl ohne Skript nicht besonders schön und eine Status Meldung ob der Schalter an oder aus ist lässt sich so einfach auch nicht bewerkstelligen (zu viele Sonderzeichen). Als Vorlage habe ich mir die Fritzbox Skripte (https://hausautomatisierung.rainer-grundel.de/2017/04/fritzbox-ueber-ccu-steuern/) herangezogen welche ebenfalls den Status ermitteln und auch Temperartur und Leistung anzeigen.
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:
espurna.jpg
Ausschnitt aus der Espurna Weboberfläche


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

und machen das Skript ausführbar
Code: Alles auswählen
chmod +x /usr/local/addons/cuxd/user/espurna.sh


Als nächstes können wir Anfangen ein neues CUxD Device anzulegen:
cuxd.jpg
So sollte es in CUxD aussehen
cuxd.jpg (17.4 KiB) 142-mal betrachtet

CUxD Gerätetyp: (28) System
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.
CCU2-1.jpg
CCU2-1.jpg (10.63 KiB) 133-mal betrachtet

Auf Posteingang klicken:
CCU2-2.jpg
CCU2-2.jpg (7.79 KiB) 133-mal betrachtet

Und mit "Fertig" übernehmen:
CCU2-3.jpg
CCU2-3.jpg (19.81 KiB) 133-mal betrachtet

Danach das Gerät auswählen und die Einstellungen bearbeiten:
CCU2-4.jpg


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

Bei switch-t und switch-th sind zwingend Systemvariablen zu definieren.
Aktuell werden folgende drei Systemvariablen aktualisiert:
CUX28001xxx:x-status
CUX28001xxx:x-temperatur
CUX28001xxx:x-humidity

Bei mir sehen die Systemvariablen wie folgt aus:
CCU2-5.jpg


Am Beispiel eines Sonoff TH10 sieht das Gerät nun wie folgt aus:
CCU2-6.jpg


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.
Zuletzt geändert von frodo. am 20.05.2018, 11:23, insgesamt 1-mal geändert.
frodo.
 
Beiträge: 7
Registriert: 06.07.2016, 15:13

Re: sonoff Geräte mit espurna Firmware per CUxD steuern

Beitragvon frodo. » 19.05.2018, 00:29

Kaum nutzt man espurna bekommt man ein Gerät welches nur mit Tasmota funktioniert...

Nachdem ich mit der zusätzlichen Tasmota Integration an die Grenzen gestoßen bin habe ich das Skript mit Optionalen Parametern versehen.
Hierdurch ändert sich der Aufruf in der CCU2, da nun vor jeder Option ein Bezeichner erforderlich ist.

Bisher funktioniert bei Tasmota nur das schalten, mehr kann meine Obi Steckdose nicht :D

Das Skript habe ich bei mir nun umbenannt, aus espurna wurde sonoff.

Daraus ergibt sich in der CCU folgende Parametrisierung:

Geräteparameter:
PARAM1 /usr/local/addons/cuxd/user/sonoff.sh

Kanalparameter (espurna):
SWITCH|CMD_SHORT: $_P1$ -f switch -c $CHANNEL$ -i $_C1$ -a $_C2$ -o 0
SWITCH|CMD_LONG: $_P1$ -f switch -c $CHANNEL$ -i $_C1$ -a $_C2$ -o 1
SWITCH|CH_PARAM1: 192.168.0.34
SWITCH|CH_PARAM2 : 978CA2E6EBEEAAD0
SWITCH|TIMER_PRESET: 60
SWITCH|CMD_TIMER: $_P1$ -f switch-th -c $CHANNEL$ -i $_C1$ -a $_C2$

Kanalparameter (tasmota mit Passwort im WebIf):
SWITCH|CMD_SHORT: $_P1$ -f switch -c $CHANNEL$ -i $_C1$ -u $_C2$ -p $_C3$ -o 0
SWITCH|CMD_LONG: $_P1$ -f switch -c $CHANNEL$ -i $_C1$ -u $_C2$ -p $_C3$ -o 1
SWITCH|CH_PARAM1: 192.168.0.34
SWITCH|CH_PARAM2 : user
SWITCH|CH_PARAM3 : password
SWITCH|TIMER_PRESET: 60
SWITCH|CMD_TIMER: $_P1$ -f switch -c $CHANNEL$ -i $_C1$ -u $_C2$ -p $_C3$

Kanalparameter (tasmota ohne Passwort im WebIf):
SWITCH|CMD_SHORT: $_P1$ -f switch -c $CHANNEL$ -i $_C1$ -o 0
SWITCH|CMD_LONG: $_P1$ -f switch -c $CHANNEL$ -i $_C1$ -o 1
SWITCH|CH_PARAM1: 192.168.0.34
SWITCH|CH_PARAM2 : user
SWITCH|CH_PARAM3 : password
SWITCH|TIMER_PRESET: 60
SWITCH|CMD_TIMER: $_P1$ -f switch -c $CHANNEL$ -i $_C1$

Hier nun das neue Skript:
Code: Alles auswählen
#!/bin/sh
# set -x

# Version: 0.5
# Date:    2018-05-24
# Changelog:
#   small fixes, for wrong apikey
#   add tasmota switch for user and password use variable apikey
#   redesign with options
#   add tasmota temperature, humidity

# More Detail and how you enable espurna restapi:
# https://github.com/xoseperez/espurna/wiki/RESTAPI

# Test:
# ./sonoff.sh -f status -c CUX2801004:4 -i 192.168.6.131 -u admin -p bilbo01 -d
# ./sonoff.sh -f status -c CUX2801004:3 -i 192.168.6.115 -a C87129A2AD1EE170 -d
# ./sonoff.sh -f status -c CUX2801004:1 -i 192.168.6.156


usage() {
   echo -e 'usage:'
   echo -e "\t $(basename $0) -f [status|switch|switch-t|switch-th] -c CUX2801xxx:x -i ipaddr [-a apikey] [-u user] [-p password] [-o value] [-d] [-h]\n"
   echo -e '\t examples espurna firmware:'
   echo -e "\t $(basename $0) -h # this usage info"
   echo -e "\t $(basename $0) -f switch    -c CUX2801xxx:x -i 192.168.x.x -a 1234567890123456      # status switch"
   echo -e "\t $(basename $0) -f switch    -c CUX2801xxx:x -i 192.168.x.x -a 1234567890123456 -o 0 # switch off"
   echo -e "\t $(basename $0) -f switch    -c CUX2801xxx:x -i 192.168.x.x -a 1234567890123456 -o 1 # switch on"
   echo -e "\t $(basename $0) -f switch    -c CUX2801xxx:x -i 192.168.x.x -a 1234567890123456 -o 2 # switch toggle on/off"
   echo -e "\t $(basename $0) -f switch-t  -c CUX2801xxx:x -i 192.168.x.x -a 1234567890123456      # status switch and temperature"
   echo -e "\t $(basename $0) -f switch-t  -c CUX2801xxx:x -i 192.168.x.x -a 1234567890123456 -o 0 # switch off with temperature"
   echo -e "\t $(basename $0) -f switch-t  -c CUX2801xxx:x -i 192.168.x.x -a 1234567890123456 -o 1 # switch on  with temperature"
   echo -e "\t $(basename $0) -f switch-th -c CUX2801xxx:x -i 192.168.x.x -a 1234567890123456      # status switch, temperature and humidity"
   echo -e "\t $(basename $0) -f switch-th -c CUX2801xxx:x -i 192.168.x.x -a 1234567890123456 -o 0 # switch off with status temperature and humidity"
   echo -e "\t $(basename $0) -f switch-th -c CUX2801xxx:x -i 192.168.x.x -a 1234567890123456 -o 1 # switch on  with status temperature and humidity"
   echo -e "\t $(basename $0) -f status    -c CUX2801xxx:x -i 192.168.x.x -a 1234567890123456      # espurna available restapi\n"
   echo -e '\t examples tasmota firmware:'
   echo -e "\t $(basename $0) -f switch    -c CUX2801xxx:x -i 192.168.x.x -u user -p password      # status switch"
   echo -e "\t $(basename $0) -f switch    -c CUX2801xxx:x -i 192.168.x.x -u user -p password -o 0 # switch off"
   echo -e "\t $(basename $0) -f switch    -c CUX2801xxx:x -i 192.168.x.x -u user -p password -o 1 # switch on"
   echo -e "\t $(basename $0) -f switch    -c CUX2801xxx:x -i 192.168.x.x -u user -p password -o 2 # switch toggle on/off"
   echo -e "\t $(basename $0) -f status    -c CUX2801xxx:x -i 192.168.x.x -u user -p password      # tasmota status"
   exit 0
}

# A POSIX variable
OPTIND=1         # Reset in case getopts has been used previously in the shell.

# Initialize our own variables:
HOMEMATIC="127.0.0.1"
AVAILABLE=2 # Status: unbekannt
DEBUG=0
FUNC=''
CHANNEL=''
IPADDR=''
APIKEY=''
USER=''
PASSWD=''
VALUE=''


while getopts "h?df:c:i:a:u:p:o:" opt; do
    case "$opt" in
    h|\?)
        usage
        exit 0
        ;;
    f)  FUNC=$OPTARG
        ;;
    c)  CHANNEL=$OPTARG
        ;;   
    i)  IPADDR=$OPTARG
        ;;
    a)  APIKEY=$OPTARG
        ;;
    u)   USER=$OPTARG
   ;;
    o)  VALUE=$OPTARG
   ;;
    p)  PASSWD=$OPTARG
   ;;
    d)  DEBUG=1
   ;;
    esac
done

shift $((OPTIND-1))

[ "${1:-}" = "--" ] && shift

if [ -z $FUNC ] ; then
   usage
   exit 1
elif [ -z $CHANNEL ] ; then
   usage
   exit 1
elif [ -z $IPADDR ] ; then
   usage
   exit 1
fi

if [ $DEBUG -eq 1 ] ; then
   Debugmsg1=$Debugmsg1"Function: $FUNC\n"
        Debugmsg1=$Debugmsg1"Channel:  $CHANNEL\n"
        Debugmsg1=$Debugmsg1"IP-Addr:  $IPADDR\n"
        Debugmsg1=$Debugmsg1"API-Key:  $APIKEY\n"
        Debugmsg1=$Debugmsg1"Value:    $VALUE\n"
        Debugmsg1=$Debugmsg1"user:     $USER\n"
        Debugmsg1=$Debugmsg1"password: $PASSWD\n\n"
fi

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 [ "x$1" != "x" ]; 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 [ "x$1" != "x" ]; 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
      if [ -z $APIKEY ] ; then
         if [ "x$PASSWD" != 'x' ] ; then
            URL="http://${IPADDR}/cm?user=${USER}&password=${PASSWD}&cmnd=status"
         else
            URL="http://${IPADDR}/cm?cmnd=status"
         fi
         SEARCH='status'
      else
         URL="http://${IPADDR}/apis?apikey=${APIKEY}"
         SEARCH='api'
      fi

      AVAILABLE=1 # Status: erreichbar
      STATE=$(${CURL} -s ${CURL_timout} "${URL}" | grep -i ${SEARCH})
      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
      if [ -z $APIKEY ] ; then
         case $VALUE in
               0)
            VALUE='Power%20Off'
            ;;
               1)
            VALUE='Power%20On'
            ;;
               2)
            VALUE='Power%20Toggle'
            ;;
         esac
         if [ "x$PASSWD" != 'x' ] ; then

            URL="http://${IPADDR}/cm?user=${USER}&password=${PASSWD}&cmnd=${VALUE}"
            URL2="http://${IPADDR}/cm?user=${USER}&password=${PASSWD}&cmnd=Power"
         else
            URL="http://${IPADDR}/cm?cmnd=${VALUE}"
            URL2="http://${IPADDR}/cm?cmnd=Power"
         fi
      else
         URL="http://${IPADDR}/api/relay/0?apikey=${APIKEY}&value=${VALUE}"
         URL2="http://${IPADDR}/api/relay/0?apikey=${APIKEY}"
      fi
      Debugmsg1=$Debugmsg1"func:   \t\t$FUNC\ncmd: \t\t${CURL} -s ${CURL_timout} \"${URL}\" \n"
      TEST=$(${CURL} -s ${CURL_timout} "${URL}")
      Debugmsg1=$Debugmsg1"cmd: \t\t${CURL} -s ${CURL_timout} \"${URL2}\" \n"
      OUT=$(${CURL} -s ${CURL_timout} "${URL2}")
      STATE=$(echo $OUT | sed 's/{"POWER":"//g' | sed 's/"}//g' | sed 's/ON/1/g' | sed 's/OFF/0/g')
      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
                if [ -z $APIKEY ] ; then
                        if [ "x$PASSWD" != 'x' ] ; then
                                URL="http://${IPADDR}/cm?user=${USER}&password=${PASSWD}&cmnd=status%2010"
                        else
                                URL="http://${IPADDR}/cm?cmnd=status%2010"
                        fi
         Debugmsg1=$Debugmsg1"func:   \t\t$FUNC\ncmd: \t\t${CURL} -s ${CURL_timout} \"${URL}\" \n"
         STATE=$(${CURL} -s ${CURL_timout} "${URL}" | sed -e 's/"//g' -e 's/{//g' -e 's/}//g' | cut -d ',' -f2 | cut -d ':' -f3 )
                else
         URL="http://${IPADDR}/api/temperature?apikey=${APIKEY}"
         Debugmsg1=$Debugmsg1"func:   \t\t$FUNC\ncmd: \t\t${CURL} -s ${CURL_timout} \"${URL}\" \n"
         STATE=$(${CURL} -s ${CURL_timout} "${URL}")
      fi
      echo -e "\ttemperature: $STATE"
      set_CCU_SysVar $STATE $CHANNEL-temperature
   fi
}

func_switch_humidity(){
   STATE=0
   if [ $AVAILABLE -ge 1 ] ; then
                if [ -z $APIKEY ] ; then
                        if [ "x$PASSWD" != 'x' ] ; then
                                URL="http://${IPADDR}/cm?user=${USER}&password=${PASSWD}&cmnd=status%2010"
                        else
                                URL="http://${IPADDR}/cm?cmnd=status%2010"
                        fi
                        Debugmsg1=$Debugmsg1"func:   \t\t$FUNC\ncmd: \t\t${CURL} -s ${CURL_timout} \"${URL}\" \n"
                        STATE=$(${CURL} -s ${CURL_timout} "${URL}" | sed -e 's/"//g' -e 's/{//g' -e 's/}//g' | cut -d ',' -f3 | cut -d ':' -f2 )
                else
                        URL="http://${IPADDR}/api/humidity?apikey=${APIKEY}"
                        Debugmsg1=$Debugmsg1"func:   \t\t$FUNC\ncmd: \t\t${CURL} -s ${CURL_timout} \"${URL}\" \n"
                        STATE=$(${CURL} -s ${CURL_timout} "${URL}")
                fi
      echo -e "\thumidity: $STATE"
      set_CCU_SysVar $STATE $CHANNEL-humidity
   fi
}

case $FUNC 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
         if [ -z $APIKEY ] ; then
            if [ "x$PASSWD" != 'x' ] ; then
               URL="http://${IPADDR}/cm?user=${USER}&password=${PASSWD}&cmnd=status"
            else
               URL="http://${IPADDR}/cm?&cmnd=status"
            fi
         else
            URL="http://${IPADDR}/apis?apikey=${APIKEY}"
         fi
         Debugmsg1=$Debugmsg1"func:   \t\t$1\ncmd: \t\t${CURL} -s ${CURL_timout} \"${URL}\" \n"
         TEST=$(${CURL} -s ${CURL_timout} "${URL}")
         echo $TEST
      else
         echo -e "api-key or ip-adresse are wrong"
         echo -e "couldn't connect to device\n"
      fi
      ;;
   *)
      usage
      exit 1
      ;;
esac

if [ $DEBUG -eq 1 ]
then
   echo -e "\n\n"
   echo -e "-----------------------------------------------------------------------------------------------------"
   echo -e "                              Debug Ausgaben"
   echo -e "-----------------------------------------------------------------------------------------------------"
   echo -e $Debugmsg1
fi
exit 0
frodo.
 
Beiträge: 7
Registriert: 06.07.2016, 15:13


Zurück zu CUxD

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste







© homematic-forum.de & Lizenzgebern. Alle Rechte vorbehalten. Alle Bilder & Texte auf dieser Seite sind Eigentum
der jeweiligen Besitzer und dürfen ohne deren Einwilligung weder kopiert noch sonstwie weiter verwendet werden.