Python Skript via Button in Grafana starten

Überwachung der Solaranlage per eMail oder Pushover und Steuerung von Geräten mit Smart Home Zentralen. PV-Überschuss Steuerung verbunden mit Geräten und Tasmota Firmware. Wallbox Steuerungen und API Schnittstelle, über die Daten in die Solaranzeigen Datenbanken geschrieben und gelesen werden können. Alles, was man für Steuerungsaufgaben benötigt.

Moderator: Ulrich

Doc_snyder
Beiträge: 16
Registriert: Sa 23. Okt 2021, 20:23

Re: Python Skript via Button in Grafana starten

Beitrag von Doc_snyder »

Hallo Bogeyof,

Danke für das Update. Das php hat noch einen Fehler beim log schreiben generiert, da hat noch ein "$funktionen->" gefehlt. Habe ich eingebaut, jetzt wird das Log gefüllt.

Folgendes habe ich gemacht:
- kostal_plenticore_math.php aktualisiert
- Time Control per command line enabled, per webinterface vom Kostal bestätigt.
- Manuell Kostal_BatTCQ.php gestartet (liefert richtigen Status)
- ins solaranzeige Log geschaut, liefert falschen Status :-(
- ich habe testweise im math.php mal die Ausführung vom Kostal_Bat_TCQ.py auskommentiert, dann kommt wie erwartet "TC undefined"

--> das lasse ich jetzt mal sacken und warte auf die Erleuchtung oder das fehlende Puzzlestück :-D

Meine Solaranzeige Version ist nicht aktuell sondern von Dezember 2021. Es gibt ein paar Modifikationen zur Wettervorhersage, aber eigentlich nichts, was in Richtung Time Control zielt. Falls ein anderes Skript da reinpfuscht, müsste das Log ja auch anders aussehen, oder? Bei Gelegenheit werde ich Solaranzeige aktualisieren, aber das würde ich gerne noch etwas rausschieben.

Details siehe unten:

Command Line

Code: Alles auswählen

pi@solaranzeige:/var/www/html $ python3 /solaranzeige/Kostal_BatTC_T.py
Authentication successful
[{'id': 'Battery:TimeControl:Enable', 'value': '0'}]
Successfully changed Parameter : Battery:DynamicSoc:Enable to value  0
Successfully changed Parameter : Battery:SmartBatteryControl:Enable to value  0
Successfully changed Parameter : Battery:TimeControl:Enable to value  1
[{'id': 'Battery:TimeControl:Enable', 'value': '1'}]

pi@solaranzeige:/var/www/html $ date +%T
21:08:06
pi@solaranzeige:/var/www/html $ python3 /solaranzeige/Kostal_BatTCQ.py
1
pi@solaranzeige:/var/www/html $ date +%T
21:11:05

Log Solaranzeige

Code: Alles auswählen

15.06. 21:09:57 |----------------   Stop   kostal_plenticore.php    --------------- 
15.06. 21:10:01 |----------------   Start  kostal_plenticore.php    --------------- 
15.06. 21:10:03 * -kostal_plenticore_math.php, Status TimeControl: TC aus
15.06. 21:10:05 * -kostal_plenticore_math.php, ZusatzQuery: Service Schattenmanagement="SM aus"  1655320211
Batterie TimeControl="TC aus"  1655320211
15.06. 21:10:05    -Alle 10 Minuten werden die Statistikdaten übertragen.
15.06. 21:10:05 *  -Daten zur lokalen InfluxDB [ solaranzeige ] gesendet. 
15.06. 21:10:57    -Schleife 1 Ausgang...
15.06. 21:10:57    -OK. Datenübertragung erfolgreich.

Bogeyof
Beiträge: 958
Registriert: Mi 13. Mai 2020, 10:04
Hat sich bedankt: 17 Mal
Danksagung erhalten: 108 Mal

Re: Python Skript via Button in Grafana starten

Beitrag von Bogeyof »

Gut dokumentiert...
Leider habe ich aktuell nur noch ein Fragezeichen, wieso das passiert kann ich nicht erklären.
Ich habe es wie gesagt selbst im Einsatz (in einer wesentlich umfangreicheren _math.php mit vielen anderen zusätzlichen Dingen) und auch schon mehrmals nachgestellt, hier kommt der korrekte Status. Ich muss erst mal das gleiche Ergebnis bekommen um den Fehler erkennen zu können...

Das gleiche Skript bei mir (ich habe kurzfristig mein eigenes ersetzt):

Code: Alles auswählen

15.06. 22:35:01 |---------------- Start kostal_plenticore.php ---------------
15.06. 22:35:03 * -kostal_plenticore_math.php, Status TimeControl: TC ein
15.06. 22:35:04 * -kostal_plenticore_math.php, ZusatzQuery: Service Schattenmanagement="SM String 1" 1655325311
Batterie TimeControl="TC ein" 1655325311
15.06. 22:35:04 * -Daten zur lokalen InfluxDB [ solaranzeige ] gesendet.
15.06. 22:35:04 -Multi-Regler-Ausgang. 5
15.06. 22:35:09 -OK. Datenübertragung erfolgreich.
15.06. 22:35:09 |---------------- Stop kostal_plenticore.php ---------------
Die angehängte _math.php zeigt jetzt auch noch die Antwort der Ausführung "$temp = shell_exec($shell_befehl);" in der LOG-Datei an, d.h. den Inhalt der Antwort in $temp. Vielleicht kann man damit etwas erkennen, bitte probieren und LOG-Datei sichten...
Dateianhänge
kostal_plenticore_math.php
(3.57 KiB) 25-mal heruntergeladen

Doc_snyder
Beiträge: 16
Registriert: Sa 23. Okt 2021, 20:23

Re: Python Skript via Button in Grafana starten

Beitrag von Doc_snyder »

Hallo Bogeyof,

das liefert zumindest einen Hinweis:

Code: Alles auswählen

16.06. 07:14:57 |----------------   Stop   kostal_plenticore.php    --------------- 
16.06. 07:15:01 |----------------   Start  kostal_plenticore.php    --------------- 
16.06. 07:15:04 * -kostal_plenticore_math.php, Status TimeControl: TC aus  temp: Ran into error executing Main Routine : module 'Crypto.Cipher.AES' has no attribute 'MODE_GCM'

16.06. 07:15:05 * -kostal_plenticore_math.php, ZusatzQuery: Service Schattenmanagement="SM aus"  1655356511
Batterie TimeControl="TC aus"  1655356511
16.06. 07:15:05 *  -Daten zur lokalen InfluxDB [ solaranzeige ] gesendet.
Zur Info, ich habe installiert:

Code: Alles auswählen

pi@solaranzeige:~ $ pip3 list
pycrypto          2.6.1
pi@solaranzeige:~ $ pip3 install pycryptodome
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: pycryptodome in ./.local/lib/python3.7/site-packages (3.14.1)
Ich bin das (hier im Süden) verlängerte Wochenende am Comer See, d.h. weiter geht's nächste Woche - ich hoffe aber, dass wir inzwischen auf der Zielgerade sind :-)

Bogeyof
Beiträge: 958
Registriert: Mi 13. Mai 2020, 10:04
Hat sich bedankt: 17 Mal
Danksagung erhalten: 108 Mal

Re: Python Skript via Button in Grafana starten

Beitrag von Bogeyof »

Beim mir sind die Libraries wohl noch älter:

Code: Alles auswählen

pycrypto            2.6.1
pycryptodome        3.9.8
pycryptodomex       3.9.9
Ich weiß ehrlich gesagt auch nicht mehr, warum ich pycryptodomex und pycryptodome installiert habe...

Evtl. kennt Deine neuere Version das Attribut "Mode_GCM" beim Aufruf nicht. Die Library wird aber in jedem der Python-Module benutzt, um die Anmeldung am WR durchzuführen, und klappt ja auch beim manuellen Aufruf. Warum sollte es also während des Aufrufes in PHP anders sein, das ist hier die Frage?
Irgendwie hast Du während des Aufrufes in Solaranzeige ein geändertes Verhalten, evtl. nutzt er andere Pfade oder hat andere Berechtigungen. Ist Dein Speicher evtl. sehr begrenzt (was hast Du für einen Raspi)?
Als Test könnte man pycryptodome noch einmal deinstallieren und es mit pycryptodomex probieren. Ich bin ansonsten etwas ratlos, wie das Problem zu finden ist...
Hast Du evtl. mehrere Python-Versionen installiert und in der Ausführung von Solaranzeige findet er eine andere Version?

Zumindest ist jetzt klar, warum die Antwort immer "TC aus" ist. Er findet einen Text, numerisch interpretiert er das wohl als 0...

Doc_snyder
Beiträge: 16
Registriert: Sa 23. Okt 2021, 20:23

Re: Python Skript via Button in Grafana starten

Beitrag von Doc_snyder »

Ich habe einen Raspberry 4 mit 2GB, das müsste eigentlich reichen.

Ich probiere das mit Cryptodomex dann als erstes, ich melde mich dann wieder.

Viele Grüße,
Nils

Bogeyof
Beiträge: 958
Registriert: Mi 13. Mai 2020, 10:04
Hat sich bedankt: 17 Mal
Danksagung erhalten: 108 Mal

Re: Python Skript via Button in Grafana starten

Beitrag von Bogeyof »

Es sieht so aus, als nimmt er das normale pycrypto, welches dieses Attribut nicht kennt. Anscheinend hat er in der Umgebung von Solaranzeige keinen Zugriff auf das pycryptodome(x)?
Ich habe mal in der Kostal_BatTCQ.py den Import fest auf die Cryptodome (from Cryptodome.Cipher import AES) umgestellt. Bei mir funktioniert es nach wie vor.
Du kannst Die angehängte Kostal_BatTCQ.py ja mal probieren, evtl. kommt jetzt eine andere Fehlermeldung, dass er den Import nicht findet (wäre irgendwie logisch) oder es geht plötzlich (wäre irgendwie zu wünschen).
IP und Passwort eintragen nicht vergessen, Kopieren nach /solaranzeige...
Dateianhänge
Kostal_BatTCQ.py.txt
(7.11 KiB) 23-mal heruntergeladen

Janniman
Beiträge: 112
Registriert: Mi 13. Okt 2021, 09:52
Hat sich bedankt: 9 Mal
Danksagung erhalten: 5 Mal

Re: Python Skript via Button in Grafana starten

Beitrag von Janniman »

Moin Bogeyof.
Ich habe heute, wegen dem fiesen Regen, etwas Zeit, um deine "Direktsteuerung" nachzubauen.
Wenn ich deine Änderungen in der Kostal_plenticore_math.php übernehmen will, stoße ich auch ein "Nichtprogrammierer-Problem".

Deine Änderungen/Zusatzabfragen würden nun gespeichert werden mit diesem Befehl:

Code: Alles auswählen

log_schreiben("kostal_plenticore_math.php, ZusatzQuery: ".$aktuelleDaten["ZusatzQuery"], "* ", 5);
Bei mir steht zum Speichern bisher dieser Befehl:

Code: Alles auswählen

$funktionen->log_schreiben(print_r($aktuelleDaten,1)," ",$Tracelevel);
Wenn ich deine neuen Abfragen nach dem ursprünglichen Schreibbefehl einbauen würde, funktioniert das dann? Dann könnte alles so bleiben.

Baue ich die jetzt neuen zusätzlichen Abfragen dazwischen, dann sollte ich wohl einen Punkt vor "=" setzen.

Code: Alles auswählen

//****************************************************************************/
// Aufbereiten Query für Speichern der Daten
// ***************************************************************************
$aktuelleDaten["ZusatzQuery"]  = "Service ";
hätte aber obiges Problem -> wie das log mit all dem befüllen. Worin unterscheiden sich die unterschiedlichen Weisen des LOG-Schreibens?

Eigentlich brauche ich den Befehl für Schattenmanagement nicht. Ich würde daraus gerne die Befehle bauen wie diejenigen, die du mir schon zur Verfügung gestellt hast:
MinSoC=5, 10, 15
Kostal_EnergyMgmt.py=0 , 1
...

Eine aktivierte Zeitkontrolle für den Akku schließt ja meines Erachtens das "intelligente Laden" von Kostal aus.

Lieben Gruß

Jan

Bogeyof
Beiträge: 958
Registriert: Mi 13. Mai 2020, 10:04
Hat sich bedankt: 17 Mal
Danksagung erhalten: 108 Mal

Re: Python Skript via Button in Grafana starten

Beitrag von Bogeyof »

Die hier beschriebene kostal_plenticore_math.php dient nur dem Speichern der Statusangaben für TimeControl und Schattenmanagement in der Datenbank, damit sie später in einem Dashboard angezeigt werden können.
Die letzte Version aus Beitrag (https://solaranzeige.de/phpBB3/viewtopi ... 293#p18293) enthält auch die korrekte Schreibweise $funktionen->log_schreiben..., allerdings hat dieser Befehl nichts mit dem Speichern zu tun, sondern schreibt einen Eintrag in die /var/www/log/solaranzeige.log.

Das Speichern der Daten erfolgt über die Bereitstellung des Datenfeldes $aktuelleDaten["ZusatzQuery"].
Die Zusatzquery kann jederzeit erweitert werden, d.h. die neuen Zeilen können auch nach der bereits vorhandenen Zusatzquery kommen. Wie Du richtig erkannt hast müssen die Zeilen mit Punkt "erweitert" werden, damit an evtl. bereits bestehende Texte angehängt wird. Davor möglichst noch ein Newline:

Code: Alles auswählen

$aktuelleDaten["ZusatzQuery"] .= "\n";										// *
$aktuelleDaten["ZusatzQuery"] .= "Service ";
...
MinSOC (Min_SOC_Rel) und EnergyManagement (ExternalControl) sind schon in der Datenbank zu finden, das braucht Du ja nicht 2-mal machen.
Eine aktivierte TimeControl und intelligente Batteriesteuerung schließen sich gegenseitig aus, das ist korrekt.

Doc_snyder
Beiträge: 16
Registriert: Sa 23. Okt 2021, 20:23

Re: Python Skript via Button in Grafana starten

Beitrag von Doc_snyder »

Guten Morgen Bogeyof,

Bogeyof hat geschrieben:
Do 16. Jun 2022, 13:23
Es sieht so aus, als nimmt er das normale pycrypto, welches dieses Attribut nicht kennt. Anscheinend hat er in der Umgebung von Solaranzeige keinen Zugriff auf das pycryptodome(x)?
Ich habe mal in der Kostal_BatTCQ.py den Import fest auf die Cryptodome (from Cryptodome.Cipher import AES) umgestellt. Bei mir funktioniert es nach wie vor.
Du kannst Die angehängte Kostal_BatTCQ.py ja mal probieren, evtl. kommt jetzt eine andere Fehlermeldung, dass er den Import nicht findet (wäre irgendwie logisch) oder es geht plötzlich (wäre irgendwie zu wünschen).
IP und Passwort eintragen nicht vergessen, Kopieren nach /solaranzeige...
ich habe jetzt mal weitergemacht.

- von Hand gestartet läuft das geänderte Kostal_Bat_TCQ.py nach wie vor problemlos durch und liefert das richtige Ergebnis
- über das php Skrit aufgerufen, gibt es im Solaranzeige Log keine Fehlermeldung mehr (siehe unten), der Status bleibt aber statisch bei "TC aus"
- Hast Du noch weitere Ideen?

Viele Grüße,
Nils

Code: Alles auswählen

[quote]21.06. 06:30:02 * -kostal_plenticore_math.php, Status TimeControl: TC aus  temp: 
21.06. 06:30:03 * -kostal_plenticore_math.php, ZusatzQuery: Service Schattenmanagement="SM aus"  1655785811
Batterie TimeControl="TC aus"  1655785811
21.06. 06:30:03    -Alle 10 Minuten werden die Statistikdaten übertragen.
21.06. 06:30:03 *  -Daten zur lokalen InfluxDB [ solaranzeige ] gesendet. 
21.06. 06:30:57    -Schleife 1 Ausgang...
21.06. 06:30:57    -OK. Datenübertragung erfolgreich.[/quote]

Bogeyof
Beiträge: 958
Registriert: Mi 13. Mai 2020, 10:04
Hat sich bedankt: 17 Mal
Danksagung erhalten: 108 Mal

Re: Python Skript via Button in Grafana starten

Beitrag von Bogeyof »

Na ja, die Antwort des Skripts "temp :" ist leer, zwar keine Fehlermeldung aber auch keine 0 oder 1. Daher bleibt der Status auf TC aus. Warum bei Dir das Skript in der Umgebung der Solaranzeige kein Ergebnis liefert, kann ich Dir nicht sagen.
Ich kann nur vermuten, dass es irgendwie mit Berechtigungen, Benutzer, Pfaden o.ä. zu tun hat. Nachdem ich es nicht nachstellen kann, kann ich auch das Problem/den Fehler nicht einkreisen...

Antworten