[Python] Recuperation Airparif

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
patrice
Messages : 1720
Inscription : 22 sept. 2014, 21:51

Re: Recuperation Airparif

Message par patrice »

Bonjour
En effet le format à changé, les indices individuels ne sont plus renvoyés , il n'y a que les indices globaux.
Si une bonne ame à le temps de se pencher sur le sujet ...
Raspberry pi 3, Dongle RfxCom et Zigate +, plugin de pipiche, Volets Roulants profalux, contrôle d'éclairage, détecteurs de présence, alarme incendie, pilotage livebox ...
Objectif : WAF > 1
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: Recuperation Airparif

Message par papoo »

airparif diffuse ses données sur le site http://www.lcsqa.org/
les indices du jour pour Paris sont disponible via le script lua
viewtopic.php?f=17&t=2006&p=17939
ou via
http://easydomoticz.com/domoticz-integr ... -de-paris/
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
Flintstones
Messages : 41
Inscription : 20 janv. 2015, 22:56

Re: Recuperation Airparif

Message par Flintstones »

J'ai enfin pris le temps de faire la modif et d'essayer ce script.
Ca fonctionne sauf pour le SO² qui ne sont pas dans la page données du jour mais ils sont dans la page données consolidées.

Une idée pour modifier le script pour aller faire une recherche sur les données consolidées ?
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: Recuperation Airparif

Message par papoo »

faire deux appels de fichiers pour récupérer les infos du fichier consolidé.
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
Flintstones
Messages : 41
Inscription : 20 janv. 2015, 22:56

Re: Recuperation Airparif

Message par Flintstones »

c'est ce que j'essaye de faire.... mais je ne suis pas un pro ;-)

des que j'y arrive je posterai ma solution.
Flintstones
Messages : 41
Inscription : 20 janv. 2015, 22:56

Re: Recuperation Airparif

Message par Flintstones »

je seche sur la ligne " print Dumper $decoded; " .
a priori elle ne fonctionne pas et donc je n'arrive pas à voir comment est renvoyé la liste des données consolidées
jmv75013
Messages : 146
Inscription : 03 janv. 2017, 16:20

Re: Recuperation Airparif

Message par jmv75013 »

Bonjour,

Lorsque je lance le script ./airparif.py, j'obtiens l'erreur suivante :

airparif.py = r.json()
TypeError:'List' object is not callable

Merci pour votre aide
Flintstones
Messages : 41
Inscription : 20 janv. 2015, 22:56

Re: Recuperation Airparif

Message par Flintstones »

Airparif ne renvois plus depuis longtemps les infos.

voici un nouveau script celui ci récupère les données de la veille.
Il faudra définir 5 custom sensors (Global,O3,no²,so²,pm10) :

Penser à mettre a jour :
- l'adress ip
- l'agglomeration : la liste
- les idx des sensors

et peut-etre à installer les librairies necessaires : sudo apt-get install libjson-perl libdatetime-perl libwww-perl libxml-simple-perl

Code : Tout sélectionner

#!/usr/bin/perl
use v5.14;
use LWP::Simple;                # From CPAN
use XML::Simple;                # From CPAN
use strict;                     # Good practice
use warnings;                   # Good practice
use utf8;    
use POSIX;
use feature     qw< unicode_strings >;
use Time::Piece;
use Time::Seconds;
#Support: domoticz@e-nef.com ou forum Domoticz

#Pour ajouter les librairies necessaires:
#sudo apt-get install libjson-perl libdatetime-perl libwww-perl libxml-simple-perl

#A adapter a votre configuration:
my $domo_ip="xxx.xxx.xxx.xxx";
my $domo_port="8080";
my $agglomeration="xxx";
my $dz_ind=xxx; #ID d'un device virtuel de type CO2 pour tous les suivants
my $dz_o3=xxx;
my $dz_no2=xxx;
my $dz_so2=xxx;
my $dz_pm10=xxx;

#Ne pas toucher en dessous
# subtract secs in day from current epoch time
my ($s, $min, $h, $d, $m, $y) = localtime();
my $hier = strftime "%Y-%m-%d", $s, $min, $h, $d-1, $m, $y;

my $trendsurl = " http://www.lcsqa.org/indices-qualite-air/xml/$hier";

my $json = get( $trendsurl );
die "Could not get $trendsurl!" unless defined $json;

my $xml = new XML::Simple;
# Decode the entire JSON
my $decoded = $xml->XMLin( $json );

foreach my $f ( @{$decoded->{node}} ) {
  if ($f->{"agglomeration"}eq $agglomeration) {
	print $f->{"valeurIndice"} . " " . $f->{"SousIndiceO3"} . " " . $f->{"SousIndiceNO2"} ." ". $f->{"SousIndiceSO2"} . " " .$f->{"SousIndicePM10"} . "\n";
	my $payload=$f->{"valeurIndice"};
	if (isdigit($payload)) { `curl -s "http://$domo_ip:$domo_port/json.htm?type=command&param=udevice&idx=$dz_ind&nvalue=0&svalue=$payload"`; }
	$payload=$f->{"SousIndiceO3"};
	if (isdigit($payload)) { `curl -s "http://$domo_ip:$domo_port/json.htm?type=command&param=udevice&idx=$dz_o3&nvalue=0&svalue=$payload"`; }
	$payload=$f->{"SousIndiceNO2"};
	if (isdigit($payload)) { `curl -s "http://$domo_ip:$domo_port/json.htm?type=command&param=udevice&idx=$dz_no2&nvalue=0&svalue=$payload"`; }
	$payload=$f->{"SousIndiceSO2"};
	if (isdigit($payload)) { `curl -s "http://$domo_ip:$domo_port/json.htm?type=command&param=udevice&idx=$dz_so2&nvalue=0&svalue=$payload"`; }
	$payload=$f->{"SousIndicePM10"};
	if (isdigit($payload)) { `curl -s "http://$domo_ip:$domo_port/json.htm?type=command&param=udevice&idx=$dz_pm10&nvalue=0&svalue=$payload"`; }
  }
}
Répondre