Compare commits

..

No commits in common. "a11c64f79b66174874a43c425cc38840b4435dd8" and "32702c1b0cbe171d1fd06348dbbea2a2ece8a606" have entirely different histories.

2 changed files with 5 additions and 8 deletions

View File

@ -1,9 +1,5 @@
# SolarControl # SolarControl
![Version badge](https://shields.privacynerd.de/badge/Latest-v1.1-green?style=flat-square)
![DockerHub pulls badge](https://shields.privacynerd.de/docker/pulls/bluefox42/solarcontrol?style=flat-square)
Enforce a zero export (or whatever consumption you like) policy with an OpenDTU-controlled inverter and energy data from MQTT. Enforce a zero export (or whatever consumption you like) policy with an OpenDTU-controlled inverter and energy data from MQTT.

View File

@ -8,6 +8,7 @@ from time import time, sleep
import json import json
from threading import Thread from threading import Thread
import requests import requests
import urllib3 # only for exception handling
import math import math
@ -48,7 +49,7 @@ dry_run = bool(int(os.getenv('DRY_RUN', 1)))
# set other important variables # set other important variables
power_limit_type = 1 # only set the limit temporary to avoid memory damage; see also: https://github.com/tbnobody/OpenDTU/discussions/742 power_limit_type = 1 # only set the limit temporary to avoid memory damage; see also: https://github.com/tbnobody/OpenDTU/discussions/742
version = "v1.1" # the version number version = "v1.0" # the version number
# some checks for the correctness of supplied data # some checks for the correctness of supplied data
if power_target_min < 0: power_target_min = 0 if power_target_min < 0: power_target_min = 0
@ -111,8 +112,8 @@ def threaded_solar_power_limit_setting():
# Get current openDTU current limit status # Get current openDTU current limit status
try: try:
status = requests.get(opendtu_address.strip("/") + "/api/limit/status", auth=(opendtu_user, opendtu_pwd)).json().copy() status = requests.get(opendtu_address.strip("/") + "/api/limit/status", auth=(opendtu_user, opendtu_pwd)).json().copy()
except BaseException as e: except (requests.exceptions.RequestException, urllib3.exceptions.HTTPError) as e:
print(f"{bcolors.FAIL}Some error occured while trying to reach out to OpenDTU to get latest data about the inverter limit status. Skipping for now.{bcolors.ENDC}\n==== START OF EXCEPTION ====\n{e}\n==== END OF EXCEPTION ====") print(f"{bcolors.ERROR}Some error occured while trying to reach out to OpenDTU to get latest data about the inverter limit status. Skipping for now.{bcolors.ENDC}\n==== START OF EXCEPTION ====\n{e}\n==== END OF EXCEPTION ====")
sleep(0.2) # wait some time (to avaid cpu overload on continuous unavailability of the service) sleep(0.2) # wait some time (to avaid cpu overload on continuous unavailability of the service)
continue # skip this loop pass continue # skip this loop pass
@ -161,7 +162,7 @@ def threaded_solar_power_limit_setting():
else: else:
print(f"{bcolors.WARNING}Now the new limit would be set via the API (but DRY_RUN is either not specified or True): {str(new_limit)}%") print(f"{bcolors.WARNING}Now the new limit would be set via the API (but DRY_RUN is either not specified or True): {str(new_limit)}%")
elif status[opendtu_inverter_sn]["max_power"] == 0: elif status[opendtu_inverter_sn]["max_power"] == 0:
print(f"{bcolors.FAIL}OpenDTU is reporting strange values for the inverter's maximum power output. Skipping it for now.{bcolors.ENDC}") print(f"{bcolors.ERROR}OpenDTU is reporting strange values for the inverter's maximum power output. Skipping it for now.{bcolors.ENDC}")
while (time() - last_time) < limit_update_interval: while (time() - last_time) < limit_update_interval: