IPX800 V4, lien avec Domoticz

 

 

 

ipx800v4

Depuis quelques semaines j’ai un ipx800 V4  sous la main et passé la phase de prise en main de celui-ci, je n’ai pu m’empêcher de le relier à notre Domoticz.

Pour ceux qui ne connaîtraient pas :

Principales fonctions:

  • 8 entrées digitales tout ou rien (contact sec). Extensible à 56.
  •  8 sorties relais sur contact  270 V/10A  extensible à 56.
  •  4 entrées analogiques 10 bits.
  •  128 entrées + 128  sorties librement configurables. Mode Virtual IO ©.
  • 32 entrées analogiques virtuelles 16 Bits. Mode Virtual IO ©
  • 32 Ping Watchdog (détection de périphériques réseaux par PING ICMP).
  • 32 Périphériques Enocean. ( Nécessite l’extension X-ENO ).
  •  16 Compteurs d’impulsions incrémental / décrémental et pas configurable.
  •  255 Scènes sur 512 canaux DMX.(Nécessite l’extension X-DMX).
  •  255 horloges programmables pour déclencher des actions uniques ou à chaque seconde, minute, heure, jour , mois.
  •  Notifications GET et POST sécurisées: Cryptage des pushs en TLS (HTTPS).
  •  Envoi d’émails sécurisés vers 1 à 4 utilisateurs différents.
  •  Support du Dyn-Dns.
  •  Mise à l’heure par serveur NTP et/ou Horloge interne avec sauvegarde en cas de coupure réseau ou de courant.
  •  Gestion fuseaux horaire et changement d’heure été/Hiver.
  •  Moteurs de scénarios GX© : Logique combinatoire ET / OU / NOT.
  •  8 Tableaux de bord responsives personnalisables par  widgets.
  •  Editeur Javascript pour personnaliser et créer ses propres widgets.
  •  Sources de données configurable  JSON et XML.
  •  Controle des lampes LED RGBW Mi-Light.

 

et une présentation ici http://blog.domadoo.fr/2016/02/16/a-decouverte-de-carte-ipx800v4-de-cge-electronics/

Il nous intéresse ici de savoir que l’IPX possède une API permettant de le contrôler par passage de commandes dans une URL.

Pour peu que vous ayez ouvert un compte chez gce vous pouvez récupérer les mises à jour de l’ipx et la documentation qui nous apprends que pour utiliser l’IPX via JSON ou M2M, il faut y autoriser l’utilisation de l’API.

Dans le menu ip_de_votre_ipx/admin/m2m.htm il suffit d’activer l’API et de donner un code d’accès (1234 par exemple).

ipx800_api

Puis ensuite la doc de l’api est assez bien faite pour mettre en place le pilotage et l’interrogation facilement

Sachant que l’ipx 800 à 192.168.1.74 comme adresse ip et que ma clé API est 1234.

Pour activer le Relai 01
http://192.168.1.74/api/xdevices.json?key=1234&SetR=01

Pour le repasser  à 0
http://192.168.1.74/api/xdevices.json?key=1234&ClearR=01

Pour incrémenter le Compteur 02 de +2
http://192.168.1.74/api/xdevices.json?key=1234&SetC02=+2

Ces url de pilotage pourront être facilement liées à un switch Domoticz par les action ON/ action OFF pour que celui-ci pilote l’ipx.

ipx_http

On peut aussi grouper les commandes dans un seul appel d’URL de cette façon :

http://IPX800_V4/api/xdevices.json?key=apikey&SetR=01,02,03,04,05,06,07,08 » qui met les 8 relais de l’IPX800V4 à 1.

Pour récupérer des données on utilise Get=R pour relais ou Get=VA pour les virtuelles ou Get=C pour les compteurs

http://192.168.1.74/api/xdevices.json?key=1234&Get=C
renvoie un pavé de valeurs en JSON contenant toutes les valeurs des compteurs.

Exemple :

{
« product »: « IPX800_V4 »,
« C1 »: 0,
« C2 »: 26,
« C3 »: 0,
« C4 »: 0,
« C5 »: 0,
« C6 »: 20,
« C7 »: 0,
« C8 »: 0,
« C9 »: 19050,
« C10 »: 0,
« C11 »: 0,
« C12 »: 0,
« C13 »: 0,
« C14 »: 0,
« C15 »: 0,
« C16 »: 0
}

Il est ensuite facile d’extraire les valeurs recherchées via jq/python ou autres, ici jq dont l’installation est détaillée ici https://easydomoticz.com/manipuler-les-donnees-json-de-domoticz-en-shell/

#!/bin/bash
valeurC2=$(curl -s "http://192.168.1.74/api/xdevices.json?key=1234&Get=C"|jq   -r .C2)
echo $valeurC2

me renverra bien ma valeur attendue pour le compteur 2

Voila, au final une intégration simple et fonctionnelle rapidement sans prise de tête.

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

Envoyer des email depuis le Raspberry

Etonnant, mais depuis le temps que je parle ici d’envoyer des tweets, des sms jamais il n’a été question d’envoyer des mails depuis la ligne de commande. 😯

Réparons cet oubli avec sSMTP dont l’installation est bien décrite ici http://www.pihomeserver.fr/2015/08/13/envoyer-un-email-depuis-votre-raspberry-pi/   et  https://doc.ubuntu-fr.org/ssmtp qui nous permettra d’utiliser un SMTP (de google) mais d’autre fournisseurs sont semble t’il utilisables à condition d’adapter les ports/TLS.

Installation.

Sur la page citée plus haut , il faudra juste faire précéder les instruction d’un sudo.

Dans le fichier de configuration, placez dans la ligne  hostname=mon_serveur_domotique.com par exemple.

puis modifiez le etc/hosts en conformité, ceci afin d’éviter les erreurs d’envoi de mail.

127.0.0.1  localhost domoticz mon_serveur_domotique.com
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=postmaster

# The place where the mail goes. The actual machine name is required no
# MX records are consulted. Commonly mailhosts are named mail.domain.com

# Where will the mail seem to come from?
#rewriteDomain=

# The full hostname
#hostname=domoticz

# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
#FromLineOverride=YES

mailhub=smtp.gmail.com:587
AuthUser=mon_compte_gmail@gmail.com
AuthPass=mot_de_passe_gmail
useSTARTTLS=YES
useTLS=YES

Testez par echo Bonjour | mail -s « test » votre_adresse_mail@xyz.com

Utilisation.

  • Pour envoyer un simple message :
echo Bonjour | mail -s "test" adresse_mail@xyz.com
  • Pour envoyer le contenu d’un fichier dans le message :

 

mail.cat domoticz.sh | mail -s "test" adresse_mail@xyz.com
  • Pour envoyer un fichier en pièce jointe :
mpack  -s "Ma voiture" hummer_limo.jpg adresse_mail@xyz.com

Le sujet du message est donné par ce qui suit le -s

C’est simple et ça nous évite postfix !

Afficher l'image d'origineAfficher l'image d'origine

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

DzVents pour Domoticz, les scripts n’ont jamais été plus faciles

Dernier épisode concernant dzVents, le parcours de quelques méthodes qui seront à utiliser dans le bloc execute

Les méthodes dzVents

  • email(subject, message, mailTo): Fonction. Envoi de email.
  • fetchHttpDomoticzData: Fonction. Ceci lance un script qui récupère les données Domoticz et les place dans les fichier dzVents.Ce fonctionnement est activé par le fichier dzVents_settings.lua. Si vous l’avez désactivé dans les settings il vous faudra appeler cette méthode.
  • log(message, [level]): Fonction. Envoie un message dans le log Domoticz avec le niveau de verbiage [level] qui peut être domoticz.LOG_INFO, domoticz.LOG_DEBUG or domoticz.LOG_ERROR. Dans le  dzVents_settings.lua vous pouvez préciser le niveau des messages qui doit s’afficher (1,2,3).
  • notify(subject, message, priority, sound): Fonction. Envoi d’une notification (Prowl). La priorité sera choisie entre  domoticz.PRIORITY_LOW, PRIORITY_MODERATE, PRIORITY_NORMAL, PRIORITY_HIGH, PRIORITY_EMERGENCY et peut même faire un son sur le Raspberry,voir ici plus bas
  • openURL(url): Fonction. l’appel d’une URL
  • setScene(scene, value): Fonction. Activez ou désactiver une scene Domoticz domoticz.setScene(‘My scene’, ‘On’). Cela supporte les timing voir ici .
  • sms(message): Fonction. Envoi d’un SMS si configuré dans Domoticz.
  • switchGroup(group, value): Fonction. Activation d’un groupe domoticz, la syntaxe est  domoticz.switchGroup(‘My group’, ‘Off’). Cela supporte les timing voir ici .

Iterateurs

dzVents apporte des itérateurs sur les 3 tables: devices, changedDevices et variables. Cela évite de recourir aux  pair() or ipairs() de Lua , les passionés liront le chapitre concerne en anglais ici https://github.com/dannybloe/dzVents

Sinon, pour illustrer:

    domoticz.devices.forEach(Fonction(device)
        if (device.batteryLevel < 20) then
            -- do something
        end
    end)

Ou en filtrant sur les devices non mis à jours depuis 60 minutes :

    local deadDevices = domoticz.devices.filter(Fonction(device)
        return (device.lastUpdate.minutesAgo > 60)
    end)
    deadDevices.forEach(Fonction(zombie)
        -- do something
    end)

Constantes

  • Pour mettre à jour les widget texte : ALERTLEVEL_GREY, ALERTLEVEL_GREEN, ALERTLEVEL_ORANGE, ALERTLEVEL_RED, ALERTLEVEL_YELLOW
  • Pour forcer les barometres à nuageux,nuageux pluvieux, stable ,etc,etc utilisez : BARO_CLOUDY, BARO_CLOUDY_RAIN, BARO_STABLE, BARO_SUNNY, BARO_THUNDERSTORM, BARO_UNKNOWN, BARO_UNSTABLE
  • Pour les critères d’hulmidté ; confortable,sec,normal,humide c’est : HUM_COMFORTABLE, HUM_DRY, HUM_NORMAL, HUM_WET
  • Les niveau de Log : LOG_DEBUG, LOG_ERROR, LOG_INFO.
  • Les priorités pour les messages,notifications sortants PRIORITY_LOW, PRIORITY_MODERATE, PRIORITY_NORMAL, PRIORITY_HIGH, PRIORITY_EMERGENCY
  • Le panneau de sécurité : SECURITY_ARMEDAWAY, SECURITY_ARMEDHOME, SECURITY_DISARMED.
  • Les sons des notifications : SOUND_ALIEN , SOUND_BIKE, SOUND_BUGLE, SOUND_CASH_REGISTER, SOUND_CLASSICAL, SOUND_CLIMB , SOUND_COSMIC, SOUND_DEFAULT , SOUND_ECHO, SOUND_FALLING , SOUND_GAMELAN, SOUND_INCOMING, SOUND_INTERMISSION, SOUND_MAGIC , SOUND_MECHANICAL, SOUND_NONE, SOUND_PERSISTENT, SOUND_PIANOBAR , SOUND_SIREN , SOUND_SPACEALARM, SOUND_TUGBOAT , SOUND_UPDOWN.

Lire la suite

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

Imperihome, une nouvelle version NodeJS

Objectif :

Installer la dernière version de MyDomoAtHome version NodeJs pour Domoticz. Cette version rend obsolète les autres versions et sera celle qui sera maintenue à long terme.

Rappel  :

Imperihome est une application pour smartphone  et tablettes Android/Ios qui s’intègre nativement à bon nombre de systèmes de domotique  (Domoticz, Sonos, Kodi) et autres objets connectés du marché via une API génerique.

Paramétrable, souple et en régulière évolution vous trouverez dans le google store une version gratuite limitée à 2 pages d’équipements et une version version payante.

Les liens sur le site ImperiHome http://www.evertygo.com/imperihome

Screenshot_2014-11-11-10-17-25

Contrairement à d’autres applis existantes (Andromoticz par exemple), ImperiHome est multiplateforme domotique.

Le but de cet article est donc de décrir l’installation d’une passerelle entre notre Domoticz et l’appli Android/Ios afin de permettre le pilotage via smartphone.Cette passerelle agira comme une interface entre Domoticz et Imperihome et vice versa.

Il y a donc un Client (ImperiHome), une Passerelle nommée MyDomoAtHome (mdah) pour les intimes, un Serveur (notre Domoticz). La Passerelle est un Web serveur REST avec son propre IP:port qui sera différent de celui existant déjà pour Domoticz.

Voila quelques screens tirés du wiki anglais de Domoticz.

Imperihome screen 1

Imperihome screen 2
Screenshot_2013-10-12-18-55-05_framed_id23

Possibilités

Lire la suite

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

Les scripts avec dzVents : entrons dans les détails

Toujours à la découverte des scripts dzVents (premier article ici https://easydomoticz.com/scripts-plus-faciles-domoticz-dzvents/) entrons un peu plus dans leur intimité . 😳

Le fonctionnement des scripts dzVents.

Encore une fois , il ne s’agit que d’une traduction du readme situé ici https://github.com/dannybloe/dzVents, les lecteurs anglophones trouveront leur bonheur la-bas, pour les frenchies c’est ici.

Revoyons un script dzVents

return {
    active = true,
    on = {
        'My switch'
    },

    execute = function(domoticz, device)
        -- your script logic goes here, something like this:

        if (device.state == 'On') then
            domoticz.notify('I am on!', '', domoticz.PRIORITY_LOW)
        end

    end
}

il y a 3 parties importantes: active, on et execute.

 

  • active: peut contenir soit :
    • une valeur booléenne (true or false, cela doit rester true ou false en anglais, sans guillemets). Si vous placez cela à false, le script ne sera pas appelé. Pratique pour inactiver l’exécution d’un script.
    • une fonction Lua qui renverra true ou false. Cette fonction (que vous devrez gérer vous même) recevra un objet domoticz avec toutes les informations issues de votre instance Domoticz active = function(domoticz) …. end.

Donc par exemple ici vous pouvez ajouter une fonction qui renverra true ou false si une variable à été modifiée, le script ne se déclenchera que lors de la reception du true.Exemple :

        active = function(domoticz)
                return (domoticz.devices['script_blabla'].state == 'On')
            end,

Toutefois  ce script s’exécutera pour décider si il doit s’exécuter vraiment, il est donc plus efficace de mettre ces tests dans la partie « execute » du script (c.f readme du github).

 

  • on: Aucun rapport avec un ON/OFF d’un swich, comprenez le comme un déclencheur, comme un événement : Si il se passe ceci  alors execute … On peut y placer plusieurs vérification d’état de matériel
    • Placez y le vrai nom de votre device entre simple quotes (‘). Vous pouvez y utiliser étoile (*)  comme joker Exemple : PIR_* ou *_PIR . Dans ce cas tous les devices concernés seront mis à jour,
    • L’idx de votre matériel (Vous avez toujours le droit de changer de nom alors que l’idx ne changera jamais),
    • Le mot clé ‘timer’ qui permettra de lancer ce script toutes les minutes (voir plus bas).
    • Ou un mélange de tout cela tel que :
      on = {
      		'Lumiere',                   -- nom du device
      		'Temperature',               -- si la Température change (c'est bourrin)
      		'Présence',                  -- nom du matériel
      		258,                         -- index du device
      		['timer'] = 'every minute',  -- toutes les minutes
      		'PIR_*',                     -- tout ce qui commence par PIR_ (PIR_1,PIR_Salon, PIR_SBD...)
      	},

      On peut en placer autant que nécessaire et si n’importe lequel change de valeur, alors le script est exécuté.

    Remarquez les {} pour englober tous les matériels mentionnés dans le on= et les virgules en bout de ligne.

  • execute: C’est ici qu’est le coeur du script, c’est ici que vous déclencherez vos actions telles que changement d’états , envoi de notification, affectation de variables … Plus besoin de commandArray anymore.

Voyons maintenant une fonctionnalité puissance de dzVents le mot clé timer :

Le mot clé timer

Nous avons vu plus que que dans un on = { } on peut placer le mot timer pour gérer du temps.

Il faut savoir que Domoticz ne sait pas gérer du temps en dessous de la minute, aucun script Lua ne peut être lancé en dessous de cette limite, ceci dit dzVents apporte de la souplesse pour pouvoir faire de vrais plannings.

Voyons les nombreuses fonctions liées à cela.

Attention aux crochets [], ils sont indispensables (c’est du Lua):

on = {
    'timer'                            -- la forme basique ce script est lancé tt les minutes
    ['timer'] = 'every minute',        -- pareil qu'au dessus mais c'est plus clair non ?
    ['timer'] = 'every other minute',  -- minutes: qui semble t'il sont paires xx:00, xx:02, xx:04, ..., xx:58
    ['timer'] = 'every <xx> minutes',  -- toutes les xx minutes à partir de xx:00 (0 à 60)
    ['timer'] = 'every hour',          -- toutes les heures 00:00, 01:00, ..., 23:00  (24x par 24hrs)
    ['timer'] = 'every other hour',    -- toutes les heures paires 00:00, 02:00, ..., 22:00  (12x par 24hrs)
    ['timer'] = 'every <xx> hours',    -- toutes les xx heures à partir de 00:00, (0 à 24) 
    ['timer'] = 'at 13:45',            -- c'est vous qui précisez l'heure HH:MM
    ['timer'] = 'at *:45',             -- toutes les 45eme minute de chaque heure
    ['timer'] = 'at 15:*',             -- toutes les minutes entre 15:00 et 16:00
    ['timer'] = 'at 13:45 on mon,tue', -- a 13:45 seulement lundi,mardi (c'est en english pour les jours, souvenez vous)
    ['timer'] = 'every hour on sat',   -- chaque heure que le samedi
    ['timer'] = 'at sunset',           -- au coucher/lever du soleil (utilise les infos deDomoticz)
    ['timer'] = 'at sunrise',
    ['timer'] = 'at sunset on sat,sun' -- au coucher les samedi et dimanche

    -- et cerise sur le gâteau on peut en placer plusieurs à la queue leu-leu, à la queue leu-leu
    -- et on s'éclate à la queue leu-leu: 
    
    ['timer'] = {'at 13:45', 'at 18:37', 'every 3 minutes'}, },

Voyez la puissance de la dernière syntaxe quand à la création de plannings simples et clairs à lire.

Dans la vraie vie cela fait qq chose comme cela :

return {
    active = true,
    on = {
        ['timer'] = {
            'at sunset',
            'at 01:00',
            'at 18:37'}
 },

Remarquez les {} pour englober tous les horaires mentionnés dans [‘timer’] et la virgule au bout de ligne (sauf la dernière)

j’ai bien cherché quelques images/vidéo pour égayer mais à part à la queue leu-leu je n’ai rien trouvé alors il n’y aura pas d’illustration dans cet article.

 

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