ArduCounter Support und neue Versionen (war: Stromzähler mit S0 Schnitt...)

Begonnen von StefanStrobel, 26 Januar 2014, 12:08:13

Vorheriges Thema - Nächstes Thema

no_Legend

Zitat von: tpm88 am 11 August 2019, 15:13:17
Hallo Stefan,

ich habe meinen Zähler auf Wemos D1 auf die neueste FW 3.32 und Modulversion aktualisiert. Die eigentliche Zählung funktioniert seit langer Zeit schon problemlos. Ich habe aber immer wieder Reconnects - manchmal nur ein oder zwei Reconnects und dann auch mal 100+ direkt hintereinander. Natürlich tippe ich auf schlechten WLAN Empfang - direkt daneben habe ich aber noch einen zweiten Wemos mit ESP Easy, der absolut unauffällig läuft. Ich habe den ArduCounter Wemos auch schon gegen einen anderen getauscht, um die Hardware auszuschließen. Allerdings ohne Besserung.

Gäbe es eine Möglichkeit in der Firmware den WLAN RSSI Wert mit zu übertragen? Hättest Du einen Vorschlag, wie ich das Problem noch besser eingrenzen kann?

Danke & Gruß
Tobi

Soweit ich es gesehen habe, gibt es eine funktion WiFi.RSSI. Gut wäre es schon.
Meine Unifi Accesspoint geben mir an, mit welcher stärke der ESP arbeitet.

Hast du die Kanal Funktion im Router auf Auto stehen?
Und die Sendeleistung vielleicht auch?
So ein Kanalwechsel oder Poweranpassung kann schon mal zum Abbruch der Verbindung führen.

Gruß Robert
IntelNUC mit Ubuntu mit FHEM immer aktuell,2x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
HM-SEC-KEY,HM-LC-BL1-FM,HM-SEC-SD,HM-Sen-DB-PCB,HM-Sec-RHS,HM-Sec-SC-2,HM-WDS10-TH-O,Harmony,Netamo, 433MHz Steckdosen uvm.

StefanStrobel

Hallo Tobi,

Das Fhe,-Modul und die Firmware tauschen bei Verbindung über WLAN ständig (per Default alle 10 Sekunden) Keepalives aus. Wenn die nicht rechtzeitig (per Default innerhalb 2 Sekunden) beantwortet werden, wird die TCP-Verbindung geschlossen und neu aufgebaut. Dabei gehen allerdings keine Daten verloren. Der ESP zählt munter weiter und meldet seine Stände bei der nächsten Gelegenheit.
Ich hatte schon einen Fall, in dem Fhem von anderen Modulen so sehr ausgelastet war, dass der Timeout zugeschlagen hat.
Es ist also eher nicht die WLAN-Verbindung, sonst würde eventuell der Reconnect auch Probleme machen. Ich tippe eher auf Verzögerte Bearbeitung o.ä.
Um das herauszufinden kannst Du Verbose 5 einstellen und das Log beobachten bzw. posten.
Du kannst auch mal die Attribute verändern:

Zitat
keepAliveDelay
defines an interval in which the module sends keepalive messages to a counter device that is conected via tcp.
This attribute is ignored if the device is connected via serial port.
If the device doesn't reply within a defined timeout then the module closes and tries to reopen the connection.
The module tells the device when to expect the next keepalive message and the device will also close the tcp connection if it doesn't see a keepalive message within the delay multiplied by 2.5
The delay defaults to 10 seconds.
Example: attr myCounter keepAliveDelay 30
keepAliveTimeout
defines the timeout when wainting for a keealive reply (see keepAliveDelay) The timeout defaults to 2 seconds.
Example: attr myCounter keepAliveTimeout 3
keepAliveRetries
defines how often sending a keepalive is retried before the connection is closed and reopened.
It defaults to 2.
Example: attr myCounter keepAliveRetries 3

Das mit der RSSI packe ich auf die Wunschliste. Sobald ich dazu komme, schau ich mir das an.

Gruss
    Stefan

StefanStrobel

Hallo,

mir ist heute nochmal ein Bug in der Firmware aufgefallen.
Deshalb habe ich gerade nochmal ein Update eingecheckt.

Gruss
   Stefan

StefanStrobel

Korrektur:

der letzte check in war fehlerhaft.
Jetzt ist nochmal eine neue Version (3.34+aktualisiertes Modul) eingecheckt, die bei devVerbose >= 5 auch ein RSSI-Reading erzeugt.
Ich hoffe es dabei keine neuen Fehler reingekommen ;-)

Gruss
   Stefan

tpm88

Zitat von: no_Legend am 11 August 2019, 15:36:24
Meine Unifi Accesspoint geben mir an, mit welcher stärke der ESP arbeitet.

Hast du die Kanal Funktion im Router auf Auto stehen?
Und die Sendeleistung vielleicht auch?
So ein Kanalwechsel oder Poweranpassung kann schon mal zum Abbruch der Verbindung führen.

Hallo Robert,

tatsächlich habe ich auch einen Unifi AP. Im Controller sehe ich für beide (direkt benachbarte) Wemos RSSI Werte um -70dbm. Der ArduCounter Wemos hat allerdings stets einen deutlich schlechteren WiFi Experience Wert ( um 30% ), während der andere ESPEasy Wemos eher stabile WiFi Experience Werte > 60% zeigt. Für den ArduCounter Wemos meldet der Unifi AP meist hohe Receive Retries. Deshalb tippe ich ja auch bei den ArduCounter Reconnects zunächst auf WLAN Aussetzer. Im Unifi Controller habe ich noch kein Log gefunden, welches WLAN Abbrüche bzw. Neuanmeldungen eines einzelnen Clients loggt.

Zusätzlich habe ich testweise in der Firmware den WiFi PHY Mode mal fix auf 11G gesetzt. Hierzu habe ich vor dem Connect folgende Zeile eingefügt:

WiFi.setPhyMode(WIFI_PHY_MODE_11G);

Laut  https://github.com/esp8266/Arduino/issues/2795 ( vgl. Antwort vom 8.10.2018 ) soll das die Stabilität von WiFi Verbindungen beim ESP8266 verbessern.

Gruß
Tobias
Test FHEM Server on RPi, CUL_HM
Prod FHEM Server on Odroid HC1, HM-USB, JeeLink
Devices: diverse HM, IT1500, 1wire, LaCrosse, MQTT

tpm88

Zitat von: StefanStrobel am 12 August 2019, 17:54:49
Ich hatte schon einen Fall, in dem Fhem von anderen Modulen so sehr ausgelastet war, dass der Timeout zugeschlagen hat.
Es ist also eher nicht die WLAN-Verbindung, sonst würde eventuell der Reconnect auch Probleme machen. Ich tippe eher auf Verzögerte Bearbeitung o.ä.
Um das herauszufinden kannst Du Verbose 5 einstellen und das Log beobachten bzw. posten.

Hallo Stefan,

vielen Dank für diesen Aspekt und die Tipps zur Problemeingrenzung. Bezüglich verzögerter Verarbeitung werde ich mal sehen, ob der freezemon da ggf. korrelierte Einträge erzeugt hat. Ich werde weiter testen und versuchen, via verbose 5 mehr Licht ins Dunkel zu bringen. Danke auch für den um RSSI erweiterten Sketch - Feedback hierzu kann ich aber vsl. erst nächste Woche liefern.

Gruß
Tobi
Test FHEM Server on RPi, CUL_HM
Prod FHEM Server on Odroid HC1, HM-USB, JeeLink
Devices: diverse HM, IT1500, 1wire, LaCrosse, MQTT

msome

Hallo, ich wollte mich mal bedanken für den ArduCounter.  :)

Ich hab den Wasserzähler im Haus damit ausgestattet und muss sagen ich bin überaus zufrieden.
Eine Woche hat er mit einem Näherungssensor der über ein Relais am ArduCounter angeschlossen war gezählt. Total falsch - viel zu viel, da der Relaiskontakt scheinbar geprellt hat. Hardware-Problem. Eine Entprellung mit Kondensator wie ab und zu zu lesen ist, gefällt mir wegen der Mini-Kurzschlüsse beim Aufladen nicht.

Letzte Woche habe ich das Relais dann gegen einen Optokoppler getauscht. War scheinbar die richtige Entscheidung.
Seit einer Woche zählt der ArduCounter jetzt richtig. Kein einziger Liter fehlt oder zu viel. Bei einem 4-Personen-Haushalt, d.h. da läuft (speziell jetzt in den Ferien) doch der eine oder andere Liter durch.

Das ArduCounter FHEM Modul läuft zusammen mit einem statistics Modul und zählt somit den Wasserverbrauch pro Tag.

Vielen Dank nochmal für die Entwicklung und das Debugging bisher - an Stefan und alle die mitgeholfen haben.

Matthias
[7. Sept 2019: ArduCounter Firmware 3.34 + WIFI_PHY_MODE_11G Option; FHEM Modulversion 6.18)
FHEM auf ODROID-C4 & FHEM auf Raspberry 3B+
IO: HMUARTLGW (wired), Velux KLF200, DuoFernStick, DeConz, HMUSB-2, JeeLink, ModBus, RS232, WiFi,
Geräte: so ziemlich alles was es an Geräten von HM gibt, PCA301, SDM630M, Hue Lampen & Steckdosen

no_Legend

Zitat von: StefanStrobel am 12 August 2019, 21:21:07
Korrektur:

der letzte check in war fehlerhaft.
Jetzt ist nochmal eine neue Version (3.34+aktualisiertes Modul) eingecheckt, die bei devVerbose >= 5 auch ein RSSI-Reading erzeugt.
Ich hoffe es dabei keine neuen Fehler reingekommen ;-)

Gruss
   Stefan

Hallo Stefan,

ich bekomme die 3.34 nicht kompiliert.
hier dei Fehlermeldung:

Arduino: 1.8.9 (Mac OS X), Board: "LOLIN(WEMOS) D1 R2 & mini, 80 MHz, Flash, Disabled, All SSL ciphers (most compatible), 4M (no SPIFFS), v2 Lower Memory, Disabled, None, Only Sketch, 921600"

sketch_sep14b:131:35: error: ArduCounterTestConfig.h: No such file or directory
#include "ArduCounterTestConfig.h"
                                   ^
compilation terminated.
exit status 1
ArduCounterTestConfig.h: No such file or directory

Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.



Ich glaube Zeile 107 sollte wie folgt aussehen:
/*#define TestConfig // include my SSID / secret*/

Gruß Robert
IntelNUC mit Ubuntu mit FHEM immer aktuell,2x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
HM-SEC-KEY,HM-LC-BL1-FM,HM-SEC-SD,HM-Sen-DB-PCB,HM-Sec-RHS,HM-Sec-SC-2,HM-WDS10-TH-O,Harmony,Netamo, 433MHz Steckdosen uvm.

StefanStrobel

Hi Robert,

da hast Du natürlich recht.
In der Zeile darüber habe ich ja sogar geschrieben: "remove this ..."

Ich hätte das vor dem Checkin auskommentieren sollen und checke bei nächster Gelegenheit eine neue Version ein.

Hat eigentlich jemand Interesse an einer Version für den esp32?
Ich habe den Code mal so umgestellt, dass er mit PlatformIO und für den ESP32 compiliert.
Es gäbe da aber sicher noch einiges zu testen.

Gruß
    Stefan

StefanStrobel

Hallo Matthias,

das mit dem induktiven Näherungssensor klingt gut!
Ich habe meinen Wasserzähler bisher noch nicht angeschlossen, möchte das aber auch noch tun.
Bisher habe ich es mit einer einfachen IR Reflexlichtschranke versucht. Der Reflektionsunterschied bei einem kleinen Rädchen war aber zu gering. Dann habe ich eine Laserdiode verwendet, aber da der Zeiger des Zählers eine ähnliche Farbe hat, klappt das leider zumindest mit einem roten Laser auch nicht.

Hast Du verschiedene Näherungssensoren ausprobiert?
Kann man den Ausgang nicht einfach per Spannungsteiler an den Arduino hängen?
Gibt es Erfahrungswerte zur Maximalfrequenz?

Gruß / Thanks
    Stefan


no_Legend

Zitat von: StefanStrobel am 19 September 2019, 10:54:54
Hallo Matthias,

das mit dem induktiven Näherungssensor klingt gut!
Ich habe meinen Wasserzähler bisher noch nicht angeschlossen, möchte das aber auch noch tun.
Bisher habe ich es mit einer einfachen IR Reflexlichtschranke versucht. Der Reflektionsunterschied bei einem kleinen Rädchen war aber zu gering. Dann habe ich eine Laserdiode verwendet, aber da der Zeiger des Zählers eine ähnliche Farbe hat, klappt das leider zumindest mit einem roten Laser auch nicht.

Hast Du verschiedene Näherungssensoren ausprobiert?
Kann man den Ausgang nicht einfach per Spannungsteiler an den Arduino hängen?
Gibt es Erfahrungswerte zur Maximalfrequenz?

Gruß / Thanks
    Stefan

Hallo Stefan,

ich hab mir einen Panasonic (Sunx) EX-26a dafür angeschafft.
Leider bisher noch nicht eingebaut.
Es gibt dazu aber schon Erfahrungsberichte dazu um netz.

Gruß Robert
IntelNUC mit Ubuntu mit FHEM immer aktuell,2x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
HM-SEC-KEY,HM-LC-BL1-FM,HM-SEC-SD,HM-Sen-DB-PCB,HM-Sec-RHS,HM-Sec-SC-2,HM-WDS10-TH-O,Harmony,Netamo, 433MHz Steckdosen uvm.

msome

Zitat von: StefanStrobel am 19 September 2019, 10:54:54
Hast Du verschiedene Näherungssensoren ausprobiert?
Kann man den Ausgang nicht einfach per Spannungsteiler an den Arduino hängen?
Gibt es Erfahrungswerte zur Maximalfrequenz?

Hallo Stefan, tut mir leid dass ich erst so spät antworte, war beruflich 2 Wochen unterwegs und da war nicht viel Zeit.

Ich habe 2 Sensoren ausprobiert, da der erste nicht jede Umdrehung erkannt hat.
Zuerst diesen blauen hier und jetzt nutze ich einen empfindlicheren in orange.

Man könnte natürlich einen Spannungsteiler nutzen, aber da der Sensor über einen Stepup mit Spannung versorgt wird und ich mit der Zuverlässigkeit der <hüstel> günstigen Stepups aus China nicht so ganz zufrieden bin, wollte ich auf Nummer sicher gehen. Lieber stirbt ein 50ct Optokoppler als der D1.

Mit der Frequenz habe ich nicht gespielt, aber bisher hat der Sensor noch nichts verpasst. Bis heute liegt der Sensor keinen einzigen Liter daneben und hat dabei (eben kontrolliert) schon 8609 Liter gezählt.

Wenn du Interesse an dem blauen Sensor hast, schreib 'ne PN mit der Adresse und ich schick ihn dir; Ich habe keine Verwendung mehr dafür.

Den EX-26a habe ich mir angeschaut, aber ehrlich gesagt war er mir viel zu teuer (>75€). Deshalb habe ich den orangen Sensor (8€) noch ausprobiert.
Der einzige Vorteil des EX-26a wäre, ich könnte (ich glaub) in 50ml Schritten das Zahn-Rad abtasten - aber mir ist kein Anwendungsfall dafür eingefallen.

Matthias
FHEM auf ODROID-C4 & FHEM auf Raspberry 3B+
IO: HMUARTLGW (wired), Velux KLF200, DuoFernStick, DeConz, HMUSB-2, JeeLink, ModBus, RS232, WiFi,
Geräte: so ziemlich alles was es an Geräten von HM gibt, PCA301, SDM630M, Hue Lampen & Steckdosen

StefanStrobel

Hallo Matthias,

danke für die Details.
Ich hab jetzt auch mal so einen orangen Sensor bestellt.
Das mit dem Step up ist auch eine gute Idee. Ich dachte erst an ein Netzteil mit höherer Spannung und dann einen Spannungsregler für den ESP.

Gruss
   Stefan

Oscar

Hallo,

da mein Stromzähler bisher gemacht hat was er sollte, habe ich begonnen das System zu erweitern.
Dabei hat mit das Update von FHEM natürlich meinen Zähler zerschossen.
Ich habe also dem ArduCounter die aktuellste Version 3.34 verpasst und die Userreadings auf die neuen Bedingungen angepasst.
Soweit funktioniert das ganz gut, aber ich bekomme meinen Zählerstand nicht eingelesen.

Ich habe erst einen Dummy für den Zählerstand angelegt und mit Daten gefüttert
define StromZaehlerstand dummy
set StromZaehlerstand ,,aktueller Zählerstand"


und danach das Userreading erzeugt
attr Verbrauch userReadings energy_act {ReadingsVal("Verbrauch","powerD4",0)} ,energy monotonic { ReadingsVal("Verbrauch","pinD4",0)/800} ,energy_day monotonic { ReadingsVal("Verbrauch","pinD4",0)/800} ,energy_month monotonic { ReadingsVal("Verbrauch","pinD4",0)/800} ,energy_year monotonic { ReadingsVal("Verbrauch","pinD4",0)/800} ,energy_hauszaehler monotonic {ReadingsVal("Verbrauch","pinD4",0)/800+ReadingsNum("StromZaehlerstand","state",0)}

Die erzeugten Werte stimmen alle, aber dem Wert von energy_hauszaehler wird nicht der Startzählerstand hinzugefügt.

Kann mir da jemand auf die Sprünge helfen?

Danke.

StefanStrobel

Hallo Oscar,

das mit dem Dummy, einer eigenen Umrechnung und monotonic ist schon lange nicht mehr nötig.
Setz statt dessen einfach das Attribut pulsesPerKWh auf den richtigen Wert.
Das Modul erzeugt dann ein entsprechend umgerechnetes Reading mit Namen calcCounter$pinName, das nach nach Neustarts weiter gezählt wird.
Den Namen des Readings kannst Du aber auch mit dem Attribut readingNameCalcCount$pin ändern.

Gruss
    Stefan