Aller au contenu

Lionel57

Membres confirmés
  • Compteur de contenus

    338
  • Inscription

  • Dernière visite

  • Jours gagnés

    1

Tout ce qui a été posté par Lionel57

  1. Quant àla prochaine évolution de la freebox, Xav, il a dit, pas d'Androïd chez lui. Sur le papier, on pourrait dire dommage, mais je reste confiant, depuis le début de Free, il a toujours révolutionné le marché (internet en RTC sans abonnement, c'était lui, la première Box, c'était lui, la révolution, en son temps, elle a un peu fait mal aux autres opérateurs, forcément, il va nous pondre un truc de fou
  2. Je suis également chez Free, aucun problème pour le multiposte (tant que le débit suit), par contre, limité à2 postes. J'ai 3 players (j'en ai récupéré un de mon commerce, n'ayant pas la télé dans la boutique). Mais vu avec Free, maximum 2 players en simultanée. Et pour ceux, qui comme moi ont des problèmes avec le CPL, j'ai acheté les Liveplug Wifi chez Orange, ça fonctionne àla perfection sur la Freebox, sans nuire au Wifi de la box (un réseau Wifi àpart pour la télé, sans que ça brouille ou nuise au débit du wifi du boitier Free)
  3. Pour la défense de Azer31, le message d'alerte concernant les plugins n'étaient pas mis en avant comme lors du passage àla 4.021, mais c'est précisé, donc mieux que la beta d'avant. De toute façon, ça sera probablement le cas jusqu'àla version stable (le pourquoi, mystère, faut espérer que ça ne sera pas une habitude pour quand on devra on devra gérer les galères du passage au 5.xxx)
  4. @ Yohan, j'admire ta bravoure...
  5. Apparemment, pas de correction de l'api du panneau de chauffage (methode PUT qui provoque un plantage) et pas d'intégration des modules Qubino. snif !!! (une sonde branché sur le secteur, moi, je dis, c'est un plus pour optimiser le chauffage) Bon, qui se lance ? Trop tard pour moi pour tenter le coup, je ne me vois pas faire un recovery à cette heure-ci et encore moins me priver de chauffage avec les températures actuelles.
  6. Lionel57

    Scéne Vacances

    Bonjour, Il suffit de créer une variable globale prédéfinie "Vacances" avec les valeurs oui/non et de tester cette variable dans chaque scène
  7. Comme toi, j'avais tenté avec la nouvelle adresse, mais comme toi, un plantage, alors peut être qu'il faut attendre la 4.022
  8. Bonjour, Quelqu'un serait me dire pourquoi le code suivant me retourne systématiquement une erreur 400 (l'ID de la zone de chauffage est correct : si je lance "http://192.168.1.20/api/panels/heating?id=177" dans mon navigateur, j'obtiens bien le programme complet de la zone) ZoneId=177 local HC2 = Net.FHttp("192.168.1.20", 80) HC2:setBasicAuthentication("admin", "xxxxxxxx") result2 = '{"id":' .. ZoneId .. ',"properties":{"vacationTemperature": "10"}}' result,status,errorCode = HC2:PUT("/api/panels/heating?id=" .. ZoneId, result2); fibaro:debug(result .. " / " .. status .. " / " .. errorCode .. " -> " .. ZoneId) J'obtiens le résultat : [DEBUG] 10:55:44: {"type":"ERROR","reason":"id","message":"no id"} / 400 / 0 -> 177
  9. Pour qu'il y ait autant de cas spécifiques différents, je ne serais pas vraiment surpris qu'ils ne maîtrisent le multithreading, spécificité de la version 4, si je ne me trompe pas. Pour les non-initiés, en multithreading, le code ne s'exécute pas de façon linéaire, mais en process parallèles. Si le multithreading permet un gain de performence considérable, le débugger, c'est parfois à s'arracher les cheveux. Alors que nous développons en LUA, un langage supposé en une seule thread, j'ai pu lire ici qu'une boucle sur un fibaro:debug(getValue(id, "properties")) n'affiche pas forcément les infos dans l'ordre qu'on pourrait supposer (de mémoire, c'était au sujet des résultats bizarres de lecture de sondes de Nico). Appliquons ce problème lors d'une mise à jour, avec, semble t-il, de grands changements dans l'architecture de la base, on peut imaginer facilement qu'il y a un risque important d'arriver à une base corrompu (violation de clés, pertes d'intégrités entre les tables...). Et là , c'est la cata... Et comme le moindre toussotement du processeur peut changer le résultat final... à‡a fait presque autant de cas qu'il y a d'utilisateurs
  10. Lionel57

    Panne Après Reboot

    J'avais le même souci en 4.017, mais plus en 4.018, c'était résolu (enfin chez moi). En 4.020, j'avoue que je n'ai pas testé et que je ne suis pas motivé pour planter ma box si effectivement le bug est réapparu...
  11. Lionel57

    Jour Chômé

    Heu, j'habite en moselle, nous sommes de heureux bénéficiaire de 2 jours fériés supplémentaire par rapport au reste de la France (avec les alsaciens). Franchement, le code est très très simple, très facile à adapter, ça peut être très formateur de prendre du temps pour essayer de l'adapter. Je rejoins Steven, essayez, si ça ne marche pas, publiez votre truc, avec plaisir vous obtiendrez de l'aide, mais faut essayer un peu, non ? Bon, j'espère que ce n'est pas déplacé comme remarque
  12. J'ai trouvé que l'interface de gestion de chauffage est bien pensé, mais que la façon de le géré était un peu tortueux, voir complètement abstraite (surtout que j'ai 2 chaudières).
  13. {"type":"ERROR","reason":"id","message":"no id"} / 400 / 0 ==> tel est le message d'erreur que j'obtiens quand je fais PUT
  14. Je travaille aussi sur le panneau de chauffage, peut être un bug de la 4.020, mais je persiste, je ne suis pas infaillible non plus
  15. Quelqu'un a essayé la méthode PUT, un Json.encode qui semble correct, pas de messages d'erreurs, mais pas de mise àjour non plus...
  16. Je vais tout réécrire en utilisant JSON, je pense que le code sera plus clair.
  17. En faite, je vais supprimer l'association de mon srt321 avec mes FGS211 et faire en sorte que quand je modifie la consigne sur celui ci ou sur une vanne Danfoss, ça devienne une consigne manuelle pour 1 heure pour la zone. (pour ça, j'avais besoin de JSON et celui ci est de retour...) Dans ma configuration, je règle la température par pièce (je ne chauffe pas la chambre la journée par exemple) donc zone ou pièce, pour moi, c'est pareil (je ne me soucis pas du paramétrage des pièces pour une zone dans le tableau de chauffage). Si plusieurs pièces sont concernées pour une zone, il suffit de rajouter autant de Z_xxx (xxx étant l'ID d'une vanne) que nécessaire dans la variable prédéfinie de la zone
  18. L’idée, utiliser le panneau de chauffage pour sa souplesse pour la gestion de mes chaudières, sans en subir les conséquences. Toutes les consignes sont utilisées normalement (consignes courantes, consignes vacances et consignes provisoires) pour toutes zones existante. Pour chaque zone, un pré-requis, créer une variable prédéfinie appelé id_Chauf_pièce, où pièce correspond au nom de la zone de consigne(ex : pour une zone définie dans le panneau de chauffage nommée « Salon », on crée une variable prédéfinie appellée « id_Chauf_Salon »). Pour chaque variable, on crée : - une valeur D_xxx où xxx est l’ID du module qui déclenche la chaudière (pour ma part, un FGS211 relié à chaque chaudière) - une valeur T_xxx où xxx est l’ID du module qui renvoie la température courante de la zone - une ou plusieurs valeur Z_xxx où xxx correspond aux ID des modules qui contrôlent les radiateurs ou SRT321 (vannes Danfoss dans mon cas). En cas d’absence d’un de ces modules dans une zone, on met Z_000 On crée une variable prédéfinie : - Present (Oui/Non) - Fenetre_ouverte (Oui/Non) - JourChome (Oui/ Non) On crée un module virtuel avec un bouton nommé « rafraichir » et on colle le code LUA suivant : Adresse_IP="192.168.1.xxx"; Utilisateur="admin" MotDePasse="12345678"; function EnumZone() -- Relève l'ensemble des zones du panneau de chauffage local a, b, c = 0; local p = { }; local i = 0; local HC2= Net.FHttp(Adresse_IP); HC2:setBasicAuthentication(Utilisateur, MotDePasse); local result, status, errorCode = HC2:GET("/api/panels/heating"); a, b = string.find(result, "name", 1); while a do b, c = string.find(result, ",", a + 6); i = i + 1; table.insert(p, string.sub(result, a + 7, b -2)); a = b + 1; a, b = string.find(result, "name", a); end; return p; end function IdZone(piece) -- Récupère l'ID d'une zone local a, b, c = 0; local HC2= Net.FHttp(Adresse_IP); HC2:setBasicAuthentication(Utilisateur, MotDePasse); local result, status, errorCode = HC2:GET("/api/panels/heating"); a, b = string.find(result, piece, 1); b, c = string.find(result, "id", a - 18); return string.sub(result, b + 4, a - 10); end function TempActuelle(piece) -- Relève la température actuelle d'une zone local a, b, c, d = 0; local T = ""; local HC2= Net.FHttp(Adresse_IP); HC2:setBasicAuthentication(Utilisateur, MotDePasse); local result, status, errorCode = HC2:GET("/api/globalVariables"); a, b = string.find(result, "id_Chauf_" .. piece, 1); b, c = string.find(result, "T_", a); c, d = string.find(result, "\"", ; T = string.sub(result, b + 2, c - 1); return fibaro:getValue(T, "value"); end; function TempMini(Id) -- Recherche la température mini d'une zone, pour la définir comme température de consigne en cas d'absence local c, d, e, i =0; local t=""; local TM = "99"; local HC2= Net.FHttp(Adresse_IP); HC2:setBasicAuthentication(Utilisateur, MotDePasse); local result, status, errorCode = HC2:GET("/api/panels/heating?id=" .. Id); for i = 1, 4 do c, d = string.find(result, "temperature", e); e, d = string.find(result, "}", c); t = string.sub(result, c + 13, e-1); if tonumber(t) < tonumber(TM) then TM = t end; end; return TM; end; function TempProv(Id) local a, b, c, d =0; local TP, TM = ""; local HC2= Net.FHttp(Adresse_IP); HC2:setBasicAuthentication(Utilisateur, MotDePasse); local result, status, errorCode = HC2:GET("/api/panels/heating"); a, b = string.find(result, "id\":" .. Id, 1); b, c = string.find(result, "handTemperature", a); c, d = string.find(result, ",", ; TP = string.sub(result, b+17, c-1); a, b = string.find(result, "handTimestamp", c); b, c = string.find(result, ",", a); TM = string.sub(result, a+15, b-1); if tonumber(TM) < os.time() then TP = "0" end; return TP; end; function TempVac(Id) local a, b, c, d =0; local TP, TM = ""; local HC2= Net.FHttp(Adresse_IP); HC2:setBasicAuthentication(Utilisateur, MotDePasse); local result, status, errorCode = HC2:GET("/api/panels/heating"); a, b = string.find(result, "id\":" .. Id, 1); b, c = string.find(result, "vacationTemperature", a); c, d = string.find(result, "}", ; TP = string.sub(result, b+21, c-1); return TP; end; function TempConsigne(Id) -- Défini la température de consigne pour une zone local T = ""; if fibaro:getGlobalValue("Present") == "Oui" then T = TempProv(Id); if T == "0" then local a, b, c, d = 0; local h, heureCourante, e, programme = ""; local jour = ""; local currentDate = os.date("*t"); local HC2= Net.FHttp(Adresse_IP); HC2:setBasicAuthentication(Utilisateur, MotDePasse); local result, status, errorCode = HC2:GET("/api/panels/heating?id=" .. Id); if fibaro:getGlobalValue("JourChome") == "Oui" then jour = "sunday"; else jour = string.lower(os.date("%A")); end; a, b = string.find(result, jour, 1); b, c = string.find(result, "}}", a); programme = string.sub(result, a-1, ; b = 1; if tonumber(currentDate.hour)<10 then e = "0" else e = "" end; heureCourante = e .. currentDate.hour if tonumber(currentDate.min)<10 then e = "0" else e = "" end; heureCourante = heureCourante .. ":" .. e .. currentDate.min; for a = 1, 4 do h = ""; b, c = string.find(programme, "hour", b+1); c, d = string.find(programme, ",", ; if tonumber(string.sub(programme, b+6, c-1))<10 then e = "0" else e = "" end; h = e .. string.sub(programme, b+6, c-1); b, c = string.find(programme, "minute", ; c, d = string.find(programme, ",", ; if tonumber(string.sub(programme, b+8, c-1))<10 then e = "0" else e = "" end; h = h .. ":" .. e .. string.sub(programme, b+8, c-1); if h < heureCourante then c, d = string.find(programme, "temperature", ; e, d = string.find(programme, "}", ; T = string.sub(programme, c + 13, e-1); end; end; if T == "0" then jour = string.lower(os.date("%A", os.time()- 24 * 60 * 60)); a, b = string.find(result, jour, 1); b, c = string.find(result, "}}", a); programme = string.sub(result, a-1, ; b = 1; a, b = string.find(programme, "night", 1) ; a,b = string.find(programme, "temperature", a); e, d = string.find(programme, "}", a); T = string.sub(programme, a + 13, e-1); end; end; else T = TempVac(Id); if T == "0" then T = TempMini(Id) end; end return T; end function EnumDeclencheur() -- Enumère les modules qui enclenchent les chaudières ou radiateurs électriques d'une zone (FGS211) local a, b = 0; local Declencheur = ""; local Exist = false; local i, j = 0; local D = { }; local HC2= Net.FHttp(Adresse_IP); HC2:setBasicAuthentication(Utilisateur, MotDePasse); local result, status, errorCode = HC2:GET("/api/globalVariables"); a, b = string.find(result, "D_", 1); while a do i = i + 1 ; b, c = string.find(result, "\"", a); Declencheur = string.sub(result, a + 2, b - 1); j = 1; Exist = false; while D[j] do if D[j] == Declencheur then Exist = true end; j = j + 1; end if not Exist then table.insert(D, Declencheur) end; a, b = string.find(result, "D_", a + 2); end; return D; end function DeclencheurZone(piece) -- Recherche l'ID du déclencheur de chaudière pour une zone local a, b, c = 0; local HC2= Net.FHttp(Adresse_IP); HC2:setBasicAuthentication(Utilisateur, MotDePasse); local result, status, errorCode = HC2:GET("/api/globalVariables"); a, b = string.find(result,"id_Chauf_" .. piece, 1); a, b = string.find(result, "D_", a); b, c = string.find(result, "\"", a); return string.sub(result, a + 2, b - 1); end function EnumSourceZ(piece) -- Enumère toutes les vannes ou thermostat d'une zone local a, b, c, d = 0; local Cons = { }; local HC2= Net.FHttp(Adresse_IP); HC2:setBasicAuthentication(Utilisateur, MotDePasse); local result, status, errorCode = HC2:GET("/api/globalVariables"); a, b = string.find(result, "id_Chauf_" .. piece, 1); a, b = string.find(result, "Z_", a); while a do b, c = string.find(result, "\"", a); table.insert(Cons, string.sub(result, a + 2, b - 1)); d = a; a, b = string.find(result, "Z_", a + 2); if a then b, c = string.find(result, "id_Chauf_", d); if b then if b < a then a = nil end; end; end; end; return Cons; end; function Inertie(piece, TempCons, TempAct) return "0"; end; function DecInertie(piece, TempCons, TempAct) end; function DefInertie(piece, TempCons, TempAct) end local declencheur = EnumDeclencheur(); if fibaro:getGlobalValue("Fenetre_ouverte") == "Non" then local i,j,k = 1; local l = 0; local piece = EnumZone(); local besoin = {}; while piece[i] do -- Pour chaque zone du panneau de chauffage j = 1; EnumSource = EnumSourceZ(piece[i]); while EnumSource[j] do if EnumSource[j] ~= "000" then fibaro:call(EnumSource[j], "setTargetLevel", TempConsigne(IdZone(piece[i]))); -- Défini les consignes de température pour les vannes Danfoss ou thermostat pour chaque zone (piece[i]) end; j = j + 1; end; l = 0; k = 1; while declencheur[k] do if declencheur[k] == DeclencheurZone(piece[i]) then l = k end; -- Repère le l'ID du déclencheur de chauffage pour la zone étudiée k = k + 1; end; -- besoin{} établi si, pour un déclencheur, un besoin de chauffage est nécessaire -> Si température actuelle inférieur à température consigne - 0.7, on déclenche un besoin (envoi de "turnOn" au déclencheur). -- Si besoin=nil, si toutes les zones attachées ont atteint la température, on coupe le besoin (envoi de "turnOff" sur le déclencheur), sinon, on laisse faire if tonumber(TempActuelle(piece[i])) < (tonumber(TempConsigne(IdZone(piece[i]))) - 0.7) then besoin[l] = "turnOn"; DecInertie(IdZone(piece[i]), TempConsigne(IdZone(piece[i])), TempActuelle(piece[i])) else if not besoin[l] and tonumber(TempActuelle(piece[i])) < tonumber(TempConsigne(IdZone(piece[i]))) - tonumber(Inertie(IdZone(piece[i]), tonumber(TempConsigne(IdZone(piece[i]))), TempActuelle(piece[i]))) then besoin[l] = "standby"; --DefInertie(piece[i], TempConsigne(IdZone(piece[i])), TempActuelle(piece[i])) else DefInertie(IdZone(piece[i]), TempConsigne(IdZone(piece[i])), TempActuelle(piece[i])) if not besoin[l] then besoin[l] = "turnOff"; end; end; end; --fibaro:debug(tostring(tonumber(TempConsigne(IdZone(piece[i]))) - tonumber(Inertie(piece[i], tonumber(TempConsigne(IdZone(piece[i]))))))); i = i + 1; end; i = 1; while declencheur[i] do if besoin[i] ~= "standby" then fibaro:call(declencheur[i], besoin[i]); -- Envoi la consigne au déclencheur end; i = i + 1; end; else local k = 1; while declencheur[k] do fibaro:call(declencheur[k], "turnOff"); -- Si Fenetre_ouverte alors tout déclencheur à "turnOff" k = k + 1; end; end; On adaptera les 3 variables (Adresse_IP, Utilisateur, MotDePasse) Les fonctions Inertie, DecInertie et DefInertie ne sont pas partagées pour le moment, en cours de développement... Petite précision, ce code a été écrit en 4.018, alors que JSON ne fonctionnait pas. Enfin, on créera une scène par bloc qui appuiera toutes les minutes sur le bouton "Rafraichir" du module virtuel en omettant pas de cocher la case "Lancer au démarrage de la HC2" Je crois que je n'ai rien oublié
  19. Pour le panneau de chauffage, je trouve que la présentation est très bien pensée, mais pour l'efficacité, c'est à revoir. J'ai pondu un truc qui traine sur ce forum, qui fonctionnement, basé sur le panneau de chauffage, mais qui gère les déclencheurs à travers LUA dans un module virtuel. à‡a fonctionne nickel, mon seul soucis, c'est le retard d'information des relevés de température de module sur piles.
  20. Mais cool, tu as répondu àun autre post... J'envisage de mettre en parallèle mon HC2 avec mon nas, pour tous mes modules (sur le nas, pour un nom, une pièce, une id, id mise en synchro avec le HC2, juste histoire de ne pas revoir en détail tous mes virtual device en cas de changement d'ID) (récupérer l'id par un truc en php)
  21. "batteryLevel":"100","batteryLowNotification":"true"
  22. Ben en utilisant le HC2 toolkit, je n'ai aucune donnée concernant le "batt. level". Mais pour une fois que j'ai une pile qui va jusqu'à2024, ça serait ballot... En tout cas, pour biper, il trouve de l'énergie le bougre
  23. A signaler, j'en ai 3, ce problème existe que pour 1 des 3, les autres sont sages
  24. j'ai eu le problème àpartir de la 4.018, apparemment, toujours persistant en 4.020 (après exclusion, inclusion), en attendant, j'ai trouvé une solution, enlever la pile, mais du coup, beaucoup moins utile... Mais ce bip, grrrr !!!
  25. peut être que c'est les bug des betas qui a fait trop fumer mon cerveau et que mon smoke sensor détecte le problème...
×
×
  • Créer...