[TUTO] Liaison avec une station météo personnelle (PWS)

merci pour ta réponse.

Pour ma part, j’ai une WALDBECK Halley WHT3 avec le firmware WH2650A_V1.6.3, un pluviomètre reste un contact qui se déclenche lorsqu’une quantité d’eau est atteinte et la station météo calcule le nombre d’impulsion sur un temps donné.

Nous sommes juste embêté avec un problème de soft et qu’on a pas la possibilité de modifier le firmware.

Oui c’est exactement ça en gros tu fais un deuxième fichier que tu nommes par exemple inc_parametres.php avec dedans :

<?php
# **********************
# *** SETTINGS START ***

# Variables pour Jeedom
	# URL type = "http://ADRESSE-IP-JEEDOM/core/api/jeeApi.php?apikey=CLE-API-JEEDOM&type=virtual&id=ID-VIRTUEL-JEEDOM&value=XXX"
	$v_JeedomUrl = "http://192.168.0.39/core/api/jeeApi.php?apikey=CLE-API-JEEDOM&type=virtual";
	$v_JeedomIdRay = "&id=2949";			# solarradiation
	$v_jeedomIdUv = "&id=2950";			# uv
	$v_jeedomIdTempExt = "&id=2951";		# tempc
	$v_jeedomIdHygroExt = "&id=2952";	# humidity
	$v_jeedomIdPressAbs = "&id=2953";	# baromabshpa
	$v_jeedomIdPressRel = "&id=2954";	# baromrelhpa
	$v_jeedomIdVentDir = "&id=2955";		# winddir
	$v_jeedomIdVentVit = "&id=2956";		# windspeedkmh
	$v_jeedomIdVentRaf = "&id=2957";		# windgustkmh
	$v_jeedomIdPluieInst = "&id=2958";	# eventrainmm
	$v_jeedomIdPluieMoy = "&id=2959";	# rainratemm
	$v_jeedomIdPluieHeure = "&id=2960";	# hourlyrainmm
	$v_jeedomIdPluieJour = "&id=2961";	# dailyrainmm
	$v_jeedomIdPluieSem = "&id=2962";	# weeklyrainmm
	$v_jeedomIdPluieMois = "&id=2963";	# monthlyrainmm
	$v_jeedomIdPluieTot = "&id=2964";	# totalrainmm
	$v_jeedomIdTempRess = "&id=2965";	# windchillc (wind chill = température ressentie l'hiver (<25°C))
	$v_jeedomIdPtRosee = "&id=2966";		# dewptc (dew point = point de rosée)
	$v_jeedomIdTempInt = "&id=2967";		# tempinc
	$v_jeedomIdHygroInt = "&id=2968";	# humidityin
	$v_jeedomIdBatterie = "&id=2969";	# wh65batt (calculs du script : windBatteryStatus, rainBatteryStatus, txBatteryStatus)
	$v_jeedomIdModele = "&id=2970";		# model
	$v_jeedomIdFirmware = "&id=2971";	# stationtype
	$v_jeedomIdFrequence = "&id=2972";	# freq
	$v_jeedomIdHeatIndex = "&id=2973";	# heatindexc (indice de chaleur US = température ressentie l'été (quand il fait >25°C))
	$v_jeedomIdPointGivre = "&id=2974";	# point de givre

# Debug
	error_reporting(E_ALL);
	ini_set('display_errors', 'on');

# Settings: General
	$device = "auto";  		# Use 'auto' for automatic name from PASSKEY else uses the name 
	$json_data_log = 0; 	# Activate the export to .json (données brutes + données calculées)
	$csv_data_log = 0; 		# Activate the export to .csv (données historisées, une ligne par relevé)
	$txt_data_log = 0;		# Activate the export to .txt (uniquement les données reçues brutes)
	$txt_weewx = 0;         # Activate the export to .txt for weewx driver

# Settings: json, csv, txt and Weewx driver data log dir
	$json_data_logdir = "/var/www/html/pws";	# export au format json
	$csv_data_logdir = "/var/www/html/pws";		# export au format csv
	$txt_data_logdir = "/var/www/html/pws";		# export au format txt des données brutes reçues
	$txt_dir_weewx = "/var/www/html/pws"; 		# export au format Weewx

# *** SETTINGS END ***
# ********************
?>

Puis dans ton fichier index.php tu ajoutes la ligne
include(« inc_parametres.php »);

<?php

/*
***********************************
/var/www/html/data/report/index.php
***********************************

Changelog :
	v1.0	06/02/2020	Fonctionnement 100% OK Jeedom.
	v1.1	27/03/2020	Ajout calcul du point de givre.
						Ajout d'arobases devant variables de batteries pour éviter remontée d'erreur dans les logs.
	v1.2	06/04/2020	Revue des traitement de niveaux batterie pour simplifier le code et éviter les erreurs.


Script PHP pour lire les données provenant de EasyWeather (v1.3.6 minimum).
Basé sur un travail de Christian C. Gruber 2017 on Fine Offset, modifié par Raffaello Di Martino http://www.kwos.it
Paramétrage de la station météo à faire pour qu'elle exporte au format EcoWitt, avec le logiciel Android « WS View » :
	https://play.google.com/store/apps/details?id=com.ost.wsview

Modifications perso LMQT (pour fonctionnement avec Jeedom) :
	- modif des répertoires pour enregistrer les logs et les fichiers de sortie TXT et JSON,
	- ajout sortie HTTP vers URL Jeedom pour renseigner les champs d'un virtuel,
	- nettoyage des parties de codes envoyant dans les serveurs externes (FHEM (IP), meteotemplate (HTTP), Meteonetwork (FTP), etc.),
	- ajout d'écritures des données brutes et formatées JSON dans des fichiers texte,
	- reprise formule de calcul de l'indice de chaleur US,
	- formule de calcul du point de givre,
	- échappement des erreurs sur les variables de batteries pour empêcher les envois de logs dans http.error,

Features:
	* Receivers data from webserver as $_POST array
	* Converts data to other units (°C, km/h, KTS, mm)
	* Stores data in JSON format to text file (if $json_data_log = 1)
	* Stores data in CSV format to text file (if $csv_data_log = 1)
	* Stores data in TXT format to text file (if $txt_data_log = 1)
	* If $device = "auto", device name is extracted from weather station data stream 'PASSKEY' - supports multiple WS

Usage:
	* Installer un serveur web avec support du PHP (par exemple une machine avec Jeedom)
	* Créer un dossier nommé par exemple "/pws" (soit "/var/www/html/pws" )
	* Y placer le fichier "index.php" (nommage impératif !)
	* Configurer ce fichier index.php (API Jeedom, @IP, ID des virtuels, etc.)
	* Paramétrer la station météo pour exporter ses données vers le serveur web créé (exemple : "192.168.0.88" et "/pws")

*/

include("inc_parametres.php");

# Fonction d'appel de l'URL Jeedom
	function f_callUrl($vf_url, $vf_id, $vf_valeur){
		$v_ch = curl_init();
		curl_setopt($v_ch, CURLOPT_URL, $vf_url.$vf_id.'&value='.$vf_valeur);
		curl_setopt($v_ch, CURLOPT_RETURNTRANSFER, 1);
		$v_ReturnUrl = curl_exec($v_ch);
		curl_close($v_ch); 
	}

Un grand merci pour ton adaptation, fonctionne avec succès chez moi avec une station :

Waldbeck Halley Station météo Multifonction pour extérieur & intérieur WiFi

Plus qu’a essayer de personnaliser le widget V4

1 « J'aime »

Merci beaucoup :slight_smile:

Pour mes widgets en v4, je les ai modifiés il y a plusieurs mois (d’ailleurs j’ai deux beta-testeurs dont un par MP :laughing:) et je continue à les bricoler un peu de temps en temps. Du coup si tu veux je vais tâcher de les mettre en ligne sur mes topics correspondants alors. Allez, je tente de libérer du temps pour les poster aujourd’hui ou demain :wink:

Genial grand merci encore une fois

Avec plaisir :wink:
C’est fait pour le pluviomètre : [TUTO] Widget personnalisé de type pluviomètre (Jeedom v3 & v4) - #10 par NathetWill
Et pour les jauges Highcharts : [TUTO] Widgets personnalisés de type jauge Highcharts - #28 par LMQT

Bonjour,

Il semblerais qu’il y a un soucis depuis la 4.2 de Jeedom. Je viens de faire la mise a jour ce matin et je n’ai plus de remonté des données. Il semblerais qu’il y ai eu des modifications au niveau de la sécurité et j’imagine qu’il doit y avoir un cle (API) à changer. Une idée pour mettre le script à jour ? @LMQT as tu eu le problème ?

Bonjour,

Désolé, faute de temps, je suis toujours en 4.1.27 :smiley:

Effectivement, changements concernant la sécurité si je lis ça :

4.2 : Sécurité

  • Afin d’augmenter significativement la sécurité de la solution Jeedom, le système d’accès aux fichiers a changé. Avant certains fichiers étaient interdits depuis certains emplacements. A partir de la v4.2, les fichiers sont explicitement autorisés par type et par emplacement.
  • Changement au niveau de l’api, auparavant “tolérante” si vous arriviez avec la clef du Core en indiquant plugin XXXXX. Ce n’est plus le cas, vous devez arriver avec la clef correspondante au plugin.
  • En api http vous pouviez indiquer un nom de plugin en type, ce n’est plus possible. Le type correspondant au type de la demande (scenario, eqLogic, cmd, etc.) doit correspondre au plugin. Par exemple pour le plugin virtuel vous aviez type=virtual dans l’url il faut maintenant remplacer par plugin=virtual&type=event.
  • Renforcement des sessions : Passage en sha256 avec 64 caractères en mode strict.

L’équipe Jeedom a bien conscience que ces changements peuvent avoir un impact et être gênant pour vous mais nous ne pouvons transiger sur la sécurité. Les plugins doivent respecter les recommandations sur l’arborescence des dossiers et fichiers : Doc.

Maintenant c’est un script, donc ça ne devrait pas être concerné par la mise à jour de Jeedom … sauf si la clé API n’est plus celle qu’il faut choisir.
Essaie de regarder ce qui est proposé au niveaux des clés pour la communication vers un virtuel (je n’ai pas la bonne version sous la main désolé) ?

Bonjour,

Merci pour ta réponse, effectivement il faut maintenant utiliser la clé API du plugin « VIRTUAL » et changer l’appel de type=virtual en plugin=virtual&type=event.

Dans le fichier index.php cela donne :

Index.php
$v_JeedomUrl = "http://xxx.xxx.xxx.xxx/core/api/jeeApi.php?apikey=xxxXXXxXXXXXXXxxxXXXxx&plugin=virtual&type=event";

1 « J'aime »

Grand merci,
je confirme je suis en 4.2.7 que @LMQT et @rvtt ont bien trouvé la solution, ce qui est dommage c’est que j’avais le même problème mais sans aucunes remontée dans les logs et du coup j’ai cherché pas mal de temps avant d’avoir l’idée de revenir ici pour proposer la solution, mais trop tard j’étais devancé.

Encore merci à vous deux pour le script et le retour d’experience

2 « J'aime »

Merci à vous deux pour la solution surtout :wink:
Je vais tâcher de mettre à jour ce WE le post principal avec un second script modifié pour les personnes sous Jeedom v4.2x …

1 « J'aime »

Bonjour à tous.

Petite mise à jour du script pour intégrer l’info d’uptime des stations qui est apparue dans les firmwares « Pro » de juillet dernier => voir fin du premier post de ce topic.
Également une petite astuce pour la convertir rapidement en quelque chose de lisible, plutôt qu’en secondes.