Closed tqma1 closed 1 year ago
Hi,
ja das wäre wahrscheinlich problemlos als weitere Variante möglich, ich müsste das nur implementieren. Das kann ich die nächsten Tage mal machen, am Wochenende siehts zeitlich aktuell schlecht aus. Du müsstest das dann aber testen?
Kannst du mir mal Infos dazu geben welches Modul das ist? Wie oft aktualisiert der Wert?
Gruß Tobias
Das wäre super! Testen würde ich selbstverständlich. Daten werden alle 2 Sekunden aktualisiert.
mein Modul ist von shrdzm, da in Österreich die Daten ja im Modul mit dem entsprechenden Key entschlüsselt werden müssen. Geht meines Wissens nach bei Tasmota (leider) noch nicht.
Ok, ich gebe dir bescheid.
Grüße nach Österreich, Tobias
Hallo @tqma1
habe auch keinen Tasmota Lesekopf, aber meiner gibt auch zwei Werte aus. Du kannst mit ein paar Änderungen das Ding ans Laufen bekommen:
HoymilesZeroExport_Config.ini:
[TASMOTA]
TASMOTA_IP = IP Adresse
TASMOTA_JSON_POWER_MQTT_LABEL = 1.7.0 TASMOTA_JSON_POWER_E_MQTT_LABEL = 2.7.0
HoymilesZeroExport.py:
def GetPowermeterWattsTasmota(): url = f'http://{TASMOTA_IP}getLastData?user=Benutzername&password=Passwort' ParsedData = requests.get(url).json() Watts = int(ParsedData[TASMOTA_JSON_POWER_MQTT_LABEL] - ParsedData[TASMOTA_JSON_POWER_E_MQTT_LABEL]) logging.info("powermeter: %s %s",Watts," Watt") return int(Watts)
und weiter unten im Script unter # read config:
TASMOTA_JSON_POWER_MQTT_LABEL = config.get('TASMOTA', 'TASMOTA_JSON_POWER_MQTT_LABEL') TASMOTA_JSON_POWER_E_MQTT_LABEL = config.get('TASMOTA', 'TASMOTA_JSON_POWER_E_MQTT_LABEL')
Hallo @Ollipop030
Herzlichen Dank für Deinen Input, so wie das aussieht läuft das schon mit den von Dir ausgearbeiteten Änderungen!
Perfekt, so weit hab ich ehrlich gesagt gar nicht gedacht. Danke @Ollipop030 ich würde es trotzdem noch als neue Variante mit implementieren, sonst ist die Namensgebung verwirrend und das Script muss immer bei jeder neuen Version mit angepasst werden. Ich würde gerne die Einstellungen komplett in die config verfrachten.
Preisfrage: Habe gestern später noch auf python3.10 upgedated nun läuft das script nicht mehr. Führe ich "sudo journalctl -u HoymilesZeroExport.service -n 20000 -e -f" aus sehe das es Verweise auf python3.9/ z.Bsp: File "/usr/local/lib/python3.9/dist-packages/requests/adapters.py", line 565, in send Muss ich es nun neu installieren - oder?
Gute Frage, ich habe die 3.9 - kann schon sein dass mit 3.10 da was geändert wurde. Kannst du mal das LogOutput hier posten? Oder fehlt dir das request Modul für 3.10 (muss glaube ich extra installiert werden)?
Auf dem Pi läuft es bei mir auf 3.7.3. Es lief bei mir allerdings testweise aber auf einer Windows Maschine mit python 3.10.10 32bit. Zum Testen von Neuerungen führe ich das dort immer noch aus (natürlich auf dem PI erst beenden). Ich denke beim Update bei dir ist was schiefgelaufen. Evtl. fehlen irgendwelche Abhängigkeiten?
@reserve85 zu der geplanten Version hätte ich ein paar Anmerkungen:
Wäre es in der *.ini nicht besser die ganze Domäne mit den json Daten anzugeben statt nur der IP? Hilft dann auch Leuten mit einem Powerfox Lesekopf. Wobei es dann ja auch nicht mehr Tasmota heißen müsste.
In dem Beispiel habe ich ja die Variable TASMOTA_JSON_POWER_E_MQTT_LABEL = 2.7.0 hinzugefügt. Hier wäre es doch schlau, wenn man hier seinen Wert eintragen kann, und wenn der Lesekopf dafür keinen Wert ausgibt (wie bei Tasmota) den Wert "none" einträgt. Das Script sollte dann nur unterscheiden,
wenn Wert "none" dann "Watts = int(ParsedData[TASMOTA_JSON_POWER_MQTT_LABEL])",
sonst "Watts = int(ParsedData[TASMOTA_JSON_POWER_MQTT_LABEL] - ParsedData[TASMOTA_JSON_POWER_E_MQTT_LABEL])"
Habe die Installation nochmals gemacht, jetzt läuft es wieder - Danke
@reserve85
Hatte da gestern Abend eine Idee … Wäre es möglich eine zweite Instanz für die Einspeisung in der Nacht laufen zu lassen? Ich denke hierfür müsste man das zwingend über eine zweite DTU laufen lassen? Oder wäre hier die Aktivierung/Deaktivierung über Sonnen- Auf bzw. Untergang denkbar?
Schöne Grüße!
@Ollipop030 : danke für deinen Input, ich weiss auch nicht so recht wie man das möglichst "Variabel" gestalten kann. Problem ist halt, dass du es eigentlich immer irgendwie anpassen musst. Am einfachsten ist da wahrscheinlich noch die "Request" URL, da es ja meist nur eine Zeile ist. Allerdings kommt bei manchen dann auch noch HTTP Authentifizierung mit dazu. Problematischer sind die JSON Results, da die immer komplett unterschiedlich aufgebaut sind. Da musst du dann teilweise über mehrere Arrays springen und suchen. Keine Ahnung wie ich das variabel implementieren könnte. Meine Idee war daher, dass man die zwei Funktionen dann halt für unterschiedliche Geräte erweitert. Keine Ahnung ob das der richtige Weg ist. Ich bin auch kein Python Profi, programmiere berufsbedingt normalerweise Delphi...
@tqma1 : Was verstehst du unter Nachteinspeisung? Ich Frage die DTU´s ab ob die Inverter erreichbar sind, da ist das Sonnenaufgangsthema eigentlich dann schon mit abgedeckt. edit: Dank dir übrigens!
Ich verstehe die Idee von @tqma1 so:
Man trägt die Maximalleistung der WR ein (zB 600W), und dieser Wert wird dann nach Sonnenuntergang geändert auf 100W. Und dementsprechend morgens wieder hoch auch 600W. Dazu müsste man aber die Zeiten aus der DTU abfragen.
ok, versteh ich dennoch nicht so ganz: da wird doch auch nix mehr produziert? Wieso sollte das dann auf 100 begrenzt werden?
Ich schätze mal, dass er einen Akku an einem separaten Wechselrichter hat. Der WR wird tagsüber begrenzt, damit der Akku geladen werden kann und nicht einspeist, und erst Abends soll der WR dann einspeisen um die Grundlast zu decken.
Denke auch an Akku Nulleinspeisung
Ahso, also wäre das dann ein zweiter WR der eben nachts "produziert" während der andere mit Panels ausgeschaltet ist? Ich glaube am einfachsten wäre es da zwei Scripte und zwei DTUs zu haben, getrennt jeweils eins für Tagbetrieb und eins für Nachtbetrieb. Das könnte man dann abends z.B. über ein Shellscript switchen ("stop Service Tagbetrieb -> start Service Nachtbetrieb") und hätte dadurch kein Programmieraufwand im Script selbst. Gibt ja dafür diverse API´s (z.B. auf die schnelle https://domes-finest.de/2014/09/17/linux-shell-script-sonnenaufgang-sonnenuntergang-bestimmen/)
So würde ich es auch machen, einfach zwei DTUs und zwei Dienste, wobei man den Dienst Tagesbetrieb gar nicht beenden müsste, da ja vom Dach eh nichts mehr kommt. Könnte man mit cron machen, wird dann aber komplizierter mit der Berechnung für Sonnenauf- und Untergang. Das über dieses Script zu lösen ist aber wohl der falsche Weg.
ich noch mal: @tqma1 : ich habe das SHRDZM Modul eingebunden, wäre super wenn du das mal laufen lassen könntest. Ist im DEV-Zweig (https://github.com/reserve85/HoymilesZeroExport/tree/dev_shrdzm)
@Ollipop030 : Die Option für 1.7.0 - 2.7.0 bei Tasmota habe ich auch mit reingenommen. Kannst dir es ja mal anschauen. Ich habe es mit einem boolean-flag umgesetzt ob es berechnet werden muss oder nicht.
Klappt iwie nicht:
2023-03-20 12:58:17 INFO Author: reserve85 / Script Version: 1.8
2023-03-20 12:58:17 INFO read config file: D:\Download\HoymilesZeroExport_Config.ini
Traceback (most recent call last):
File "D:\Download\HoymilesZeroExport.py", line 174, in
Bin mir hiermit aber nicht ganz sicher, soll das so aussehen?:
TASMOTA_JSON_POWER_MQTT_LABEL = curr_w
TASMOTA_JSON_POWER_CALCULATE = true
TASMOTA_JSON_POWER_INPUT_MQTT_LABEL = Leistung170
TASMOTA_JSON_POWER_OUTPUT_MQTT_LABEL = Leistung270
ja, eigentlich schon. Sieht von der Meldung her so aus als hättest du irgend eine Zeile doppelt in der config (line 86)? bei mir läuft das so durch... Ansonsten schau ich nachher nochmal.
edit: evtl copy paste Fehler und zwei mal [INVERTER_1] definiert?
Gefunden. Habe die ganzen Semikolons in der ini beim zweiten Inverter stehen lassen. Läuft jetzt ersteinmal.
Ui, schnell mal etwas Arbeiten gegangen und ich komme mit dem lesen fast nicht mehr hinterher…
Richtig, Nachteinspeisung kommt von einem separates Wechselrichter am Akku, daher die Idee mit der zweiten Instanz. Werde morgen mal die Testversion installieren und hoffen das die Sonne ordentlich strahlt :-)
ich noch mal: @tqma1 : ich habe das SHRDZM Modul eingebunden, wäre super wenn du das mal laufen lassen könntest. Ist im DEV-Zweig (https://github.com/reserve85/HoymilesZeroExport/tree/dev_shrdzm)
Sollte das nicht ein zip-File zum installieren nach Anleitung sein oder muss ich da eine Datei austauschen?
Du brauchst die nur die .ini und .py aus dem dev Branch. Eben wieder anpassen, so wie du sie brauchst und starten.
kannst auch rechts oben auf "Code" und "Download ZIP" klicken.
So installiert und getestet - regelt leider nur nicht auf die eingestellte Einspeisung von 75 Watt schreibt nur das Inverter 0 reachable: True sollte das auch für den Smartmeter kommen?
Weil Wetter wie in Frankfurt? Oder geht was nicht?
Sonnenschein pur!
Output:
Mär 21 15:20:01 Debian-Server python3[1118]: 2023-03-21 15:20:01 INFO Author: reserve85 / Script Version: 1.9 Mär 21 15:20:01 Debian-Server python3[1118]: 2023-03-21 15:20:01 INFO read config file: /home/user/HoymilesZeroExport/HoymilesZeroExport_Config.ini Mär 21 15:20:01 Debian-Server python3[1118]: 2023-03-21 15:20:01 INFO Inverter 0 reachable: True Mär 21 15:20:01 Debian-Server python3[1118]: 2023-03-21 15:20:01 INFO setting new limit to 800 Watt Mär 21 15:20:01 Debian-Server python3[1118]: 2023-03-21 15:20:01 INFO Inverter 0: setting new limit from 0 Watt to 800 Watt Mär 21 15:20:11 Debian-Server python3[1118]: 2023-03-21 15:20:11 INFO Inverter 0 reachable: True Mär 21 15:20:31 Debian-Server python3[1118]: 2023-03-21 15:20:31 INFO Inverter 0 reachable: True Mär 21 15:20:51 Debian-Server python3[1118]: 2023-03-21 15:20:51 INFO Inverter 0 reachable: True Mär 21 15:21:11 Debian-Server python3[1118]: 2023-03-21 15:21:11 INFO Inverter 0 reachable: True Mär 21 15:21:31 Debian-Server python3[1118]: 2023-03-21 15:21:31 INFO Inverter 0 reachable: True Mär 21 15:21:52 Debian-Server python3[1118]: 2023-03-21 15:21:52 INFO Inverter 0 reachable: True Mär 21 15:22:12 Debian-Server python3[1118]: 2023-03-21 15:22:12 INFO Inverter 0 reachable: True
Nach einem Neustart kommen nachfolgende Fehlermeldungen:
Mär 21 15:52:21 Debian-Server systemd[1]: HoymilesZeroExport.service: Main process exited, code=exited, status=1/FAILURE
Mär 21 15:52:21 Debian-Server systemd[1]: HoymilesZeroExport.service: Failed with result 'exit-code'.
Mär 21 15:52:21 Debian-Server systemd[1]: HoymilesZeroExport.service: Scheduled restart job, restart counter is at 4.
Mär 21 15:52:21 Debian-Server systemd[1]: Stopped HoymilesZeroExport Service.
Mär 21 15:52:21 Debian-Server systemd[1]: Started HoymilesZeroExport Service.
Mär 21 15:52:21 Debian-Server python3[616]: 2023-03-21 15:52:21 INFO Author: reserve85 / Script Version: 1.9
Mär 21 15:52:21 Debian-Server python3[616]: 2023-03-21 15:52:21 INFO read config file: /home/user/HoymilesZeroExport/HoymilesZeroExport_Config.ini
Mär 21 15:52:21 Debian-Server python3[616]: Traceback (most recent call last):
Mär 21 15:52:21 Debian-Server python3[616]: File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 169, in _new_conn
Mär 21 15:52:21 Debian-Server python3[616]: conn = connection.create_connection(
Mär 21 15:52:21 Debian-Server python3[616]: File "/usr/lib/python3/dist-packages/urllib3/util/connection.py", line 96, in create_connection
Mär 21 15:52:21 Debian-Server python3[616]: raise err
Mär 21 15:52:21 Debian-Server python3[616]: File "/usr/lib/python3/dist-packages/urllib3/util/connection.py", line 86, in create_connection
Mär 21 15:52:21 Debian-Server python3[616]: sock.connect(sa)
Mär 21 15:52:21 Debian-Server python3[616]: OSError: [Errno 101] Network is unreachable
Mär 21 15:52:21 Debian-Server python3[616]: During handling of the above exception, another exception occurred:
Mär 21 15:52:21 Debian-Server python3[616]: Traceback (most recent call last):
Mär 21 15:52:21 Debian-Server python3[616]: File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 699, in urlopen
Mär 21 15:52:21 Debian-Server python3[616]: httplib_response = self._make_request(
Mär 21 15:52:21 Debian-Server python3[616]: File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 394, in _make_request
Mär 21 15:52:21 Debian-Server python3[616]: conn.request(method, url, httplib_request_kw)
Mär 21 15:52:21 Debian-Server python3[616]: File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 234, in request
Mär 21 15:52:21 Debian-Server python3[616]: super(HTTPConnection, self).request(method, url, body=body, headers=headers)
Mär 21 15:52:21 Debian-Server python3[616]: File "/usr/lib/python3.9/http/client.py", line 1255, in request
Mär 21 15:52:21 Debian-Server python3[616]: self._send_request(method, url, body, headers, encode_chunked)
Mär 21 15:52:21 Debian-Server python3[616]: File "/usr/lib/python3.9/http/client.py", line 1301, in _send_request
Mär 21 15:52:21 Debian-Server python3[616]: self.endheaders(body, encode_chunked=encode_chunked)
Mär 21 15:52:21 Debian-Server python3[616]: File "/usr/lib/python3.9/http/client.py", line 1250, in endheaders
Mär 21 15:52:21 Debian-Server python3[616]: self._send_output(message_body, encode_chunked=encode_chunked)
Mär 21 15:52:21 Debian-Server python3[616]: File "/usr/lib/python3.9/http/client.py", line 1010, in _send_output
Mär 21 15:52:21 Debian-Server python3[616]: self.send(msg)
Mär 21 15:52:21 Debian-Server python3[616]: File "/usr/lib/python3.9/http/client.py", line 950, in send
Mär 21 15:52:21 Debian-Server python3[616]: self.connect()
Mär 21 15:52:21 Debian-Server python3[616]: File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 200, in connect
Mär 21 15:52:21 Debian-Server python3[616]: conn = self._new_conn()
Mär 21 15:52:21 Debian-Server python3[616]: File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 181, in _new_conn
Mär 21 15:52:21 Debian-Server python3[616]: raise NewConnectionError(
Mär 21 15:52:21 Debian-Server python3[616]: urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7f3bdffb05e0>: Failed to establish a new connection: [Errno 101] Network is unreachable
Mär 21 15:52:21 Debian-Server python3[616]: During handling of the above exception, another exception occurred:
Mär 21 15:52:21 Debian-Server python3[616]: Traceback (most recent call last):
Mär 21 15:52:21 Debian-Server python3[616]: File "/usr/local/lib/python3.9/dist-packages/requests/adapters.py", line 489, in send
Mär 21 15:52:21 Debian-Server python3[616]: resp = conn.urlopen(
Mär 21 15:52:21 Debian-Server python3[616]: File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 755, in urlopen
Mär 21 15:52:21 Debian-Server python3[616]: retries = retries.increment(
Mär 21 15:52:21 Debian-Server python3[616]: File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 574, in increment
Mär 21 15:52:21 Debian-Server python3[616]: raise MaxRetryError(_pool, url, error or ResponseError(cause))
Mär 21 15:52:21 Debian-Server python3[616]: urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='192.168.1.4', port=80): Max retries exceeded with url: /api/index (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f3bdffb05e0>: Failed to establish a new connection: [Errno 101] Network is unreachable'))
Mär 21 15:52:21 Debian-Server python3[616]: During handling of the above exception, another exception occurred:
Mär 21 15:52:21 Debian-Server python3[616]: Traceback (most recent call last):
Mär 21 15:52:21 Debian-Server python3[616]: File "/home/user/HoymilesZeroExport/HoymilesZeroExport.py", line 228, in
sieht aus als erreicht er AHOY nicht? Kannst du das prüfen und mir die Config zeigen (gerne auch private message falls du da ne seriennummer oder so drin hast)?
Den Verdacht hatte ich auch schon da ich hier die aktuelle Entwicklerversion 0.5.104 eingespielt habe. Bin nun auf die letzens verwendete 0.5.93 zurück - keine Änderung Du meinst die json Settings?
warum gibt er immer noch python3.9/ pfade aus ? Habe ja auf python3.10 upgedated - liegt hier der Fehler?
Gute Frage, bei mir lief es in Windows und debian aber mit 3.9… ne ich meine die config von mir.
SELECT_DTU]
# --- define your DTU (only one) ---
USE_AHOY = true
USE_OPENDTU = false
[SELECT_POWERMETER]
# --- define your Powermeter (only one) ---
USE_TASMOTA = false
USE_SHELLY_3EM = false
USE_SHRDZM = true
[AHOY_DTU]
# --- defines for AHOY-DTU ---
# in settings/inverter set interval to 6 seconds!
AHOY_IP = 192.168.X.YY
[OPEN_DTU]
# --- defines for OPEN-DTU ---
OPENDTU_IP = xxx.xxx.xxx.xxx
OPENDTU_USER =
OPENDTU_PASS =
[TASMOTA]
# --- defines for Tasmota ---
TASMOTA_IP = 192.168.10.90
# the following three constants describes how to navigate through the Tasmota-JSON
# e.g. JSON_Result = {"StatusSNS":{"Time":"2023-02-28T12:49:49","SML":{"total_kwh":15011.575,"curr_w":-71}}}
TASMOTA_JSON_STATUS = StatusSNS
# Prefix for Web UI and MQTT JSON payload
TASMOTA_JSON_PAYLOAD_MQTT_PREFIX = SML
# Power-MQTT label (the current power in Watt, positive (import more energy than export) or negative (export more energy than import)).
TASMOTA_JSON_POWER_MQTT_LABEL = curr_w
# if your powermeter does NOT output the current power: you need to calculate it -> Power(W) = OBIS(1.7.0) - OBIS(2.7.0)
TASMOTA_JSON_POWER_CALCULATE = FALSE
# Power-MQTT Input label (positive active instantaneous power, e.g. OBIS Code 1.7.0)
TASMOTA_JSON_POWER_INPUT_MQTT_LABEL =
# Power-MQTT output label (negative active instantaneous power, e.g. OBIS Code 2.7.0)
TASMOTA_JSON_POWER_OUTPUT_MQTT_LABEL =
[SHELLY_3EM]
# --- defines for Shelly ---
SHELLY_IP = xxx.xxx.xxx.xxx
[SHRDZM]
# --- defines for SHRDZM Smartmeter Modul ---
SHRDZM_IP = 192.168.X.ZZ
SHRDZM_USER = USER_DATA
SHRDZM_PASS = USER_PW
[COMMON]
# Number of Inverters
INVERTER_COUNT = 1
# max difference in percent between SetpointLimit change to approximate the power to new setpoint
SLOW_APPROX_LIMIT_IN_PERCENT = 20
# interval time for setting limit to Hoymiles
LOOP_INTERVAL_IN_SECONDS = 20
# delay time after sending limit to Hoymiles Inverter
SET_LIMIT_DELAY_IN_SECONDS = 5
# delay time after sending limit to Hoymiles Inverter when using more than one Inverter
SET_LIMIT_DELAY_IN_SECONDS_MULTIPLE_INVERTER = 2
# polling interval for powermeter (must be < LOOP_INTERVAL_IN_SECONDS)
POLL_INTERVAL_IN_SECONDS = 1
# when powermeter > 0: (True): always jump to maxLimit of inverter; (False): increase limit based on previous limit
JUMP_TO_MAX_LIMIT_ON_GRID_USAGE = true
# max difference between Limit and real output power in % of HOY_MAX_WATT (100 = disabled)
MAX_DIFFERENCE_BETWEEN_LIMIT_AND_OUTPUTPOWER = 10
[CONTROL]
# --- global defines for control behaviour ---
# this is the target power for powermeter in watts
POWERMETER_TARGET_POINT = -75
# this is the tolerance (pos and neg) around the target point. in this range no adjustment will be set
POWERMETER_TOLERANCE = 25
# this is the max power to regulate the limit. if your powermeter is above this point, the limit jumps to 100% (when JUMP_TO_MAX_LIMIT_ON_GRID_USAGE is set to TRUE). Must be higher than POWERMETER_TARGET_POINT + POWERMETER_TOLERANCE
POWERMETER_MAX_POINT = 0
# List of INVERTERS, based on COMMON/COUNT
[INVERTER_1]
# Hoymiles Inverter Serial Number
SERIAL_NUMBER = 114181814616
# maximum limit in watts (100%)
HOY_MAX_WATT = 800
# minimum limit in percent, e.g. 5%
HOY_MIN_WATT_IN_PERCENT = 5
; [INVERTER_2]
; # Hoymiles Inverter Serial Number
; SERIAL_NUMBER = xxxxxxxxxxxx
; # maximum limit in watts (100%)
; HOY_MAX_WATT = 600
; # minimum limit in percent, e.g. 5%
; HOY_MIN_WATT_IN_PERCENT = 5
; [INVERTER_3]
; # Hoymiles Inverter Serial Number
; SERIAL_NUMBER = xxxxxxxxxxxx
; # maximum limit in watts (100%)
; HOY_MAX_WATT = 300
; # minimum limit in percent, e.g. 5%
; HOY_MIN_WATT_IN_PERCENT = 5
; #...
# grid power
# ...
# |
# | -------> jump limit to HOY_MAX_WATT if (JUMP_TO_MAX_LIMIT_ON_GRID_USAGE = TRUE), else: increasing limit <-------
# |
# [0W] [POWERMETER_MAX_POINT]
# |
# | -------> increasing limit <-------
# |
# [-50W] [POWERMETER_TARGET_POINT + POWERMETER_TOLERANCE]
# |
# | -------> no limit change between -100W ... -50W <-------
# |
# [-75W] [POWERMETER_TARGET_POINT]
# |
# | -------> no limit change between -100W ... -50W <-------
# |
# [-100W] [POWERMETER_TARGET_POINT - POWERMETER_TOLERANCE]
# |
# | -------> decreasing limit <-------
# |
# ...
Und die IP ist korrekt? HTTPConnectionPool(host='192.168.1.4', port=80): Max retries exceeded with url: /api/index (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f3bdffb05e0>: Failed to establish a new connection: [Errno 101] Network is unreachable'))
Für mich sieht das so aus als kann er Ahoy nicht abfragen.
IP ist definitiv korrekt
Kannst du es mal in Windows versuchen? Da kannst du es debuggen wo er genau rausfliegt…
Oder kannst du die AHOY IP mal von dem Debian Server pingen ob der erreichbar ist? Ist definitiv ein Fehler bei GetHoymilesAvailable... Kann ich auch nachstellen wenn ich eine falsche IP eintrage oder eine die es nicht gibt.
Anpingen ist absolut stressfrei: ca. 2,5ms bis 4ms im Schnitt
Aber dann sollte doch auch nie die Meldung kommen: Inverter reachable true
ja ich schau grad den zweiten eintrag an von dir, da kommt das auch nicht? https://github.com/reserve85/HoymilesZeroExport/issues/12#issuecomment-1477986401 oder was ist jetzt dein output?
edit: ansonsten müsste ich evtl. mal mit teamviewer oder so bei dir debuggen, falls das möglich ist (z.B. mit Visual Code, falls du das installiert hast)
du könntest auch das hier noch zum Testen in den Code einfügen, evtl hilft es:
direkt nach der Zeile
SLOW_APPROX_LIMIT = int(GetMaxWattFromAllInverters() * config.getint('COMMON', 'SLOW_APPROX_LIMIT_IN_PERCENT') / 100)
das hier einfügen und das script dann mal starten
try:
# Test
logging.info("---Startup-Test---")
logging.info("GetHoymilesAvailable")
GetHoymilesAvailable()
logging.info("GetPowermeterWatts")
GetPowermeterWatts()
logging.info("GetHoymilesActualPower")
GetHoymilesActualPower()
logging.info("SetLimit")
SetLimit(GetMaxWattFromAllInverters())
logging.info("---Startup-Test complete---")
except Exception as e:
if hasattr(e, 'message'):
print(e.message)
else:
print(e)
Habe den Teil eingefügt und das Script manuell gestartet:
Mär 22 16:19:05 Debian-Server systemd[1]: Started HoymilesZeroExport Service. Mär 22 16:19:05 Debian-Server python3[805]: 2023-03-22 16:19:05 INFO Author: reserve85 / Script Version: 1.9 Mär 22 16:19:05 Debian-Server python3[805]: 2023-03-22 16:19:05 INFO read config file: /home/user/HoymilesZeroExport/HoymilesZeroExport_Config.ini Mär 22 16:19:05 Debian-Server python3[805]: 2023-03-22 16:19:05 INFO ---Startup-Test--- Mär 22 16:19:05 Debian-Server python3[805]: 2023-03-22 16:19:05 INFO GetHoymilesAvailable Mär 22 16:19:05 Debian-Server python3[805]: 2023-03-22 16:19:05 INFO Inverter 0 reachable: True Mär 22 16:19:05 Debian-Server python3[805]: 2023-03-22 16:19:05 INFO GetPowermeterWatts Mär 22 16:19:05 Debian-Server python3[805]: 2023-03-22 16:19:05 INFO Inverter 0 reachable: True Mär 22 16:19:05 Debian-Server python3[805]: 2023-03-22 16:19:05 INFO setting new limit to 800 Watt Mär 22 16:19:05 Debian-Server python3[805]: 2023-03-22 16:19:05 INFO Inverter 0: setting new limit from 0 Watt to 800 Watt Mär 22 16:19:15 Debian-Server python3[805]: 2023-03-22 16:19:15 INFO Inverter 0 reachable: True Mär 22 16:19:36 Debian-Server python3[805]: 2023-03-22 16:19:36 INFO Inverter 0 reachable: True
Starte ich allerdings den Server neu und er startet selbst das Script erhalte ich nach Eingabe von: sudo journalctl -u HoymilesZeroExport.service -n 20000 -e -f eine Unmenge von Fehlermeldungen ....
OK, ein Schritt weiter: vom Powermeter kommt nix an. Bitte die Funktion mal ersetzen:
def GetPowermeterWattsShrdzm():
logging.info("GetPowermeterWattsShrdzm")
logging.info(f'http://{SHRDZM_IP}/getLastData?user={SHRDZM_USER}&password={SHRDZM_PASS}')
url = f'http://{SHRDZM_IP}/getLastData?user={SHRDZM_USER}&password={SHRDZM_PASS}'
ParsedData = requests.get(url).json()
logging.info(ParsedData)
logging.info(ParsedData['1.7.0'])
logging.info(ParsedData['2.7.0'])
Watts = int(ParsedData['1.7.0'] - ParsedData['2.7.0'])
logging.info("powermeter: %s %s",Watts," Watt")
return int(Watts)
Zählerdaten sind sichtbar:
Mär 22 16:58:35 Debian-Server systemd[1]: Started HoymilesZeroExport Service. Mär 22 16:58:35 Debian-Server python3[870]: 2023-03-22 16:58:35 INFO Author: reserve85 / Script Version: 1.9 Mär 22 16:58:35 Debian-Server python3[870]: 2023-03-22 16:58:35 INFO read config file: /home/user/HoymilesZeroExport/HoymilesZeroExport_Config.ini Mär 22 16:58:35 Debian-Server python3[870]: 2023-03-22 16:58:35 INFO ---Startup-Test--- Mär 22 16:58:35 Debian-Server python3[870]: 2023-03-22 16:58:35 INFO GetHoymilesAvailable Mär 22 16:58:35 Debian-Server python3[870]: 2023-03-22 16:58:35 INFO Inverter 0 reachable: True Mär 22 16:58:35 Debian-Server python3[870]: 2023-03-22 16:58:35 INFO GetPowermeterWatts Mär 22 16:58:35 Debian-Server python3[870]: 2023-03-22 16:58:35 INFO GetPowermeterWattsShrdzm Mär 22 16:58:35 Debian-Server python3[870]: 2023-03-22 16:58:35 INFO http://192.168.1.8/getLastData?user=USER&password=PASSWORT Mär 22 16:58:35 Debian-Server python3[870]: 2023-03-22 16:58:35 INFO {'1.8.0': '18334860', '2.8.0': '6849', '3.8.1': '60184', '4.8.1': '4749016', '1.7.0': '357', '2.7.0': '0', '3.7.0': '0', '4.7.0': '97', '1.128.0': '0', 'uptime': '0000:13:44:56'} Mär 22 16:58:35 Debian-Server python3[870]: 2023-03-22 16:58:35 INFO 357 Mär 22 16:58:35 Debian-Server python3[870]: 2023-03-22 16:58:35 INFO 0 Mär 22 16:58:35 Debian-Server python3[870]: 2023-03-22 16:58:35 INFO Inverter 0 reachable: True Mär 22 16:58:35 Debian-Server python3[870]: 2023-03-22 16:58:35 INFO setting new limit to 800 Watt Mär 22 16:58:35 Debian-Server python3[870]: 2023-03-22 16:58:35 INFO Inverter 0: setting new limit from 0 Watt to 800 Watt Mär 22 16:58:45 Debian-Server python3[870]: 2023-03-22 16:58:45 INFO Inverter 0 reachable: True Mär 22 16:58:45 Debian-Server python3[870]: 2023-03-22 16:58:45 INFO GetPowermeterWattsShrdzm Mär 22 16:58:45 Debian-Server python3[870]: 2023-03-22 16:58:45 INFO http://192.168.1.8/getLastData?user=USER&password=PASSWORT Mär 22 16:58:46 Debian-Server python3[870]: 2023-03-22 16:58:46 INFO {'1.8.0': '18334862', '2.8.0': '6849', '3.8.1': '60184', '4.8.1': '4749017', '1.7.0': '364', '2.7.0': '0', '3.7.0': '0', '4.7.0': '96', '1.128.0': '0', 'uptime': '0000:13:45:09'}
diese Zeile ersetzen:
Watts = int(ParsedData['1.7.0'] - ParsedData['2.7.0'])
durch
Watts = int(int(ParsedData['1.7.0']) - int(ParsedData['2.7.0']))
sieht jetzt ganz gut aus:
Mär 22 17:14:27 Debian-Server systemd[1]: Started HoymilesZeroExport Service. Mär 22 17:14:28 Debian-Server python3[1049]: 2023-03-22 17:14:28 INFO Author: reserve85 / Script Version: 1.9 Mär 22 17:14:28 Debian-Server python3[1049]: 2023-03-22 17:14:28 INFO read config file: /home/user/HoymilesZeroExport/HoymilesZeroExport_Config.ini Mär 22 17:14:28 Debian-Server python3[1049]: 2023-03-22 17:14:28 INFO ---Startup-Test--- Mär 22 17:14:28 Debian-Server python3[1049]: 2023-03-22 17:14:28 INFO GetHoymilesAvailable Mär 22 17:14:28 Debian-Server python3[1049]: 2023-03-22 17:14:28 INFO Inverter 0 reachable: True Mär 22 17:14:28 Debian-Server python3[1049]: 2023-03-22 17:14:28 INFO GetPowermeterWatts Mär 22 17:14:28 Debian-Server python3[1049]: 2023-03-22 17:14:28 INFO GetPowermeterWattsShrdzm Mär 22 17:14:28 Debian-Server python3[1049]: 2023-03-22 17:14:28 INFO http://192.168.1.8/getLastData?user=USER&password=PASSWORT Mär 22 17:14:28 Debian-Server python3[1049]: 2023-03-22 17:14:28 INFO {'1.8.0': '18334984', '2.8.0': '6849', '3.8.1': '60184', '4.8.1': '4749042', '1.7.0': '328', '2.7.0': '0', '3.7.0': '0', '4.7.0': '97', '1.128.0': '0', 'uptime': '0000:14:00:51'} Mär 22 17:14:28 Debian-Server python3[1049]: 2023-03-22 17:14:28 INFO 328 Mär 22 17:14:28 Debian-Server python3[1049]: 2023-03-22 17:14:28 INFO 0 Mär 22 17:14:28 Debian-Server python3[1049]: 2023-03-22 17:14:28 INFO powermeter: 328 Watt Mär 22 17:14:28 Debian-Server python3[1049]: 2023-03-22 17:14:28 INFO GetHoymilesActualPower Mär 22 17:14:28 Debian-Server python3[1049]: 2023-03-22 17:14:28 INFO Inverter 0 power producing: 29 Watt Mär 22 17:14:28 Debian-Server python3[1049]: 2023-03-22 17:14:28 INFO SetLimit Mär 22 17:14:28 Debian-Server python3[1049]: 2023-03-22 17:14:28 INFO setting new limit to 800 Watt Mär 22 17:14:28 Debian-Server python3[1049]: 2023-03-22 17:14:28 INFO Inverter 0: setting new limit from 0 Watt to 800 Watt Mär 22 17:14:33 Debian-Server python3[1049]: 2023-03-22 17:14:33 INFO ---Startup-Test complete--- Mär 22 17:14:33 Debian-Server python3[1049]: 2023-03-22 17:14:33 INFO Inverter 0 reachable: True Mär 22 17:14:33 Debian-Server python3[1049]: 2023-03-22 17:14:33 INFO setting new limit to 800 Watt Mär 22 17:14:33 Debian-Server python3[1049]: 2023-03-22 17:14:33 INFO Inverter 0: setting new limit from 800 Watt to 800 Watt Mär 22 17:14:43 Debian-Server python3[1049]: 2023-03-22 17:14:43 INFO Inverter 0 reachable: True Mär 22 17:14:43 Debian-Server python3[1049]: 2023-03-22 17:14:43 INFO GetPowermeterWattsShrdzm Mär 22 17:14:43 Debian-Server python3[1049]: 2023-03-22 17:14:43 INFO http://192.168.1.8/getLastData?user=USER&password=PASSWORT Mär 22 17:14:44 Debian-Server python3[1049]: 2023-03-22 17:14:44 INFO {'1.8.0': '18334985', '2.8.0': '6849', '3.8.1': '60184', '4.8.1': '4749043', '1.7.0': '588', '2.7.0': '0', '3.7.0': '0', '4.7.0': '97', '1.128.0': '0', 'uptime': '0000:14:01:07'} Mär 22 17:14:44 Debian-Server python3[1049]: 2023-03-22 17:14:44 INFO 588 Mär 22 17:14:44 Debian-Server python3[1049]: 2023-03-22 17:14:44 INFO 0 Mär 22 17:14:44 Debian-Server python3[1049]: 2023-03-22 17:14:44 INFO powermeter: 588 Watt Mär 22 17:14:44 Debian-Server python3[1049]: 2023-03-22 17:14:44 INFO setting new limit to 800 Watt Mär 22 17:14:44 Debian-Server python3[1049]: 2023-03-22 17:14:44 INFO Inverter 0: setting new limit from 800 Watt to 800 Watt
perfekt. SORRY! ich konnte das schlecht testen. Ich übernehme den Bugfix in der nächsten Version mit in den Quellcode. Du kannst im Prinzip vorerst das Originalfile nehmen und nur die eine Zeile austauschen. Danke für deine Geduld!
Hallo,
tolles Projekt und schon mal ein kräftiges Danke hierzu!
Ist es geplant auch Leseköpfe zu unterstützen welche mit sogenannten OBIS-Codes arbeiten?
1.7.0 ist der aktuelle Bezug 2.7.0 ist die aktuelle Einspeisung.
Mein Zähler liefert z.Bsp über eine REST API folgende Daten:
{ "1.8.0":"123456", "2.8.0":"123456", "3.8.1":"123456", "4.8.1":"123456", "1.7.0":"200", "2.7.0":"300", "3.7.0":"123456", "4.7.0":"123456", "1.128.0":"123456", "uptime":"0000:11:42:35" }
Abfragelink: http://IP_Adresse/getLastData?user=Benutzername&password=Passwort
Es gibt hier keine negativen Daten sondern man müsste beim Wert von 1.7.0 den Wert von 2.7.0 abziehen und so hätte man in meinem Beispiel eine aktuelle Einspeisung von 100 Watt.
Gruß, Thomas