importare dati in Domoticz tramite API

Discussioni relative al software di monitoraggio energetico METERN
s_p
Messaggi: 283
Iscritto il: 06/04/2017, 20:49

importare dati in Domoticz tramite API

Messaggioda s_p » 01/12/2023, 21:42

ciao a tutti

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&param=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]



s_p
Messaggi: 283
Iscritto il: 06/04/2017, 20:49

Re: importare dati in Domoticz tramite API

Messaggioda s_p » 04/12/2023, 8:25

ok ok, ma ricordi che il tuo script funzionasse correttamente?

Avatar utente
Walter62
Messaggi: 284
Iscritto il: 19/01/2016, 19:18

Re: importare dati in Domoticz tramite API

Messaggioda Walter62 » 04/12/2023, 18:35

Una cosa è certa
$I[28]
$I[29]
$I[30]
Hanno qualcosa che non va, sopratutto $I[30] somma dati non coerenti
Sito personale: walter62.altervista.org


Torna a “MeterN”

Chi c’è in linea

Visitano il forum: Nessuno e 88 ospiti