
jjacques68
Membres confirmés-
Compteur de contenus
4 368 -
Inscription
-
Dernière visite
-
Jours gagnés
39
Tout ce qui a été posté par jjacques68
-
j'ai pas testé, mais : un truc du genre MonDevice = api.get("/devices/"..DeviceID) MonDevice[DeviceParID].value = 0 api.put("/devices/"..DeviceID, MonDevice)
-
Hello ! Je me rends compte que de temps en temps, j'ai une scène qui génère une erreur... Sans aucunes indications !! Dans le debug, j'ai juste le type "error", le tag "scene65" , mais rien dans le message !! Donc pas moyen de savoir ce qu'il se passe... La scène permet de gérer l'allumage quand on passe devant un PIR... Elle fonctionne à 99.999999 % Mais cette semaine j'ai eut ces 3 erreurs sans indications... et je sais pas pourquoi. ça fais des heures que je m'arrache les cheveux et je tourne en rond... alors j'ai réussi à reproduire ce type d'affichage d'erreur dans le debug en créant une scène avec : (rien à voir avec ma scène...) print("start") fibaro.sleep(10000) print("end") Il apparait clairement qu'il y a un lien avec la gestion du "multi-instance" (si on peut encore appeler ça comme ça...) En lançant 2 fois la scène dans les 10 secondes. Visiblement, lors de l'exécution de la deuxième instance de scène, ça plante et le message "error" apparaît. Normalement, si une 2ème instance est lancée, elle annule la précédente !!!! Je précise que l'option dans "Allow to restart a running scene: "est par défaut sur "YES". Si le mets sur "NO", il n'y a plus d'erreur, mais la deuxième instance de scène n'est pas prise en compte (logique...) Pour info si on remplace le "sleep" par un setTimeout(), il n'y a plus ce soucis... Pour en revenir à ma scène, elle ne possède pas de sleep ou de setTimeout !!! Mais d'après ce que j'observe dans le debug, cette erreur apparaît quand je passe d'une pièce à l'autre et que donc potentiellement, 2 instances (ou plus) de la scène peuvent être démarrées. alors bug utilisateur ou bug système ??? voici son code : (désolé, ce sera peut être pas évident...) Elle permet d'allumer/éteindre les lumières d'une pièce quand un PIR trigge la scène. J'ai cette scène unique pour toute la maison. Donc dans les conditions, tous les PIR sont présent avec comme valeur de déclenchement : "anyValue". Les lumières de la pièces restent allumer tant que le PIR ne repasse pas à FALSE. Donc... le temps d'allumage est géré par les paramètres des capteurs PIR. Je tiens compte également du niveau de LUX (pour les PIR qui me fournissant cette option) Pour chaque pièce ou un PIR est présent pour l'allumage, j'ai un QA qui me permet de choisir si je veux que l'éclairage soit en mode auto ou manu. Il est nommé avec l'ID de la pièce pour plus de facilité de programmation. Il existe quelques subtilités (VMC salle de bain (avec leur "delay" sur le OFF) et éclairage extérieur (suivant des conditions horaires)) local NameScene = "Lights on PIR" local IDPirZoneEntree = 169 local IDPirZoneGarage = 459 local ListeDelay = {} --récupère l'ID du trigger (PIR) local TriggerID = sourceTrigger.id --Trouve la pièce liée au PIR local RoomID = api.get("/devices/"..TriggerID).roomID --Trouve l'ID du QA qui gére la marche forcée de la pièce local PIRAutoID = api.get("/devices/?name=PIR_Room_"..RoomID)[1].id --si QA en mode auto if fibaro.getValue(PIRAutoID, "value") == true then --Trouve le capteur de LUX de la pièce local LuxID = api.get("/rooms/"..RoomID).defaultSensors["light"] --Trouve le niveu jour/Nuit du capteur si existant et si la propriété existe (donc en gros que pour les FGMS) local LuxLevel = 0 if LuxID ~= 0 and api.get("/devices/"..LuxID).properties.parameters[7].value then LuxLevel = api.get("/devices/"..LuxID).properties.parameters[7].value end --liste les lumières de la pièce local ListeLightsInRoom = api.get("/devices/?roomID="..RoomID.."&property=[isLight,true]") --pour tout les lumières de la pièces for k,v in pairs(ListeLightsInRoom) do ---------------------------------------------- --si PIR = true ---------------------------------------------- if fibaro.getValue(TriggerID, "value") == true then ---------------------------------------------- --pour les VMC : supprime les éventuelles delay OFF if v.id == 69 or v.id == 226 then --recupère la liste de la VG ListeDelay = fibaro.getGlobalVariable("DelayVmc") ListeDelay = json.decode(ListeDelay) --parcours tous les delay OFF existant (max 2) for index,value in pairs(ListeDelay) do --si trouve l'ID du trigger correspondant if value.VMC == v.id then --on le surppime dans l'API (passe par un QA) fibaro.call(490, "Delete", value.API.timestamp,value.API.id) --on le supprime de la liste table.remove(ListeDelay, index) end end --mémorise la VG ListeDelay = json.encode(ListeDelay) fibaro.setGlobalVariable("DelayVmc", ListeDelay) end --END VMC--------------------------------------------- --si on a un capteur Lux et un seuil jour/nuit if LuxID ~= 0 and LuxLevel ~= 0 then --si Lux < LuxLevel if fibaro.getValue(LuxID, "value") <= LuxLevel then fibaro.call(v.id, "turnOn") end --si pas de capteurs de LUX else fibaro.call(v.id, "turnOn") end ---------------------------------------------- --si PIR = false ---------------------------------------------- else -->> PIR = FALSE ---------------------------------------------- --pour les VMC : retarde le OFF avec le delay if v.id == 69 or v.id == 226 then res = api.post("/devices/"..v.id.."/action/turnOff", {delay = 60}) --enregistre dans une VG, le timestamp et l'id de l'API ainsi que l'ID du PIR trigger ListeDelay = fibaro.getGlobalVariable("DelayVmc") ListeDelay = json.decode(ListeDelay) table.insert(ListeDelay, {VMC = v.id, API = res}) ListeDelay = json.encode(ListeDelay) fibaro.setGlobalVariable("DelayVmc", ListeDelay) --END VMC -------------------------------------------- else fibaro.call(v.id, "turnOff") end end -->>PIR = TRUE/FALSE end -->> boucle pour chaque lumière end -->> QA en mode auto -------------------------------------------------------------------------------------------------------- --[[ CAS PENDANT LA NUIT : QUE si c'est le PIR de la porte d'entrée ou de garage remarque : dans le cas où l'extérieur s'allume juste qqu secondes avant sunriseHour, cette scène n'éteindra pas. Ce sera la scène Sun Set/Rise - Lights qui s'en occupera ]] -------------------------------------------------------------------------------------------------------- if TriggerID == IDPirZoneEntree or TriggerID == IDPirZoneGarage then -- si on est après 01:05 et avant 14 minute avant SunRise on allume tout le jardin if os.date("%H:%M",os.time()) > "01:05" and os.date("%H:%M",os.time()+14*60) < api.get('/settings/info').sunriseHour and os.date("%H:%M",os.time()) < api.get('/settings/info').sunriseHour --à cause des 14 min avant 00:00 then fibaro.trace(NameScene,os.date("%H:%M",os.time()), os.date("%H:%M",os.time()+14*60), api.get('/settings/info').sunriseHour) --si PIR = true if fibaro.getValue(TriggerID, "value") == true then fibaro.call({166,278,279,280}, "turnOn") --PIR = false else fibaro.call({166,278,279,280}, "turnOff") end end end Voilà, si vous avez un peu de temps et encore des cheveux !!!! c'est avec plaisir que je prends vos idées !
-
Help!! comparer/mesurer l’écart entre 2 dates/time
jjacques68 a répondu à un(e) sujet de flamalex dans HC2
c'est un peu l'usine à gaz oui, j'avoue ne pas tout saisir, je prends ce que tu me donnes en passant l'essentiel est de faire marcher comme tu veux. après on pourra rendre le code plus propre -
Help!! comparer/mesurer l’écart entre 2 dates/time
jjacques68 a répondu à un(e) sujet de flamalex dans HC2
tu as changer les setGlobalValue en setGlobal ? -
Help!! comparer/mesurer l’écart entre 2 dates/time
jjacques68 a répondu à un(e) sujet de flamalex dans HC2
oh punaise, c'est bien setGlobal et pas setGlobalValue ! je m'embrouille tout seul... -
Help!! comparer/mesurer l’écart entre 2 dates/time
jjacques68 a répondu à un(e) sujet de flamalex dans HC2
encore plus simple : if tonumber(difference_jr) > tonumber(Consigne_Tps_Arros) then vu que tu les as mises dans des variables locales. -
Help!! comparer/mesurer l’écart entre 2 dates/time
jjacques68 a répondu à un(e) sujet de flamalex dans HC2
pardon, il faut encadrer le nom des variables avec les " "... -
Help!! comparer/mesurer l’écart entre 2 dates/time
jjacques68 a répondu à un(e) sujet de flamalex dans HC2
pour faire propre : if tonumber(fibaro:getGlobalValue(difference_jr)) > tonumber(fibaro:getGlobalValue(Consigne_Tps_Arros)) then fibaro:setGlobalValue('OK_FOR_ARROZ', 1) else fibaro:setGlobalValue('OK_FOR_ARROZ', 0) end -
Help!! comparer/mesurer l’écart entre 2 dates/time
jjacques68 a répondu à un(e) sujet de flamalex dans HC2
pareil, je sais pas si ça a de l'importance, mais : then fibaro:setGlobal('OK_FOR_ARROZ', 1) else fibaro:setGlobal('OK_FOR_ARROZ', 0) end plutot ça : then fibaro:setGlobalValue('OK_FOR_ARROZ', 1) else fibaro:setGlobalValue('OK_FOR_ARROZ', 0) end -
Help!! comparer/mesurer l’écart entre 2 dates/time
jjacques68 a répondu à un(e) sujet de flamalex dans HC2
ça ça me dérange : ce serait plutôt : il s'agit bien de Variables Globales ? if tonumber(fibaro:getGlobalValue(difference_jr)) > tonumber(fibaro:getGlobalValue(Consigne_Tps_Arros)) -
Help!! comparer/mesurer l’écart entre 2 dates/time
jjacques68 a répondu à un(e) sujet de flamalex dans HC2
tu es sûr dans GEA du contenu des variables ? on dirait que l'une des 2 d'après le debug est = null "difference_jr", "Consigne_Tps_Arros" -
Help!! comparer/mesurer l’écart entre 2 dates/time
jjacques68 a répondu à un(e) sujet de flamalex dans HC2
ah la la, dans GEA je sais pas... -
Help!! comparer/mesurer l’écart entre 2 dates/time
jjacques68 a répondu à un(e) sujet de flamalex dans HC2
je regarde plus en détail plus tard, mais à première vu tu n'as pas les multiples de 24*60*60 ??? relis voir les post plus haut... -
ah oui ! ce serait top en effet !!
-
super ! en espérant que ça mettra pas trop de temps euuh... là tu m'as perdu ! ai pas tout compris !
-
Help!! comparer/mesurer l’écart entre 2 dates/time
jjacques68 a répondu à un(e) sujet de flamalex dans HC2
l'essentiel c'est qu'il doit comparer des jours avec des jours, ou des secondes avec des secondes. Normalement j'imagine que ça passera. Surtout pas des jours avec des secondes ! -
Help!! comparer/mesurer l’écart entre 2 dates/time
jjacques68 a répondu à un(e) sujet de flamalex dans HC2
ah là en effet... il faut alors modifier dans GEA et mettre 1*24*60*60 ou 2*24*60*60 ou 3*24*60*60... mais désolé, je n'ai jamais utilisé GEA, je ne sais pas comment ça marche... -
Help!! comparer/mesurer l’écart entre 2 dates/time
jjacques68 a répondu à un(e) sujet de flamalex dans HC2
Mais attention, il faut que ce soit des jours entier !! 1 jours, 2 jours, 3 jours ou plus ! mais pas genre 1 jour et demi ! -
Help!! comparer/mesurer l’écart entre 2 dates/time
jjacques68 a répondu à un(e) sujet de flamalex dans HC2
local WArrosage_J_avant = tonumber(fibaro:getGlobalValue("WArrosage_J_avant"))/(24*60*60) -- incremantation de +1 de variable globale consigneT WArrosage_J_avant = WArrosage_J_avant + 1 fibaro:setGlobal('WArrosage_J_avant', WArrosage_J_avant * (24*60*60)) -- puis on affiche la variable dans le champs consigne fibaro:debug(WArrosage_J_avant) fibaro:call(fibaro:getSelfId(), "setProperty", "ui.consigneTimeavant.value","Nbre de jours passés sans pluie: "..WArrosage_J_avant) explications : on a va donc stocker des jours converti en secondes dans la VG. Pour ça c'est un simple multiple de 24 heures * 60 minutes * 60 secondes. donc quand on récupère le contenu de la VG, on va diviser par 24*60*60, qui nous donnera le nombre de jours. on va incrémenter / décrémenter la valeur puis la re stocker dans la VG en la multipliant par 24*60*60 du coup dans la VG tu as les secondes, et à l'affichage, tu restes en jour. Y a le nom de la variable locale "WArrosage_J_avant" qui dérange un peu la compréhension, car elle a le même nom que la variable globale... En locale, elle contient une valeur 1-2 ou 3 mais en globale est contient les nombres de secondes. -
Help!! comparer/mesurer l’écart entre 2 dates/time
jjacques68 a répondu à un(e) sujet de flamalex dans HC2
tes commentaires sont justes. -
Help!! comparer/mesurer l’écart entre 2 dates/time
jjacques68 a répondu à un(e) sujet de flamalex dans HC2
affiche nous le code des boutons +/- PS : utilise l’afficheur de code : bouton "</>" dans le bandeau d'édition du forum -
Help!! comparer/mesurer l’écart entre 2 dates/time
jjacques68 a répondu à un(e) sujet de flamalex dans HC2
s'il te faut des explications, n'hésite pas... -
Help!! comparer/mesurer l’écart entre 2 dates/time
jjacques68 a répondu à un(e) sujet de flamalex dans HC2
local date_derniere_pluie = tonumber(fibaro:getGlobalValue("time_last_rain")) local ma_date_en_toute_lettre = os.date("%d/%m/%Y - %H:%M:%S",date_derniere_pluie) fibaro:debug(ma_date_en_toute_lettre) fibaro:call(fibaro:getSelfId(), "setProperty", "ui.LastRain.value", ma_date_en_toute_lettre) -
Help!! comparer/mesurer l’écart entre 2 dates/time
jjacques68 a répondu à un(e) sujet de flamalex dans HC2
ah mais nan mis c'est normal !!!! suis bête !! -
Help!! comparer/mesurer l’écart entre 2 dates/time
jjacques68 a répondu à un(e) sujet de flamalex dans HC2
dans fibaro:call(fibaro:getSelfId(), "setProperty", "ui.LastRain.value", date_derniere_pluie.."") enlève le .."" à la fin... sert à rien. Mais c'est pas ça qui va changer qqch... Du coup je reste persuader que tu as une surcharge de valeur. Quelque part ailleurs dans ton VD, tu dois certainement écrire dans ce label. par exemple dans le MainLoop !