LUA : Créer un capteur virtuel

Dans les scripts LUA pour domoticz, nous utilisons la plupart du temps un ou plusieurs capteur(s) virtuel(s). Ce ou ces capteurs doivent être créés préalablement en indiquant à l’utilisateur final quel type de capteur il doit créer afin que le script qu’il tente d’utiliser soit fonctionnel du premier coup.
Je vous propose ici une fonction vous permettant de créer directement le ou les capteur(s) virtuel(s) nécessaire à l’exécution de votre script.
Il est possible de créer un capteur sans l’associer à un hardware, mais pour ma part, je préfère l’associer à un hardware existant de type dummy.
Cette fonction recherche donc si un hardware de type 15 existe et retourne l’ID de cet hardware.
Maintenant, pour créer un capteur virtuel il faut déterminer quel sera sont type.
Voici la liste des differents types de capteurs virtuels



il ne reste plus qu’a donner un nom à ce nouveau capteur ce qui donne par exemple pour un capteur de type texte :

CreateVirtualSensor("nom du capteur", 5)

voici la fonction

function CreateVirtualSensor(dname, sensortype)
    -- recherche d'un hardware dummy pour l'associer au futur device
    local config = assert(io.popen(curl..'"'.. domoticzURL ..'/json.htm?type=hardware" &'))
    local blocjson = config:read('*all')
    config:close()
    local jsonValeur = json:decode(blocjson)
    if jsonValeur ~= nil then
       for Index, Value in pairs( jsonValeur.result ) do
           if Value.Type == 15 then -- hardware dummy = 15
              voir_les_logs("--- --- --- idx hardware dummy  : ".. Value.idx .." --- --- ---",debugging)
              voir_les_logs("--- --- --- Nom hardware dummy  : ".. Value.Name .." --- --- ---",debugging)                  
              id = Value.idx
           end  
       end
    end
    if id ~= nil then -- si un hardware dummy existe on peut créer le device
        voir_les_logs("--- --- --- création du device   : ".. dname .. " --- --- ---",debugging)
        voir_les_logs(curl..'"'.. domoticzURL ..'/json.htm?type=createvirtualsensor&idx='..id..'&sensorname='..url_encode(dname)..'&sensortype='..sensortype..'"',debugging)
        os.execute(curl..'"'.. domoticzURL ..'/json.htm?type=createvirtualsensor&idx='..id..'&sensorname='..url_encode(dname)..'&sensortype='..sensortype..'"')
        voir_les_logs("--- --- --- device   : ".. dname .. " créé --- --- ---",debugging)         
    end
end
--https://github.com/domoticz/domoticz/blob/development/hardware/hardwaretypes.h

cette fonction utilise deux autres fonctions , url_encode() et voir_les_logs(), ainsi que le fichier JSON.lua pré installé par domoticz

Retrouvez la dernière version de cette fonction sur [homepage]https://github.com/papo-o/domoticz_scripts/blob/master/Lua/fonctions/fonctions_perso.lua[/homepage]

2 thoughts on “LUA : Créer un capteur virtuel

  1. Bonjour,
    pour les switch selector c’est plus compliqué.
    pour la création du device (ce n’est plus un sensor) il faut utiliser une autre requête, en spécifiant le type (244) le sous type (62) exemple :
    /usr/bin/curl -m 5 "127.0.0.1:8080/json.htm?type=createdevice&idx=5&sensorname=testselector2&devicetype=244&devicesubtype=62" le device créé n’est pas activé.
    il faut une deuxième requête pour l’activer (&used=true) et modifier le type du switch en spécifiant le « switchtype » (18) et l’idx du switch nouvellement créé. exemple :
    /usr/bin/curl -m 5 "127.0.0.1:8080/json.htm?type=setused&idx=201&name=testswitchselector&switchtype=18&used=true" mais cela ne créera un selector qu’avec une seule sélection

  2. bonjour,
    Super script pour creer un device automatiquement, je parle de (CreateVirtualSensor(« nom du capteur », 5).
    Par contre connais tu, une syntaxe pour créer un device Dz selector switch, je n’arrive pas a trouver le type qui va bien, le type 6 me donne un light/switch normal on/off,
    mais après connais tu les options pour le placer en selector
    merci d’avance d’avoir pris le temps de lire cette demande;
    homerci.

Laisser un commentaire