Commit 38d797b8 authored by David's avatar David
Browse files

v3.5

  * Support du matériel Enphase (Envoy Metered)
  * Support des sondes de températures ds18b20
parent cbde6919
......@@ -9,3 +9,5 @@ domo/relay.script.d/*.php
domo/relay.script.d/*.blockly.md5
domo/relay.script.d/*.blockly.xml
domo/relay.script.d/*.php_bkp
www/call
getForEmoncms-inc.php
# Changelog
* V3.5 (05/2021)
* Support du matériel Enphase (Envoy Metered)
* Support des sondes de températures ds18b20
* V3.4 (05/2020)
* Prévision météo
* Prévision météo
* Prévision de production déduite de la météo
* Prévision de l'état de charge batterie au couché du soleil à J+0 et J+1
* Doc : https://pvmonit.zici.fr/doc/fr:howto:weather
* V3.3 (05/2020)
* Ajour de <valueBeast> dans le XML généré
* Ajour de <valueBeast> dans le XML généré
* Changement dans l'attitude de getEmoncms pour l'expédition des fichiers, maintenant il utilise (lui aussi) le XML pour lire les données
* V3.2 (05/2020)
* Amélioration à la génération du fichier XML (système de cache et de vérification des données minimum) pour limiter les risques d'erreurs de génération dû a l'interface Serial vers les appareils solaires
......
<?php
$id="28-011921191050"; // GPIO pin number
$cmd='/bin/bash '. $config['dir']['bin'].'ds18b20.sh '.$id;
exec($cmd, $sortie, $retour);
if ($retour != 0){
trucAdir(1, 'Erreur '.$retour.' à l\'exécussion du programme .'.$cmd);
} else {
$nb=0;
trucAdir(4, 'Le script retourne '.$sortie[0]);
$array_data[$nb]['id']='THomeT';
$array_data[$nb]['screen']=1;
$array_data[$nb]['smallScreen']=0;
$array_data[$nb]['value']=$sortie[0];
$array_data[$nb]['units']='°C';
$array_data[$nb]['desc']='Température THome';
}
return $array_data;
?>
#!/bin/bash
# inspirer : https://www.framboise314.fr/mesure-de-temperature-1-wire-ds18b20-avec-le-raspberry-pi/
# On liste les sondes de la famille 28
FILES=`ls /sys/bus/w1/devices/w1_bus_master1/ | grep '^28'`
for file in $FILES
do
ID=`echo $file`
# Récupération des information
GETDATA=`cat /sys/bus/w1/devices/w1_bus_master1/$file/w1_slave`
GETDATA1=`echo "$GETDATA" | grep crc`
GETDATA2=`echo "$GETDATA" | grep t=`
# Récupération de la température
TEMP=`echo $GETDATA2 | grep "t=" | awk -F "t=" '{printf("%.1f\n", $2/1000)}'`
#
# test SI crc est à 'YES'
if [ `echo $GETDATA1 | sed 's/^.*\(...\)$/\1/'` == "YES" ]
then
echo "ID=$ID ; TEMP=$TEMP"
else
echo "ID=$ID ; CRC NOK"
fi
done
exit 0
#!/bin/bash
# inspirer : https://www.framboise314.fr/mesure-de-temperature-1-wire-ds18b20-avec-le-raspberry-pi/
# Récupération des information
GETDATA=`cat /sys/bus/w1/devices/w1_bus_master1/$1/w1_slave`
GETDATA1=`echo "$GETDATA" | grep crc`
GETDATA2=`echo "$GETDATA" | grep t=`
# Récupération de la température
TEMP=`echo $GETDATA2 | grep "t=" | awk -F "t=" '{printf("%.1f\n", $2/1000)}'`
#
# test SI crc est à 'YES'
if [ `echo $GETDATA1 | sed 's/^.*\(...\)$/\1/'` == "YES" ]
then
echo $TEMP
exit 0
else
echo "NOK"
exit 255
fi
......@@ -131,6 +131,34 @@ vedirect:
- AC_OUT_I
- WARN
enphase:
enable: false # Passer a true pour activer
url: http://IP/production.json # URL récupération donnée production : http://IP/production.json (https://thecomputerperson.wordpress.com/2016/08/03/enphase-envoy-s-data-scraping/ )
data:
production:
- 1:
wNow:
id: PPV
desc: Production PV
units: W
regex: /^[0-9]+.[0-9]+$/
whToday:
id: PPVDAY
desc: Production PV journalière
units: W
regex: /^[0-9]+.[0-9]+$/
consumption:
- 0:
wNow:
id: CONSO
desc: Consommation
units: W
regex: /^[0-9]+.[0-9]+$/
whToday:
id: CONSODAY
desc: Consommation journalière
units: W
regex: /^[0-9]+.[0-9]+$/
wks:
enable: false # Passer a true pour activer
bin: "/usr/bin/sudo /usr/bin/python3 /opt/PvMonit/bin/wks.py" # Script qui récupère les informations du WKS
......
---
printMessage: 5
printMessageLogfile: /tmp/pvmonitdebug.log
urlDataXml: http://pvmonit.local/data-xml.php
cache:
dir: /tmp/PvMonit_cache
expir: 60
expirLimit: 200
enphase:
enable: true
url: http://IP/production.json # Indiquer l'IP / l'URL du JSON (https://thecomputerperson.wordpress.com/2016/08/03/enphase-envoy-s-data-scraping/ )
data: # Sélectionné les données que vous voulez récupérer (correspondance avec la structure JSON d'enphase)
production:
- 1:
wNow:
id: PPV
desc: Production PV
units: W
regex: /^[0-9]+.[0-9]+$/
whToday:
id: PPVDAY
desc: Production PV journalière
units: W
regex: /^[0-9]+.[0-9]+$/
consumption:
- 0:
wNow:
id: CONSO
desc: Consommation
units: W
regex: /^[0-9]+.[0-9]+$/
whToday:
id: CONSODAY
desc: Consommation journalière
units: W
regex: /^[0-9]+.[0-9]+$/
wks:www:
PpvMax: 1300 # Total W panneaux installé (pour jauge)
dataPrimaire:
- PPV
- CONSO
consoPlafond: 1500 # Consommation maximum (pour jauge)
...
<?php
// Soft version
define('VERSION', '3.4');
define('VERSION', '3.5');
......
......@@ -205,7 +205,84 @@ if (checkCacheTime($config['cache']['dir'].'/data.xml')) {
}
}
}
# Enphase
if ($config['enphase']['enable'] == true) {
trucAdir(1, "Enphase enable");
trucAdir(2, "Téléchargement du fichier json : ".$config['enphase']['url']);
$opts = array('http' =>
array(
'method' => 'GET',
'timeout' => 60
)
);
$context = stream_context_create($opts);
$result = file_get_contents($config['enphase']['url'], false, $context);
if ($result == ''){
trucAdir(1, 'Erreur à la récupération des données');
} else {
$datas = json_decode($result, true);
//~ print_r($datas);
//~ print_r($config['enphase']['data']);
$execTime=time();
$xmlPrint.= "\n\t".'<device id="enphases">';
$xmlPrint.= "\n\t\t".'<nom>Enphases</nom>';
$xmlPrint.= "\n\t\t".'<timerefresh>'.$execTime.'</timerefresh>';
$xmlPrint.= "\n\t\t".'<type></type>';
$xmlPrint.= "\n\t\t".'<modele></modele>';
$xmlPrint.= "\n\t\t".'<serial></serial>';
$xmlPrint.= "\n\t\t".'<datas>';
foreach ($config['enphase']['data'] as $source=>$source_array) {
foreach ($source_array as $type_f=>$type_f_array) {
foreach($type_f_array as $type=>$type_array) {
foreach ($type_array as $valeur=>$detail) {
trucAdir(3, "[enphases] Recherche de ".$source.">".$type.">".$valeur);
if (isset($datas[$source][$type][$valeur])) {
# Check regex :
if (isset($detail['regex'])
&& $detail['regex'] != false) {
if (! preg_match($detail['regex'], $datas[$source][$type][$valeur])) {
trucAdir(3, "[enphases] Erreur ".$source.">".$type.">".$valeur." regex ".$detail['regex']." ne correspond pas à l'item ".$datas[$source][$type][$valeur]);
continue;
}
}
trucAdir(5, "[enphases] ".$source.">".$type.">".$valeur." trouvé à ".$datas[$source][$type][$valeur]);
# Si l'ordre est présent
$xmlPrint.= "\n\t\t\t".'<data id="'.$detail['id'].'"'.onScreenPrint($detail['id']).'>';
$xmlPrint.= "\n\t\t\t\t".'<desc>'.$detail['desc'].'</desc>';
if (isset($detail['value2text'])) {
$find = false;
foreach($detail['value2text'] as $value=>$text) {
if ($datas[$source][$type][$valeur] == $value) {
$xmlPrint.= "\n\t\t\t\t".'<value>'.$text.'</value>';
$find = true;
}
}
if ($find == false) {
$xmlPrint.= "\n\t\t\t\t".'<value>'.$datas[$source][$type][$valeur].'</value>';
}
} else {
$xmlPrint.= "\n\t\t\t\t".'<value>'.round($datas[$source][$type][$valeur], 1).'</value>';
}
$xmlPrint.= "\n\t\t\t\t".'<valueBeast>'.$datas[$source][$type][$valeur].'</valueBeast>';
if (isset($detail['units'])) {
$xmlPrint.= "\n\t\t\t\t".'<units>'.$detail['units'].'</units>';
} else {
$xmlPrint.= "\n\t\t\t\t".'<units></units>';
}
$xmlPrint.= "\n\t\t\t".'</data>';
} else {
trucAdir(2, "[enphases] Erreur ".$source.">".$type.">".$valeur." non présent dans le json enphases ".$config['enphase']['url']);
}
}
}
}
}
$xmlPrint.= "\n\t\t".'</datas>';
$xmlPrint.= "\n\t".'</device>';
}
}
# Divers
$bin_enabled_data = scandir($config['dir']['bin_enabled']);
$printDivers=false;
......@@ -264,6 +341,12 @@ if (checkCacheTime($config['cache']['dir'].'/data.xml')) {
$timerefresh=time();
$script_return_datas = $script_return;
if (empty($script_return_datas)) {
continue;
} else {
sort($script_return_datas);
}
$xmlPrint.= "\n\t<device id=\"".strtolower($idParent)."\">";
$xmlPrint.= "\n\t\t<nom>".deviceCorrespondance($idParent)."</nom>";
$xmlPrint.= "\n\t\t<timerefresh>".$timerefresh."</timerefresh>";
......@@ -271,11 +354,7 @@ if (checkCacheTime($config['cache']['dir'].'/data.xml')) {
$xmlPrint.= "\n\t\t<modele></modele>";
$xmlPrint.= "\n\t\t<serial></serial>";
$xmlPrint.= "\n\t\t<datas>";
if (empty($script_return_datas)) {
continue;
} else {
sort($script_return_datas);
}
foreach ($script_return_datas as $script_return_data) {
if (isset($script_return_data['id'])) {
$id_data=$script_return_data['id'];
......@@ -351,6 +430,8 @@ if (checkCacheTime($config['cache']['dir'].'/data.xml')) {
}
}
trucAdir(5, "On recherche $nbDataCheck data pour valider l'XML");
//~ print_r($xmlPrint);
//~ exit();
$devices = simplexml_load_string($xmlPrint);
foreach ($devices as $device) {
foreach ($device->datas->data as $data) {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment