Lazer Posté(e) le 9 janvier 2018 Signaler Posté(e) le 9 janvier 2018 Ce sujet épinglé en haut de page est une référence de bout de code "snipet" partagé par les utilisateurs. Les règles à respecter sont les suivantes : 1 message = 1 extrait de code aucune discussion, aucun support, les "mauvais" messages seront effacés formalisme du code : on partage le code LUA, avec en commentaire les arguments et le retour attendu : --[[ ================================================================== Encodage / Décodage en base 64 ================================================================== Description : Utilitaire pour l'encodage / décodage en base 64 Utilisé fréquement pour encoder les login:password ================================================================== Support : [X] Scénario [ ] VD Firmware requis : 4.x Auteur : Trouvé sur le web (nom des fonctions adaptées pour plus de lisibilité) ------------------------------------------------------------------ Functions : encode : encode une chaîne de caractère en base64 decode : décode une chaîne de caractère précédement encodée ================================================================== --]] -- --------------------------------------------------------------- -- function : encode -- --------------------------------------------------------------- -- paramètres : -- data : chaîne à encodé -- retour : chaîne encodée en base64 -- --------------------------------------------------------------- function encode(data) -- ... end -- --------------------------------------------------------------- -- function : decode -- --------------------------------------------------------------- -- paramètres : -- data : chaîne encodée -- retour : chaîne en claire -- --------------------------------------------------------------- function decode(data) -- ... end Et on donne un exemple d'utilisation : -- Exemple d'encodage print(encode('domotique.fibaro@gmail.com:motdepasse')) -- Résuitat [DEBUG] 17:02:52: ZG9tb3RpcXVlLmZpYmFyb0BnbWFpbC5jb206bW90ZGVwYXNzZQ== -- Exemple de décodage print(decode('ZG9tb3RpcXVlLmZpYmFyb0BnbWFpbC5jb206bW90ZGVwYXNzZQ==')) -- Résultat dans le Debug [DEBUG] 17:02:52: domotique.fibaro@gmail.com:motdepasse 6
pepite Posté(e) le 8 février 2018 Signaler Posté(e) le 8 février 2018 --[[ ============================================ Envoi "Notifs" dans Centre de Notification ============================================== Description : -> Permet d'envoyer des messages au centre de notification de la HC2 ============================================== Support : [X] Scénario [X] VD Firmware requis : 4.x Auteur : Certainement @tinman ----------------------------------------------- Functions : doNotify: envoi de l'alerte au centre de notification ============================================== ]] - --------------------------------------------------------------- -- function : doNotify -- --------------------------------------------------------------- -- paramètres : -- Title : Titre de la notification -- priority : Type de notification : alert (red)|warning (yellow)| info (yellow) -- text : Texte de la notification -- devid : id du module concerné par la notification -- retour : Affichage sur l'interface web de la notifcation -- --------------------------------------------------------------- function doNotify(title, priority, text, devid) api.post('/notificationCenter', { type = 'GenericDeviceNotification', canBeDeleted = true, -- priority can be -- alert -- red alert sign -- warning -- yellow warning sign -- info -- same as warning priority = priority, data = { deviceId = devid, text = text, title = title } }) end -- Exemple doNotify('Titre de la notification', 'alert', 'Texte de la notification', 12 ) -- Résultat cf pièce jointe 5
pepite Posté(e) le 8 février 2018 Signaler Posté(e) le 8 février 2018 --[[ ============================================ Récupération derniers évènements (LOGS, VD, Labels ) de la HC2 ============================================== Description : -> Permet de récupérer en json les derniers évènements de la HC2 ============================================== Support : [X] Scénario [X] VD Firmware requis : 4.x Auteur : Certainement @tinman ----------------------------------------------- Functions : getLastEvent: Récupération derniers évènements loggués ============================================== ]] - --------------------------------------------------------------- -- function : getLastEvent -- --------------------------------------------------------------- -- paramètres : -- event : -- Log (Zwave) -- All (VDs, Labels..) -- retour : Affichage dans le debug des derniers événements loggués au format json. -- --------------------------------------------------------------- function getLastEvent(event) local events = api.get('/refreshStates?last=1') if ( event:lower() == "log" ) then fibaro:debug(json.encode(events.logs)) elseif ( event:lower() == "all" ) then fibaro:debug(json.encode(events.changes)) end end -- Exemples -- Derniers évènements de type LOGS getLastEvent("Log") -- Résultat [DEBUG] 15:00:43: ["[14:23:28] Opening port","[14:23:28] Initializing Z-Wave","[14:23:28] Pthread Initialize","[14:23:38] Z-wave start"] -- Derniers évènements VDs, etiquettes... getLastEvent("All") -- Résultat [DEBUG] 15:05:15: [{"logTemp":"","sunriseHour":"08:09","log":"","sunsetHour":"17:57","id":1},{"Wind":5.4,"ConditionCode":32,"Temperature":-0.6,"ui.Current_Weather_Label.caption":"Temp.: -0.6°C\n\nHumidity: 73.4%\n\nWind: 5.4km\/h","Humidity":73.4,"Pressure":1021,"id":3,"ConditionCodeConverted":32,"WeatherCondition":"clear"},{"currentIcon":1014,"id":4},{"id":5,"logTemp":"","log":""},{"alarmLevel":34,"id":6,"logTemp":"","log":""},{"energy":0.25,"logTemp":"","power":0,"log":"","value":false,"id":7},{"power":0,"id":8,"logTemp":"","log":""},{"energy":1.72,"power":2.6,"log":"","logTemp":"","id":9},{"energy":4.11,"logTemp":"","power":16,"log":"","value":true,"id":10},{"energy":30.41,"logTemp":"","power":131.4,"log":"","value":true,"id":11},{"energy":0.45,"logTemp":"","power":0,"log":"","value":false,"id":12},{"ui.Label4.value":"VDSoleilHauteur = 19.55 [15:04:31]","ui.Label10.value":"VDSoleilLuxPon = 24898.18 [15:04:31]","ui.Label7.value":"VDSoleilRadiDif = 97.04 [15:04:31]","currentIcon":1058,"ui.Label3.value":"VDSoleilLuxTot = 25066.9 [15:04:31]","ui.Label5.value":"VDSoleilAzimut = 214.91 [15:04:31]","ui.Label1.value":"GEA_History = [\"11:30:40 : #1 [true][Slider, [75,\\\"4\\\",82]]\"] [15:05:10]","ui.Label9.value":"VDSoleilRadiTot = 198.03 [15:04:31]","ui.Label8.value":"VDSoleilRadiPon = 196.7 [15:04:31]","id":13,"ui.Label2.value":"Icones = {\"72\":\"1032\",\"18\":\"0\",\"19\":\"1001\",\"35\":\"1017\",\"34\":\"0\",\"15\":\"1037\",\"15\":\"1037\",\"4\":\"1014\",\"50\":\"1030\",\"37\":\"1013\",\"20\":\"1056\",\"32\":\"1012\",\"33\":\"0\"} [15:05:01]","ui.Label6.value":"VDSoleilRadiDir = 100.99 [15:04:31]"},{"ui.Label4.value":"Foscam_ON_OFF Salon | 1->0 | 14:46:39","ui.Label10.value":"","ui.Label7.value":"D_Mvt_SALON Escalier | 0->1 | 13:12:20","currentIcon":1015,"ui.Label3.value":"D_Mvt_SALON Escalier | 1->0 | 14:47:06","ui.Label5.value":"D_Mvt_SALON Escalier | 0->1 | 14:46:02","ui.Label1.value":"Freebox_Player Salon | 0->1 | 14:47:32","ui.Label9.value":"","ui.Label8.value":"Volet Chambre Lucarne | 0->99 | 08:50:01","id":14,"ui.Label2.value":"TV Salon | 0->1 | 14:47:32","ui.Label6.value":"D_Mvt_SALON Escalier | 1->0 | 13:12:40"},{"ui.Label4.value":"Netflix (Salon) : 2.6W","ui.Label10.value":"","ui.Label7.value":"","currentIcon":1037,"ui.Label3.value":"Lave_Linge (Cellier) : 3.9W","ui.Total.value":"154.7W (Max = 1000W)","ui.LastCheck.value":"08\/02\/18 15:05:00","ui.Label5.value":"Frigo (Cuisine) : 0.8W","ui.Label1.value":"TV (Salon) : 131.4W","ui.Label9.value":"","ui.Label8.value":"","id":15,"ui.Label2.value":"Freebox_Player (Salon) : 16W","ui.Label6.value":""},{"currentIcon":1054,"id":18},{"currentIcon":1001,"id":19},{"currentIcon":1056,"id":20} 4
pepite Posté(e) le 7 juin 2019 Signaler Posté(e) le 7 juin 2019 --[[ ================================================================== Trouve Nom de pièce d'un VD ================================================================== Description : Permet de récupérer le nom de la pièce dans laquelle se trouve un Vd ================================================================== Support : [] Scénario [X] VD Firmware requis : 4.x Auteur : Adaptation d'un code de @Steven ------------------------------------------------------------------ Functions : GetRoomName : Retourne nom de la pièce ================================================================== --]] -- --------------------------------------------------------------- -- function : GetRoomName -- --------------------------------------------------------------- -- paramètres : -- aucun -- retour : nom de la pièce dans laquelle se trouve le VD -- --------------------------------------------------------------- GetRoomName = function() local id = fibaro:getSelfId() local idRoom = api.get("/devices/"..id) if (idRoom) then idRoom = idRoom.roomID end if (idRoom and idRoom > 0) then local Room = fibaro:getRoomName(idRoom) return Room end end -- Exemple local room = GetRoomName() fibaro:debug("Pièce : " ..room) -- Résultat Pièce : Cuisine 1
pepite Posté(e) le 7 juin 2019 Signaler Posté(e) le 7 juin 2019 --[[ ================================================================== Trouve l'id d'une scène ================================================================== Description : Permet de récupérer id d'une scène en comparant un texte de la scène ================================================================== Support : [x] Scénario [X] VD Firmware requis : 4.x Auteur : Adaptation d'un code de @Steven ------------------------------------------------------------------ Functions : GetIdScene : Retourne l'id d'une scene ================================================================== --]] -- --------------------------------------------------------------- -- function : GetIdScene -- --------------------------------------------------------------- -- paramètres : -- SceneName : Nom de la scène à rechercher -- txt_match : Texte de la scène à comparer -- retour : id de la scène -- --------------------------------------------------------------- GetIdScene = function (SceneName, txt_match) local scenes = api.get("/scenes") for i = 1, #scenes do if (scenes[i].isLua) then local scene = api.get("/scenes/"..scenes[i].id) if string.match(scene.lua, txt_match) then if scene.name:lower() == SceneName:lower() then return scene.id end end end end end -- Exemple local id = GetIdScene("SonosNode", "ADN182") fibaro:debug("Id de la scène SonosNode : " ..id) -- Résultat Id de la scène SonosNode : 82 1
pepite Posté(e) le 7 juin 2019 Signaler Posté(e) le 7 juin 2019 Exemples combinés des 2 fonctions précédentes : local room = GetRoomName() local id = GetIdScene("SonosNode", "ADN182") local search = "ACDC" local args = {room=room, player="Search", mode= "song", search= search} fibaro:startScene(id, {args})
pepite Posté(e) le 7 juin 2019 Signaler Posté(e) le 7 juin 2019 --[[ ================================================================== Recuperer le caption d'un bouton de VD sur lequel on a cliqué ================================================================== Description : Permet de récupérer le nom d'un bouton cliqué dans un VD ================================================================== Support : [] Scénario [X] VD Firmware requis : 4.x Auteur : Adaptation d'un code de @Steven et de @Lazer ------------------------------------------------------------------ Functions : getCaption : Retourne le nom donné à un bouton de VD ================================================================== --]] -- --------------------------------------------------------------- -- function : getCaption -- --------------------------------------------------------------- -- paramètres : -- device : id du VD concerné -- retour : Nom du bouton appuye -- --------------------------------------------------------------- function getCaption(device) fibaro:debug(device.name .. " ") local rows = #device.properties.rows fibaro:debug("<b> Nombre de Rows : " .. rows .. "</b>") for i = 1, rows do fibaro:debug("<b> Row : " .. i .. " Type : " .. device.properties.rows[i].type .. " </b>") if device.properties.rows[i].type == "button" then local elements = #(device.properties.rows[i].elements) for j = 1, elements do if _elementID_ == tonumber(device.properties.rows[i].elements[j].id) then fibaro:debug("ElementID : " .. _elementID_ .. " - Elements.ID : " .. device.properties.rows[i].elements[j].id ) return device.properties.rows[i].elements[j].caption end end end end return false end -- Exemple deviceId = fibaro:getSelfId() local thisvd = api.get("/devices/"..deviceId) local nom_du_bouton = getCaption(thisvd) fibaro:debug("Nom du bouton: " .. nom_du_bouton) -- Résultat Nom du bouton : TF1
pepite Posté(e) le 14 juin 2019 Signaler Posté(e) le 14 juin 2019 --[[ ================================================================================== Recuperer le caption, id du bouton et id du VD d'un bouton de VD dans tous les VDs ================================================================================== Description : Permet de récupérer à partir du Nom du VD et du nom du bouton (Caption) : - id dun VD - id d'un bouton ================================================================== Support : [x] Scénario [X] VD Firmware requis : 4.x Auteur : Adaptation d'un code de @Steven et de @Lazer ------------------------------------------------------------------ Functions : getCaptionInAllVDs: Retourne id du Vd et id du bouton à partir : - du nom du VD - du nom du bouton (Caption) ================================================================== --]] -- --------------------------------------------------------------- -- function : getCaptionInAllVDs -- --------------------------------------------------------------- -- paramètres : -- device : id du VD concerné -- name : Nom du VD concerné -- caption : Nom du bouton concerné -- retour : ID du VD, ID du bouton portant le "caption" -- --------------------------------------------------------------- getCaptionInAllVDs = function (device, name, caption) if device.name == name then fibaro:debug("VD Name : " .. device.name .. " - Methode Name : " .. name) for _, v in ipairs(device.properties.rows) do if compareString(v.type, "button") then for _, w in ipairs(v.elements) do if (w.caption) then if compareString(w.caption, caption) then fibaro:debug("ID Button (w.id) : " ..w.id.. " - ID VD : " .. device.id .. " W Caption : " ..w.caption) return device.id, w.id end end end end end end end -- Exemple : Appui sur le bouton "test_result" du Vd "VD_test" local vds = api.get("/devices?type=virtual_device&enabled=true") for i=1, #vds do local id_device, id_button = getCaptionInAllVDs(vds[i], "VD_test", "test_result") if (id_device) then fibaro:debug("Result : " .. id_device .. " - " ..id_button) fibaro:call(id_device, "pressButton", id_button) end end 2
Messages recommandés