[Wunderground2mqtt] script pour injecter dans MQTT les valeurs de station météo sous WeatherUnderground

Bonjour,

Si vous êtes comme moi:

  • Vous avez une station météo qui remonte ces informations sous WeatherUnderground
  • Vous voulez récupérer ces valeurs mais sans passer par un plugin (d’ailleurs à date, pas de plugin qui fonctionne pour ce besoin)
  • Vous voulez que les données soient remontées dans votre MQTT

Alors je vous propose un petit script sous python que je viens de terminer. Il fait tout ce que j’ai mis au-dessus (pour une seule PWS par contre) dans une image Docker !

lien : https://github.com/Mecrean79/wunderground2mqtt

Ce sont mes premiers script et image Docker alors il peut y avoir des bugs/problèmes.
N’hésitez pas à remonter le moindre problème.

PS : désolé pour la catégorie, pas trouvé mieux pour l’instant.

Mecrean

2 « J'aime »

Hello,
Ce tuto semble pas mal.
Je cherche a remonter des infos via weather underground sans le plugin puisqu’il est mort.
Possible en direct sans passer par un docker (je ne sais pas comment ça fonctionne et comment le mettre en place)
L’idée serait de récupérer sur mon raspberry avec mon jeedom directement dessus sans passer par une autre plateforme.

Merci pour l’aide

Hello,
Il doit être possible de lancer le script en standalone.
Mais il va falloir récupérer le fichier [wunderground2mqtt.py] et l’adapter :

  • à première vue, je dirais surtout les variables d’environnement (type os.environ.get) pour des paramètres soit en fichier soit direct.

Ca demande un peu de connaissance en python mais ça semble faisable.

Oulala ça le semble hyper compliqué comme ça…

Hello,

Je reviens sur le sujet car j’ai installé ma statio météo qui remonte les infos dans WeatherUnderground et WeatherCloud.
Toujours pas de possibilité sans docker ?

Merci

Peut-être pas ce qui est demandé mais permet via scenario de récupérer les données de la station et de les injecter dans un virtuel (les byId(7230) renvoyant sur le numéro de l’info du virtuel). A mon avis possiblité de les injecter dans un objet MQTT manager.

// — CONFIGURATION —
$stationId = ‹ id de la station sous Underground ›;
$apiKey = ‹ clé API de la station sous Underground ›;
$url = « https://api.weather.com/v2/pws/observations/current?stationId=$stationId&format=json&units=m&apiKey=$apiKey »;

// — APPEL RÉSEAU —
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);

if ($response) {
$data = json_decode($response, true);
//message::add('json ', $data);
$obs = $data[‹ observations ›][0];
//message::add('json obs ', $obs);
// — DISTRIBUTION VERS LE VIRTUEL —
// Remplacez les chiffres par les ID de vos commandes virtuelles

// Température
if (isset($obs['metric']['temp'])) {
    cmd::byId(7230)->event($obs['metric']['temp']); 
}
// Humidité
if (isset($obs['humidity'])) {
    cmd::byId(7231)->event($obs['humidity']);
}

// radiations solaires
if (isset($obs['solarRadiation'])) {
    cmd::byId(7234)->event($obs['solarRadiation']);
}
// UV
if (isset($obs['uv'])) {
    cmd::byId(7235)->event($obs['uv']);
}

/*
	N => 337.5° - 22.5° (0°)

	NE => 22.5° - 67.5° (45°)

    E => 67.5° - 112.5° (90°)

    SE => 112.5° - 157.5° (135°)

    S => 157.5° - 202.5° (180°)

    SW => 202.5° - 247.5° (225°)

    W => 247.5° - 292.5° (270°)

    NW => 292.5° - 337.5° (315°)
*/

// Direction du vent
if (isset($obs['winddir'])) {
    cmd::byId(7238)->event($obs['winddir']);
  
  	// Tableau des 8 directions cardinales principales
    $cardinaux = ["Nord", "Nord-Est", "Est", "Sud-Est", "Sud", "Sud-Ouest", "Ouest", "Nord-Ouest"];

    // Calcul de l'index : chaque secteur fait 45°, en divisant par 8 on sait sur quel secteur on tombe, le "centrage" (22.5 avant et 22.5 après) étant réalisé par le round. 
    // Récupération du texte correspondant
    $directionTexte = $cardinaux[round($obs['winddir'] / 45) % 8];

    // Envoi de l'événement vers votre commande Jeedom
    cmd::byId(7242)->event($directionTexte);
  }
}

// Vent vitesse
if (isset($obs['metric']['windSpeed'])) {
    cmd::byId(7239)->event($obs['metric']['windSpeed']);
}
// Vent rafales
if (isset($obs['metric']['windGust'])) {
    cmd::byId(7240)->event($obs['metric']['windGust']);
}

// Pression
if (isset($obs['metric']['pressure'])) {
    cmd::byId(7241)->event($obs['metric']['pressure']);
}
// Pluie du jour
if (isset($obs['metric']['precipTotal'])) {
    cmd::byId(7236)->event($obs['metric']['precipTotal']);
// Pluie du moement
if (isset($obs['metric']['precipRate'])) {
    cmd::byId(7237)->event($obs['metric']['precipTotal']);
}

// $scenario->setLog(« Mise à jour météo effectuée avec succès. »);
} else {
$scenario->setLog(« Erreur lors de la récupération des données WU. »);
}

Bonjour Cycnus, peux tu donner plus de precision sur la mise en place de ton scenario Stp