Domoticz : Intégrer les données qualité de l’air en dehors de Paris

Edit du 11/01/2017 : Comme indiqué dans les commentaires l’adresse http://www.lcsqa.org/surveillance/indices/prevus/jour/xml/ ne répond plus. Ce qui suit est donc inexploitable.

Si vous avez des infos sur les endroits ou on peut degoter les indices de qualité d’air, faites en part dans les commentaires.


Après l’article concernant l’intégration des données de qualité de l’air à Paris grâce à Airparif,  voyons comment intégrer la qualité de l’air à Domoticz pour d’autres villes que la capitale.

Un commentaire d’ Emmanuel Pierre nous indiquait l’existence d’un script perl permettant d’intégrer la qualité de l’air depuis le site lcsqa.org : Laboratoire Central de Surveillance de la Qualité de l’Air pour de nombreuses viles Françaises.

Bonjour,

Le même script en perl mais qui permet de récupérer ces données pour une ville de France:

https://github.com/empierre/domoticz/blob/master/AIQ-LCSQA.pl

 

Un commentaire du mois de juin de Nam nous propose un script Lua dont vous trouverez le code plus bas dans l’article.

Le site lcsqa.org  met à notre disposition une API interrogeable par le nom de la ville.

On peut visualiser sur cette carte http://www.lcsqa.org/surveillance/indices/cartographie les indices et récupérer le nom de la ville qui nous intéresse en cliquant dessus..

ou sous forme de liste complété pour une date précise http://www.lcsqa.org/surveillance/indices/liste?date_indice=2015-04-19

Le paramétrage de Domoticz.

Il faut créer dans Domoticz 5 capteurs virtuels « Qualité de l’air » correspondant aux indices partiels et global : indice global, No2, So2,O3, pm10  et noter leur idx respectifs.

Le script Perl

Il nécessite la bibliothèque XML:Simple et JSON :  installez les par

sudo apt-get install libjson-perl libdatetime-perl libwww-perl libxml-simple-perl

Modifiez la partie ci dessous pour la faire correspondre à votre configuration

#A adapter à votre configuration:
my $domo_ip="192.168.0.28";
my $domo_port="8080";
my $agglomeration="PARIS";
my $dz_ind=211;
my $dz_o3=220;
my $dz_no2=221;
my $dz_so2=222;
my $dz_pm10=219;

A noter : Les valeurs des polluants restent souvent à 0 , on ne récupère  que l’indice global.

Le script Lua

Edit du 19/10/2015: suppression du script Lua

Il reste toutefois dans les commentaires de ce billet au cas ou une bonne volonté aurait envie de corriger/refaire un script correct.

 

Ça y est nous avons tous nos indices de pollution comme les parisiens !!

Mais chez nous, pas de pollution !!!

frankreich_bordeaux_aussicht

Merci à Empierre pour son travail.

Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/
Posted in domoticz, domotique, scripts and tagged , , , , , , , .

37 Comments

  1. Bonjour,

    je viens d’installer ce script sur mon système mais cela ne fonctionne pas pour le moment.
    J’ai mis le script avec mes paramètres dans /scripts/perl sous le nom de script_qualite_air.pl après l’avoir rendu exécutable avec un chmod u+x script_qualite_air.pl.

    Est ce que cela est correct?

    Je ne vois pas d’ou viens l’erreur.

    Peut être les `au lieu de ‘ dans les lignes 42 44 46 48 50 ?

    Merci pour votre aide

  2. Bonsoir
    Oui c’est correct
    Y’a t’il des erreurs au lancement du script manuellement ?
    Je n’ai pas eu besoin de toucher quoique ce soit d’autre en dehors des parametres specifiques à mon installation

    A tu un user/motdepasse pour Domoticz ?

  3. Bonjour,

    merci pour la réponse mais je n’ai pas de user/motdepasse pour Domoticz.

    Je teste ce soir en manuel.
    Faut il créer une ligne dans cron pour exécuter le script ou s’exécute-il tout seul?

    Merci

  4. Après avoir réglé le problème dont tu parles , il faudra en effet le placer dans le cron

  5. Salut

    J’ai essayé les deux scripts et (py et pl) et ça ne fonctionne pas.
    Le script Pyton me donne les erreurs d’identifation. J’ai donc supprimé les users et mot de passe et ça ne fonctionne pas (Même en faisant l’inverse)
    Le script Perl m’affiche bien les valeurs dans Putty (Genre 6 5 4 6) mais elles ne sont pas prise en compte dans domoticz.
    J’ai bien ajouter des dispositifs et mis leur IDX et non ça ne va pas.
    Par contre si je copie l’URL dans mon navigateur ça fonctionne (Même en navigation privée)

    A+

  6. Bonjour
    N’ayant pas rencontré de soucis particulier ni avec l’un ,ni avec l’autre, découpons tout ça pour y voir plus clair:
    Est ce que Domoticz est protege par mot de passe/user
    Pour le script python quels sont les messages erreurs ?
    Pour le perl est ce que les capteurs virtuels sont du bon type (qualite de l’air)

  7. Merci d’avoir répondu
    Non pas de mot de passe/user
    J’ai des soucis sur le script Airparif.py, j’ai bien créé les bon capteur virtuel
    Pour le script perl oui j’ai mis des capteurs virtuels qualité de l’air.

    Comme je l’ai dis au dessus, si je prend un URL dans le script Airparif.py pour la qualité de l’air (Exemple), que je mets une valeurs au hasard et que je copie l’URL dans mon navigateur ça fonctionne.
    On dirait que le soucis vient de Putty, comme si ça ne trouvait pas l’adresse IP de domoticz (Alors que j’ai bien mis la bonne)

    Bonne journée

  8. Et pour le python quelle est l’ erreur
    As tu fait des chmod + x sur tes 2 scripts

  9. Voici l’erreur

    requests.exceptions.ConnectionError: (‘Connection aborted.’, error(110, ‘Connection timed out’))

  10. Cela correspond à une ip inaccessible
    tu as vu ici , recherche le problème par la

    domoticz_ip=’192.168.1.82′
    domoticz_port=’8080′
    user= »
    password= »

    fais attention aux points, au simple guillemet qui referment, le port c’est 8080 chez toi ou tu l’as changé dans la config de Domoticz ?

  11. J’ai bien mis la bonne ip et le bon port, on dirait qu’il y’a un blocage entre putty et domoticz, si je copie l’adresse http que j’ai en retour dans mon navigateur, ça fonctionne

  12. Ah, c’est bon, j’ai compris
    Je pense que tu n’a pas crée des widget pourcentage, le script python cherche à remplir des valeurs dans un widget pourcent et comme ton widget ne l’est pas ca bugge
    Cree donc 4 widgets pourcent , place leurs idx dans le script et ca doit rouler

    # soit 4 widget POURCENTAGE differents
    # un pour l’indice global
    # un pour no2
    # un pour O3
    # un pour pm10
    #remplacer les 116,124,125 par vos idx de vos widgets

  13. Pour le script Python j’ai des widget %
    Pour le script Perl j’ai des widget Qualité de l’air

    Mais j’ai toujours la même erreur, sauf si je mets l’adresse manuellement dans mon navigateur

    Si un jour je trouve la solution je vous la communiquerai parce que là je comprend pas

    Merci quand même 🙂

  14. Toujours pour le script python , je viens de voir dans la commande que tu donnais précédemment un nvalue=2
    « http://192.168.1.85:8080/json.htm?type=command&param=udevice&idx=73&nvalue=2 »
    or dans le script python d’origine (et je viens de vérifier à l’instant) ce n’est pas nvalue mais svalue

    Je pense que tout vient de la
    A suivre…

  15. Non toujours pas :/
    J’ai curl: « (7) couldn’t connect to host » au bout de 60 sec
    Il faudrait que je post dans le forum car j’ai d’autre soucis étrange

  16. J’ai réinstaller domoticz et ça fonctionne, il devrait y’avoir des erreurs (Et oui ça fait 1 ans que mon RPi tourne)

    Merci pour ton site, j’apprends plein de choses 🙂
    A+

  17. Bonjour,
    le script perl fonctionne aussi chez moi mais j’ai uniquement le retour pour l’indice global.
    Savez vous pourquoi je n’obtiens pas les autres infos?

    Je n’ai pas encore édité le fichier cron car je ne sais pas quoi mettre comme paramètres sachant qu’il est inutile de demander une mise à jour toute les heures si le site les mets à jour 2 fois par jour.
    Savez-vous la fréquence de rafraîchissement de l’indice sur le site http://www.lcsqa.org ?
    Qu’utilisez vous comme ligne cron?

    Merci pour vos infos

    Activa73

  18. Bonsoir,
    Indéniablement ,les stations ne renvoient pas tous les paramètres.
    Regarde dans cette liste ce que renvoie ta ville http://www.lcsqa.org/surveillance/indices/liste
    Quand à la fréquence , je leur ai posé la question il y a plusieurs jours, ainsi que celle des mesures à vide mais pas de réponse à ce jour

  19. Voici le scipt lua (script_time_pollution.lua)
    Il fait la maj 2 fois par jour (au levé et au couché du soleil) afin de ne pas trop solliciter le site http://www.lcsqa.org

    — demo time script
    — script names have three name components: script_trigger_name.lua
    — trigger can be ‘time’ or ‘device’, name can be any string
    — domoticz will execute all time and device triggers when the relevant trigger occurs

    — copy this script and change the « name » part, all scripts named « demo » are ignored.

    — Make sure the encoding is UTF8 of the file

    — ingests tables: otherdevices,otherdevices_svalues

    — otherdevices and otherdevices_svalues are two item array for all devices:
    — otherdevices[‘yourotherdevicename’]= »On »
    — otherdevices_svalues[‘yourotherthermometer’] = string of svalues

    — Based on your logic, fill the commandArray with device commands. Device name is case sensitive.

    — Always, and I repeat ALWAYS start by checking for a state.
    — If you would only specify commandArray[‘AnotherDevice’]=’On’, every time trigger (e.g. every minute) will switch AnotherDevice on.

    — The print command will output lua print statements to the domoticz log for debugging.
    –List all otherdevices states for debugging:
    — for i, v in pairs(otherdevices) do print(i, v) end
    –List all otherdevices svalues for debugging:
    — for i, v in pairs(otherdevices_svalues) do print(i, v) end

    print(‘Start: script_time_pollution in the domoticz log’)

    id= »(AIR) »

    commandArray = {}

    printf = function(s,…) return print(id..s:format(…)) end

    #Parametres à changer
    local domo_ip= »localhost »
    local domo_port= »8080″
    local user= » »
    local password= » »

    local agglomeration= »
    local dz_ind=
    local dz_no2=
    local dz_so2=
    local dz_o3=
    local dz_pm10=

    local time = os.date(« *t »)
    t1 = time.hour*60+time.min

    t2 = timeofday[‘SunriseInMinutes’]
    t3 = timeofday[‘SunsetInMinutes’]
    print (‘Now ‘..t1..’ sunrise ‘..t2..’ sunset ‘..t3)

    if ((t1 == t2 ) or (t1 == t3 )) then

    os.execute(« curl http://www.lcsqa.org/surveillance/indices/prevus/jour/xml > /tmp/air.xml && chmod 777 /tmp/air.xml »)

    listing= »/tmp/air.xml »
    fhnd,err=io.input(listing) –io.open(listing)
    if fhnd then
    XmlString = io.read(« *all »)
    fhnd.close()

    for att in XmlString:gmatch'(.-)’ do
    v_ville = att:match'(.-)’
    if (v_ville == agglomeration) then
    v_date = (att:match'(.-)’ or ‘n/a’)
    v_ind = (att:match'(.-)’ or ‘n/a’)
    v_O3 = (att:match'(.-)’ or ‘n/a’)
    v_NO2 = (att:match'(.-)’ or ‘n/a’)
    v_PM10 = (att:match'(.-)’ or ‘n/a’)
    v_SO2 = (att:match'(.-)’ or ‘n/a’)
    v_com = (att:match'(.-)’ or ‘n/a’)
    url=’http://’..user..’:’..password..’@’..domo_ip..’:’..domo_port..’/json.htm?type=command&param=udevice&idx=’..dz_ind..’&nvalue=’..v_ind
    s = ‘curl -s -I « ‘..url..' »‘
    os.execute(s)

    url=’http://’..user..’:’..password..’@’..domo_ip..’:’..domo_port..’/json.htm?type=command&param=udevice&idx=’..dz_no2..’&nvalue=’..v_NO2
    s = ‘curl « ‘..url..' »‘
    os.execute(s)

    url=’http://’..user..’:’..password..’@’..domo_ip..’:’..domo_port..’/json.htm?type=command&param=udevice&idx=’..dz_so2..’&nvalue=’..v_SO2
    s = ‘curl « ‘..url..' »‘
    os.execute(s)

    url=’http://’..user..’:’..password..’@’..domo_ip..’:’..domo_port..’/json.htm?type=command&param=udevice&idx=’..dz_o3..’&nvalue=’..v_O3
    s = ‘curl « ‘..url..' »‘
    os.execute(s)

    url=’http://’..user..’:’..password..’@’..domo_ip..’:’..domo_port..’/json.htm?type=command&param=udevice&idx=’..dz_pm10..’&nvalue=’..v_PM10
    s = ‘curl « ‘..url..' »‘
    os.execute(s)

    break
    end

    end

    else
    printf(« Can’t open file: %s (%s) »,listing,err)
    end

    end

    print(‘Stop: script_time_pollution in the domoticz log’)
    return commandArray

  20. Bonjour, concernant le script LUA l avait vous tester ? Pour moi rien ne fonctionne, est il possible d avoir un peu plus d explications ?

    Merci

  21. Bonjour
    Le script Lua est en effet buggé de chez buggé
    Je n’ai pas le temps, ni les connaissances suffisantes pour le corriger de fond en comble
    Je le supprime de l’article

  22. Bonjour

    Le script  perl fonctionne chez moi.
    Après quelques recherches pour les mêmes motifs que Patrice73,  je penses avoir la réponse à la question concernant les infos manquantes.
    Le script récupère les informations que l’on visualise dans l’onglet « Données prévues pour aujourd’hui » et rare sont les sous-indices renseignés.

    Test fait avec la ville de AUBAGNE  le 1er Décembre 2015 à 13h30
    Données consolidées                          :  3      3      2     –     –
    Données prévues aujourd’hui           : 4      3      4     4     –    les valeurs reçues dans DomoticZ.
    Données prévues demain                  :  5

    Un grand merci pour votre site sur lequel j’ai trouvé un maximum d’infos et qui m’a souvent dépanné dans mes galères.

    Cordialement

  23. Ca marche pas mal mais… pour une qualité de l’air de 8 (Mauvais en pratique), j’obtiens sur Domoticz Excellent… en fait tout est à excellent… d’où vient ce libellé? De même que l’unité, qui est à « ppm »! Alors que le script PERL ne retourne qu’une valeur numérique…

    Merci pour vos explications!

    Cdt,

     

  24. Bonsoir
    Ah j’ai compris !!
    On recupere des valeurs depuis le site airqual dont les valeurs sont entre 1 et 30/50.
    Comme on met cela dans un widget domoticz CO2, les valeurs 1,2,3, … sont faibles et le commentaire associé à la valeur est donc excellent parce que 1,2,3,… de CO2 c’est excellent.

    Donc cela ne reflete rien le commantaire lié à la valeur puisque pas approprié , donc 2 solutions
    soit tu fais avec soit tu créé d’autres widgets (texte ou alerte) et tu modifie le script perl pour alimenter non plus des widgets CO2 mais des text ou alerte

  25. merci pour ta réponse… je vais faire d’abord l’option 1 parce que je viens juste de découvrir Domoticz (et je ne comprends pas encore bien la philisophie…), puis je ferai le 2) si j’en suis capable 🙂

    Cdt,

    S

     

  26. Fini de jouer , la page http://www.lcsqa.org/surveillance/indices/prevus/jour/xml n’existe plus (et pas trouvé d’autre lien…)…

     

     

  27. Arf, c’est bien dommage que cela ne fonctionne plus.

    Pour info, concernant la normandie (où je réside), le site www.airnormand.fr permet de retoruver toutes les infos de qualité de l’air avec des mesures heure par heure. Aucune idée de comment rapatrier cela dans domoticz, et ce ne sera de toute façon pas valable pour l’ensemble du territoire….

    Merci encore pour le travail fourni, en espérant que cela re-fonctionne un jour.

  28. On peut peut etre récuperer les données du site de prev’air : http://www2.prevair.org/

Comments are closed.