Autor Thema: Photovoltaik Eigenverbrauch,Bilanz,Prognose (Kostal Plenticore; KSEM; BYD HV)  (Gelesen 4400 mal)

Offline ch.eick

  • Hero Member
  • *****
  • Beiträge: 1228
Guten Morgen und ein schönes Wochenende Euch allen.

Gerade, wenn man eine PV Anlage betreibt, fallen eine sehr große Menge an Daten an und zu beginn weiß man nicht immer, was man brauchen kann und möchte.
Wenn Ihr die Implementierung nach meinem Muster gemacht habt, habe ich bereits zu beginn das Logging ziemlich eingeschränkt und trotzdem ist die Datenbank gewachsen.

SELECT table_schema "DB Name",
    ->        Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB"
    ->   FROM  information_schema.tables
    ->   GROUP BY table_schema;
+--------------------+---------------+
| DB Name            | DB Size in MB |
+--------------------+---------------+
| fhem               |        4651.0 |
| information_schema |           0.0 |
+--------------------+---------------+
Bei diesem Datenvolumen habe ich bereits ziemlich aufgeräumt und werde es auch noch weiter tun.

In den Threads  vom DbRep/DbLog findet man dann auch noch etwas zur Spalte EVENT, die wohl historischer Art ist. Wenn man sich sicher ist, dass die Spalte von keinem Device in Fhem genutzt wird, kann diese gelehrt werden und im DbLog deaktiviert werden. Diesen Schritt habe ich nun auch durchgeführt und möchte ihn hier kurz beschreiben.
Wir beginnen mit rund 4.6 GB Datenbank Größe.

Vorgehensweise:
## Immer zuerst einen backup durchführen!

## Im Datenbank Device das füllen der EVENT Spalte deaktivieren
attr LogDB colEvent 0

## Danach ein paar events abwarten und nachschauen, dass die Spalte leer bleibt.
select * from history where DEVICE='PV_Anlage_1_API' and READING='Statistic_EnergyHomePvSum_Day' and TIMESTAMP >= '2020-11-20 18:00:00';
+---------------------+-----------------+---------+-------+-------------------------------+---------+------+
| TIMESTAMP           | DEVICE          | TYPE    | EVENT | READING                       | VALUE   | UNIT |
+---------------------+-----------------+---------+-------+-------------------------------+---------+------+
| 2020-11-20 18:57:04 | PV_Anlage_1_API | HTTPMOD |       | Statistic_EnergyHomePvSum_Day | 4320.29 |      |
+---------------------+-----------------+---------+-------+-------------------------------+---------+------+

## Nun wird die Spalte aus der Tabelle entfernt, oder man könnte auch jeden Eintrag mit NULL überschreiben
## Je nach Leistung des Datenbank Servers kann dies einige Zeit laufen und auch, wie bei mir zum Timeout führen. Dann einfach etwas Geduld haben und nicht panisch werden.
ALTER TABLE history DROP COLUMN EVENT;
ERROR 2006 (HY000): MySQL server has gone away
## geraume Zeit später... :-)

## Nun wird die Spalte wieder erzeugt, damit das Daten Model stimmig ist, obwohl wir ja das Befüllen von EVENT abgeschaltet haben.
ALTER TABLE history ADD COLUMN EVENT VARCHAR(512) NULL DEFAULT NULL AFTER Type;
## Auch das wird einige Zeit laufen...

## Nun kann man nachschauen, wieviel die Tabelle kleiner geworden ist
SELECT table_schema "DB Name",        Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB"   FROM  information_schema.tables   GROUP BY table_schema;
+--------------------+---------------+
| DB Name            | DB Size in MB |
+--------------------+---------------+
| fhem               |        2707.0 |
| information_schema |           0.0 |
+--------------------+---------------+

## 4651 GB - 2707 GB = 1944 GB => ~ 42 %
## Die prozentuale Größe hängt hierbei sehr stark von der Länge der reading Namen ab. Da meine Namen aufgrund der Lesbarkeit etwas länger sind ist die Ersparnis sehr groß.
## Auch ein dumpMySQL wird nun wesentlich kleiner sein und eventuell auch schneller laufen.

## Nun sollte noch ein Backup mit "optimizeTablesBeforeDump 1" erfolgen, damit die Datenbank Files optimiert werden.

Und enden mit rund 2.7 GB !!! Der Tag ist gerettet :-) , auch wenn das nur eine einmalige Aktion ist, wird diese in Zukunft das Datenbank Volumen nicht mehr so schnell wachsen lassen.

VG
   Christian
« Letzte Änderung: 21 November 2020, 14:07:52 von ch.eick »
RPI4; Docker; CUNX; Eltako FSB61NP; 230V zentral verschaltet; SamsungTV H-Serie; DLNARenderer; TV.pl;  Sonos; Vallox; Luxtronik; 2x FB7490; Stromzähler mit DvLIR; wunderground; clever-tanken; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP

Offline Mumpitz

  • Full Member
  • ***
  • Beiträge: 312

Hast Du auch das hier in 99_myUtils aufgenommen?
use Encode qw(decode encode);
use PBKDF2::Tiny qw/derive verify/;                   <<< Das fehlt Dir definitiv
use Digest::SHA qw(sha256 hmac_sha256);
use Crypt::URandom qw( urandom );
use Crypt::AuthEnc::GCM;


Das verstehe ich ebenfalls nicht ganz. Wo muss man das in der 99_myUtils eintragen? Im Wiki sind die beiden Routinen ja beschrieben welche in die 99_myUtils müssen. Dort finde ich den obigen Teil jedoch nicht. Kanns tu das etwas präzisieren?

Offline ch.eick

  • Hero Member
  • *****
  • Beiträge: 1228
Das verstehe ich ebenfalls nicht ganz. Wo muss man das in der 99_myUtils eintragen? Im Wiki sind die beiden Routinen ja beschrieben welche in die 99_myUtils müssen. Dort finde ich den obigen Teil jedoch nicht. Kannst Du das etwas präzisieren?
Das kann entweder an den Anfang der 99_myUtils, oder vor die erste Funktion, die es benutzt, was ich gemacht habe.

Mit diesen Einträgen lädt man zusätzliche Funktionen aus Perl Bibliotheken in ein Modul.
RPI4; Docker; CUNX; Eltako FSB61NP; 230V zentral verschaltet; SamsungTV H-Serie; DLNARenderer; TV.pl;  Sonos; Vallox; Luxtronik; 2x FB7490; Stromzähler mit DvLIR; wunderground; clever-tanken; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP

Offline plin

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 651
    • FHEM-Landschaft von plin
Mit diesen Einträgen lädt man zusätzliche Funktionen aus Perl Bibliotheken in ein Modul.

Beispiel:
my $r = derive( 'SHA-256', $PASSWD, $bitSalt, $rounds );
derive ist keine Standard-perl-Funktion sondern wird erst durch laden der Bibliothek
use PBKDF2::Tiny qw/derive verify/;                   <<< Das fehlt Dir definitivverfügbar.
FHEM1 (Main) Raspi3b mit CUL, Homematic, SDUINO 433/OOK, zentrale Steuerung
FHEM2 (Keller) x86 mit CUL/hmland, IP-basierte Module
FHEM3 (Erdgeschoss) Raspi2 mit SDUINO 868/GFSK
FHEM4 (Hausanschlussraum), USV und OBIS-Modul
FHEM5 (Docker) mit FHEM2FHEM, InfluxDB
Zustimmung Zustimmung x 1 Liste anzeigen

Offline billy-boy

  • New Member
  • *
  • Beiträge: 38
Zitat
Hast Du auch das hier in 99_myUtils aufgenommen?
Code: [Auswählen]
use Encode qw(decode encode);
use PBKDF2::Tiny qw/derive verify/;                   <<< Das fehlt Dir definitiv
use Digest::SHA qw(sha256 hmac_sha256);
use Crypt::URandom qw( urandom );
use Crypt::AuthEnc::GCM;

Autsch war wohl gestern schon zu spät. Steht ganz groß im Wiki.
Na ja die Tests klappen jetzt alle.
Allerdings bekomme ich keine Werte angezeigt.
Im Log steht folgendes

2020.11.21 22:33:26 5: PV_Anlage_1_API: get called with 01_auth_start
2020.11.21 22:33:26 5: PV_Anlage_1_API: get found option 01_auth_start in attribute get01Name
2020.11.21 22:33:26 4: PV_Anlage_1_API: get will now request 01_auth_start, no optional value
2020.11.21 22:33:26 5: PV_Anlage_1_API: AddToQueue adds type get01 to URL http://%IP-Address_Plenticore%/api/v1/auth/start, data %START%, header Accept-Encoding: gzip,deflate
Content-type:application/json, Accept:application/json, Connection:keep-alive, retry 0, initial queue len: 0
2020.11.21 22:33:26 5: PV_Anlage_1_API: HandleSendQueue called from HTTPMOD::AddToSendQueue, qlen = 1
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as get01Replacement01Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as getReplacement01Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as replacement01Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace called for type get01, regex (?^:%IP-Address_Plenticore%), mode expression, value {ReadingsVal("PV_Anlage_1_config","IP-Address_Plenticore","")} input: Accept-Encoding: gzip,deflate
Content-type:application/json, Accept:application/json, Connection:keep-alive
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as get01Replacement02Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as getReplacement02Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as replacement02Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace called for type get01, regex (?^:%START%), mode expression, value {my $NAME="PV_Anlage_1_API"; plenticore_auth("start","user","$NAME")} input: Accept-Encoding: gzip,deflate
Content-type:application/json, Accept:application/json, Connection:keep-alive
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as get01Replacement04Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as getReplacement04Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as replacement04Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace called for type get01, regex (?^:%FINISH%), mode expression, value {my $NAME="PV_Anlage_1_API"; plenticore_auth("finish","user","$NAME",ReadingsVal("$NAME","auth_randomString64","missed"),ReadingsVal("$NAME","auth_nonce","missed"),ReadingsVal("$NAME","auth_salt","missed"),ReadingsVal("$NAME","auth_rounds","missed"),ReadingsVal("$NAME","auth_transactionId","missed"))} input: Accept-Encoding: gzip,deflate
Content-type:application/json, Accept:application/json, Connection:keep-alive
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as get01Replacement05Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as getReplacement05Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as replacement05Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace called for type get01, regex (?^:%SESSION%), mode expression, value {my $NAME="PV_Anlage_1_API"; plenticore_auth("session","user","$NAME",ReadingsVal("$NAME","auth_randomString64","missed"),ReadingsVal("$NAME","auth_nonce","missed"),ReadingsVal("$NAME","auth_salt","missed"),ReadingsVal("$NAME","auth_rounds","missed"),ReadingsVal("$NAME","auth_transactionId","missed"),ReadingsVal("$NAME","auth_token","missed"))} input: Accept-Encoding: gzip,deflate
Content-type:application/json, Accept:application/json, Connection:keep-alive
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as get01Replacement06Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as getReplacement06Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as replacement06Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace called for type get01, regex (?^:%auth_signature%), mode reading, value auth_signature input: Accept-Encoding: gzip,deflate
Content-type:application/json, Accept:application/json, Connection:keep-alive
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as get01Replacement07Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as getReplacement07Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as replacement07Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace called for type get01, regex (?^:%auth_sessionId%), mode reading, value auth_sessionId input: Accept-Encoding: gzip,deflate
Content-type:application/json, Accept:application/json, Connection:keep-alive
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as get01Replacement08Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as getReplacement08Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as replacement08Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace called for type get01, regex (?^:%begin_date%), mode expression, value {POSIX::strftime("%Y-%m-%d",localtime(time))} input: Accept-Encoding: gzip,deflate
Content-type:application/json, Accept:application/json, Connection:keep-alive
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as get01Replacement09Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as getReplacement09Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as replacement09Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace called for type get01, regex (?^:%end_date%), mode expression, value {POSIX::strftime("%Y-%m-%d",localtime(time))} input: Accept-Encoding: gzip,deflate
Content-type:application/json, Accept:application/json, Connection:keep-alive
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as get01Replacement01Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as getReplacement01Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as replacement01Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace called for type get01, regex (?^:%IP-Address_Plenticore%), mode expression, value {ReadingsVal("PV_Anlage_1_config","IP-Address_Plenticore","")} input: %START%
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as get01Replacement02Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as getReplacement02Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as replacement02Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace called for type get01, regex (?^:%START%), mode expression, value {my $NAME="PV_Anlage_1_API"; plenticore_auth("start","user","$NAME")} input: %START%
2020.11.21 22:33:26 3: ====Start plenticore_auth==============================
2020.11.21 22:33:26 3: auth_step         : start
2020.11.21 22:33:26 3: auth_user         : user
2020.11.21 22:33:26 3: auth_device       : PV_Anlage_1_API
2020.11.21 22:33:26 3: ====End arguments======================================
2020.11.21 22:33:26 3: auth_nonce        : R3lmNTA3QVJ4RmZ0
2020.11.21 22:33:26 3: auth_return       : {"nonce": "R3lmNTA3QVJ4RmZ0","username": "user"}
2020.11.21 22:33:26 3: ====End output=========================================
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: match for type get01, regex (?^:%START%), mode expression, value package main; {my $NAME="PV_Anlage_1_API"; plenticore_auth("start","user","$NAME")}, input: %START%, result is {"nonce": "R3lmNTA3QVJ4RmZ0","username": "user"}
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as get01Replacement04Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as getReplacement04Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as replacement04Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace called for type get01, regex (?^:%FINISH%), mode expression, value {my $NAME="PV_Anlage_1_API"; plenticore_auth("finish","user","$NAME",ReadingsVal("$NAME","auth_randomString64","missed"),ReadingsVal("$NAME","auth_nonce","missed"),ReadingsVal("$NAME","auth_salt","missed"),ReadingsVal("$NAME","auth_rounds","missed"),ReadingsVal("$NAME","auth_transactionId","missed"))} input: {"nonce": "R3lmNTA3QVJ4RmZ0","username": "user"}
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as get01Replacement05Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as getReplacement05Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as replacement05Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace called for type get01, regex (?^:%SESSION%), mode expression, value {my $NAME="PV_Anlage_1_API"; plenticore_auth("session","user","$NAME",ReadingsVal("$NAME","auth_randomString64","missed"),ReadingsVal("$NAME","auth_nonce","missed"),ReadingsVal("$NAME","auth_salt","missed"),ReadingsVal("$NAME","auth_rounds","missed"),ReadingsVal("$NAME","auth_transactionId","missed"),ReadingsVal("$NAME","auth_token","missed"))} input: {"nonce": "R3lmNTA3QVJ4RmZ0","username": "user"}
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as get01Replacement06Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as getReplacement06Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as replacement06Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace called for type get01, regex (?^:%auth_signature%), mode reading, value auth_signature input: {"nonce": "R3lmNTA3QVJ4RmZ0","username": "user"}
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as get01Replacement07Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as getReplacement07Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as replacement07Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace called for type get01, regex (?^:%auth_sessionId%), mode reading, value auth_sessionId input: {"nonce": "R3lmNTA3QVJ4RmZ0","username": "user"}
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as get01Replacement08Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as getReplacement08Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as replacement08Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace called for type get01, regex (?^:%begin_date%), mode expression, value {POSIX::strftime("%Y-%m-%d",localtime(time))} input: {"nonce": "R3lmNTA3QVJ4RmZ0","username": "user"}
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as get01Replacement09Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as getReplacement09Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as replacement09Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace called for type get01, regex (?^:%end_date%), mode expression, value {POSIX::strftime("%Y-%m-%d",localtime(time))} input: {"nonce": "R3lmNTA3QVJ4RmZ0","username": "user"}
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as get01Replacement01Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as getReplacement01Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as replacement01Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace called for type get01, regex (?^:%IP-Address_Plenticore%), mode expression, value {ReadingsVal("PV_Anlage_1_config","IP-Address_Plenticore","")} input: http://%IP-Address_Plenticore%/api/v1/auth/start
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: match for type get01, regex (?^:%IP-Address_Plenticore%), mode expression, value package main; {ReadingsVal("PV_Anlage_1_config","IP-Address_Plenticore","")}, input: http://%IP-Address_Plenticore%/api/v1/auth/start, result is http://192.168.169.250/api/v1/auth/start
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as get01Replacement02Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as getReplacement02Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as replacement02Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace called for type get01, regex (?^:%START%), mode expression, value {my $NAME="PV_Anlage_1_API"; plenticore_auth("start","user","$NAME")} input: http://192.168.169.250/api/v1/auth/start
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as get01Replacement04Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as getReplacement04Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as replacement04Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace called for type get01, regex (?^:%FINISH%), mode expression, value {my $NAME="PV_Anlage_1_API"; plenticore_auth("finish","user","$NAME",ReadingsVal("$NAME","auth_randomString64","missed"),ReadingsVal("$NAME","auth_nonce","missed"),ReadingsVal("$NAME","auth_salt","missed"),ReadingsVal("$NAME","auth_rounds","missed"),ReadingsVal("$NAME","auth_transactionId","missed"))} input: http://192.168.169.250/api/v1/auth/start
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as get01Replacement05Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as getReplacement05Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as replacement05Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace called for type get01, regex (?^:%SESSION%), mode expression, value {my $NAME="PV_Anlage_1_API"; plenticore_auth("session","user","$NAME",ReadingsVal("$NAME","auth_randomString64","missed"),ReadingsVal("$NAME","auth_nonce","missed"),ReadingsVal("$NAME","auth_salt","missed"),ReadingsVal("$NAME","auth_rounds","missed"),ReadingsVal("$NAME","auth_transactionId","missed"),ReadingsVal("$NAME","auth_token","missed"))} input: http://192.168.169.250/api/v1/auth/start
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as get01Replacement06Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as getReplacement06Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as replacement06Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace called for type get01, regex (?^:%auth_signature%), mode reading, value auth_signature input: http://192.168.169.250/api/v1/auth/start
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as get01Replacement07Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as getReplacement07Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as replacement07Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace called for type get01, regex (?^:%auth_sessionId%), mode reading, value auth_sessionId input: http://192.168.169.250/api/v1/auth/start
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as get01Replacement08Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as getReplacement08Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as replacement08Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace called for type get01, regex (?^:%begin_date%), mode expression, value {POSIX::strftime("%Y-%m-%d",localtime(time))} input: http://192.168.169.250/api/v1/auth/start
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as get01Replacement09Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as getReplacement09Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace: check value as replacement09Value
2020.11.21 22:33:26 5: PV_Anlage_1_API: Replace called for type get01, regex (?^:%end_date%), mode expression, value {POSIX::strftime("%Y-%m-%d",localtime(time))} input: http://192.168.169.250/api/v1/auth/start
2020.11.21 22:33:26 4: PV_Anlage_1_API: HandleSendQueue sends get01 with timeout 7 to http://192.168.169.250/api/v1/auth/start,
data: {"nonce": "R3lmNTA3QVJ4RmZ0","username": "user"},
header: Accept-Encoding: gzip,deflate
Content-type:application/json, Accept:application/json, Connection:keep-alive
2020.11.21 22:33:26 5: PV_Anlage_1_API: ReadCallback called from __ANON__
2020.11.21 22:33:26 4: PV_Anlage_1_API: Read callback: request type was get01 retry 0,
header: HTTP/1.1 200 OK
Server: nginx/1.15.2
Date: Sat, 21 Nov 2020 21:33:26 GMT
Content-Type: application/json
Content-Length: 169
Connection: close
Access-Control-Allow-Origin: *
Cache-Control: max-age=0, no-cache, no-store, must-revalidate, body length 169
2020.11.21 22:33:26 5: PV_Anlage_1_API: Read callback: body
{"rounds":29000,"transactionId":"e9eae38f13a16cbae3db3342db5124d4cd65902317ed5b055e843df328b8f7f5","salt":"FU3StUbSOhvJMesZ","nonce":"R3lmNTA3QVJ4RmZ06ZIGHOZ3ykUSR0Hv"}

2020.11.21 22:33:26 4: PV_Anlage_1_API: BodyDecode found no charset header (bodyDecode was set to auto)
2020.11.21 22:33:26 4: PV_Anlage_1_API: extracted JSON values to internal
2020.11.21 22:33:26 5: PV_Anlage_1_API: GetCookies is looking for Cookies
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractSid called, context get, num 01
2020.11.21 22:33:26 4: PV_Anlage_1_API: checking for redirects, code=200, ignore=0
2020.11.21 22:33:26 4: PV_Anlage_1_API: no redirects to handle
2020.11.21 22:33:26 5: PV_Anlage_1_API: Read callback sets LAST_REQUEST to get01
2020.11.21 22:33:26 5: PV_Anlage_1_API: CheckAuth is checking buffer with ReAuthRegex (?^:"authenticated":false|"processdata":\[\]|wrong credentials|Not authorized)
2020.11.21 22:33:26 5: PV_Anlage_1_API: CheckAuth decided no authentication required
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading for context get, num 01 - no individual parse definition
2020.11.21 22:33:26 5: PV_Anlage_1_API: Read starts parsing response to get01 with defined readings: 0101,0102,0103,0104,0201,0202,03,0301,0302
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading auth_nonce with json nonce ...
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading for reading0101-1 sets auth_nonce to R3lmNTA3QVJ4RmZ06ZIGHOZ3ykUSR0Hv
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading value as hex is 52336c6d4e54413351564a34526d5a30365a4947484f5a33796b555352304876
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading auth_rounds with json rounds ...
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading for reading0102-1 sets auth_rounds to 29000
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading value as hex is 3239303030
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading auth_salt with json salt ...
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading for reading0103-1 sets auth_salt to FU3StUbSOhvJMesZ
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading value as hex is 46553353745562534f68764a4d65735a
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading auth_transactionId with json transactionId ...
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading for reading0104-1 sets auth_transactionId to e9eae38f13a16cbae3db3342db5124d4cd65902317ed5b055e843df328b8f7f5
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading value as hex is 65396561653338663133613136636261653364623333343264623531323464346364363539303233313765643562303535653834336466333238623866376635
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading auth_signature with json signature ...
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading auth_signature with json signature did not match a key directly - trying regex match to create a list
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading auth_signature with json /^signature/ got keylist
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading auth_signature did not match
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading auth_token with json token ...
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading auth_token with json token did not match a key directly - trying regex match to create a list
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading auth_token with json /^token/ got keylist
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading auth_token did not match
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading auth_sessionId with json sessionId ...
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading auth_sessionId with json sessionId did not match a key directly - trying regex match to create a list
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading auth_sessionId with json /^sessionId/ got keylist
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading auth_sessionId did not match
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading info_message with json message ...
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading info_message with json message did not match a key directly - trying regex match to create a list
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading info_message with json /^message/ got keylist
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading info_message did not match
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading info_error with json error ...
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading info_error with json error did not match a key directly - trying regex match to create a list
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading info_error with json /^error/ got keylist
2020.11.21 22:33:26 5: PV_Anlage_1_API: ExtractReading info_error did not match
2020.11.21 22:33:26 4: PV_Anlage_1_API: Read response matched 4, unmatch 5 Reading(s)
2020.11.21 22:33:26 5: PV_Anlage_1_API: Read response to get01 matched auth_nonce auth_rounds auth_salt auth_transactionId
2020.11.21 22:33:26 5: PV_Anlage_1_API: Read response to get01 did not match auth_signature auth_token auth_sessionId info_message info_error
2020.11.21 22:33:26 5: PV_Anlage_1_API: HandleSendQueue called from HTTPMOD::ReadCallback, qlen = 0
2020.11.21 22:33:26 5: PV_Anlage_1_API: HandleSendQueue found no usable entry in queue

Zitat

Zitat
Desweiteren habe ich mal eine Frage zur Einrichtung der PV_Anlage_1_API.
Warum steht im stateFormat nur "PV_Anlage_1" anstatt $name (also PV_Anlage_1_API)?

Da ich diese Abfrage nicht disabled hatte wurden mir die Werte angezeigt.
Damit werden aus dem PV_Anlage_1 Device die aktuellen Werte ergänzt., um sie den Statistischen Werten gegenüber zu stellen.


Was nützen diese Werte wenn das Device PV_Anlage_1 später deinstaliert werden. Es handelt sich ja um die mit Python abgefragten Werte.

Fragen über Fragen.
Ich hoffe ich nerve nicht.

Rainer

Offline ch.eick

  • Hero Member
  • *****
  • Beiträge: 1228
Alles wird gut :-)
Zitat
Was nützen diese Werte wenn das Device PV_Anlage_1 später deinstaliert werden. Es handelt sich ja um die mit Python abgefragten Werte.
Das ist auch nicht richtig. Das PV_Anlage_1 fragt den Wr über ModBus/TCP ab und bekommt die Momentanwerte, sowie auch einige wenige Statistiken und Batterie Informationen.
Das PV_Anlage_1_API holt die Statistiken und alle Settings über die API Schnittstelle ab. Weiterhin werden dort auf Einstellungen verändert.
Für den betrieb bleiben beide Devices aktiv.

Das Python wurde vorher für die Anmeldung des PV_Anlage_1_API verwendet und ist jetzt vollständig zu Perl migriert worden.
In einigen Wochen nehme ich das aus dem Wiki, sobald frühere Einsteigen umgestiegen sind.


Dein Log sieht schon mal toll aus :-) , jedoch bedeutet 01_auth_start nicht, das Du das ganze ankurbelst wie ein altes Auto und dann geht der Rest alleine.

Ruf einfach mal 20_Statistic_EnergyFlow auf, den dann sollte die Anmeldung komplett durchlaufen und auch Werte liefern. Ich denk als Einsteiger ist man von der Menge an Information im Wiki einfach etwas überfordert.
Ablaufbeschreibung_PV_Anlage_1_API

VG
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; 230V zentral verschaltet; SamsungTV H-Serie; DLNARenderer; TV.pl;  Sonos; Vallox; Luxtronik; 2x FB7490; Stromzähler mit DvLIR; wunderground; clever-tanken; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP

 

decade-submarginal