Aller au contenu

jjacques68

Membres confirmés
  • Compteur de contenus

    4 358
  • Inscription

  • Dernière visite

  • Jours gagnés

    39

Tout ce qui a été posté par jjacques68

  1. Oh punaise oui !! Faut se déconnecter puis se reconnecter à nouveau !! Envoyé de mon iPhone en utilisant Tapatalk Pro
  2. Bonsoir à tous, Voici un rapide bout de code tout simple mais toujours utile, qui permet de connaitre le nombre de device que l'on a sur notre HC2. Version 1 : CountDeviceV1.lua Le critère de sélection est simplement la propriété "visible" du device qui doit être à "true". Il sont classés selon leurs types, sans tenir compte de leurs "parentId". C'est à dire par exemple pour 1 FGMS, il va compter donc 1 détecteur de mouvement, 1 détecteur du luminosité et 1 détecteur de température. Il ne fait pas la différence entre les version 1 et n des device. Version 2 : CountDeviceV2.lua Dans cette version il est possible de connaitre le nombre réel de device. --[[ Version 2 Scène qui compte les device. Permet de savoir combien on en a. C'est tout. --]] print("Les device listés en VERT correspondent aux device réels ou physiquement présent.\n") local Detail = true --mettre false pour ne pas avoir le détail if Detail == true then print("Les device listés en ORANGE correspondent au nombre de device du même type.") print("Il peut y avoir un décallage entre le nombre de device réels ") print("et le nombre de device du même type,") print("car un device réel peut en contenir plusieurs (exemple pour les FGMS, FGS, ...)\n") end print("Analyse en cours...\n") local Device = api.get("/devices") local DeviceFind = false local AllDevice = {} --{parentId = x, id = y} local RealDevice = {} --{TypeDevice = "", Number = x} local NbRealDevice = 0 local NbDevice = 0 --[[---------------------------------------------------------------------------- -------------------------------------------------------------------------------- ajoute le couple parentId - Id dans la table AllDevice. Si pas de parentId (cas des VD) alors on force le parentId à 0. PID | ID --------- 0 | 2 1 | 434 434 | 439 434 | 440 434 | 441 --]] for i = 1, #Device do if Device[i].parentId then table.insert(AllDevice,{parentId = Device[i].parentId, id = Device[i].id}) else --sinon ajoute le device avec comme parentId forcé à 0 (c'est en faite les VD) table.insert(AllDevice,{parentId = 0, id = Device[i].id}) --print(Device[i].id.." "..Device[i].type) end end --[[---------------------------------------------------------------------------- -------------------------------------------------------------------------------- 2 étapes pour l'ajout dans la table RealDevice : 1ère étape : ajoute/compte les device de AllDevice dont le parentId = 0 (user, mobile, VD, ...). 2ème étape : sélectionne dans AllDevice, que le premier device des chlidId pour ajouter/compter : PID | ID --------- 1 | 434 434 | 439 <---- c'est celui là qui nous intéresse 434 | 440 434 | 441 --]] for i,v in ipairs(AllDevice) do --pour tous les devices de AllDevice --ETAPE 1 : --ajoute les type de device dont le parentId = 0 (user, mobile, ...) if AllDevice[i].parentId == 0 then --on récupère les info du device Device = api.get("/devices/"..AllDevice[i].id) --pour tous les Device déjà enregistrés for j,v in ipairs(RealDevice) do --si y a déjà un type device identique dans la liste -> on incrémente juste le nombre if RealDevice[j].TypeDevice == Device.type then RealDevice[j].Number = RealDevice[j].Number + 1 DeviceFind = true break else DeviceFind = false end end --ajoute si pas present dans le tableau if DeviceFind == false then table.insert(RealDevice, {TypeDevice = Device.type, Number = 1}) end end --arrête si arrivé au dernier (sinon bug à cause du i+1) if i == #AllDevice then break end --ETAPE 2 : ajoute des autres devices --si id en cours = parentId du suivant c'est que --l'id du suivant est le premier device enfant que l'on doit garder if AllDevice[i].id == AllDevice[i+1].parentId then --on récupère les infos du premier device enfant Device = api.get("/devices/"..AllDevice[i+1].id) --si le device enfant n'est pas directement le suivant, --on prends encore le suivant, et encore et encore jusqu'à trouver le bon. k=1 while Device.visible == false do k=k+1 Device = api.get("/devices/"..AllDevice[i+k].id) end --pour tous les Device déjà enregistrés for j,v in ipairs(RealDevice) do --si y a déjà un type device identique dans la liste -> on incrémente juste le nombre if RealDevice[j].TypeDevice == Device.type then RealDevice[j].Number = RealDevice[j].Number + 1 DeviceFind = true break else DeviceFind = false end end --ajoute si pas present dans le tableau if DeviceFind == false then table.insert(RealDevice, {TypeDevice = Device.type, Number = 1}) end end end --on affiche le résultat------------------------------------------------------------ Device = api.get("/devices") for i = 1, #RealDevice do print ("<font color = 'green'>"..RealDevice[i].Number.." x "..RealDevice[i].TypeDevice.."</font>") NbRealDevice = NbRealDevice + tonumber(RealDevice[i].Number) if Detail == true then k=1 for j = 1, #Device do if Device[j].type == RealDevice[i].TypeDevice and Device[j].visible == true and Device[j].enabled == true then print("<font color = 'orange'>______ "..k.." ---> "..Device[j].name.." - "..Device[j].id.."</font>") NbDevice = NbDevice+1 k=k+1 end end end end --et les toto---------------------------------------------------------------------- print() print("<font color = magenta>Nombre Réel de device : "..NbRealDevice.."</font>") if Detail == true then print("<font color = magenta>Nombre de device : "..NbDevice.."</font>") end voilà le debug : Si vous avez des propositions d'améliorations... n'hésitez pas...
  3. jjacques68

    Fibaro HC3 ?

    La HC2 reste un très bon point de départ. Je fais parti des personnes qui se posent la même question, mais faut avouer que question stabilité (sans vouloir entrer dans les process intime de la bête), c’est très bon. Prise en main aussi. Le lua ?? On s’y fait bien(un peu de lecture et de d’essai quand même) Elle est conviviale. Certe les nouveautés viennent au compte goute. Perso j’ai un IPX dessus et une jeedom smart mais que pour le Bluetooth. La HC2 reste mettre dans l’affaire. Si c’était à refaire, je ferai pareil. Et surtout, surtout, ce forum est le plus utile, fourni, agréable et fréquenté par de vrai connaisseur en la matière qui n’hésitent pas à aider (important aussi ça, la communauté !!) Plus chère que d’autres, oui... et le prix des modules c’est kif kif. On peut lui reprocher beaucoup de chose, mais en attendant, elle fonctionne, et nous permet de faire presque tout ce qu’on veut.
  4. ça colle, le bug est apparu juste après IOS 11
  5. Par contre tout est normal avec le forum jeedom par exemple, je peux répondre, créer,...
  6. Moi Tapatalk en pro 7.0.1 et IOS en 11.0.2.
  7. Moi oui en tout cas, les autres le sais pas...
  8. C’est malin ça ... mais bien vrai APK marche pour iOS... visiblement
  9. APK ? Ai marche pour iPhone aussi ?
  10. Et comment on fait pour retrouver une ancienne version ?
  11. toujours pas de news ?? snif.
  12. oui je pense aussi à la baffe
  13. jjacques68

    Interroger serveur UPS Synology

    ah ces histoire d'UPS et HC2... un vieux rêve alors j'avais fait des essais : voici le script php que j'utilisais : (à savoir que je suis nul de chez nul de chez nul en php... ) je l'avais nommé shutdown.php <?php $opts = array( 'http'=>array( 'method'=>"GET" ) ); $context = stream_context_create($opts); $fp = fopen('http://user:password@IP_locale_HC2/api/sceneControl?id=XXX&action=start', 'r', false, $context); //fpassthru($fp); fclose($fp); ?> user = le super user XXX = ID de la scène qui contiendra la séquence d'extinction de la HC2 ça marchait. MAIS !!!!!!!!!!!!!!!!!! attention !!! voici les remarques que j'avais relevé : donc si vous avez une solution... je suis preneur... et comment faire pour faire redémarrer la HC2 en cas de retour de l'UPS donc du Syno ???
  14. jjacques68

    Interroger serveur UPS Synology

    Il me semble qu'il faut insérer un script et nom une requête http. Nan ? j'avais fait des essais avec un script php. Lancé par le syno à cette endroit...
  15. jjacques68

    variable haute

    Le top serait que tu postes le debug complet quand le nan apparaît...
  16. jjacques68

    variable haute

    C’est quoi le message d’erreur ?
  17. jjacques68

    variable haute

    Ouch ! Tu as fait un mix de tout c’est un peu le cirque... Je viens de réécrire, à essayer pour voir... À essayer... j’ai pas testé donc peut être des erreurs... quand tu codes, n’hésites pas à mettre des commentaires, debug et respecter l’indentation pour plus de facilité à relire le code et le comprendre... je comprends pas le coup du 85 °C ??? local selfId = fibaro:getSelfId() --ID du VD de type integer local WEB = Net.FHttp("192.168.1.24",80) -- IP to your espeasy local VgHc2 = fibaro:getGlobal("TempHc2") --valeur mémorisée de type string local tempMax = "38 °C" --de type string local tempMin = "32 °C" --de type string local tempNan = "10 °C" --de type string local response ,status, err = WEB:GET("/json?tasknr=1") -- task id on espeasy if (tonumber(status) == 200 and tonumber(err)==0) then -- si réponse ok local jsonTable = json.decode(response) --recupère la table des valeurs de retour local value = jsonTable.Temperature -- sélectionne que la température --force value à tempNan si réponse = "nan °C" if value == "nan °C" then value = tempNan end --debug fibaro:debug("Valeur mesurée = "..value) --update label VD (le "°C" est dans value) fibaro:call(selfId, "setProperty", "ui.lbl1.value", value) --conversion des string if value then value = string.match(value, "[0-9.]+") end if tempMax then tempMax = string.match(tempMax, "[0-9.]+") end if tempMin then tempMin = string.match(tempMin, "[0-9.]+") end if tempNan then tempNan = string.match(tempNan, "[0-9.]+") end if VgHc2 then VgHc2 = string.match(VgHc2, "[0-9.]+") end --debug des valeur converti pour info fibaro:debug("valeur converti :") fibaro:debug("value = "..tonumber(value)) fibaro:debug("tempNan = "..tonumber(tempNan)) --Comparaison entre la Temperature mémorisée et la température mesurée fibaro:debug("Comparaison pour stockage dans variable : ") fibaro:debug("Valeur mémorisée actuelle = "..VgHc2) if tonumber(value) > tonumber(VgHc2) then fibaro:debug("température mesurée supérieure -> Mise à jour de la VG") fibaro:setGlobal("TempHc2", value.." °C") else fibaro:debug("température mesurée inférieure ou égal -> pas de mémorisation") end --si temperature = 85 alors appui sur Btn 5 du device 747 fibaro:debug("Comparaison avec 85 °C :") if tonumber(VgHc2) == 85 then fibaro:call(747, "pressButton", "5"); fibaro:debug("= 85 °C -> eraz variable") else fibaro:debug("<> 85 °C -> rien à faire") end --allumage ou pas du ventilo fibaro:debug("Comparaison pour allumage du ventilo :") fibaro:debug("tempMax = "..tonumber(tempMax)) fibaro:debug("tempMin = "..tonumber(tempMin)) if tonumber(value) > tonumber(tempMax) then fibaro:call(747, "pressButton", "2"); fibaro:debug("allumage ventilo") elseif value < tempMin then fibaro:call(747, "pressButton", "3"); fibaro:debug("extinction ventilo") end fibaro:sleep(10*1000) -- en option : petite tempo pour calmer le code dans le VD end
  18. jjacques68

    variable haute

    Ce bout de code que tu trouves après l’exécution de ta requête HTTP, permet de contrôler le retour d’état de celle-ci. si status = 200 veut dire que tout s’est bien passé et err=0 veut dire qu’il n’y a pas d’erreur en retour. Donc avec ces 2 conditions, tu peux donc continuer à traiter ton code. Sinon ça sert à rien, ton code va planter. Il sera possible aussi du coup d’afficher le code erreur renvoyé( en option).
  19. jjacques68

    variable haute

    De rien !!
  20. jjacques68

    variable haute

    Ah le boulet, j’avais pas vu !! C’est normal !! --Pour traiter le "nan" ATTENTION au "°C" après le "nan" if value == "nan °C" then value = "tempMin" end C’est faux !! voilà ce qu’il faut : enlever les double quote autour de tempMin. enfait ce qu’on a fait, c’est que si value = nan °C alors value = tempMin et non 32 ! --Pour traiter le "nan" ATTENTION au "°C" après le "nan" if value == "nan °C" then value = tempMin end
  21. jjacques68

    variable haute

    C’est clairement un problème de convertion de type. essayes ça Dans le paragraphe convertion : --convertion value = string.match(value, "[0-9.]+") tempMax = string.match(tempMax, "[0-9.]+") tempMin = string.match(tempMin, "[0-9.]+")
  22. jjacques68

    variable haute

    Mais tu as essayé avec les convertions de type ? Voilà le code les comprenant : --[[ %% autostart %% properties 747 value %% events %% globals --]] while true do local value = fibaro:getValue(747, "ui.lbl1.value") local tempMax = "38 °C" -- penser °c autrement compare nil value erreur local tempMin = "32 °C" fibaro:debug(value) fibaro:sleep(60*1000) --Pour traiter le "nan" ATTENTION au "°C" après le "nan" if value == "nan °C" then value = "tempMin" end --convertion value = string.format("%.1f",value) tempMax = string.format("%.1f",tempMax) tempMin = string.format("%.1f",tempMin) --debug pour être sur des valeurs : fibaro:debug("value = "..tonumber(value)) fibaro:debug("tempMax = "..tonumber(tempMax)) fibaro:debug("tempMin = "..tonumber(tempMin)) if tonumber(value) > tonumber(tempMax) then fibaro:call(747, "pressButton", "2"); fibaro:debug("allumage ventilo") elseif tonumber(value) < tonumber(tempMin) then fibaro:call(747, "pressButton", "3"); fibaro:debug("extinction ventilo") end end
  23. jjacques68

    variable haute

    Je crois que je viens de comprendre le « nan », il faut y ajouter le « °C » aussi ... Ensuite attention, tu dois ajouter la convertion des chaînes (value, tempMax et tempMin) comme dans le code précédent. Avant de faire la comparaison --[[ %% autostart %% properties 747 value %% events %% globals --]] while true do local value = fibaro:getValue(747, "ui.lbl1.value") local tempMax = "38 °C" -- penser °c autrement compare nil value erreur local tempMin = "32 °C" fibaro:debug(value) fibaro:sleep(60*1000) --Pour traiter le "nan" ATTENTION au "°C" après le "nan" if value == "nan °C" then value = "tempMin" end if value > tempMax then fibaro:call(747, "pressButton", "2"); fibaro:debug("allumage ventilo") elseif value < tempMin then fibaro:call(747, "pressButton", "3"); fibaro:debug("extinction ventilo") end end
  24. Hein ?????
  25. jjacques68

    variable haute

    Ha ben voilà !! Nickel ça ! tu pourrais peut être rajouter ce bout de code dans le main du VD, ça te fera une scène en moins, et tout sera au meme endroit... par contre si tu fais ça, pas besoin du while true do... il boucle tout seul...
×
×
  • Créer...