Stromzähler S0 → ESP8266 mit ESPEasy → MQTT → FHEM

Begonnen von pink99panther, 30 November 2016, 23:33:50

Vorheriges Thema - Nächstes Thema

pink99panther

Hallo insane84

für den Gaszähler hab ich das so:
Kellersensor:time:.* {
my $GasUmlaufzeit = ReadingsVal("Kellersensor","time","0") / 1000;
my $count = ReadingsVal("Kellersensor","count","0");
my $GasProStd=36/$GasUmlaufzeit;
my $GasProStdRounded = 0;

if($count > 0){
$GasProStdRounded = int(100 * $GasProStd + 0.5) / 100;
}

my $GasProTag = ReadingsVal("Kellersensor","total","0") / 100;
my $Summe = ReadingsVal("Gas","zaehler_vortag","0") + (ReadingsVal("Kellersensor","total","0") / 100);
fhem("set Gas zaehler_jetzt $Summe");;
fhem("set Gas GasverbrauchStd $GasProStdRounded");;
fhem("set Gas GasverbrauchTag $GasProTag");;
}


Rebootfrage wurde ja schon kompetent beantwortet.

Gruß
p99p

accloginsell

Hat jemand einen Link zu einem brauchbaren ferraris zähler s0?

Danke euch!


Papaloewe

Die Seite kannte ich auch noch nicht  :)

Vielen Dank.

pink99panther


p5k

Vielen Dank für die ganzen Infos, damit war das Einrichten ein Kinderspiel und eigentlich läuft das auch richtig gut, bis auf eine kleine Sache.

Ich habe ein Wemos D1 mini an den Zähler angeschlossen , logge mit dblog und lass mir den Tagesbedarf mit delta-d anzeigen. Und dabei ist mir etwas aufgefallen, was so nicht stimmt. Ich habe die Vermutung, dass es an der Hardware liegt.

Die Werte die delta-d liefert, sind etwas niedriger als die tatsächlichen Verbrauchswerte (war bei mir zumindestens jetzt meistens so). Daran ist mir das überhaupt erst aufgefallen. Ich glaube, es liegt an dem vorletztem Wert, der für diesen Tag geloggt wird. Es ist immer der vorletzte Wert des Tages und es ist immer der erste Wert nach dem Neustart des ESP.
2 Ausschnitte:
2017-01-23_00:00:35 9.118
2017-01-23_00:01:35 9.122
2017-01-23_00:02:35 9.126
.......
2017-01-23_23:57:10 14.65
2017-01-23_23:58:10 14.651
2017-01-23_23:59:35 20.191
2017-01-23_23:59:35 14.652
#StromWohnung:zaehler_jetzt:::

und
2017-01-24_00:00:35 14.653
2017-01-24_00:01:35 14.654
2017-01-24_00:02:35 14.655
......
2017-01-24_23:58:08 19.88
2017-01-24_23:59:36 25.109
2017-01-24_23:59:36 19.882
#StromWohnung:zaehler_jetzt:::


Zwischen Anfang und Ende befinden sich ausschließlich aufsteigende Werte. Zuerst habe ich gedacht, dass da irgendwas falsch gerechnet wird, aber ich bin auf kein vernünftiges Ergebnis bekommen, jetzt frage ich mich gerade ob der Neustart des ESP dazu führt, dass er irgendwelche komischen Werte liefert.

Für Hilfe und Ideen wäre ich dankbar.
vg Patrick


pink99panther

Hallo p5k,
Was mir bekannt ist ist, dass die Pulse vom letzten Publish
bis nach Reboot (max 60 sec + Rebootzeit) verloren gehen.
Hab auch schon versucht den Rebootbefehl über MQTT zu schicken.
Das ist mir leider nicht gelungen, obwohl es laut http://www.letscontrolit.com/wiki/index.php/ESPEasy_Command_Reference
gehen sollte.
Vielleicht bin ich auch einfach nur zu....... :)
Wäre Dankbar für eine Info dazu.
Damit würden sich die velorenen Pulse minimiren lassen.

Gruß
p99p

accloginsell

#22
Hallo Leute,

habe nun alle installiert funktioniert rein Technisch auch gut aber die Ergebnisse machen mich stutzig

Wenn ich mit der Hand zähle bzw mit dem Timer stoppe und es auf dieser WEBSITE  http://www.energie-bewusstsein.de/index.php?page=thema_berechnungen&p2=leistung_stromzaehler&er=1
einfüge komme ich immer auf einen anderen Wert. --> Könntest du uns bitte erklären was ich mit dem Wert TIME berechnen kann. Dieser Wert ist für mich unschlüssig.

Hast jemand schon mit der "Hand" nachgerechnet?

Auch würde mich freuen wenn der "Zählerstand" nicht jede Nacht resettet wird. Ginge das evtl irgendwie?

Viele Grüße
NIco

EDIT:

Wenn man (ich) es richtig machen würde würde es auch klappen.. nicht einfach Plump alle 1000 auf 600 änder ( Unser Zähler hat 600 Impulse pro KWH)

Dann sieht es so aus und funktioniert auch:

define StromverbrNoti notify PulsStrom {\
my $StromUmlaufzeit = ReadingsVal("PulsStrom","Time","0") / 1000;;\
my $StromProStd=3.6/$StromUmlaufzeit;;\
my $StromProStdRounded=int(1000 * $StromProStd + 0.5) / 600;;\
my $StromProTag = ReadingsVal("PulsStrom","Total","0") / 600;;\
my $Summe = ReadingsVal("Strom","zaehler_vortag","0") + (ReadingsVal("PulsStrom","Total","0") / 600);;\
fhem("set Strom zaehler_jetzt $Summe");;;;\
fhem("set Strom StromverbrauchStd $StromProStdRounded");;;;\
fhem("set Strom StromverbrauchTag $StromProTag");;;;\
}


Habe noch das delay beim ESP auf 5 geändert. Jetzt hat man superschnelle änderungen

pink99panther

Zitat von: accloginsell am 26 Januar 2017, 07:18:45
Könntest du uns bitte erklären was ich mit dem Wert TIME berechnen kann.
Übertragen auf das Auto ist das die Geschwindigkeit. Wenn ich weiss in welcher Zeit ich einen Kilometer zurückgelegt habe
kann ich berechnen wieviel Kilometer ich in einer Stunde schaffe.

Zitat von: accloginsell am 26 Januar 2017, 07:18:45
Auch würde mich freuen wenn der "Zählerstand" nicht jede Nacht resettet wird. Ginge das evtl irgendwie?
Ich halte den Zählerstand lieber in FHEM und benutze Total aus dem ESP nur für den Tagesverbrauch!

accloginsell

Danke dir für die Antwort.

Time ist der Abstand zwischen den S0 angeschlägen

Wie hältst du deinen Zähler Stand in FHEM fest? Sobald ich den ESP Neustarte ist dieser auch bei 0?

Danke

p5k

Hallo zusammen,

der Zählerstand wird jeden Tag um 0 Uhr nach fhem übertragen. Bei mir hat das allerdings dazu geführt, dass ich die delta-d Funktion nicht mehr benutzen konnte, ohne das ich die Datenbankeinträge manuell bearbeitet habe.

Ich habe das jetzt folgendermaßen angepasst:
define PulsStrom MQTT_DEVICE
attr PulsStrom IODev MyBroker
attr PulsStrom stateFormat transmission-state
attr PulsStrom subscribeReading_Count /Stromcount/Watt/Count
attr PulsStrom subscribeReading_Time /Stromcount/Watt/Time
attr PulsStrom subscribeReading_Total /Stromcount/Watt/Total

define Strom dummy
attr Strom event-on-change-reading StromverbrauchStd,StromverbrauchTag,zaehler_jetzt
attr Strom readingList StromverbrauchStd StromverbrauchTag zaehler_vortag zaehler_jetzt
attr userReadings zaehler_jetzt:StromverbrauchTag.* monotonic {ReadingsVal($name,'StromverbrauchTag',0)}

define StromverbrNoti notify PulsStrom {
my $StromUmlaufzeit = ReadingsVal("PulsStrom","Time","0") / 1000;
my $StromProStd=3.6/$StromUmlaufzeit;
my $StromProStdRounded=int(1000 * $StromProStd + 0.5) / 1000;
my $StromProTag = ReadingsVal("PulsStrom","Total","0") / 1000;
fhem("set Strom StromverbrauchStd $StromProStdRounded");;
fhem("set Strom StromverbrauchTag $StromProTag");;
}

define FileLog_Stromverbrauch FileLog ./log/Stromverbrauch-%Y-%m.log Strom:StromverbrauchStd:.*|Strom:StromverbrauchTag:.*|Strom:zaehler_jetzt:.*

define Stromvervbauch readingsGroup Strom:zaehler_jetzt Strom:StromverbrauchStd
attr Stromvervbauch mapping {"zaehler_jetzt" => "Zählerstand", "StromverbrauchStd" => "Momentanverbrauch"}
attr Stromvervbauch nameStyle style="font-weight:bold"
attr Stromvervbauch notime 1
attr Stromvervbauch style style="font-size:20px"
attr Stromvervbauch valueFormat {zaehler_jetzt => "%.3f KW/h", StromverbrauchStd => "%.3f KW/h"}
attr Stromvervbauch valueStyle style="text-align:right"

define ESP_reboot at *00:00:00 {
system("/home/pi/reboot_ESP");;
}


durch das monotonic beim userReading wird der zaehler_jetzt immer relativ mit dem StromverbrauchTag hochgezählt. Das heißt, es ist jetzt egal ob der esp zwischendurch reseted wird, der Gesamtzählerstand geht nicht verloren, weil er unmittelbar mitgeloggt wird. Das Summieren kann man sich dann auch sparen, wodurch das at wirklich nur noch den Neustart des ESP auslöst (das benutze ich dafür um den Tageszähler zu resetten, könnte man aber auch weg lassen)

Das einzige was mich jetzt noch stört ist das ich durch das verwenden von monotonic viele Nachkommastellen bekomme, die wirken sich zwar nicht aus, aber sie sorgen halt auch nicht dafür, dass die Datenbankansicht übersichtlicher wird.

Vielleicht müsste man das Readings vor dem loggen auf 2 oder 3 Nachkommastellen begrenzen.

matzej

Hallo,

neu bei fhem, esp8266 - aber nicht bei Hausautomation und Linux.

Klappt alles, ausser:
...
define StromverbrNoti notify PulsStrom {
my $StromUmlaufzeit = ReadingsVal("PulsStrom","Time","0") / 1000;
my $StromProStd=3.6/$StromUmlaufzeit;
my $StromProStdRounded=int(1000 * $StromProStd + 0.5) / 1000;
my $StromProTag = ReadingsVal("PulsStrom","Total","0") / 1000;
fhem("set Strom StromverbrauchStd $StromProStdRounded");;
fhem("set Strom StromverbrauchTag $StromProTag");;
}
...


"Unknown command fhem("set, try help."

wo kommt das rein, sowohl telnet also auch Web Comandozeile fressen das nicht ...

thx Matze

pink99panther

#27
mach erst mal ein einfaches notify mit:

define StromverbrNoti notify a b

Dann mit kopieren und einfügen in  DEF
den Rest ab PulsStrom und damit "a b" ersetzen.

sash.sc

würde das ganz auch mit ESPEasy laufen ? denke schon , oder ???

Gruß
Sascha
Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

pink99panther

Zitat von: sash.sc am 04 Februar 2017, 17:52:15
würde das ganz auch mit ESPEasy laufen ? denke schon , oder ???

Gruß
Sascha

[spassmodus]Mit ESPEasy auf dem ESP8266 läuft es doch schon.....[/spassmodus]

Ich denke Du meinst das Modul von dev0.
Eigentlich sollte man das damit auch zum laufen bekommen.

Gruß
p99p