Über Web, Tech, Games, Art,
Code & Design

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.


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert