AlarmDIYDomotiqueElectronicsIoT

Utilisation de scripts dans Domoticz (6/6)

Maintenant que notre box domotique est fonctionnelle et que nous disposons de différents type de capteurs, il serait intéressant que l’on puisse gérer des évènements en utilisant des scripts dans Domoticz. Nos capteurs mesurent des températures, des taux d’humidité, une ouverture de porte, un mouvement. Toutes ces données peuvent déclencher toute sorte d’action qui sont elles-mêmes paramétrables dans Domoticz. Voilà le but de cet article, parler de l’utilisation de ces scripts dans Domoticz mais également partager quelques exemples de scripts selon différentes méthodes au travers d’exemples concrets.

Page du gestionnaire d'évènements dans Domoticz
Page du gestionnaire d’évènements dans Domoticz

Dans l’onglet « Evènements », plusieurs choix s’offrent à vous:

1er exemple d’utilisation de script dans Domoticz: Blockly, le script en blocs graphiques

Script Blockly dans Domoticz

Blockly est un outil simple et efficace pour les débutants qui débutent en programmation. Il permet de créer des scripts dans Domoticz sans connaissance préalable avec seulement un peu de logique.

Si on analyse le premier groupe du script ci-dessus, on trouve:

  • If ... Do à sélectionner dans le menu sous l’onglet Control. Petite subtilité pour faire un Else if, il suffit de choisir le bloc avec une route dentée blanche sur fond bleu et l’option apparaît en cliquant dessus
  • Choisir son device dans l’onglet Device du menu à gauche (ici DetectMouv1 pour moi)
  • Un bloc comparateur = pour vérifier si le device est en marche ou éteint
  • Un bloc logique and pour associer une autre condition
  • Depuis l’onglet Sécurité un bloc qui permet d’avoir une condition selon que votre box est en mode Disarmed, Armed Home ou Armed away

Pour résumer, cela signifie: si mon device DetectMouv1 est déclenché (passe sur ON) ET que ma box est en mode sécurisé Armed Away alors je déclenche une action.

Cette action peut se décrire ici par l’envoi d’une notification avec le sujet « Alarme! » et le message « Mouvement détecté à la maison!!! » via PushOver qui est configuré dans Domoticz pour moi avec une priorité 2 (urgence) et un son qui est paramétrable.

N’hésitez pas à naviguer dans le menu pour découvrir Blockly. Un wiki est disponible sous ce lien Domoticz.

2ème exemple d’utilisation de script dans Domoticz: Lua pour savoir si un dispositif ne se met plus à jour

Toutes les commandes Lua sont disponibles sous ce lien. Les fonctionnalités sont vraiment très nombreuses et cet article n’a pas vocation à en faire une description exhaustive.

Dans un premier temps, je vais prendre un exemple concret que j’ai écrit pour solutionner un souci que j’avais régulièrement. Mon module de météo extérieure a 2 dispositifs enregistrés dans Domoticz: le niveau de la batterie qui est branché au panneau solaire et un module DHT22 branché en I2C. La connexion via SDA/SCL se déconnecte de temps en temps sans raison particulière. En conséquence, ne consultant pas tous les jours ces données, je m’apercevais de cette déconnexion quelques jours plus tard, faussant mes statistiques sur les semaines passées. Heureusement pour nous, c’est là que la gestion d’évènements peut nous venir en aide. Les commandes Lua permettent de connaître la dernière mise à jour/envoi de données d’un dispositif. Si cela dépasse un délai que nous choisissons alors il est possible de demander à Domoticz d’envoyer une notification via le service qui aura été paramétrer dans Domoticz, PushOver pour moi.

-- Script parameters
----------------------------------------------------------------------------------------------------------
Debug = "YES"                    -- Afficher dans les logs Domoticz
----------------------------------------------------------------------------------------------------------
-- Command Array functions
----------------------------------------------------------------------------------------------------------

function datetimedifferencenow(s)
   year = string.sub(s, 1, 4)
   month = string.sub(s, 6, 7)
   day = string.sub(s, 9, 10)
   hour = string.sub(s, 12, 13)
   minutes = string.sub(s, 15, 16)
   seconds = string.sub(s, 18, 19)
   t1 = os.time()
   t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
   difference = os.difftime (t1, t2)
   return difference
end

----------------------------------------------------------------------------------------------------------
-- Declare & Fill variables
----------------------------------------------------------------------------------------------------------

commandArray = {}

-- Vérifier au bout de 30 minutes si le dispositif s'est mis à jour. Si ce n'est pas le cas, envoi d'une notification.

if (datetimedifferencenow(otherdevices_lastupdate['DHT22']) > 1800) then
-- Log déconnexion DHT22 + PUSHOVER notification
    print("Déconnexion DHT22")
    commandArray['SendNotification']='Le module DHT22 n\'envoie plus de donnée, vérifiez le capteur!'
end                

return commandArray

3ème exemple d’utilisation: Lua pour déclencher/couper une sirène Zigbee

Toujours pour continuer avec Lua, voici un exemple qui montre comment déclencher une action via une api. L’utilisation du dongle zigbee Conbee II et du plugin eDeconz sur ma box domotique permet d’accéder à un serveur appelé Phoscon. Ce serveur sert d’interface et de point d’accès pour l’api en question.

return 
{
    on = 
    { 
        devices = {
             'nom device 1',
             'nom device 2'
          } 
    },
	logging = 
	{ 
	    level = domoticz.LOG_DEBUG
    },
	execute = function(dz, switch)
	    _G.logMarker =  _G.moduleLabel
   
    if (switch.active and dz.security == dz.SECURITY_ARMEDAWAY ) then
    	dz.log('Sirène ON !')
         dz.openURL({
            url = 'http://ip:port/api/PhosconID/lights/3/state', -- url pour envoyer une requête à l'api ciblée pour déclencher la                         sirène
            method = 'PUT',
            postData = 
            {
                alert='lselect'
            }
        })
    else
        dz.log('Sirène OFF !')
         dz.openURL({
            url = 'http://ip:port/api/PhosconID/lights/3/state', -- url pour désenclencher la sirène
            method = 'PUT',
            postData = 
            {
                alert='none'
            }
        })
    end
end
}

Comment cela fonctionne?

Ainsi, si un de mes devices (nom device 1,…) est déclenché (détecteur de mouvement ou détecteur d’ouverture porte/fenêtre) ET que Domoticz est en mode Armed Away alors une requête est envoyé à l’api pour déclencher la sirène. Sinon, la sirène reste coupée. De plus, à noter que ce script tourne en parallèle du script Blockly décrit plus haut qui est lui en charge d’envoyer une notification.

CC BY-NC-SA 4.0 Utilisation de scripts dans Domoticz (6/6) par MadeInFck est sous Licence Creative Commons Internationale Attribution-Pas d'utilisation Commerciale-Partage à l'identique 4.0 .

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Verified by ExactMetrics