Aller au contenu
Lazer

Code LUA Snippet

Recommended Posts

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
  • Like 6

Partager ce message


Lien à poster
Partager sur d’autres sites
--[[
 ============================================
 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

 

Sélection_001_08432018_13:43:58.png

  • Like 5

Partager ce message


Lien à poster
Partager sur d’autres sites
--[[
 ============================================
 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}

 

  • Like 4

Partager ce message


Lien à poster
Partager sur d’autres sites
--[[
==================================================================
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

 

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites
--[[
==================================================================
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

 

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites
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})

 

Partager ce message


Lien à poster
Partager sur d’autres sites
--[[
==================================================================
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

 

Partager ce message


Lien à poster
Partager sur d’autres sites
--[[
==================================================================================
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

 

  • Like 2

Partager ce message


Lien à poster
Partager sur d’autres sites

×