sto cercando di importare in Domoticz i dati provenienti dai files di meterN e 123solar.
ho mixato 123todomoticz di Flane con uno che avevo fatto io.
All'apparenza sembra tutto corretto, ma i devices virtuali non vengono aggiornati.
Mi dareste un'occhiata?
Codice: Seleziona tutto
#!/usr/bin/php
<?php
// API Interface script between 123solar and meterN from Jean-Marc Louviaux and Domoticz
//
// mix di un mio script e quello di Flavio Anesi
//
// /var/www/comapps/todomoticz.php
// chmod +x todomoticz.php
// chown www-data\: todomoticz.php
//symlink:
// ln -s /var/www/comapps/todomoticz.php /usr/local/bin/todomoticz
//
// nano /etc/systemd/system/todomoticz.service
//
/*
[Unit]
Description=todomoticz
Requires=network.target
After=network.target nginx.service php-fpm.service
[Service]
Type=oneshot
ExecStart=/usr/bin/php /var/www/comapps/todomoticz.php
[Install]
WantedBy=default.target
*/
// systemctl enable todomoticz.service
// systemctl start todomoticz.service
/*
* Imposta IDX Domoticz
*
* Impostare di seguito l'IDX delle varie misure che si intendono inviare a DOMOTICZ
* l'IDX viene assegnato da Domoticx con la creazione del Virtual Sensor
* Inserire quindi l'IDX assegnato da Domoticz al relativo dispositivo
* o lasciare 0 se non si intende utilizzare la misura
*/
$IDX[0] = 1; // Produzione1 Produzione W I[0]
$IDX[1] = 2; // Consumi2 Consumi W I[1]
$IDX[2] = 3; // Prelievi3 Prelievi W I[2]
$IDX[3] = 4; // Immissioni4 Immissioni W I[3]
$IDX[4] = 5; // Autoconsumo5 Autoconsumo W I[4]
$IDX[5] = 6; // PdC6 Pompa di Calore W I[5]
$IDX[6] = 7; // Tensione1 Tensione di rete Inverter I[6]
$IDX[7] = 8; // Corrente2 Corrente di rete Inverter I[7]
$IDX[8] = 9; // Frequenza3 Frequenza rete I[8]
$IDX[9] = 10; // Totalcounter1 Produzione KWh I[9]
$IDX[10] = 11; // Totalcounter2 Consumi KWh I[10]
$IDX[11] = 12; // Totalcounter3 Prelievi KWh I[11]
$IDX[12] = 13; // Totalcounter4 Immissioni KWh I[12]
$IDX[13] = 14; // Totalcounter5 Autoconsumo KWh I[13]
$IDX[14] = 15; // Totalcounter6 Pompa di Calore KWh I[14]
$IDX[15] = 16; // EFF1 Efficacia inverter I[15]
$IDX[16] = 17; // INVT1 Temperatura inverter I[16]
$IDX[17] = 18; // I1V1 Tensione di stringa 1 I[17]
$IDX[18] = 19; // I1A1 Corrente di stringa 1 I[18]
$IDX[19] = 20; // I1P1 Potenza di stringa 1 I[19]
$IDX[20] = 21; // I2V1 Tensione di stringa 2 I[20]
$IDX[21] = 22; // I2A1 Corrente di stringa 2 I[21]
$IDX[22] = 23; // I2P1 Potenza di stringa 2 I[22]
$IDX[23] = 24; // KWHT1 Produzione totale inverter I[23]
$IDX[24] = 25; // AWriso1 Resistenza isolamento I[24]
$IDX[25] = 26; // AWileak1 iLeak I[25]
$IDX[26] = 27; // peakotd1 Picco giornaliero I[26]
$IDX[27] = 28; // peakoat1 Picco massimo I[27]
$IDX[28] = 29; // Tensiopne totale stringhe I[28]
$IDX[29] = 30; // Corrente totale stringhe I[29]
$IDX[30] = 31; // Potenza totale stringhe I[30]
$IDX[31] = 32; // Temp. collettori solari5 Temperatura collettori solari I[31]
$IDX[32] = 33; // Temp. Impianto6 Temperatura mandata impianto pavimento I[32]
$IDX[33] = 34; // Temperatura Boiler8 Temperatura puffer I[33]
$IDX[34] = 35; // Resistenza9 Watt resistenza integrazione I[34]
/*
*
* DA QUI IN POI NON SONO NECESSARIE MODIFICHE
*
*/
while(1) {
start();
sleep(15);
}
function start(){
contatori_live();
rete();
totalizzatori();
live_inverter();
udevice($idx,$nvalue,$svalue);
}
function contatori_live(){
// L I V E
//
// live (/dev/shm/mN_LIVEMEMORY.json)
// Produzione1 produzione I[0]
// Consumi2 consumi I[1]
// Prelievi3 prelievi I[2]
// Immissioni4 immissioni I[3]
// Autoconsumo5 autoconsumo I[4]
// PdC6 pompa di calore I[5]
// Temperatura Boiler8 temperatura del puffer I[34]
//
// IMPOSTAZIONI LETTURA JSON
$url_live = '/dev/shm/mN_LIVEMEMORY.json';
if (file_exists($url_live)) {
$json_live = json_decode((file_get_contents($url_live)), true);
} else { // meterN fermo
die("Abording: Empty SHM\n");
}
}
// LETTURA DATI E FORMATTAZIONE VALORE NUMERICO
// $I[0] = number_format($json_live['Produzione1'], 0); // con 1 arrotonda a 1 cifra decimale
$I[0] = number_format($json_live['Produzione1'], 0);
$I[1] = number_format($json_live['Consumi Totali2'], 0);
$I[2] = number_format($json_live['Prelievi3'], 0);
$I[3] = number_format($json_live['Immissioni4'], 0);
$I[4] = number_format($json_live['Autoconsumo5'], 0);
$I[5] = number_format($json_live['PdC6'], 0);
$I[33] = number_format($json_live['Temperatura Boiler8'], 2);
function rete(){
// V A L O R I D I R E T E
//
// Indicators (/dev/shm/mN_ILIVEMEMORY.json)
// Tensione1 tensione I[6]
// Corrente2 corrente I[7]
// Frequenza3 frequenza I[8]
// Temp. collettori6 temperatura dei collettori solari [I32]
// Temp. Impianto7 temperatura mandata impianto a pavimento [I33]
//
// IMPOSTAZIONI LETTURA JSON
$url_rete = '/dev/shm/mN_ILIVEMEMORY.json';
if (file_exists($url_rete)) {
$json_rete = json_decode((file_get_contents($url_rete)), true);
} else { // meterN fermo
die("Abording: Empty SHM\n");
}
}
// LETTURA DATI E FORMATTAZIONE VALORE NUMERICO
$I[6] = number_format($json_rete['Tensione1'], 1);
$I[7] = number_format($json_rete['Corrente2'], 1);
$I[8] = number_format($json_rete['Frequenza3'], 1);
$I[31] = number_format($json_rete['Temp. collettori6'], 2);
$I[32] = number_format($json_rete['Temp. Impianto7'], 2);
$I[34] = number_format($json_rete['Resistenza9'], 0);
function totalizzatori(){
// T O T A L I Z Z A T O R I
//
// Memory (/dev/shm/mN_MEMORY.json)
// Totalcounter1 produzione I[9]
// Totalcounter2 consumi I[10]
// Totalcounter3 prelievi I[11]
// Totalcounter4 immissioni I[12]
// Totalcounter5 autoconsumo I[13]
// Totalcounter6 pompa di calore I[14]
//
// IMPOSTAZIONI LETTURA JSON
$url_tot = '/dev/shm/mN_MEMORY.json';
if (file_exists($url_tot)) {
$json_tot = json_decode((file_get_contents($url_tot)), true);
} else { // meterN fermo
die("Abording: Empty SHM\n");
}
}
// LETTURA DATI E FORMATTAZIONE VALORE NUMERICO
$I[9] = number_format($json_tot['First1'], 0);
$I[10] = number_format($json_tot['First2'], 0);
$I[11] = number_format($json_tot['First3'], 0);
$I[12] = number_format($json_tot['First4'], 0);
$I[13] = number_format($json_tot['First5'], 0);
$I[14] = number_format($json_tot['First6'], 0);
function live_inverter(){
// L I V E I N V E R T E R
//
// Live (/dev/shm/123s_LIVEMEMORY.json)
// EFF1 efficenza I[15]
// INVT1 temp. inv I[16]
// FRQ1 frequenza I[17]
// I1V1 tensione str.1 I[18]
// I1A1 corrente str.1 I[19]
// I1P1 potenza str.1 I[20]
// I2V1 tensione str.2 I[21]
// I2A1 corrente str.2 I[22]
// I2P1 potenza str.2 I[23]
// KWHT1 prod. tot. inverter I[24]
// AWriso1 Isolamento I[25]
// AWileak1 Corrente di dispersione I[26]
// pmotd1 Picco gioranliero I[27]
// peakoat1 Picco massimo I[28]
//
// IMPOSTAZIONI LETTURA JSON
$url_inv = '/dev/shm/123s_LIVEMEMORY.json';
if (file_exists($url_inv)) {
$json_inv = json_decode((file_get_contents($url_inv)), true);
} else { // 123s fermo
die("Abording: Empty SHM\n");
}
}
// LETTURA DATI E FORMATTAZIONE VALORE NUMERICO
$I[15] = number_format($json_inv['EFF1'], 1);
$I[16] = number_format($json_inv['INVT1'], 0);
$I[17] = number_format($json_inv['I1V1'], 2);
$I[18] = number_format($json_inv['I1A1'], 2);
$I[19] = number_format($json_inv['I1P1'], 2);
$I[20] = number_format($json_inv['I2V1'], 2);
$I[21] = number_format($json_inv['I2A1'], 2);
$I[22] = number_format($json_inv['I2P1'], 2);
$I[23] = number_format($json_inv['KWHT1'], 0);
// IMPOSTAZIONI LETTURA JSON
$url_inv1 = '/dev/shm/123s_MEMORY.json';
if (file_exists($url_inv1)) {
$json_inv1 = json_decode((file_get_contents($url_inv1)), true);
} else { // 123s fermo
die("Abording: Empty SHM\n");
}
// LETTURA DATI E FORMATTAZIONE VALORE NUMERICO
$I[24] = number_format($json_inv1['AWriso1'], 2);
$I[25] = number_format($json_inv1['AWileak1'], 1);
$I[26] = number_format($json_inv1['pmotd1'], 2);
$I[27] = number_format($json_inv1['peakoat1'], 0);
$I[28] = ($I[18]+$I[21]);
$I[29] = ($I[19]+$I[22]);
$I[30] = ($I[20]+$I[23]);
// VERIFICA LETTURE
if (empty($I[24]) || $I[24] == 0) { // 123s non è in esecuzione di notte, recupera il valore in CSV
$dir = '/var/www/123solar/data/invt1/csv';
$output = glob($dir . '/*.csv');
sort($output);
$xdays = count($output);
if ($xdays > 0) {
$lastlog = $output[$xdays - 1];
$lines = file($lastlog);
$contalines = count($lines);
$array_last = preg_split('/,/', $lines[$contalines - 1]);
$I[24] = round(($array_last[27] * 1000), 0); //in Wh
} else {
$I[24] = null;
}
}
//
// INVIO DATI A DOMOTICZ
$input = count($IDX);
for ($i=0; $i<$input; $i++) {
if ($IDX[$i] != 0 ){
echo $i;
udevice($IDX[$i],0,$I[$i]);
}
}
function udevice($idx,$nvalue,$svalue) {
//
// INVIO DATI
//
curl_exec(curl_init("http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=$idx&nvalue=$nvalue&svalue=$svalue"));
}
?>
non mi è chiara la parte
INVIO DATI A DOMOTICZ e di conseguenza INVIO DATI
$svalue è corretto? non dovrebbe essere qualcosa che ha a che fare con quello dichiarato $I[XX]