Page 1 sur 1

Démarrage plugin avec un switch on/off

Publié : 20 janv. 2020, 12:08
par jfs
Bonjour,
Je voudrais pouvoir démarrer (et arrêter) un plugin python par une action sur un device switch ou autre.
Le but est d'activer ce plugin (très bavard dans le log ...) uniquement lorsqu'il est utilisé. il s'agit du suivi de mon robot tondeuse dans le jardin. Est-ce possible ?
Merci d'avance.
jfs

Re: Démarrage plugin avec un switch on/off

Publié : 20 janv. 2020, 13:15
par higgins91
je pense que c'est faisable, tu crées un inter virtuel et dans ton script, première ligne, tu place une condition:
si inter = ON alors je fais le script, si = OFF alors je quitte de suite.

Re: Démarrage plugin avec un switch on/off

Publié : 20 janv. 2020, 18:38
par jfs
Oui, bien sur, c'est l'idée.
Mais comment activer un plugin à partir d'un script, car normalement le plugin est automatiquement géré par Domoticz selon qu'il est activé ou on (réglages, matériel, option activé), Je voudrais simplifier cette procédure par un bouton pour les utilisateurs qui n'accédent pas aux réglages.
Si qqu'un sait ...

Re: Démarrage plugin avec un switch on/off

Publié : 20 janv. 2020, 20:00
par boum
Dans Action On/Off, en utilisant l'API json

Cf. https://www.domoticz.com/wiki/Domoticz_ ... e_hardware

Re: Démarrage plugin avec un switch on/off

Publié : 23 janv. 2020, 20:01
par jfs
hum! Je n'ai pas réussi à l'utiliser car il faut connaitre tous les paramètres du hardware à activer/désactiver pour les passer en json.htm. et ça fout le bordel dans les hardwares (heureusement qu'il est indiqué de le faire sur un système de test !!!)

La solution pourrait être de récupérer par un script tous les paramètres du hardware et de créer une commande json.htm à rallonge avec tous paramètres et modifier "enabled".
Bien compliqué pour seulement passer le paramètre "enabled" de true à false. !!!

y-a-t-il plus simple que json.htm pour effectuer cette opération ?

Re: Démarrage plugin avec un switch on/off

Publié : 23 janv. 2020, 22:04
par boum
Il faut juste connaitre le nom, le type et l'index. Ça ne change jamais et peut-être renseigné dans le script.
Sinon, oui, on peut récupérer par une autre requête JSON, à condition de fournir le nom ou l'index.

À partir du nom, ça donnerait qq chose comme ça en dzVents :

Code : Tout sélectionner

local httpTriggerOn  = 'HardwareSwitchON'
local httpTriggerOff = 'HardwareSwitchOFF'
return {
    on = {
        devices = {
            'TestVirtual'
        },
        httpResponses = {
            httpTriggerOn,
            httpTriggerOff,
        }
    },
    execute = function(domoticz, item)
        local name = 'TestDummy'

        if item.isDevice then
            local trigger = item.active and httpTriggerOn or httpTriggerOff
            local getHardwareURL =  domoticz.settings['Domoticz url'] .. '/json.htm?type=hardware'
            domoticz.openURL(
            { 
                url = getHardwareURL,  
                method = "GET", 
                callback = trigger,
            })
        elseif item.isHTTPResponse then

            if item.ok and item.isJSON then
                local hardware
                for _,hw in ipairs(item.json.result) do
                    if hw.Name == name then
                        hardware = hw
                        break
                    end
                end
                if not hardware then
                    domoticz.log('Harware ' .. name .. ' not found', domoticz.LOG_ERROR)
                    return
                end

                local enabled = (item.callback == httpTriggerOn) and 'true' or 'false'
                if enabled == hardware.enabled then
                    -- le hardware est déjà dans l'état voulu
                    return
                end
                local htype = tostring(hardware.Type)
                local idx = hardware.idx

                local toggleURL = string.format('%s/json.htm?type=command&param=updatehardware&htype=%s&name=%s&idx=%s&enabled=%s',
                domoticz.settings['Domoticz url'],
                htype,
                name,
                idx,
                enabled)

                domoticz.log(toggleURL, domoticz.LOG_DEBUG)
                domoticz.openURL(toggleURL)
            else
                domoticz.log('There was a problem handling the request', domoticz.LOG_ERROR)
                domoticz.log(item, domoticz.LOG_ERROR)
            end
        end
    end
}
Tout pareil, à tester dans un environnement de test au préalable ;)
Et non, je ne pense pas qu'il y a un autre moyen de désactiver un plugin/hardware.