#!/bin/bash #######################VARIABLES######################## # Définir le fichier de log logfile="/var/www/html/plugins/script/data/log/aircloud.log" #now=$(date '+%d-%m-%Y-%H:%M:%S') #echo "Execution du script aircloud.sh à ${now}" >> $logfile #login and password in base64 hitachiuser=$(echo "" | base64 -d) hitachipassword=$(echo "" | base64 -d) #or in plain text #hitachipassword="" #hitachiuser= websocatbinary="/home/jeedom/.cargo/bin/websocat" wssairCloud="wss://notification-global-prod.aircloudhome.com/rac-notifications/websocket" pingtimeout="5" uuid=$(curl -s https://www.uuidtools.com/api/generate/v1 | jq -r .[0]) api_url="https://api-global-prod.aircloudhome.com" websocatoption="-b --base64 --ping-timeout=$pingtimeout -q -n $wssairCloud " max_attempts=6 ########################FONCTIONS######################## function get_info { #echo "function get_info : Start" >> $logfile token=$(curl -s -H "Accept: application/json" -H "Content-Type: application/json; charset=UTF-8" -H "Host: api-global-prod.aircloudhome.com" -H "User-Agent: okhttp/4.2.2" --data-binary "{\"email\":\"$hitachiuser\",\"password\":\"$hitachipassword\"}" --compressed "$api_url/iam/auth/sign-in" | jq -r .token) #echo "tocken : $token" >> $logfile familyId=$(curl -s -H "Authorization: Bearer $token" -H "Content-Type: application/json" -H "Accept: application/json" -H "Host: api-global-prod.aircloudhome.com" -H "User-Agent: okhttp/4.2.2" --compressed "$api_url/iam/user/v2/who-am-i" | jq -r .familyId) #echo "familyId : $familyId" >> $logfile cloudlds=$(curl -s -H "Authorization: Bearer $token" -H "Content-Type: application/json" -H "Accept: application/json" -H "Host: api-global-prod.aircloudhome.com" -H "User-Agent: okhttp/4.2.2" --compressed "$api_url/rac/ownership/groups/cloudIds/$familyId") #echo "cloudlds : $cloudlds" >> $logfile connectandsub=$(printf "CONNECT\naccept-version:1.1,1.2\nheart-beat:10000,10000\nAuthorization:Bearer $token\n\n\0\nSUBSCRIBE\nid:$uuid\ndestination:/notification/$familyId/$familyId\nack:auto\n\n\0" | base64 -w0 ) #echo "connectandsub : $connectandsub" >> $logfile #echo "function get_info : End" >> $logfile } function websocat_request { #echo "function websocat_request : Start" >> $logfile roomName=$1 #echo "roomName : $roomName" >> $logfile json_data="" attemptRequest=0 while [ -z "$json_data" ] && [ $attemptRequest -lt $max_attempts ] do json_data=$(echo $connectandsub | $websocatbinary -b --base64 --ping-timeout=$pingtimeout -q -n $wssairCloud | grep -a HITACHI | tr -d "\n" | tr -d "\0") #now=$(date '+%d-%m-%Y-%H:%M:%S') #echo "function websocat_request boucle while à ${now}" >> $logfile #echo "json_data : $json_data" >> $logfile sleep 5 attemptRequest=$((attemptRequest + 1)) done #echo "function websocat_request : End" >> $logfile } function get_roomid { #echo "function get_roomid : Start" >> $logfile roomId=$(echo $json_data|jq -r '.data[] | select(.name="$roomName") | .id') roomId=${roomId:0:5} #echo "roomId : $roomId" >> $logfile #echo "function get_roomid : End" >> $logfile } function get_powerstatus { #echo "function get_powerstatus : Start" >> $logfile powerstatus=$(echo $json_data|jq -r '.data[] | select(.id="$roomId") | .power') #echo "powerstatus : $powerstatus" >> $logfile #echo "function get_powerstatus : End" >> $logfile } function get_temperature { #echo "function get_temperature : Start" >> $logfile temperature=$(echo $json_data|jq -r '.data[] | select(.id="$roomId") | .roomTemperature') #echo "temperature : $temperature" >> $logfile #echo "function get_temperature : End" >> $logfile } function get_idutemperature { #echo "function get_idutemperature : Start" >> $logfile idutemperature=$(echo $json_data|jq -r '.data[] | select(.id="$roomId") | .iduTemperature') #echo "idutemperature : $idutemperature" >> $logfile #echo "function get_idutemperature : End" >> $logfile } function get_mode { #echo "function get_mode : Start" >> $logfile mode=$(echo $json_data|jq -r '.data[] | select(.id="$roomId") | .mode') #echo "mode : $mode" >> $logfile #echo "function get_mode : End" >> $logfile } function get_fanSpeed { #echo "function get_fanSpeed : Start" >> $logfile fanSpeed=$(echo $json_data|jq -r '.data[] | select(.id="$roomId") | .fanSpeed') #echo "fanSpeed : $fanSpeed" >> $logfile #echo "function get_fanSpeed : End" >> $logfile } function get_fanSwing { #echo "function get_fanSwing : Start" >> $logfile fanSwing=$(echo $json_data|jq -r '.data[] | select(.id="$roomId") | .fanSwing') #echo "fanSwing : $fanSwing" >> $logfile #echo "function get_fanSwing : End" >> $logfile } function get_humidity { #echo "function get_humidity : Start" >> $logfile roomhumidity=$(echo $json_data|jq -r '.data[] | select(.id="$roomId") | .humidity') #echo "roomhumidity : $roomhumidity" >> $logfile #echo "function get_humidity : End" >> $logfile } function get_powerstatusbymode { #echo "function get_powerstatusbymode : Start" >> $logfile powerstatusbymode=$(echo $json_data|jq -r '.data[] | select(.id="$roomId") and (.mode=="$mode") | .power') #echo "powerstatusbymode : $powerstatusbymode" >> $logfile #echo "function get_powerstatusbymode : End" >> $logfile } function get_fanSpeedstatus { #echo "function get_fanSpeedstatus : Start" >> $logfile fanSpeedstatus=$(echo $json_data|jq -r '.data[] | select(.id="$roomId") | .fanSpeed') #echo "fanSpeedstatus : $fanSpeedstatus" >> $logfile #echo "function get_fanSpeedstatus : End" >> $logfile } function get_fanSwingstatus { #echo "function get_fanSwingstatus : Start" >> $logfile fanSwingstatus=$(echo $json_data|jq -r '.data[] | select(.id="$roomId") | .fanSwing') #echo "fanSwingstatus : $fanSwingstatus" >> $logfile #echo "function get_fanSwingstatus : End" >> $logfile } function get_scheduletypestatus { #echo "function get_scheduletypestatus : Start" >> $logfile scheduletypestatus=$(echo $json_data|jq -r '.data[] | select(.id="$roomId") | .scheduletype') #echo "scheduletypestatus : $scheduletypestatus" >> $logfile #echo "function get_scheduletypestatus : End" >> $logfile } function get_holidaymodestatus { #echo "function get_holidaymodestatus : Start" >> $logfile holidaymodestatus=$(echo $json_data|jq -r '.data[] | select(.id="$roomId") | .holidayModeStatus | .active') #echo "holidaymodestatus : $holidaymodestatus" >> $logfile #echo "function get_holidaymodestatus : End" >> $logfile } function get_errorstatus { #echo "function get_errorstatus : Start" >> $logfile errorstatus=$(echo $json_data|jq -r '.data[] | select(.id="$roomId") | .errorStatus | .errorCode') #echo "errorstatus : $errorstatus" >> $logfile #echo "function get_errorstatus : End" >> $logfile } function get_onlinestatus { #echo "function get_onlinestatus : Start" >> $logfile onlinestatus=$(echo $json_data|jq -r '.data[] | select(.id="$roomId") | .online') #echo "onlinestatus : $onlinestatus" >> $logfile #echo "function get_onlinestatus : End" >> $logfile } function get_idufrostwashstatus { #echo "function get_idufrostwashstatus : Start" >> $logfile idufrostwashstatus=$(echo $json_data|jq -r '.data[] | select(.id="$roomId") | .iduFrostWashStatus | .active') #echo "idufrostwashstatus : $idufrostwashstatus" >> $logfile #echo "function get_idufrostwashstatus : End" >> $logfile } function get_relativetemperature { #echo "function get_relativetemperature : Start" >> $logfile relativetemperature=$(echo $json_data|jq -r '.data[] | select(.id="$roomId") | .relativeTemperature') #echo "relativetemperature : $relativetemperature" >> $logfile #echo "function get_relativetemperature : End" >> $logfile } function get_specialoperationstatus { #echo "function get_specialoperationstatus : Start" >> $logfile specialoperationstatus=$(echo $json_data|jq -r '.data[] | select(.id="$roomId") | .specialOperationStatus | .active') #echo "specialoperationstatus : $specialoperationstatus" >> $logfile #echo "function get_specialoperationstatus : End" >> $logfile } ########################DEROULEMENT######################## if ! [[ -z "$2" ]];then get_info websocat_request $2 get_roomid else #echo "Nom PAC non renseigné" >> $logfile exit 0 fi get_onlinestatus if [ "$onlinestatus" != "true" ]; then #echo "La PAC n'est pas accessible." >> $logfile if [ "$1" == "onlinestatus" ]; then echo "FALSE" exit 0 fi exit 0 fi case "$1" in "on") #echo "Commande ON" >> $logfile if [ $# -lt 6 ];then #echo "Manque des paramètres : on nom_pac mode temperature fanspeed swingmode" >> $logfile exit 0 fi get_powerstatus get_mode get_idutemperature get_fanSpeed get_fanSwing attemptOn=0 while { [ "$powerstatus" != "ON" ] || [ "$mode" != "$3" ] || { [ "$mode" != "FAN" ] && [ "$idutemperature" != "$4" ]; } || [ "$fanSpeed" != "$5" ] || [ "$fanSwing" != "$6" ]; } && [ $attemptOn -lt $max_attempts ] do #echo "Envoi commande ON" >> $logfile curl -s -H "Authorization: Bearer $token" -H "Content-Type: application/json" -H "Accept: application/json" -H "Host: api-global-prod.aircloudhome.com" -H "User-Agent: okhttp/4.2.2" --compressed --data-binary "{\"fanSpeed\":\"$5\",\"fanSwing\":\"$6\",\"humidity\":\"0\",\"id\":$roomId,\"iduTemperature\":$4,\"mode\":\"$3\",\"power\":\"ON\"}" -X PUT --compressed "$api_url/rac/basic-idu-control/general-control-command/$roomId?familyId=$familyId" sleep 20 websocat_request $2 get_powerstatus #echo "powerstatus : $powerstatus" >> $logfile get_mode #echo "mode : $mode / $3" >> $logfile get_idutemperature #echo "idutemperature : "$idutemperature" / "$4"" >> $logfile get_fanSpeed #echo "fanSpeed : $fanSpeed / $5" >> $logfile get_fanSwing #echo "fanSwing : $fanSwing / $6" >> $logfile attemptOn=$((attemptOn + 1)) done ;; "off") #echo "Commande OFF" >> $logfile get_powerstatus if [ "$powerstatus" == "OFF" ];then #echo "PAC eteinte" >> $logfile exit 0 fi get_idutemperature get_fanSpeed get_fanSwing get_mode [ "$mode" == "FAN" ] && idutemperature=0 attemptOff=0 while [ "$powerstatus" != "OFF" ] && [ $attemptOff -lt $max_attempts ] do #echo "Envoi commande OFF" >> $logfile curl -H "Authorization: Bearer $token" -H "Content-Type: application/json" -H "Accept: application/json" -H "Host: api-global-prod.aircloudhome.com" -H "User-Agent: okhttp/4.2.2" --data-binary "{\"fanSpeed\":\"$fanSpeed\",\"fanSwing\":\"$fanSwing\",\"humidity\":\"0\",\"id\":\"$roomId\",\"iduTemperature\":$idutemperature,\"mode\":\"$mode\",\"power\":\"OFF\"}" -X PUT --compressed "$api_url/rac/basic-idu-control/general-control-command/$roomId?familyId=$familyId" sleep 20 websocat_request $2 get_powerstatus attemptOff=$((attemptOff + 1)) done ;; "powerstatus") get_powerstatus echo $powerstatus ;; "modestatus") get_mode echo $mode ;; #"powerstatusbymode") # get_powerstatusbymode # echo $powerstatusbymode #;; "roomtemperature") get_temperature echo $temperature ;; #"roomhumidity") # get_humidity # echo $humidity #;; "idutemperature") get_idutemperature echo $idutemperature ;; "websocatdebug") echo $connectandsub | $websocatbinary $websocatoption | grep -a HITACHI | tr -d "\n" | jq ;; "websocatdebug2") echo $connectandsub | $websocatbinary $websocatoption ;; "fanSpeedstatus") get_fanSpeedstatus echo $fanSpeedstatus ;; "fanSwingstatus") get_fanSwingstatus echo $fanSwingstatus ;; "scheduletypestatus") get_scheduletypestatus case "$scheduletypestatus" in "SCHEDULE_DISABLED") echo "DISABLE" ;; "ON_OFF_TIMER_ENABLED" | "ON_TIMER_ENABLED" | "OFF_TIMER_ENABLED") echo "SIMPLE" ;; "WEEKLY_TIMER_ENABLED") echo "WEEKLY" ;; "HOLIDAY_MODE_ENABLED") echo "HOLIDAY" ;; *) echo $scheduletypestatus ;; esac ;; "holidaymodestatus") get_holidaymodestatus echo ${holidaymodestatus^^} ;; "errorstatus") get_errorstatus [ "$errorstatus" = "null" ] && echo "FALSE" || echo "${errorstatus^^}" ;; "onlinestatus") get_onlinestatus echo ${onlinestatus^^} ;; "idufrostwashstatus") get_idufrostwashstatus echo ${idufrostwashstatus^^} ;; #"relativetemperature") # get_relativetemperature # echo $relativetemperature #;; #"specialoperationstatus") # get_specialoperationstatus # echo ${specialoperationstatus^^} #;; *) echo "Paramètres incorrects : "action" "nom_pi..ce" (si action on: "mode" "temperature" "fanspeed" "fanSwing")\n" ;; esac