Domoticz se pythonise

Une petite news vite fait  :

La mise à jour Beta 2363 apporte le support du langage python au même titre que Lua.

MAJ du 06/04: Cette fonction est uniquement disponible si on compile Domoticz à partir des sources. Pas de support natif

applaudissement 💡

Il y a maintenant un dossier script/python dans lequel nous pouvons déployer des scripts écrits en python.

Le « nommage »  de ces script doit correspondre à celui bien connu en Lua : script_device_XXXXXX.py pour déclencher un script sur le changement d’état d’un device.

A aujourd’hui l’équivalent de script_time de Lua n’est pas implémenté.

Chaque script python reçoit plusieurs variables :

+ * changed_device: the current device that changed (object of Device)
+ * changed_device_name: name of current device (same as changed_device.name)
+ * is_daytime: boolean, true when it is is daytime
+ * is_nighttime: same for the night
+ * sunrise_in_minutes: integer
+ * sunset_in_minutes: integer
+ * user_variables: dictionary from string to value

ce qui une fois traduit donne à peu prés

+ * changed_device: le  périphérique qui vient de changer d’état
+ * changed_device_name: le nom du périphérique qui vient de changer d’état(pareil que changed_device.name)
+ * is_daytime: true est renvoyé si c’est journée (daytime)
+ * is_nighttime: true  si c’est la nuit (night)
+ * sunrise_in_minutes:  un entier qui donne le lever du soleil
+ * sunset_in_minutes: entier pour le coucher du soleil
+ * user_variables: L ‘accès aux variables ( string to value)

Chaque script doit débuter par un

import domoticz

Voici quelques commandes glanées dans le code python

  • device.on() et device.on (after=XXX)
  • device.off(), idem ci-dessus
  • device.ison
  • domoticz.devices ; liste des périphériques
  • domoticz.log (le message a affiche dans le log)
  • domoticz.user_variables.get (« nom de la variable »,valeur (??)

Les quelques essais que j’ai mené hier soir après abus de pina colada n’ont pas été concluants (rien dans les logs Domoticz) même avec un test tout simple. 😕

En effet et pour cause : la compilation est obligatoire à partir des sources et non pas via le téléchargement d’une Béta.

Partie remise à plus tard en attente de vos commentaires éclairés.

Un exemple se trouve donc dans le dossier /scripts/python

Bon Week End de Pâques et bonne chasse aux Oeufs.

lapins_nabaztag_geek

Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/

RFLINK : Un Module 433Mhz Arduino MEGA : Partie 2 : le lien avec Domoticz

A la suite de l’article décrivant le montage électronique du module Rflink dont le rôle est de gérer un ensemble de protocoles 433Mhz, je vous propose ici, toujours avec  la participation de Deennoo de voir la partie inclusion au sein de Domoticz.

Un petit rappel de présentation :

RFLink (http://rflink.sourceforge.net/) est un outil OPENSOURCE/DIY a base d’Arduino Mega qui permet de sniffer et d’envoyer des trames Radio Frequence en 433 MHZ de différents protocoles.

C’est un très bon complément au RFXTRX de RFXCOM.

Les termes Rfxcom/Rfxtrx étant marques déposées par leur propriétaire ne seront pas utilisées ici.

Il a été crée par la Stuntteam, une équipe de développeurs néerlandais passionnés de domotique qui a travaillé auparavant sur Nodo (http://www.nodo-domotica.nl/).

Il est rendu compatible avec Domoticz depuis la bêta  2.2336.

La version stable 2.2344 comporte le support de Rflink.

Il est impératif d’utiliser une carte ARDUINO MEGA, la taille des programme est trop importante pour d’autres modèles d’Arduino.

1 – RFLink dans l’Arduino MEGA

  1. Vous téléchargez le ZIP a cette adresse :  http://sourceforge.net/projects/rflink/?source=typ_redirect
  2. une fois téléchargé il faut le décompresser dans un emplacement de votre choix.
  3. Ouvrez ensuite le dossier dans lequel vous avez tout décompressé puis lancez RflinlLoader.exe
  4. Sélectionnez le rflink.cpp.hex
  5. Choissiez le port Série auquel l’arduino est connecté
  6. Cliquez sur « Programm » et attendez la fin
Mon camarade Deenno nous à fait de jolis slides détaillant l’utilisation de cet outil, en voici le lien https://drive.google.com/file/d/0BwZyGxESbZNpMktucENVWDRXWUU/view.

2 – Branchement au Raspberry

Il est important d’avoir une bonne alimentation électrique pour le RPI (5v 2 Ampères).

  • Vous branchez votre ArduinoMega et son câble Usb a l’une des prises USB du PI.
  • Rendez vous sur la page Matériel de Domoticz :
  • Créez votre nouveau matériel : Rflink Gateway USB. (si cette option n’apparait pas , lisez ici)

rfllin_domoticz

Lire la suite

Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/

RFLINK : Un Module 433Mhz Arduino MEGA : Partie 1 : le matériel

Grâce à la complicité de mon ami Deennoo, je vous propose cet article qui devrait faire du bruit dans les chaumières, puisque il s’agit ni plus ni moins de confectionner un module compatible avec les protocoles 433Mhz en mode « C’est moi qui l’ai fait ! »

rfl_rxtx
ArduinoMega rf2

Présentation

RFLink (http://rflink.sourceforge.net/) est un outil OPENSOURCE/DIY a base d’Arduino Mega qui permet de sniffer et d’envoyer des trames Radio Frequence en 433 MHZ de différents protocoles basés sur cette fréquence.

RFLink se fait donc passer pour un équipement autre et il est donc reconnu comme tel dans Domoticz.

C’est un très bon complément (pour ne pas dire plus) au RFXTRX de RFXCOM.

Les termes Rfxcom/Rfxtrx étant marques déposées par leur propriétaire ne seront pas utilisées ici.

Le Rflink  fonctionne comme les modèles précédemment cités en embarquant les protocoles les plus populaires..

Il a été crée par la Stuntteam, une équipe de développeurs néerlandais passionnés de domotique qui a travaillé auparavant sur Nodo (http://www.nodo-domotica.nl/).

Il est rendu compatible avec Domoticz depuis la bêta  2.2336.

La version stable 2344 de Domoticz intègre Rflink nativement.

Grâce a des Plug Ins en langage C, Il permet de décoder et de piloter les appareils suivants : (liste exhaustive à ce jour (25/03/15)  mais en constante et rapide évolution.

Prises et interupteurs RF

  • Klik Aan Klik Uit (Code Wheel) (Send + Receive)
  • Princeton PT2262 / MOSDESIGN M3EB / Domia Lite / Klik-Aan-Klik-Uit / Intertechno)
  • CoCo Technologies / Cogex / D-IO (Chacon) / Nexa / Düwi Terminal
  • Klik Aan Klik Uit (Automatic Code Learning) (Send + Receive)
  • Home Easy (Code Wheel) (Send + Receive)
  • Flamingo FA500R/S/DSS/WD (Automatic Code Learning) (Send + Receive)
  • SilverCrest 91210/60494 RCS AAA3680
  • Mumbi M-FS300
  • Unitec 48110 EIM 826 / 48111 EIM 821
  • Elro Home Comfort AB600 (Send + Receive)
  • Intertek Eurodomest 972080(Automatic Code Learning) (Send + Receive)
  • Blyss (Send + Receive)
  • Conrad RSL2 (Receive only)
  • Kambrook RF3399/RF3405/RF3672/RF3689/RF4471R (Receive only)
  • X10 RF switches (Send + Receive)

Capteurs Meteo :

  • Alecto V1:
  • Alecto WS3500, SilverCrest, Otio SHT-10, Otio SHT-20
  • Auriol H13726, Ventus WS155, Hama EWS 1500, Meteoscan W155/W160
  • Alecto WS4500, Ventus W044, Balance RF-WS105
  • Alecto V2: (868 Mhz! A donc besoin d’un )
  • ACH2010, DKW2012
  • Alecto V3:
  • WS1100, WS1200
  • Cresta/Hideki:
  • Hideki, TFA Nexus, Mebus, Irox, Irox-Pro X, Honeywell, Cresta TE923, TE923W, TE821W,
  • WXR810, DV928, Ventus W906, HomeWizard Rain meter
  • Mebus:
  • Mebus Outdoor Sensor
  • Stacja Pogody WS-9941-M
  • UPM/Esic:
  • UPM, Esic, Emos, DVM, Clas Ohlson, Dickson
  • WT260,WT260H,WT440H,WT450,WT450H,WDS500,RG700
  • LaCrosse:
  • Lacrosse TX3-TH Thermo/Humidity, Lacrosse TX4
  • WS7000-15: Anemometer, WS7000-16: Rain precipitation, WS2500-19: Brightness Luxmeter,
  • WS7000-20: Thermo/Humidity/Barometer
  • Auriol:
  • Z31743, Z31055A, Rubicson
  • Oregon V1/2/3:
  • THC238, THC268, THN132N, THWR288A, THRN122N, THN122N, AW129, AW131, THGR268, THGR122X,
  • THGN122N, THGN123N, THGR122NX, THGR228N, THGR238, WTGR800, THGR918, THGRN228NX, THGN500,
  • THGR810, RTGR328N, THGR328N, Huger BTHR918, BTHR918N, BTHR968, RGR126, RGR682, RGR918, PCR122
  • THWR800, THR128, THR138, THC138, OWL CM119, cent-a-meter, OWL CM113, Electrisave
  • UVN128, UV138, UVN800, Huger-STR918, WGR918, WGR800, PCR800, WGTR800, BTHG968

Commande de Volets / Store

  • Kaku ASUN650

Detecteurs de mouvement et d’ouverture de porte :

  • Low Budget Chinese PIR
  • Ajax Chub Varel PIR

Dectecteur Incendie:

  • Mertik G6R H4T1 / Dru

Detecteurs de fumée:

  • KD101 (Send + Receive)
  • Flamingo FA20RF (Send + Receive)

Carillons:

  • SelectPlus (200689103 – Black – Datecode:0614), 1 by One, Delta (O00 QH-0031) (Send + Receive)
  • SelectPlus (200689101 – White – Datecode:0914) (Send + Receive)
  • Byron SX (Send + Receive)
  • Plieger York (Receive) Note that when the Plieger button is detected as Conrad RSL2, you need to use the button on the inside to change the address code of the Plieger.

Nodo Slave Sensors:

  • Temperature, Humidity, UV, barometric Pressure, OpenTherm and any other kind of Nodo sensor you want to include.

On voit bien que pour l’instant le nombre de périphériques supportés est bien moindre que ceux du RfxTrx, mais l’équipe de développement travaille à ajouter de nouvelles compatibilités tous les jours. Et puis, comme c’est open source, libre a vous de développer vos propres Plug Ins pour les protocoles qui ne sont pas encore reconnus et de les partager dans la communauté. 😆

Lire la suite

Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/

Cacher un widget dans Domoticz

Dans la série « Je me coucherai moins bête ce soir », voici un nouvel épisode, un simple truc qui permet de masquer un widget de l’interface web de Domoticz.

C’est tout simple :

En sélectionnant le plan $Hidden Devices et en y affectant les périphériques non désirés on peut les masquer de l’interface web. Cela se passe dans le menu « périphériques par emplacement » du menu des plans il suffit d’affecter un périphérique à la liste nommée $Hidden Devices.

Screenshot - 22032015 - 18:28:09

 

Une autre technique de « masquage » basée sur les noms existe.

Editez le widget concerné et placez un signe dollar ‘$’ devant son nom. Il disparaît.

2015-03-22 10_05_36

Il est toujours dans la liste des dispositifs et continue à faire le job (plannings, récupération de valeurs …), il est juste « pas affiché ».

2015-03-22 10_06_37

Si vous voulez le récupérer, depuis la liste des dispositifz, la flèche verte vous permet de le renommer et donc de supprimer le $ devant et ainsi de réafficher le widget en question et d’en récupérer tout l’historique d’ailleurs.

2015-03-22 10_07_19

2015-03-22 10_06_02

Cette manip me semble valable pour tous les widgets (bien que je n’ai pas tout testé)

Indiana,  lecteur attentif nous informe :

Attention toutefois : cette manip a pour inconvénient de changer le nom du switch et donc de rendre inopérable les scripts lua qui l’utilisent. Perso, je préfère les cacher en les mettant dans l’emplacement $$HiddenDevices dans le menu emplacements.

Merci de l’info.

Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/

Mémento instructions shell bash

Cet article fait suite à  https://easydomoticz.com/domoticz-et-scripts-les-bases/ qui tentait de définir les bases du scripting. Ce second opus concerne les commandes Linux usuelles à connaitre pour piloter Domoticz via le shell bash.

Cette liste n’est pas exhaustive et n’empêche pas la lecture de site web spécialisés dans le shell Linux (OpenClassRoom par exemple à des très bons tutoriaux).

Pourquoi écrire des scripts ?

On à besoin d’écrire des scripts quand on commence à s’interfacer avec le monde extérieur, par exemple piloter un ampli via http, récupérer son calendrier google, gérer ses plantes vertes …

C’est la que l’on va avoir besoin d’envoyer des requêtes, récupérer et traiter le résultat, puis mettre à jour Domoticz via l’API JSON.

L’API JSON

« Dans Domoticz vous parlez tout le temps de l’API JSON qu’est ce que c’est ? »

Il s’agit d’un moyen de lecture et d’envoi de données depuis/vers Domoticz.

L’intérêt est de pouvoir interroger ou écrire des données, par le biais de requêtes http, depuis n’importe quel langage (shell, php, python, perl, Lua…) pour peu que l’on respecte le format imposé par Domoticz.

L’API est donc le dictionnaire des commandes que sait comprendre et exploiter Domoticz.

La référence de l’API est ici http://www.domoticz.com/wiki/Domoticz_API/JSON_URL%27s

Pour utiliser les fonctions de l’API à l’aide du shell Linux nous avons souvent besoin de commandes http, de récupérer des données extérieures…

Voici un petit mémo des commandes récurrentes:

Ecrire et rendre exécutable un script

Ou placer les scripts ?

Il n’y a pas d’emplacement privilégié du moment que domoticz puisse aller lire à cet endroit.

Toutefois les développeurs de Domoticz ont crée domoticz/scripts, domoticz/scripts/lua cela serait quand même logique de les utiliser.

Quitte à créer domoticz/scripts/python, domoticz/scripts/sh, domoticz/scripts/php pour faciliter la gestion des scripts.

Ce qui suit ne s’applique pas aux scripts LUA de domoticz/scripts/lua qui sont entièrement géres par Domoticz et à ce titre doivent correspondre à des “nommages” précis (script_time, script_device…)

Comment écrire un script ?

Tout d’abord quelques considérations générales.

  • Nommez votre script d’un nom explicite et pas toto.py mais clignotement_lampe_exterieur.sh
  • Utilisez les .sh à la fin du fichier, cela n’est pas obligatoire mais pour les pauvres êtres humains que nous sommes c’est mieux.
  • LA chose qu’il faut savoir c’est que votre script doit commencer par un shebang approprié, http://fr.wikipedia.org/wiki/Shebang, en effet les scripts sont des fichiers texte dont la première ligne devra être le shebang qui indique au système dans quel langage est rédigé le script et le chemin vers ce langage. Pour le shell c’est
    #! /bin/bash

Rédaction du fichier.

sudo pico monscript.sh

ouvrira un éditeur de texte qui vous permettra d’écrire vos commandes shell dans le fichier nommé monscript.sh.

  • CTRL k  : permet de couper des lignes.
  • CTRL u : de coller les lignes précédemment coupées.
  • CTRL x  : permet de quitter cet éditeur, une confirmation est demandée.
  • CTRL G : aide du logiciel pico.

Rendre exécutable ce script et le lancer

chmod +x monscript.sh

permet de rendre exécutable votre script.

le lancement se fait par un

./monscript.sh

voici quelques commandes que nous utilisons régulièrement dans des scripts bash.

Appeler une url http

Pour piloter Domoticz on doit appeler une requête http dont l’écriture nous est imposée par l’API Domoticz.http://www.domoticz.com/wiki/Domoticz_API/JSON_URL%27s

Ainsi pour allumer une lampe dont l’idx est 44

On utilise la commande curl en ligne de commande

curl 'http://192.168.1.81:8080/json.htm?type=command&param=switchlight&idx=112&switchcmd=On&level=0'

Ou dans un script

#! /bin/sh
curl 'http://192.168.1.81:8080/json.htm?type=command&param=udevice&idx=44&nvalue=0&svalue=25;60;2'

envoie 25,60,2 (température, humidité, indice confort) dans l’idx 44 de mon Domoticz, ce qui à peu d’intérêt.

Affecter une variable shell bash

L’idée est de récupérer une valeur de quelque part puis de la réutiliser.

la définition et l’affectation de valeurs d’une variable est faite simplement par son nom.

son utilisation (affichage, tests) est préfixée par « $ »

#!/bin/bash
tempo=$(curl -s "http://domogeek.entropialux.com/tempoedf/now")
echo $tempo

if [ $tempo = "bleu" ]
then
...
tempo=rouge

ici je récupère « bleu », »blanc », ou « rouge » dans la variable tempo en appelant curl.

les tests sont faits sur $tempo= »bleu »

 Envoyer des données dans un fichier

N’importe quelle commande Linux peut être renvoyée à l’intérieur d’un fichier, il suffit de faire suivre la commande de > nom_du_fichier.txt.

l’affichage au lieu de se faire à l’écran se fait dans le fichier.

ainsi un ./domoticz > mon_fichier_log.txt envoie tous les messages Domoticz dans ce fichier.

Afficher des données d’un fichier, d’un port.

Pour afficher les données contenues dans un fichier texte, qui arrivent d’un port ttyXXX, on utilise la commande ‘cat’

cat /dev/ttyAMA0

affiche les données du port série ttyAMAO

cat domoticz.sh

affiche le contenu de ce fichier.

Manipulation de chaines

Extraire une chaîne de caractères entre deux positions précises:

On utilise les symboles ${}.

La syntaxe est ${chaine,position,longueur}

ainsi

chaine=abcdefgh
souschaine=${chaine:4:3}
echo $souschaine

affiche efg (3 caractères à partir du 4eme caractère)

http://pierrellensa.free.fr/dev/bash/www.bsdbooks.net/shells/scripting/fr/string-manipulation.html

Extraire un champ

Cas de figure un peu diffèrent de ci dessus, lorsque je reçois une chaine correctement formatée avec des séparateurs entre chaque champ.

Soit des données telles que :

3A40 mixer volume 30

les champs sont séparés par un espace (3A40espacemixerespacevolumeespace30)
un cut -d’  ‘ -f3 renvoie le 3eme champ de la chaine soit « volume »
et donc cut -d’  ‘ -f4 affiche le 4eme champ soit « 30 » (Attention à l’espace au milieu des simples ‘)

le -d’ ‘ indique le caractère de séparation des champs, ainsi si les champs sont séparés par un caractère @

3A40@mixer@volume@30

cut -d’@’ -f3 affiche  « volume »

 

To be continued

Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/