4. Juni 2024
Stromverbrauch und Balkonkraftwerkertrag tracken mit dem Hichi IR Lesekopf und einem Python-Skript auf einem Raspberry Pi Zero
In diesem Artikel (https://www.fbnfrtg.de/stromverbrauch-tracken-mit-dem-hichi-ir-lesekopf-php-und-einem-raspberry-pi-zero/) hatte ich schon einmal beschrieben, wie man mit einem Raspberry Pi Zero die Daten eines Balkonkraftwerks loggen kann. Damals hatte ich dafür ein PHP-Skript geschrieben, das auf dem Pi im Browser aufgerufen wurde.
Da diese Konstellation etwas instabil war und es den Browser Midori inzwischen anscheinden auch nicht mehr für den Pi Zero gibt, habe ich ein Python-Skript geschrieben, das per Cronjob regelmäßig ausgeführt wird.
import requests
def get_data(url):
try:
response = requests.get(url)
response.raise_for_status()
return response.json(), ""
except requests.RequestException as e:
return None, str(e)
def post_data(url, data):
try:
response = requests.post(url, data=data)
response.raise_for_status()
return "Data posted successfully."
except requests.RequestException as e:
return str(e)
# NETZ
netz_url = 'http://192.168.0.XX/cm?cmnd=STATUS+8'
netz_data, netz_error = get_data(netz_url)
# SOLAR
solar_url = 'http://192.168.0.XX:8050/getOutputData'
solar_data, solar_error = get_data(solar_url)
post_url = "https://www.fbnfrtg.de/.../newitem.php"
post_data_dict = {
"secretkey": "jfs83XXXXXXXXXhdfs",
"p": "",
"e": "",
"te": ""
}
if netz_data:
post_data_dict["Power_cur"] = netz_data['StatusSNS']['MT681']['Power_cur']
post_data_dict["Total_in"] = netz_data['StatusSNS']['MT681']['Total_in']
post_data_dict["Total_out"] = netz_data['StatusSNS']['MT681']['Total_out']
if solar_data:
post_data_dict["p"] = solar_data['data']['p1'] + solar_data['data']['p2']
post_data_dict["e"] = solar_data['data']['e1'] + solar_data['data']['e2']
post_data_dict["te"] = solar_data['data']['te1'] + solar_data['data']['te2']
result = post_data(post_url, post_data_dict)
print(result)
if not netz_data or not solar_data:
print("error:", netz_error, solar_error if solar_error else "")
Code-Sprache: Python (python)
Und tatsächlich läuft dieses Skript deutlich zuverlässiger.
Nächster Artikel