Giter VIP home page Giter VIP logo

reserve85 / hoymileszeroexport Goto Github PK

View Code? Open in Web Editor NEW
132.0 14.0 31.0 630 KB

Zero Export Script for Hoymiles Inverters using AhoyDTU / OpenDTU and Tasmota Smart Meter inferface / Shelly 3EM / SHRDZM / Emlog / ioBroker

License: GNU General Public License v3.0

Python 92.63% Shell 6.48% Dockerfile 0.89%
ahoy hoymiles nulleinspeisung opendtu tasmota zeroexport shelly photovoltaik hichi shrdzm

hoymileszeroexport's People

Contributors

bootix avatar delacor avatar irrwitzer42 avatar mi-hol avatar ms49434 avatar reserve85 avatar tomquist avatar wind06 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hoymileszeroexport's Issues

Shelly 3 EM mit Passwortabfrage in der Config

könnte man beim Shelly EM 3 auch noch die Option des Passwort Schutzes umsetzen. (Abfrage in der HoymilesZeroExport_Config.ini)
Ich habe alle meine Shelly's normalerweise Passwort geschützt.
Danke auch für das tolle Script!

XpertXXL

Config parameter

ich bekomme den script nicht zum laufen auf einen Raspi zero

log

Mai 12 09:46:01 raspberrypizero systemd[1]: HoymilesZeroExport.service: Failed with result 'exit-code'.
Mai 12 09:46:01 raspberrypizero systemd[1]: HoymilesZeroExport.service: Consumed 3.694s CPU time.
Mai 12 09:46:01 raspberrypizero systemd[1]: HoymilesZeroExport.service: Scheduled restart job, restart counter is at 11.
Mai 12 09:46:01 raspberrypizero systemd[1]: Stopped HoymilesZeroExport Service.
Mai 12 09:46:01 raspberrypizero systemd[1]: HoymilesZeroExport.service: Consumed 3.694s CPU time.
Mai 12 09:46:01 raspberrypizero systemd[1]: Started HoymilesZeroExport Service.
Mai 12 09:46:07 raspberrypizero python3[6463]: 2023-05-12 09:46:07 INFO Log write to file: False
Mai 12 09:46:07 raspberrypizero python3[6463]: 2023-05-12 09:46:07 INFO Author: Tobias Kraft / Script Version: 1.32
Mai 12 09:46:07 raspberrypizero python3[6463]: 2023-05-12 09:46:07 INFO read config file: /home/pi/HoymilesZeroExport/HoymilesZeroExport_Config.ini
Mai 12 09:46:07 raspberrypizero python3[6463]: 2023-05-12 09:46:07 INFO Config file V 1.31
Mai 12 09:46:07 raspberrypizero python3[6463]: Traceback (most recent call last):
Mai 12 09:46:07 raspberrypizero python3[6463]: File "/usr/lib/python3.9/configparser.py", line 789, in get
Mai 12 09:46:07 raspberrypizero python3[6463]: value = d[option]
Mai 12 09:46:07 raspberrypizero python3[6463]: File "/usr/lib/python3.9/collections/init.py", line 941, in getitem
Mai 12 09:46:07 raspberrypizero python3[6463]: return self.missing(key) # support subclasses that define missing
Mai 12 09:46:07 raspberrypizero python3[6463]: File "/usr/lib/python3.9/collections/init.py", line 933, in missing
Mai 12 09:46:07 raspberrypizero python3[6463]: raise KeyError(key)
Mai 12 09:46:07 raspberrypizero python3[6463]: KeyError: 'ahoy_ip'
Mai 12 09:46:07 raspberrypizero python3[6463]: During handling of the above exception, another exception occurred:
Mai 12 09:46:07 raspberrypizero python3[6463]: Traceback (most recent call last):
Mai 12 09:46:07 raspberrypizero python3[6463]: File "/home/pi/HoymilesZeroExport/HoymilesZeroExport.py", line 675, in
Mai 12 09:46:07 raspberrypizero python3[6463]: AHOY_IP = config.get('AHOY_DTU', 'AHOY_IP')
Mai 12 09:46:07 raspberrypizero python3[6463]: File "/usr/lib/python3.9/configparser.py", line 792, in get
Mai 12 09:46:07 raspberrypizero python3[6463]: raise NoOptionError(option, section)
Mai 12 09:46:07 raspberrypizero python3[6463]: configparser.NoOptionError: No option 'ahoy_ip' in section: 'AHOY_DTU'
Mai 12 09:46:08 raspberrypizero systemd[1]: HoymilesZeroExport.service: Main process exited, code=exited, status=1/FAILURE
Mai 12 09:46:08 raspberrypizero systemd[1]: HoymilesZeroExport.service: Failed with result 'exit-code'.
Mai 12 09:46:08 raspberrypizero systemd[1]: HoymilesZeroExport.service: Consumed 3.736s CPU time.
Mai 12 09:46:08 raspberrypizero systemd[1]: HoymilesZeroExport.service: Scheduled restart job, restart counter is at 12.
Mai 12 09:46:08 raspberrypizero systemd[1]: Stopped HoymilesZeroExport Service.

ich denke das ich die Config.ini nicht richtig konfiguriert habe.

ich habe 2 Hoymiles HM-1500
könnte über
tasmota Lesekopf
shelly 3em
Homeassistent
steuern
Ich habe eine opendtu mit aktuellen Firmwareversion am laufen

der raspi zero ist nur für den sript da

# HoymilesZeroExport - https://github.com/reserve85/HoymilesZeroExport
# Copyright (C) 2023, Tobias Kraft

# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

[VERSION]
VERSION = 1.31

[SELECT_DTU]
# --- define your DTU (only one) ---
USE_AHOY = false
USE_OPENDTU = true

[SELECT_POWERMETER]
# --- define your Powermeter (only one) ---
USE_TASMOTA = true
USE_SHELLY_3EM = false
USE_SHELLY_3EM_PRO = false
USE_SHRDZM = false
USE_EMLOG = false
USE_IOBROKER = false
USE_HOMEASSISTANT = false

[AHOY_DTU]
# --- defines for AHOY-DTU ---
# in settings/inverter set interval to 6 seconds!
#AHOY_IP = 192.168.10.57

[OPEN_DTU]
# --- defines for OPEN-DTU ---
OPENDTU_IP = 192.168.178.xx
OPENDTU_USER = admin
OPENDTU_PASS = xxxxxxxx

[TASMOTA]
# --- defines for Tasmota Smartmeter Modul---
TASMOTA_IP = 192.168.178.73
# the following three constants describes how to navigate through the Tasmota-JSON. 
# if you do not know the format of your Tasmota reader, open a browser and put in the following string replacing xxx with the IP address of your Tasmota device: http://xxx.xxx.xxx.xxx/cm?cmnd=status%2010
# 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 = xxx.xxx.xxx.xxx
SHRDZM_USER =
SHRDZM_PASS =

[EMLOG]
# --- defines for EMLOG (electronic meter log) System ---
EMLOG_IP = xxx.xxx.xxx.xxx
EMLOG_METERINDEX = 

[IOBROKER]
# --- defines for IOBROKER (needs installed https://github.com/ioBroker/ioBroker.simple-api) ---
IOBROKER_IP = xxx.xxx.xxx.xxx
IOBROKER_PORT = 8087
IOBROKER_CURRENT_POWER_ALIAS = alias.0.Zaehler.Zaehler_CurrentWatt
# if your powermeter does NOT output the current power: you need to calculate it -> Power(W) = OBIS(1.7.0) - OBIS(2.7.0)
IOBROKER_POWER_CALCULATE = FALSE
# Power-MQTT Input label (positive active instantaneous power, e.g. OBIS Code 1.7.0)
IOBROKER_POWER_INPUT_ALIAS = alias.0.Zaehler.Zaehler_CurrentInputWatt
# Power-MQTT output label (negative active instantaneous power, e.g. OBIS Code 2.7.0)
IOBROKER_POWER_OUTPUT_ALIAS = alias.0.Zaehler.Zaehler_CurrentOutputWatt

[HOMEASSISTANT]
# --- defines for HOME ASSISTANT (you need to create a Long-Lived Access Token in your profile) ---
HA_IP = 192.168.178.84
HA_PORT = 8123
HA_ACCESSTOKEN = xxx
HA_CURRENT_POWER_ENTITY = sensor.dtz541_sml_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)
HA_POWER_CALCULATE = FALSE
# Power-MQTT Input label (positive active instantaneous power, e.g. OBIS Code 1.7.0)
HA_POWER_INPUT_ALIAS = sensor.dtz541_sml_170
# Power-MQTT output label (negative active instantaneous power, e.g. OBIS Code 2.7.0)
HA_POWER_OUTPUT_ALIAS = sensor.dtz541_sml_270

[SELECT_INTERMEDIATE_METER]
# if you have an intermediate meter to measure the outputpower of your inverter you can set it here. It is faster than the DTU current_power value
# --- define your intermediate meter - if you don´t have one set the following defines to false to use the value from your DTU---
USE_TASMOTA_INTERMEDIATE = true
USE_SHELLY_3EM_INTERMEDIATE = false
USE_SHELLY_3EM_PRO_INTERMEDIATE = false
USE_SHELLY_1PM_INTERMEDIATE = false
USE_SHELLY_PLUS_1PM_INTERMEDIATE = false
USE_SHRDZM_INTERMEDIATE = false
USE_EMLOG_INTERMEDIATE = false
USE_IOBROKER_INTERMEDIATE = false
USE_HOMEASSISTANT_INTERMEDIATE = false

[INTERMEDIATE_TASMOTA]
# --- defines for Tasmota Smartmeter Modul---
TASMOTA_IP_INTERMEDIATE = 192.68.178.73 
# the following three constants describes how to navigate through the Tasmota-JSON
# e.g. JSON_Result = {"StatusSNS":{"Time":"2023-02-28T12:49:49","SML":{"curr_w":500}}}
TASMOTA_JSON_STATUS_INTERMEDIATE = StatusSNS
# Prefix for Web UI and MQTT JSON payload
TASMOTA_JSON_PAYLOAD_MQTT_PREFIX_INTERMEDIATE = SML
# Power-MQTT label (the current solar-power in Watt).
TASMOTA_JSON_POWER_MQTT_LABEL_INTERMEDIATE = curr_w

[INTERMEDIATE_SHELLY]
# --- defines for Shelly ---
SHELLY_IP_INTERMEDIATE = xxx.xxx.xxx.xxx 

[INTERMEDIATE_SHRDZM]
# --- defines for SHRDZM Smartmeter Modul ---
SHRDZM_IP_INTERMEDIATE = xxx.xxx.xxx.xxx
SHRDZM_USER_INTERMEDIATE =
SHRDZM_PASS_INTERMEDIATE =

[INTERMEDIATE_EMLOG]
# --- defines for EMLOG (electronic meter log) System ---
EMLOG_IP_INTERMEDIATE = xxx.xxx.xxx.xxx
EMLOG_METERINDEX_INTERMEDIATE = 

[INTERMEDIATE_IOBROKER]
# --- defines for IOBROKER (needs installed https://github.com/ioBroker/ioBroker.simple-api) ---
IOBROKER_IP_INTERMEDIATE = xxx.xxx.xxx.xxx
IOBROKER_PORT_INTERMEDIATE = 8087
IOBROKER_CURRENT_POWER_ALIAS_INTERMEDIATE = alias.0.Zaehler.Zaehler_SolarCurrentWatt

[INTERMEDIATE_HOMEASSISTANT]
# --- defines for HOME ASSISTANT (you need to create a Long-Lived Access Token in your profile) ---
HA_IP_INTERMEDIATE = xxx.xxx.xxx.xxx
HA_PORT_INTERMEDIATE = 8123
HA_ACCESSTOKEN_INTERMEDIATE = xxx
HA_CURRENT_POWER_ENTITY_INTERMEDIATE = sensor.dtz541_sml_curr_w

[COMMON]
# Number of Inverters
INVERTER_COUNT = 2
# max difference in percent between SetpointLimit change to approximate the power to new setpoint
SLOW_APPROX_LIMIT_IN_PERCENT = 20
# if slow approximation: additional limit based on the limit-difference to "smoot the curve": newLimitSetpoint = newLimitSetpoint + (LimitDifference * SLOW_APPROX_FACTOR_IN_PERCENT / 100)
SLOW_APPROX_FACTOR_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 = 100
# enable logging to file
ENABLE_LOG_TO_FILE = false
# how many logfiles you wish to keep
LOG_BACKUP_COUNT = 30
# defines how often a identical limit will be set, set it to "-1" for disabled (infinite repeat)
SET_LIMIT_RETRY = 10
# log the inverter temperature
LOG_TEMPERATURE = false
# delay time after turning the inverter off or on
SET_POWER_STATUS_DELAY_IN_SECONDS = 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]
# maximum limit in watts (100%)
HOY_MAX_WATT = 1500
# minimum limit in percent, e.g. 5%
HOY_MIN_WATT_IN_PERCENT = 5
# factor to multiply before set Limit. Some Inverters have some offsets, with that factor you can compensate it. Default = 1
HOY_COMPENSATE_WATT_FACTOR = 1
# battery powered?
HOY_BATTERY_MODE = false
# voltage to turn off the inverter
HOY_BATTERY_THRESHOLD_OFF_LIMIT_IN_V = 47
# voltage to limit the inverter to a maximum of HOY_BATTERY_REDUCE_WATT
HOY_BATTERY_THRESHOLD_REDUCE_LIMIT_IN_V = 48
# voltage to limit the inverter to a maximum of HOY_BATTERY_NORMAL_WATT
HOY_BATTERY_THRESHOLD_NORMAL_LIMIT_IN_V = 48.5
# maximum limit in watts when battery is high (above HOY_BATTERY_THRESHOLD_NORMAL_LIMIT_IN_V) --- MAXIMUM is the same value as HOY_MAX_WATT
HOY_BATTERY_NORMAL_WATT = 1500
# maximum limit in watts when battery is low (below HOY_BATTERY_THRESHOLD_REDUCE_LIMIT_IN_V)
HOY_BATTERY_REDUCE_WATT = 300
# reenable inverter at this voltage
HOY_BATTERY_THRESHOLD_ON_LIMIT_IN_V = 51

[INVERTER_2]
# maximum limit in watts (100%)
HOY_MAX_WATT = 1500
# minimum limit in percent, e.g. 5%
HOY_MIN_WATT_IN_PERCENT = 5
# battery powered?
HOY_BATTERY_MODE = false
# voltage to turn off the inverter
HOY_BATTERY_THRESHOLD_OFF_LIMIT_IN_V = 47
# voltage to limit the inverter to a maximum of HOY_BATTERY_REDUCE_WATT
HOY_BATTERY_THRESHOLD_REDUCE_LIMIT_IN_V = 48
# voltage to limit the inverter to a maximum of HOY_BATTERY_NORMAL_WATT
HOY_BATTERY_THRESHOLD_NORMAL_LIMIT_IN_V = 48.5
# maximum limit in watts when battery is high (above HOY_BATTERY_THRESHOLD_NORMAL_LIMIT_IN_V) --- MAXIMUM is the same value as HOY_MAX_WATT
HOY_BATTERY_NORMAL_WATT = 1500
# maximum limit in watts when battery is low (below HOY_BATTERY_THRESHOLD_REDUCE_LIMIT_IN_V)
HOY_BATTERY_REDUCE_WATT = 300
# reenable inverter at this voltage
HOY_BATTERY_THRESHOLD_ON_LIMIT_IN_V = 51



# 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 <-------
#     |
#    ...

vieleicht kann mir jemand helfen
gruß fatzo

Hilfe beim Ausführen unter Windows

Hi,

ich würde das Script gern auf einem Windows Rechner laufen lassen. Leider habe ich vom Programmieren oder von python keinen Plan. Ich komme aus der Hardwarecke, und verstehe noch Basic vom C64 und Batchdateien in DOS.

Kann ich das Script so unter zB Tonny ausführen? Ich habs mal probiert, klappt aber nicht. Die IP Adressen habe ich natürlich geändert. Desweiteren habe ich keinen Tasmota, sondern einen anderen Lesekopf, aber der spukt auch json aus. Die richtige Adresse ist bei mir
http://{tasmotaIP}/pages/getinformation.php?heute&meterindex=1

Was aber noch geändert werden muss: Anders als Tasmota zeigt mein Zähler nicht negativ bei Einspeisung, sondern ich habe zwei positive Werte (1.7.0 für Bezug und 2.7.0 für Einspeisung. Um aber einfach einen negativen Wert zu bekommen kann man Netzbezug (1.7.0) abzüglich Einspeisung (2.7.0) rechnen. Beispiel: Bei Netzbezug von 500W ist ja 1.7.0=500, 2.7.0=0, also logischerweise 500W. Bei Einspeisung ist 1.7.0=0, 2.7.0=500, also 0 - 500 = -500.

Vielleicht hast du ja Bock mir ein wenig zu helfen.

OpenDTU Script läuft nicht bei geschützter Live Ansicht

Wenn man in den Sicherheitseinstellungen den Schalter
Berechtigung
Nur-Lese-Zugriff auf die Weboberfläche ohne Passwort zulassen ausschaltet, hat das Script keinen Zugriff mehr auf die DTU
Passwort und User sind doch hinterlegt, dann sollte das doch gehen oder?

Screenshot 2023-03-31 164107

Mar 31 16:42:05 zeroexport python3[272]: 2023-03-31 16:42:05 INFO     Exception at GetHoymilesAvailable, Inverter not available
Mar 31 16:42:05 zeroexport python3[272]: 2023-03-31 16:42:05 ERROR    Expecting value: line 1 column 1 (char 0)

Support for multiple inverters

Great work!
Are you planning on adding support for multiple inverters?
Because Ahoy and OpenDTU both support more than one and there are many users using two or more inverters. I'am also planning on buying a second one.

setting new limit, obwohl schon am limit?

HM300 an 24V-LiFePo-Akkupacks.
Soll vor allem nachts die Grundlast regeln.

hoymilesMaxWatt = int(80)

Mikrowelle an:
2023-02-28 12:40:34 INFO powermeter: 210 Watt
2023-02-28 12:40:34 INFO setting new limit to 80 Watt
2023-02-28 12:40:44 INFO HM reachable: True
2023-02-28 12:40:44 INFO powermeter: 1183 Watt
2023-02-28 12:40:44 INFO setting new limit to 80 Watt
2023-02-28 12:41:04 INFO HM reachable: True
2023-02-28 12:41:04 INFO powermeter: 1178 Watt
2023-02-28 12:41:04 INFO setting new limit to 80 Watt
2023-02-28 12:41:24 INFO HM reachable: True
2023-02-28 12:41:25 INFO powermeter: 1181 Watt
2023-02-28 12:41:25 INFO setting new limit to 80 Watt
2023-02-28 12:41:45 INFO HM reachable: True
2023-02-28 12:41:45 INFO powermeter: 1175 Watt
2023-02-28 12:41:45 INFO setting new limit to 80 Watt
2023-02-28 12:42:05 INFO HM reachable: True
2023-02-28 12:42:05 INFO powermeter: 1161 Watt
2023-02-28 12:42:05 INFO setting new limit to 80 Watt
2023-02-28 12:42:25 INFO HM reachable: True
2023-02-28 12:42:26 INFO powermeter: -52 Watt

Hichi IR Lesekopf über USB an Raspberry Pi

Ich habe den Lesekopf über USB direkt am Raspberry Pi stecken und über ioBroker sehe ich auch die Werte des Zählers.
Wie muss ich denn die Config.ini anpassen, um die Nulleinspeisung zu realisieren?

Eure Config Parameter?

Wie sind eure Erfahrungen mit dem Script?
Ich stehe auf das Jump to Max Limit, damit ich möglichst sofort reagiere wenn ein Verbraucher dazukommt.
Mit Ahoy V0.6.0 konnte ich die Timings im Vergleich zu den Default-Values ganz schön redizieren und bekomme wirklich Top-Ergebnisse:

[COMMON]
INVERTER_COUNT = 1
SLOW_APPROX_LIMIT_IN_PERCENT = 25
SLOW_APPROX_FACTOR_IN_PERCENT = 20
LOOP_INTERVAL_IN_SECONDS = 10
SET_LIMIT_DELAY_IN_SECONDS = 3
SET_LIMIT_DELAY_IN_SECONDS_MULTIPLE_INVERTER = 2
POLL_INTERVAL_IN_SECONDS = 1
JUMP_TO_MAX_LIMIT_ON_GRID_USAGE = true
MAX_DIFFERENCE_BETWEEN_LIMIT_AND_OUTPUTPOWER = 15
ENABLE_LOG_TO_FILE = false
LOG_BACKUP_COUNT = 30
SET_LIMIT_RETRY = -1

[CONTROL]
POWERMETER_TARGET_POINT = -75
POWERMETER_TOLERANCE = 5
POWERMETER_MAX_POINT = 0

Kleiner Bug in der Benennung der Logdatei

Guten Morgen,

nur ein Hinweis: Die aktuelle Logdatei heißt da immer today.log, diese wird irgendwann Nachts anscheinend umbenannt, die Datei von gestern heißt aber 20230324_000011, der ist aber heute. 😄

Support von Shelly Pro 3EM

Hi,
ich habe bei mir einen Shelly Pro 3EM verbaut und den Code folgendermaßen erweitert um es verwenden zu können:

`import websocket
import json

....

def GetPowermeterWattsShellyPro3EM():
payload = {"id": 1,"method": "Shelly.GetStatus"}
url = f"ws://{SHELLY_PRO3EM_IP}/rpc"
ws = websocket.create_connection(url)
ws.send(json.dumps(payload))
result = ws.recv()
ws.close()
Watts = json.loads(result)["result"]["em:0"]["total_act_power"]
logger.info("powermeter: %s %s",Watts," Watt")
return int(Watts)`

Wäre toll, wenn Du den support offiziellen dazu geben könntest.

Überschusseinspeisung wenn Unterkapazität im Netz ist

Man könnte doch, wenn "Strommangel" im Netz besteht (Netzfrequenz < 50Hz oder einer noch zu definierenden Frequenz) die Nulleinspeisung aufheben, um das Netz zu unterstützen.
Ist so was progammiertechnisch einfach umsetzbar??
Der WR stellt die aktuelle Netzfrequenz zur Verfügung.
Ich möchte das Netz nicht unnötig belasten, deshalb habe ich die Nulleinspeisung aktiviert und nicht, weil ich nichts verschenken will. Wenn es (hoffentlich) immer mehr werden, die ein BKW betreiben, verstehe ich die Sorgen der Netzbetreiber schon, dass das Netz schwieriger zu managen ist.
An dieser Stelle auch mein herzlicher Dank an reserve85 für das toll funktionierende Script.

XpertXXL

Inverternamen/Temperatur im Log anzeigen

Kann man den Inverter über das Script beim Namen nennen? In Ahoy vergibt man ja Namen für die Inverter, diesen Namen könnte man ja auch im Script anzeigen lassen. Sieht ein bisschen hübscher aus als Inverter 0, Inverter 1...

Des Weiteren:
Der HM1500 wird sehr warm bei mir. Ist außen montiert, Nordseite an der Wand, auf 100% Limit komme ich aber schnell an die 45 Grad. Kann man die Temperatur mit abrufen, so dass die mit geloggt wird? Meine Idee für die Zukunft wäre dann vielleicht eine Art Sicherheitsfunktion, das bei Überschreiten einer bestimmten Temperatur die Leistung gedrosselt wird. Das funktioniert auch tatsächlich, sobald ich manuell die Leistung limitiere wird der WR auch wieder kühler. Nur hätte ich gern die Möglichkeit überhaupt die Temperatur mitzuschreiben, die hohen Außentemperaturen kommen ja erst noch, wobei der HM1500 glaub ich bis 60 Grad ab kann.

BTW:
Eigentlich wollte ich die Log Dateien nur 5 Tage behalten, ich habe aber jetzt schon 8 Files. Kann es sein, dass der Counter dafür wieder neu startet, sobald auch der Dienst neu gestartet wird?

Service startet nicht

Mein System: 2 HM-600, Ahoy und Hichi Lesekopf.
Im HoymilesZeroExport.py ist scheinbar ein Fehler.
Kann es daran liegen?

Apr 09 14:41:29 raspberrypi systemd[1]: Starting HoymilesZeroExport Service...
Apr 09 14:41:29 raspberrypi systemd[1]: Started HoymilesZeroExport Service.
Apr 09 14:41:29 raspberrypi python3[7912]: File "/home/pi/HoymilesZeroExport/HoymilesZeroExport.py", line 69
Apr 09 14:41:29 raspberrypi python3[7912]: url=f"http://{OPENDTU_IP}/api/limit/config"
Apr 09 14:41:29 raspberrypi python3[7912]: ^
Apr 09 14:41:29 raspberrypi python3[7912]: SyntaxError: invalid syntax
Apr 09 14:41:29 raspberrypi systemd[1]: HoymilesZeroExport.service: main process exited, code=exited, status=1/FAILURE
Apr 09 14:41:29 raspberrypi systemd[1]: Unit HoymilesZeroExport.service entered failed state.
Apr 09 14:41:29 raspberrypi systemd[1]: HoymilesZeroExport.service holdoff time over, scheduling restart.
Apr 09 14:41:29 raspberrypi systemd[1]: Stopping HoymilesZeroExport Service...
Apr 09 14:41:29 raspberrypi systemd[1]: Starting HoymilesZeroExport Service...
Apr 09 14:41:29 raspberrypi systemd[1]: Started HoymilesZeroExport Service.
Apr 09 14:41:29 raspberrypi python3[7918]: File "/home/pi/HoymilesZeroExport/HoymilesZeroExport.py", line 69
Apr 09 14:41:29 raspberrypi python3[7918]: url=f"http://{OPENDTU_IP}/api/limit/config"
Apr 09 14:41:29 raspberrypi python3[7918]: ^
Apr 09 14:41:29 raspberrypi python3[7918]: SyntaxError: invalid syntax
Apr 09 14:41:29 raspberrypi systemd[1]: HoymilesZeroExport.service: main process exited, code=exited, status=1/FAILURE
Apr 09 14:41:29 raspberrypi systemd[1]: Unit HoymilesZeroExport.service entered failed state.
Apr 09 14:41:29 raspberrypi systemd[1]: HoymilesZeroExport.service holdoff time over, scheduling restart.
Apr 09 14:41:29 raspberrypi systemd[1]: Stopping HoymilesZeroExport Service...
Apr 09 14:41:29 raspberrypi systemd[1]: Starting HoymilesZeroExport Service...
Apr 09 14:41:29 raspberrypi systemd[1]: Started HoymilesZeroExport Service.
Apr 09 14:41:29 raspberrypi python3[7920]: File "/home/pi/HoymilesZeroExport/HoymilesZeroExport.py", line 69
Apr 09 14:41:29 raspberrypi python3[7920]: url=f"http://{OPENDTU_IP}/api/limit/config"
Apr 09 14:41:29 raspberrypi python3[7920]: ^
Apr 09 14:41:29 raspberrypi python3[7920]: SyntaxError: invalid syntax
Apr 09 14:41:29 raspberrypi systemd[1]: HoymilesZeroExport.service: main process exited, code=exited, status=1/FAILURE
Apr 09 14:41:29 raspberrypi systemd[1]: Unit HoymilesZeroExport.service entered failed state.
Apr 09 14:41:29 raspberrypi systemd[1]: HoymilesZeroExport.service holdoff time over, scheduling restart.
Apr 09 14:41:29 raspberrypi systemd[1]: Stopping HoymilesZeroExport Service...
Apr 09 14:41:29 raspberrypi systemd[1]: Starting HoymilesZeroExport Service...
Apr 09 14:41:29 raspberrypi systemd[1]: Started HoymilesZeroExport Service.
Apr 09 14:41:29 raspberrypi python3[7923]: File "/home/pi/HoymilesZeroExport/HoymilesZeroExport.py", line 69
Apr 09 14:41:29 raspberrypi python3[7923]: url=f"http://{OPENDTU_IP}/api/limit/config"
Apr 09 14:41:29 raspberrypi python3[7923]: ^
Apr 09 14:41:29 raspberrypi python3[7923]: SyntaxError: invalid syntax
Apr 09 14:41:29 raspberrypi systemd[1]: HoymilesZeroExport.service: main process exited, code=exited, status=1/FAILURE
Apr 09 14:41:29 raspberrypi systemd[1]: Unit HoymilesZeroExport.service entered failed state.
Apr 09 14:41:29 raspberrypi systemd[1]: HoymilesZeroExport.service holdoff time over, scheduling restart.
Apr 09 14:41:29 raspberrypi systemd[1]: Stopping HoymilesZeroExport Service...
Apr 09 14:41:29 raspberrypi systemd[1]: Starting HoymilesZeroExport Service...
Apr 09 14:41:29 raspberrypi systemd[1]: Started HoymilesZeroExport Service.
Apr 09 14:41:30 raspberrypi python3[7925]: File "/home/pi/HoymilesZeroExport/HoymilesZeroExport.py", line 69
Apr 09 14:41:30 raspberrypi python3[7925]: url=f"http://{OPENDTU_IP}/api/limit/config"
Apr 09 14:41:30 raspberrypi python3[7925]: ^
Apr 09 14:41:30 raspberrypi python3[7925]: SyntaxError: invalid syntax
Apr 09 14:41:30 raspberrypi systemd[1]: HoymilesZeroExport.service: main process exited, code=exited, status=1/FAILURE
Apr 09 14:41:30 raspberrypi systemd[1]: Unit HoymilesZeroExport.service entered failed state.
Apr 09 14:41:30 raspberrypi systemd[1]: HoymilesZeroExport.service holdoff time over, scheduling restart.
Apr 09 14:41:30 raspberrypi systemd[1]: Stopping HoymilesZeroExport Service...
Apr 09 14:41:30 raspberrypi systemd[1]: Starting HoymilesZeroExport Service...
Apr 09 14:41:30 raspberrypi systemd[1]: HoymilesZeroExport.service start request repeated too quickly, refusing to start.
Apr 09 14:41:30 raspberrypi systemd[1]: Failed to start HoymilesZeroExport Service.
Apr 09 14:41:30 raspberrypi systemd[1]: Unit HoymilesZeroExport.service entered failed state.

Gesendete Limits werden am Wechselrichter nicht angenommen

Hallo!

Vorab vielen Dank für deine Arbeit!
Ich weiß nicht ob der Fehler am Skript liegt, hoffe aber hier eine Lösung zu finden: Das Skript läuft bei mir ohne Fehlermeldungen über OpenDTU, Shelly3EM und 3 Wechselrichter (2x HM1500, 1x HM800). Auslesen der Wechselrichter und des Shelly3EM klappt laut Log einwandfrei, aber die gesetzten Limits werden bei den Wechselrichtern nie angenommen.
Woran könnte das liegen? Fehler bekomme ich keine angezeigt.

Schritt für Schritt Anleitung für Windows

Hi . Wäre es dir möglich mal eine Schritt für Schritt Anleitung für Windows zu machen ?
leider krieg ich das Script nach wie vor nicht zum laufen . Er findet immer die config nicht zumindest versucht er sich mit tasmota zu verbinden obwohl ich dort false und
Bei Shelly True geschrieben habe .
toll wäre mal eine Anleitung

Ständige Limiterhöhung, langsame Limitreduzierung

Mir ist noch folgendes aufgefallen:

Das Limit wird ja, wenn nicht genug produziert wird, immer weiter erhöht. Vor ein paar Tagen habe ich das schonmal bemerkt, jetzt konnte ich es dokumentieren:

Wenn sich eine Wolke vor die Sonne schiebt, ich dann aber nur -10 Watt einspeise, wird da das Limit erhöht. Und erhöht, und erhöht. Bis ich beim Maximum von 1800W WR Leistung bin. Durch die Wolke speise ich aber immer noch -10 Watt ein. Wenn jetzt die Sonne wieder rauskommt speise ich mit voller Leistung ein, das Limit wird dann langsam wieder runtergeschraubt, das Script weiß ja aber nicht wieviel Leistung ich tatsächlich brauche (in diesem Beispiel 300 Watt). Um aber von 1800W auf 300W runterzuregeln dauert es mehre Minuten. Im angehängten Logfile bemerkt das Script eine Überproduktion um 13:47:38, bis ich wieder beim gewünschten Einspeisewert bin dauert es bis 2023-03-20 13:51:11. Das sind satte 3,5 Minuten bis ich wieder die geschünschte Leistung einspeise.

Kann man die Leistungsreduzierung irgendwie beschleunigen? Meinetwegen um einen festulegenden Prozentwert von HOY_MAX_WATT? Denn wenn ich direkt um 500 Watt reduzieren kann, dauert es dann (bei mir mit 13 Sekunden Intervall) 26 Sekunden um 1000 Watt zu reduzieren, dann nochmal 13 Sekunden bis es wieder passt.

3,5 Minuten sind echt lang, und ich habe nur 1800Watt maximale Leistung. Bei noch größeren Anlagen (und 20 Sekunden Intervall) dauert es ja noch viel länger.
Log 200323.txt

"Inverter reachable" nach Sonnenuntergang

Habe gerade noch was entdeckt:

Nach Sonnenuntergang sind die Inverter logischerweise nicht mehr erreichbar, es wird aber nur ein Inverter abgefragt:

2023-04-03 21:27:15,726 INFO     Ahoy: Inverter 0 reachable: False
2023-04-03 21:27:26,787 INFO     Ahoy: Inverter 0 reachable: False
2023-04-03 21:27:37,846 INFO     Ahoy: Inverter 0 reachable: False

Morgens um 7 startet WLAN wieder, dann werden auch beide Inverter abgefragt:


2023-04-03 07:00:15,606 INFO     Ahoy: Inverter 0 reachable: False
2023-04-03 07:00:26,712 INFO     Ahoy: Inverter 0 reachable: False
2023-04-03 07:00:37,771 INFO     Ahoy: Inverter 0 reachable: False
2023-04-03 07:00:48,831 INFO     Ahoy: Inverter 0 reachable: True
2023-04-03 07:00:48,859 INFO     Ahoy: Inverter 1 reachable: True
2023-04-03 07:00:48,886 INFO     powermeter EMLOG: 114  Watt
2023-04-03 07:00:48,887 INFO     setting new limit to 354 Watt

Und das hier ist der letzte Kontakt zum Inverter von heute:

2023-04-03 20:08:33,083 INFO     Ahoy: Inverter 0 reachable: True
2023-04-03 20:08:33,110 INFO     Ahoy: Inverter 1 reachable: True
2023-04-03 20:08:33,134 INFO     powermeter EMLOG: 1470  Watt
2023-04-03 20:08:33,135 INFO     Set Limit Retry Counter exceeded: Inverterlimit already at 1800 Watt
2023-04-03 20:08:43,220 INFO     Ahoy: Inverter 0 reachable: True
2023-04-03 20:08:43,247 INFO     Ahoy: Inverter 1 reachable: False
2023-04-03 20:08:54,382 INFO     Ahoy: Inverter 0 reachable: False
2023-04-03 20:09:05,441 INFO     Ahoy: Inverter 0 reachable: False
2023-04-03 20:09:16,502 INFO     Ahoy: Inverter 0 reachable: False
2023-04-03 20:09:27,561 INFO     Ahoy: Inverter 0 reachable: False
2023-04-03 20:09:38,621 INFO     Ahoy: Inverter 0 reachable: False
2023-04-03 20:09:49,679 INFO     Ahoy: Inverter 0 reachable: False

Wie du siehst wird Inverter 1 gar nicht abgefragt, wenn Inverter 0=false ist. Ist wohl nur ein Schönheitsfehler, kommt nämlich nur vor wenns dunkel ist.

Keine Daten vom Tasmota Sensor

Hi,

geniales Projekt, nur für mich leider zu schwer....

Ich habe alles soweit auf meinem RasPi installiert und "einiges" funktioniert auch. Bis auf die Verbindung mit dem Tasmota Sensor (Hichi WLAN).
Bilder sagen mehr als 1000 Worte:
Der Tasmota Hichi WLAN Sensor (unabhängig vom System im Browser):
Tasmota
Der zeigt natürlich auch negative Werte an wenn ich einspeise.

Der Raspi:
Raspi

Wie bekomme ich das Script nun dazu den aktuellen Verbrauch sauber auszulesen, damit die WR entsprechend angepasst werden können?

Beste Grüße
Ka.

Implementierung JSON Abfrage

Hi,

Du schreibst, dass es easy wäre eine neue JSON Abfrage einzubauen, leider habe ich mit Python null Erfahrungen.
Aber ich lese meinen Stromzähler mit einem ESP aus, der wiederum seine Website über JSON aktualisiert.
Heisst bei \192.168.xxx.xxx\get_measurements schaufelt er folgenden JSONString zurück.

["10994.379"," 36","47 days, 7 hours, 1 minutes, 14 seconds","37.16 KB","26.61 KB","22","32","-77","3C:37:12:D9:74:B1","ESP8266_SML_v17","Nov 23 2022","14:36:06","Software/System restart"]

Der zweite Wert ist dann der aktuelle Zählerwert bei Einspeisung mit Minus davor.
Machbar/Aufwand?

Gruß
Peff

Home Assistent-Automation

Servus,

prima script, aber bevor ich das auf meinem hassio installier, wäre mir eine Home Assistent-Automation lieber.

Könntest Du sowas dauraus basteln?

Danke, Mart

läuft nicht unter windows

Hallo seit 3 tagen versuche ich das skript zum laufen zu bekommen
gedownloaded und die config ausgefüllt
Allerdings kommen immer nur fehler meldungen .
Wie wird das skript richtig installiert ?
Aktuellste windows und Phyton version sowie Requests sind drauf .
der skript von selbstbau pv läuft problemlos also wo liegt mein fehler ?
Gibt es eine schritt für schritt anleitung ?

intermediate meter

Moin zusammen
Damit sind ja die zwischenzähler gemeint.

Ich habe pro Solarstrang je einen Shelly 1PM dazwischen,

wie bringe ich beide in die Config?

Einrichtung des Programms

Hallo, ich weis mir nicht mehr weiter.

Ich bin recht neu in dem Thema und versuche eine Nulleinspeisung mit meinem Balkonkraftwerk.
Dafür ist dieses Programm wie gemacht für meine Komponenten.

Open DTU und Smart Meter (mit Tasmota) eingerichtet und läuft.

Python Version 3.11.1
Banana Pi m2 zero
Ubuntu

Leider bekomm ich es das Programm nicht zum Laufen. Hier einmal was mir ausgespuckt wird.
Screenshot 2023-05-01 202504

Was mach ich falsch? Läuft das gar nicht auf Ubuntu?
Vielleicht kann jemand mir ja Helfen. Vielen Dank im voraus.

emlog Zähler Integration

Diese Werte werden benötigt:

Erstmal zum Verständnis: emlog läuft auf einem PI, an dem man unterschiedlichste Zähler anschließt, Strom und Gas. Als Stromzähler werden alle möglichen Geräte unterstützt, Impulszähler, RS485 und IR. Zwischen Zähler und PI werkelt aber immer extra HW, damit der PI überhaupt damit arbeiten kann.
Ist eine out of the box Lösung und kostet ein wenig Geld. Ist aber in Minuten eingerichtet und alles ohne HA, ioBroker, Grafana usw.

Dadurch erreicht man alle Zähler über eine IP, nur die letzte Ziffer der Domain verweist dann auf den entsprechenden Zähler

{emlogIP}/pages/getinformation.php?heute&meterindex=1 (beim Powermeter)
{emlogIP}/pages/getinformation.php?heute&meterindex=3 (bei intermediate)

Also brauchst du in der *.ini

Für Powermeter
IP Adresse
Meterindex (die Zählernummer in emlog)

Für Einspeisezähler
IP Adresse
Meterindex (die Zählernummer in emlog)

Damit kann dann die Domain gebaut werden.

Die Input und Outputlabel heißen immer gleich, die brauchen nicht variabel angegeben werden:
Leistung170 und Leistung270 bei powermeter, Leistung170 bei Intermediate.

Hier ein Auszug:

{"Leistung170":139,"Leistung171":0,"Leistung172":0,"Leistung173":0,"Leistung270":0,"Leistung271":0,"Leistung272":0,"Leistung273":0,"Waehrung":"EUR","Stand300":null,"M300":0,"Stand180":0,"Stand181":0,"Stand182":0,"Stand280":0,"Stand281":0,"Stand282":0,"Kwh180":0,"Kwh181":0,"Kwh182":0,"Kwh280":0,"Kwh281":0,"Kwh282":0,"Kwh300":0,"Betrag180":0,"Betrag181":0,"Betrag182":0,"Betrag280":0,"Betrag281":0,"Betrag282":0,"Betrag300":0,"Metertype":"Strom"}

Außerdem muss hier Einspeisung - Netzbezug gerechnet werden, denn die Leistung wird nicht negativ dargestellt.

Frage zu SLOW_APPROX_LIMIT_IN_PERCENT

Hi,

kann man SLOW_APPROX_LIMIT_IN_PERCENT und SLOW_APPROX_FACTOR_IN_PERCENT auf 0 setzen? Verstehe ich das richtig, wenn beide Werte 0 sind springt das Script direkt auf den Zielwert?

Oder muss SLOW_APPROX_LIMIT_IN_PERCENT auf 100 stehen für größtmögliche Sprünge?

Prüfung ob DTU online ist

Guten Morgen, mittlerweile läuft das Script auf meinem Pi Hole, da ist mir folgendes aufgefallen. Sobald die FritzBox die Nachtschaltung (WLAN aus) aktiviert, kommt es zu einer Fehlermeldung:

2023-02-21 00:29:25 INFO HM reachable: False
2023-02-21 00:29:42 INFO HM reachable: False
2023-02-21 00:29:59 INFO HM reachable: False
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 159, in _new_conn
(self._dns_host, self.port), self.timeout, **extra_kw)
File "/usr/lib/python3/dist-packages/urllib3/util/connection.py", line 80, in create_connection
raise err
File "/usr/lib/python3/dist-packages/urllib3/util/connection.py", line 70, in create_connection
sock.connect(sa)
OSError: [Errno 113] No route to host

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 600, in urlopen
chunked=chunked)
File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 354, in _make_request
conn.request(method, url, **httplib_request_kw)
File "/usr/lib/python3.7/http/client.py", line 1260, in request
self._send_request(method, url, body, headers, encode_chunked)
File "/usr/lib/python3.7/http/client.py", line 1306, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "/usr/lib/python3.7/http/client.py", line 1255, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "/usr/lib/python3.7/http/client.py", line 1030, in _send_output
self.send(msg)
File "/usr/lib/python3.7/http/client.py", line 970, in send
self.connect()
File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 181, in connect
conn = self._new_conn()
File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 168, in _new_conn
self, "Failed to establish a new connection: %s" % e)
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x763b0f10>: Failed to establish a new connection: [Errno 113] No route to host

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/requests/adapters.py", line 449, in send
timeout=timeout
File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 638, in urlopen
_stacktrace=sys.exc_info()[2])
File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 398, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='192.168.0.19', port=80): Max retries exceeded with url: /api/index (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x763b0f10>: Failed to establish a new connection: [Errno 113] No route to host'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/mnt/smb/test.py", line 72, in
if GetHoymilesAvailable():
File "/mnt/smb/test.py", line 32, in GetHoymilesAvailable
ParsedData = requests.get(url = f'http://{ahoyIP}/api/index').json()
File "/usr/lib/python3/dist-packages/requests/api.py", line 75, in get
return request('get', url, params=params, **kwargs)
File "/usr/lib/python3/dist-packages/requests/api.py", line 60, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/lib/python3/dist-packages/requests/sessions.py", line 533, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python3/dist-packages/requests/sessions.py", line 646, in send
r = adapter.send(request, **kwargs)
File "/usr/lib/python3/dist-packages/requests/adapters.py", line 516, in send
raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='192.168.0.19', port=80): Max retries exceeded with url: /api/index (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x763b0f10>: Failed to establish a new connection: [Errno 113] No route to host'))

Man kann hier schön sehen, das pünktlinch um 00:30 WLAN abgeschaltet wird. Das Script ist dann aber beendet, und nimmt am nächsten morgen natürlich die Arbeit nicht wieder auf.

Könnte man evtl. eine Prüfung einbauen, die nachschaut, ob die DTU online ist, aber bei einem false Ergebnis nicht direkt aussteigt? Ähnlich wie GetHoymilesAvailable, nur als GetDTUAvailable.

Ansteuerung zusätzlicher Verbraucher vor Limitierung

Mir ist da so eine Idee gekommen:
Könnte man nicht Verbraucher definieren welche zuerst zugeschalten werden bevor die Limitierung beginnt?

Beispiel:
Ich habe ein Aquarium mit 800L Inhalt wo ich ja die Energie für spätere Stunden schon speichern könnte.
Einen zusätzlichen Heizstab der 2-3 Grad höher eingestellt ist als der Standard-Heizstab an einem Tasmota Zwischenstecker einbauen.
Im Script definieren der Zusatz-Heizstab hat eine Leistung von z.Bsp. 200W und diesen entsprechend freischalten.

Würde natürlich auch für viele andere Dinge funktionieren...

Ein frohes Osterfest Euch allen!

Fehler seit Update auf 1.18

Hallo,

Version 1.14 hat bei mir funktioniert. Habe heute ein Update auf 1.18 gemacht (HoymilesZeroExport_Config.ini angepasst). Jedoch bekomme ich immer folgende Meldung:

Apr 05 14:14:52 pi1b python3[4136]: 2023-04-05 14:14:52 INFO Error on reading ENABLE_LOG_TO_FILE, set it to DISABLED
Apr 05 14:14:52 pi1b python3[4136]: 2023-04-05 14:14:52 ERROR File contains no section headers.
Apr 05 14:14:52 pi1b python3[4136]: file: '/home/pi/HoymilesZeroExport/HoymilesZeroExport_Config.ini', line: 1
Apr 05 14:14:52 pi1b python3[4136]: '.# HoymilesZeroExport - https://github.com/reserve85/HoymilesZeroExport\n'
Apr 05 14:14:52 pi1b python3[4136]: 2023-04-05 14:14:52 INFO Log write to file: False
Apr 05 14:14:52 pi1b python3[4136]: 2023-04-05 14:14:52 INFO Author: Tobias Kraft / Script Version: 1.18
Apr 05 14:14:52 pi1b python3[4136]: 2023-04-05 14:14:52 INFO read config file: /home/pi/HoymilesZeroExport/HoymilesZeroExport_Config.ini
Apr 05 14:14:52 pi1b python3[4136]: Traceback (most recent call last):
Apr 05 14:14:52 pi1b python3[4136]: File "/home/pi/HoymilesZeroExport/HoymilesZeroExport.py", line 351, in
Apr 05 14:14:52 pi1b python3[4136]: VERSION = config.get('VERSION', 'VERSION')
Apr 05 14:14:52 pi1b python3[4136]: File "/usr/lib/python3.9/configparser.py", line 781, in get
Apr 05 14:14:52 pi1b python3[4136]: d = self._unify_values(section, vars)
Apr 05 14:14:52 pi1b python3[4136]: File "/usr/lib/python3.9/configparser.py", line 1149, in _unify_values
Apr 05 14:14:52 pi1b python3[4136]: raise NoSectionError(section) from None
Apr 05 14:14:52 pi1b python3[4136]: configparser.NoSectionError: No section: 'VERSION'
Apr 05 14:14:52 pi1b systemd[1]: HoymilesZeroExport.service: Main process exited, code=exited, status=1/FAILURE
Apr 05 14:14:52 pi1b systemd[1]: HoymilesZeroExport.service: Failed with result 'exit-code'.
Apr 05 14:14:52 pi1b systemd[1]: HoymilesZeroExport.service: Consumed 4.328s CPU time.
Apr 05 14:14:52 pi1b systemd[1]: HoymilesZeroExport.service: Scheduled restart job, restart counter is at 3.
Apr 05 14:14:52 pi1b systemd[1]: Stopped HoymilesZeroExport Service.
Apr 05 14:14:52 pi1b systemd[1]: HoymilesZeroExport.service: Consumed 4.328s CPU time.
Apr 05 14:14:52 pi1b systemd[1]: Started HoymilesZeroExport Service.

Kann allerdings nicht erkennen wieso? Nutze OpenDTU und Tasmota zum Zähler auslesen.

Danke.

ERROR Exception at GetHoymilesActualPower

Moin @reserve85 ,
habe seit ich gestern von V1.19 auf V1.21 geupdatet habe ziemlich viele ERROR Meldungen im Log.
Habe soweit nur die HoymilesZeroExport.py und die HoymilesZeroExport_Config.ini ausgetauscht und in der .ini meine Werte aus der alten übernommen.

2023-04-13 08:19:58,830 ERROR    Exception at GetHoymilesActualPower
2023-04-13 08:19:58,831 ERROR    Expecting value: line 1 column 1 (char 0)
2023-04-13 10:14:40,652 ERROR    Exception at GetHoymilesActualPower
2023-04-13 10:14:40,653 ERROR    Expecting value: line 1 column 1 (char 0)
2023-04-13 10:15:01,095 ERROR    Exception at GetHoymilesActualPower
2023-04-13 10:15:01,096 ERROR    Expecting value: line 1 column 1 (char 0)
2023-04-13 10:15:21,526 ERROR    Exception at GetHoymilesActualPower
2023-04-13 10:15:21,526 ERROR    Expecting value: line 1 column 1 (char 0)
2023-04-13 10:15:42,052 ERROR    Exception at GetHoymilesActualPower
2023-04-13 10:15:42,052 ERROR    Expecting value: line 1 column 1 (char 0)
2023-04-13 10:16:13,020 ERROR    Exception at GetHoymilesActualPower
2023-04-13 10:16:13,020 ERROR    Expecting value: line 1 column 1 (char 0)
2023-04-13 10:16:33,610 ERROR    Exception at GetHoymilesActualPower

Wie mache ich ein Update

Hallo habe es geschafft nach langen Versuchen das Script zu installieren. Funktioniert auch sehr sehr gut. Vielen Dank für deine Arbeit.
Wie Date ich jetzt genau auf die neue Version ab ? Einfach mit install.sh wie bei der Installation? Wird die Config dabei überschrieben?
gibt es eigentlich eine Erklärung zu den einzelnen Einstellung ein in der Config? Mir ist die ganze Wirkungsweise nicht ganz klar. In Homeassistant kann ich aber gut sehen wie das Skript meine WRs regelt und es an meinen tatsächlichen Verbrauch angleicht. Um das zu optimieren und zu verstehen brauche ich aber eine etwas genauere Erklärung.

Sorry ich bin über 50 und ha eigentlich gar keine Programmierkenntnisse

Fehler mit zwei WR unter Homeassistent

Nadem das Skript echt gut mit EINEM WR lief, habe ich mal den zweiten WR mit eingegben.

Resultat: Fehler.

Hier mal ein paar Auszüge, vielleicht hilft es - Ich habe weder Ahnung von Python, noch behalte ich den Überblick bei derart vielen Zeilen ;-)

Aber reserve85 möchte ja auch, dass sein Skript getestet wird - also tue ich es gerne ;-)

[COMMON]

Number of Inverters

INVERTER_COUNT = 2

max difference in percent between SetpointLimit change to approximate the power to new setpoint

SLOW_APPROX_LIMIT_IN_PERCENT = 20

if slow approximation: additional limit based on the limit-difference to "smoot the curve": newLimitSetpoint = newLimitSetpoint + (LimitDifference * SLOW_APPROX_FACTOR_IN_PERCENT / 100)

SLOW_APPROX_FACTOR_IN_PERCENT = 20

[INVERTER_2]

maximum limit in watts (100%)

HOY_MAX_WATT = 1500

minimum limit in percent, e.g. 5%

HOY_MIN_WATT_IN_PERCENT = 5

battery powered?

HOY_BATTERY_MODE = false

voltage to turn off the inverter

HOY_BATTERY_THRESHOLD_OFF_LIMIT_IN_V = 47

voltage to limit the inverter to a maximum of HOY_BATTERY_REDUCE_WATT

HOY_BATTERY_THRESHOLD_REDUCE_LIMIT_IN_V = 48

Log:
2023-05-18 11:51:39.124514 INFO AppDaemon: Loading App Module: /config/appdaemon/apps/HoymilesZeroExport.py
2023-05-18 11:51:39 INFO Log write to file: False
2023-05-18 11:51:39 INFO Author: Tobias Kraft / Script Version: 1.32
2023-05-18 11:51:39 INFO read config file: /config/appdaemon/apps/HoymilesZeroExport_Config.ini
2023-05-18 11:51:39 INFO Config file V 1.31
2023-05-18 11:51:39.207456 WARNING Error: ------------------------------------------------------------
2023-05-18 11:51:39.208025 WARNING Error: Unexpected error loading module: /config/appdaemon/apps/HoymilesZeroExport.py:
2023-05-18 11:51:39.208702 WARNING Error: ------------------------------------------------------------
2023-05-18 11:51:39.220116 WARNING Error: Traceback (most recent call last):
File "/usr/lib/python3.11/configparser.py", line 805, in get
value = d[option]
~^^^^^^^^
File "/usr/lib/python3.11/collections/init.py", line 1004, in getitem
return self.missing(key) # support subclasses that define missing
^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/collections/init.py", line 996, in missing
raise KeyError(key)
KeyError: 'hoy_compensate_watt_factor'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.11/site-packages/appdaemon/app_management.py", line 1000, in check_app_updates
await utils.run_in_executor(self, self.read_app, mod["name"], mod["reload"])
File "/usr/lib/python3.11/site-packages/appdaemon/utils.py", line 304, in run_in_executor
response = future.result()
^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/concurrent/futures/thread.py", line 58, in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/site-packages/appdaemon/app_management.py", line 783, in read_app
self.modules[module_name] = importlib.import_module(module_name)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/importlib/init.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "", line 1206, in _gcd_import
File "", line 1178, in _find_and_load
File "", line 1149, in _find_and_load_unlocked
File "", line 690, in _load_unlocked
File "", line 940, in exec_module
File "", line 241, in call_with_frames_removed
File "/config/appdaemon/apps/HoymilesZeroExport.py", line 781, in
HOY_COMPENSATE_WATT_FACTOR.append(config.getfloat('INVERTER
' + str(i + 1), 'HOY_COMPENSATE_WATT_FACTOR'))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/configparser.py", line 839, in getfloat

DEr FEhler scheint also in Line 805 aufzutreten und setzt sich folglich fort?

ab Line 804:
while True:
try:
PreviousLimitSetpoint = newLimitSetpoint
if GetHoymilesAvailable() and GetCheckBattery():
if LOG_TEMPERATURE:
GetHoymilesTemperature()
for x in range(int(LOOP_INTERVAL_IN_SECONDS / POLL_INTERVAL_IN_SECONDS)):
powermeterWatts = GetPowermeterWatts()
if powermeterWatts > POWERMETER_MAX_POINT:
if JUMP_TO_MAX_LIMIT_ON_GRID_USAGE:
newLimitSetpoint = GetMaxWattFromAllInverters()
else:

Smartmeter mit OBIS-Code

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

Feature Request: Changelog, Log als Datei ausgeben

Hi,

ich mach der Übersichtlichkeit halber mal ein neues Issue auf. Wäre es möglich eine Changelog Datei anzulegen? Ich speichere für den Fehlerfall immer die alten Versionen in ein Verzeichnis, weiß aber gar nicht welche Änderungen es da immer gab.

Des Weiteren:
Gibt es eine Möglichkeit eine Logdatei zu schreiben beim Starten des Scripts? Wenn das auf Linux als Dienst läuft geht das ja ohne Weiteres, aber testweise starte ich neue Versionen einfach so über die Kommandozeile, da wird dann nichts geloggt. Reicht ja, wenn einfach ein Textfile erzeugt wird pro Tag.

Homeassistant

Kann man das irgendwie in Homeassistant integrieren? Sorry ich hab da nicht so die Erfahrung

Unnötiges Setzen der maximalen Leistung bei zu wenig Erzeugung

Hi,

hatte da noch einen Einfall, keine Ahnung ob das eine gute Idee oder Quatsch ist.

Wenn zu wenig erzeugt wird, wird immer wieder aufs neue das Limit 100% an alle Inverter geschickt. Das ist gerade morgens, kurz nach Sonnenaufgang und Abends unnötig. Bei mir ist zB die Grundlast 120W, darunter komme ich nie. Wenn jetzt nicht mehr als 200W (Einspeisewert + Toleranz) erzeugt werden, wird immer aufs neue das Limit auf 100% gesetzt. Allein heute morgen fing die PV Anlage an zu produzieren, das Limit wurde aber erstmalig um kurz vor 9 reduziert.

Jetzt hattest du in einem anderen Issue mal erwähnt, das ab und zu das Limit nicht angenommen wird. Könnte man, wenn der Fall eintritt, nicht einen Counter setzen, das nur 10x hintereinander 100% Limit gesetzt werden? Und bei jedem Durchlauf prüft das Script was das Powermeter meldet, und ob das Limit schon bei 100% ist, und ob der Counter schon bei 10 steht. Dann weiter bis zum nächsten Durchlauf ohne neues Setzen des Limits.

Falls du keinen Handlungsbedarf siehst mach hier ruhig wieder zu, vielleicht hast du ja auch eine bessere Idee.

Toleranzen

Hallo

ich hätte mal eine Frage zu den Toleranzen.
Da im Moment das Wetter/Wolken dauernd hin und her ziehen ist das ganze auf dem Powermeter
ziemlich unruhig und ich wollte das ganze etwas softer einstellen, dass nicht die ganze Zeit hin und her geregelt wird.

Wenn ich die Werte unter Control verändere, z.B.
POWERMETER_TARGET_POINT = -100
POWERMETER_TOLERANCE = 50
POWERMETER_MAX_POINT = 100

Dann müsste das ganze doch etwas träger werden oder muss man da noch etwas anderes beachten?

Batteriebetrieb

Hallo,

Ich habe das Script jetzt seit gestern mit mit ahoydtu und einem HM-1500 auf 48V Batterie am laufen.
Die Funktion ist wirklich sehr ordentlich.
Alles andere, das Ich vorher probiert habe war nicht so gut, oder hat überhaupt nicht funktioniert.
Als absoluter Neuling auf diesem Gebiet, eine Frage an die Profis, wäre es möglich den vom Inverter für die Strings gemessen Spannungswert für ein Änderung des Limit bzw. die Abschaltung des Inverters zu verwenden?
Zum Beispiel möchte Ich ab 48V am String das Powerlimit auf 300W setzen und dann vielleicht ab 47V den Inverter ausschalten.
Könnte man so etwas integrieren?
Und wenn ja, wie in etwa müsste Ich da vorgehen?

mfg Dirk

Originally posted by @feeti1 in #28 (comment)
edit reserve85: ich lagere das mal aus.

Error beim ausführen vom Script

Ich hätte eine Frage zu Script bei mir kommt immer der Fehler
ERROR unsupported operand type(s) for /: 'int' and 'list' im Log

Wüsste aber nicht, wo der Fehler liegt.

Im Log kommt immer
Mar 23 08:38:22 zeroexport python3[333]: 2023-03-23 08:38:22 INFO Log write to file: False
Mar 23 08:38:22 zeroexport python3[333]: 2023-03-23 08:38:22 INFO Author: reserve85 / Script Version: 1.9
Mar 23 08:38:22 zeroexport python3[333]: 2023-03-23 08:38:22 INFO read config file: /root/HoymilesZeroExport/HoymilesZeroExport_Config.ini
Mar 23 08:38:22 zeroexport python3[333]: 2023-03-23 08:38:22 INFO Config file V 1.9
Mar 23 08:38:22 zeroexport python3[333]: 2023-03-23 08:38:22 INFO Inverter 0 reachable: True
Mar 23 08:38:22 zeroexport python3[333]: 2023-03-23 08:38:22 INFO setting new limit to 1500 Watt
Mar 23 08:38:22 zeroexport python3[333]: 2023-03-23 08:38:22 INFO Exception at SetLimit
Mar 23 08:38:22 zeroexport python3[333]: 2023-03-23 08:38:22 ERROR unsupported operand type(s) for /: 'int' and 'list'
Mar 23 08:38:42 zeroexport python3[333]: 2023-03-23 08:38:42 INFO Inverter 0 reachable: True
Mar 23 08:38:42 zeroexport python3[333]: 2023-03-23 08:38:42 INFO powermeter: 604 Watt
Mar 23 08:38:42 zeroexport python3[333]: 2023-03-23 08:38:42 INFO setting new limit to 1500 Watt
Mar 23 08:38:42 zeroexport python3[333]: 2023-03-23 08:38:42 INFO Exception at SetLimit
Mar 23 08:38:42 zeroexport python3[333]: 2023-03-23 08:38:42 ERROR unsupported operand type(s) for /: 'int' and 'list'
Mar 23 08:39:03 zeroexport python3[333]: 2023-03-23 08:39:03 INFO Inverter 0 reachable: True
Mar 23 08:39:03 zeroexport python3[333]: 2023-03-23 08:39:03 INFO powermeter: 578 Watt
Mar 23 08:39:03 zeroexport python3[333]: 2023-03-23 08:39:03 INFO setting new limit to 1500 Watt
Mar 23 08:39:03 zeroexport python3[333]: 2023-03-23 08:39:03 INFO Exception at SetLimit
Mar 23 08:39:03 zeroexport python3[333]: 2023-03-23 08:39:03 ERROR unsupported operand type(s) for /: 'int' and 'list'

Ich habe auch schon an der Config geschaut egal ob ich mit Shelly 3EM oder Hichi IR (Tasmota) einstelle immer das gleiche
WR ist ein HM-1500 mit OpenDTU mit Firmware d508b41 das Script wird auf einem Proxmox LXC Container mit Unbuntu 22.10 ausgeführt.

GetPowermeterWatts konfigurierbar

Gutes Script, danke!

Watts = int(ParsedData["StatusSNS"]["SML"]["curr_w"])
extrahiert bei meinem Stromzähler leider nichts, da das Tasmota-Script anders aufgebaut ist und diesen JSON liefert:

{"StatusSNS":{"Time":"2023-02-28T11:41:19","DWS74":{"Total":1234.567,"TotalOut":1.234,"Power":2,"Server_id":"xxx"}}}

Wie wäre es hier mit zwei weiteren Konfigurationsmöglichkeiten für die Werte "SML" und "curr_w"?

Shelly EM einbinden

Hallo Tobias, vorerst mal Danke für deine Arbeit und das dies jedermann nutzen darf!

Bin selbst Neuling auf dem Gebiet, und deshalb leider nicht Sattelfest.
Ich habe dein Script in Verbindung mit einem HM-1200, einer OpenDTU und einem ShellyEm auf einem Proxmox am laufen.
Die Kommunikation mit der OpenDTU dürfte funktionieren, doch ich vermute, es scheitert am Shelly.
Bekomme diese Fehlermeldung:
Jun 01 21:51:18 Nulleinspeisung python3[443]: 2023-06-01 21:51:18 INFO OpenDTU: Inverter "HM-1200" reachable: True
Jun 01 21:51:18 Nulleinspeisung python3[443]: 2023-06-01 21:51:18 ERROR Exception at GetPowermeterWatts
Jun 01 21:51:18 Nulleinspeisung python3[443]: 2023-06-01 21:51:18 ERROR 'total_power'
Jun 01 21:51:18 Nulleinspeisung python3[443]: 2023-06-01 21:51:18 ERROR 'total_power'
und das wiederholt sich ständig.
Dabei wird der HM auf 5% (60 Watt) runtergeregelt.

Wollte den ShellyEM über die .ini irgendwie einbinden, doch fehlt mir hier leider das Wissen.
Oder funktioniert der EM generell für dieses Vorhaben nicht?

Hättest du bitte eine Idee bzw. Lösung?!

Vielen Dank!

Homeassistent als Powermeter - Fehler

Hallo! Zuerst meine Hardware-config (zum Verständnis: Ich nutze OpenDTU und als Messgeräte zwei Shelly 3EM. Einer in einer Unterverteilung, wo auch der WR angeschlossen ist. Der zweite Shelly im Sicherungskasten, allerdings hinter dem Abzweig ( er kann also keine negativen Werte!).
Aus dem GRunde rechntet HA in der Entität "sensor.power_ges" alles zusammen und gibt bei Einspeisung größer Bezug auch negative Werte aus (wie der Zähler).
Darum auch HA als Powermeter in der config.ini.
Doch leider gibt das Skript Fehlermeldungen, so dass es keine Regelung schafft.

Auszug aus dem Log (Fehlermeldungen):

2023-05-14 20:28:07 ERROR Exception at GetPowermeterWatts
2023-05-14 20:28:07 ERROR invalid literal for int() with base 10: '1428.35'
2023-05-14 20:28:07 ERROR invalid literal for int() with base 10: '1428.35'
2023-05-14 20:28:27 INFO ---Start Zero Export---
2023-05-14 20:28:28 INFO OpenDTU: Inverter "HM1500" reachable: True
2023-05-14 20:28:28 ERROR Exception at GetPowermeterWatts
2023-05-14 20:28:28 ERROR invalid literal for int() with base 10: '1121.91'
2023-05-14 20:28:28 ERROR invalid literal for int() with base 10: '1121.91'

Man sieht also, DTU ist erreichbar, Er bekommt auch die bezogenen Watt (1428 Watt), aber gibt Fehlermeldungen und rechnet kein neues Limit aus.

Auszug meiner config.ini:

[HOMEASSISTANT]

--- defines for HOME ASSISTANT (you need to create a Long-Lived Access Token in your profile) ---

HA_IP = 192.168.50.223
HA_PORT = 8123
HA_ACCESSTOKEN = eyJhbGciOiJIUzI1NiIsInR5cxxxxxxxxxx.eyJpc3MiOiI3MTFiNDgyMGFmN2E0NTZjYjhhYzg4YzQ3NWRkYmVlYyIsImlhdCI6MTY4NDA4NjMxMxxxxxxxTk5NDQ2MzEzfxxxxxDt_V99CsplPe6rb3jDjEhloEJ5rgXM7SUA
HA_CURRENT_POWER_ENTITY = sensor.power_ges

if your powermeter does NOT output the current power: you need to calculate it -> Power(W) = OBIS(1.7.0) - OBIS(2.7.0)

HA_POWER_CALCULATE = FALSE

Power-MQTT Input label (positive active instantaneous power, e.g. OBIS Code 1.7.0)

HA_POWER_INPUT_ALIAS = sensor.gesamt_strom

Power-MQTT output label (negative active instantaneous power, e.g. OBIS Code 2.7.0)

HA_POWER_OUTPUT_ALIAS = sensor.gesamt_strom

Jemand ne Idee?

Automatischer Scriptinterval durch Zeitmessung

Hi,

die nächste Idee:
Wäre es möglich beim Scriptstart den Aktualisierungsintervall des Stromzählers zu messen und als Abfrageintervall festzulegen? Dann müsste der Stromzähler nicht so oft abgefragt werden, sondern immer genau dann, wenn auch ein neuer Wert zu erwarten ist.

So stelle ich mir das vor:
Das Script startet, und fragt den Zähler sekündlich ab. Bei der ersten Änderung des Wertes beginnt die Zählung, und bei der nächsten Änderung steht ein Wert fest (zB. 10 Sekunden). Diesen Wert merkt sich das Script und fragt immer nur alle 10 Sekunden den Zähler ab.

Allerdings werden die Sekunden beim Limitsetzen (SET_LIMIT_DELAY_IN_SECONDS usw.) dazuaddiert, dass bringt das Ganze dann wieder durcheinander. Vielleicht könnte man auch mit der Uhrzeit arbeiten, wann ein neuer Wert zur Verfügung steht.

Exception at GetPowermeterWatts - Ich finde den Fehler nicht

Nach ersten Versuchen als Teilzeit iOBroker und Github Nutzer konnte ich den HoymilesZeroExport zum laufen bringen. Die Verbindung zu Ahoy scheint OK zu sein. Es bleibt jedoch ein Error übrig. Ich finds einfach nicht raus. Der Fehler kommt im Log permanent.

Mar 29 21:56:51 phoscon systemd[1]: Stopping HoymilesZeroExport Service...
Mar 29 21:56:51 phoscon systemd[1]: HoymilesZeroExport.service: Main process exited, code=killed, status=15/TERM
Mar 29 21:56:51 phoscon systemd[1]: HoymilesZeroExport.service: Succeeded.
Mar 29 21:56:51 phoscon systemd[1]: Stopped HoymilesZeroExport Service.
Mar 29 21:56:51 phoscon systemd[1]: Started HoymilesZeroExport Service.
Mar 29 21:56:51 phoscon python3[21579]: 2023-03-29 21:56:51 INFO Log write to file: False
Mar 29 21:56:51 phoscon python3[21579]: 2023-03-29 21:56:51 INFO Author: reserve85 / Script Version: 1.14
Mar 29 21:56:51 phoscon python3[21579]: 2023-03-29 21:56:51 INFO read config file: /home/pi/HoymilesZeroExport/HoymilesZeroExport_Config.ini
Mar 29 21:56:51 phoscon python3[21579]: 2023-03-29 21:56:51 INFO Config file V 1.14
Mar 29 21:56:51 phoscon python3[21579]: 2023-03-29 21:56:51 INFO Inverter 0 reachable: True
Mar 29 21:56:51 phoscon python3[21579]: 2023-03-29 21:56:51 INFO setting new limit to 1500 Watt
Mar 29 21:56:51 phoscon python3[21579]: 2023-03-29 21:56:51 INFO Inverter 0: setting new limit from 0 Watt to 1500 Watt
Mar 29 21:57:02 phoscon python3[21579]: 2023-03-29 21:57:02 INFO Inverter 0 reachable: True
Mar 29 21:57:02 phoscon python3[21579]: 2023-03-29 21:57:02 ERROR Exception at GetPowermeterWatts
Mar 29 21:57:02 phoscon python3[21579]: 2023-03-29 21:57:02 ERROR '1.7.0'
Mar 29 21:57:22 phoscon python3[21579]: 2023-03-29 21:57:22 INFO Inverter 0 reachable: True
Mar 29 21:57:22 phoscon python3[21579]: 2023-03-29 21:57:22 ERROR Exception at GetPowermeterWatts
Mar 29 21:57:22 phoscon python3[21579]: 2023-03-29 21:57:22 ERROR '1.7.0'
Mar 29 21:57:42 phoscon python3[21579]: 2023-03-29 21:57:42 INFO Inverter 0 reachable: True
Mar 29 21:57:43 phoscon python3[21579]: 2023-03-29 21:57:43 ERROR Exception at GetPowermeterWatts

Vielleicht gibts da Abhilfe. Ich kann leider auch noch nicht sagen ob der ZeroExport funktioniert. Habe ich erst heute nach Sonnenuntergang eingerichtet.

Danke schon mal für die Hilfe

Erhöhung Limit wenn der WR nicht mal das aktuelle Limit produziert

Hallo @reserve85 ,
Habe gestern dein Skript entdeckt und finde es bisher echt super da meine selbstgebastelte Steuerung über ioBroker nur mäßig gut lief.
Dafür erstmal vielen Dank.

Nun zu einer Frage:
Aktuell ist es ja so das das Limit erhöht wird wenn vom 'powermeter' außerhalb des Target Points +/- Toleranz ein Wert kommt.
Könnte man das noch um eine Prüfung ergänzen ob der WR überhaupt so viel Produziert wie das Limit ist?

Aktuell wird ja einfach erhöht und wenn dann wieder genug vom WR kommt, reduziert um den Target Point zu erreichen.
Aber das Limit zu erhöhen (zb. von 100W auf 300W) bringt ja nichts wenn vom WR aktuell durch Wolken nur (zb. 80W) kommen.

Habe noch nicht alle closde issues durch, also sry falls die Frage schon kam.

Powerlimit bei kleinstem Netzbezug immer 100%

Hi, haben wir schonmal kurz drüber gesprochen: Wenn der Netzbezug kurzzeitig wieder steigt, wird das Limit immer auf 100% geregelt. Könnte man das Limit nicht um Netzbezug + powermeterTolerance erhöhen? Ich merke, gerade wenn der 3D Drucker läuft, das Limit ständig auf Max erhöht wird. Die Schrittmotoren ziehen sehr viel Energie beim Anfahren. Manchmal ist dann der Netzbezug nur bei 50 Watt, aber Limit geht dann direkt wieder auf 100%. Es ist erst halb drei, habe heute schon über 1 kWh eingespeist.

Kannst du mir einen Tipp geben welche Änderungen dafür nötig sind?

Fernstart

wäre es möglich das Skript, z.b. durch Homeassistant ein oder ausschalten zu lassen? beim Ausschalten sollte es vorher die WR auf 100% stellen

Inverter Abfragelogik funktioniert nicht mehr mit OpenDTU

Hi,
hab heute morgen ein update auf den aktuellen Stand gemacht und festgestellt, dass durch "if USE_AHOY:" in Zeile 146 die Logik mit OpenDTU nicht mehr funktioniert und die Inverter nicht mehr abgefragt werden - hab daher die Zeile bei mir entfernt und es funktioniert wieder

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.