frixo Posté(e) le 31 janvier 2019 Signaler Posté(e) le 31 janvier 2019 Bonjour à tous, Petit post pour aider ceux qui sont dans le même cas que moi ! J'ai un chauffe eau tout neuf Thermor 270L thermodynamique. Bref c'est cool, mais il est pas compatible HC2, mais ... il peut se connecter en IO Home Control (techno proprio de Somfy entre autre) Bref, j'ai pas acheté une Tahoma car trop cher, mais un bridge CozyTouch , sur EBay , pour 56€ 'fdp inclus !) grace a ce bridge, je peux installer une app sur mon Teléphone (Thermor cozytouch), et piloter mon chauffe eau. Outre le fait que l'appli a été codé avec les pieds, et dès fois qu'elle répond pas ou affiche des données incohérentes, cela est quand même pratique. mais surtout, je peut utiliser les API 'privé' du bridget CozyTouch pour appeler moi-même les API Rest. Ahh , la ca devient plus interessant ! 2 URL a connaitre - https://ha110-1.overkiz.com/enduser-mobile-web/externalAPI/json/login A appeler en POST, avec 2 parametre dans le body en urlEncoded : userId=TONUSER&userPassword=TONPASSWORD Il faut récupérer le Set-Cookie de la réponse (qui contient le JSESSIONID) - https://ha110-1.overkiz.com/enduser-mobile-web/externalAPI/json/getSetup A Appeler en GET (ou POST), avec dans le Header : Cookie : les cookies récupéré dans l'appel du login (avec le jessionid) Dans le retour , on a TOUT !!!! Et bien, avec tout cela, j'ai fait un petit VD dans la HC2, qui m'affiche le nombre de douche restante ( Nbr de L eau chaude restant divisé par 30L) , le mode, si le boost est actif, si le mode abs est actif , le mode (auto, manu, eco) Vu qu'un VD ne peut pas faire d'appel en POST, j'ai du passer par une scene (id 34 , il faut changer l'id de la scene apperl dans le VD offcourse) qui fait le taf (en asyncrhone de 1s) et stock le résultat dans des vars global que lit le VD PS : Le VD affiche en icone un chiffre , qui est une image , le 7 étant l'image 1010 chez moi, et le 0 la 1017 PS : il faut créer les var gloable: - mode_chauffe_eau - douche_restante - chauffe_eau_boostD - chauffe_eau_boost - chauffe_eau_abs_D prochaine étape : pouvoir activer le mode boost... La scene --[[ %% properties %% events %% globals --]] local user = "xxxxxxxxxxxx" local pass = "xxxxxxxxxxxxxx" local url = "https://ha110-1.overkiz.com/enduser-mobile-web/externalAPI/json/"; local url_login = "login" local url_data = "getSetup" local body = "userId=" .. urlencode(user) .. "&userPassword=" .. urlencode(pass) --print(urlencode(body)) local JSESSION_ID="" local data = nil fibaro:debug(body) function urlencode(s) if (s) then s = string.gsub (s, "\n", "\r\n") s = string.gsub (s, "([^%w ])", function (c) return string.format ("%%%02X", string.byte(c)) end) s = string.gsub (s, " ", "+") end return s end function connect() print("> Connect ...") local httpClient = net.HTTPClient() httpClient:request(url .. url_login , { success = function(response) if (tonumber(response.status) == 200 or tonumber(response.status) == 201 or tonumber(response.status) == 202) then print(" > Connexion OK") JSESSION_ID=response.headers['Set-Cookie'] print(" > JSSESSION ID : " .. response.headers['Set-Cookie']) get_data() else print(" > Connexion KO !") fibaro:debug('Error' .. response.status) print("Error " .. response.data) end end, error = function(err) print(' > error = ' .. err) end, options = { method = 'POST', headers = { ["content-type"] = 'application/x-www-form-urlencoded', }, data = body } }); end function get_data() print("> Get data...") local httpClient = net.HTTPClient() httpClient:request(url .. url_data , { success = function(response) if (tonumber(response.status) == 200 or tonumber(response.status) == 201 or tonumber(response.status) == 202) then print(" > Get data OK") data= json.decode(response.data) --print("Data " .. response.data) read_data() else print(" > Get data KO") fibaro:debug('Error' .. response.status) print(" > Error " .. response.data) end end, error = function(err) print('error = ' .. err) end, options = { method = 'POST', headers = { ["content-type"] = 'application/x-www-form-urlencoded', ["Cookie"] = JSESSION_ID, }, data = nil } }); end function read_data() local devices=data['setup']['devices'] for i,v in ipairs(devices) do local one_device=devices[i] if(one_device['controllableName'] == 'io:AtlanticDomesticHotWaterProductionIOComponent') then read_data_chauffe_eau(one_device) end end end function read_data_chauffe_eau(device) --core:WaterConsumptionState local state_eau_restante = get_state_by_name(device['states'],'core:WaterConsumptionState') print('L d\'eau restante : ' .. state_eau_restante['value']) local douche_r=math.floor(tonumber(state_eau_restante['value']) / 30) print('douche restante : ' .. douche_r) fibaro:setGlobal('douche_restante',douche_r) local state_mode = get_state_by_name(device['states'],'io:DHWModeState') local mode = 'null' if(state_mode['value'] == 'autoMode') then mode='Auto' end if(state_mode['value'] == 'manualEcoInactive') then mode='Manuel' end if(state_mode['value'] == 'manualEcoActive') then mode='Manuel [Eco]' end fibaro:setGlobal('mode_chauffe_eau',mode) print('mode : ' .. mode) local chauffe_eau_boost = get_state_by_name(device['states'],'core:BoostModeDurationState') local mode_boost = 'OFF' if(chauffe_eau_boost['value'] ~= 0) then mode_boost = 'ON' end fibaro:setGlobal('chauffe_eau_boost',mode_boost) print('BOOST : ' .. mode_boost ) print('BOOST durée : ' .. chauffe_eau_boost['value']) fibaro:setGlobal('chauffe_eau_boostD',chauffe_eau_boost['value']) --chauffe_eau_abs_D local chauffe_eau_abs = get_state_by_name(device['states'],'io:AwayModeDurationState') print('Absence durée : ' .. chauffe_eau_abs['value']) fibaro:setGlobal('chauffe_eau_abs_D',chauffe_eau_abs['value']) end function get_state_by_name(l_states,name) for i,v in ipairs(l_states) do local one_s=l_states[i] if(one_s['name'] == name) then return one_s end end end connect(); Chauffe-Eau.vfib 1
lamparo Posté(e) le 31 janvier 2019 Signaler Posté(e) le 31 janvier 2019 Cool, merci bien.....il ne me reste plus qu'à changer mon vieux chauffe eau. J'ai signé la pétition
frixo Posté(e) le 2 février 2019 Auteur Signaler Posté(e) le 2 février 2019 Finalement vaut plutot mettre : local douche_r=math.floor(tonumber(state_eau_restante['value']) / 40)
eliottinthesky Posté(e) le 6 février 2019 Signaler Posté(e) le 6 février 2019 Merci pour ton travail !! j'attend la possibilité du boost et je m'achète le cozytouch :)
frixo Posté(e) le 6 février 2019 Auteur Signaler Posté(e) le 6 février 2019 Pour le boost j'y arrive pas il faut appeler en post https://ha110-1.overkiz.com/enduser-mobile-web/externalAPI/json/../../enduserAPI/exec/apply avec en header le JESSION ID bien sur et en body { "actions": [ {"deviceURL": "iURL DE TON DEVICE" , "commands": [{ "name": "setCurrentOperatingMode", "parameters":[xxxxxxxxxxxx]}]}]} } Je sais pas quoi mettre a la place des x j'ai tenté d'appeler direct la méthode : setDurationBoost , et mettre 1 pour 1j de boost , mais ca semble pas suffire, il faut d'abord basculer le chauffe eau en mode boost, il veut un objet JSON, mais je trouve pas le quel je peche la dessus
eliottinthesky Posté(e) le 9 février 2019 Signaler Posté(e) le 9 février 2019 hello, as tu déjà checker ce topic ? https://easydomoticz.com/forum/viewtopic.php?t=7497&start=30
Bloug Posté(e) le 7 octobre 2020 Signaler Posté(e) le 7 octobre 2020 Petit déterrage ... Salut @frixo As tu réussi a utiliser ' la commande' pour changer un paramètre via l'api ? j'adapte ton code l'utiliser avec mes sèche-serviettes. Le 06/02/2019 à 18:41, frixo a dit : Pour le boost j'y arrive pas il faut appeler en post https://ha110-1.overkiz.com/enduser-mobile-web/externalAPI/json/../../enduserAPI/exec/apply avec en header le JESSION ID bien sur et en body { "actions": [ {"deviceURL": "iURL DE TON DEVICE" , "commands": [{ "name": "setCurrentOperatingMode", "parameters":[xxxxxxxxxxxx]}]}]} } Je sais pas quoi mettre a la place des x j'ai tenté d'appeler direct la méthode : setDurationBoost , et mettre 1 pour 1j de boost , mais ca semble pas suffire, il faut d'abord basculer le chauffe eau en mode boost, il veut un objet JSON, mais je trouve pas le quel je peche la dessus Salut @frixo As tu réussi a utiliser la commande au dessus pour changer un paramètre via l'api ? j'adapte ton code l'utiliser avec mes sèche-serviettes. ( activation du boost et du séchage ) dans mon cas, deviceURL = io://0810-4343-0200/13610533#1 commands name = core:BoostModeDurationState parameters = 10 ( le temps en min ) dans le lien github j'ai vu : myurl=url_cozytouch+u'../../enduserAPI/exec/apply' payload =u'{\"actions\": [{ \"deviceURL\": \"'+url_device+u'\" ,\n\"commands\": [{ \"name\": \"'+name+u'\",\n\"parameters\":['+parametre+u']}]}]}' cookies=var_restore('cookies') req = requests.post(myurl, data=payload, headers=headers,cookies=cookies) if debug: print(' POST-> '+myurl+" | "+payload+" : "+str(req.status_code)) un cosyTouch User ? merci
Bloug Posté(e) le 7 octobre 2020 Signaler Posté(e) le 7 octobre 2020 (modifié) Modifié le 7 octobre 2020 par Bloug
cseb62 Posté(e) le 11 janvier 2021 Signaler Posté(e) le 11 janvier 2021 Bonjour je vais sûrement acheter un sèche serviette sauter alutu ? pourrai je le piloter avec votre module virtuel ? D'avance merci
Bloug Posté(e) le 23 janvier 2022 Signaler Posté(e) le 23 janvier 2022 des utilisateurs du Cozytouch ? mon VD ne fonctionne plus [DEBUG] 11:26:59: > Connect ... [DEBUG] 11:26:59: > Connexion KO ! [DEBUG] 11:26:59: Error403 [DEBUG] 11:26:59: Error {"error":"Bad credentials"}
Messages recommandés