Open kneefabio opened 1 year ago
Hi, Thanks for your support Can you tell me the result of websocat command lunched in the same host that HA ? You'll see a json like this :
bash-5.1# sh /opt/scripts/aircloud.sh websocatdebug
{
"notificationType": "ON_CONNECT",
"data": [
{
"serialNumber": "XXXX-XXXX-XXXX",
"iduFrostWashStatus": {
"active": false,
"priority": 8,
"lastUpdatedAt": 0,
"subCategory": null,
"errorCode": null
},
"model": "HITACHI",
"id": 1438,
"vendorThingId": "JCH-xxxxx",
"name": "Chambre",
"roomTemperature": 18,
"mode": "HEATING",
"iduTemperature": 22,
"humidity": 126,
"power": "OFF",
"relativeTemperature": -3,
"fanSpeed": "LV4",
"fanSwing": "BOTH",
"updatedAt": 1670831540665,
"specialOperationStatus": {
"active": false,
"priority": 7,
"lastUpdatedAt": 0,
"subCategory": null,
"errorCode": null
},
And also the result of your roomTemperature command launched on the same host (Like this :
bash-5.1# sh /opt/scripts/aircloud.sh roomTemperature Chambre
18
bash-5.1#
I also saw that airCloud API had some problems since few weeks, you need to try a lot of time before get the right result :(
Thanks
Hello and thank you so much for your immediate support. If I send the websocat command to the HA terminal I get no response. After a few seconds of waiting it gives me the command line again. Do I need to send it another way? I'm new to HA and many things I don't know how to do. Thanks so much for your help.
Hi, Yes, it's seems to be an airCloud API issue, I have sometimes to try up to 10 websocatdebug to get the json result :
bash-5.1# /opt/scripts/aircloud.sh websocatdebug bash-5.1# /opt/scripts/aircloud.sh websocatdebug bash-5.1# /opt/scripts/aircloud.sh websocatdebug bash-5.1# /opt/scripts/aircloud.sh websocatdebug bash-5.1# /opt/scripts/aircloud.sh websocatdebug bash-5.1# /opt/scripts/aircloud.sh websocatdebug bash-5.1# /opt/scripts/aircloud.sh websocatdebug { "notificationType": "ON_CONNECT", "data": [ { "serialNumber": "XXXX-XXXX-XXXX",
API answer is some random, example :
bash-5.1# /opt/scripts/aircloud.sh websocatdebug | jq -r ".data[] | select(.id==1437) | .power"
parse error: Expected string key before ':' at line 1, column 2613
OFF
jq: error (at
I don't know why :(
So, try & try & try, more and more But if you can't have any result at all, check hitachiuser and hitachipassword variable
Check also the uuid, you can replace the uuid variable : uuid=$(curl -s https://www.uuidgenerator.net/api/version1) by uuid=$(curl -s https://www.uuidtools.com/api/generate/v1 | jq -r .[0])
I also know that airCloud api could ban some uuid range generated by uuidgenerator.net
I appear to be getting a similar issue, when I try to run a debug, I also get a permission denied error every single time.
This is the terminal log when I run the aircloud.sh
Hi, Sorry for the delay You could try a new version in develop branch
https://github.com/lb544/ha-aircloud/blob/develop/scripts/aircloud.sh
Warning : there's a new argument for fan speed sh /opt/scripts/aircloud.sh on {{room}} {{mode}} {{temp}} {{fanspeed}} Example : sh aircloud.sh on LivingRoom HEATING 19 AUTO or sh aircloud.sh off LivingRoom HEATING 19 LV1
(LV1 to LV4 + AUTO)
Be careful to adapt hitachiuser, hitachipassword and websocatbinary path ;)
Hello, I had same problem on ha installed on raspberry.
Issue is ha uses docker and so, you have to put bash script into /config/scripts/, then, edit yaml to change the path.
I had issue with time to execute commands too (timeout), solved with command_timeout: 60
.
I had to change the swing_mode from both to off.
And finally, i was unable to turn on/off my device. After few hours to debug, i modified script to parse roomid , sometimes, the roomid is present twice in response: ${roomId#* }
) and last issue was about jq.
I got error with '(' in select, i resolved i by changing the jq command: ...| jq '.data[] | select (.id="$roomId")|.power'
Salut,
je me suis permis, je n'ai plus les erreurs avec ce script, merci pour ton taf,
#!/bin/bash
#sortie sur erreur
#set -e
#mode trace et debug
#set -xv
now=$(date '+%d-%m-%Y-%H:%M:%S')
logfile="/config/home-assistant.log"
echo "0. execute script aircloud.sh ${now}" >> $logfile
#######################VARIABLES########################
hitachiuser=$(echo "xxx=" | base64 -d)
hitachipassword=$(echo "xxxx==" | base64 -d)
api_url="https://api-global-prod.aircloudhome.com"
wssairCloud="wss://notification-global-prod.aircloudhome.com/rac-notifications/websocket"
websocatbinary="/config/scripts/websocat.aarch64-unknown-linux-musl"
pingtimeout="5"
websocatoption="-b --base64 --ping-timeout=$pingtimeout -q -n $wssairCloud "
uuid=$(curl -s https://www.uuidtools.com/api/generate/v1 | jq -r .[0])
########################FONCTIONS########################
function get_info {
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)
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)
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")
}
function websocat_request {
roomName=$1
json_data=""
while [ -z "$json_data" ]
do
json_data=$(echo $connectandsub | $websocatbinary -b --base64 --ping-timeout=$pingtimeout -q -n $wssairCloud | grep -a HITACHI | tr -d "\n" )
sleep 5
done
}
function get_roomid {
roomId=$(echo $json_data|jq -r '.data[] | select(.name="$roomName") | .id')
roomId=${roomId:0:5}
}
function get_powerstatus {
powerstatus=$(echo $json_data|jq -r '.data[] | select(.id="$roomId") | .power')
}
function get_temperature {
temperature=$(echo $json_data|jq -r '.data[] | select(.id="$roomId") | .roomTemperature')
}
function get_idutemperature {
idutemperature=$(echo $json_data|jq -r '.data[] | select(.id="$roomId") | .iduTemperature')
}
function get_mode {
mode=$(echo $json_data|jq -r '.data[] | select(.id="$roomId") | .mode')
}
function get_fanSpeed {
fanSpeed=$(echo $json_data|jq -r '.data[] | select(.id="$roomId") | .fanSpeed')
}
function get_fanSwing {
fanSwing=$(echo $json_data|jq -r '.data[] | select(.id="$roomId") | .fanSwing')
}
function get_humidity {
roomhumidity=$(echo $json_data|jq -r '.data[] | select(.id="$roomId") | .humidity')
}
function get_powerstatusbymode {
powerstatusbymode=$(echo $json_data|jq -r '.data[] | select(.id="$roomId") and (.mode=="$mode") | .power')
}
########################DEROULEMENT########################
if ! [[ -z "$2" ]];then
get_info
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 )
websocat_request $2
get_roomid
else
echo "Nom pac non renseigné"
exit 0
fi
case "$1" in
"on")
if [ $# -lt 6 ];then
echo "usage: script.sh on nom_pac mode temperature fanspeed swingmode"
exit 0
fi
mode=$3
idutemperature=$4
fanSpeed=$5
fanSwing=$6
echo "get powerstatus" >> $logfile
get_powerstatus
while ! [ "$powerstatus" == "ON" ];do
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\":\"$fanSpeed\",\"fanSwing\":\"$fanSwing\",\"humidity\":\"50\",\"id\":$roomId,\"iduTemperature\":$idutemperature,\"mode\":\"$mode\",\"power\":\"ON\"}" -X PUT --compressed "$api_url/rac/basic-idu-control/general-control-command/$roomId?familyId=$familyId"
sleep 5
websocat_request $2
get_powerstatus
done
;;
"off")
get_powerstatus
if [ "$powerstatus" == "OFF" ];then
echo "pac eteinte"
exit 0
fi
get_idutemperature
get_fanSpeed
get_fanSwing
get_mode
while ! [ "$powerstatus" == "OFF" ];do
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\":\"50\",\"id\":\"$roomId\",\"iduTemperature\":$idutemperature,\"mode\":\"$mode\",\"power\":\"OFF\"}" -X PUT --compressed "$api_url/rac/basic-idu-control/general-control-command/$roomId?familyId=$familyId"
sleep 5
websocat_request $2
get_powerstatus
done
;;
"powerstatus")
echo "4.case powerstatus" >> $logfile
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
;;
*)
echo "script.sh "action" "nom_pi..ce" (si action on: "mode" "temperature" "fanspeed" "fanSwing")\n"
;;
esac
Hi, I am too having a bit of an issue with the script. I tried the new development and the release version, in both I do not get a token and familyid, cloudlds reports unauthorized.
I tried user and password in plain and base64 and ran the .sh from bash directly.
Any pointers?
Hello, Same here I have jq error on the original script. Websocatdebug works fine.
@Chqrles84k I tested your script, but I have a strange error
scripts sh /config/scripts/aircloud.sh
: not foundipts/aircloud.sh: line 2:
: not foundipts/aircloud.sh: line 3:
: not foundipts/aircloud.sh: line 6:
: not foundipts/aircloud.sh: line 9:
: not foundipts/aircloud.sh: line 10:
: not foundipts/aircloud.sh: line 13:
: not foundipts/aircloud.sh: line 15:
: not foundipts/aircloud.sh: line 16:
: not foundipts/aircloud.sh: line 18:
: not foundipts/aircloud.sh: line 21:
: not foundipts/aircloud.sh: line 24:
: not foundipts/aircloud.sh: line 27:
: not foundipts/aircloud.sh: line 29:
: not foundipts/aircloud.sh: line 32:
: not foundipts/aircloud.sh: line 34:
: not foundipts/aircloud.sh: line 35:
: not foundipts/aircloud.sh: line 36:
: not foundipts/aircloud.sh: line 37:
: not foundipts/aircloud.sh: line 39:
: not foundipts/aircloud.sh: line 40:
/config/scripts/aircloud.sh: line 41: syntax error: unexpected word
I'm running it on HA I have no idea why I have this error
thx a lot for your help
Bonsoir, Cela fait 2 fois que je refais l'installation et rien ne fonctionne. Pas de connexion à l'API je pense (c'est ce que je constate dans les log de homeassistant. Est ce que quelqu'un a continué d'investiguer sur l'intégration ?
@richard13127 Bonjour, Avez-vous testé la version en cours de développement comme indiqué plus haut ? https://github.com/lb544/ha-aircloud/blob/develop/scripts/aircloud.sh
Vous loguez vous avec une adresse mail ou un numéro de téléphone ? Il a été remonté ces dernières semaines un problème d'accès avec un compte identifié par numéro de téléphone.
@o0larrylurex0o Try develop script here https://github.com/lb544/ha-aircloud/blob/develop/scripts/aircloud.sh
Bonjour,
Voici les Logs de Homeassisatnt avec le nouveau script
Voici ce que j'ai rajouté dans mon config.yaml
climate:
switch:
sensor:
et voici l'erreur aussi que je n'avais pas avant
Je pense que je vais partir sur "Air zone" qui est apparemment complètement intégrer
Comme précisé dans l'autre issue, le nouveau script en cours de développement n'est pas pris en charge par les thermostats de type climate sur HA https://github.com/lb544/ha-aircloud/issues/3#issuecomment-1439809054
"J'ai un peu mis de côté les thermostats internes à HA pour laisser gérer la température par les climatiseurs, on évite ainsi un redémarrage complets des climatiseurs / PAC et donc éviter une usure prématurée du compresseur extérieur (je découvre le monde des clims / PAC, sorry)"
Concernant les timeout c'est NOR-MAL (encore!) l'API d'Hitachi est ralentie, sans doute une protection de leur côté ...
"L'API est devenue très lente, je ne sais pas si justement la mise à dispo de mon script a ralenti les serveurs Hitachi ou s'ils ont des protections de leurs côtés également (Les UUID de uuidgenerator.net par exemple étaient bannis, un motif commun à chaque UUID a permis à Hitachi de les bannir)"
Bonjour, super travail mais j’ai du mal me demerder, j’ai suivi la procedure d’installation mais j’ai plein d’erreurs lorsque j’essaie d’executer le script depuis le terminal: sh aircloud.sh powerstatus salon : not found: line 2: : not found: line 3: : not found: line 6: : not found: line 9: etc… En gros il me renvoie une erreur pour toutes les lignes vides, du coup j’imagine que j’ai du rater quelque chose Merci d’avance
Bonne soiree
Je fais suite, j'ai le même problème,. La solution est elle toujours fonctionnelle? Merci à vous.
@aubierr Oui le script dans la branche develop fonctionne toujours, moyennant une API Hitachi capricieuse suite aux sollicitations de Home Assistant car même l'appli officielle ne fonctionne plus quand Home Assistant fait trop de requêtes En désactivant le module dans HA, l'appli officielle airCloud refonctionne (avec sa lenteur legendaire)
Il peut y avoir des erreurs de ce type, qui n'apparaissent pas quand l'API ne se met pas en "protection"
Exemple : bash-5.1# sh /opt/scripts/aircloud.sh powerstatus Séjour parse error: Invalid numeric literal at line 1, column 2653 ON parse error: Expected value before ',' at line 1, column 2641
Je renomme le script que pour HA ne l'utilise plus
Et hop magie ! Un résultat clean
bash-5.1# mv /opt/scripts/aircloud.sh /opt/scripts/aircloud.bak bash-5.1# sh /opt/scripts/aircloud.bak powerstatus Séjour ON
@breizhdude Il doit manquer quelque chose dans votre installation
Je suis exactement dans le même cas que @breizhdude.
: not found.sh: line 2: : not found.sh: line 7: : not found.sh: line 13: : not found.sh: line 16: : not found.sh: line 25: aircloudnew.sh: line 45: syntax error: unexpected word (expecting "in")
Cela peut venir de websocat?
@aubierr Vous êtes sur quel OS ? Oui ça peut-être lié à websocat, avez-vous également mis un login mail et pas numéro de téléphone ?
je suis sous HA OS via une VM, oui bien avec un login mail.
@aubierr Quel est le retour de ces commandes sh aircloud.sh websocatdebug sh aircloud.sh websocatdebug2 ?
Bonjour, voici les retours que j'ai avec le script suivant : https://github.com/lb544/ha-aircloud/blob/develop/scripts/aircloud.sh
bash# sh aircloudnew.sh websocatdebug
: not found.sh: line 2:
: not found.sh: line 12:
: not found.sh: line 15:
: not found.sh: line 24:
aircloudnew.sh: line 44: syntax error: unexpected word (expecting "in")
bash# sh aircloudnew.sh websocatdebug2
: not found.sh: line 2:
: not found.sh: line 12:
: not found.sh: line 15:
: not found.sh: line 24:
aircloudnew.sh: line 44: syntax error: unexpected word (expecting "in")
Si j'enlève tous les sauts de ligne, voici le résultat. Une erreur toujours au début du case :
bash# sh aircloudnew_.sh websocatdebug
aircloudnew_.sh: line 38: syntax error: unexpected word (expecting "in")
bash# sh aircloudnew_.sh websocatdebug2
aircloudnew_.sh: line 38: syntax error: unexpected word (expecting "in")
@aubierr Pourquoi il y a script au début de votre ligne de commande ?
c'est une erreur de copie de ma part j'enlève la caractère spéciaux qui se colle et je n'ai pas enlevé le nom du dossier dans lequel je suis qui est script
Ok je pense avoir compris Essayez avec bash aircloud.sh websocatdebug
Je met l'intégralité du fichier qui se situe dans /opt/script/aircloud.sh
#!/bin/bash
#login and password in base64
#hitachiuser=$(echo "<replace with your Hitachi's account email in base64>" | base64 -d)
#hitachipassword=$(echo "<replace with your Hitachi's account password in base64>" | base64 -d)
#or in plain text
hitachipassword="*****@****.com"
hitachiuser="**********"
websocatbinary="/usr/local/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])
#uuid=$(uuidgen)
#echo $uuid
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 "https://api-global-prod.aircloudhome.com/iam/auth/sign-in" | jq -r .token)
#echo $token
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 "https://api-global-prod.aircloudhome.com/iam/user/v2/who-am-i" | jq -r .familyId)
#echo $familyId
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 "https://api-global-prod.aircloudhome.com/rac/ownership/groups/cloudIds/$familyId")
#echo $cloudlds
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 )
if [ "$2" = "" ]
then
:
else
roomName=$2
roomId=$(echo $connectandsub | $websocatbinary -b --base64 --ping-timeout=$pingtimeout -q -n $wssairCloud | grep -a HITACHI | tr -d "\n" | jq -r ".data[] | select(.name==\"$roomName\") | .id")
#echo "roomID : " $roomId
while [ -z "$roomId" ]
do
roomId=$(echo $connectandsub | $websocatbinary -b --base64 --ping-timeout=$pingtimeout -q -n $wssairCloud | grep -a HITACHI | tr -d "\n" | jq -r ".data[] | select(.name==\"$roomName\") | .id")
#echo "roomID : " $roomId
sleep 10
done
fi
mode=$3
temperature=$4
fanSpeed=$5
case "$1" in
"on")
now=$(date)
#echo "ON at $now" >> /opt/scripts/logs.txt
if [ -z "$roomId" ]
then
:
else
websocatresult=$(echo $connectandsub | $websocatbinary -b --base64 --ping-timeout=$pingtimeout -q -n $wssairCloud | grep -a HITACHI | tr -d "\n")
#until [[ $(echo $websocatresult | jq -r ".data[] | select(.id==$roomId) | .power") = "ON" ]]
until [ $(echo $websocatresult | jq -r ".data[] | select(.id==$roomId) | .power") = "ON" ] && [ $(echo $websocatresult | jq -r ".data[] | select(.id==$roomId) | .iduTemperature") -eq $(echo $temperature) ] && [ $(echo $websocatresult | jq -r ".data[] | select(.id==$roomId) | .fanSpeed") = $(echo $fanSpeed) ]
do
#echo "ON $mode $temperature at $now" >> /opt/scripts/logs.txt
curl -s -H "Authorization: Bearer $token" -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 "{\"fanSpeed\":\"$fanSpeed\",\"fanSwing\":\"BOTH\",\"humidity\":\"50\",\"id\":$roomId,\"iduTemperature\":$temperature.0,\"mode\":\"$mode\",\"power\":\"ON\"}" -X PUT --compressed "https://api-global-prod.aircloudhome.com/rac/basic-idu-control/general-control-command/$roomId?familyId=$familyId"
sleep 20
websocatresult=$(echo $connectandsub | $websocatbinary -b --base64 --ping-timeout=$pingtimeout -q -n $wssairCloud | grep -a HITACHI | tr -d "\n")
done
fi
;;
"off")
now=$(date)
#echo "OFF at $now" >> /opt/scripts/logs.txt
if [ -z "$roomId" ]
then
:
else
until [ $(echo $connectandsub | $websocatbinary -b --base64 --ping-timeout=$pingtimeout -q -n $wssairCloud | grep -a HITACHI | tr -d "\n" | jq -r ".data[] | select(.id==$roomId) | .power") = "OFF" ]
do
#echo "OFF $mode $temperature at $now" >> /opt/scripts/logs.txt
curl -s -H "Authorization: Bearer $token" -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 "{\"fanSpeed\":\"$fanSpeed\",\"fanSwing\":\"BOTH\",\"humidity\":\"50\",\"id\":$roomId,\"iduTemperature\":$temperature.0,\"mode\":\"$mode\",\"power\":\"OFF\"}" -X PUT --compressed "https://api-global-prod.aircloudhome.com/rac/basic-idu-control/general-control-command/$roomId?familyId=$familyId"
sleep 20
done
fi
;;
"powerstatus")
echo $connectandsub | $websocatbinary -b --base64 --ping-timeout=$pingtimeout -q -n $wssairCloud | grep -a HITACHI | tr -d "\n" | jq -r ".data[] | select(.id==$roomId) | .power"
;;
"modestatus")
echo $connectandsub | $websocatbinary -b --base64 --ping-timeout=$pingtimeout -q -n $wssairCloud | grep -a HITACHI | tr -d "\n" | jq -r ".data[] | select(.id==$roomId) | .mode"
;;
"powerstatusbymode")
echo $connectandsub | $websocatbinary -b --base64 --ping-timeout=$pingtimeout -q -n $wssairCloud | grep -a HITACHI | tr -d "\n" | jq -r ".data[] | select((.id==$roomId) and (.mode==\"$mode\")) | .power"
;;
"roomtemperature")
echo $connectandsub | $websocatbinary -b --base64 --ping-timeout=$pingtimeout -q -n $wssairCloud | grep -a HITACHI | tr -d "\n" | jq -r ".data[] | select(.id==$roomId) | .roomTemperature"
;;
"roomhumidity")
echo $connectandsub | $websocatbinary -b --base64 --ping-timeout=$pingtimeout -q -n $wssairCloud | grep -a HITACHI | tr -d "\n" | jq -r ".data[] | select(.id==$roomId) | .humidity"
;;
"idutemperature")
echo $connectandsub | $websocatbinary -b --base64 --ping-timeout=$pingtimeout -q -n $wssairCloud | grep -a HITACHI | tr -d "\n" | jq -r ".data[] | select(.id==$roomId) | .iduTemperature"
;;
"websocatdebug")
echo $connectandsub | $websocatbinary -b --base64 --ping-timeout=$pingtimeout -q -n $wssairCloud | grep -a HITACHI | tr -d "\n" | jq
;;
"websocatdebug2")
echo $connectandsub | $websocatbinary -b --base64 --ping-timeout=$pingtimeout -n $wssairCloud
;;
*)
esac
j'utilise websocat 1.12.0 dans /usr/local/bin/websocat il semble fonctionnel selon cet exemple :
[Connect to public echo server] (https://github.com/vi/websocat#connect-to-public-echo-server)
$ websocat ws://ws.vi-server.org/mirror
123
123
ABC
ABC
Voici le résultat obtenu en lançant le script aircloud.sh dans /opt/script/
#sh aircloud.sh websocatdebug
aircloud.sh: line 38: syntax error: unexpected word (expecting "in")
#sh aircloud.sh websocatdebug2
aircloud.sh: line 38: syntax error: unexpected word (expecting "in")
@aubierr La variable websocatbinary n'est pas bonne
j'utilise : websocatbinary="/usr/local/bin/websocat"
@aubierr Et, avec bash aircloud.sh websocatdebug ? (Avec bash au lieu de sh comme déjà précisé il y a 2 posts)
#bash aircloud.sh websocatdebug
aircloud.sh: line 38: syntax error near unexpected token `$'in\r''
'ircloud.sh: line 38: `case "$1" in
@aubierr dos2unix aircloud.sh Puis relancer le script ?
Le commande s'exécute sans erreur mais ne renvoie rien. bash aircloud.sh websocatdebug2 renvoie qqch.
#bash aircloud.sh websocatdebug
#bash aircloud.sh websocatdebug2
websocat: --ping-timeout specified without --ping-interval. This will probably lead to unconditional disconnection after that interval.websocat: --ping-interval is currently not very effective without -E or -U
CONNECTED
version:1.2
heart-beat:10000,10000
[WARN websocat::ws_peer] Closing WebSocket connection due to ping timeout
Et bien on y arrive :) idéalement c'est quand même mieux de télécharger le script plutôt que de le copier coller Essayez le reste des commandes Si ça ne fonctionne pas c'est l'API Hitachi
Merci! Je n'ai aucune réponse mais je pense que c'est leur serveur. C'est bien dommage mais c'est comme cela.
@aubierr Normalement la commande websocatdebug2 doit renvoyer quelque chose quand même en insistant un peu
Salut, bon, jvais reprendre les scripts de ce repo, car, après avoir testé la version HACS, elle ne marche pas bien. J'ai l'impression que l'api ne répond pas. J'ai pas encore analysé le pourquoi du comment. Mais je me demande si elle n'envoie pas trop de requêtes à l'api. Je préfère les scripts utilisés ici car, si l'action n'est pas passé, il temporise et renvoies la requête.
Par contre, je galère côté intégration dans le dashboard (page aperçu).
j'aime bcp la carte créée : ici
Pourriez-vous transmettre le contenu du yaml, merci par avance.
J'avais bidouillé le script l'année dernière, il fonctionnait de mon côté mais il manque des contrôles (présence binaire, fichiers etc...)
A savoir que mon HA est installé sur un raspberry (HA version officielle).
Edit: c'est quand même la plaie ce aircloud (appli et api).
J'ai deux pac air/air gree pour les chambres, Après avoir installé les modules wifi à 50e, je peux les contrôler à distance avec HA (sans utilisation d'api il me semble, car le temps de passage des ordres est quasi instantané). ou via l'appli GREE.
Savez-vous si la version plus moderne proposée par hitachi est plus pratique? Car j'envisage d'installer une pac multi split, Encore merci.
@Chqrles84k Salut, Ayant changé de job entre temps j'ai beaucoup moins de temps pour maintenir le script et faire évoluer la solution dans HA Je t'avouerai que j'ai survolé rapidement la réécriture du script que tu as fait quelques mois plus tôt, ça m'a l'air beaucoup plus "propre" en tout cas :)
Par contre, l'API / websocket d'airCloud est complétement dans les choux depuis quelques jours, même l'appli officielle ne parvient pas à répondre convenablement, sur le Play Store beaucoup de monde s'en plaint Alors soit nos travaux (ici, + https://github.com/svmironov/aircloud_ha ) floodent trop l'API qui ne répond plus du tout, soit l'architecture d'airCloud est complétement pétée ... et comme c'est un système complètement fermé comme souvent dans les IoT de ce type ... c'est galère
J'obtiens souvent des {"timestamp":"2023-11-07T21:13:17.082+00:00","status":500,"error":"Internal Server Error","message":"SHORTCIRCUIT"} ou {"timestamp":"2023-11-07T21:10:49.367+00:00","status":401,"error":"Unauthorized","message":"Error -> Unauthorized","path":"/basic-idu-control/general-control-command/xxxx"}
Pour tester, j'ai complètement désactivé l'intégration dans HA pendant 24h et l'appli officielle est down malgré tout donc ça n'a pas l'air d'être lié à une potentielle protection sur mon compte
Ce matin ça a l'air d'aller mieux, mais ça ne va pas durer
Pour la carte, j'essaierai de publier les YAML prochainement, par manque de temps j'ai un peu triché et j'ai fait 100% en GUI ;)
En tout cas, si ça continue comme ça avec l'instabilité d'airCloud, pour ma part je compte remplacer le module Wifi par un module Aidoo, Wifi ou Z-Wave, c'est en réflexion depuis un moment https://myzone.airzonefrance.fr/produits/gamme-actuelle/aidoo//z-wave/aidoo-control-z-wave-plus-hitachi-rad-by-airzone-eu-868-869-mhz-1432.html
Salut,
Merci pour ta réponse. Idem de mon côté, je bosses dessus par intermittence :)
J'ai réussi à créer les entités, etc... En suivant la doc et quelques threads, ca m'a permis d'apprendre un peu plus sur HA :)
Tout allait pendant une semaine, puis, rebelotte xD, leur api est encore down :/
Du coup, je regardes la méthode airzone. Tu n'est pas le seul à en parler.
Tiens-nous au courant si t'as un feedback .
Bonjour,
J’ai une PAC air/air Hitachi avec une passerelle SPX-WFGO2. J’ai l’application "AirCloud Go" installée sur mon smartphone qui fonctionne et contrôle cette PAC.
Je souhaite piloter ma PAC avec HA mais l’intégration standard GUI « Hitachi Hi Kumo » proposée par Overkiz ne fonctionne pas avec un problème d'identification (adresse_mail et pwd passés en clair :
J’aimerais utiliser votre script mais je ne suis pas informaticien :expressionless: et je vois que vous avez beaucoup "galéré" pour que ça fonctionne.
Hitachi utilise une nouvelle application "AirCloud Go" en remplacement de "AirCloud Home". Peut-être que cela améliore les performances de leur API ? Avez-vous des informations la-dessus ?
Je suis sur un PI4 avec un SSD connecté via USB, directement sous HA. Core 2024.1.6 Supervisor 2024.01.1 Operating System 11.5 Interface utilisateur 20240104.0
Je me demande si ça vaut le coup d'essayer et de passer du temps ??? Merci pour votre retour
Bonjour, Je ne connais pas l'integration d'Overkiz je ne peux donc pas aider Pour mon intégration pour commencer il faut utiliser la branche develop ici : https://github.com/lb544/ha-aircloud/blob/develop/scripts/aircloud.sh Pour le reste il faut maîtriser suffisamment HA et Linux en ligne de commande et fichiers de configuration La "nouvelle" appli aircloud est la même que l'ancienne, c'est juste un renommage cosmétique Par contre l'API répond mieux depuis ma menace au support de faire une plainte collective
Merci d'avoir répondu si vite, ça me conforte dans l'idée d'essayer. Je connais bien linux en mode ligne (J'ai démarré sur Multics, puis Unix !!! ça remonte à loin)
Je vous tiendrai informé de mes essais
t'as réussi à avoir une réponse du support? xD, bien joué.
Le seul truc qui m'a "forcé" à utiliser HA pour piloter ma pac est que, la programmation hebdomadaire via l'appli aircloud go, ne permet pas de régler la vitesse lors de l'allumage: La valeur est par 2 par défaut, alors que j'utilise la vitesse 3.
J'utilise HA pour l'allumer et l'éteindre quotidiennement selon la température extérieure.
Par contre, @lb544, si tu as deux secondes, tu peux nous donner ta méthode pour changer la température lorsque la pac est déjà allumée. J'ai cru comprendre qu'il faut envoyer un OFF? Tu envoies le OFF suivi d'un ON ? (sans attente de réponse?)
Je n'ai pas eu le temps d'essayer, gros travaux en cours...
Merci.
@Chqrles84k Oui, fin décembre :) "We sincerely apologize for the inconvenience using airCloud Go application!
Based on our research we have identified some abnormal operation with respect to one of the air conditioner families and made some optimizations."
Bizarrement depuis, tout est stable chez moi :)
Pour changer la température pendant le fonctionnement, je refais tout simplement un ON avec la température désirée sh /opt/scripts/aircloud.sh on Séjour HEATING xx AUTO
Avec donnée par le slider
Précision : je passe par une automatisation pour lui passer le ON avec la nouvelle température, sinon le slider ne fait rien de lui même
Merci mon seigneur ;)
oui, l'api marche nickel, ca commençait très mal, deux pannes de plus d'une semaine dès novembre.
Merci encore,
Bonjour,
je me relance a essayé d'utilisé votre projet, j'ai un retour du serveur sur le powerstatus, modestatus... mais impossible d'envoyer une commande. La climatisation ne bouge pas et j'ai un retour que je vous joint.
➜ ~ sh /root/config/script/aircloud.sh modestatus Séjour
HEATING
➜ ~ sh /root/config/script/aircloud.sh on Séjour HEATING 19 AUTO
{"type":"Wed Feb 07 04:40:39 GMT 2024","desc":"uri=/basic-idu-control/general-control-command/28306","stackTrace":"INVALID_HUMIDITY","code":null}{"type":"Wed Feb 07 04:41:06 GMT 2024","desc":"uri=/basic-idu-control/general-control-command/28306","stackTrace":"INVALID_HUMIDITY","code":null}{"type":"Wed Feb 07 04:41:33 GMT 2024","desc":"uri=/basic-idu-control/general-control-command/28306","stackTrace":"INVALID_HUMIDITY","code":null}^C
la réponse a la commande de chauffe a 19 revient toute les 30sec et temps que je n'arrête pas la commande manuellement.
Je vous joins les commandes debug
➜ ~ sh /root/config/script/aircloud.sh websocatdebug
{
"notificationType": "ON_CONNECT",
"data": [
{
"serialNumber": "XXXX-XXXX-XXXX",
"iduFrostWashStatus": {
"active": false,
"priority": 8,
"lastUpdatedAt": 0,
"subCategory": null,
"errorCode": null
},
"model": "HITACHI",
"id": 28306,
"vendorThingId": "JCH-********",
"name": "Séjour",
"roomTemperature": 19.0,
"mode": "HEATING",
"iduTemperature": 19.0,
"humidity": 2147483647,
"power": "OFF",
"relativeTemperature": 0.0,
"fanSpeed": "LV2",
"fanSwing": "OFF",
"updatedAt": 1707279977168,
"specialOperationStatus": {
"active": false,
"priority": 7,
"lastUpdatedAt": 0,
"subCategory": null,
"errorCode": null
},
"errorStatus": {
"active": false,
"priority": 4,
"lastUpdatedAt": 0,
"subCategory": "NO_ERROR",
"errorCode": null
},
"lastOnlineUpdatedAt": 1706824123642,
"scheduletype": "WEEKLY_TIMER_ENABLED",
"modelTypeId": 174,
"cloudId": "174_RAK-DJ50PHAE",
"opt4": 0,
"holidayModeStatus": {
"active": false,
"priority": 0,
"lastUpdatedAt": 0,
"subCategory": null,
"errorCode": null
},
"online": true,
"SysType": 1
}
]
}
➜ ~ sh /root/config/script/aircloud.sh websocatdebug2
websocat: --ping-timeout specified without --ping-interval. This will probably lead to unconditional disconnection after that interval.
websocat: --ping-interval is currently not very effective without -E or -U
CONNECTED
version:1.2
heart-beat:10000,10000
user-name:User(id=******, email=*********@****.com, phoneNumber=null, password=null, softLockCount=0, lockUntil=null, detailsUserInfo=null, status=null, socialAccounts=[])
MESSAGE
destination:/notification/34996/34996
content-type:application/json;charset=UTF-8
subscription:4f8d3178-c573-11ee-9ce1-325096b39f47
message-id:0256c34d-a0aa-26e1-6897-aa1a1c503fbc-5219607
content-length:915
{"notificationType":"ON_CONNECT","data":[{"serialNumber":"XXXX-XXXX-XXXX","iduFrostWashStatus":{"active":false,"priority":8,"lastUpdatedAt":0,"subCategory":null,"errorCode":null},"model":"HITACHI","id":28306,"vendorThingId":"JCH-********","name":"Séjour","roomTemperature":19.0,"mode":"HEATING","iduTemperature":19.0,"humidity":2147483647,"power":"OFF","relativeTemperature":0.0,"fanSpeed":"LV2","fanSwing":"OFF","updatedAt":1707279409222,"specialOperationStatus":{"active":false,"priority":7,"lastUpdatedAt":0,"subCategory":null,"errorCode":null},"errorStatus":{"active":false,"priority":4,"lastUpdatedAt":0,"subCategory":"NO_ERROR","errorCode":null},"lastOnlineUpdatedAt":1706824123642,"scheduletype":"WEEKLY_TIMER_ENABLED","modelTypeId":174,"cloudId":"174_RAK-DJ50PHAE","opt4":0,"holidayModeStatus":{"active":false,"priority":0,"lastUpdatedAt":0,"subCategory":null,"errorCode":null},"online":true,"SysType":1}]}[WARN websocat::ws_peer] Closing WebSocket connection due to ping timeout
➜ ~
Bonjour,
J'ai installé et je démarre les tests avec le script pris dans https://github.com/lb544/ha-aircloud/blob/develop/scripts/aircloud.sh J'ai rempli les variables de connexion et ajouté quelques traces avec echo.
Je lance le script : [core-ssh scripts]$ bash aircloud.sh on websocatdebug2 Traces : uuid= xxx-xxx-xxx-xxx token= null familyId= null cloudlds= {"timestamp":"2024-02-07T19:44:34.460+00:00","status":401,"error":"Unauthorized","message":"Error -> Unauthorized","path":"/ownership/groups/cloudIds/null"} Apres connectandsub on J'affiche les paramètres qui ont été passés (ici 2) websocatdebug2 roomID avant la boucle : j'affiche la variable avant la boucle roomID dans la boucle : j'affiche la variable dans la boucle roomID dans la boucle : roomID dans la boucle :
Cette variable est vide avant et dans la boucle d'où je sors par un CTRL C
J'ai l'impression que ce sont mes données de connexion (passées en clair) qui foirent
Ton avis ?
merci
Je t'envoie le début du script avec mes variables et traces
hitachiuser="xxxxx@gmail.com" hitachipassword="Jxxxxxx1" websocatbinary="/config/scripts/websocat.aarch64-unknown-linux-musl" wssairCloud="wss://notification-global-prod.aircloudhome.com/rac-notifications/websocket" pingtimeout="5"
logfile="/homeassistant/scripts/home-assistant.log"
uuid=$(curl -s https://www.uuidtools.com/api/generate/v1 | jq -r .[0]) echo "uuid= $uuid" 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 "https://api-global-prod.aircloudhome.com/iam/auth/sign-in" | jq -r .token) echo "token= $token" 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 "https://api-global-prod.aircloudhome.com/iam/user/v2/who-am-i" | jq -r .familyId) echo "familyId= $familyId" 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 "https://api-global-prod.aircloudhome.com/rac/ownership/groups/cloudIds/$familyId") echo "cloudlds= $cloudlds" 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 "Apres connectandsub" i=$(($#-1)) while [ $i -ge 0 ];do echo ${BASH_ARGV[$i]} i=$((i-1)) done if [ "$2" = "" ];then echo "Nom pac non renseigné" exit 0 else roomName=$2 roomId=$(echo $connectandsub | $websocatbinary -b --base64 --ping-timeout=$pingtimeout -q -n $wssairCloud | grep -a HITACHI | tr -d "\n" | jq -r ".data[] | select(.name==\"$roomName\") | .id") echo "roomID avant la boucle : " $roomId while [ -z "$roomId" ] do
roomId=$(echo $connectandsub | $websocatbinary -b --base64 --ping-timeout=$pingtimeout -q -n $wssairCloud | grep -a HITACHI | tr -d "\n" | jq -r ".data[] | select(.name==\"$roomName\") | .id")
echo "roomID dans la boucle : " $roomId
sleep 10
done
fi
Hi, congratulations for the work done. I have a problem with the script. After following the instructions for installing the package, even if I execute the command "sh aircloud.sh websocatdebug" from the terminal, I do not receive any response from the server and instead in the home assistant log I receive this error "Command failed (with return code 2 ): sh /opt/scripts/aircloud.sh roomTemperature garage". On aircloud my device is called "garage". Do you have any solution to the problem? Thank you very much.