Aller au contenu

Rechercher dans la communauté

Affichage des résultats pour les étiquettes 'Tuto HC2'.



Plus d’options de recherche

  • Rechercher par étiquettes

    Saisir les étiquettes en les séparant par une virgule.
  • Rechercher par auteur

Type du contenu


Forums

  • Bienvenue
    • Nouveau ? Présentez-vous
    • Le bistrot
    • Mon installation domotique
    • Annonces et suggestions
  • La Home Center et ses périphériques
    • La Home Center pour les nuls
    • HC 2 & Lite
    • HC 3
    • Modules Fibaro
    • Modules Z-wave
    • Périphériques et matériels autres
    • Plugins
    • Quick App
    • Multimédia (audio, vidéo ...)
    • Chauffage et Energie
    • Actionneurs & Ouvrants (Portail, volets, piscines, ...)
    • Eclairage
    • Applications Smartphones et Tablettes
  • Autres solutions domotiques
    • Box / Logiciel
    • Modules Nice (433 & 866 MHz)
    • Modules Zigbee
    • GCE Electronics
    • Modules Bluetooth Low Energy
  • Objets connectés
    • Les Assistants Vocaux
    • Netatmo
    • Philips Hue
    • DIY (Do It Yoursel)
  • Sécurité
    • Alarmes
    • Caméras
    • Portiers
    • Serrures
  • Informatique / Réseau
    • Tutoriels
    • Matériels Réseaux
    • Matériels Informatique
    • NAS
    • Virtualisation
  • Les bonnes affaires
    • Sites internet
    • Petites annonces

Rechercher les résultats dans…

Rechercher les résultats qui…


Date de création

  • Début

    Fin


Dernière mise à jour

  • Début

    Fin


Filtrer par nombre de…

Inscription

  • Début

    Fin


Groupe


Jabber


Skype


Ville :


Intéret :


Version

133 résultats trouvés

  1. Bonjour, Petit partage d'un VD qui permet de récupérer les valeurs des 8 entrées et des 8 sorties d'une ipx800 afin de les exploiter ou dans des VDs, ou dans GEA :- Il faut donc 8 variables globales pour les entrées : IPX_IN1 IPX_IN2 etc jusqu'à IPX_IN8 Il faut 8 variables globales pour les sorties : RELAIS1 RELAIS 2 etc jusqu'à RELAIS8 Deux boutons de MAJ et 16 labels. Certains libellés dans ce VD sont adapté à mon utilisation, modifiez les! (Pensez également à changer l'adresse ip, chez moi 192.168.1.60) Suite aux remarques (très intéressante) de ce fil, voilà la nouvelle version : VERSION 3 (MAJ du 28/11/15) - Permet d'utiliser le PUSH de l'ipx (et donc ne faire qu'une requête lors d'un changement d'état d'une entrée) - A configurer dans l'ipx (appuie sur le BP Maj de ce VD) - Code plus simple - Permet la mise à jour des VDs qui changent les icônes. - Permet de gérer les sorties avec le retour d'info A reconfigurer pour votre usage : Pour les entrées : Variable local VD_nom (juste pour se rappeler sur quoi c'est branché ) Variable local VD_ID_IPX (L'id des VD à mettre à jour) - Mettre nil si aucune action voulu Variable local VD_BP_IPX (Le BP a appuyer pour la MAJ du Vd en question) - Mettre nil si aucune action voulu Variable local VariablesIPX (qui correspond au variables globales a modifier en fonction des entrées) Pour les sorties : local VD_NOM_SORTIES (Toujours pour se rappeler sur quoi c'est branché ) local VD_ID_IPX_SORTIES (L'id des VD à mettre à jour) - Mettre nil si aucune action voulu local VD_BP_IPX_SORTIES (Le BP a appuyer pour la MAJ du Vd en question) - Mettre nil si aucune action voulu local VD_LABEL_SORTIES (les valeurs des labels à modifier) Supprimer les lignes de debug après mise en place Coté IPX : On configure le push sur les entrées afin d'appuyer sur le BP MAJ Entrée et on configure le push sur les sorties afin d'appuyer sur le BP MAJ Sorties. Exemple pour les entrées : /api/callAction?deviceID=104&name=pressButton&arg1=9 104 étant l'id du VD MAJ et 9 étant le bouton à appuyer pour la maj des entrées Exemple pour les sorties : /api/callAction?deviceID=104&name=pressButton&arg1=18 104 étant l'id du VD MAJ et 18 étant le bouton à appuyer pour la maj des sorties Bouton de MAJ Entrées : HC2 = Net.FHttp("192.168.1.60") response = HC2:GET("/api/xdevices.json?cmd=10") response = json.decode(response) local i = 1 local TotalEntrees = 8 + 1 local Rvar = {response.IN1,response.IN2,response.IN3,response.IN4,response.IN5,response.IN6,response.IN7,response.IN8} local VariablesIPX = {"IPX_IN1","IPX_IN2","IPX_IN3","IPX_IN4","IPX_IN5","IPX_IN6","IPX_IN7","IPX_IN8"} local VD_NOM = {"IR","Libre","Etat AL","En Al","Courrier","Scene3","Scene2","Scene1"} -- Juste pour Aide local VD_ID_IPX = {nil,nil,88,88,92,nil,nil,nil} -- ID des VD à mettre à jour local VD_BP_IPX = {nil,nil,3,3,2,nil,nil,nil} -- Numéro des boutons de MAJ des VD DateHeure = os.date("%Y-%m-%d %H:%M:%S", os.time()) fibaro:log(DateHeure.."") fibaro:debug(DateHeure) while i < TotalEntrees do fibaro:debug(i) fibaro:setGlobal(VariablesIPX[i], Rvar[i]) fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label"..i..".value", Rvar[i]); fibaro:debug("Reponse entrée IPX : " ..i.." = " ..Rvar[i]) fibaro:debug("Nom du module = " ..VD_NOM[i]) if VD_ID_IPX[i] == nil then fibaro:debug("VD non configuré, rien à faire.") else fibaro:debug("Il faut appuyer sur le bouton : " ..VD_BP_IPX[i].. " de la VD id : " ..VD_ID_IPX[i]) fibaro:call(VD_ID_IPX[i], "pressButton", VD_BP_IPX[i]) end i = i + 1 end Bouton de Maj Sorties : HC2 = Net.FHttp("192.168.1.60") response = HC2:GET("/api/xdevices.json?cmd=20") response = json.decode(response) local i = 1 local TotalSorties = 8 + 1 local RvarSorties = {response.OUT1,response.OUT2,response.OUT3,response.OUT4,response.OUT5,response.OUT6,response.OUT7,response.OUT8} local VariablesIPXSorties = {"RELAIS1","RELAIS2","RELAIS3","RELAIS4","RELAIS5","RELAIS6","RELAIS7","RELAIS8"} local VD_NOM_SORTIES = {"VanneEAU","SecheServiette","ECL-EXT","Arrosage","PAC-Piscine","Filtration-Piscine","ECL-Piscine","Ventilation"} -- Juste pour Aide local VD_ID_IPX_SORTIES = {nil,85,84,nil,95,94,93,74} -- ID des VD à mettre à jour local VD_BP_IPX_SORTIES = {nil,4,4,nil,4,4,4,4} -- Numéro des boutons de MAJ des VD local VD_LABEL_SORTIES = {9,10,11,12,13,14,15,16} -- Label pour affichage des sorties DateHeure = os.date("%Y-%m-%d %H:%M:%S", os.time()) fibaro:log(DateHeure.."") fibaro:debug(DateHeure) while i < TotalSorties do fibaro:debug(i) fibaro:setGlobal(VariablesIPXSorties[i], RvarSorties[i]) fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label"..VD_LABEL_SORTIES[i]..".value", RvarSorties[i]); fibaro:debug("Reponse Sortie IPX : " ..i.." = " ..RvarSorties[i]) fibaro:debug("Nom du module = " ..VD_NOM_SORTIES[i]) if VD_ID_IPX_SORTIES[i] == nil then fibaro:debug("VD non configuré, rien à faire.") else fibaro:debug("Il faut appuyer sur le bouton : " ..VD_BP_IPX_SORTIES[i].. " de la VD id : " ..VD_ID_IPX_SORTIES[i]) fibaro:call(VD_ID_IPX_SORTIES[i], "pressButton", VD_BP_IPX_SORTIES[i]) end i = i + 1 end Exemples de VD Entrée : 1 label, 1 bouton de MAJ local icone = { ["DETECTION"] = 100, --numéro icone à renseigner ["PASDETECTION"] = 99, } if fibaro:getGlobalValue("IPX_IN1") == '1' then fibaro:call(fibaro:getSelfId(),"setProperty","ui.Label1.value", "Non") fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", icone["PASDETECTION"]) else fibaro:call(fibaro:getSelfId(),"setProperty","ui.Label1.value", "Oui") fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", icone["DETECTION"]) fibaro:log("Mouvement!!") end Exemple de Vd pour contrôle sortie 7 (et retour d'info) : 1 label, deux bouton ON/OFF, un bouton Maj Bouton on : Simplement mettre "Set071" en chaine et cochant "en attente de réponse du périphérique" Bouton off : "Set070" en chaine et cochant "en attente de réponse du périphérique" Bouton Maj : local icone = { ["ECLPON"] = 90, --numéro icone à renseigner ["ECLPOFF"] = 89, } if fibaro:getGlobalValue("RELAIS7") == '1' then fibaro:call(fibaro:getSelfId(),"setProperty","ui.Label1.value", "On") fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", icone["ECLPON"]) fibaro:log("Eclairage ON") else fibaro:call(fibaro:getSelfId(),"setProperty","ui.Label1.value", "Off") fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", icone["ECLPOFF"]) fibaro:log("Eclairage OFF") end ANCIENNE VERSION 1 (Plus lourde, bcp de requêtes et ne met pas les VD d'état additionnel à jour) Coté bouton de MAJ : HC2 = Net.FHttp("192.168.1.60") response = HC2:GET("/api/xdevices.json?cmd=10") response = json.decode(response) fibaro:setGlobal("IPX_IN1", response.IN1) fibaro:setGlobal("IPX_IN2", response.IN2) fibaro:setGlobal("IPX_IN3", response.IN3) fibaro:setGlobal("IPX_IN4", response.IN4) fibaro:setGlobal("IPX_IN5", response.IN5) fibaro:setGlobal("IPX_IN6", response.IN6) fibaro:setGlobal("IPX_IN7", response.IN7) fibaro:setGlobal("IPX_IN8", response.IN8) DateHeure = os.date("%Y-%m-%d %H:%M:%S", os.time()) fibaro:log(DateHeure.."") fibaro:debug(DateHeure) local relais1 = fibaro:getGlobalValue("IPX_IN1") local relais2 = fibaro:getGlobalValue("IPX_IN2") local relais3 = fibaro:getGlobalValue("IPX_IN3") local relais4 = fibaro:getGlobalValue("IPX_IN4") local relais5 = fibaro:getGlobalValue("IPX_IN5") local relais6 = fibaro:getGlobalValue("IPX_IN6") local relais7 = fibaro:getGlobalValue("IPX_IN7") local relais8 = fibaro:getGlobalValue("IPX_IN8") if (relais1 == '0') then fibaro:call(fibaro:getSelfId(),"setProperty","ui.Label1.value", "Oui") else fibaro:call(fibaro:getSelfId(),"setProperty","ui.Label1.value", "Non") end if (relais2 == '0') then fibaro:call(fibaro:getSelfId(),"setProperty","ui.Label2.value", "Actif") else fibaro:call(fibaro:getSelfId(),"setProperty","ui.Label2.value", "Off") end if (relais3 == '1') then fibaro:call(fibaro:getSelfId(),"setProperty","ui.Label3.value", "Armé") else fibaro:call(fibaro:getSelfId(),"setProperty","ui.Label3.value", "Désarmé") end if (relais4 == '1') then fibaro:call(fibaro:getSelfId(),"setProperty","ui.Label4.value", "En Alarme!") else fibaro:call(fibaro:getSelfId(),"setProperty","ui.Label4.value", "RAS") end if (relais5 == '1') then fibaro:call(fibaro:getSelfId(),"setProperty","ui.Label5.value", "Oui") else fibaro:call(fibaro:getSelfId(),"setProperty","ui.Label5.value", "Non") end if (relais6 == '1') then fibaro:call(fibaro:getSelfId(),"setProperty","ui.Label6.value", "On") else fibaro:call(fibaro:getSelfId(),"setProperty","ui.Label6.value", "Off") end if (relais7 == '1') then fibaro:call(fibaro:getSelfId(),"setProperty","ui.Label7.value", "On") else fibaro:call(fibaro:getSelfId(),"setProperty","ui.Label7.value", "Off") end if (relais8 == '1') then fibaro:call(fibaro:getSelfId(),"setProperty","ui.Label8.value", "On") else fibaro:call(fibaro:getSelfId(),"setProperty","ui.Label8.value", "Off") end Boucle principal : local myDeviceID = fibaro:getSelfId() if type(n) == "nil" then n1 = tonumber(os.time()) fibaro:call(myDeviceID, "pressButton", "1") n = 1 end if tonumber(os.time()) > n1 + (4) then fibaro:call(myDeviceID, "pressButton", "1") n1 = tonumber(os.time()) end Eclairage_Piscine.vfib IPX800_E-S.vfib
  2. mprinfo

    Vd - Surveillance Free Memory Hc2

    Surveillance Free Memory HC2 Voici un VD qui va vous permettre de connaitre la taille maximum et minimum de la mémoire libre de votre HC2 ainsi que la taille libre en temps réel C'est un VD très simple, il permet de connaitre les piques de mémoire maximum et minimum. Cela ne veut pas dire que les problémes de RAM que certains connaissent sont du à la RAM Le SWAP (fichier échange n'est pas pris en compte dans ce VD) car il n'est pas accessible via l'api de la box. De plus il n'est utilisé que lorsque RAM libre est inférieur a 5%. Le cache et le Buffers sont considéré comme de la RAM utilisé. Codes des différents Boutons : Bouton UPDATE local SelfId = fibaro:getSelfId() local pause = fibaro:get(SelfId, 'IPAddress') local NivAlerte = fibaro:get(SelfId, 'TCPPort') local IdTel = fibaro:getGlobal("TelPascal") local HC2 = Net.FHttp("127.0.0.1",11111) local response, status, errorCode = HC2:GET("/api/diagnostics") local result = json.decode(response) local RamFree = tonumber(result.memory.free) local RamCache = tonumber(result.memory.cache) local RamBuffers = tonumber(result.memory.buffers) local heure = os.date("%H:%M:%S", os.time())--os.date("%T") local date = os.date("%d/%m") local RamMax = tonumber(string.sub(fibaro:getValue(SelfId, "ui.labMax.value"), -4, -2)) local RamMini = tonumber(string.sub(fibaro:getValue(SelfId, "ui.labMini.value"),-4, -2)) ----------------------------------------------------------------- --- Message d'alerte Push ----------------------------------------------------------------- local push = tonumber(fibaro:getValue(SelfId, "ui.labPush.value")) if RamFree < tonumber(NivAlerte) then if push == nil then push = 0 end if push > 0 then push = push - tonumber(pause) fibaro:debug("difference"..push) else local Message = string.format("HC2 Espace Memoire faible %s le %s a %s", RamFree, os.date("%d/%m/%Y"), os.date("%R")) fibaro:call(IdTel, "sendPush", Message) push = 600 -- 10mn end else push = "" end ------------------------------------------------------------------ if RamMax == nil or RamMini == nil then RamMax = 0 RamMini = 0 end if RamFree > RamMax then RamMax = string.sub("0"..RamFree.." %", -4) fibaro:call(SelfId,"setProperty","ui.labMax.value", date.." à "..heure.." - "..RamMax) end if RamFree < RamMini or RamMini == 0 then RamMini = string.sub("0"..RamFree.." %", -4) fibaro:call(SelfId,"setProperty","ui.labMini.value", date.." à "..heure.." - "..RamMini) end ------------------------------------------------------------------ -- Mise a jour de label ------------------------------------------------------------------ fibaro:call(SelfId,"setProperty","ui.labPush.value", push) fibaro:call(SelfId,"setProperty","ui.labFreeRam.value", heure.." - "..RamFree.." %") fibaro:call(SelfId,"setProperty","ui.labSwap.value", heure.." - "..RamCache .." %") fibaro:call(SelfId,"setProperty","ui.labelBuffers.value", heure.." - "..RamBuffers .." %") Bouton RESET local SelfId = fibaro:getSelfId() local heure = os.date("%T") fibaro:call(SelfId,"setProperty","ui.labMini.value", "") fibaro:call(SelfId,"setProperty","ui.labMax.value", "") Bouton REBOOT function confirm(msg, labelId, secondes) local current = fibaro:getValue(fibaro:getSelfId(), "ui."..labelId..".value") if (current == msg) then fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value", " ") return true else fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value", msg) fibaro:sleep(secondes*1000) fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value","") return fibaro:getValue(fibaro:getSelfId(), "ui."..labelId..".value") == " " end end -- ----------------------------- -- A vous de jouer by Steven --- -- ----------------------------- local message = "Ré-appuyer pour confirmer" -- le message de confirmation local label_id = "lblMessage" -- l'ID du label qui recevra le message local duree = 3 -- la durée max entre 2 clique (en seconde) if ( confirm(message, label_id, duree) ) then fibaro:log("Confirmé") local SelfId = fibaro:getSelfId() local HC2 = Net.FHttp("127.0.0.1",11111) response, status, errorCode = HC2:POST("/api/settings/reboot", "data=shutdown -h"); if errorCode == 0 then fibaro:log(status); else fibaro:log("error"); end else fibaro:log("Annulé") message = "Demande Annulée..." confirm(message, label_id, 10) message = "" confirm(message, label_id, 1) end Main Loop local SelfId = fibaro:getSelfId() local pause = fibaro:get(SelfId, 'IPAddress') ----------------------------------------------------------------- fibaro:call(fibaro:getSelfId(), "pressButton", "6") fibaro:sleep(pause*1000) Utilisation : il va falloir renseigner 3 valeurs Le temps de rafraichissement des valeurs, ce temps sera exprimé en seconde. Pour renseigner cette valeur il suffit de rentrer un chiffre a la place de Adresse IP:Exemple : Pour une mise a jour toute les 3 mn Adresse IP : 180 Le % de mémoire libre restants à partir du quel je veux être averti par push. Pour renseigner cette valeur il suffit de rentrer un chiffre a la place de Port TCP: Exemple : Pour recevoir un push lorsque la mémoire vive libre est inférieur à 25 % PortTCP: 25 L'ID de votre SmartPhone ou Apple Phone local IdTel = fibaro:getGlobal("TelPascal") --si votre tel est enregistré dans une VG ou local IdTel = 69 -- id du telephone Cette ligne ce trouve dans le bouton UPDATE ligne 4 Prochaine évolution : amélioration de la boucle pour l'envoi de push Icône du VD réalisé par notre amis DID Voici le VD a importer sur votre HC2 : Free_Memory_v1.10.vfib
  3. Suite à une demande d'aide par MP, voici une traduction de mon post sur le forum fibaro officiel. http://forum.fibaro.com/viewtopic.php?t=3477&postdays=0&postorder=asc&start=26 La Sonette EVERSPRING UTSE03A est maintenant compatible avec la HC2 Voici la procédure: PROCEDURE MISE A JOUR ICI: http://www.domotique-fibaro.fr/index.php/topic/2663-sonnette-everspring-inclusion-et-support-hc2/page-4#entry88244 1 - Inclure le carillon en pressant 3 fois le bouton IER 2 - Inclure le bouton de la sonnette en pressant une fois le bouton IR pendant 10 secondes 3 - Les deux devices sont inclus dans la HC2 4 - Maintenant il faut associer les deux ensembles 5 - Appuyez le bouton IR pendant 10 secondes sur le module bouton de sonnette (Le bouton clignote) 6 - Appuyez trois fois sur le bouton IR du module bouton de sonnette (le bouton clignote) 7 - Appuyez trois fois le bouton IER sur le carillon (les deux boutons vont arrêter de clignoter) Maintenant le carillon est configuré. Si ça ne fonctionne pas, vous devez faire un reset du carillon et du module bouton poussoir et refaire la procédure... Dans mon cas ça a fonctionné au deuxième essai mais d'autres ont été moins chanceux et on du le refaire plusieures fois. Sans doute à cause de la nature zwave sur piles qui est toujours plus difficile à inclure (réveil) Maintenant vous pouvez faire sonner le carillon avec le code ci-dessous: fibaro:call(<IDCarillon>, "setValue", "255") Vous pouvez détecter un appui sur le bouton avec la scène suivante: --[[ %% properties <IDCarillon> value %% globals --]] if(tonumber(fibaro:getValue(<IDCarillon>, "value"))>0) then fibaro:debug("Actif"); else fibaro:debug("Inactif"); end note: je possède la version 1.1 Notification via GEA et envoi des photos des caméras: GEA.add({"Value+", id["SONNETTE"], 1}, -1, "Sonnette actionnée à #time# le #date#", {{"Portable", 53}, {"Portable", 104}, {"VirtualDevice", id["VD_PHOTO_SENDER"], "10"},}) Et voilà le travail:
  4. Fréquemment j'ai besoin taper une simple URL pour mettre à jour une VG, mettre à jour un label, recevoir l'état de mon IPX, tout en déclenchant un scénario ... mais mettre un place un script qui fait un POST sur une Variable Globale est un vrai calvaire car il faut passer par un système tiers (PHP, Java, ...). Et pourtant, Fibaro nous a donner un des outils les plus simples et surtout les plus utile ... les Virtual Devices. Et oui, cela peu surprendre mais saviez-vous que chaque label, slider d'un VD se comportent exactement comme une variable globale. C'est à dire : les données sont persistante (vous pouvez rebooter votre box, la donnée sera toujours là ) les données sont modifiables (via un scène ou un appel http .. nous y reviendrons) le changement de valeur active un trigger Allez passons au chose sérieuse. Donc si je résume cela veux dire que si je fait un appel HTTP GET pour changer un label et que le changement de ce dernier active un trigger, je peux donc ... heuuuu ... dire zut au variable globale. En effet, voici un exemple concret et simple : Créons un Virtuel Device avec un simple label que nous allons appeler ainsi : Label : V.Globales ID : VG Notons en passant l'ID de ce nouveau VD. Maintenant si depuis un navigateur, je tape cette URL, je vais changer la valeur de mon label : http://<user>:<password>@<IP_DE_MA_HC2>/api/callAction?deviceID=<ID_VD>&name=setProperty&arg1=ui.VG.value&arg2=<MaNouvelleValeur> Ok mais quel intérêt ? L'intérêt vient en ajoutant une scénario derrière tout cela : --[[ %% properties 484 ui.VG.value --]] actions = { ["ui.VG.value"] = function(values) for k,v in pairs(json.decode(values)) do if (fibaro:getGlobalValue(k) ~= v) then fibaro:setGlobal(k, v) end end end, } -- =============================== -- Démarrage du script -- =============================== local trigger = fibaro:getSourceTrigger() if (trigger.type == "property") then property = trigger.propertyName device = trigger.deviceID value = fibaro:getValue(device, property) actions[property](value) end Que va donc faire ce script et ben il va écouter si la valeur ui.VG.value de mon VG (484 chez moi) change et si elle change et bien il va lire la valeur et mettre à jour mes variables globales. En reprenant l'URL ci-dessus, en remplacant <MaNouvelleValeur> par un json au format simple {NomVariable:valeur, NomVariable2:valeur, ...} Exemples: {'Pushbullet':'Message'} {'Pushbullet':'Message', 'Chauffage':'Vacances} http://<user>:<password>@<IP_DE_MA_HC2>/api/callAction?deviceID=<ID_VD>&name=setProperty&arg1=ui.VG.value&arg2={'Pushbullet':'Message'} Et voilà , il ne reste plus qu'à "caché" le VD et la scène et vous avez un moyen simple de mettre à jour vos VG avec un simple GET HTTP. Pour allez plus loin, voici ma scène pour vous donner des idées Amusez-vous bien
  5. Script pour connaitre la capacité et être averti par e-mail en cas de "piles faibles" sur un ou des modules Créer une Scène en Lua et insérer ce code : --[[ %% properties %% globals --]] local batterieDevice = "1" local minbattSeuil = 70 -- Saisir le seuil mini d'alerte ici! local i = 0 local maxNodeID = 250 for i = 0, maxNodeID do local type = fibaro:get (i, "isBatteryOperated"); x , y = string.find (type, batterieDevice ) local niveauBatterie = tonumber(fibaro:getValue (i, "batteryLevel")) if x ~= nill and niveauBatterie ~= nill and (niveauBatterie <= minbattSeuil or minbattSeuil == 255) then local nom = fibaro:getName(i) fibaro:debug("Device "..i.."="..nom.." Niveau Batterie="..niveauBatterie) fibaro:call(4, "sendEmail", "Alerte Batterie", "Piles faibles module: "..nom) end end Vous avez juste à spécifier à partir de quel seuil vous souhaitez être averti . Dans cet exemple, je vais recevoir un mail pour chaque module en dessous de 70%.(changer l'ID "sendEmail" par celui souhaité) Vous pouvez aussi remplacer "sendEmail" par "sendPush" pour une notification Vous pouvez lancer la scène manuellement périodiquement . Personnellement, j'ai créé une autre scène qui exécute celle-ci tous les jours. Auteur original du script : Jompa68
  6. blackargent

    "lien" Fibaro-Jeedom

    Alors bonjour à tous, Voici une petite contribution de ma part pour ceux qui souhaitent coupler une box jeedom à la box fibaro. Le tuto ci-dessous vous permettra de récupérer l'état de vos périphériques ZWAVE sous FIBARO via l'api et les mettra à jour sous Jeedom. Perso, mon but est d'utiliser le mode plan que je trouve intéressant. Attention, vous n'aurez pas le contrôle de vos éléments!! C'est pas bien compliqué à rajouter le contrôle si vous le désirez, mais c'est plus compliqué à mettre en place de manière automatique avec mon script ci-dessous. Vous excuserez gentiment les fôtes de francé svp! Merci d'avance. Ah, une dernière chose, chez moi ça fonctionne très bien mais il se peut que ça plante chez vous, j'ai pas testé sur d'autres installations^^ Si ça bugg, vous apprendrez à faire sans ces prochaines lignes! Toutes les manipulations se font sous Jeedom (mais pourquoi il nous met ça sur un forum FIBARO lui?! ... euh... ) Au préalable, il faut installer les plugins "Scripts" et "Virtuel" Sous Virtuel - ajouter: Il faut aller jusqu'à fibaro_XXX_10. Pensez aussi à noter le premierID. Puis dupliquez avec le bouton se trouvant en haut à droite ("dupliquer"...) 10 fois (permet 100 périphériques!) Attention, il faut s'assurer que tous les ID se suivent et qu'entre chaque périphériques il y a +3 de différence. Sinon, faut recommencer. Chez moi, ça donne ça: Plugins - scripts - ajouter Pour le script - cliquer sur "nouveau" - FibaroLink.php (l'extension est importante!!!) et coller le code ici (qui a visiblement mal apprécié le copier-coller pour sa mise en forme): Il faut remplacer inscrire l'adresse IP de votre fibaro, le mot de passe admin de votre fibaro, le premier id virtuel sous votre JEEDOM (voir plus haut), votre api sous JEEDOM et l'url de votre JEEDOM. <?php set_time_limit(120); //lance le script jusqu'à 120 secondes //info à compléter $url_fibaro ="192.168.XXX.XXX"; $admin_fibaro ="admin"; $password_admin_fibaro ="PASSWORD"; $premier_id_device_virtuel = "306"; //premier ID virtuel se trouvant dans JEEDOM $api_jeedom = "API JEEDOM"; $url_jeedom = "192.168.XXX.XXX"; //ne pas toucher ce qui suit $url_jeedom_device = "http://" . $admin_fibaro . ":" . $password_admin_fibaro . "@" . $url_fibaro . "/api/devices/"; $url_jeedom_room = "http://" . $admin_fibaro . ":" . $password_admin_fibaro . "@" . $url_fibaro . "/api/rooms"; $json_jeedom_device = file_get_contents($url_jeedom_device); $json_jeedom_room = file_get_contents($url_jeedom_room); $data_json_jeedom = json_decode($json_jeedom_device, true); $data_json_jeedom_room = json_decode($json_jeedom_room, true,300); $premier_id_device_virtuel_avec_incrementation = $premier_id_device_virtuel; $nombre_incrémentation = "0"; //compte le nombre d'élément dans le tableau $nbre_element_json_jeedom = count($data_json_jeedom); $nbre_element_json_jeedom_room = count($data_json_jeedom_room); //SCRIPT PRINCIPAL //le script commence ici for($i=5;$i<$nbre_element_json_jeedom;$i++){ //vérifie si une propriété zwavecompagny exise | qu'il y a une valeur dans les propriétés zwave | que c'est pas un plugin if(isset($data_json_jeedom[$i]['properties']['zwaveCompany']) && isset($data_json_jeedom[$i]['properties']['value']) && $data_json_jeedom[$i]['isPlugin']==false){ //change de device virtuel sous jeedom après 20 exports if ($nombre_incrémentation==1*30 || $nombre_incrémentation==2*30 || $nombre_incrémentation==3*30 || $nombre_incrémentation==4*30 || $nombre_incrémentation==5*30 || $nombre_incrémentation==6*30 || $nombre_incrémentation==7*30 || $nombre_incrémentation==8*30 || $nombre_incrémentation==9*30 || $nombre_incrémentation==10*30 || $nombre_incrémentation==11*30 || $nombre_incrémentation==12*30 || $nombre_incrémentation==13*30 || $nombre_incrémentation==14*30 || $nombre_incrémentation==15*30){ $premier_id_device_virtuel_avec_incrementation=$premier_id_device_virtuel_avec_incrementation+2; } //envoie le nom de la pièce for($j=0; $j<$nbre_element_json_jeedom_room;$j++){ if($data_json_jeedom[$i]['roomID']==$data_json_jeedom_room[$j]['id']){ file_get_contents('http://' . $url_jeedom . '/core/api/jeeApi.php?apikey=' . $api_jeedom . '&type=virtual&id=' . urlencode($premier_id_device_virtuel_avec_incrementation) . '&value=' . urlencode($data_json_jeedom_room[$j]['name'])); } } $premier_id_device_virtuel_avec_incrementation++; $nombre_incrémentation++; //envoie le nom du device à jeedom file_get_contents('http://' . $url_jeedom . '/core/api/jeeApi.php?apikey=' . $api_jeedom . '&type=virtual&id=' . urlencode($premier_id_device_virtuel_avec_incrementation) . '&value=' . urlencode($data_json_jeedom[$i]['name'])); $premier_id_device_virtuel_avec_incrementation++; $nombre_incrémentation++; //envoie la valeur à Jeedom file_get_contents('http://' . $url_jeedom . '/core/api/jeeApi.php?apikey=' . $api_jeedom . '&type=virtual&id=' . urlencode($premier_id_device_virtuel_avec_incrementation) . '&value=' . urlencode($data_json_jeedom[$i]['properties']['value'])); $premier_id_device_virtuel_avec_incrementation++; $nombre_incrémentation++; } } ?> Pour automatiser ce script, j'ai dà» utiliser le crontab en ssh sur mon pi qui héberge JEEDOM. (Les identifiants SSH sont jeedom/Mjeedom96 de base) sudo chmod +x /usr/share/nginx/www/jeedom/plugins/script/core/ressources/FibaroLink.php sudo crontab -e */3 * * * * php /usr/share/nginx/www/jeedom/plugins/script/core/ressources/FibaroLink.php EDIT (à tester): Si nouvelle version de JEEDOM, il se peut que nginx ne foncitonne plus et que jeedom tourne sur apache2. Donc les commandes ci-dessus sont à remplacer par: sudo chmod +x /var/www/html/plugins/script/core/ressources/FibaroLink.php sudo crontab -e */3 * * * * php /var/www/html/plugins/script/core/ressources/FibaroLink.php (execute toutes les 3mn - vous avez la possibilité de modifier le /3 par /1 pour executer toutes les minutes si jamais) Voilà , ca doit marcher! Pour la suite, voici un petit exemple de ce que j'ai fait: Plugins - virtuel - ajouter Voilà , j'espère que ça sera utile à quelqu'un. Si ça ne l'est pas, j'aurai juste perdu 15minutes de ma vie à vous faire ces screenshots et ce texte. Amusez-vous bien avec tout ça! Dernière chose, feel free de changer mon code comme bon vous semble et/ou d'y apporter des améliorations^^ EDIT: Pour info, vous pouvez également changer dans le script php "set_time_limit(120)" à "set_time_limit(115)" et le crontab -e à 2mn au lieu de 3mn. Je l'ai fait chez moi et ça ne semble pas utiliser trop de ressources systèmes sur ma box FIBARO ou mon PI (JEEDOM). Vous gagnerez 1 mn pour la remontée des données!
  7. Voici un nouveau venu dans la série backup/restore. Avec ce couple scène / VD vous pourrez faire un backup (hors de votre HC2) de vos panneaux de chauffage (Heating Panels) et ensuite un restore sur une nouvelle box (ou après un recovery). Avec la scène en mode débug, on crée le backup des heating panels. Le système génère deux tables une pour la liste des Heating Panels et une autre avec la configuration de chaque heating panel On colle le résultat du debug de la scène dans le bouton restore du VD (que vous exportez sur votre disque dur). Créer manuellement autant de heating panels qu'il y en a à restaurer (car il n'est pas possible de prédire facilement (et de manière fiable) les ID qui seront générés par le système) Récupérer les ID de ces nouveau Heating Panels via http://<ip>/api/panels/heating Dans la table "ListeHP", remplacer les ID actuels par les nouveaux ID Appuyez sur le bouton restore. (Si vous lancez le restore en Debug, vous avez un débug détaillé de ce qu'il a fait). Ceci peut également être utilisé pour : (=> faites attention à ce que les noms repris dans les tables ListeHP et ConfigHP soient parfaitement identiques) Renommer un panneaux de chauffage Faire une copie d'un panneau de chauffage, et donc l'utiliser comme template d'un nouveau … PS : les instruction se trouvent également dans le Main Loop du VD v3:: correction bug API Backup_HeatPanel_v3.0.vfib Backup_HeatPanel_v3.0.lua Historique : v2 : Backup_HeatPanel_v2.0.lua Backup_HeatPanel_v2.0.vfib v1.1 : optimisation du code du bouton backup grâce à Steven Backup_HeatPanel_v1.1.vfib Backup_HeatPanel_v1.1.lua v 1.0 : Backup_HeatPanel_v1.0.vfib
  8. pinou

    Arrosage Des Plantes

    J'en ai marre de faire crever mes plantes une à une, tout ça parce que j’oublie de les arroser ! Comme j’ai pas envie de foutre entre 50 et 80 € par pot pour un koubachi ou un parrot flower power il me faut donc trouver une autre solution (autre que la plante en plastique !). Le besoin : J’aimerai être rappelé, à intervalle régulier, d’arroser les plantes. Bon pourquoi ne pas mettre tout simplement un rappel dans mon agenda alors ? Et bien parce que : 1) j’ai pas envie de blinder mon agenda avec des « arroser les plantes » toutes les semaines 2) je veux être rappelé tant que je n’ai pas arrosé les plantes et pas une seule fois. 3) je ne peux pas « acquitter » un rappel de mon agenda (justement pour arrêter d'être rappelé quand j'ai fait ce que je devais faire). 3) j’ai une box a 600 boules alors autant la faire bosser La solution envisagée : Pour en arriver a mes fins je suis passé par un petit module virtuel dont le principe est simple. 2 boutons : un qui permet d’acquitter le fait que j’ai arrosé les plantes et qui du coup calcul la prochaine échéance de l’arrosage. Un autre qui permet de me notifier sur mon téléphone via prowl, qu’il est temps d’arroser les plantes. C’est GEA (merci encore Steven) qui me sert de déclencheur pour la notification (j’avais pas envie de passer par le main loop du module ou par une autre scène pour faire ça alors que j’ai le GEA …) Installation : A/ Les variables globales : J’utilise 2 variables globales qui me permettent de stocker le moment ou j’ai arrosé les plantes et la prochaine échéance. Il s’agit respectivement des variables Arrose_Le et Date_Arrosage. B/ La notification : J’utilise prowl pour recevoir la notification par push sur mon téléphone. Prowl permettant d’envoyer des notification par le biais d’un email, j’ai donc créé un utilisateur dont l’adresse email est lié a ma Prowl API key. Il me suffit donc de notifier cet utilisateur par mail pour recevoir le push sur mon téléphone. Je suis passé par la car c’est super rapide a mettre en place, cette technique peut être utilisée aussi sur HCL et surtout parce que la notification via l’appli Fibaro me gonfle (ca marche …. ou pas, l’appli est longue a charger en roaming, etc.) C/ Le module virtuel : Je vous joint l’export de mon module. Sur le premier bouton, vous devez modifier la variable locale num_day comme bon vous semble. Il s’agit de la période entre deux arrosages. Dans mon cas je veux arroser mes plantes 1 fois par semaine (d’ou la valeur de 7). A chaque fois que ce bouton est déclenché, la date du prochain arrosage est calculée, sauvegardée dans la variable globale et les labels sont mis a jour pour afficher la date du dernier et du prochain arrosage. num_day = 7 arrose_le = os.time() prochain_arrosage = arrose_le + (num_day*24*60*60) selfId = fibaro:getSelfId() -- Sauvegarde de la dagte d'arrosage fibaro:setGlobal('Arrose_Le', arrose_le) -- Calcul de la prochaine date d'arrosage fibaro:setGlobal('Date_Arrosage',prochain_arrosage) -- Mise à jour des labels fibaro:call(selfId,"setProperty","ui.Label1.value", os.date("%d/%m/%Y",arrose_le)) fibaro:call(selfId,"setProperty","ui.Label2.value", os.date("%d/%m/%Y",prochain_arrosage)) Le second bouton permet d’envoyer la notification et de modifier l’icône du module afin d’attirer l’attention sur le fait qu’une action est en attente. Ici aussi il faudra modifier les identifiants correspondant a l'utilisateur et au message de notification (ou adaptez le code lua avec le mécanisme de notification qui vous convient). fibaro:call(88, "sendDefinedEmailNotification", "6"); Arrosage_Plantes.vfib D/ GEA : Pour GEA j’ai ajouté la ligne suivante : GEA.add({"Global-", "Date_Arrosage", os.time()}, 20*60, "", {{"VirtualDevice", id["VD_ARROSAGE_PLANTE"], "2"},{"Time", "19:00", "20:00"}}) Ca me permet d’être notifié toutes les 20min, entre 19h et 20h dès lors que la prochaine échéance d’arrosage est échue et que je n’ai toujours pas appuyé sur le bouton de mon module. Et voilà ,cette solution répond a mes attentes, et à la limite peut être déclinée pour d’autres besoins de rappels (sortir les poubelles, etc) …
  9. q.philippe

    Raccorder Myfox En Module Sur Fibaro

    Bon, la v4 se faisant désirer et après réflexion en cas de problème de diff serveurs,,,j'ai décidé de raccorder myFox avec des modules sur Fibaro physiquement. J'ai pris deux modules encastrable (1000w) di-o et un module FGS221 Fibaro. J'ai bien sure gardè les modules de Krikoff pour le sens Fibaro => MyFox. Le principe est que quand j'active myFox en partielle, cela active le module défini qui active S1 sur le FGS221. MyFox en Totale active S2. Après on définit par trois scènes (une partielle (s1 ON), une totale(s2 ON) et une désactivée (s1 et s2 OFF). Ce qui me permet de recevoir un push ou un SMS Free pour chaque changement et d’intégrer physiquement Fibaro sur myFox. Pour les changements intervenues sur Fibaro, J'ai le module de Krikoff, qui me permet de tout changement de Fibaro sur myFox. C'est physique en cas de coupure d'internet.
  10. Fredric

    Gestion Des États De Chauffage

    Je viens vous parler du mode de gestion que j’ai choisi mon chauffage. Mon habitation est chauffée à l’électricité, j’ai donc installé derrière chaque radiateur un FGS 221 qui commande le fils pilote. Je vais juste vous dire comment je change les températures par zones selon les états de la maison. J’ai créé pour chaque radiateur un VD avec 4 ordres « Confort », « Hors gel », « Eco » et « Arrêt » comme on peut le trouver un peut partout sur ce forum. (Si vous ne trouvez pas, demandez-moi) J’ai ensuite utilisé le VD de @Steven que vous trouverez ICI et je l’ai « un peut » modifié à mes besoins. J’ai créé trois variables, une par zone, les chambres, les pièces de vis et « le reste », j’ai appelé ces variables : RTC_Z1 pour la Zone 1, RTC_Z2 pour la Zone 2 et RTC_Z3 pour la Zone 3 (vous pouvez en créer autant que besoin). En suite, j’ai créé dans le panneau de chauffage, comme indiqué par @Steven dans son tuto, pas un panneau mais 11, selon vos besoin et j'ai relèvé les ID en notant à quel état ils correspondent. Exemple, quand je suis au travail, je veux une certaine gestion des mes chauffages, mais aussi quand je suis présent ou en vacances ou si j’ai des invités etc.… Tous ces états sont dans mes variables que j’utilise déjà comme beaucoup de monde, état de l’alarme, Travail, Vacances, Absent… (Pareil, pour ceux qui partent de zéro, me demander). J’ai créé une scène qui à en déclencheurs ces variables d’état. (Je vous poste ma scène qui à déjà plus d’un an, je suis en cours de modification de toutes mes scènes pour les optimiser, celle-ci y aura droit aussi mais vu qu’elle fonctionne parfaitement, elle attendra). J’ai mis les ID de chaque panneau de chauffage dans ma scène pour les associer aux variables (RTC_Z1 pour la Zone 1, RTC_Z2 pour la Zone 2 etc.…) selon les états. --[[ %% autostart %% properties %% events %% globals Aujourdhui AlarmeGenerale INV --]] local idm = { GENERAL = 442 } local sourceTrigger = fibaro:getSourceTrigger(); function check() local startSource = fibaro:getSourceTrigger(); if (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 0 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Active" ) then --travail fibaro:debug("Travail / Alarme active") fibaro:setGlobal("RTC_Z1", "3"); --ID Chauffage travail ZONE_1 fibaro:setGlobal("RTC_Z2", "876"); --ID Chauffage travail Zone_2 fibaro:setGlobal("RTC_Z3", "3"); --ID Chauffage travail ZONE_1 fibaro:setGlobal("RTC_SB", "8"); --ID Chauffage travail SB fibaro:setGlobal("RTC_Cellier", "7"); --ID Chauffage Cellier ValeurZ1 = ((fibaro:getGlobal('RTC_Z1'))) ValeurZ2 = ((fibaro:getGlobal('RTC_Z2'))) ValeurZ3 = ((fibaro:getGlobal('RTC_Z3'))) ValeurSB = ((fibaro:getGlobal('RTC_SB'))) Valeur_Cellier = ((fibaro:getGlobal('RTC_Cellier'))) fibaro:sleep(5*1000); fibaro:debug("Zone 1: "..ValeurZ1) fibaro:debug("Zone 2: "..ValeurZ2) fibaro:debug("Zone 3: "..ValeurZ3) fibaro:debug("Salle de Bain: "..ValeurSB) fibaro:debug("Cellier: "..Valeur_Cellier) fibaro:call(idm["GENERAL"], "pressButton", "1") elseif (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 1 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Active" ) then --CP fibaro:debug("CP / Alarme active") fibaro:setGlobal("RTC_Z1", "881"); --ID Chauffage Sortie Present fibaro:setGlobal("RTC_Z2", "881"); --ID Chauffage Sortie Present fibaro:setGlobal("RTC_Z3", "881"); --ID Chauffage Sortie Present fibaro:setGlobal("RTC_SB", "8"); --ID Chauffage travail SB fibaro:setGlobal("RTC_Cellier", "7");--ID Chauffage Cellier ValeurZ1 = ((fibaro:getGlobal('RTC_Z1'))) ValeurZ2 = ((fibaro:getGlobal('RTC_Z2'))) ValeurZ3 = ((fibaro:getGlobal('RTC_Z3'))) ValeurSB = ((fibaro:getGlobal('RTC_SB'))) Valeur_Cellier = ((fibaro:getGlobal('RTC_Cellier'))) fibaro:sleep(5*1000); fibaro:debug("Zone 1: "..ValeurZ1) fibaro:debug("Zone 2: "..ValeurZ2) fibaro:debug("Zone 3: "..ValeurZ3) fibaro:debug("Salle de Bain: "..ValeurSB) fibaro:debug("Cellier: "..Valeur_Cellier) fibaro:call(idm["GENERAL"], "pressButton", "1") elseif (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 2 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Active" ) then --Weekend fibaro:debug("Weekend / Alarme active") fibaro:setGlobal("RTC_Z1", "881"); --ID Chauffage Sortie Present fibaro:setGlobal("RTC_Z2", "881"); --ID Chauffage Sortie Present fibaro:setGlobal("RTC_Z3", "881"); --ID Chauffage Sortie Present fibaro:setGlobal("RTC_SB", "8"); --ID Chauffage travail SB fibaro:setGlobal("RTC_Cellier", "7"); --ID Chauffage Cellier ValeurZ1 = ((fibaro:getGlobal('RTC_Z1'))) ValeurZ2 = ((fibaro:getGlobal('RTC_Z2'))) ValeurZ3 = ((fibaro:getGlobal('RTC_Z3'))) ValeurSB = ((fibaro:getGlobal('RTC_SB'))) Valeur_Cellier = ((fibaro:getGlobal('RTC_Cellier'))) fibaro:sleep(5*1000); fibaro:debug("Zone 1: "..ValeurZ1) fibaro:debug("Zone 2: "..ValeurZ2) fibaro:debug("Zone 3: "..ValeurZ3) fibaro:debug("Salle de Bain: "..ValeurSB) fibaro:debug("Cellier: "..Valeur_Cellier) fibaro:call(idm["GENERAL"], "pressButton", "1") elseif (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 3 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Active" ) then --ferie fibaro:debug("ferie / Alarme active") fibaro:setGlobal("RTC_Z1", "874"); -- id du panneau de chauffage Alarme generale ABS fibaro:setGlobal("RTC_Z2", "874"); -- id du panneau de chauffage Alarme generale ABS fibaro:setGlobal("RTC_Z3", "874"); -- id du panneau de chauffage Alarme generale ABS fibaro:setGlobal("RTC_SB", "874"); -- id du panneau de chauffage Alarme generale ABS fibaro:setGlobal("RTC_Cellier", "874"); -- id du panneau de chauffage Alarme generale ABS ValeurZ1 = ((fibaro:getGlobal('RTC_Z1'))) ValeurZ2 = ((fibaro:getGlobal('RTC_Z2'))) ValeurZ3 = ((fibaro:getGlobal('RTC_Z3'))) ValeurSB = ((fibaro:getGlobal('RTC_SB'))) Valeur_Cellier = ((fibaro:getGlobal('RTC_Cellier'))) fibaro:sleep(5*1000); fibaro:debug("Zone 1: "..ValeurZ1) fibaro:debug("Zone 2: "..ValeurZ2) fibaro:debug("Zone 3: "..ValeurZ3) fibaro:debug("Salle de Bain: "..ValeurSB) fibaro:debug("Cellier: "..Valeur_Cellier) fibaro:call(idm["GENERAL"], "pressButton", "1") elseif (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 0 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Inactive" ) and ((fibaro:getGlobalValue("INV")) == "non" ) then --travail fibaro:debug("Travail / Alarme Inactive / Pas d'invités") fibaro:setGlobal("RTC_Z1", "882"); -- id du panneau de chauffage travail Present fibaro:setGlobal("RTC_Z2", "871"); -- id du panneau de chauffage Present fibaro:setGlobal("RTC_Z3", "882"); -- id du panneau de chauffage travail Present fibaro:setGlobal("RTC_SB", "879"); -- id du panneau de chauffage Present fibaro:setGlobal("RTC_Cellier", "7"); --ID Chauffage Cellier ValeurZ1 = ((fibaro:getGlobal('RTC_Z1'))) ValeurZ2 = ((fibaro:getGlobal('RTC_Z2'))) ValeurZ3 = ((fibaro:getGlobal('RTC_Z3'))) ValeurSB = ((fibaro:getGlobal('RTC_SB'))) Valeur_Cellier = ((fibaro:getGlobal('RTC_Cellier'))) fibaro:sleep(5*1000); fibaro:debug("Zone 1: "..ValeurZ1) fibaro:debug("Zone 2: "..ValeurZ2) fibaro:debug("Zone 3: "..ValeurZ3) fibaro:debug("Salle de Bain: "..ValeurSB) fibaro:debug("Cellier: "..Valeur_Cellier) fibaro:call(idm["GENERAL"], "pressButton", "1") elseif (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 1 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Inactive" ) and ((fibaro:getGlobalValue("INV")) == "non" ) then --CP fibaro:debug("CP / Alarme Inactive / Pas d'invités") fibaro:setGlobal("RTC_Z1", "6"); -- id du panneau de chauffage Present fibaro:setGlobal("RTC_Z2", "871"); -- id du panneau de chauffage Present fibaro:setGlobal("RTC_Z3", "6"); -- id du panneau de chauffage Present fibaro:setGlobal("RTC_SB", "879"); -- id du panneau de chauffage Present fibaro:setGlobal("RTC_Cellier", "7"); --ID Chauffage Cellier ValeurZ1 = ((fibaro:getGlobal('RTC_Z1'))) ValeurZ2 = ((fibaro:getGlobal('RTC_Z2'))) ValeurZ3 = ((fibaro:getGlobal('RTC_Z3'))) ValeurSB = ((fibaro:getGlobal('RTC_SB'))) Valeur_Cellier = ((fibaro:getGlobal('RTC_Cellier'))) fibaro:sleep(5*1000); fibaro:debug("Zone 1: "..ValeurZ1) fibaro:debug("Zone 2: "..ValeurZ2) fibaro:debug("Zone 3: "..ValeurZ3) fibaro:debug("Salle de Bain: "..ValeurSB) fibaro:debug("Cellier: "..Valeur_Cellier) fibaro:call(idm["GENERAL"], "pressButton", "1") elseif (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 2 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Inactive" ) and ((fibaro:getGlobalValue("INV")) == "non" ) then --Weekend fibaro:debug("Weekend / Alarme Inactive / Pas d'invités") fibaro:setGlobal("RTC_Z1", "6"); -- id du panneau de chauffage Present fibaro:setGlobal("RTC_Z2", "871"); -- id du panneau de chauffage Present fibaro:setGlobal("RTC_Z3", "6"); -- id du panneau de chauffage Present fibaro:setGlobal("RTC_SB", "879"); -- id du panneau de chauffage Present fibaro:setGlobal("RTC_Cellier", "7"); --ID Chauffage Cellier ValeurZ1 = ((fibaro:getGlobal('RTC_Z1'))) ValeurZ2 = ((fibaro:getGlobal('RTC_Z2'))) ValeurZ3 = ((fibaro:getGlobal('RTC_Z3'))) ValeurSB = ((fibaro:getGlobal('RTC_SB'))) Valeur_Cellier = ((fibaro:getGlobal('RTC_Cellier'))) fibaro:sleep(5*1000); fibaro:debug("Zone 1: "..ValeurZ1) fibaro:debug("Zone 2: "..ValeurZ2) fibaro:debug("Zone 3: "..ValeurZ3) fibaro:debug("Salle de Bain: "..ValeurSB) fibaro:debug("Cellier: "..Valeur_Cellier) fibaro:call(idm["GENERAL"], "pressButton", "1") elseif (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 3 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Inactive" ) then --ferie fibaro:debug("ferie / Alarme Inactive") fibaro:setGlobal("RTC_Z1", "874"); -- id du panneau de chauffage Alarme generale ABS fibaro:setGlobal("RTC_Z2", "874"); -- id du panneau de chauffage Alarme generale ABS fibaro:setGlobal("RTC_Z3", "874"); -- id du panneau de chauffage Alarme generale ABS fibaro:setGlobal("RTC_SB", "874"); -- id du panneau de chauffage Alarme generale ABS fibaro:setGlobal("RTC_Cellier", "874"); -- id du panneau de chauffage Alarme generale ABS ValeurZ1 = ((fibaro:getGlobal('RTC_Z1'))) ValeurZ2 = ((fibaro:getGlobal('RTC_Z2'))) ValeurZ3 = ((fibaro:getGlobal('RTC_Z3'))) ValeurSB = ((fibaro:getGlobal('RTC_SB'))) Valeur_Cellier = ((fibaro:getGlobal('RTC_Cellier'))) fibaro:sleep(5*1000); fibaro:debug("Zone 1: "..ValeurZ1) fibaro:debug("Zone 2: "..ValeurZ2) fibaro:debug("Zone 3: "..ValeurZ3) fibaro:debug("Salle de Bain: "..ValeurSB) fibaro:debug("Cellier: "..Valeur_Cellier) fibaro:call(idm["GENERAL"], "pressButton", "1") elseif (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 0 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Inactive" ) and ((fibaro:getGlobalValue("INV")) == "oui" ) then --travail fibaro:debug("Travail / Alarme Inactive / Invité present") fibaro:setGlobal("RTC_Z1", "875"); -- id du panneau de chauffage Ivités fibaro:setGlobal("RTC_Z2", "875"); -- id du panneau de chauffage Ivités fibaro:setGlobal("RTC_Z3", "875"); -- id du panneau de chauffage Ivités fibaro:setGlobal("RTC_SB", "875"); -- id du panneau de chauffage Ivités fibaro:setGlobal("RTC_Cellier", "7"); --ID Chauffage Cellier ValeurZ1 = ((fibaro:getGlobal('RTC_Z1'))) ValeurZ2 = ((fibaro:getGlobal('RTC_Z2'))) ValeurZ3 = ((fibaro:getGlobal('RTC_Z3'))) ValeurSB = ((fibaro:getGlobal('RTC_SB'))) Valeur_Cellier = ((fibaro:getGlobal('RTC_Cellier'))) fibaro:sleep(5*1000); fibaro:debug("Zone 1: "..ValeurZ1) fibaro:debug("Zone 2: "..ValeurZ2) fibaro:debug("Zone 3: "..ValeurZ3) fibaro:debug("Salle de Bain: "..ValeurSB) fibaro:debug("Cellier: "..Valeur_Cellier) fibaro:call(idm["GENERAL"], "pressButton", "1") elseif (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 1 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Inactive" ) and ((fibaro:getGlobalValue("INV")) == "oui" ) then --CP fibaro:debug("CP / Alarme Inactive / Invité present") fibaro:setGlobal("RTC_Z1", "875"); -- id du panneau de chauffage Ivités fibaro:setGlobal("RTC_Z2", "875"); -- id du panneau de chauffage Ivités fibaro:setGlobal("RTC_Z3", "875"); -- id du panneau de chauffage Ivités fibaro:setGlobal("RTC_SB", "875"); -- id du panneau de chauffage Ivités fibaro:setGlobal("RTC_Cellier", "7"); --ID Chauffage Cellier ValeurZ1 = ((fibaro:getGlobal('RTC_Z1'))) ValeurZ2 = ((fibaro:getGlobal('RTC_Z2'))) ValeurZ3 = ((fibaro:getGlobal('RTC_Z3'))) ValeurSB = ((fibaro:getGlobal('RTC_SB'))) Valeur_Cellier = ((fibaro:getGlobal('RTC_Cellier'))) fibaro:sleep(5*1000); fibaro:debug("Zone 1: "..ValeurZ1) fibaro:debug("Zone 2: "..ValeurZ2) fibaro:debug("Zone 3: "..ValeurZ3) fibaro:debug("Salle de Bain: "..ValeurSB) fibaro:debug("Cellier: "..Valeur_Cellier) fibaro:call(idm["GENERAL"], "pressButton", "1") elseif (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 2 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Inactive" ) and ((fibaro:getGlobalValue("INV")) == "oui" ) then --Weekend fibaro:debug("Weekend / Alarme Inactive / Invité present") fibaro:setGlobal("RTC_Z1", "875"); -- id du panneau de chauffage Ivités fibaro:setGlobal("RTC_Z2", "875"); -- id du panneau de chauffage Ivités fibaro:setGlobal("RTC_Z3", "875"); -- id du panneau de chauffage Ivités fibaro:setGlobal("RTC_SB", "875"); -- id du panneau de chauffage Ivités fibaro:setGlobal("RTC_Cellier", "7"); --ID Chauffage Cellier ValeurZ1 = ((fibaro:getGlobal('RTC_Z1'))) ValeurZ2 = ((fibaro:getGlobal('RTC_Z2'))) ValeurZ3 = ((fibaro:getGlobal('RTC_Z3'))) ValeurSB = ((fibaro:getGlobal('RTC_SB'))) Valeur_Cellier = ((fibaro:getGlobal('RTC_Cellier'))) fibaro:sleep(5*1000); fibaro:debug("Zone 1: "..ValeurZ1) fibaro:debug("Zone 2: "..ValeurZ2) fibaro:debug("Zone 3: "..ValeurZ3) fibaro:debug("Salle de Bain: "..ValeurSB) fibaro:debug("Cellier: "..Valeur_Cellier) fibaro:call(idm["GENERAL"], "pressButton", "1") end setTimeout(check, 60*1000) end local startSource = fibaro:getSourceTrigger(); if (startSource["type"] == "other") then check(); end Dans chaque pièces dotés d’un radiateur, j’ai mis un VD de @Steven qui commande le premier VD avec 4 ordre de la pièce. Avec une modification, Au lieu de : Heating.stefa = 1 -- id du panneau de chauffage Je mets : ValeurZ1 = ((fibaro:getGlobal('RTC_Z1'))) Heating.stefa = ValeurZ1 -- id du panneau de chauffage normal Bien sà»r, c’est à vous de mettre la bonne variable selon la pièce, RTC_Z1 si la pièce est en zone 1. L’idée, c’est quand votre maison change d’état, je prends la mise sous alarme pour exemple, La variable « Alarmegeneral » passe de « Inactive » à « Active » alors la variable « RTC_Z1 prend l’ID « 3 », la RTC_Z2 prend l’ID « 876 » etc.. et les chauffages chauffe en fonction des températures qui sont dans le panneau de chauffage correspondant à l’ID. De cette façon, on peut vraiment personnaliser au plus proche de ses besoins. c'est tout bête mes cela fonctionne très bien. deux captures d'écran pour vous donner une idée: Enjoy
  11. Fredric

    Vmc Sauter Classic (Atlantic)

    Voici ce que j'ai mis en place pour ma VMC. @Did a fait un TUTO sur le sujet ICI : Mon TUTO est moins général, il concerne mon modèle de VMC, une SAUTER classic (ou ATLANTIC). Pour domotiser cette VMC, j’utilise un FGS221, un contacteur modulaire FINDER 22.21.8.230.4000. Voici le schéma de branchement d’origine de cette VMC : Dans la logique, j’aurais pu utiliser seulement le FGS221 mais le fait d’enclencher la deuxième vitesse, collé son relais sortie O2 et il fallait attendre longtemps pour que cela revienne à la normal ! (J’en ai même un qui est parti en SAV). Schéma suivant à ne pas faire!!! Ce pourquoi, je rajoute un contacteur modulaire qui lui, va très bien ! Voici mon schéma final : Et voici mon code pour la deuxième vitesse pour WAF dans un VD: j'ai créé un VD avec deux bouton, le premier avec le code suivant, pour faire variable la vitesse 2 selon l'état: local idm = {VMC = 510, VMC2 = 512, VD_Imperihome = 807} local application = function (vitesse, actionmodule, etat, var, idicone, texte, imperi) fibaro:debug(vitesse) fibaro:call(idm[actionmodule], etat) fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", idicone) fibaro:setGlobal("Etat_VMC", var) fibaro:setGlobal("Message", imperi) fibaro:call(idm["VD_Imperihome"], "pressButton", "1"); if texte ~= "" then HC2 = Net.FHttp("192.168.1.26", 8080) response = HC2:GET(texte) end end fibaro:sleep(3000) fibaro:setGlobal("Message", "" ); --raz variable local situation = { ["10"] = function() application("vitesse 2", "VMC2", "turnOn", "V2", 1177, "/sarah/parle?phrase=VMC+en+grande+vitesse", "VMC en grande Vitesse") end, ["11"] = function() application("vitesse normale", "VMC2", "turnOff", "ON", 1176, "/sarah/parle?phrase=VMC+en+vitesse+nornale", "VMC en Vitesse normale") end, ["00"] = function() application("vitesse normale", "VMC", "turnOn", "ON", 1176, "/sarah/parle?phrase=Démarrage+de+la+VMC", "Démarrage de la VMC") end, ["01"] = function() application("VMC OFF", "VMC2", "turnOff", "OFF", 1233, "/sarah/parle?phrase=VMC+éteinte", "VMC éteinte") end, } local status, err, value = pcall(situation[fibaro:getValue(idm["VMC"], "value") .. fibaro:getValue(idm["VMC2"], "value")]) if not (status) then fibaro:debug("<font color=\"red\">" .. os.date() .. " Erreur d'exécution" .. "</font>") end et dans le deuxième bouton j'ai mis ce code, pour allumer ou éteindre la VMC: local idm = {VMC = 510, VMC2 = 512, VD_Imperihome = 807} local application = function (vitesse, actionmodule, etat, var, idicone, texte, imperi) fibaro:debug(vitesse) fibaro:call(idm[actionmodule], etat) fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", idicone) fibaro:setGlobal("Etat_VMC", var) fibaro:setGlobal("Message", imperi) fibaro:call(idm["VD_Imperihome"], "pressButton", "1"); if texte ~= "" then HC2 = Net.FHttp("192.168.1.26", 8080) response = HC2:GET(texte) end end fibaro:sleep(3000) fibaro:setGlobal("Message", "" ); --raz variable local situation = { ["1"] = function() application("VMC OFF", "VMC", "turnOff", "OFF", 1233, "/sarah/parle?phrase=Arrêt+de+la+VMC", "Arrêt de la VMC") end, ["0"] = function() application("VMC ON - vitesse normale", "VMC", "turnOn", "ON", 1176, "/sarah/parle?phrase=Démarrage+de+la+VMC", "Démarrage de la VMC") end, } local status, err, value = pcall(situation[fibaro:getValue(idm["VMC"], "value")]) if not (status) then fibaro:debug("<font color=\"red\">" .. os.date() .. " Erreur d'exécution" .. "</font>") end Après, on peut gérer par GEA selon le l'humidité des pièces etc.. des Icônes: Enjoy Merci à @trankill666 pour son code que j'ai adapté à mes besoins
  12. Le but de ce tutoriel est de vous présenter 2 solutions pour remplacer l'antenne d'origine par une antenne avec gain. Cette nouvelle antenne "amplifiée" vous permettra d'augmenter la portée du signal Z-Wave et ainsi, de réduire les nÅ“uds morts. A ce stade, 2 solutions existent et dépendent de l’actuel emplacement de votre HC2 : Baie informatique Autre : placard, bureau... . Solution pour une baie informatique : Tout d'abord, il vous faudra vous procurer le matériel suivant : Adaptateur RP SMA femelle => SMA mâle (http://www.amazon.fr...8081_TE_3p_dp_1) Socle magnétique RP SMA (http://www.amazon.fr...0444391_TE_item) Antenne 868 Mhz (http://www.amazon.fr...8081_TE_3p_dp_1) Une fois le matériel en votre possession, il vous faudra réaliser les opérations suivantes: On stoppe proprement la HC2. On coupe les disjoncteurs sur lesquels se trouve vos modules. On démonte l'antenne d'origine. On visse l'adaptateur RP SMA femelle/mâle sur la sortie antenne de la HC2. On visse la nouvelle antenne sur le socle magnétique. On visse la rallonge du socle magnétique sur l'adaptateur vissé précédemment (étape 4). On redémarre la HC2. On patiente le temps que cette dernière réalise son redémarrage complet. On remet en tension tous les disjoncteurs coupés à l'étape 2. On patiente quelques minutes le temps que la HC2 réalise son nouveau maillage du réseau Z-Wave. Enjoy! Solution pour les autres emplacements : Tout d'abord, il vous faudra vous procurer le matériel suivant : Antenne coudée 868 Mhz (http://my-domotique.com/store/index.php?id_product=582&controller=product&id_lang=2)Une fois le matériel en votre possession, il vous faudra réaliser les opérations suivantes: On stoppe proprement la HC2. On coupe les disjoncteurs sur lesquels se trouve vos modules. On démonte l'antenne d'origine. On visse la nouvelle antenne sur la HC2. On redémarre la HC2. On patiente le temps que cette dernière réalise son redémarrage complet. On remet en tension tous les disjoncteurs coupés à l'étape 2. On patiente quelques minutes le temps que la HC2 réalise son nouveau maillage du réseau Z-Wave. Enjoy! Je remercie Nico, KriKroff, Lazer et BenjyNet pour leur aide apportée à mon problème de perte de réseau Z-Wave sur ma HC2. Ce tutoriel fait suite à ce dernier : http://www.domotique-fibaro.fr/index.php/topic/2475-perte-de-r%C3%A9seau-z-wave/
  13. VD - Visualisation Detection Ouverture , Detection de mouvements, Variable Globale Ce VD ou virtual devices a pour but de regrouper plusieurs VD dont celui de @STEVEN Virtual Device : Variables Globales Je remercie STEVEN pour son code qui ma inspiré pour les autres affichage http://www.domotique-fibaro.fr/index.php/topic/4205-virtual-device-variables-globales/ Cette visionneuse affichera : La dernière détection d'un capteur d'ouverture avec le temps écoulé (Max 10 modules) La dernière détection d'un capteur de détection de mouvement avec le temps écoulé (Max 10 modules) Les 10 dernières variable globales (Ce code appartient a STEVEN) Toute ces données seront triés par ordre chronologique Visualisation des Capteurs d'ouverture code lua : local id = fibaro:getSelfId() fibaro:call(id,"setProperty","ui.LabType.value", "Capteur Ouverture") HC2 = Net.FHttp("127.0.0.1",11111) response = HC2:GET("/api/devices") local Ouverture = {} local t = json.decode(response) local j = 0 for i = 1, #t do if t[i].visible == true and t[i].type == "com.fibaro.doorSensor" then local HeureModif = t[i].properties.lastBreached local heure = os.time() local TempEcoule = os.difftime(heure, HeureModif)-3600 table.insert(Ouverture, {t[i].name, t[i].id, TempEcoule}) --fibaro:debug(t[i].name.." id : "..t[i].id..t[i].properties.lastBreached) end end table.sort(Ouverture, function(a, return a[3]<b[3] end) -- Display results local id = fibaro:getSelfId() local cpte = 0 for i = 1, 10 do pcall(function() fibaro:debug(i.." - "..Ouverture[i][2]) cpte = i if Ouverture[i][3] > 3600*24 then fibaro:debug(i .. " id=" .. Ouverture[i][1] .. " - Value=" .. os.date("%j jours %X", Ouverture[i][3]) ) fibaro:call(id, "setProperty", "ui.Label"..i..".value", Ouverture[i][1] .. " = " .. " ".. os.date("%j jours %X", Ouverture[i][3])) else fibaro:call(id, "setProperty", "ui.Label"..i..".value", Ouverture[i][1] .. " = " .. " ".. os.date("%X", Ouverture[i][3])) end end) end for i = cpte+1, 10 do fibaro:debug("i= "..i) fibaro:call(id, "setProperty", "ui.Label"..i..".value", "") end Visualisation des Capteurs de mouvement code lua : local id = fibaro:getSelfId() fibaro:call(id,"setProperty","ui.LabType.value", "Detection Mouvements") HC2 = Net.FHttp("127.0.0.1",11111) response = HC2:GET("/api/devices") local Ouverture = {} local t = json.decode(response) local j = 0 for i = 1, #t do if t[i].visible == true and t[i].type == "com.fibaro.motionSensor" or t[i].type == "com.fibaro.FGMS001" then local HeureModif = t[i].properties.lastBreached local heure = os.time() local TempEcoule = os.difftime(heure, HeureModif)-3600 local RoomName = fibaro:getRoomName(fibaro:getRoomID(t[i].id)) fibaro:debug(RoomName) table.insert(Ouverture, {t[i].name, t[i].id, TempEcoule, RoomName}) --fibaro:debug(t[i].name.." id : "..t[i].id..t[i].properties.lastBreached) end end table.sort(Ouverture, function(a, return a[3]<b[3] end) -- Display results local cpte = 0 for i = 1, 10 do pcall(function() fibaro:debug(i.." - "..Ouverture[i][4]) cpte = i if Ouverture[i][3] > 3600*24 then fibaro:debug(i .. " id=" .. Ouverture[i][1] .. " - Value=" .. os.date("%j jours %X", Ouverture[i][3]) ) fibaro:call(id, "setProperty", "ui.Label"..i..".value", Ouverture[i][1] .. " = " .. " ".. os.date("%j jours %X", Ouverture[i][3])) else fibaro:call(id, "setProperty", "ui.Label"..i..".value", Ouverture[i][4] .. " - ".. Ouverture[i][1] .. " = " .. " ".. os.date("%X", Ouverture[i][3])) end end) end for i = cpte+1, 10 do fibaro:debug("i= "..i) fibaro:call(id, "setProperty", "ui.Label"..i..".value", "") end Visualisation des Capteurs de mouvement de @steven Visualisation Libre ce bouton est reservé pour votre imagination si il reste vide ....... tanpis pour vous La mainloop ou boucle principale Sorry local NumBouton = { ["Capteur Ouverture"] = 12, ["Detection Mouvements"] = 13, ["Variables Globale"] = 15 } local SelfId = fibaro:getSelfId() local Nom = fibaro:getValue(SelfId, "ui.LabType.value") local bouton = NumBouton[Nom] fibaro:debug(bouton) fibaro:call(SelfId, "pressButton", bouton) La visualisation ce fera toute les 3s on peut augmenter ce parametre en ajoutant un sleep Fichier a télécharger : Visionneuse_v01b.vfib Liens vers mes autres tutos : Classer Les Jours Du Mois Par Nom (Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche) ICI Visualisation Des Températures ICI Surveillance Free Memory Hc2 ICI Visualisation Iosdevice Smartphone, Iphone Etc... ICI Visualiser Les 10 Dernières Ouverture De Porte ICI Faire Une Copie De La Clef Usb Recovery Sous Windows ICI Tout Sur Le Déclenchement D'une Scéne En Lua (By Steven) ICI Paramétrage D'un Module (Fonctions Générales) ICI Module Virtuel - Le Slider De A À Z (Image + Codes Lua) ICI Universel Pour Volets Roulant ICI Ouverture, Fermeture, Allumer, Éteindre (Volets, Lumiére En Une Scéme) ICI Crée Une Variable Globale Ou Une Variable Globale Predefinie En Lua ICI Sceneactivation Et Module Compatible (Déclenchement D'une Scéne Avec Un Bouton) ICI Les Variables - Complément D'information By Steven ICI/ Lua - Programmation La Règle De 3 By Steven ICI Module Virtuel - Utilisation D'un Label ( Étiquette ) ICI Module Virtuel - Numérotation Des Boutons ICI Lua - Connaitre Le Dernier Id Et Le Nombres De Modules ICI Clé Usb Recovery Explication En Image De La Fat32 ICI Wol Avec Xpenoboot Dsm 5.1 ( Nas Synology ) ICI Module Virtuel - Crée Automatiquement Des Variables Globales ICI
  14. Berale64

    Coupatan

    Aller, un petit gadget pour les vacances. Vous vous souvenez peut être de ces minuteur mécanique que l'on trouvait dans les cuisines pour surveiller le temps de cuisson. Tous les scripts que l'on fait démarrent à heure fixe pour un temps donné. Je voulais quelque chose comme un coupatan. Je définis le temps et je démarre maintenant. C'est ce que j'ai fait. Deux étiquettes : Temps et Device. Pour le temps, il y avait la solutions des sliders, mais j'ai préféré des boutons cumulables. Si je clique sur 10, puis sur 5 et enfin deux fois sur 1 j'obtiens 17. Trois boutons pour les trois devices que je veux contrôler avec ce VD. (Il manque vraiment un truc du genre io.read chez Fibaro). Le device choisi est affiché dans l'étiquette. Un bouton Start, un Stop si besoin est, et un Reset pour remettre le temps à zero. Le temps sera mis à jour dans l'étiquette "Temps" toutes les 10 secondes ainsi que dans la petit bande "Log" en bas du VD pendant l'éxécution. Il faut créer deux variables globales "Timer" et "TimerID". A vous d'adapter les boutons des devices. Enjoy ! Timer.vfib PS: rien dans le main loop, c'est trop merd... que !
  15. Suite aux nombreuses questions de nouveaux utilisateurs de la HC2, je vous propose un petit tutoriel sur la gestion manuelle de "modes" dans la maison. Dans mon exemple, il y a 5 modes déclenchant chacun une scène différente (les modes étant "In" (Présence), "Out" (Absence), "Sleep" (Dodo), "Wake Up" (Réveil) et TV. Vous pouvez envisager bien d'autres scénarios (soirée romantique, fiesta à la maison...) mais voici ceux par lesquels j'avais commencé mon implémentation domotique. La première chose est de créer une variable globale qui enregistrera le statut de la maison. Il faut donc aller dans Panneaux > Panneau Variables puis créer une nouvelle variable prédéfinies en cliquant sur Ajouter. Il faut rentrer un nom (en faisant bien attention à la casse (Majuscule, minuscule)) car cela pourrait avoir un impact dans vos scènes puis rentrer les différents modes. Afin de gérer des cas d'erreur, j'ai également créer pour cette variable une valeur "Default" que je détaillerais après. Une fois la variable créée, il faut créer un nouveau VD (Virtual Device). Pour le faire il faut aller dans Modules > Ajouter un Périphérique Virtuel. En allant dans l'onglet Avancé, renseignez un nom, une pièce si vous le souhaitez. En dessous, choisissez le nombre de boutons que vous voulez faire apparaître puis cliquer sur "Ajouter un réglage". Vous vous retrouvez en dessous avec le paramétrage de ces boutons. Il suffit de répéter l'opération plusieurs fois pour obtenir plusieurs lignes comme dans l'exemple ci-dessous. Dans chacun des boutons, nous allons mettre à jour le statut de la maison en modifiant la valeur de la variable globale. Pour le faire, nous allons utiliser comme exemple l'instruction qui pour le bouton 'In' affectera la valeur In à 'Mode_Maison' (il faut également bien cocher "Code Lua" en bas des propriétés du bouton) fibaro:setGlobal('Mode_Maison','In') Afin de gérer le cas, ou nous voudrions rappuyer sur le bouton In une deuxième fois, nous allons passer par la valeur "Default" évoqué plus haut. Avec le code ci-dessous : local value = fibaro:getGlobal('Mode_Maison') if (value == 'In') then fibaro:setGlobal('Mode_Maison','Default') end fibaro:setGlobal('Mode_Maison','In') J'ai été amené à rajouter ce code car le mode TV éteignait certaines lumières, hors si quelqu'un avait rallumé la lumière avec un interrupteur entre temps, la scène ne se déclenchait pas car la variable était déjà en "Mode : TV". Le fait de repasser par le statut "Default" permet simplement de redéclencher la scène TV même si elle était déjà en mode "TV" au préalable. Une fois que vous avez créé l'ensemble de vos boutons et mis à jour la valeur des différents modes, il faut créer les scènes spécifiques à chaque mode. Afin de faciliter la maintenance, j'ai choisi de créer une scène LUA par mode. Pour le faire, il suffit d'aller dans Scène > Ajouter une scène (Dans mon cas, j'ai utilisé du LUA mais vous pouvez également utiliser les scènes en mode bloc) Ici, un exemple de code qui éteint 2 interrupteurs : --[[ %% properties %% globals --]] -- Liste des interrupteurs local interId = {39,104} fibaro:debug('TV Mode') -- Arrêter les interrupteurs for i = 1, #interId do fibaro:call(interId[i], 'turnOff') end Vous noterez que je n'ai rien mis sous properties, ni sous globals. En effet je ne souhaitais pas que l'ensemble des scènes se déclenchent lorsque la variable Mode_Maison a été mise à jour. J'ai donc créer une scène principale qui se charge de lancer la bonne scène. Ce code utilise l'instruction fibaro:startScene(XX) Ou XX correspond au numéro de la scène à lancer (Vous trouvez l'ID dans l'onglet Général de vos scènes). Le code prend donc la forme ci-dessous : --[[ %% properties %% globals Mode_Maison --]] local valueHouseMode = fibaro:getGlobal('Mode_Maison') fibaro:debug(valueHouseMode) if (valueHouseMode=='Out') then fibaro:debug('Out Scene') fibaro:startScene(10) elseif (valueHouseMode=='TV') then fibaro:debug('TV Scene') fibaro:startScene(11) else fibaro:debug('Switch Error') end Ce code est appelé à chaque fois que la variable "Mode_Maison" est modifiée grâce aux lignes : --[[ %% properties %% globals Mode_Maison --]] Puis nous récupérons, la valeur de "Mode_Maison" : local valueHouseMode = fibaro:getGlobal('Mode_Maison') Avant d'être testée pour lancer la scène qui nous intéresse fibaro:debug('TV Scene') fibaro:startScene(18) Et voilà , vos scènes se lancent en fonction du changement de mode de votre maison. Vous pouvez bien évidemment compléter les différents modes en rajoutant des if / elseif en fonction de vos attentes. Il y a bien évidemment plusieurs solutions pour arriver à ce résultat, mais j'ai considéré que c'était la manière la plus propre afin de limiter le nombre d'instances lancées en simultanées. N'hésitez pas à me faire part de vos remarques si certaines parties ne sont pas claires afin que je complète ce tutoriel qui a pour but de s'adresser aux débutants.
  16. JossAlf

    Module Virtuel Maison

    Voici une petite idée de module virtuel pour avoir une vision globale de l'état de la maison. Il me permet de vérifier quelques variables et de passer la maison dans différents modes. Je ne mets pas le code car les boutons consistent essentiellement en de la simulation de clic : -- Active le mode normal du MV Mode maison fibaro:call(77, "pressButton", "2"); ou de la mise à jour de variable et de l'affichage du label : fibaro:setGlobal("Occupation", "Present"); fibaro:setSceneEnabled(19,false); fibaro:call(72, "setProperty", "ui.Label5.value", "Présent"); Le module évoluera en fonction de mon installation. Il m'est très utile depuis le téléphone pour vérifier que mes variables sont à jour ou pour passer la maison en absence rapidement pour aller faire quelques courses... Vous voyez que chez moi il fait 22,3°C (ouche ! le soleil tape) et que le thermostat est réglé sur 20,5°C avec une consigne passée à 20,5°C. Si vous avez d'autres idées pour compléter je suis preneur.
  17. Visualiser les 10 dernières ouverture de Porte Je remercie @steven car ce VD est une adaptation de son VD Variables Globales Ce virtual devices affiche la dernière détection avec le temps écoulé des captures comme on peu le voir dans l'interface Les informations sont récuperer directement via l'api il peut y avoir quelques soucis si un modules et déclarer comme detecteur de porte alors qu'il ne l'ai pas Ouverture_porte_v0.2b.vfib
  18. Visualisation des Températures par ordres décroissant Ce VD va vous permettre de visualiser toutes les sondes de température Il suffit d'importer le VD pour que cela fonctionne Fichier à télécharger : Mise a jours version 0.90b : Temperature_v0.9b.vfib
  19. Connaitre le dernier ID et le Nombres de Modules Comment connaitre le nombres de modules installer sur notre Box ? C'est très simple il suffit d’interroger la box via l'api "/api/devices" Exemples : Dans un module virtuel : local HC2 = Net.FHttp("127.0.0.1", 11111) local reponse = HC2:GET("/api/devices") local TousLesModules = json.decode(reponse) fibaro:debug("Nombres de modules : " ..#TousLesModules) Dans une Scéne : local TousLesModules = api.get("/devices/") fibaro:debug("Nombres de modules : " ..#TousLesModules) Le caractère "#" devant le nom de la tables ici " TousLesModules " permet de donner le nombres d'entrée de la table Dans cette exemple cela nous donnera le nombres de Modules. Le chiffre que j'obtiens doit donc correspondre au dernier ID ? OUI : Si ne n'ai supprimer aucun modules Non : Si j'ai supprimer des modules Je m'explique lors que l'on crée ou ajoute de nouveau modules les ID croitre chronologiquement ainsi que le nombres d'entrés dans ma table. Par contre si je supprime un module cela va supprimer une entrée dans ma table mais les ID ne bougeront pas ce qui va créé un décalage entre le nombre d'entrée dans ma table et les numéro d'ID. Comment faire pour résoudre ce probléme ? C'est très simple puisque l'on connait le nombre d'entrée dans la table et que l'on sait que le dernier ID ce trouve a la fin de cette table on va donc récuperer l'ID de la dernière entrée Exemple : Dans un module virtuel : local HC2 = Net.FHttp("127.0.0.1", 11111) local reponse = HC2:GET("/api/devices") local TousLesModules = json.decode(reponse) local IdEnd = TousLesModules[#TousLesModules].id fibaro:debug("Nombres de modules : " ..#TousLesModules) fibaro:debug("Dernier ID : "..IdEnd) Dans une scéne : local TousLesModules = api.get("/devices/") local IdEnd = TousLesModules[#TousLesModules].id fibaro:debug("Nombres de modules : " ..#TousLesModules) fibaro:debug("Dernier ID : "..IdEnd) A partir de maintenant nous savons comment connaitre le dernier ID de notre BOX. Une autre solution aurait était d'utiliser ce code. Exemple : Dans un module virtuel : local HC2 = Net.FHttp("127.0.0.1", 11111) local reponse = HC2:GET("/api/devices") local TousLesModules = json.decode(reponse) local IdEnd = TousLesModules[#TousLesModules].id fibaro:debug("Nombres de modules : " ..#TousLesModules) fibaro:debug("Dernier ID : "..IdEnd) for i,v in ipairs(TousLesModules) do local Nom = TousLesModules[i].name local visible = TousLesModules[i].visible if visible == true then local id = TousLesModules[i].id fibaro:debug("Id = "..id.." - Nom = "..Nom) end end Dans une scéne : local TousLesModules = api.get("/devices/") local IdEnd = TousLesModules[#TousLesModules].id fibaro:debug("Nombres de modules : " ..#TousLesModules) fibaro:debug("Dernier ID : "..IdEnd) for i,v in ipairs(TousLesModules) do local Nom = TousLesModules[i].name local visible = TousLesModules[i].visible if visible == true then local id = TousLesModules[i].id fibaro:debug("Id = "..id.." - Nom = "..Nom) end end On s' aperçois qu'en utilisant " for i,v ipairs " on n'a pas besoin de connaitre le dernier ID pour afficher toute la table Par contre si on utilise ce genre de code nous aurons besoin du dernier ID Exemple dans un VD : Je veux connaitre tous les ID de mes Volets local HC2 = Net.FHttp("127.0.0.1", 11111) local reponse = HC2:GET("/api/devices") local Modules = json.decode(reponse) local Var_Id = {"Tous"} local IdEnd = Modules[#Modules].id fibaro:debug("IdEnd "..IdEnd) for i = 3, IdEnd do local theType = string.sub(fibaro:getType(i), 12,15) local Var_Name = fibaro:getName(i) if (theType == 'FGRM') then local t_id = #Var_Id + 1 table.insert(Var_Id, t_id, tonumber(i)) fibaro:debug("Type : "..theType..' - Volets ID '..i .." = "..Var_Name) end end
  20. Cet après midi, j'ai eu le support Fibaro qui s'est connecté sur ma box pour voir pourquoi elle plantait une fois par semaine.... "Coup de bol" elle a planté pendant que ils étaient occupé à regarder... Diagnostic: trop de requètes... Ah bon, cà d ? Vous avez trois Virtual device qui font du polling. Ah bon, lesquels ? les 1322 1458 et 1856 font des requêtes toutes les 3 secondes... Heuu... et c'est trop ? Essayez de diminuer pour voir... Bon, on va pas discuter de ça ici mais je me suis donc mis en tête de diminuer les requêtes. Effectivement on n'en a besoin que lorsque l'on regarde le VD, le reste du temps... ça tourne pour rien. J'ai donc cherché un moyen de pouvoir mélanger en même temps l'update rapide quand on regarde et l'update lent quand il dort. Pour l'update rapide, j'ai bricolé un truc avec un slider, qui me permet de demander un update unique ou de décider facilement d'une durée de mise à jour. - si on clique sur le slider entre 0 et 10, ça fait une mise à jour unique - si on clique sur le slider entre 10 et 99, ça lance une série de 89 updates à une fréquence définie dans le script du slider - Si 89 updates ne suffisent pas, il y a un "multiplicateur" qui permet de multiplier les 89 updates par ce que l'on veut. 10 donne 890 updates... - Si on change le nombre d'updates automatiques, ou que l'on passe en manuel, l'instance s'arrête et une autre commence avec les nouvelles valeurs. Votre code à rafraîchir lors de chaque loop est à mettre dans la fonction refresh_datas à la ligne 20 Pour l'update lent, via mainloop, j'utilise un bout de code de @steven (encore lui) ;-) qui me semble être particulièrement bien foutu et qui ne charge pas la box. le main loop simule un clic sur le slider en position 1. mais cela ne perturbe pas le décompte automatique s'il y en avait un en cours. Voici à quoi ça ressemble: Je vous ai même concocté tout ça dans un vfib rien que pour ne pas vous fatiguer V1.1: Fast_Updates V1.1.vfib Et voici les scripts: Script du slider: local selfId = fibaro:getSelfId() local ValeurSlider = _sliderValue_ --fibaro:getValue(selfId, "ui.Slider1.value") local sleepAndcheckslider, ValeurSliderBeforeSleep, ValeurSliderSleep, multiplier_loop, lastCheck, position local multiplier = 4 -- number of slider value (10 to 99) so 89 values max. To have 356 loops, set multiplier to 4 local sleepBetweenUpdates = 200 -- 1000 = +- 1 second waiting time between each refresh_datas -- Put your refresh code in the function refresh_datas (line 84) sleepBetweenUpdates = sleepBetweenUpdates/50 function getSlider() ValeurSliderfunct = fibaro:getValue(selfId, "ui.updateauto.value") return tonumber(ValeurSliderfunct) end function setSlider(position) fibaro:call(selfId, "setProperty", "ui.updateauto.value", position) -- fibaro:call(selfId, "setSlider", 25, position) -- set and execute return getSlider() end function refresh_datas() ------------------------------------ YOUR CODE HERE ----------------------------------------- fibaro:call(selfId, "setProperty", "ui.example.value", os.date("%d/%m/%y %H:%M:%S")) ----------------------------------- END OF YOUR CODE ---------------------------------------- end if ValeurSlider == 1 then -- Main loop refresh refresh_datas() fibaro:debug("Main loop refresh at "..os.date("%d/%m/%y %H:%M:%S")) lastCheck = "Last Update: " ..os.date("%d/%m/%y %H:%M:%S") fibaro:call(selfId, "setProperty", "ui.updateStatus.value", lastCheck) end if (ValeurSlider < 10 and ValeurSlider > 1) or (ValeurSlider == 0) then -- Manual refresh ValeurSlider = setSlider(0) fibaro:call(selfId, "setProperty", "ui.updateStatus.value", "Updating Once") fibaro:debug("Manual refresh at "..os.date("%d/%m/%y %H:%M:%S")) refresh_datas() lastCheck = "Last Update: " ..os.date("%d/%m/%y %H:%M:%S") fibaro:sleep(1000) fibaro:call(selfId, "setProperty", "ui.updateStatus.value", lastCheck) fibaro:sleep(1000) end ValeurSlider = getSlider() while ValeurSlider > 10 do -- Automatic refresh setSlider(ValeurSlider) multiplier_loop = 0 while multiplier_loop < multiplier do refresh_datas() multiplier_loop = multiplier_loop + 1 fibaro:call(selfId, "setProperty", "ui.updateStatus.value", "Updates left: "..((ValeurSlider*multiplier)-(10*multiplier))) sleepAndcheckslider = 0 ValeurSliderBeforeSleep = ValeurSlider --fibaro:debug("Silder Value before sleep: " .. ValeurSliderBeforeSleep) while sleepAndcheckslider <= 50 do fibaro:sleep(sleepBetweenUpdates) ValeurSliderSleep = getSlider() if ValeurSliderSleep == 1 then -- if it's the VD main loop pushing the slider, ignore and set value before ValeurSlider = ValeurSliderBeforeSleep setSlider(ValeurSlider) end if ValeurSliderSleep ~= ValeurSliderBeforeSleep then multiplier_loop = multiplier ValeurSlider = 1 end -- chack if slider value not changer between wait (to avoid multiple instances) sleepAndcheckslider = sleepAndcheckslider+1 end end ValeurSlider = ValeurSlider - 1 if ValeurSlider == 10 -- 3600 = 2h then fibaro:debug("End of automatic refresh at "..os.date("%d/%m/%y %H:%M:%S")) ValeurSlider = setSlider(0) lastCheck = 'Last Update: ' ..os.date("%d/%m/%y %H:%M:%S") fibaro:call(selfId, "setProperty", "ui.updateStatus.value", lastCheck) end end Script main loop: -- FAST UPDATES by sjauquet -- V1.1 13/11/2015 --local Verification = fibaro:get(selfId,"TCPPort") -- 1ère fois que le main loop s'exécute, on crée une variable nommée "instance" car elle n'existe pas. Elle existera au 2ème passage donc ne sera pas recrée. if (not instance) then -- on indique la fréquence d'execution souhaitée (en minutes) instance = { lastrun = 0, every = 1 } fibaro:debug("first run") end -- on vérifie la différence entre cette exéction et la dernière (stocké dans instance.lastrun) diff = os.date("*t", os.difftime(os.time(), instance.lastrun)) -- si la différence en minutes et supérieure ou égale à la fréquence souhaitée (instance.every) if (diff.min >= instance.every) then -- TON CODE --- local selfId = fibaro:getSelfId(); local position = 1; fibaro:call(selfId, "setSlider", 2, position); -- set and execute -- FIN DE TON CODE --- -- on stock l'heure de la nouvelle exécution instance.lastrun = os.time() fibaro:debug("executed") end
  21. sebcbien

    Yams - Yet Another Meteo Station

    Bonjour, Je crée ce petit fil pour publier mes modifications du plugin météo de Steven. Voici à quoi ça ressemble: Voici la version de Steven: (chez moi le mm de pluie ne fonctionnent pas) http://www.domotique-fibaro.fr/index.php/topic/1211-support-gea/page-220#entry92618 Et voici ma version modifiée qui pousse les résultats dans 3 Variables Globales (à créer) afin de pouvoir être utilisées ailleurs comme par exemple dans GEA. voici le fichier du VD: Prévision_Météo.vfib et le screenshot: Pour la configuration, il suffit donc de créer les 3 VG non prédéfinies: Meteo_Lendemain Meteo_Actuelle Meteo_Actuelle_Jou et de mettre le nom de la ville ici: local ville = "bruxelles" Voici le code principal pour info: local ville = "bruxelles" local Meteo_Actuelle_Local = " " local Meteo_Lendemain_Local = " " local Meteo_Actuelle_Journee_Local = " " local dateTag = os.date("%H:%M", os.time()) -- ================================== -- local URL = Net.FHttp("www.prevision-meteo.ch") response, status, errorCode = URL:GET("/services/json/" .. ville) local jsonTable = json.decode(response) local lieu = jsonTable.city_info.name .. " ["..jsonTable.city_info.elevation.. "m]" local current = jsonTable.current_condition.condition -- conditions actuelle local current_journee = jsonTable.fcst_day_0.condition -- conditions générale de la journée local temp = jsonTable.current_condition.tmp .. "°C ["..jsonTable.fcst_day_0.tmin .. "°/" .. jsonTable.fcst_day_0.tmax.."°]" local Meteo_Day = jsonTable.fcst_day_0.day_long local Meteo_Time = "["..jsonTable.current_condition.hour.."]" local pluie = 0 local snow = false for k, v in pairs(jsonTable.fcst_day_0.hourly_data) do if (tonumber(v.APCPsfc) > 0) then pluie = pluie + tonumber(v.APCPsfc) fibaro:debug("Pluie à "..k.." - Total du jour: "..pluie.."mm") end if v.ISSNOW == 1 then snow = true fibaro:debug("K: "..k.." = !! NEIGE !!") end end pluie = pluie .. " " if (snow) then pluie = pluie .. "!! NEIGE !!" end local id = fibaro:getSelfId() fibaro:call(id, "setProperty", "ui.Label1.value", lieu) fibaro:call(id, "setProperty", "ui.Label2.value", current_journee) fibaro:call(id, "setProperty", "ui.Label3.value", current) fibaro:call(id, "setProperty", "ui.Label4.value", temp) fibaro:call(id, "setProperty", "ui.Label5.value", pluie.." mm") Meteo_Actuelle_Local = Meteo_Time.." Météo Actuelle: "..current.." T°: "..temp.." Pluie: "..pluie.." mm" fibaro:setGlobal("Meteo_Actuelle", Meteo_Actuelle_Local) fibaro:debug(dateTag .." "..Meteo_Actuelle_Local) Meteo_Actuelle_Journee_Local = Meteo_Time.." Météo de ce "..Meteo_Day..": "..current_journee.." T°: "..temp.." Pluie: "..pluie.." mm" fibaro:setGlobal("Meteo_Actuelle_Jou", Meteo_Actuelle_Journee_Local) fibaro:debug(dateTag .." "..Meteo_Actuelle_Journee_Local) current = jsonTable.fcst_day_1.condition temp = "["..jsonTable.fcst_day_1.tmin .. "°/" .. jsonTable.fcst_day_1.tmax.."°]" Meteo_Day = jsonTable.fcst_day_1.day_long pluie = 0 snow = false for k, v in pairs(jsonTable.fcst_day_1.hourly_data) do if (tonumber(v.APCPsfc) > 0) then pluie = pluie + tonumber(v.APCPsfc) fibaro:debug("Pluie à "..k.." - Total du jour: "..pluie.."mm") end if v.ISSNOW == 1 then snow = true fibaro:debug("K: "..k.." = !! NEIGE !!") end end pluie = pluie .. " " if (snow) then pluie = pluie .. "!! NEIGE !!" end fibaro:call(id, "setProperty", "ui.Label6.value", current) fibaro:call(id, "setProperty", "ui.Label7.value", temp) fibaro:call(id, "setProperty", "ui.Label8.value", pluie.." mm") Meteo_Lendemain_Local = Meteo_Time.." Météo de demain "..Meteo_Day..": "..current.." T°: "..temp.." Pluie: "..pluie.." mm" fibaro:setGlobal("Meteo_Lendemain", Meteo_Lendemain_Local) fibaro:debug(dateTag .." ".. Meteo_Lendemain_Local) Et pour finir, voici le code GEA pour exploiter tout ceci: Je l'ai écrit de cette manière qu'il n'y a pas de push si on n'est pas à la maison et uniquement une seule fois par jour chaque météo (du jour et du lendemain) - la météo du jour est poussée sur le smartphone au matin au moment ou on désactive le mode nuit pour savoir le temps lorsque l'on s'habille) - la météo du lendemain est poussée le soir au retour sur le smartphone afin de savoir le temps du lendemain pour préparer les vêtements des enfants avant de les mettre au lit. afin de me passer de VG, j'ai ajouté un petit délai, donc mettre ça en fin de liste GEA local estAt_Home = {"Global", "PresentState", "At_Home"} local estAway = {"Global", "PresentState", "Away"} local est_AtHome_Or_Kids_Sleeping = {"Global", "PresentState", "Kids_Sleeping|At_Home"} ---------------------METEO---------------------- -- Météo soir 10 min après retour maison (away pendant plus de 30 minutes) isLongAwayOff = false GEA.add(estAway, 30*60, "", {{"function",function() isLongAwayOff = true end}}) GEA.add({estAt_Home,{"Global!", "Meteo_Lendemain", ""},{"function",function() return isLongAwayOff end}}, 10*60, "#value[2]#",{{"Time", "17:00", "20:30"},{"Portable", id["PHONE_SEB"]},{"Portable", id["PHONE_GG"]},{"function",function() isLongAwayOff=false end}}) ------------------------------ -- Météo matin Instantanée au changement de presentState GEA.add({est_AtHome_Or_Kids_Sleeping}, -1, "",{{"function",function() fibaro:debug(" ------- waiting 1 s for PrevisousState dependent actions ------") end},{"function",function() fibaro:sleep(1100) end}}) GEA.add({est_AtHome_Or_Kids_Sleeping,{"Global!", "Meteo_Actuelle_Jou", ""},{"Global", "PreviousState", "Night_All_Off"}}, -1, "#value[2]#",{{"Portable", id["PHONE_SEB"]},{"Portable", id["PHONE_GG"]}}) -- !!!!!!!!!!! LES ACTIONs instantanées placées CI DESSOUS AURONT UN DELAI DE 1,1 A CHAQUE CHANGMENT de PresentState = à At_Home ou Kids_Sleepin !!!!!!!!!! ------------- La variable globale previousState est définie par la scène ci-dessous, qui permet au script de savoir dans quel état se trouvait la maison juste avant le changement de la VG PresentState Pour cela il faut crée une VG PreviousState (de préférence prédéfinie) Connaitre l'état précédent de la maison peut être utile a de nombreuses occasions dont ici la météo. Mais je l'utilise aussi pour différencier si la maison est au réveil ou au passage en mode nuit etc. Ce n'est pas nécessaire donc mais utile pour une meilleure domotisation avec moins de notifications inutiles, actions à réaliser manuellement. --[[ %% properties %% globals PresentState --]] local This_Instance_State = fibaro:getGlobalValue("PresentState"); fibaro:debug(os.date("%a %d/%m", os.time()).." new start with PresentState = " .. This_Instance_State); while This_Instance_State == fibaro:getGlobalValue("PresentState") do fibaro:sleep(1000); --fibaro:debug("waiting with this instance = "..This_Instance_State) end fibaro:setGlobal("PreviousState", This_Instance_State); fibaro:debug(os.date("%a %d/%m", os.time()).." Exit With PreviousState set at: ".. This_Instance_State);
  22. Bonjour a tous, Ci-dessous un petit tuto afin de detecter si vous êtes chez vous ou non, le principe repose comme d'autres tutos sur la connection du smartphone sur le wifi. Il n'y a nul besoin d'avoir une application installé sur le téléphone. J'ai réalisé des tests avec un smartphone android et iphone4 sous IOS8 Fonctions: 1) Identifier si le ou les smartphones se connectent au réseau wifi. 2) Renseigner une variable de la HC2 sur "Absent" ou "Present". 3) A partir des états des variables pouvoir lancer des scènes. Prérequis: - Linux (genre un raspberry ou ubuntu), fonctionne également sur syno avec la nouvelle fonction docker - Smartphone android ou iphone - une HC2 Remerciements: Merci a sebcbien pour ses icons et ses idées: son post ici Merci a Tony270570 pour son tuto, la plupart de ce tuto a été un "copier/coller" du sien: son post ici Actions a réaliser sur la HC2: 1/ Créer un variable prédéfini avec le nom de votre choix (ex: presence_vince) avec 2 valeurs, Les majuscules sont importantes: - Absent - Present 2/ Ajouter les icones joint a ce post 3/ Créer un virtual device avec le fichier joint a ce post. Modifier dans le main loop les infos suivantes: - Modifier le nom de la variable que vous avez défini ci-dessus. - Modifier le numéro de l'icone pour la fonction "present" et "absent". Actions a réaliser sur le server linux: Télécharger l'application ici wget http://www.overlooksoft.com/getfing4arm Installer fing sudo dpkg -i overlook-fing-2.2.deb Installer les librairies complémentaires sudo apt-get install libpcap* Créer le répertoire hébergent le script sudo mkdir /home/hc2 Création du script de test de connexion wifi et le paramétrer Créer le fichier sudo nano test_presence_vince.sh vous pouvez biensur remplacer le nom du script, il n'a aucune importance mis a part s'y retrouver copier le script ci-dessous dans le fichier #!/bin/bash # Script check IP and update HC2 global variable # Never ending loop # version 1.00 # Author: byackee # Original Author: Tony270570 nomvariable="Presence_vince" login="admin" password="votre mot de passe" hc2ip="192.168.0.3" while : do grep -n "<center>UP</TD><TD>192.168.2.83" /var/www/ping/lan.html if [ $? -eq 0 ] then curl -s -X PUT -d '{"value": "Present"}' http://$login:$password@$hc2ip/api/globalVariables/$nomvariable echo "present" sleep 10 else curl -s -X PUT -d '{"value": "Absent"}' http://$login:$password@$hc2ip/api/globalVariables/$nomvariable echo "absent" sleep 10 fi done Il faut modifier les variables en début de script: nomvariable ==> nom de la variable créé sur la HC2 login ==> login de la HC2 password ==> mot de pass de la HC2 hc2ip ==> adresse ip de la HC2 lancer la commande suivante: sudo chmod 755 « test_presence_vince Les opérations ci-dessus peuvent etre réalisées autant de fois que de personnes/smartphones a tester Créer un script pour le lancement des scripts au boot Créer le fichier sudo nano exec_presence Copier le code suivant dans le fichier #! /bin/sh ### BEGIN INIT INFO # Provides: exec_presence # Required-Start: $all # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: # Short-Description: Run /home/HC2/test_presence if it exist ### END INIT INFO # version 1.00 # Author: byackee # Original Author: Tony270570 PATH=/sbin:/usr/sbin:/bin:/usr/bin . /lib/init/vars.sh . /lib/lsb/init-functions scriptpath="/home/hc2/" do_start() { for i in $scriptpath"/"* ; do echo "lancement du script: "$i $i & sleep 2 done } case "$1" in start) do_start ;; restart|reload|force-reload) echo "Error: argument '$1' not supported" >&2 exit 3 ;; stop) ;; *) echo "Usage: $0 start|stop" >&2 exit 3 ;; esac donner les droits et l'autorisation de lancement du script au démarrage sudo chmod 755 exec_presence update-rc.d -f exec_presence defaults 7/ créer un script de demarrage de fing Créer le fichier sudo nano startfing et y copier le code suivant #! /bin/sh ### BEGIN INIT INFO # Provides: startfing # Required-Start: $all # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: # Short-Description: Run fing with unlimited loop ### END INIT INFO # version 1.00 # Author: byackee # Original Author: Tony270570 PATH=/sbin:/usr/sbin:/bin:/usr/bin . /lib/init/vars.sh . /lib/lsb/init-functions do_start() { fing -n 192.168.2.0/24 -o table,html,/var/www/ping/lan.html & } case "$1" in start) do_start ;; restart|reload|force-reload) echo "Error: argument '$1' not supported" >&2 exit 3 ;; esac Il faut simplement modifier l'adresse IP de votre reseau. donner les droits et l'autorisation de lancement du script au démarrage sudo chmod 755 startfing update-rc.d -f startfing defaults Voila maintenant votre/vos smartphone sont détectés lors de la connexion au wifi. Le délai peut varié mais il est en générale de 20 a 30s. icons: Presence_So.vfib
  23. Bonjour, Je reviens sur un tuto proposé par Steven sur la génération d'ID pour le GEA. http://www.domotique-fibaro.fr/index.php/topic/3477-g%C3%A9n%C3%A9rateur-did-pour-gea-ou-autre-script/?hl=%20local%20%20doit Mon problème est que depuis la V4 et le manque de template (j'ai beaucoup de devices Aeons Labs), je suis amené à faire des reconfigure (le soft reconfigure ne marchant pas toujours) faisant que mes devices changent d'ID. Ayant aussi une slave HC2, le lien s'étant perdu aussi quelques fois, l'ensembles des ID était changé une fois la slave reconnectée. Cela devenait un vrai casse tête pour modifier l'ensemble des VD et scenes. Ce que est constant chez moi, ce sont les noms ! Donc l'idée est de pouvoir appeler les devices par leur nom, pas par leur ID. Je suis donc reparti du script de Steven pour stoker dans une variable globale tous les ID et les noms, permettant ensuite dans le code de faire appel au device par son nom. La solution se compose donc : - d'une variable globale idTable à créer - un script de génération de cette variable (voir plus bas) - d'une fonction de decode de la variable globale en entête de vos scripts/VD : idALL=json.decode(fibaro:getGlobal('idTable')) - et finalement de l'appel à l'ID de module idALL["NOM_DU_MODULE"] dans chaque call : exemple : fibaro:call(tonumber(idALL["NOM_DU_MODULE"]), "turnOff") Même si le problème est déplacé vers le fait qu'il faut retenir les noms (j'utilise le script original de Steven pour en avoir la liste une fois pour toute gardé dans un fichier word), je peux dire qu'au bout de 3 mois, cela a changé ma vie. Ce n'est bien sà»r utile que si vous faites évoluer votre installation, ou avez des besoins de reconfigurer ou de tester la V4... Ce n'est donc sans doute pas adapté à tout le monde. Limitations : - Le seul endroit où les id sont encore nécessaires, c'est en entête de scenes pour les déclencheurs - cela ne marche qu'en V4, car les V3 ne permet pas d'avoir des variables avec une longue string (je sais pas la limite). En v4, j'en ai pas vu le bout :-) Voici le script. Encore merci à Steven --[[ %% properties %% globals --]] local hidden = false --- true pour exporter les devices cachés local dead = false -- true pour exporter les devices morts local excludeType = {"com.fibaro.zwaveDevice", "weather", "HC_user", "iOS_device", "com.fibaro.voipUser"} local excludeID = {} local devicesJSon = api.get("/devices") local devices = {} local names = {} local rooms = {} function addName(name, roomname) if (type(names[name]) == "nil") then names[name] = true return name else return addName(name.."_"..roomname, roomname) end end function getRooms() local roomsJSon = api.get("/rooms") rooms[0] = "inconnu" for k, v in ipairs(roomsJSon) do rooms[v.id] = v.name end end function rename(name, roomname) local name = name:upper():gsub("[éêèà«]", "E"):gsub("EE", "E"):gsub("[à»à¼ù]", "U"):gsub("UU", "U"):gsub("[à âà¤]", "A"):gsub("AA", "A"):gsub("[à¶ô]", "O"):gsub("OO", "O"):gsub("[îà¯]", "I"):gsub("II", "I"):gsub("%W", "_") local roomname = roomname:upper():gsub("[éêèà«]", "E"):gsub("EE", "E"):gsub("[à»à¼ù]", "U"):gsub("UU", "U"):gsub("[à âà¤]", "A"):gsub("AA", "A"):gsub("[à¶ô]", "O"):gsub("OO", "O"):gsub("[îà¯]", "I"):gsub("II", "I"):gsub("%W", "_") return addName(name, roomname) end getRooms() for k, v in pairs(devicesJSon) do local doit = (hidden or v.visible) and (dead or not v.dead) if (doit) then for h, w in pairs(excludeType) do if (v.type == w) then doit = false end end if (doit) then for h, w in pairs(excludeID) do if (v.id == w) then doit = false end end end end if (doit) then table.insert(devices, v) end end table.sort(devices, function(a, return a.roomID<b.roomID end) local result = "<BR><BR>-- IDs générés le : " .. os.date("%d/%m/%y à %X") local room = -1 local lastinfo = ""; result = result .. "<BR><BR>local id = {" resultVar = "{" for k, v in ipairs(devices) do if (room ~= v.roomID) then room = v.roomID result = result .. "<BR>--"..rooms[v.roomID].."<BR>" end lastinfo = rename(v.name, rooms[v.roomID]) result = result .. lastinfo .. " = " .. v.id .. ", " resultVar = resultVar .. '"'..lastinfo .. '":' .. v.id .. "," end result = result .. "<BR>}" result = result .. "<BR>" result = result .. "<BR>-- usage :" result = result .. "<BR>-- fibaro:getValue(id[\""..lastinfo .."\"], \"value\")" result = result .. "<BR>-- GEA.add(id[\""..lastinfo .."\"], 30, \"\")" resultVar = resultVar .. '"FIN":999}' --print(result) fibaro:setGlobal("idTable", resultVar) -- TEST local id=json.decode((fibaro:getGlobal('idTable'))); print(fibaro:getGlobal('idTable'))
  24. Zorgonaute84

    Virtual Device Wunderground

    Je partage avec vous un "autre" module virtual device pour Wunderground. C'est une version simplifié des autres modules déja existant, mais qui a le mérite de répondre a mon besoin et peut-être au votre. Je précise que j'ai utilisé des extraits de code d'autres modules Wunderground pour constituer celui-ci. Le module : WU_Weather.vfib Et les icones : Pour configurer le module, il faut ajouter au variable du bouton rafraichir vos informations : local username = "Votre Login"; local password = "Votre mot de passe"; local APIkey = "Votre clef API"; -- API Key obtenue sur Wunderground local StationID = "Le Station ID"; -- The PWS location to get data for (Personal Weather Station) local station = "pws"; -- Inscrire si il s'agit d'une station "pws" ou "locid" Vous avez besoin d'un compte chez Wunderground, donc il faut renseigner le login et le mot de passe pour commencer. Ensuite vous devez demander un clef API sur Wunderground, c'est gratuit et rapide, vous êtes juste limité en nombre de requête par jour, c'est pour ça que le module ne se rafraîchie que toutes les 5 minutes. Et enfin vous devez indiquer le code de la station que vous souhaitez suivre. Pour le trouver c'est simple, il faut aller sur le site de Wunderground, afficher la station qui vous interesse, et le stationID se trouve dans la barre d'adresse. Il faut également indiquer le type de station, "pws" quand il s'agit d'une station personnel ou "locid" pour les stations officiel. Idem l'info se trouve dans la barre d'adresse. Ensuite, toujours dans le code du bouton rafraichir il faut modifier le numéro des icones. Car vos icones n'auront pas les même numéros. Vous devez donc tous les importer, reperer leur numéro et mettre a jour cette partie du code : function getIcon(Ciel) if(Ciel == "clear") then return 1070 elseif(Ciel == "mostlysunny") then return 1071 elseif(Ciel == "partlycloudy") then return 1072 elseif(Ciel == "mostlycloudy") then return 1073 elseif(Ciel == "cloudy") then return 1074 elseif(Ciel == "rain") then return 1076 elseif(Ciel == "snow") or (Ciel == "sleet") or (Ciel == "flurries") then return 1077 elseif(Ciel == "tstorms") then return 1079 else return 1080 end end
  25. HANSOLO

    Lampe Hue Piloté Par Fgd211

    Une petite scène sans prétention. Mon objectif est de synchroniser une lampe HUE Livingcolors Iris posée dans un coin du salon avec un module FGD211 pilotant deux lampes LED dans le salon. Les lampes HUE sont bien mais pas pratique s'il faut sortir le smartphone pour allumer ou régler la lampe. Du coup avec ma scène l'intensité de la HUE suit celle du FGD211. --[[ %% properties 54 value %% globals --]] local huelightid=3 local hueuser = "newdeveloper"; local hueIP = "192.168.0.12"; local huePort = 80; local hueColor = 36980; local hueSat = 49; local IDlum_Salon = 54; local ValeurDim = tonumber(fibaro:getValue(IDlum_Salon, 'value')); local Bri = math.floor(ValeurDim * 2.55); local Data = '{"on":false}'; if Bri > 0 then Data = '{"on":true, "sat":'..hueSat..', "bri":'..Bri..', "hue":'..hueColor..'}' end fibaro:debug(Data) local httpClient = net.HTTPClient(); httpClient:request('http://'..hueIP..':'..huePort..'/api/'..hueuser..'/lights/'..huelightid..'/state', { success = function(response) if tonumber(response.status) == 200 then print("Updated at " .. os.date()); else print("Error " .. response.status) end end, error = function(err) print('error = ' .. err) end, options = { method = 'PUT', data = Data } }); A adapter selon votre environnement: En entête 54 value : ID de mon FGD211 hueLightid = 3 N° de la lampe HUE à piloter (j'ai deux autres HUE) hueuser = "newdeveloper" à laisser si vous n'avez pas défini de user sur hueIP = "192.168.0.12" IP du pont HUE huePort = 80 à laisser tel quel hueColor = 36980 à adapter selon la couleur désirée hueSat = 49 à adapter selon la saturation désirée de la couleur IDlum_Salon = 54 ID du FGD211
×