-
Compteur de contenus
106 -
Inscription
-
Dernière visite
Messages posté(e)s par bencol
-
-
=> publication d'une version 2.0 plus efficace, plus simple et avec un meilleur debug + commentaires en français
-
Pour ceux qui n'ont rien dans le debug, vous n'auriez pas oublié d'activer le module en pressant sur le bouton ON ?
-
@971jmd
tu dois avoir au moins la ligne "START REPLICATOR"
Ensuite si tu n'as aucune ligne comme DOMADIAL ci-dessus, c'est que tu n'as aucun device identifié comme Lampe. Dans ce cas reprends mon premier post, j'indique comment les configurer.
-
@Domodial :
pb1 : il ne faut pas mettre cette ligne dans le mainloop mais dans le script des boutons.
pb2 : le module doit forcément exister car ta fibaro le voit comme un module de type lampe. Vérifie avec HC2Toolkit si il existe (peut d'ailleurs caché). Sinon même méthode qu'avec Yannick.
vos box ont un comportement bizarre ou alors il faudrait faire le ménage dans les modules fantômes.
-
Il n'y a pas d'impact, je teste simplement si le device est allumé avant de l'éteindre. Dans tous les cas, il va l'éteindre.
Pas contre, il n'y a pas de raison pour mettre le moteur zwave en type lampe. Il suffit de le faire sur le device uniquement.
-
Bonjour @Yannick
Il y a un pb sur ton device n°258. A quoi correspond t'il ?
Je pense qu'il ne supporte pas la fonction fibaro:getValue(device, "value").
Peux tu essayer en supprimant la condition après le "and" ?
-
@kionoranga : pas de modif du code àpart des debugs
@Allan2b : si le module ne sait pas remonter de conso, il ne sera pas pris en compte. Mais Fibaro propose de saisir une conso fixe et il la prend en compte dans ce cas.
-
Version publiée avec un mode debug plus poussé si besoin.
-
N'hésitez pas àme faire des retours pour savoir si cela marche correctement chez vous.
-
@971jmd : peux tu me préciser àquoi correspond la ligne 83 chez toi. Si elle correspond àla condition State==1, cela signifie que State est null. Je n'ai pas réussi àreproduire ce cas de mon coté. Remonte le code en mettant un debug sur les variables State1, State2 et State3 pour voir.
-
=> publication d'une version 2.0 plus efficace, plus simple et avec un meilleur debug + commentaires en français
Le principe de ce bout de code est le suivant : simuler une présence dans votre logement en s'appuyant sur votre mode de vie des mêmes journées les précédentes semaines. Le programme analyse le comportement des lumières des 2 dernières semaines (à partir de l'historique de consommation) et simule par réplication une vraie vie (la vôtre !) dans votre logement.
3 prérequis :
- il est nécessaire de vérifier que les modules de type lampe sont bien déclarés comme lampe. Pour cela il faut aller dans la configuration avancée des modules concernées et sélectionner dans appareil commandé : Eclairage ou Lampe de chevet ou Lampe de jardin,....
- ajouter pour les modules qui le permettent le suivi de la consommation électrique (attention, il faudra attendre au moins 2-3 semaines que cela soit efficace)
- créer une variable globale "Simu_presence" avec comme possibilité ON ou OFF
Le code ci-dessous peut être placé dans la boucle principale dans un module virtuel. En pièce jointe le module à importer.
----------------------- -- fonction d'arrondi -- ------------------------ function math.round(num, idp) return tonumber(string.format("%."..idp.."f", num )); end -------------------- -- Debug function -- -------------------- function Debug(message, color) if (color == nil) then color = "white";end; fibaro:debug(string.format("<font color=" .. color .. ">" .. message .. "</font>")); return; end ------------------------------------------------------------------------------------------------------------------ -- Fonction de récupération de l'historique de l'allumage d'une lampe -- ------------------------------------------------------------------------------------------------------------------ local function CollecteStatus(DureeHistorique, Device) local TimeStart = DureeHistorique + 300; -- à la date de l'historique plus 5 min local TimeEnd = DureeHistorique - 300; -- à la date de l'historique moins 5 min -- init tableaux et variables local TabMeasure = {}; -- tableau de mesures timestamp/activité local HC2 = Net.FHttp("127.0.0.1",11111); if (Device ~= nil) then Response, status, errorCode = HC2:GET("/api/energy/now-" .. TimeStart .. "/now-" .. TimeEnd .. "/summary-graph/devices/power/" .. Device); end; if (tonumber(errorCode)==0 and tonumber(status)==200) then TabMeasure = json.decode(Response); -- chargement des données dans une table Debug("Nb mesures : " .. table.getn(TabMeasure) .. " (historique il y a " .. DureeHistorique/86400 .. " jours)","yellow"); local State = 0; -- scan la période concernée les semaines précédente for i = 1, table.getn(TabMeasure) do local Heure = tonumber(TabMeasure[i][1])/1000; -- collecte de l'heure et conversion des millisecondes en secondes if (tonumber(TabMeasure[i][2]) > 0) -- il y a une activité then State = 1; end Debug("Mesure " .. i .. " : " .. os.date("%A %d/%m/%y %H:%M",Heure) .. " => " .. State); end return State; -- retour de la fonction else Debug("fail : ".. status .. " - error : ".. errorCode); end end -- Scan de tous les devices si alarme active if (fibaro:getGlobalValue("Simu_presence") == "ON") then Debug("START REPLICATOR...."); fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", 1062); fibaro:log('Simulation active'); Debug("Alarme active => Scan...."); for device=1, 1000, 1 do if (fibaro:getValue(device, "isLight") == '1') -- si type lampe then -- lancement de la fonction de collecte des informations d'allumage ou d'extinction Debug("***** Collecte de la consommation électrique pour la lampe " .. device .. " " .. " *****", "yellow"); local StateSem1 = CollecteStatus(7 * 86400, device); -- appel de la fonction => 1 semaine avant local StateSem2 = CollecteStatus(14 * 86400, device); -- appel de la fonction => 2 semaines avant -- si lampe active les dernières semaines et lampe actuellement éteinte => allumage if (StateSem1 == 1 or StateSem2 == 1) then if (tonumber(fibaro:getValue(device, "value")) == 0) -- la lampe est éteinte then fibaro:call(device, "turnOn"); -- allumage fibaro:call(device, "setValue", "50"); Debug("Allumage Lampe : " .. device, "green"); else Debug("Pas d'action, lampe : " .. device .. " déjà allumée", "green"); end end -- si lampe inactive les dernières semaines et lampe actuellement allumée => extinction if (StateSem1 == 0 and StateSem2 == 0) then if (tonumber(fibaro:getValue(device, "value")) > 0) -- si le device est allumé then fibaro:call(device, "turnOff"); -- extinction Debug("Extinction Lampe : " .. device, "red"); else Debug("Pas d'action, lampe : " .. device .. " déjà éteinte","red"); end end end end else fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", 1061); fibaro:log('Simulation inactive'); Debug('Simulation inactive'); end fibaro:sleep(120000); -- temporise 2 minutes
- 10
-
petite idée en passant pour ces modules pas cher...les transformer en contacteur en utilisant le détecteur d'ouverture du capot et la propriété tamper.
J'ai essayé et cela fonctionne bien
Toujours moins cher que les détecteurs FGK 101 à50€
- 1
-
Merci pour l'info, commandé mercredi, et reçu ce soir...
6 de plus.
-
Avec un microcontroleur Wifi ESP8266 (4 €) + une sonde DHT11 (1 €).
Vous trouverez plein de tutos sur internet sur ce sujet. Cela permet de faire une sonde qui communique en Wifi (autonomie sur pile d'environ 2 ans en mode deep sleep).
Je me suis monté qqs sondes qui émettent toutes les 2 minutes températures et humidité à un serveur HTTP doté d'une base MySQL puis s'endort 2 minutes quasi totalement pour économiser les piles.
De son coté, la HC2 interroge régulièrement la base MySQL pour exploiter les mesures dans des scènes
Et franchement c'est bluffant de voir à quel point ces composants aussi petits peuvent faire !
Cela fonctionne aussi pour des détecteurs de porte, il suffit d'acheter des capteurs d'entrée de gamme à qqs euros pour récupérer le capteur magnétique, le connecter à un ESP8266 et le tour est joué.
Cerise sur le gateau, on peut le programmer en LUA. C'est pas beau ça !
-
Hello
Maj faite. Gain de 20% sur la RAM également.
Pas d'anomalie àce stade
-
Pour les scenes qui ne fonctionnent pas, il faut supprimer les espaces et commentaires placés devant la déclaration des properties et variables globales.
-- commentaires scènes xxxx -- .... --[[ %% properties %% globals --]]
doit devenir
--[[ %% properties %% globals --]]
De mon coté, les scènes avec trigger refonctionnent avec cette modif.
@Chlorure
@banzai861
-
essaye ma recommandation un peu plus haut en supprimant les espaces.
-
en ce qui me concerne, après avoir corrigé toutes les scènes avec trigger, plus de pb sur cette version.
Mais ca me gonfle qu'ils n'aient pas encore intégré les templates pour les Dimmer BeNext et les capteurs Philio.
-
non pas pour moi. Reboot et réessaye.
-
Pour les dysfonctionnements des scènes avec trigger je crois que j'ai trouvé le bug.
Supprimer tout espace et tout commentaire avant la séquence :
--[[ %% properties %% globals --]]
-
c'était des 3"1/2...
-
Bon c'est quand même dingue, je passe 2 jours à essayer de trouver et c'est au moment où j'appelle à l'aide que la solution me passe brutalement par la tête.
La solution c'est :
TabJson = "[[1427560251000,18.70],[1427560560000,18.60],[1427561467000,18.70],[1427562051000,18.70]]" fibaro:debug(TabJson ); TabMesure = json.decode(TabJson ); fibaro:debug(TabMesure[4][1]); -- 4ème groupe 1ère valeur fibaro:debug(TabMesure[4][2]); -- 4ème groupe 2ème valeur fibaro:debug(table.getn(TabMesure)); -- lg du tableau
-
Bonjour à tous
j'ai du JSON multidimensionnel sous la forme
[[1427560251000,18.70],[1427560560000,18.60],[1427561467000,18.70],[1427562051000,18.70]]
Savez vous comment le parcourir ou bien comment le charger directement dans un tableau 2D (ou matrice)
j'ai essayé avec json.decode mais cela ne fonctionne pas?
-
MIgration faite de mon coté. Pas de pb.
Réplicateur De Présence
dans Alarmes
Posté(e) · Report reply
@supermenter et @hansolo
Désolé la ligne id = json.decode((fibaro:getGlobal("TableDeviceId"))); -- récupération des id
est à supprimer.
c'est parce que je gère mes id dans une scène.
Je republie le code....