Lesenswert?
Ok, nach reiflicher Überlegung bin ich zu folgendem Ergebnis gekommen:
a) Was will man mit dem Shelly 3EM mit PV Anlage überhaupt messen? Jene Energiewerte die das EVU zur Berechnung des Preises heranzieht. Das ist die vom EVU gelieferte Energie sowie die vom Kunden eingespeiste Energie über eine bestimmte Zeitspanne.
b) Wie wurde das traditionell gemessen? Mit den alten Ferraris Zählern. Für diese Messung wurden zwei rücklaufgehemmte ( Rücklauf wurde mechanisch blockiert ) Zähler benutzt. Das Rad dreht sich nur dann wenn die Summenleistung in eine Richtung größer Null ist. Ein Zähler wurde für den Bezug und einer für die Lieferung benutzt.
c) Das gilt es nun durch die Messung der Leistung auf den einzelnen Phasen abzubilden und kann nur erreicht werden indem man die Funktion der alten Ferraris Zähler quasi emuliert, d.h. Bezugsenergie wird nur summiert wenn die Gesamtleistung über alle Phasen größer Null ist. Wenn die Gesamtleistung kleiner Null ist wird Einspeiseenergie summiert. Beide Werte kann man nicht durch die Bezugs- und Einspeiseenergien auf den einzelnen Phasen ermitteln weil sich die bereits aufsummierten Energien später nicht wieder richtig trennen lassen.
d) für den Shelly 3EM habe ich nun ein kleines Bash Skript geschrieben das per HTTP die Leistungen vom Shelly holt, diese Berechnungen durchführt und das Ergebnis an einen MQTT Broker schickt. Läuft problemlos auf einem Raspberry Pi und ist, laut meiner Beobachtung sehr genau und kann an unterschiedlichste Bedürfnisse angepasst werden.
Schade das diese Funktionalität nicht schon im Shelly 3EM eingebaut ist.
Vielleicht hilft es ja dem einen oder anderen.
Frohe Weihnachten.
#!/bin/sh
shelly_ip=aa.bb.cc.dd
shelly_passwd=user:password
broker=127.0.0.1
tp=0
tl=0
et_from_grid=`timeout 3 mosquitto_sub -C 1 -h $broker -t
shellyem3/et_from_grid`
et_to_grid=`timeout 3 mosquitto_sub -C 1 -h $broker -t
shellyem3/et_to_grid`
et_from_grid_kwh=`timeout 3 mosquitto_sub -C 1 -h $broker -t
shellyem3/et_from_grid_kwh`
et_to_grid_kwh=`timeout 3 mosquitto_sub -C 1 -h $broker -t
shellyem3/et_to_grid_kwh`
if [ "$et_from_grid" = "" ]; then
et_from_grid=0.0
et_from_grid_kwh=0.0
fi
if [ "$et_to_grid" = "" ]; then
et_to_grid=0.0
et_to_grid_kwh=0.0
fi
echo $et_from_grid $et_from_grid_kwh $et_to_grid $et_to_grid_kwh
while true ; do
s=`wget -q -O - http://$shelly_passwd@$shelly_ip/status`
t=`echo "$s" | jq .unixtime`
if [ $t -eq $tp ]; then continue ; fi
d=`expr $t - $tp`
dp=`expr $t - $tl`
if [ $tp -ne 0 ]; then
pt=`echo "$s" | jq ".total_power"`
pti=`echo $pt | awk '{ print int($1) }'`
if [ $pti -gt 0 ]; then
et_from_grid=`echo $et_from_grid $pt $d | awk '{ printf
"%.2f", $1 + ($2 * $3) }'`
et_from_grid_kwh=`echo $et_from_grid | awk '{ printf
"%.2f", $1 / 3600000 }'`
else
et_to_grid=`echo $et_to_grid $pt $d | awk '{ printf "%.2f",
$1 + ($2 * $3) }'`
et_to_grid_kwh=`echo $et_to_grid | awk '{ printf "%.2f",
$1 / 3600000 }'`
fi
echo $dp $d $t $pt $et_from_grid $et_from_grid_kwh $et_to_grid
$et_to_grid_kwh
fi
if [ $dp -ge 30 ]; then
mosquitto_pub -r -h $broker -t shellyem3/et_from_grid -m
$et_from_grid
mosquitto_pub -r -h $broker -t shellyem3/et_to_grid -m
$et_to_grid
mosquitto_pub -r -h $broker -t shellyem3/et_from_grid_kwh -m
$et_from_grid_kwh
mosquitto_pub -r -h $broker -t shellyem3/et_to_grid_kwh -m
$et_to_grid_kwh
tl=$t
fi
tp=$t
sleep 0.5
done
Alles anzeigen