Aller au contenu
LyP

Qubino - Zmnhjd1 - Fil Pilote 6 Ordres Z-Wave+

Recommended Posts

Bonjour à tous,

 

J'ai bien progressé dans mon installation de ce "super" module :2:

Je vous partage mon VD, largement inspiré de celui de @Did

Il permet de gérer 2 températures de consigne "Confort" et "Eco", avec une fonction de "marche forcée" (par pas de 30min).

image.png.a87ea1a2578f9e67b3d064195507dcf7.png

 

Et pour le passage automatique des modes "Eco" à "Confort", j'utilise le GEA :

  -- Temperature dans la salle de bain
  GEA.add({{"Label!",644,"lblMode","Eco"},{"Label!",644,"lblMode","Forcée"},{"Time","08:00","17:30"},{"Time","23:30","05:30"}},30,"",{{"Label",644,"lblMode","Eco"}})
  GEA.add({{"Label!",644,"lblMode","Confort"},{"Label!",644,"lblMode","Forcée"},{"Time","06:00","07:30"},{"Time","18:00","23:00"}},30,"",{{"Label",644,"lblMode","Confort"}})

En espérant que cela puisse resservir pour d'autres utilisateurs :)

 

 

Thermostat_SdB_V2.0.vfib

Modifié par Dragoniacs
EDIT : publication d'une V2.0 (la V1.0 buggait à minuit...)
  • Like 1
  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Grumpf de grumpf!!!!
La mise a jour pour passer en 4.160 à buggé mon qubino!!!!
Il est repassé en "non configuré " et mon VD ne fonctionne plus car il n'arrive plus à récupérer le paramètre value!!!


Envoyé de mon SM-A520F en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

Alors je sais pas ce qui a merdé, mais j'ai perdu un switch fibaro, du coup réseau zwave en rade à l'étage et pilote qubino déconfiguré .
J'ai réussi à remettre le qubino mais le switch bug
.. va falloir que je bidouille ce soir parce qu'à distance j'arrive à rien...

Envoyé de mon SM-A520F en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

perdu un switch ? tu ne le vois plus dans l'interface ?

 

Au fait super ton VD ;-)

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai un FGS double qui ne m'affiche plus que 1 lampe....

J'ai essayé de refaire une configuration complète, mais la 2e lampe n'apparait toujours pas !

 

Merci pour mon VD :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

 

j'ouvre un nouveau sujet sur le module Qubino zmnhjd1 pour controller un radiateur avec le fil pilote en mode 6 ordres.

Je voudrais vous donner mon retour d'expérience et je suis preneur de vos remarques/suggestion.

 

Avant propos

Pour commencer, j'ai un maison avec plus de 10 radiateur noirot Bellagio tout neuf ! J'ai hésité à acheter le module de noirot pour les connecter (ici) mais il s'agissait d'une techno propriétaire. De plus , j'ai un chauffe-eau thermodynamique Thermor, qui peut être connecté avec la techno IO homecontrol (somfy, encore une techno propriétaire) , et un portail CAME où je dispose de contact  à sec pour déclencher l'ouverture à distance.

La maison est en Île-de-france, mais à la campagne, j'ai une box ADSL avec un débit de 2M, et j'ai une box 4G avec un débit variant de 21M à 0 (en temps d'orage/pluie , donc surtout en hivers en fait)

 

1 - le choix de la solution domotique

J'ai longtemps hésité, je me suis intéressé à toutes les solutions de domotique. J'ai hésité entre : 

  • Somfy : pour avoir le control sur le chauffe-eau
  • Eedomus : francais , pas trop cher, grosse comunauté, stable
  • Home-Center 2 : Programmable - grosse communauté, stable , non dépendant du cloud. (mais cher)
  • Jeedom/domoticz : trop peu stable - infrastructure à mettre en place (monter un mini pc, et ca me gavait :S )

Finalement j'ai éliminé Somfy car propriétaire , Eedomus pour sa dépendance au cloud, Jeedom/Domotics pour son côté trop geek (je suis un gros geek, mais la je cherchais surtout quelque chose de stable, faut pas que mes lumières clignotent à minuit ! ) et j'ai été séduit par la HC2 car je pouvais créer mes propres scripts, et surtout pas de dépendance au cloud/internet. (alors que si le serveur de Eedomus tombe en rade, bein ....

 

2 - Achat

Bon, j'ai passé commande sur xxxxx (je sais pas si j'ai le droit de le dire), j'ai acheté la box HC2 (et surtout pas la lite où on peut pas programmer), et un module ZMNHID1 (oui , vous avez bien lu , ZMNHID1 et non le zmnhjd1 , bref je m'étais planté d'une lettre !). Et j'ai attendu avec impatience de tout recevoir

 

3 - Réception et installation

La box HC2 est absolument magnifique, et son installation est triviale, franchement, on dirait du Apple ! Je n'ai rien eu à redire.

Je déballe mon module ZMNHID1, je fais le branchement et tente l'association, bon bref , je galère, j'arrive pas à l'associer, je lis dans la notice qu'il faut pas appuyer sur le bouton si on le branche sur du 230V... bon je vous passe les détails pour finalement me rendre compte après 2jours de tentative que ... c'est pas le bon module !

Je le retourne, et en achète un sur Amazon (le bon, le zmnhjd1 ) pour le recevoir le lendemain.

 

Le lendemain, mon bon module en main, je le branche et tente de l'associer à la box. J'y arrive pas, j'ai pourtant cocher la case comme quoi le module était 'loin' de la box (on parle de 3m) , mais rien n'y fait. Je parcours les forum, je vois que je suis pas le seul. Après des tonnes de tentatives , voila mon conseil pour y arriver du premier coup (oui car depuis j'en ai installer 6 , et ca marche du premier coup )

 

Comment appairer/associer un module Qubino zmnhjd1 avec la Home Center 2 (HC2)

- Mettre hors-tension le radiateur

- Effectuer les branchements (voir notice, le neutre, puis la phase, puis le fil pilote) sur la prise du radiateur si vous avez une BOX 4G , sinon, branchez le sur une prise électrique juste à côté de votre box ADSL/Fibre   <<<<<---- ce détail est super important, donc je le redis, si vous avez une box ADSL/Fibre , donc une box qu'on ne peut pas déplacer car dépendante de la prise téléphone/fibre de votre maison, il faut prendre voter module zmnhjd1, et le brancher juste à côté de la box, tant pis s'il n'est pas relié au radiateur via le fil pilote. trouvez une phase et un neutre (prise de courant/interrupteur que sais-je) à côté de voter box, et faite un montage temporaire (hors tension évidemment)

- Donc je résume avant de mettre le courant : vous avez votre Box HC2 qui se trouve à moins de 1mètre (très important) de votre module Qubino, branché à minima à la phase et au neutre.

- Mettez la tension

- Allez sur la page Device de la HC2, et cliquez sur 'Ajouter un device'

- Cochez la case 1 et 3 (Device is located far from the Home Center - Add in security mode if device supports it)

- Cliquez sur le bouton 'Add' (la box affiche : ] Home Center in learning mode  )

- Appuyez sur le bouton d'association du Module Qubino zmnhjd1 => 3 secondes montre en main. surtout pas 4 ou 5 ! ( il faut impérativement pas arriver à 6 secondes , sinon vous êtes foutu !)

- Attendez 5 secondes ( important , car c'est pas instantané ! ), si vous ne voyez rien à l'écran (en gros si il n'y a pas du texte qui défile , et qu'il y a juste et toujours la meme phrase : Home Center in learning mode ) , vous pouvez retenter l'opération. (chez moi ca marche à 40% lors de la première tentative , et 60% la seconde)

- Lorsque plein de texte se met à défiler ( si c'est pas le cas lisez ci-dessous la rubrique (mon module s'est mal associé) ), il faut être patient. Dès fois très patient. Il m'est arrivé de devoir attendre 30 min . Mais en moyenne ça met 8 minutes. Je déconseille de cliquer sur CLOSE, ni d'ouvrir un nouvel onglet sur le HC2. Juste attendre.

- Vous pouvez constater (ou pas) que l'association s'est bien passé si vous avez : 

  • Un device carton ( qui sert à rien , à cacher )
  • Un device variateur de lumière ( à garder (puis ensuite vous pourrez le cacher ) )
  • Un device capteur de température ( à cacher sauf si vous avez branché une sonde de température sur votre module, moi c'était pas le cas ) 
  • 3 devices de capteur de présence ( à cacher , sert à rien , c'est du factice evidement ) 

 

mon module s'est mal associé

Ca m'est beaucoup arrivé pour mon premier et second module, ensuite j'ai compris la technique détaillé. Le soucis vient du fait que j'appuyais trop longtemps sur le bouton, souvent bien plus de 6 secondes, ou que je m'excitais sur le bouton en donnant plein de petites pressions sur le bouton d'association. Il faut bien avoir en tête qu'il peut y avoir une latence de 5 seconde entre la fin de l'appui de 3 secondes sur le bouton et le début du défilement du texte qui confirme  que c'est bien parti pour l'association .

Bon, le module s'est mal associé, vous n'avez pas le variateur de lumière qui est l'élément clé pour controller le fil pilote, il faut donc supprimer le device. La ca marchote ... Il faut tenter de le supprimer. Utilisez la fonction de suppression de device (présent sur la même page que l'ajout) , et cette fois ci il faut appuyer 6 secondes ( voir 8 ) sur le bouton du module. 

Bref , pour moi ca marchait pas vraiment, et je finissais par forcer la suppression des modules en echec ! (souvent j'en avait 1  ou 2 , lorsque l'association marchait pas)

 

4 - Le paramétrage de mes radiateurs

C'est là ou les choses marrantes commencent. Contrairement à la eedomus, la HC2 ne gère pas nativement ce module qubino (je crois que les 2 marques on un différent) , du coup, au lieu d'avoir un module tout prêt avec les 6 ordres, on a un variateur de lumière ( les autres modules, vous les avez caché hein ? ).

Ce variateur de lumière, si vous le positionnez à 0, le radiateur se met en Délestage (Arrêt)

Puis plus vous allez monter le curseur du variateur,vous allez passer d'un ordre à l'autre

 

les ordres

  • Arrêt : 0 - 10
  • Hors-Gel : 11-20
  • Eco : 21-30
  • Confort-2 : 31-40  (met environ 5 min à être détecté par le radiateur, c'est normal)
  • Confort-1 : 41-50  (met environ 5 min à être détecté par le radiateur, c'est normal)
  • Confort : 51-100

 

Du coup, c'est un peu pourri, et je voulais un super module avec :

  • Une icone qui montre l'état du radiateur
  • Un texte qui décrit l'état du radiateur
  • 6 boutons (avec les 6 ordres pardis)

 

J'ai donc créé un module virtuel , et avec un peu de LUA , si on cliquait sur un bouton 'Arrêt' , ca envoyait l’ordre : 

fibaro:call(id_radiateur, 'setValue', valeur)

Evidemment la variable id_radiateur contient l’identifiant du radiateur et la variable valeur contient '0' (pour Arrêt !)

Et j'avais demandé que lorsqu'on appuis sur le bouton 'Arrêt' ca change l'icone du module virtuel pour mettre un dessin de radiateur avec un symbole OFF devant !

 

C'est pas mal, c'est d'ailleurs ce que recommande beaucoup de tuto, mais honnêtement ça fait pas l'affaire ! Les défauts : 

- Le module n'est pas capable de détecté l'état du radiateur (et oui , si on reboot la box HC2, ou même si on ouvre tout simplement un nouvel onglet, on a pas la bonne icone et le pas le bon texte (oui j'ai pas parlé du texte, j'y viendrais)

- Si jamais la communication n'est pas passé (et oui ca arrive en Z-Wave, la HC2 est super forte pour construire correctement le maillage, mais lorsqu'on je la déplace pour ajouter un nouveau module, bein je perd temporairement des liaisons , que la HC2 reconstruit par la suite, mais bon il m'est arrivé 2 fois qu'un device réponde pas pendant 1H, c'est rarissime je précise) , je voudrais pas que le radiateur reste en mode confort alors que je suis parti 3 semaines en vacances en ayant demandé que tout le monde soit en HG !

 

Donc j'ai procédé autrement !

 

La cible actuelle

- J'ai créé une variable globale : l_radiateurs , c'est en fait un tableau qui liste mes 'objets' radiateurs (objet au sens programmation)

- d'autre viaraible globale pour les ID des images des radiateurs

  • i_radiateur_cmu
  • i_radiateur_cmd
  • i_radiateur_c
  • i_radiateur_eco
  • i_radiateur_hg
  • i_radiateur_off

Pour uploader des icones personnalisé , il faut : 

  • Être en local (genre http://http://192.168.1.113 , et pas passer par http://dom.fibaro.xxxxxx), que les images soient en png , et qu'elles fassent 128x128px (on peut redimmensionner une image avec Paint3D sout Windows 10)
  • Pour récupérer l'ID du icone, effectuer un clic droit sur l'icone, faire 'ouvrir l'image dans un nouvel onglet', regarder l'url, et http://192.168.1.113/fibaro/n_vicons/User1007.png  l'ID est marqué juste après le User
  • Vous trouverez mes imgs en pj

 

Comment créer une variable gloable ?

-Il faut créer à la main via le pannel 'viariable globale' via l'IHM de la HC2 : Onglet Pannels => Variabels Pannel => Variables ( et pas Predefined Variables)

 

Un objet radiateur étant : 

  • un ID (l'ID du radiateur, du 'variateur de lumière qui permet de piloter le radiateur')
  • un état ordonné : l'ordre donné , j'ai demandé à ce radiateur d'être en mode hors gel par exemple
  • sa position : du texte qui dit ou est le radiateur dans la maison
  • ( et je pense prochainement un champ : type programmation, mais j'y reveindrais une autre fois)

 

- J'initialise cette variable avec une scene

--[[
%% properties
%% events
%% globals
--]]


function get_radiateur (id,position_si_vide)
   local l_radiateurs = json.decode(tostring(fibaro:getGlobal("l_radiateurs"))) 
   for _,v in pairs(l_radiateurs) do
      if v['id'] == tostring(id) then
         return v;
      end
   end
   fibaro:debug('Création du radiateur car introuvable !')
   local un_r = {id = tostring(id), Etat = 0 , Position = position_si_vide} 
   return un_r;
end

function save_radiateur (id,radiateur)
      local l_radiateurs = json.decode(tostring(fibaro:getGlobal("l_radiateurs"))) 
          local cmp=1;
          for _,v in pairs(l_radiateurs) do
              if v['id'] == tostring(id) then
                  fibaro:debug('>found')
                  l_radiateurs[cmp] = radiateur
                  fibaro:debug('> ' .. l_radiateurs[cmp]['Position'])
                fibaro:setGlobal("l_radiateurs", tostring(json.encode(l_radiateurs)));
                  break;
              end
            cmp=cmp+1;
          end
  return;
end

 

--je declare les radiateur
local un_r = {id = "23", Etat = 11 , Position = "salon droite cheminée"} -- capitalization in "Message" may matter
l_radiateurs[1] = un_r
 
local un_r = {id = "73", Etat = 11 , Position = "salon gauche cheminée"} -- capitalization in "Message" may matter
l_radiateurs[2] = un_r

local un_r = {id = "54", Etat = 11 , Position = "salon côté escalier"} -- capitalization in "Message" may matter
l_radiateurs[3] = un_r

local un_r = {id = "80", Etat = 11 , Position = "chambre 3"} -- capitalization in "Message" may matter
l_radiateurs[4] = un_r

local un_r = {id = "88", Etat = 11 , Position = "chambre 2"} -- capitalization in "Message" may matter
l_radiateurs[5] = un_r

local un_r = {id = "95", Etat = 11 , Position = "chambre 1"} -- capitalization in "Message" may matter
l_radiateurs[5] = un_r

jsonString = json.encode(l_radiateurs)
 
-- après encodage variable de jsonString contient '{ "value2": null, "value1": 512 }'
fibaro:debug('encoding')
fibaro:debug(jsonString)
fibaro:debug(tostring(json.encode(l_radiateurs)))

fibaro:debug('saving > ' .. #l_radiateurs .. ' radiateurs !')
fibaro:setGlobal("l_radiateurs", tostring(json.encode(l_radiateurs)));

 

Dans mon exemple on voit que j'ai déclaré 5 radiateurs

 

Ensuite, pour mon module virtuel de radiateurs (présent en pj), pour chaque bouton 'etat' (genre Eco/Confort) j'ai le code suivant

local id_radiateur=23;    --<====Mettre l'ID du variateur de lumière correspondant au radiateur
local valeur='11';    --<====Mettre l'odre voulu , 0 , 11,21,31,41 ou 100, pas d'auter valeurs, pas de 1,2,3, 51,76, vous comprendrez pourquoi ensuite

function get_radiateur (id,position_si_vide)
  fibaro:debug(tostring(fibaro:getGlobal("l_radiateurs")))
  local l_radiateurs = json.decode(tostring(fibaro:getGlobal("l_radiateurs"))) 
  for _,v in pairs(l_radiateurs) do
    if v['id'] == tostring(id) then
      fibaro:debug('Radiateur trouvé')
      return v;
      end
   end
   fibaro:debug('Création du radiateur ' .. id .. ' car introuvable !')
   local un_r = {id = tostring(id), Etat = 0 , Position = position_si_vide} 
   return un_r;
end

function save_radiateur (id,radiateur)
   local l_radiateurs = json.decode(tostring(fibaro:getGlobal("l_radiateurs"))) 
   local cmp=1;
   for _,v in pairs(l_radiateurs) do
      if v['id'] == tostring(id) then
         fibaro:debug('>found')
         l_radiateurs[cmp] = radiateur
         fibaro:setGlobal("l_radiateurs", tostring(json.encode(l_radiateurs)));
         return;
      end
      cmp=cmp+1;
   end
  
  fibaro:debug('Création du radiateur ' .. id .. ' car introuvable !')
  l_radiateurs[#l_radiateurs + 1] = radiateur
  fibaro:setGlobal("l_radiateurs", tostring(json.encode(l_radiateurs)));
   return
end
  
  --je positionne le radiateur à l'état voulu
fibaro:call(id_radiateur, 'setValue', valeur)
-- je positionne le bon nom pour le titre
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.letat.value", "Hors Gel");
--j'enregistre dans la variable globale l'état du radiateur, comme cela s'il la communication s'est mal passé, le script de rattrapage rattrape le tout !
local radiateur=get_radiateur(id_radiateur,'salon droite cheminée');
radiateur['Etat']=valeur;
save_radiateur(id_radiateur,radiateur);
 

Et dans le main loop du module virtuel j'ai le code suivant

local id_radiateur=23

function get_radiateur (id,position_si_vide)
  fibaro:debug(tostring(fibaro:getGlobal("l_radiateurs")))
  local l_radiateurs = json.decode(tostring(fibaro:getGlobal("l_radiateurs"))) 
  for _,v in pairs(l_radiateurs) do
    if v['id'] == tostring(id) then
      fibaro:debug('Radiateur trouvé')
      return v;
      end
   end
   fibaro:debug('Création du radiateur ' .. id .. ' car introuvable !')
   local un_r = {id = tostring(id), Etat = 0 , Position = position_si_vide} 
   return un_r;
end

function save_radiateur (id,radiateur)
   local l_radiateurs = json.decode(tostring(fibaro:getGlobal("l_radiateurs"))) 
   local cmp=1;
   for _,v in pairs(l_radiateurs) do
      if v['id'] == tostring(id) then
         fibaro:debug('>found')
         l_radiateurs[cmp] = radiateur
         fibaro:setGlobal("l_radiateurs", tostring(json.encode(l_radiateurs)));
         return;
      end
      cmp=cmp+1;
   end
  
  fibaro:debug('Création du radiateur ' .. id .. ' car introuvable !')
  l_radiateurs[#l_radiateurs + 1] = radiateur
  fibaro:setGlobal("l_radiateurs", tostring(json.encode(l_radiateurs)));
   return
end

fibaro:debug('Go')
local radiateur=get_radiateur(id_radiateur,'');
local etat_r=radiateur['Etat'];
fibaro:debug('Go 2')
fibaro:debug('etat_r:' .. tostring(etat_r))

local id_icone="";
if tostring(etat_r) == "100" then --confort
   fibaro:debug('Confort')
   id_icone=tostring(fibaro:getGlobal("i_radiateur_c"));
  fibaro:call(fibaro:getSelfId(), "setProperty", "ui.letat.value", "Confort");
end
if tostring(etat_r) == "41" then --confort -1
   id_icone=tostring(fibaro:getGlobal("i_radiateur_cmu"));
  fibaro:call(fibaro:getSelfId(), "setProperty", "ui.letat.value", "Confort-1");
end
if tostring(etat_r) == "31" then --confort -2
   id_icone=tostring(fibaro:getGlobal("i_radiateur_cmd"));
  fibaro:call(fibaro:getSelfId(), "setProperty", "ui.letat.value", "Confort-2");
end
if tostring(etat_r) == "21" then --eco
   id_icone=tostring(fibaro:getGlobal("i_radiateur_eco"));
  fibaro:call(fibaro:getSelfId(), "setProperty", "ui.letat.value", "Eco");
end
if tostring(etat_r) == "11" then --hg
   id_icone=tostring(fibaro:getGlobal("i_radiateur_hg"));
  fibaro:call(fibaro:getSelfId(), "setProperty", "ui.letat.value", "Hors Gel");
end
if tostring(etat_r) == "0" then --arret
   id_icone=tostring(fibaro:getGlobal("i_radiateur_off"));
  fibaro:call(fibaro:getSelfId(), "setProperty", "ui.letat.value", "Arrêt");
end
fibaro:debug('Icone : '..id_icone)
   
--je met a jour l'icone
local id_v=fibaro:getSelfId();
fibaro:debug('id_v : '..id_v)
fibaro:call(id_v, "setProperty", "currentIcon", id_icone)

 

 

Pour finir - tous les contrôler en 1 clic

J'ai pu créer par exemple une scene pour mettre d'un coup tous mes radiateurs en mode Hors-Gel

Et on peut imaginer une autre scene, qui met en mode Confort de 7H à 9H puis Confort-2 , pour revenir à Confort à partir de 18H jusqu'à 23H.

--[[
%% properties
%% weather
%% events
%% globals
--]]


--Radiateurs HG
function get_radiateur (id,position_si_vide)
  fibaro:debug(tostring(fibaro:getGlobal("l_radiateurs")))
  local l_radiateurs = json.decode(tostring(fibaro:getGlobal("l_radiateurs"))) 
  for _,v in pairs(l_radiateurs) do
    if v['id'] == tostring(id) then
      fibaro:debug('Radiateur trouvé')
      return v;
      end
   end
   fibaro:debug('Création du radiateur ' .. id .. 'car introuvable !')
   local un_r = {id = id, Etat = 0 , Position = position_si_vide} 
   return un_r;
end

function save_radiateur (id,radiateur)
   local l_radiateurs = json.decode(tostring(fibaro:getGlobal("l_radiateurs"))) 
   local cmp=1;
   for _,v in pairs(l_radiateurs) do
      if v['id'] == tostring(id) then
         fibaro:debug('>found')
         l_radiateurs[cmp] = radiateur
         fibaro:setGlobal("l_radiateurs", tostring(json.encode(l_radiateurs)));
         return;
      end
      cmp=cmp+1;
   end
  
  fibaro:debug('Création du radiateur ' .. id .. 'car introuvable !')
  l_radiateurs[#l_radiateurs + 1] = radiateur
  fibaro:setGlobal("l_radiateurs", tostring(json.encode(l_radiateurs)));
   return
end


--je parcours les radiateurs de la var global
function main_function()
local l_radiateurs = json.decode(tostring(fibaro:getGlobal("l_radiateurs"))) 
  for _,v in pairs(l_radiateurs) do
      local valeur_constate = fibaro:getValue(v['id'], 'value')
  
  fibaro:debug(' ')
  fibaro:debug('Check Radiateur  : ' .. v['id'])
      fibaro:debug(v['id'] .. 'valeur_constate : ' .. valeur_constate)
    local valeur_ordonnee = 11;
    fibaro:debug(v['id'] .. 'valeur_ordonnee : ' .. valeur_ordonnee)
    if tostring(valeur_ordonnee) ~= tostring(valeur_constate) then
      fibaro:debug('Radiateur ordre a rectifier : ' .. v['id'])
       fibaro:call(v['id'], 'setValue', valeur_ordonnee)
       local radiateur=get_radiateur(v['id'],'salon droite cheminée');
       radiateur['Etat']=valeur_ordonnee;
       save_radiateur(v['id'],radiateur);
    api.post('/mobile/push', {["mobileDevices"]={4}, ["message"]='Etat rattrapé !', ["title"]=v['Position'], ["category"]='YES_NO', ["data"]={["sceneId"]=0}});
      else
      fibaro:debug('Radiateur ordre OK')
  end
   end
end

 main_function()
fibaro:debug('Fin')
 

 Et voila, j'arrive à la fin de mon post, vous êtes encore la ? C'est la première fois que je publie un truc , soyez indulgent s'il vous plait. Et n'hésitez pas à me faire des retours .

 

Je terminerais en disant que j'ai un regret avec la HC2

=> Pourquoi diable on ne peut pas créer de fonction partagée, je suis obligé de dupliquer mes 2 fonctions partout c'est horrible !!!!!

 

cdt

 

Radiateur_Droite_Ch.vfib

confort.png

confort_md.png

confort_mu.png

eco.png

hg.png

inc.png

off.png

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci @frixo pour ton retour détaillé.

 

J'ai fusionné ton message avec le topic unique du module dans cette section, et ajouté un lien vers ton tuto en première page.

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,
Super tuto:-)
Et oui les Qubino sont un peu réfractaires :-)

Envoyé de mon BND-L21 en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

Moi je passe l'interface en anglais et je décoche tout pour pas les inclure en sécurisé notamment. Et j'ai toujours 100% de réussite en les incluant à côté de la box avant de les poser à leur place.

Pour le code, je vois ça plus simple moi en mettant un VD par radiateur qui après est commandé par une scène et j'ai toujours l'état du radiateur même après un reboot de la box ou une perte de com grâce au main loop du VD... mais bon après chacun code comme il le sent et comme ça lui semble le plus facile.

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour

 

merci pour vos retours.C'est super sympas !

je me rend compte que j'ai oublié un script ! 

 

J'ai une scene qui tourne toutes les heures pour s'assurer que l'odre donné à un radiateur est bien l'ordre appliqué, sinon on relance l'ordre.

Oui il m'est arrivé (rarement mais arrivé) que je donne un ordre et que ca passe pas, va savoir. Du coup , grace a ce script ca passe !

--[[
%% autostart
%% properties
%% weather
%% events
%% globals
--]]

local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();

function get_radiateur (id,position_si_vide)
  fibaro:debug(tostring(fibaro:getGlobal("l_radiateurs")))
  local l_radiateurs = json.decode(tostring(fibaro:getGlobal("l_radiateurs"))) 
  for _,v in pairs(l_radiateurs) do
    if v['id'] == tostring(id) then
      fibaro:debug('Radiateur trouvé')
      return v;
      end
   end
   fibaro:debug('Création du radiateur ' .. id .. 'car introuvable !')
   local un_r = {id = id, Etat = 0 , Position = position_si_vide} 
   return un_r;
end

function save_radiateur (id,radiateur)
   local l_radiateurs = json.decode(tostring(fibaro:getGlobal("l_radiateurs"))) 
   local cmp=1;
   for _,v in pairs(l_radiateurs) do
      if v['id'] == tostring(id) then
         fibaro:debug('>found')
         l_radiateurs[cmp] = radiateur
         fibaro:setGlobal("l_radiateurs", tostring(json.encode(l_radiateurs)));
         return;
      end
      cmp=cmp+1;
   end
  
  fibaro:debug('Création du radiateur ' .. id .. 'car introuvable !')
  l_radiateurs[#l_radiateurs + 1] = radiateur
  fibaro:setGlobal("l_radiateurs", tostring(json.encode(l_radiateurs)));
   return
end


--je parcours les radiateurs de la var global
function main_function()
    
  
   local l_radiateurs = json.decode(tostring(fibaro:getGlobal("l_radiateurs"))) 
  for _,v in pairs(l_radiateurs) do
      local valeur_constate = fibaro:getValue(v['id'], 'value')
  
  fibaro:debug(' ')
  fibaro:debug('Check Radiateur  : ' .. v['id'])
      fibaro:debug(v['id'] .. 'valeur_constate : ' .. valeur_constate)
    local valeur_ordonnee = v['Etat'];
    fibaro:debug(v['id'] .. 'valeur_ordonnee : ' .. valeur_ordonnee)
    
    
    
    --si les valeurs diffèrent, je rattrape
    if tostring(valeur_ordonnee) ~= tostring(valeur_constate) then
      fibaro:debug('Radiateur ordre a rectifier : ' .. v['id'])
       fibaro:call(v['id'], 'setValue', valeur_ordonnee)
       local radiateur=get_radiateur(v['id'],'salon droite cheminée');
       radiateur['Etat']=valeur_ordonnee;
       save_radiateur(v['id'],radiateur);
    --api.post('/mobile/push', {["mobileDevices"]={4}, ["message"]='Etat rattrapé !' .. tostring(valeur_ordonnee) .. ' <= ' .. tostring(valeur_constate), ["title"]=v['Position'], ["category"]='YES_NO', ["data"]={["sceneId"]=0}});
      else
      fibaro:debug('Radiateur ordre OK')
  end
   end
end

function tempFunc()
   fibaro:debug('tempFunc 0')
  local currentDate = os.date("*t");
  if ( (math.floor(os.time()/60)-math.floor(1528820040/60))%60 == 0 )
  then
      main_function()
  end
  
  setTimeout(tempFunc, 60*1000)
end

local sourceTrigger = fibaro:getSourceTrigger();
if (sourceTrigger["type"] == "autostart") then
  fibaro:debug('tempFunc')
    tempFunc()
  end
fibaro:debug('Fin')
 

 

Partager ce message


Lien à poster
Partager sur d’autres sites
Le 23/06/2018 à 22:30, BenjyNet a dit :

Moi je passe l'interface en anglais et je décoche tout pour pas les inclure en sécurisé notamment. Et j'ai toujours 100% de réussite en les incluant à côté de la box avant de les poser à leur place.

Pour le code, je vois ça plus simple moi en mettant un VD par radiateur qui après est commandé par une scène et j'ai toujours l'état du radiateur même après un reboot de la box ou une perte de com grâce au main loop du VD... mais bon après chacun code comme il le sent et comme ça lui semble le plus facile.

Salut

 

oui , via le main loop j'ai effectivement l'état, je fais un get, et avec l'état je met à jour le label ETAT et l'IMAGE.

 

Si j'ai fait le tableau, c'est principalement pour pouvoir tous les commander via d'autre scene , sans a avoir a saisir leur ID

 

cdt

Partager ce message


Lien à poster
Partager sur d’autres sites

×