@DeaD_EyE
habe es jetzt geschafft, mit Mosquitto mqtt Daten auszulesen.
pi@solaranzeige:~ $ mosquitto_sub -v -h localhost -p 1883 -t 'shellies/shellyem3-8CAAB561948E/emeter/0/returned_energy'
shellies/shellyem3-8CAAB561948E/emeter/0/returned_energy 0
/emeter/0/ ist phase 1, /emeter/1 ist pase 2 und /emeter/2 ist phase 3
Jetzt zeigt phase 1, 0 an, da nicht eingespeisst wir (Wolken)
Wie sieht jetzt ein Python script aus, dass diese 3 Werte ausliest, phase 1-3 zusammen zaehlt fuer Einspeisung gesamt?
jjk
Danke fuer Dein script, Du hast recht, bin kein Experte in Python, kann eigentlich nur einfache Sachen.
Dein Script funktioniert bei mir eigentlich, nur kenne ich die korrekten Namen der Einspeisung nicht aus der influxdb.
Da wo bei Dir PV-Leistung steht muss bei mir der Name von returned _energy stehen? Ist der Name in der influxdb der selbe wie unter mqtt angezeigt?
Dann muesste in Deinem script, beim meinem Anwendungsfall ja auch noch die 3 phasenwerte zusammen gezaehlet werden und weiter verarbeitet werden.
Das mit dem Durchschnitt und den gpios brauche ich nicht.
Haenge mal das abgeaenderte script an soll wie ich es haben moechte. (bei den ????? komme icht nicht weiter
Danke und Gruss
gwaag
Edit:
gerade gesehen das in der influxdb nur diese Werte angezeigt werden
name: AC
time Gesamtleistung Leistung_EinspeisungGesamt_R Leistung_EinspeisungGesamt_S Leistung_EinspeisungGesamt_T Leistung_VerbrauchGesamt_R Leistung_VerbrauchGesamt_S Leistung_VerbrauchGesamt_T PowerFactor_R PowerFactor_S PowerFactor_T Spannung_R Spannung_S Spannung_T Strom_R Strom_S Strom_T Wirkleistung_R Wirkleistung_S Wirkleistung_T
Wie finde ich jetzt returned_energy?
#!/usr/bin/env python3
from influxdb import InfluxDBClien
from socket import socket, AF_INET, SOCK_DGRAM
import time
def send_command(cmd, ip, port):
with socket(AF_INET, SOCK_DGRAM) as sock:
addr = (ip, port)
sock.sendto(cmd, addr)
ZONE1_ON= b"\x38\x00\x55"
ZONE1_FULL = b"\xB8\x00\x55"
ZONE1_OFF = b"\x3B\x00\x55"
IP = "192.168.0.20"
PORT = 8899
client = InfluxDBClient(host='localhost', port=8086)
client.switch_database('zaehler')
# Einspeisung ermitteln
results=client.query('SELECT "returned_energy????" FROM "returned_energy?????" GROUP BY * ORDER BY DESC LIMIT 10')
points = results.get_points ?????
point = 0 ??????
add Phase1 + Phase2 + Phase3????
Einspeisung = ????
# Je nach Einspeisung schalten
if Einspeisung > 1000:
send_command(ZONE1_ON, IP,PORT)
elif Einspeisung < 500:
send_command(ZONE1_OFF, IP,PORT)
Display More