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

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

Vorheriges Thema - Nächstes Thema

fl_Indigo

Zitat von: joewanne am 10 Juni 2019, 08:27:16
Die Fehler gingen über mehrere Stunden, so das sich das komplette System aufgehängt hat.
Wer kann mir hier weiterhelfen ?

Liebe Grüße
Jörg

hatt nach irgendeinem fhem update dieselben probleme wie du gerade. da war irgendwas mit readings die verschachtelt gesetzt wurden und das eigentlich nicht so vorgesehen ist
hab dann die config angepasst, weiß aber nimmer genau was.
ich häng hier einfach nochmal meine aktuelle config an, die läuft und ist mit manueller zählerstandsanpassung (absolut, d.h. einfach aktuell richtigen zählerstand eintragen)
achtung, ist direkt aus der cfg rauskopiert!


define ESPEasy_ESP8266_Server_S0_Watt ESPEasy 10.0.0.91 80 ESPBridge ESP8266_Server_S0_Watt
attr ESPEasy_ESP8266_Server_S0_Watt IODev ESPBridge
attr ESPEasy_ESP8266_Server_S0_Watt Interval 120
attr ESPEasy_ESP8266_Server_S0_Watt alias Serverrack S0
attr ESPEasy_ESP8266_Server_S0_Watt event-min-interval .*:300
attr ESPEasy_ESP8266_Server_S0_Watt event-on-change-reading .*
attr ESPEasy_ESP8266_Server_S0_Watt group ESPEasy Device
attr ESPEasy_ESP8266_Server_S0_Watt presenceCheck 1
attr ESPEasy_ESP8266_Server_S0_Watt readingSwitchText 1
attr ESPEasy_ESP8266_Server_S0_Watt room 15_ESPEasy
attr ESPEasy_ESP8266_Server_S0_Watt setState 3
attr ESPEasy_ESP8266_Server_S0_Watt stateFormat { sprintf("Zählerstand: %.2f kWh<br>Verbrauch heute/gestern/vorgestern: %.2f/%.2f/%.2f kWh<br>Stromverbrauch aktuell: %.2f W<br>Durchschnittsverbrauch Heute/Gestern/Vorgestern %.2f/%.2f/%.2f Wh<br>Gesamtverbrauch dieses Monat/letzter Monat: %.2f/%.2f kWh", (ReadingsVal("ESPEasy_ESP8266_Server_S0_Watt", "ZaehlerStand",0)), (ReadingsVal("ESPEasy_ESP8266_Server_S0_Watt", "StromverbrauchHeute",0)), (ReadingsVal("ESPEasy_ESP8266_Server_S0_Watt", "StromverbrauchGestern",0)), (ReadingsVal("ESPEasy_ESP8266_Server_S0_Watt", "StromverbrauchVorgestern",0)), (ReadingsVal("ESPEasy_ESP8266_Server_S0_Watt", "StromverbrauchAktuell",0)), (ReadingsVal("ESPEasy_ESP8266_Server_S0_Watt", "StromverbrauchHeuteDurchschnitt",0)), (ReadingsVal("ESPEasy_ESP8266_Server_S0_Watt", "StromverbrauchGesternDurchschnitt",0)), (ReadingsVal("ESPEasy_ESP8266_Server_S0_Watt", "StromverbrauchVorgesternDurchschnitt",0)), (ReadingsVal("ESPEasy_ESP8266_Server_S0_Watt", "ZaehlerStand_EnergyMonth",0)), (ReadingsVal("ESPEasy_ESP8266_Server_S0_Watt", "ZaehlerStand_EnergyMonthLast",0)) ) }
attr ESPEasy_ESP8266_Server_S0_Watt userReadings StromverbrauchAktuell:Time:.* { 3600/ReadingsVal("ESPEasy_ESP8266_Server_S0_Watt", "Time", 0)*1000 },\
ZaehlerStand:Time:.* { ReadingsVal("ESPEasy_ESP8266_Server_S0_Watt", "StromverbrauchHeute", 0) + ReadingsVal("ESPEasy_ESP8266_Server_S0_Watt", "ZaehlerStandVortag", 0);; },\
StromverbrauchHeute:Time:.* { my $Strom_Gesamt = (ReadingsVal("ESPEasy_ESP8266_Server_S0_Watt", "StromverbrauchHeute", 0)*1000 + ReadingsVal("ESPEasy_ESP8266_Server_S0_Watt", "Count", 0) + ReadingsVal("ESPEasy_ESP8266_Server_S0_Watt", "StromverbrauchHeuteOffset",0)*1000)/1000;; return $Strom_Gesamt;; },\
StromverbrauchHeuteDurchschnitt:Time:.* { my $timestamp_now = time_str2num(nowdate());; my $timestamp_midnight = time_str2num(ReadingsTimestamp("ESPEasy_ESP8266_Server_S0_Watt","StromverbrauchGestern","0"));; my $timestamp_diff = ($timestamp_now - $timestamp_midnight)/3600;; my $Stromverbrauch_Heute = ReadingsVal("ESPEasy_ESP8266_Server_S0_Watt","StromverbrauchHeute","0")*1000;; my $Stromverbrauch_Heute_durchschnitt = $Stromverbrauch_Heute/$timestamp_diff;; return $Stromverbrauch_Heute_durchschnitt;; },\
StromverbrauchGesternDurchschnitt:StromverbrauchGestern:.* { my $Stromverbrauch_Gestern = ReadingsVal("ESPEasy_ESP8266_Server_S0_Watt","StromverbrauchGestern","0")*1000;; my $Stromverbrauch_Gestern_durchschnitt = $Stromverbrauch_Gestern/24;; return $Stromverbrauch_Gestern_durchschnitt;;},\
StromverbrauchVorgesternDurchschnitt:StromverbrauchVorgestern:.* { my $Stromverbrauch_Vorgestern = ReadingsVal("ESPEasy_ESP8266_Server_S0_Watt","StromverbrauchVorgestern","0")*1000;; my $Stromverbrauch_Vorgestern_durchschnitt = $Stromverbrauch_Vorgestern/24;; return $Stromverbrauch_Vorgestern_durchschnitt;;},\
ElectricityForecastToday_kWh:Time:.* { ReadingsVal("ESPEasy_ESP8266_Server_S0_Watt", "StromverbrauchHeuteDurchschnitt", 0)*24/1000;;},\
ElectricityConsumedThisMonthAvgDay_kWh:ZaehlerStand_EnergyMonth:.* { my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);; my $Monatsverbrauch = ReadingsVal("ESPEasy_ESP8266_Server_S0_Watt", "ZaehlerStand_EnergyMonth", 0);; my $Monatsverbrauchdurchschnitt = $Monatsverbrauch/$mday;; return $Monatsverbrauchdurchschnitt;;},\
StromverbrauchHeuteOffset:StromverbrauchHeute.* {return 0;;}
attr ESPEasy_ESP8266_Server_S0_Watt verbose 0

define at_ESPEasy_ESP8266_Server_S0_Watt_reboot at *00:00:00 {\
my $Zaehler_Stand = ReadingsVal("ESPEasy_ESP8266_Server_S0_Watt","ZaehlerStand","0");;\
my $Zaehler_Stand_Vortag = ReadingsVal("ESPEasy_ESP8266_Server_S0_Watt","ZaehlerStandVortag","0");;\
my $Stromverbrauch_Heute = $Zaehler_Stand - $Zaehler_Stand_Vortag;;\
my $Stromverbrauch_Gestern = ReadingsVal("ESPEasy_ESP8266_Server_S0_Watt","StromverbrauchGestern","0");;\
my $zaehlerNeu = $Zaehler_Stand_Vortag + $Stromverbrauch_Heute;;\
fhem ("setreading ESPEasy_ESP8266_Server_S0_Watt ZaehlerStandVortag $zaehlerNeu");;\
fhem ("setreading ESPEasy_ESP8266_Server_S0_Watt StromverbrauchGestern $Stromverbrauch_Heute");;\
fhem ("setreading ESPEasy_ESP8266_Server_S0_Watt StromverbrauchVorgestern $Stromverbrauch_Gestern");;\
fhem ("setreading ESPEasy_ESP8266_Server_S0_Watt StromverbrauchHeute 0");;\
fhem ("set ESPEasy_ESP8266_Server_S0_Watt reboot");; }

define ESPEasy_ESP8266_Server_S0_Watt_Offset dummy
attr ESPEasy_ESP8266_Server_S0_Watt_Offset alias Serverrack
attr ESPEasy_ESP8266_Server_S0_Watt_Offset group Zählerstand Korrektur
attr ESPEasy_ESP8266_Server_S0_Watt_Offset readingList state
attr ESPEasy_ESP8266_Server_S0_Watt_Offset room 15_ESPEasy
attr ESPEasy_ESP8266_Server_S0_Watt_Offset setList state:textField
attr ESPEasy_ESP8266_Server_S0_Watt_Offset stateFormat Zählerstand Server wirklich state
attr ESPEasy_ESP8266_Server_S0_Watt_Offset webCmd state

define n_ESPEasy_ESP8266_Server_S0_Watt_Offset notify ESPEasy_ESP8266_Server_S0_Watt_Offset:.* { \
my $zaehlerstandaktuell = ReadingsVal("ESPEasy_ESP8266_Server_S0_Watt", "ZaehlerStand", 0);;\
my $offset=$EVENT-$zaehlerstandaktuell;;\
fhem ("setreading ESPEasy_ESP8266_Server_S0_Watt StromverbrauchHeuteOffset $offset") }

define FileLog_StromzaehlerServer FileLog ./log/StromzaehlerServer-%Y-%m.log ESPEasy_ESP8266_Server_S0_Watt:StromverbrauchAktuell:.*|ESPEasy_ESP8266_Server_S0_Watt:ZaehlerStand:.*|ESPEasy_ESP8266_Server_S0_Watt:ZaehlerStandVortag:.*|ESPEasy_ESP8266_Server_S0_Watt:StromverbrauchHeute:.*|ESPEasy_ESP8266_Server_S0_Watt:StromverbrauchVortag:.*

define ESPEasy_ESP8266_Server_S0_Watt_EC ElectricityCalculator ESPEasy_ESP8266_Server_S0_Watt:ZaehlerStand:.*
attr ESPEasy_ESP8266_Server_S0_Watt_EC BasicPricePerAnnum 0
attr ESPEasy_ESP8266_Server_S0_Watt_EC Currency €;
attr ESPEasy_ESP8266_Server_S0_Watt_EC ElectricityCounterOffset 0
attr ESPEasy_ESP8266_Server_S0_Watt_EC ElectricityKwhPerCounts 1
attr ESPEasy_ESP8266_Server_S0_Watt_EC ElectricityPricePerKWh 0.19
attr ESPEasy_ESP8266_Server_S0_Watt_EC MonthOfAnnualReading 12
attr ESPEasy_ESP8266_Server_S0_Watt_EC MonthlyPayment 0
attr ESPEasy_ESP8266_Server_S0_Watt_EC ReadingDestination CounterDevice
attr ESPEasy_ESP8266_Server_S0_Watt_EC SiPrefixPower W
attr ESPEasy_ESP8266_Server_S0_Watt_EC event-on-change-reading .*
attr ESPEasy_ESP8266_Server_S0_Watt_EC room 15_ESPEasy

joewanne

Hallo fl_Indigo,

erst mal Danke für die Hilfe.
Ich habe das mit deinem Code getestet, doch leider
habe ich da den gleichen Fehler.
.....

Nach längerem Testen, viel mir auf, das der Fehler immer dann ist wenn der at Befehl läuft.
Habe dann alles ausprobiert.
Ich habe dann letztendlich den reboot von dem ESP ausgenommen.
Jetzt scheint es  zufunktionieren.


Liebe Grüße
Jörg

C_hris

Hi zusammen,

richtig cooles Projekt. Danke schon mal dafür. :)
Habe mir eben erst mal folgendes ESP Board bestellt. Sollte morgen da sein. Ich hoffe es ist dann auch das richtige:

https://www.amazon.de/gp/product/B06Y1LZLLY/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1


Jetzt suche ich aber noch nach einem Sensor, mit dem ich dann die blinkende LED an meinem digitalen Drehstromzähler (Logarex LK13BD202025) abfragen kann. Habt ihr Tipps für mich. Finde grade leider nichts passendes. :(

VG,
Chris

pink99panther

Hallo C_hris,

der Logarex LK13B hat "leider" keine S0-Schnittstelle.
Aber, wenn ich das auf die Schnelle richtig recherchiert habe
eine OBIS-Schnittstelle.
Damit kannst Du viel mehr anfangen.
Such mal hier im Forum nach OBIS

LG
p99p

C_hris

Danke p99p. :)

Ich habe da was von vitilinker gefunden. Das wäre ja dann eine Möglichkeit das so nachzubauen:

https://forum.fhem.de/index.php/topic,82454.0.html

Jetzt muss ich nur den richtigen und bezahlbaren IR Kopf finden und dann teste ich das mal.
Vielen Dank nochmal.

P.S.: Wenn doch noch jmd. nen brauchbaren Sensor kennt um die Impulse der LED Lampe auszulesen.........bin auch hier noch für Tipps dankbar. :)

VG,
Chris

pink99panther

Schaust mal hier:https://wiki.volkszaehler.org/hardware/controllers/ir-schreib-lesekopf
und fragst mal bei Nils per Mail nach nils.volksz@gmail.com.
Da hab ich den für meinen Hauptzähler auch her.

C_hris


Kunstflieger

Hallo Zusammen,
Ein sehr interessantes Projekt. Ich lese meinen Zähler derzeit mit einem RPI und Node Red aus. Nun wollte ich gerne als Hardware eine NodeMCU einsetzen und alle Werte per MQTT versenden. Allerdings wollte ich es unabhängig von FHEM machen.
Leider komme ich mit der Beschreibung von pink99panther nicht ganz zurecht. Welche Bilder sind hier gemeint?
Wie richte ich den Sensor in ESPEasy als Gerät ein?
Für Hilfe wäre ich euch sehr dankbar.

rieders

Hallo

Ich habe im Garten jetzt einen neuen Stromzähler mit S0 Anschluss.

Im Forum habe ich jetzt gelesen das mit einem esp 8266 01 es möglich ist die counter per mqtt zu senden.
Ein 5v Netzteil für Hutschiene ,ein 3.3 v Spannungswandler L78L33ACZ und ein Leergehäuse für Hutschiene habe ich schon bestellt.
Auf dem esp habe ich espeasy installiert.

Meine Frage ist,  der s0+ soll 5v haben.
Muss ich am s0- ein 10kohm Widerstand verbauen?
Wie müsste die Schaltung aussehen?

Viele Dank schon mal für die Hilfe.

Grüße André

sash.sc

Zitat von: rieders am 12 April 2020, 13:05:08
Hallo

Ich habe im Garten jetzt einen neuen Stromzähler mit S0 Anschluss.

Im Forum habe ich jetzt gelesen das mit einem esp 8266 01 es möglich ist die counter per mqtt zu senden.
Ein 5v Netzteil für Hutschiene ,ein 3.3 v Spannungswandler L78L33ACZ und ein Leergehäuse für Hutschiene habe ich schon bestellt.
Auf dem esp habe ich espeasy installiert.

Meine Frage ist,  der s0+ soll 5v haben.
Muss ich am s0- ein 10kohm Widerstand verbauen?
Wie müsste die Schaltung aussehen?

Viele Dank schon mal für die Hilfe.

Grüße André
Siehe 1. Post

Gesendet von meinem MI 9 mit Tapatalk

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

rieders

Hallo

Vielen Dank für die schnelle Antwort.
Das hatte ich schon gelesen.
Laut Bedienungsanleitung vom Stromzähler braucht er 5v an s0+.
Deshalb weiß ich nicht ob 5kohm reichen.
Nicht das es zu fehlzehlungen oder gar das der giopin abraucht.

Grüße
André

rieders

Hallo

Ich habe jetzt eine Schaltung mit 5v an S0+ gebaut.
Wenn ich am (ESP8266 01) GPIO 2 S0- anschließe bekomme ich keine Verbindung mehr zum Netzwerk.
Wenn ich das Kabel mit dem Widerstand (10K) der auf GND geklemmt ist entferne, bekomme ich wieder eine Verbindung.
GPIO 0 habe ich als WLAN LED genommen.
Muss ich beim ESPeasy noch was einstellen?

Grüße
André


rieders

Hallo

Ich habe jetzt den Fehler gefunden und die Daten werden an FHEM gesendet.
Am ESP habe ich unter dem Gerät schon die Counts in KW/h errechnen lassen ( Formel (%value%/400)+ offset).
Nur bei der Berechnung der Leistung habe ich keine Werte. ( meine Formel %value%*3600/10)

Ich hoffe mir kann da jemand weiter helfen.

Grüße

André

B.Stromberg

Hallo!
Ich möchte den S0 von meinem Wechselstromzähler an einen sOnOff Basic anschließen.

Zuerst einmal 2 wahrscheinlich blöde Fragen:

Was der S0 liefert, also diese 1000 Impulse, ist das 1000 Mal öffnen und schließen?
Könnte ich das vorab am sOnOff simulieren?
Ein "plumpes" Überbrücken von 3,3 V auf GPIO bringt ja nur einen Kurzschluss denke ich...

Ein weiteres Problem könnte auch sein, dass der sOnOff nur 3,3 Volt liefert, die S0 vom Drehstromzähler aber 5V haben möchte?


B.Stromberg

So, jetzt bin ich vollkommen verwirrt  :'(

Hatte den Verkäufer meines Wechselstromzählers angeschrieben bezüglich der 3,3 Volt.
Der Zähler ist ein SDM72D.

Dieser schrieb mir, dass auf den S0+ kein Strom gegeben werden dürfte, auch keine 3,3 Volt.
Es würde ein 5 Volt Impuls vom Zähler ausgegeben...

Jetzt verstehe ich nur noch Bahnhof.

Kann bitte jemand Licht ins Dunkel bringen?