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

birdy

Hallo Stefan

Ui ja, das hatte ich so nicht bedacht. Der Impuls ist wenn der Ausgang kurzzeitig auf 0=Masse gezogen wird. Das ist bei der S0-Schnittstelle wie auch bei meinem Versuchsaufbau mit dem Taster so. Der Impuls beginnt gem. meinem Verständnis mit einer fallenden Flanke und endet mit einer steigenden. Ist es da wirklich von Bedeutung ob bei der steigenden Flanke, der fallenden oder irgendwo dazwischen gezählt wird?

Wenn man die Impulslänge überwachen möchte (was ich eigentlich möchte) kann man natürlich nicht schon bei der ersten Flanke zählen. Zu diesem Zeitpunkt ist ja noch nicht bekannt ob der Impuls auch die notwendigen 30ms andauern wird. Man muss also zwischendurch, sobald die 30ms erreicht sind, oder am Ende bei steigender Flanke zählen, sofern mind. 30ms verstrichen sind.

Der Energieversorger hat mich nicht direkt an die S0-Schnittstelle des Zählers gelassen. Der hatte Angst mein Nano könnte den Zähler beschädigen. Somit musste der Installateur ein Relais dazwischen schalten. Wie lange diese Relaisimpulse dauern ist mir momentan noch nicht bekannt. Dazu muss ich erst noch ein passendes Messgerät organisieren.

An dieser Stelle ein herzliches Dankeschön für die Tolle Arbeit die Du bisher geleistet hast.


Wir haben doch einen Energiezähler der einfach ,,nur" Energie zählt. Dabei entspricht jeder Impuls einer definierten Grösse bei mir z.B. 0.01 KWh. Warum man hier den ersten Impuls ignoriert ist mir nicht klar. Ich kann keinen Sinn dahinter erkennen.

Das Andere ist, wir würden gerne die ,,momentane" Leistung im KW kennen. Dabei muss dann die Energie auf eine bestimmte Zeitspanne aufgerechnet werden. Dazu ist ein Startschuss erforderlich (1. Impuls) und natürlich ist erst ab dem zweiten Impuls eine Leistungsangabe möglich. In diesem Zusammenhang wird eine Leistungsangabe ja sowieso immer indirekt ermittelt und ist ein Durchschnitt über ein bestimmtes Zeitfenster. Abhängig davon wie man die Intervalle legt und wann der nächste Impuls kommt oder kommen wird. Das hast Du ja in einem Deiner ersten Post ausführlich beschrieben. Würde die Firmware bereits den ersten Impuls zählen würde die ,,Messung" genauer, die errechnete Leistung könnte wie von Dir angesprochen etwas ungenauer werden. Aber dies wäre doch nur für die sehr kurze Dauer der ersten Messperiode für die Leistung von Bedeutung. Meiner Ansicht nach absolut vernachlässigbar, im Vergleich zur Energiemessung. Man könnte sogar überlegen im ersten Intervall die Leistung wegzulassen. Bei der Energiemessung schleppt man aber jede einzelne Abweichung (kumulierend) für immer mit :(

Gruss birdy
FHEM  @Debian bullseye @Proxmox VE 8.1.3
@intelNUC's  (i5)
CUL 433(a-culfw), CUL 868(SlowRF), Max-Cube CUN geflash, HM-CFG-USB-2 (HMALND)

Markus Bloch

Zitat von: birdy am 25 September 2017, 23:45:31
Warum man hier den ersten Impuls ignoriert ist mir nicht klar. Ich kann keinen Sinn dahinter erkennen.

Weil Du bei dem ersten Impuls nicht die genaue Zeit zum vorrangegangenen Impuls kennst (wo ja noch garnicht mitgelauscht wurde). Wenn Du jetzt den ersten Impuls direkt zählst und der kommt nur wenige Sekunden nach dem Start, dann hast du plötzlich einen hohen Stromverbrauch anliegen, obwohl dem in Wirklichkeit nicht so ist. Daher ignoriert man den ersten Impuls, aber zählt von da an die Zeit bis zum zweiten Impuls. Dann hat man einen validen Wert

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

birdy

Zitat von: Markus Bloch am 26 September 2017, 09:26:49
.... dann hast du plötzlich einen hohen Stromverbrauch anliegen,....

Hallo Markus

Was verstehst Du unter Stromverbrauch?

Bei mir wird der ,,Stromverbrauch" vom ,,Stromzähler" gezählt und der ermittelt was ich dem EW zahlen muss. Das wird nun mal in KWh gemessen, schau doch mal auf deinen Zähler. Das was Du meinst ist wohl die (momentane) Leistung. Bezieht man kurzfristig eine hohe Leistung führt dies noch lange nicht zu einem hohen ,,Stromverbrauch" und in der Folge zu hohen Kosten. Wie bereits erklärt (mein letzter Post war möglicherweise etwas (zu) lange) kann die Leistung natürlich erst ab den zweiten Impuls gerechnet werden. Für den Energieverbrauch, dass was der ,,Stromzähler" zählt, macht es aber absolut keinen Sinn irgendeinen Impuls zu ignorieren.

Gruss birdy
FHEM  @Debian bullseye @Proxmox VE 8.1.3
@intelNUC's  (i5)
CUL 433(a-culfw), CUL 868(SlowRF), Max-Cube CUN geflash, HM-CFG-USB-2 (HMALND)

FunkOdyssey

#183
Zitat von: StefanStrobel am 24 September 2017, 15:43:09
Hallo, ich hab mal ein neues Feature zum Testen, mit dem evt. die monotonic user readings für den ArduCounter überflüssig werden und der Zählerstand auch beim Restart nicht mehr so weit abdriftet:
Wenn verboseReadingsX (X für den Pin) auf 1 steht, wird nun auch ein Reading longCountX erzeugt (kann aber mit readingNameLongCount umbenannt werden).
Dieses Reading zeigt nicht den internen Zähler im Arduino sondern addiert immer die Differenzen auf.
Wenn der Arduino sich mit seiner Setup-Meldung meldet, ermittelt das Modul die Zeit seit der letzten Zähler-Meldung und der neuen Setup-Meldung und versucht die ausgelassenen Pulse zu schätzen und addiert auch diese Zahl. Korrekt wird sie vermutlich nicht sein...

Kurzer Zwischenbericht: Ich habe meinen ArduCounter ein wenig umgebaut und die Umbennenung der Readings entfernt. Also nicht mehr vergleichbar mit den vorherigen Posts.

Internals:
   DEF        /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0@38400
   DeviceName /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0@38400
   FD         5
   Initialized 1
   NAME       ArduCounter
   NOTIFYDEV  global
   NR         592
   NTFY_ORDER 50-ArduCounter
   PARTIAL
   STATE      opened
   TYPE       ArduCounter
   VersionFirmware 1.8
   VersionModule 4.71 - 9.5.2017
   buffer
   CounterInterpolated:
   READINGS:
     2017-09-26 11:29:13   Zaehler         1023
     2017-09-26 11:29:13   countDiff4      0
     2017-09-26 11:29:13   lastMsg4        R4 C156 D0 T600000 N419047057

     2017-09-26 11:29:13   long4           58
     2017-09-26 11:29:13   pin4            156
     2017-09-26 11:29:13   power4          0.000
     2017-09-26 11:29:13   reject4
     2017-09-21 15:06:43   state           opened
     2017-09-26 11:29:13   timeDiff4       600000
Attributes:
   factor     100
   flashCommand avrdude -p atmega328P -c arduino -P [PORT] -D -U flash:w:[HEXFILE] 2>[LOGFILE]
   interval   60 600 10
   pinD4      falling pullup
   readingFactor4 100
   userReadings Zaehler:pin4.* monotonic {ReadingsVal($name,"pin4",0)}
   userattr   pinD4 readingFactor4 readingNameCount4 readingNamePower4 verboseReadings4
   verboseReadings4 1


Mit "longCountX" meinst du das neue Reading "longX", oder? (-Count)
Mir fällt auf, dass beide Werte von pin4 und long4 nicht mehr zurückgesetzt werden. Mein userReading 'Zaehler' habe ich noch drin gelassen. Quasi als temporäres Backup-Reading.
Nachtrag: Beim nächsten Intervall wurde pin4 genullt. long4 hat seine Werte behalten. Also exakt so wie du es beschrieben hast.

Am Rande:
Ich habe den Gaszähler immer schon mit einem 13 kOhm Widerstand auf 3,3 Volt gezogen. So hatte ich das damals bei der GPIO-Variante auch. Das sollte ich doch belassen, oder? "falling pullup" ist doch dennoch korrekt, oder?

Ich hatte gestern übrigens innerhalb von 4 Stunden eine Abweichung von 0,014 kWh zwischen dem ArduCounter und Zähler. Es gab zu dieser Zeit keinen Neustart.

StefanStrobel

Hallo birdy,

die neue Version, die ich gepostet habe, hat ein neues Reading, bei dem auch der erste Impuls immer mitgezählt wird.
Probier's doch mal aus.

Gruss
   Stefan

StefanStrobel

Hallo FunkOdyssey,

pullup kannst Du weglassen wenn Du extern schon einen pullup-Widerstand angeschlossen hast. Sollte aber auch kein Problem sein.
Wenn auch ohne Neustart Impulse verloren gehen, kann es eigentlich kein Software-Problem mehr sein. Das hätte Otto schon bemerkt ;-)

Vielleicht kommen Impulse zwischendurch mal zu schnell für den Arduino oder die Impulse sind gelegentlich zu schwach. Es gab auch schon Probleme mit defekten Arduinos.

Oder gehen gar keine Impulse verloren sondern die Berechnung des Stromverbrauchs ist das Problem?
Kannst Du zum Testen einen anderen Impuls-Zähler parallel anschließen?

Gruss
   Stefan

birdy

#186
Zitat von: StefanStrobel am 26 September 2017, 20:52:41
Probier's doch mal aus.

Funktioniert ausgezeichnet,
Korrektur...
Stefan, wo genau sollte ich das Reading sehen welches ab dem ersten Impuls zählt?

Gruss birdy
FHEM  @Debian bullseye @Proxmox VE 8.1.3
@intelNUC's  (i5)
CUL 433(a-culfw), CUL 868(SlowRF), Max-Cube CUN geflash, HM-CFG-USB-2 (HMALND)

birdy

Mein Problem: Sobald ich verboseReadings4 auf 1 setze geht nichts mehr, aus die Maus :(
Der Webinterface ich nach ein paar Sekunden nicht mehr erreichbar. Wahrscheinlich beim Übergang zum nächsten Intervall.
Was mache ich falsch?
FHEM  @Debian bullseye @Proxmox VE 8.1.3
@intelNUC's  (i5)
CUL 433(a-culfw), CUL 868(SlowRF), Max-Cube CUN geflash, HM-CFG-USB-2 (HMALND)

StefanStrobel

Hallo Birdy,

poste doch bitte Deine aktuelle Konfiguration und einen Auszug aus dem Log mit verbose 5 für den relevanten Zeitraum.

Gruß
    Stefan

birdy

Zitat von: StefanStrobel am 29 September 2017, 23:15:55
poste doch bitte Deine aktuelle Konfiguration und einen Auszug aus dem Log mit verbose 5 für den relevanten Zeitraum.

Hier die Konfiguration, natürlich noch bevor ich verboseReadings4 auf 1 gesetzt habe.

Internals:
   CounterResetTime 1506974919.01365
   DEF        /dev/ttyUSB0@38400
   DeviceName /dev/ttyUSB0@38400
   FD         4
   Initialized 1
   NAME       AC
   NOTIFYDEV  global
   NR         21
   NTFY_ORDER 50-AC
   PARTIAL
   STATE      opened
   TYPE       ArduCounter
   VersionFirmware 1.8
   VersionModule 4.8 - 24.9.2017
   buffer
   READINGS:
     2017-10-02 22:12:04   pin4            16
     2017-10-02 22:12:04   power4          0.033
     2017-10-02 22:08:32   state           opened
Attributes:
   factor     100
   flashCommand avrdude -p atmega328P -c arduino -P [PORT] -D -U flash:w:[HEXFILE] 2>[LOGFILE]
   pin4       falling pullup
   userattr   pin4
   verbose    5


Dann habe ich ca. 22:13  verboseReadings4 auf 1 gesetzt..

2017.10.02 22:09:25 3: AC: Sending info command to device
2017.10.02 22:09:25 3: AC: device: normal interval 30000
2017.10.02 22:09:25 3: AC: device: max interval 60000
2017.10.02 22:09:25 3: AC: device: min interval 2000
2017.10.02 22:09:25 3: AC: device: min count 1
2017.10.02 22:09:25 3: AC: device: pin 4 PCInt pin 20, iMode falling, no min len, count 0 (+0) in 6654 ms
2017.10.02 22:09:25 3: AC: device: Next report in 8782 Milliseconds
2017.10.02 22:09:30 3: AC: Sending info command to device
2017.10.02 22:09:30 3: AC: device: normal interval 30000
2017.10.02 22:09:30 3: AC: device: max interval 60000
2017.10.02 22:09:30 3: AC: device: min interval 2000
2017.10.02 22:09:30 3: AC: device: min count 1
2017.10.02 22:09:30 3: AC: device: pin 4 PCInt pin 20, iMode falling, no min len, count 3 (+3) in 11363 ms
2017.10.02 22:09:30 3: AC: device:   first at 39832, last at 51195, avg len 0
2017.10.02 22:09:30 3: AC: device: Next report in 3341 Milliseconds
2017.10.02 22:09:34 1: PERL WARNING: Use of uninitialized value $longCount in concatenation (.) or string at ./FHEM/98_ArduCounter.pm line 642.
2017.10.02 22:10:34 4: AC: Pin 4 (pin4) count 9 longCount  (diff 5) in 56.300s, result 0.032
2017.10.02 22:10:34 5: AC: interval 22:09:37 until 22:10:34, First at 47437
2017.10.02 22:10:34 5: AC: set readings power4 to 0.032, timeDiff4 to 56300 and countDiff4 to 5
2017.10.02 22:10:34 5: AC: Device Time 120, Drift -0.035s in 59.965s, -0.06%
2017.10.02 22:11:04 4: AC: Pin 4 (pin4) count 12 longCount  (diff 3) in 30.580s, result 0.035
2017.10.02 22:11:04 5: AC: interval 22:10:33 until 22:11:04, First at 29313
2017.10.02 22:11:04 5: AC: set readings power4 to 0.035, timeDiff4 to 30580 and countDiff4 to 3
2017.10.02 22:11:04 5: AC: Device Time 150, Drift -0.053s in 89.947s, -0.06%
2017.10.02 22:12:04 4: AC: Pin 4 (pin4) count 16 longCount  (diff 4) in 43.618s, result 0.033
2017.10.02 22:12:04 5: AC: interval 22:11:20 until 22:12:04, First at 42695
2017.10.02 22:12:04 5: AC: set readings power4 to 0.033, timeDiff4 to 43618 and countDiff4 to 4
2017.10.02 22:12:04 5: AC: Device Time 210, Drift -0.088s in 149.912s, -0.06%
2017.10.02 22:13:04 4: AC: Pin 4 (pin4) count 16 longCount  (diff 0) in 81.696s, result 0.000
2017.10.02 22:13:04 5: AC: interval 22:11:42 until 22:13:04
2017.10.02 22:13:04 5: AC: set readings power4 to 0.000, timeDiff4 to 81696 and countDiff4 to 0
2017.10.02 22:13:04 5: AC: Device Time 270, Drift -0.123s in 209.877s, -0.06%
Illegal division by zero at ./FHEM/98_ArduCounter.pm line 625.
2017.10.02 22:15:06 1: Including fhem.cfg
2017.10.02 22:15:06 3: telnetPort: port 7072 opened
2017.10.02 22:15:06 3: WEB: port 8083 opened
2017.10.02 22:15:06 3: WEBphone: port 8084 opened
2017.10.02 22:15:06 3: WEBtablet: port 8085 opened
2017.10.02 22:15:06 2: eventTypes: loaded 75 events from ./log/eventTypes.txt
2017.10.02 22:15:06 2: VCONTROL300: Using USB device
2017.10.02 22:15:06 3: VCONTROL300: Define open DATEI 'VPlusHO1_300.cfg'
2017.10.02 22:15:06 3: VCONTROL300: Opening file 'VPlusHO1_300.cfg'
2017.10.02 22:15:06 3: VCONTROL300: File 'VPlusHO1_300.cfg' refreshed
2017.10.02 22:15:06 3: VCONTROL300: Using protocol 300
2017.10.02 22:15:07 1: Including ./log/fhem.save
2017.10.02 22:15:07 3: WARNING: unsupported character in reading Temp-Aussen? (not A-Za-z/\d_\.-), notify the VCONTROL300 module maintainer.
2017.10.02 22:15:07 5: AC: Notify called with events: INITIALIZED, open device and set timer to send hello to device
2017.10.02 22:15:07 3: Opening AC device /dev/ttyUSB0
2017.10.02 22:15:07 3: Setting AC serial parameters to 38400,8,N,1
2017.10.02 22:15:07 3: AC device opened
2017.10.02 22:15:07 1: usb create starting
2017.10.02 22:15:07 3: Probing CUL device /dev/ttyAMA0
2017.10.02 22:15:07 3: Probing TCM_ESP3 device /dev/ttyAMA0
2017.10.02 22:15:07 3: Probing ZWDongle device /dev/ttyAMA0
2017.10.02 22:15:08 3: Probing FRM device /dev/ttyAMA0
2017.10.02 22:15:13 1: usb create end
2017.10.02 22:15:13 2: SecurityCheck:  WEB,WEBphone,WEBtablet has no associated allowed device with basicAuth. telnetPort has no associated allowed device with password/globalpassword.  Restart FHEM for a new check if the problem is fixed, or set the global attribute motd to none to supress this message.
2017.10.02 22:15:13 0: Featurelevel: 5.8
2017.10.02 22:15:13 0: Server started with 11 defined entities (fhem.pl:15112/2017-09-21 perl:5.020002 os:linux user:fhem pid:624)
2017.10.02 22:15:13 3: AC: sending h(ello) to device to ask for version
2017.10.02 22:15:13 5: SW: h

2017.10.02 22:15:13 3: VCONTROL300: USB connection opened
2017.10.02 22:15:13 3: Opening Heizung device /dev/ttyUSB1
2017.10.02 22:15:13 3: Can't open /dev/ttyUSB1: Datei oder Verzeichnis nicht gefunden
2017.10.02 22:15:13 2: Attempt to write to disconnected device.
2017.10.02 22:15:13 3: AC: device sent setup message, V1.8
2017.10.02 22:15:13 4: AC: device reported firmware 1.8
2017.10.02 22:15:13 3: AC: ConfigureDevice calls Attr with pin4 falling pullup
2017.10.02 22:15:13 5: SW: 4,2,1a

2017.10.02 22:15:13 3: AC: device replied to hello, V1.8
2017.10.02 22:15:13 4: AC: device reported firmware 1.8
2017.10.02 22:15:13 3: AC: ConfigureDevice calls Attr with pin4 falling pullup
2017.10.02 22:15:13 5: SW: 4,2,1a

2017.10.02 22:15:13 3: AC: device: defined pin 4 PCInt pin 20, iMode falling, no min len, count 0 (+0) in 0 ms
2017.10.02 22:15:13 3: AC: device: defined pin 4 PCInt pin 20, iMode falling, no min len, count 0 (+0) in 8 ms


Kurz darauf habe ich den Pi frisch gestartet weil das Webinterface von FHEM nicht mehr erreichbar war.

Mach ich etwas falsch?
So wie ich verstanden habe muss man verboseReadingsX au 1 setzen um ein Reading longCount zu erzeugen.

Schon mal vielen Dank für Deine Hilfe.

Gruss birdy
FHEM  @Debian bullseye @Proxmox VE 8.1.3
@intelNUC's  (i5)
CUL 433(a-culfw), CUL 868(SlowRF), Max-Cube CUN geflash, HM-CFG-USB-2 (HMALND)

FunkOdyssey

Zitat von: StefanStrobel am 26 September 2017, 21:01:05
Oder gehen gar keine Impulse verloren sondern die Berechnung des Stromverbrauchs ist das Problem?

Ich habe die Werte im Gaszähler, im ArduCounter und im GasCalculator-Device manuell überprüft und kann bestätigen, dass es nicht am GasCalculator-Device und dann auch vermutlich nicht am ArduCounter liegt. Fakt ist, dass die Impulse irgendwie nicht immer 100%ig erkannt werden.

Zitat von: StefanStrobel am 26 September 2017, 21:01:05
Kannst Du zum Testen einen anderen Impuls-Zähler parallel anschließen?

Leider habe ich keinen zweiten Zähler. Die Investition würde ich mir auch gerne ersparen.

Zitat von: StefanStrobel am 26 September 2017, 21:01:05
Vielleicht kommen Impulse zwischendurch mal zu schnell für den Arduino oder die Impulse sind gelegentlich zu schwach. Es gab auch schon Probleme mit defekten Arduinos.

Ottos Erfahrung mit einem defekten Arduino hatte ich gelesen. Ich habe aber bereits unterschiedliche Ardus getestet.
Ich könnte mir vorstellen, dass es irgendetwas mit den Flanken und dem PullUp zu tun hat. Gab es nicht auch Wege über Kondensatoren anstatt über PullUp-Widerstände? Kann da jemand eine Empfehlung aussprechen?

Hat irgendjemand den ArduCounter an einem Elster Gas Meter BK-G4M im Einsatz?

StefanStrobel

Hallo birdy,

Du hast einen Bug gefunden.
Neue Version kommt ...

Gruss
   Stefan

birdy

FHEM  @Debian bullseye @Proxmox VE 8.1.3
@intelNUC's  (i5)
CUL 433(a-culfw), CUL 868(SlowRF), Max-Cube CUN geflash, HM-CFG-USB-2 (HMALND)

AxelSchweiss

Hi
Immer wenn ich FHEM neu starte wird der Counter wieder auf 0 gesetzt.
Mach ich da was falsch oder muss ich noch etwas einstellen?
Meine momentane Config:
define ArduCounter ArduCounter /dev/ttyUSB0
attr ArduCounter userattr pinD5
attr ArduCounter factor 15
attr ArduCounter flashCommand avrdude -p atmega328P -c arduino -P [PORT] -D -U flash:w:[HEXFILE] 2>[LOGFILE]
attr ArduCounter interval 10 60
attr ArduCounter pinD5 rising pullup


Die Modulversion ist $Id: 98_ArduCounter.pm 15148 2017-09-28 18:10:35Z StefanStrobel
Die Version vom Sketch ist 1.8

Ansonsten ist FHEM uptodate



Otto123

Zitat von: AxelSchweiss am 04 Oktober 2017, 22:19:12
Hi
Immer wenn ich FHEM neu starte wird der Counter wieder auf 0 gesetzt.
die Beschreibung gab es schon mal viel weiter vorn. Liegt am Reset des Arduino nano.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz