Des scripts plus faciles pour Domoticz avec dzVents

Vous êtes sans doute nombreux à avoir vu passer l’info: depuis quelques semaines il existe un nouveau type de langage de scripts que l’on peut intégrer à Domoticz, les dzEvents de dannybloe.

Langage de script qui se veut plus simple et plus lisible que Lua et qui est une surcouche du Lua Domoticz. Ainsi le dzEvent sera « retraduit » en « vrai » Lua. L’idée est de faciliter la lecture/ecriture de scripts.

Vous trouverez donc ici la traduction à ma sauce et des débuts d’explications de ces ressources anglophones : http://www.domoticz.com/forum/viewtopic.php?f=23&t=10834&sid=b844044efb6fbeb0841881a164361a0c

et https://github.com/dannybloe/dzVents

Voici donc le pitch de dzEvents

Présentation

dzVents (|diː ziː vɛnts| raccourci pour Domoticz Easy Events) apporte un nouveau type de scripting dans Domoticz.

Vous pouvez gérer vos switches facilement,vous aurez un contrôle sur les scripts basés sur le temps avec un vrai planning, dzEvent vous apporte une API qui utilise toutes les informations de Domoticz issues de toutes les différentes tables de Domoticz.Plus de commandArrays complexes car dzEvent les encapsule tous y compris les écritures et lecture de vos périphériques.

Et cerise sur le gâteau la performance des scripts à été améliorée : si vous avez beaucoup de scripts Domoticz ne cherchera qu’une seule fois l’information pour vos script device et time au lieu de parcourir tous les scripts un par un.

Un exemple :

Imaginez que nous ayons un switch, qui à son changement d’état doit activer un autre switch si et seulement si la température d’une pièce est supérieure à une valeur niveau puis nous envoyer une notification

En dzEvent cela donne :

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

    execute = function(domoticz, roomSwitch)

        if (roomSwitch.state == 'On' and domoticz.devices['Salon'].temperature > 18) then
            domoticz.devices['Autre switch'].switchOn()
            domoticz.notify('Ca marche!',
                            'J'ai eteint car il faisait trop chaud',
                            domoticz.PRIORITY_LOW)
        end

    end
}

Pas mal !

Remarquez la syntaxe du haut on = , c’est le déclencheur sur l’état de quelque chose.

Un autre exemple avec des dates/heures/jours, le on = est ici un timer

return {
    active = true,
    on = {
        ['timer'] = {'Every 10 minutes on mon,tue,wed,thu,fri'}
    },

    execute = function(domoticz)

        -- check time of the day
        if (domoticz.time.isDayTime and domoticz.variables['myVar'].nValue == 10) then
            domoticz.variables['anotherVar'].set(15)
            --activate my scene
            domoticz.setScene('Evening lights', 'On')
            if (domoticz.devices['My PIR'].lastUpdate.minutesAgo > 5) then
                domoticz.devices['Bathroom lights'].switchOff()
            end
        end         

    end
}

Voyez qu’ici toutes les 10 minutes les lundi,mardi,mercredi,jeudi,vendredi on va lire une variable MyVar et si elle est égale a 10 on met une autre variable nommée ‘AnotherVar’  à 15 et on active une scène ‘Evening lights’ et si le périphérique nommé PIR n’a rien vu bouger depuis 5 minutes on met Bathroom lights à off par un switchOff.

Simple et concis.

Voyons la mise en place.

Installation.

Note: Ceci n’est pas testé pour des machines  non-linux (Windows).  Je suis certain que vous aurez des problèmes (dixit dannybloe concepteur du script).

Récupérez la dernière version depuis  GitHub, décompressez la dans le dossier de vos scripts Lua (/domoticz/scripts/lua)

cd domoticz/scripts/
https://github.com/dannybloe/dzVents/archive/master.zip
unzip master.zip

Vous obtenez un dossier dzEvent-master, entrez à l’intérieur prenez en le contenu (copier) et recopiez le directement dans le dossier Lua (coller) pour obtenir cela  :

dzEvent_1

Supprimez dzEvent-master une fois que tout est fonctionnel.

En résumé, un dossier  dzVents,puis les fichiers dzVents contenant :

domoticz/
    scripts/
        lua/
            dzVents/
                ... <dzVents files> ...
                examples/ 
                tests/
            scripts/
            script_time_main.lua
            script_device_main.lua
            dzVents_settings.lua
            ... <other stuff that was already there> ...

Ouvrez le fichier  dzVents_settings.lua et placez vos ip et numéro de port Domoticz. Merci de vérifier que vous n’utilisez pas de user/password pour le réseaux locaux (127.0.0.1) dans la config de Domotic sinon dzVents ne pourra lire les valeurs de vos équipements !

Dans ces settings on peut régler le niveau de log souhaité, plus ou moins bavard, 3 étant le plus loquace et utile au tout départ afin de savoir si tout marche. Repassez le à 2 ensuite.

Le [‘Enable http fetch’] à placer à True ou False permet à dzVents d’interroger régilièrement Domoticz et de mettre à disposition des scripts dzVents toutes les valeurs de Domoticz d’un seul coup.

[‘Domoticz ip’] = ‘192.168.1.81’,
[‘Domoticz port’] = ‘8080’,
[‘Fetch interval’] = ‘every 30 minutes’, — see readme for timer settings
[‘Enable http fetch’] = true, — only works on linux systems
[‘Log level’] = 3
}

Le dossier nommé scripts devra contenir nos scripts dzVents, il suffit juste de les nommer en .lua, plus besoin de script_device, ou script_time…

Et tout de suite les logs Domoticz doivent vous donner trace de l’activité de dzEvents (ici avec niveau de log = 3)

LUA: Found otherdevices_utility adding this as a possible attribute
LUA: Found otherdevices_svalues adding this as a possible attribute
LUA: Found otherdevices_humidity adding this as a possible attribute
LUA: Found otherdevices_idx adding this as a possible attribute
LUA: Found otherdevices_dewpoint adding this as a possible attribute
LUA: Found otherdevices_temperature adding this as a possible attribute
LUA: Found otherdevices_lastupdate adding this as a possible attribute
LUA: Event in devicechanged: Memory Usage_Utility value: 7.7199997901917
LUA: Searching for scripts for changed device: Memory Usage
LUA: Event in devicechanged: Memory Usage value:
LUA: Searching for scripts for changed device: Memory Usage
LUA: Found otherdevices_utility adding this as a possible attribute
LUA: Found otherdevices_svalues adding this as a possible attribute
LUA: Found otherdevices_humidity adding this as a possible attribute
LUA: Found otherdevices_idx adding this as a possible attribute
LUA: Found otherdevices_dewpoint adding this as a possible attribute
LUA: Found otherdevices_temperature adding this as a possible attribute
LUA: Found otherdevices_lastupdate adding this as a possible attribute
LUA: Event in devicechanged: CPU_Usage value:
LUA: Searching for scripts for changed device: CPU_Usage
LUA: Event in devicechanged: CPU_Usage_Utility value: 1.4700000286102
LUA: Searching for scripts for changed device: CPU_Usage
LUA: Found otherdevices_utility adding this as a possible attribute
LUA: Found otherdevices_svalues adding this as a possible attribute

Bien maintenant que ça marche , continuons.

Si cela ne fonctionne pas vérifiez bien votre arborescence /domoticz/scripts/lua/dzevent avec le fichier de settings dans /lua

Mon premier script dzVents

Créons notre premier script :

Récupérez le nom exact d’un de vos switchs ici un capteur PIR nommé ‘Présence’ puis copiez ce script dans le dossier scripts (/domoticz/scripts/lua/scripts). Nommez le comme bon vous semble ici test.lua

Le script envoie une notification et affiche un message dans le log Domoticz lors de son passage à ON et envoie une notification lors du passage à OFF.

return {
    active = true,
    on = {
        'Présence'
    },
    execute = function(domoticz, switch)
        if (switch.state == 'On') then
            domoticz.notify('Alerte!', 'Capteur Presence à ON!',
            domoticz.PRIORITY_NORMAL)
         domoticz.log ('il y qq ds le salon')
        else
            domoticz.notify('Fin d'alerte', 'Plus rien à signaler',
            domoticz.PRIORITY_NORMAL)
        end
    end
}

le log affiche alors (en mode 3)

LUA: Found otherdevices_temperature adding this as a possible attribute
LUA: Found module in /home/pi/domoticz/scripts/lua/scripts folder: test
LUA: Event in devicechanged: Présence value: On
LUA: Searching for scripts for changed device: Présence
LUA: Handling events for: "Présence", value: "On"
LUA: =====================================================
LUA: >>> Handler: test
LUA: >>> Device: "Présence" Index: 157
LUA: .....................................................
LUA: il y a qq ds le salon
LUA: .....................................................
LUA: <<< Done
LUA: -----------------------------------------------------
LUA: [1] = SendNotification: Alerte!#Capteur Presence à ON!#0#pushove
LUA: =====================================================
Notification sent (email) => Success
Notification sent (http) => Success
EventSystem: Script event triggered: /home/pi/domoticz/scripts/lua/script_device_main.lua
2016-03-28 14:42:45.330 (Z-Stickusb11) Light/Switch (Présence)

Voila, après cette première étape nous découvrirons d’autres fonctionnalités dans de prochains articles.

P.S : il y a un dossier examples dans le dossier dzVents contenant quelques fichiers exemple, n’hésitez pas à les ouvrir pour vous en inspirer.

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

Une nouvelle section dans le forum easydomoticz dédiée aux ESP8266 et dérivés

Suite à de nombreuses demandes (!) une section dédiée aux ESP8266 vient d’être ouverte sur le forum.

esp8266

Pour ceux qui ne connaitraient pas ESP8266 il s’agit d’un module Wifi, peu cher (entre 3 et 8 € suivant modèles), s’interfaçant facilement à de nombreux équipements tels que Arduino les rendant ainsi wifi facilement mais pouvant également fonctionner de manière autonome, sans Arduino donc ce qui en fait un objet de choix pour l’IOT, internet des objets en Français.

Plus de lecture générale ici http://sebastien.warin.fr/2015/10/29/3223-esp8266-des-microcontroleurs-avec-wifi-integre-l-avalanche-des-objets-connectes-dans-constellation-dossier-complet-dans-le-magazine-programmez/

Le lien direct vers le forum est ici : https://easydomoticz.com/forum/viewforum.php?f=24

Vous y retrouverez une compilation de quelques liens sur des sujets anciens en attendant d’alimenter tout ça avec vos propres questions.

Utilisez aussi cette section pour tous les Weemos, NodeMCU ….

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

Installation d’un portier Vidéo et contrôle d’ouverture pilotés par Domoticz

Voici un article proposée par Deennoo, un contributeur régulier du forum, concernant la mise en place d’un portier vidéo Wifi au sein de Domoticz.

Merci de son travail.

Alors écoutons tonton Deennoo nous marrer sa belle histoire…  »

On avance, on avance dans la maison connectée : Grâce à Domoticz on a :

  • d’ensoleillement,
  • d’inondation,
  • de CO2,
  • détecteurs  d’incendie,
  • le gadget pour les plantes,
  • la balance,
  • une alarme,
  • le chauffage,
  • la mise en route d’appareils à des heures données,
  • un bandeau de led en wifi ou autre,
  • les lumières par relais,
  • la température,
  • d’humidité,

pour les meilleurs :

  • gestion de la piscine
  • l’ouverture du portail en fonction de votre position GPS (j’adore celle ci),
  • Multiroom grâce a LMS, et lorsque que vous regardez un film sur votre Kodi, la lumière ce tamise toute seul a la lecture / pause ou arrêt.
  • Votre maison vous envoie des Tweets, des Sms, des Emails, des Pushbullets,
  • Elle vous parle pour vous tenir informés du moindre événements (le facteur qui laisse une lettre, les enfants qui rentrent etc etc)

Cela commence a avoir de la gueule !

Mais quid des intervenants extérieurs ?

Comment  savez-vous qui à sonné au portail si vous n’êtes pas chez vous, qui va ouvrir au postier pour qu’il dépose ce colis beaucoup trop gros pour la boite au lettre mais que vous attendez avec impatience car il est parti de Chine depuis 1 mois ?

Il existe déjà des tutos pour les sonnettes connectée, pleins, pleins, pleins.
Il y a aussi énormément de déballage concernant les Interphones Video WIFI (ou filaire), mais très peu expliquent clairement comment faire pour que votre Domotique sache lui parler et interagir avec eux.

Aujourd’hui nous allons parler du Portier Video KKMOON S458-EU, c’est un clone des WIFI603, WIFI602, ou Konx, sauf que le KKMoon coûte moins de 70€ sur eBay…

Encore une fois je n’ai rien inventé, cet article est une compilation des différentes sources que l’on peut trouver sur le net, j’ai juste pris le temps de les lires, ainsi que les commentaires.

Le matériel

Photo 1

Il arrive dans une jolie boite, en couleur, sans aucune certification CE, avec un mode d’emploi en anglais pour installer l’application IOS ou Android.
Sont fournis également : les vis, le transfo 230v 12v.

A la mise en route une charmante voix en anglais vous accueille, sachez juste qu’en cherchant un tout petit peu sur Google, vous trouverez comment la mettre en français, et vous pourrez même mettre la voix des enfants.
Il fait Wifi-g et il y a une connexion Ethernet.

Je vais arrêter ici le descriptif car je ne sortirais rien de plus que les déballages précédents.

Je ne parlerais pas de la qualité du produit, de la porté du wifi, de la qualités de la vidéo et du son, de sa réactivité, car ce sont des éléments de jugement très personnels, sachez juste que son prix est justifié, il ne vaut pas plus – pas moins, si vous voulez mieux, mettez le prix…

Photo 2

Ce qui nous intéresse :
– Récupérer le flux vidéo dans Domoticz
– Récupérer le fait que quelqu’un sonne dans Domoticz
– Pouvoir actionner le relais depuis notre Domoticz

Les outils :
– Un Domoticz qui fonctionne
– Avoir un matériel Dummy et avoir créé deux boutons : un On/Off et un push On
– Une tablette ou appareil Android avec l’app de l’interphone + Tasker
– Une connexion Ethernet pour l’interphone (le wifi est vraiment trop mauvais)

La situation :

Je suis équipe d’une tablette qui me sert de panneau de contrôle pour ma domotique (même si en finalité, tout est tellement automatisé qu’il n y a bien que la page station météo, et le journal Sud Ouest qui sont utilisés, mais le débat n’est pas ici).

Sur cette tablette est installé l’application du portier Video Wifi et cela fonctionne.

Sur l’application de l’interphone, j’ai crée un utilisateur qui s’appelle Domoticz avec son mot de passe.

Intégration de la vidéo , ou comment récupérer le flux vidéo de l’interphone dans Domoticz.

Le flux vidéo est récupérable a par cette adresse :

http://ipdevotreinterphone:81/snapshot.cgi?user=utilisateur&pwd=motdepasse

Ou :
Utilisateur = le nom d’utilisateur que vous avez crée dans l’application du portier vidéo
Motdepasse = le mot de passe que vous avez donné a l’utilisateur sus nommé.

Essayez d’ouvrir ce lien dans Google : rien, nada que dalle, dans VLC une simple image apparaît !

Dans votre Domoticz :

Créez une camera :

IP : Renseignez l’ip de votre interphone
Port:81
Utilisateur : laisser vide
Mot de passe : laisser vide
URL : /snapshot.cgi?user=utilisateur&pwd=motdepasse

Cliquez sur tester la connexion et bravo, vous avez en live la Vidéo prise par votre Interphone.

Photo 3

Bien sur cette caméra est entièrement opérationnelle dans Domoticz comme les autres, aucune restriction.

Intégration du bouton d’appel.

Quand vous utilisez l’application de l’interphone, vous avez peut être remarqué que a chaque fois que le bouton d’appel est pressé, une photo vous apparaît avec les icônes de décroché et raccroché dans l’application Android.

Photo 4

Nous allons nous servir de cette image pour dire a notre Domoticz : « quelqu’un sonne il faut allumer le faux bouton qui s’appelle sonnerie interphone »

Grâce a Tasker et au profile « Événement fichier modifié» nous allons  surveiller le répertoire ou est stocké la photo envoyée à chaque sonnerie.

Avec l’application  officielle, le dossier a surveiller est /DoorBell/picVisitor/

Photo 5Donc maintenant à chaque fois qu’une photo est rajoutée ici , il faut lancer une action vers Domoticz en créant une action Get HTTP.

Dans Serveur:Port : mettre l’ip de votre Domoticz et son port habituel

Dans chemin, nous allons utiliser l’api json de Domoticz pour mettre a jour l’état d’un bouton : /json.htm?type=command&param=switchlight&idx=XX&switchcmd=On

Photo 6

Il convient de remplacer XX par le numéro d’IDX de votre bouton « Sonnerie Interphone »

On teste l’action en appuyant sur le bouton play, et vous devriez voir dans les log :

2016-03-05 17:46:24.276 (Dummy) Lighting 2 (Sonnerie Interphone)

En allant voir votre bouton : il doit avoir changé d’état avec une date/heure de mise a jour correspondant au moment ou vous avez appuyé sur le bouton Play de Tasker.

Ps : Pendant les tests : j’ai créé une pièce « interphone » dans Domoticz puis j’y ai placé les deux faux bouton pour l’interphone, ce sera plus facile a retrouver.

Photo 7 -3 photo 7-1 Photo 7-2

 

Photo 7-4

On peut sortir de Tasker sans oublier d’enregistrer le profile ! Et on essaye depuis l’interphone.

C’est bon, le bouton Domoticz se met a jour a chaque fois que le le bouton appel de l’interphone est pressé ?

Je lui ai mis une extinction automatique au bout de 60 sec (un bouton push ON faut aussi l’affaire)

Il commence a être bien intégré le bougre !! (sic)

Actionner le relais de l’interphone depuis Domoticz

Je pars du principe que vous savez comment mettre un contact sec a votre portail pour actionner son ouverture, ne me demandez pas je ne vous aiderais pas a ce sujet, les mode d’emploi sont fait pour être lus !

Une chose un peu lourde avec l’app de l’interphone c’est de devoir taper un mot de passe a 6 chiffre pour «ouvrir ».

On va faire en sorte que l’on puisse actionner l’ouverture depuis Domoticz.

Dans votre navigateur internet copiez/collez ceci :

http://IPDELINTERPHONE:81/openlock.cgi?user=utilisateur&pwd=motdepasse

Mince de mince de non de non, on a activé le relais d’ouverture de l’interphone ! (sic2)

Et en plus on a une réponse :

– var result= »ok »; sur votre navigateur
– l’interphone parle pour dire que le portail va s’ouvrir.

Vous l’avez compris : on va juste copier coller cette URL dans la case Action On de notre bouton : Ouverture Interphone

photo 8

Pensez bien a choisir un bouton Push ON a la création de ce bouton, ceci évitera d’avoir a le mettre sur OFF…

Faite le test, cliquez sur ce bouton : a chaque coup cela fonctionne !

Maintenant que l’interphone et Domoticz se parlent, à vous de jouer, scripts, scenario, blocky tout est bon !

Enfin, Cerise sur le gâteau, il est possible avoir le flux vidéo sur notre Android wear en cas de sonnerie ou d’alerte, avec la possibilité d’ouvrir le portail depuis la montre sans passer par l’application dédiée.

J’ai fait le choix de tasker, mais sachez que tinycam, monitor pro, ou d’autres combinaisons sont possibles.

Le principe est le même que pour l’intégration du bouton d’appel, sauf que qu’il faut créer une action pour lancer Tinycam/Monitor,avec une option pour avoir une action « ouvrir » reliée à l’URL du relais de l’interphone.

Encore un nouveau gadget intégrable à votre Domoticz, pour plus toujours plus d’interaction.

N’hésitez pas, Soyez curieux !

« 

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

Connecter un Raspberry directement à mon PC Windows

Après quelques semaines sans nouveaux articles sur le blog cause changement de boulot, plantages, changement de serveurs … reprenons un rythme plus habituel de publication par un tuto tout simple :

Comment connecter mon Raspberry, en IP fixe, directement à mon PC Windows par un simple câble réseau sans routeur,box…; comme ceci :

raspberry_connexion_directe

Matériel :

Un raspberry, son alimentation, une carte SD avec une distribution Linux dessus (c.f https://easydomoticz.com/domotique-comment-debuter/installation-de-domoticz-sur-raspberrylinux-debian/

Nous prendrons ici l’exemple de Raspbian.

Un câble réseau RJ45  NORMAL (droit) bien que les cartes réseau actuelles savent aussi utiliser les câbles croisés.

Tout d’abord nous devrons trouver une ip compatible avec notre PC puis modifier un fichier Linux pour donner l’adresse IP fixe.

Quelle IP donner à mon Raspberry ?

Etant donné que votre PC Windows n’est connecté à rien sur sa prise réseau RJ45, Windows à donné à cette interface réseau une adresse automatique commençant par 169.X.X.X  dite APIPA.

Ouvrons un terminal et jettons un œil à ipconfig à la ligne de la carte ethernet et non pas du Wifi.

ipconfig_windows

Ici mon PC Windows à l’adresse IP 169.254.16.146. Il faut que je donne à mon Raspberry une IP compatible, je choisis 169.254.16.147

Vous devez donner une IP en ne changeant QUE la dernière valeur (147) que vous devez adapter à votre configuration.

Configuration du fichier cmdline.txt :

Notez bien que la manip documentée pour une connexion avec Windows est valable pour n’importe quel système d’exploitation du moment que vous savez quelle ip à été donnée à votre RJ45.

Je ne décris ici que la mise en place avec un PC Windows.

Une fois votre image « gravée » sur votre carte SD, ouvrez un explorateur de fichiers, allez sur votre carte SD puis trouvez le fichier cmdline.txt, recopiez le au cas ou cela se passerait mal en cmdline.old puis ouvrez le cmdline d’origine

 

cmdline raspberry

Vous y trouvez quelque chose comme :

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

et AU BOUT DE CETTE LIGNE vous ajoutez ip=l’ip choisie plus haut sans retour à la ligne

dwc_otg.lpm_enable bla bla bla .... elevator=deadline rootwait ip=169.254.16.147

PAS DE TOUCHE ENTREE, DE RETOUR CHARIOT, DE TABULATION, c’est juste ESPACE ip=xxxx.xxxx.xxxx.xxxx

Sauvegardez vos modifs, éjectez proprement votre carte SD, insérez la dans le Raspberry, branchez le câble réseau et l’alim et patientez quelques secondes le temps du démarrage du Raspberry.

Un ping vers votre adresse vous confirmera que tout est correct, vous pouvez utiliser putty,mremote, un navigateur web pour aller vers votre nouvelle connexion.

Dans le cas ou cela ne fonctionne pas , retirez la carte SD, inserez la sur une autre machien et examinez la ligne en question.

Dans le pire des cas supprimez cmdline.txt et renommez cmdline.old en cmdline.txt puis refaites les manips.

Cette configuration prend le pas sur celle de /etc/network/interfaces.

Bien entendu la technique de /etc/networks/interfaces et toujours possible, celle ci est simple dans le cas ou aucune connexion vers une box n’est nécessaire.

Bien entendu on peut installer un serveur DHCP sur la machine Windows pour notre Raspberry, mais c’est une autre aventure…

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

powershell et airparif

A l’instar de ce qui avait été fait ici https://easydomoticz.com/domoticz-prend-lair-de-paris-avec-airparif/ avec Airparif et Python , retrouvez ici le portage sous Windows et  powershell.

Généralités

Le site Airparif.com met à notre disposition les mesures de pollution de la capitale pour 4 indices de pollution : indice global, NO2, O3 et pm10 (particules) allant de 0 faible à 100 très élevé.

Résultat de recherche d'images pour "pollution paris"

L’appel de l’ API airparif sous ce format http://www.airparif.asso.fr/appli/api/indice?date=jour vous renvoie un tableau de valeurs contenant les indices recherchés au format JSON.
Un peu de parsing JSON (dépiautage en français) , quelques widgets % dans Domoticz et c’est réglé.

Domoticz

Créez 4 widgets virtuels pourcentage et nommez les indice, NO2, O3, pm1 et notez soigneusement leurs idx respectifs.

Airparif_Domoticz_1

Airparif_Domoticz_2

Le script

Il faudra y définir les données de Domoticz et les indices respectifs de nos widgets.

#---PARAMETRES-----------------------

# --- les adresses Domoticz user/pass --------
$domoticz="http://127.0.0.1:8080"
$user=""
$pass=""
#------------------------------------------



# --- les idx des widget pourcentag pour les indices --------
# mettez vos propres idx à la place de 13,12,11,10
# pour l'indice global, puis l'indice NO2, le 02 et enfin les pm10
  
$idx = @{
        "dz_indice_global"="13";
        "dz_indice_NO2"="12";
        "dz_indice_O3"="11";
        "dz_indice_pm10"="10"
        }


# -----debug a 1 pour afficher qq messages, autre valeur sinon ----
$debug=1
#------------------------------

$url_airparif="http://www.airparif.asso.fr/appli/api/indice?date=jour"


#--- FIN DES PARAMETRES-----------------------




#--- Fonction d'ecriture vers Domoticz via url-------------------

function majdomoticz($idx,$val)
{

# ----- L url pour ecriture dans un widget pourcentage DZ ----
#http://IP:PORT/json.htm?type=command&param=udevice&idx=mon_idx&svalue=POURCENTAGE

$url1="/json.htm?type=command&param=udevice&idx="+$idx+"&svalue="+$val
$urldz=($domoticz+$url1)

#------------------------------
$pair = "${user}:${pass}"
$bytes = [System.Text.Encoding]::ASCII.GetBytes($pair)
$base64 = [System.Convert]::ToBase64String($bytes)
$basicAuthValue = "Basic $base64"
$headers = @{ Authorization = $basicAuthValue }
#------------------------------

#Invoke the web-request avec les headers d'authentification
#$json=Invoke-WebRequest -uri $urldz  -Headers $headers
try { $json=Invoke-WebRequest -uri $urldz  -Headers $headers } catch
     {
        $_.Exception.Response.StatusCode.Value__
        if ($_.Exception.Response.StatusCode.Value__-eq 201) {write-host "erreur authentification user/pass"}
     }
     
# recup reponse JSON
$infos_json = ConvertFrom-Json -InputObject $json


#recuperation depuis $infos_json avelc les libelles Domoticz
$Val_Retour=$infos_json.status

if ($debug-eq 1)  {
Write-Host "url Domoticz=" $urldz
Write-Host "message Json="$json
Write-host "Status retrourné="$Val_Retour}

}

#--------------- recup des idx configures plus haut ----------
$idx_glob=$idx.Get_Item("dz_indice_global")
$idx_NO2=$idx.Get_Item("dz_indice_NO2")
$idx_O3=$idx.Get_Item("dz_indice_O3")
$idx_pm10=$idx.Get_Item("dz_indice_pm10")
#--------------- ---------------------------------------------

if ($debug-eq 1)  {
write-host "Les indices" $idx_glob $idx_NO2 $idx_O3 $idx_pm10

}

#--- Fonction d'interrogation de L'API airparif et recup de la couleur  dans des variables globales pour appel de la fonction de
# mise à jour de Domoticz 
# les 
#-----------------------

function interroge_airparif
{
    try { $airparif_json=Invoke-WebRequest -uri $url_airparif}
    catch
     {
        $_.Exception.Response.StatusCode.Value__
        if ($_.Exception.Response.StatusCode.Value__ -eq 404) {write-host "erreur 404:  acces au site web"}
     }

Try {
    $infos_airparif = ConvertFrom-Json -InputObject $airparif_json 
       #$infos_airparif
        $global:valeur_indice_global=$infos_airparif.global.indice
        $global:valeur_indice_no2=$infos_airparif.no2.indice 
        $global:valeur_indice_o3=$infos_airparif.o3.indice    
        $global:valeur_indice_pm10=$infos_airparif.pm10.indice   
        
    }
Catch {
# si il y a une erreur sur l'appel de l'adresse de airparif.com on affiche 100% dans les widgets
        $global:valeur_indice_global="99.99999"
        $global:valeur_indice_no2="99.999999"
        $global:valeur_indice_o3="99.999999"
        $global:valeur_indice_pm10="99.99999"

       }
       
   
     if ($debug-eq 1)  {
     
        write-host "indice glob: "$global:valeur_indice_global
        write-host "NO2 : "$global:valeur_indice_no2
        write-host "03: "$global:valeur_indice_o3
        write-host "pm10: "$global:valeur_indice_pm10
     }
 
}
#---------------------------------------
interroge_airparif

majdomoticz  $idx_glob $global:valeur_indice_global
majdomoticz  $idx_NO2 $Global:valeur_indice_no2
majdomoticz  $idx_O3 $global:valeur_indice_o3
majdomoticz  $idx_pm10 $global:valeur_indice_pm10

En cas de non réponse de Airparif les valeurs affichées dans les widgets seront 100 (99.9999 dans le script)

Il faudra placer ce script dans le planificateur de tâches  Windows afin de la lancer au moins une fois par jour afin d’obtenir nos indices

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