Kostal Piko Neue Generation auslesen

Moderator: Mod-Team

 

0.00 (0 Bewertungen)

Kostal Piko Neue Generation auslesen

Beitragvon Jacke » 07.01.2017, 21:48

Hallo erstmal zusammen,

ich wollte den Kostal PIKO Neue Generation auslesen und in den VZ einpflegen. Ich habe diese Skript gefunden.

http://wiki.volkszaehler.org/howto/wechselrichter_kostal_piko

Aus anderer Quelle habe ich nun diese PHP Skript gefunden. Damit kann ich die Daten Schonmal auslesen

Code: Alles auswählen
//Leistungswerte
$ID_DCEingangGesamt = 33556736;         // in W
$ID_Ausgangsleistung = 67109120;        // in W
$ID_Eigenverbrauch = 83888128;          // in W
//Status
$ID_Status = 16780032;                  // 0:Off
//Statistik - Tag
$ID_Ertrag_d = 251658754;               // in Wh
$ID_Hausverbrauch_d = 251659010;        // in Wh
$ID_Eigenverbrauch_d = 251659266;       // in Wh
$ID_Eigenverbrauchsquote_d = 251659278; // in %
$ID_Autarkiegrad_d = 251659279;         // in %
//Statistik - Gesamt
$ID_Ertrag_G = 251658753;               // in kWh
$ID_Hausverbrauch_G = 251659009;        // in kWh
$ID_Eigenverbrauch_G = 251659265;       // in kWh
$ID_Eigenverbrauchsquote_G = 251659280; // in %
$ID_Autarkiegrad_G = 251659281;         // in %
$ID_Betriebszeit = 251658496;           // in h
//Momentanwerte - PV Genertor
$ID_DC1Spannung = 33555202;             // in V
$ID_DC1Strom = 33555201;                // in A
$ID_DC1Leistung = 33555203;             // in W
$ID_DC2Spannung = 33555458;             // in V
$ID_DC2Strom = 33555457;                // in A
$ID_DC2Leistung = 33555459;             // in W
//Momentanwerte Haus
$ID_HausverbrauchSolar = 83886336;      // in W
$ID_HausverbrauchBatterie = 83886592;   // in W
$ID_HausverbrauchNetz = 83886848;       // in W
$ID_HausverbrauchPhase1 = 83887106;     // in W
$ID_HausverbrauchPhase2 = 83887362;     // in W
$ID_HausverbrauchPhase3 = 83887618;     // in W
//Netz Netzparameter
$ID_NetzAusgangLeistung = 67109120;     // in W
$ID_NetzFrequenz = 67110400;            // in Hz
$ID_NetzCosPhi = 67110656;
//Netz Phase 1
$ID_P1Spannung = 67109378;              // in V
$ID_P1Strom = 67109377;                 // in A
$ID_P1Leistung = 67109379;              // in W
//Netz Phase 2
$ID_P2Spannung = 67109634;              // in V
$ID_P2Strom = 67109633;                 // in A
$ID_P2Leistung = 67109635;              // in W
//Netz Phase 3
$ID_P3Spannung = 67109890;              // in V
$ID_P3Strom = 67109889;                 // in A
$ID_P3Leistung = 67109891;              // in W


$url = "http://".$IPAdresse."/api/dxs.json".
"?dxsEntries=".$ID_Ertrag_G.
"&dxsEntries=".$ID_Ausgangsleistung.
"&dxsEntries=".$ID_Ertrag_d.
"&sessionId=3378188426";
$response = file_get_contents("$url", "r");
$dataObject = json_decode($response);
echo "Ausgangsleistung=               ".$dataObject->dxsEntries[0]->value."W".chr(13);
//echo "Eigenverbrauchsquote Gesamt= ".$dataObject->dxsEntries[3]->value."%".chr(13);


jetzt müsste man die 2 Skripte kombinieren aber da hackt es bis jetzt.
Evtl steht jemand vor ähnlichen Problemen oder hat ein Idee.
Gruß Nils
Jacke
Vielschreiber
Vielschreiber
 
- Threadstarter -
 
Beiträge: 207
Registriert: 21.11.2016, 01:45
Info: Betreiber

Re: Kostal Piko Neue Generation auslesen

Beitragvon JAU » 08.01.2017, 10:15

Jacke hat geschrieben:Aus anderer Quelle habe ich nun diese PHP Skript gefunden.

Da fehlt doch die Hälfte. :?:


mfg JAU
No Shift - No Service
Benutzeravatar
JAU
Forumsinventar
Forumsinventar
 
Beiträge: 1580
Registriert: 01.12.2012, 11:04
Wohnort: 74632
PV-Anlage [kWp]: 12,8
Info: Betreiber

Re: Kostal Piko Neue Generation auslesen

Beitragvon Jacke » 08.01.2017, 12:41

Die Hälfe?
Code: Alles auswählen
// Ausleseskript Wechselrichter Kostal Piko ab Firmware v05.31 (12.10.2015)

//Kommunikation
$IPAdresse = "XXX.XXX.XXX.XXX";

//Leistungswerte
$ID_DCEingangGesamt = 33556736;         // in W
$ID_Ausgangsleistung = 67109120;        // in W
$ID_Eigenverbrauch = 83888128;          // in W
//Status
$ID_Status = 16780032;                  // 0:Off
//Statistik - Tag
$ID_Ertrag_d = 251658754;               // in Wh
$ID_Hausverbrauch_d = 251659010;        // in Wh
$ID_Eigenverbrauch_d = 251659266;       // in Wh
$ID_Eigenverbrauchsquote_d = 251659278; // in %
$ID_Autarkiegrad_d = 251659279;         // in %
//Statistik - Gesamt
$ID_Ertrag_G = 251658753;               // in kWh
$ID_Hausverbrauch_G = 251659009;        // in kWh
$ID_Eigenverbrauch_G = 251659265;       // in kWh
$ID_Eigenverbrauchsquote_G = 251659280; // in %
$ID_Autarkiegrad_G = 251659281;         // in %
$ID_Betriebszeit = 251658496;           // in h
//Momentanwerte - PV Genertor
$ID_DC1Spannung = 33555202;             // in V
$ID_DC1Strom = 33555201;                // in A
$ID_DC1Leistung = 33555203;             // in W
$ID_DC2Spannung = 33555458;             // in V
$ID_DC2Strom = 33555457;                // in A
$ID_DC2Leistung = 33555459;             // in W
//Momentanwerte Haus
$ID_HausverbrauchSolar = 83886336;      // in W
$ID_HausverbrauchBatterie = 83886592;   // in W
$ID_HausverbrauchNetz = 83886848;       // in W
$ID_HausverbrauchPhase1 = 83887106;     // in W
$ID_HausverbrauchPhase2 = 83887362;     // in W
$ID_HausverbrauchPhase3 = 83887618;     // in W
//Netz Netzparameter
$ID_NetzAusgangLeistung = 67109120;     // in W
$ID_NetzFrequenz = 67110400;            // in Hz
$ID_NetzCosPhi = 67110656;
//Netz Phase 1
$ID_P1Spannung = 67109378;              // in V
$ID_P1Strom = 67109377;                 // in A
$ID_P1Leistung = 67109379;              // in W
//Netz Phase 2
$ID_P2Spannung = 67109634;              // in V
$ID_P2Strom = 67109633;                 // in A
$ID_P2Leistung = 67109635;              // in W
//Netz Phase 3
$ID_P3Spannung = 67109890;              // in V
$ID_P3Strom = 67109889;                 // in A
$ID_P3Leistung = 67109891;              // in W


$url = "http://".$IPAdresse."/api/dxs.json".
"?dxsEntries=".$ID_Ertrag_G.
"&dxsEntries=".$ID_Ausgangsleistung.
"&dxsEntries=".$ID_Ertrag_d.
"&sessionId=3378188426";
$response = file_get_contents("$url", "r");
$dataObject = json_decode($response);
echo "Ausgangsleistung=               ".$dataObject->dxsEntries[1]->value."W".chr(13);
//echo "Eigenverbrauchsquote Gesamt= ".$dataObject->dxsEntries[3]->value."%".chr(13);


Die IP Adresse fehlte.

Wenn ich das htmlvz.php Skript ausführe komme folgende Fehlermeldung
Code: Alles auswählen
20170108113917PHP Notice:  Undefined variable: aktuell in /home/pi/htmlvz.php on line 89
PHP Notice:  Undefined variable: aktuellE in /home/pi/htmlvz.php on line 89
PHP Notice:  Undefined variable: Gesamtenergie in /home/pi/htmlvz.php on line 89
PHP Notice:  Undefined variable: GesamtenergieE in /home/pi/htmlvz.php on line 89
PHP Notice:  Undefined variable: status in /home/pi/htmlvz.php on line 89
 Erzeugung aktuell:  , Gesamtenergie:  , Status:
PHP Notice:  Undefined variable: aktuell in /home/pi/htmlvz.php on line 93
PHP Notice:  Array to string conversion in /home/pi/htmlvz.php on line 101
Übertragung nicht erfolgreich: Array
PHP Notice:  Undefined variable: Gesamtenergie in /home/pi/htmlvz.php on line 106
PHP Notice:  Array to string conversion in /home/pi/htmlvz.php on line 113
Übertragung nicht erfolgreich: Array


Heißt für mich es fehlen die Werte für aktullE und Gesamtenergie.
Die Werte müsste mann ja mit dem anderen Skript bekommen. Allerdings bin ich mir bei der Formatierung unsicher.
Jacke
Vielschreiber
Vielschreiber
 
- Threadstarter -
 
Beiträge: 207
Registriert: 21.11.2016, 01:45
Info: Betreiber

Re: Kostal Piko Neue Generation auslesen

Beitragvon Jacke » 29.01.2017, 19:31

Hi ich habe etwas getestet indem ich skripte gewürfelt habe.
hänge da wo ich es mir gedacht bei der formatierung.

evtl. weiß ja jemand von euch weiter.
Hier die php
Code: Alles auswählen
<?php
// Ausleseskript Wechselrichter Kostal Piko ab Firmware v05.31 (12.10.2015)

//Kommunikation
$IPAdresse = "192.168.1.36";

//Leistungswerte
$ID_DCEingangGesamt = 33556736;         // in W
$ID_Ausgangsleistung = 67109120;        // in W
$ID_Eigenverbrauch = 83888128;          // in W
//Status
$ID_Status = 16780032;                  // 0:Off
//Statistik - Tag
$ID_Ertrag_d = 251658754;               // in Wh
$ID_Hausverbrauch_d = 251659010;        // in Wh
$ID_Eigenverbrauch_d = 251659266;       // in Wh
$ID_Eigenverbrauchsquote_d = 251659278; // in %
$ID_Autarkiegrad_d = 251659279;         // in %
//Statistik - Gesamt
$ID_Ertrag_G = 251658753;               // in kWh
$ID_Hausverbrauch_G = 251659009;        // in kWh
$ID_Eigenverbrauch_G = 251659265;       // in kWh
$ID_Eigenverbrauchsquote_G = 251659280; // in %
$ID_Autarkiegrad_G = 251659281;         // in %
$ID_Betriebszeit = 251658496;           // in h
//Momentanwerte - PV Genertor
$ID_DC1Spannung = 33555202;             // in V
$ID_DC1Strom = 33555201;                // in A
$ID_DC1Leistung = 33555203;             // in W
$ID_DC2Spannung = 33555458;             // in V
$ID_DC2Strom = 33555457;                // in A
$ID_DC2Leistung = 33555459;             // in W
//Momentanwerte Haus
$ID_HausverbrauchSolar = 83886336;      // in W
$ID_HausverbrauchBatterie = 83886592;   // in W
$ID_HausverbrauchNetz = 83886848;       // in W
$ID_HausverbrauchPhase1 = 83887106;     // in W
$ID_HausverbrauchPhase2 = 83887362;     // in W
$ID_HausverbrauchPhase3 = 83887618;     // in W
//Netz Netzparameter
$ID_NetzAusgangLeistung = 67109120;     // in W
$ID_NetzFrequenz = 67110400;            // in Hz
$ID_NetzCosPhi = 67110656;
//Netz Phase 1
$ID_P1Spannung = 67109378;              // in V
$ID_P1Strom = 67109377;                 // in A
$ID_P1Leistung = 67109379;              // in W
//Netz Phase 2
$ID_P2Spannung = 67109634;              // in V
$ID_P2Strom = 67109633;                 // in A
$ID_P2Leistung = 67109635;              // in W
//Netz Phase 3
$ID_P3Spannung = 67109890;              // in V
$ID_P3Strom = 67109889;                 // in A
$ID_P3Leistung = 67109891;              // in W


$url = "http://".$IPAdresse."/api/dxs.json".
"?dxsEntries=".$ID_Ertrag_G.
"&dxsEntries=".$ID_Ausgangsleistung.
"&dxsEntries=".$ID_Ertrag_d.
"&sessionId=3378188426";
$response = file_get_contents("$url", "r");
$dataObject = json_decode($response);
//echo "Ertrag_G= ".$dataObject->dxsEntries[0]->value."kWh".chr(13);
echo "Eigenverbrauchsquote Gesamt= ".$dataObject->dxsEntries[0]->value."%".chr(13);


    $urlBase='http://localhost/middleware.php/data/';
    $uuIds=array( 'Bezug' => '8326fb60-bcc2-11e6-bf4c-b1b45a4128d6',
                  'Lieferung' => 'ffdb37e0-bccb-11e6-bb78-03f069fe96f0',
                  'Hausverbrauch' => '67008580-de7d-11e6-93ef-e53965a958f5'
                );
   
    $uuIdTarget=array('PV' => '6b5a5910-df77-11e6-8b61-9dcf659ccd18',
                      'Direktverbrauch' => '49fc3700-e3f5-11e6-9e76-dd9836834116'
                     );

    $urlEnd='.json?from=30%20seconds%20ago';

function curl_file_get_contents($URL)
    {
    $c = curl_init();
    curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($c, CURLOPT_URL, $URL);
    $contents = curl_exec($c);
    curl_close($c);

    if ($contents) return $contents;
    else return FALSE;
    } // function curl_get_file_contents

function getTimestamp() {
    $seconds = microtime(true); // false = int, true = float
    return round( ($seconds * 1000) );
    }

for ($i=1; $i<5 ; $i++) {
    $minTimestamp = getTimestamp();
    $maxTimestamp = $minTimestamp;
    foreach($uuIds as $index=>$value) {
      $url=$urlBase . $value . $urlEnd;
      $content = curl_file_get_contents($url);
      $content=json_decode($content);
      if (!empty($content->data->tuples)) {

         $lastTuple = end($content->data->tuples);
         $minTimestamp = min($minTimestamp,$lastTuple[0]);
         $maxTimestamp = max($maxTimestamp,$lastTuple[0]);
         print_r($lastTuple);
         $lastValue = $lastTuple[1];
      } else {
        $lastValue=0;
    } // if
    echo "$value / $index: $lastValue\n<br>";

    $values[$index]=$lastValue;
    } // foreach

    $diffGV= $dataObject->dxsEntries[0];
    //echo "PV = Lieferung + Hausverbrauch - Bezug: $diffGV \n<br>";

   if ($diffGV>=0) {
      $timestamp = round($minTimestamp + ( ($maxTimestamp - $minTimestamp) / 2 ));
      $linkGV=$urlBase . $uuIdTarget['PV'] . '.json?operation=add&value=' . $diffGV . '&ts=' . $timestamp;
      $dummy=curl_file_get_contents($linkGV);
      echo "$linkGV \n<br>";
   }
    sleep(15);
} // for

?>


Und Fehler Meldungen
Code: Alles auswählen
php /home/pi/test.php
Arrayverbrauchsquote Gesamt= 143.490341%
(
    [0] => 1485710670000
    [1] => 297.576
    [2] => 1
)
8326fb60-bcc2-11e6-bf4c-b1b45a4128d6 / Bezug: 297.576
<br>Array
(
    [0] => 1485710670000
    [1] => 0
    [2] => 1
)
ffdb37e0-bccb-11e6-bb78-03f069fe96f0 / Lieferung: 0
<br>Array
(
    [0] => 1485710670000
    [1] => 292.956
    [2] => 1
)
67008580-de7d-11e6-93ef-e53965a958f5 / Hausverbrauch: 292.956
<br>PHP Notice:  Object of class stdClass could not be converted to int in /home                                                                                                             /pi/test.php on line 123
PHP Catchable fatal error:  Object of class stdClass could not be converted to s                                                                                                             tring in /home/pi/test.php on line 125
root@raspberrypi:~# php /home/pi/test.php
    [2] => 1
)
67008580-de7d-11e6-93ef-e53965a958f5 / Hausverbrauch: 292.956
<br>PHP Notice:  Object of class stdClass could not be converted to int in /home                                                                                                             /pi/test.php on line 123
PHP Catchable fatal error:  Object of class stdClass could not be converted to s                                                                                                             tring in /home/pi/test.php on line 125
Arrayverbrauchsquote Gesamt= 143.490341%
(
    [0] => 1485711000000
    [1] => 468.54
    [2] => 1
)
8326fb60-bcc2-11e6-bf4c-b1b45a4128d6 / Bezug: 468.54
<br>Array
(
    [0] => 1485711000000
    [1] => 0
    [2] => 1
)
ffdb37e0-bccb-11e6-bb78-03f069fe96f0 / Lieferung: 0
<br>Array
(
    [0] => 1485711000000
    [1] => 463.8
    [2] => 1
)
67008580-de7d-11e6-93ef-e53965a958f5 / Hausverbrauch: 463.8
<br>PHP Notice:  Object of class stdClass could not be converted to int in /home/pi/test.php on line 123
PHP Catchable fatal error:  Object of class stdClass could not be converted to string in /home/pi/test.php on line 125
root@raspberrypi:~# Arrayverbrauchsquote Gesamt= 143.490341%
-bash: Arrayverbrauchsquote: Kommando nicht gefunden.
root@raspberrypi:~# (
>     [0] => 1485710670000
>     [1] => 297.576
>     [2] => 1
> )
-bash: [0]: Kommando nicht gefunden.
-bash: [1]: Kommando nicht gefunden.
-bash: [2]: Kommando nicht gefunden.
root@raspberrypi:~# 8326fb60-bcc2-11e6-bf4c-b1b45a4128d6 / Bezug: 297.576
-bash: 8326fb60-bcc2-11e6-bf4c-b1b45a4128d6: Kommando nicht gefunden.
root@raspberrypi:~# <br>Array
-bash: br: Datei oder Verzeichnis nicht gefunden
root@raspberrypi:~# (
>     [0] => 1485710670000
>     [1] => 0
>     [2] => 1
> )
-bash: [0]: Kommando nicht gefunden.
-bash: 1: Kommando nicht gefunden.
-bash: [2]: Kommando nicht gefunden.
root@raspberrypi:~# ffdb37e0-bccb-11e6-bb78-03f069fe96f0 / Lieferung: 0
-bash: ffdb37e0-bccb-11e6-bb78-03f069fe96f0: Kommando nicht gefunden.
root@raspberrypi:~# <br>Array
-bash: br: Datei oder Verzeichnis nicht gefunden
root@raspberrypi:~# (
>     [0] => 1485710670000
>     [1] => 292.956
>     [2] => 1
> )
-bash: 0: Kommando nicht gefunden.
-bash: 1: Kommando nicht gefunden.
-bash: [2]: Kommando nicht gefunden.
root@raspberrypi:~# 67008580-de7d-11e6-93ef-e53965a958f5 / Hausverbrauch: 292.956
-bash: 67008580-de7d-11e6-93ef-e53965a958f5: Kommando nicht gefunden.
root@raspberrypi:~# <br>PHP Notice:  Object of class stdClass could not be converted to int in /home                                                                                                             /pi/test.php on line 123
-bash: br: Datei oder Verzeichnis nicht gefunden
root@raspberrypi:~# PHP Catchable fatal error:  Object of class stdClass could not be converted to s                                                                                                             tring in /home/pi/test.php on line 125
-bash: PHP: Kommando nicht gefunden.
Jacke
Vielschreiber
Vielschreiber
 
- Threadstarter -
 
Beiträge: 207
Registriert: 21.11.2016, 01:45
Info: Betreiber

Re: Kostal Piko Neue Generation auslesen

Beitragvon Jacke » 15.06.2017, 17:37

Guten Tag,

da leider Zeitlich sehr eingeschränkt bin hat es lange gedauert aber es funktioniert nun.

Ich logge nun die Daten meines Kostal Pikos mit neuer Frimware über ein php skript mit meinem VZ.

Als Kanäle habe ich El. Energie Leistungswerte gewählt.

Code: Alles auswählen
<?php


  $urlBase='http://localhost/middleware.php/data/';
   
    $uuIdTarget=array('PV' => '7287ee20-51da-11e7-a89f-77a209add1e2',
                 'DC1' => '776c4130-51dd-11e7-b912-bf7b11b1ed4d',
                      'DC2' => '8330cd40-51dd-11e7-a9b0-795e57522031'
                 );
   
    $laufZeit=59; // Sekunden die das Script laufen soll
    $resolution=5; // Wieviel Sekunden soll zwischen jeder Abfrage mindestens gewartet werden
    $valueIntervall=30; // Breite des Intervalls aus dem die Werte genommen werden soll in Sekunden
   

   
function curl_file_get_contents($URL)
    {
        $c = curl_init();
        curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($c, CURLOPT_URL, $URL);
        $contents = curl_exec($c);
        curl_close($c);
                                           
        if ($contents) return $contents;
        else return FALSE;
    } // function curl_get_file_contents

function getTimestamp() {
     $seconds = microtime(true); // false = int, true = float
     return round( ($seconds * 1000) );
}
$gesamtStart=getTimestamp();                                                               
while((getTimestamp()-$gesamtStart)<($laufZeit*1000)) {
    $minTimestamp = getTimestamp();
    $maxTimestamp = $minTimestamp;
    $t=getTimestamp();
    echo "$t\n<br>";
   
    $tsEnd = getTimestamp();
    $tsStart = $tsEnd - ($valueIntervall*1000);
    $urlEnd='.json?from='.$tsStart.'&to='.$tsEnd;


    echo "Dauer um Werte zu holen: ".(getTimestamp()-$t)." Millisekunden\n<br>";
   
   
   // Ausleseskript Wechselrichter Kostal Piko ab Firmware v05.31 (12.10.2015)

//Kommunikation
$IPAdresse = "192.168.1.36";

//Leistungswerte
$ID_DCEingangGesamt = 33556736;         // in W
$ID_Ausgangsleistung = 67109120;        // in W
$ID_Eigenverbrauch = 83888128;          // in W
//Status
$ID_Status = 16780032;                  // 0:Off
//Statistik - Tag
$ID_Ertrag_d = 251658754;               // in Wh
$ID_Hausverbrauch_d = 251659010;        // in Wh
$ID_Eigenverbrauch_d = 251659266;       // in Wh
$ID_Eigenverbrauchsquote_d = 251659278; // in %
$ID_Autarkiegrad_d = 251659279;         // in %
//Statistik - Gesamt
$ID_Ertrag_G = 251658753;               // in kWh
$ID_Hausverbrauch_G = 251659009;        // in kWh
$ID_Eigenverbrauch_G = 251659265;       // in kWh
$ID_Eigenverbrauchsquote_G = 251659280; // in %
$ID_Autarkiegrad_G = 251659281;         // in %
$ID_Betriebszeit = 251658496;           // in h
//Momentanwerte - PV Genertor
$ID_DC1Spannung = 33555202;             // in V
$ID_DC1Strom = 33555201;                // in A
$ID_DC1Leistung = 33555203;             // in W
$ID_DC2Spannung = 33555458;             // in V
$ID_DC2Strom = 33555457;                // in A
$ID_DC2Leistung = 33555459;             // in W
//Momentanwerte Haus
$ID_HausverbrauchSolar = 83886336;      // in W
$ID_HausverbrauchBatterie = 83886592;   // in W
$ID_HausverbrauchNetz = 83886848;       // in W
$ID_HausverbrauchPhase1 = 83887106;     // in W
$ID_HausverbrauchPhase2 = 83887362;     // in W
$ID_HausverbrauchPhase3 = 83887618;     // in W
//Netz Netzparameter
$ID_NetzAusgangLeistung = 67109120;     // in W
$ID_NetzFrequenz = 67110400;            // in Hz
$ID_NetzCosPhi = 67110656;
//Netz Phase 1
$ID_P1Spannung = 67109378;              // in V
$ID_P1Strom = 67109377;                 // in A
$ID_P1Leistung = 67109379;              // in W
//Netz Phase 2
$ID_P2Spannung = 67109634;              // in V
$ID_P2Strom = 67109633;                 // in A
$ID_P2Leistung = 67109635;              // in W
//Netz Phase 3
$ID_P3Spannung = 67109890;              // in V
$ID_P3Strom = 67109889;                 // in A
$ID_P3Leistung = 67109891;              // in W


$url = "http://".$IPAdresse."/api/dxs.json".
"?dxsEntries=".$ID_DC1Spannung.
"&dxsEntries=".$ID_Ausgangsleistung.
"&dxsEntries=".$ID_DC2Spannung.
"&sessionId=3378188426";
$response = file_get_contents("$url", "r");
$dataObject = json_decode($response);
//
echo "Ausgangsleistung= ".$dataObject->dxsEntries[1]->value."W".'\n';
echo "DC1= ".$dataObject->dxsEntries[0]->value."W".'\n';
echo "DC2= ".$dataObject->dxsEntries[2]->value."W".'\n';
//echo "Eigenverbrauchsquote Gesamt= ".$dataObject->dxsEntries[2]->value."%".chr(13);
   
   
    $diffDV= $dataObject->dxsEntries[1]->value;
    echo "PV Leistung: $diffDV \n<br>";
   
   if ($diffDV>=0) {
      $timestamp = round($minTimestamp + ( ($maxTimestamp - $minTimestamp) / 2 ));
      echo "Timestamp $timestamp $minTimestamp $maxTimestamp<br>\n";
        $linkDV=$urlBase . $uuIdTarget['PV'] . '.json?operation=add&value=' . $diffDV . '&ts=' . $timestamp;
        $dummy=curl_file_get_contents($linkDV);
        echo "$linkDV \n<br>";
    }
   
    $diffDC1= $dataObject->dxsEntries[0]->value;
    echo "DC1: $diffDC1 \n<br>";
   
   if ($diffDC1>=0) {
      $timestamp = round($minTimestamp + ( ($maxTimestamp - $minTimestamp) / 2 ));
      echo "Timestamp $timestamp $minTimestamp $maxTimestamp<br>\n";
        $linkDV=$urlBase . $uuIdTarget['DC1'] . '.json?operation=add&value=' . $diffDC1 . '&ts=' . $timestamp;
        $dummy=curl_file_get_contents($linkDV);
        echo "$linkDV \n<br>";
    }
   
   $diffDC2= $dataObject->dxsEntries[2]->value;
    echo "DC2: $diffDC2 \n<br>";
   
   if ($diffDC2>=0) {
      $timestamp = round($minTimestamp + ( ($maxTimestamp - $minTimestamp) / 2 ));
      echo "Timestamp $timestamp $minTimestamp $maxTimestamp<br>\n";
        $linkDV=$urlBase . $uuIdTarget['DC2'] . '.json?operation=add&value=' . $diffDC2 . '&ts=' . $timestamp;
        $dummy=curl_file_get_contents($linkDV);
        echo "$linkDV \n<br>";
    }
   
      sleep($resolution);
    } // if ok
  echo "Gesamtlaufzeit: ".(getTimestamp()-$gesamtStart)." Millisekunden\n<br>";


?>


Die if Bedingungen stammen noch aus dem Direktverbrauch skripts welches ich angepasst habe. Jetzt muss ich nur noch gucken was ich alles haben möchte an Daten und diese Möglichst gering halten.
Jacke
Vielschreiber
Vielschreiber
 
- Threadstarter -
 
Beiträge: 207
Registriert: 21.11.2016, 01:45
Info: Betreiber

Re: Kostal Piko Neue Generation auslesen

Beitragvon Jacke » 15.06.2017, 19:40

Ich habe dazu mal ein paar Fragen

1. Ich habe die PV Analage erstmal als Zahlerstand abgefragt. Dabei habe ich einenSpikes bekommen immer wenn der Zählerstand sich geändert hat und dazwische der gleiche Zahlerstand abgespeichert wurde.
Liege ich richtig das ich nicht speicher darf wenn der Zahlerstand gleich ist?

2. Gibt es einen Unterschied zwischen Zählerstand unf Leistungswerte bei der Auswertung. - Sehe bisher nur keinen Zählerstand dabei.

3. Wie lösche ich Kanäle aus dem Frontend plus alle dazugehörigen Daten.
3.1 gibt es ein script welches die Daten eines bestimmten Kanals nach 2 Tagen läscht oder wie passe ich dieses Script an
"delete FROM `data` where timestamp< (unix_timestamp(current_timestamp)-24*60*60)*1000 ;"

4. ich lösche die Daten weich also Dünge sie immer weiter aus. funktioniert das auch mit Stromsensoren und leistungswerten.
4.1 ich kann aus dem Wechselrichter aus Leistung und Strom bekommen kann ich diese einfach als Strom und Spannungsensor deklarieren.

Gruß Nils
Jacke
Vielschreiber
Vielschreiber
 
- Threadstarter -
 
Beiträge: 207
Registriert: 21.11.2016, 01:45
Info: Betreiber

Re: Kostal Piko Neue Generation auslesen

Beitragvon JAU » 18.06.2017, 09:10

Morgen,

Liege ich richtig das ich nicht speicher darf wenn der Zahlerstand gleich ist?

So einfach ist das leider nicht.
Das Problem das du da beobachtest tritt auf wenn man Zähler mit geringer Auflösung in hoher Frequenz abfragt. Problem dabei ist das der Zähler die Veränderung zwar (intern) registriert, dem VZ aber nicht mitteilt. VZ kann (und will!) die Daten aber nicht interpretieren. Das bleibt dem User überlassen: ist das eine stete Last oder ist der Peak echt.

Bei vzlogger lösen wird das (ein Stück weit) mit der Option "duplicates", wo wir eine feste Zeit definieren nach der ein doppelter Wert erstmals wieder an die MW gesendet wird.
Identische Werte grundsätzlich nicht zu schreiben ist in sofern nicht sinnvoll weil, gerade bei PV wenn Nachts gar keine Erzeugung stattfindet, dann die echte Nulllinie nie dargestellt werden kann und der Graph unter Umständen auch gar nicht gezeichnet wird (weil im Zeitraum nur ein oder gar kein Datenpunkt vorhanden ist).

Gibt es einen Unterschied zwischen Zählerstand unf Leistungswerte bei der Auswertung

Intern ja, in der Darstellung aber nicht.

VZ ist vom Grundansatz halt ein wenig anders ausgelegt als die meisten Solarlogger. Mit VZ kann man sehr detailliert Verbräuche und Erzeugung analysieren, man ist nicht auf statistische Auswertung von z.B. Tageswerten beschränkt.
Bei letzterem fehlen dem Standard-Frontend bislang aber noch ein paar (klickbare) Funktionen.

Sehe bisher nur keinen Zählerstand dabei.

Für Zählerstände muss man Aggregation aktivieren und bei den Kanaldaten einen Initialzählerstand eintragen. Nach frühestens 24h wird der Zählerstand in der Tabelle mit angezeigt. Dann aber auch für Kanäle mit Leistungswerten.

Wie lösche ich Kanäle aus dem Frontend plus alle dazugehörigen Daten.

In den Kanaleigenschaften (blaues "i") gibt es einen Knopf über den man den Kanal und all zugehörigen Datenbankeinträge löschen kann.
Der Standarduser für die DB hat ab Haus aber keine Löschrechte. Die müssen erst freigegeben werden:
https://wiki.volkszaehler.org/howto/datenmengen#daten_loeschen
Code: Alles auswählen
mysql --user=root -praspberry
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 37217 [..]

mysql> grant select, update, insert, delete on volkszaehler.* to vz@localhost;
Query OK, 0 rows affected (0.03 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql> exit


gibt es ein script welches die Daten eines bestimmten Kanals nach 2 Tagen läscht

Wüste ich jetzt nicht. Macht in der Regel aber auch keinen Sinn.

oder wie passe ich dieses Script an
"delete FROM `data` where timestamp< (unix_timestamp(current_timestamp)-24*60*60)*1000 ;"

Das ist kein Script sondern ein SQL-Befehl. Wenn du dich damit noch nicht auskennst kann ich dir nur Raten mit äußerster Vorsicht und mit Backup an der DB rumzuspielen.

ich lösche die Daten weich also Dünge sie immer weiter aus. funktioniert das auch mit Stromsensoren und leistungswerten.

Grundsätzlich ja.
Allerdings genügt es bei Kanälen dieser Art nicht die Daten einfach nur zu löschen, die Daten müssen erfasst, verrechnet und ein neuer Datensatz geschrieben (oder verändert) werden.
Vzcompress.php kann und macht das.

ich kann aus dem Wechselrichter aus Leistung und Strom bekommen kann ich diese einfach als Strom und Spannungsensor deklarieren.

Die physikalischen Einheiten müssen schon stimmen. Wenn du Leistung als Spannungssensor loggst kommt murks bei raus.
Es gibt auch den Kanaltyp "Nutzer" für Einheiten die selten nachgefragt werden.


mfg JAU
No Shift - No Service
Benutzeravatar
JAU
Forumsinventar
Forumsinventar
 
Beiträge: 1580
Registriert: 01.12.2012, 11:04
Wohnort: 74632
PV-Anlage [kWp]: 12,8
Info: Betreiber

Re: Kostal Piko Neue Generation auslesen

Beitragvon Jacke » 18.06.2017, 11:21

Hi danke für die Antworten.

Zählerstände habe ich jetzt.
Das vzcompress benutzte ich auch schon.

gibt es ein script welches die Daten eines bestimmten Kanals nach 2 Tagen läscht


Wüste ich jetzt nicht. Macht in der Regel aber auch keinen Sinn.


Ich logge im Moment auch Spannung, Strom und Leistung jedes einzelnen meiner PV Strings in 2sek. Abstand diese Daten Brauche ich nur 2 Tage lang zur Analyse zwecken. (Habe Probleme mit der Betriebsspannung der einzelnen Strings da habe ich hier auch einen anderen Thread zu.)
Damit diese Daten nicht zu viel werden würde ich sie gerne nach 2 Tagen vollständig löschen.

Identische Werte grundsätzlich nicht zu schreiben ist in sofern nicht sinnvoll weil, gerade bei PV wenn Nachts gar keine Erzeugung stattfindet, dann die echte Nulllinie nie dargestellt werden kann und der Graph unter Umständen auch gar nicht gezeichnet wird (weil im Zeitraum nur ein oder gar kein Datenpunkt vorhanden ist).


Das ist mir bewusst habe in einen Test Script aufegehört zu loggen, wenn PV Leistung 0= war dadurch nachts permanent Leistung. Deshalb habe ich als nächstes ein anderes Script geschrieben.
( Habe es nicht mehr kurze erklärung)
Aber nur als Schema.

Function= Daten werden gelesen und in DB geschrieben.
if PVLeistung>0 {
Function
&var=True
}

if PVLeistung=0 & $var {
alle Werte=0
Function
$var=false
}

Würde gerne meinen Auslesecode als Function haben damit ich nur diesen aufrufen muss. Aber eher was für Später funktionieren tut es auch so.

Wird nur das Problem machen, wenn es ohne PV Leistung startet ist $var nicht deklariert.
3 Möglichkeiten:

1: wenn das Script startet eine Zählschleife programmieren die einmal laäuft und $var setzt. $var besser als Zahl deklarieren.
Kenne denn Befehl und Syntax dafür in PHP noch nicht daher noch nicht getestet. (Kann kein PHP und bin zeitlich eingespannt, mir ist aber bewusst das es in 5 min mit googlen raus ist. Generelle Struktur des Codes ist mir klar Syntax ist das Porblem)
2: Einfach so lassen Script müsste ja eigentlich dann bei PV Leistung anfangen zu loggen. Wird per Crontab jede Minute aufgerufen.
3. Momentan so gelöst Crontab läuft jede minut zwischen 5 und 23 Uhr dann sind definitiv Nullen in der DB


Gruß Nils
Jacke
Vielschreiber
Vielschreiber
 
- Threadstarter -
 
Beiträge: 207
Registriert: 21.11.2016, 01:45
Info: Betreiber

Re: Kostal Piko Neue Generation auslesen

Beitragvon JAU » 18.06.2017, 12:10

Jacke hat geschrieben:Damit diese Daten nicht zu viel werden würde ich sie gerne nach 2 Tagen vollständig löschen.

MySQL kann auch Skripte:
https://dev.mysql.com/doc/refman/5.7/en/batch-mode.html

Wird nur das Problem machen, wenn es ohne PV Leistung startet ist $var nicht deklariert.

Setze es doch vor vor deiner Schleife/Verzweigung einfach
Code: Alles auswählen
$var=false


Momentan so gelöst Crontab läuft jede minut zwischen 5 und 23 Uhr dann sind definitiv Nullen in der DB

Pragmatische Lösung die ich auch schon vorschlagen wollte. 8)


mfg JAU
No Shift - No Service
Benutzeravatar
JAU
Forumsinventar
Forumsinventar
 
Beiträge: 1580
Registriert: 01.12.2012, 11:04
Wohnort: 74632
PV-Anlage [kWp]: 12,8
Info: Betreiber

Re: Kostal Piko Neue Generation auslesen

Beitragvon Jacke » 18.06.2017, 13:10

Setze es doch vor vor deiner Schleife/Verzweigung einfach

Code: Alles auswählen
$var=false


Wenn ich das mache wird der 2te Zweig ja nie bearbeitet
Bei jedem Durchgang wird am Anfang var = FALSE
solange pv>0 wird geloggt und var=true.
allerdings wird var immer wieder Am Anfang auf False gesetzt daher passiert nichts wenn PV Leistung auf 0 ist.

werde das mal probieren


if (PVLeistung>0) {
Function;
$var=1
}

if (PVLeistung=0 & $var{
for ($i = 1; $i <2; $i++) {
function;
var=0
}
}

sehe gerade klappt auch nicht wenn es nachts gestartet wird

das könnte gehen?

if (PVLeistung>0) {
Function;
$PVLeistung-1=$ PVLeistung
}

if (PVLeistung=0 & $PVLeistung-1>$ PVLeistung{
ALLE WERTE = 0
function;
}
}
quasi eine negative Flanke
startet aber nachts auch nicht
Jacke
Vielschreiber
Vielschreiber
 
- Threadstarter -
 
Beiträge: 207
Registriert: 21.11.2016, 01:45
Info: Betreiber

Nächste

Zurück zu volkszaehler.org



Ähnliche Beiträge


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste