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

Otto123

Moin Fritz,

rüschdüsch  ;D ;D ;D

So etwa -> attr userReadings S0CounterWP Zaehler monotonic {ReadingsVal("S0CounterWP","pin3",0)/2000}
Dann gehst Du vor Deinen Zähler liest den Zählerstand ab und machst setreading S0CounterWP Zaehler <Wert> in und Zukunft sollte alles synchron laufen.

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

FunkOdyssey

Ich habe auch das Problem, dass sich der Counter bei jedem Pi-Neustart zurücksetzt.
Man kann das also mit nem 10uf-Kondensator lösen?
Aber warum wird das Reading überhaupt überschrieben? Sind die Werte nicht im fhem.state und werden wiederhergestellt? Warum lässt man es dann zu, dass der Nano die Werte nullt?
Oder wo liegt mein Gedankenfehler?

Otto123

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

FunkOdyssey

Ja, das kannte ich schon. Darum hatte ich das mit dem Kondensator auch erwähnt.
Ich frage mich nur, warum sich der Counter davon irritieren lässt, da man in FHEM doch alles hat. Der Arduino muss doch nur inkrementieren. Der eigentliche Wert steckt doch im Reading und nicht im Arduino, oder?

Otto123

ZitatDer interne Zähler ist ja unabhängig von der Ausgabe der Impulse je Intervall und alle paar Wochen läuft der sowieso über.

In dem Du das userreadings wie oben erwähnt anlegst, passiert ja genau das. Die gezählten Impulse werden einfach in FHEM inkrementiert. Dann steckt der eigentliche Wert im Reading.

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

FunkOdyssey

Oh man. Ich war die ganze Zeit auf die Hardware fixiert und sehe jetzt erst, dass in jedem zweiten Post über userreadings die Rede ist. Sorry. Das habe ich glatt übersehen.

Mein Counter-Reading lautet "Gas".

Ich hoffe, dass der folgende Ansatz funktioniert.

userReadings Zaehler:Gas.* monotonic {ReadingsVal($name,"Gas",0)}

Ich wundere mich über den modifier "monotonic". Laut CommandRef:

Zitatmonotonic: wenn die Differenz zw. dem aktuellen und dem vorherigen Wert positiv ist wird diese Differenz zum Reading addiert. Damit lässt sich von einem Zähler der bei Stromverlust zurückgesetzt wird ein monoton wachsender Zähler ableiten.

Den habe ich zuvor noch nie gesehen. Hoffentlich bewirkt er Wunder. :-)




Wieso beschäftige ich mich eigentlich immer in der Sommerzeit mit dem Gas-Zähler? :-)
Da muss man tagelang auf eine Veränderung warten. Eigentlich gut - aber schlecht zum Debuggen.
Da muss der Magnet halt herhalten. :-)

FunkOdyssey

#171
Ich habe nun seit etwa einem Monat den ArduCounter im Betrieb. Im Vergleich zu vorher (GPIO) habe ich endlich aussagekräftige Plots und der GasCalculator rechnet nun auch besser. :-)

Aber irgendwie laufen FHEM-Zähler und der echte Gaszähler (Elster BK-4M) auseinander.


Datum FHEM Zähler Differenz
09.09.2017 3953,826 3953,765 0,061
16.09.2017 3957,156 3957,107 0,049
18.09.2017 3957,666 3957,614 0,052


Mein ArduCounter:
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         4
   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
   READINGS:
     2017-09-21 12:14:24   Gas             0
     2017-09-21 12:14:24   Zaehler         867
     2017-09-21 12:14:24   power4          0.000
     2017-09-21 09:39:16   state           opened
Attributes:
   factor     100
   flashCommand avrdude -p atmega328P -c arduino -P [PORT] -D -U flash:w:[HEXFILE] 2>[LOGFILE]
   interval   60 300
   pinD4      falling pullup
   readingNameCount4 Gas
   userReadings Zaehler:Gas.* monotonic {ReadingsVal($name,"Gas",0)}
   userattr   pinD4 readingNameCount4 readingNamePower4


Hat jemand einen Tipp, wie ich das in den Griff bekommen kann? Vielen Dank.




Zu dieser Jahreszeit hat man ja nur wenige Zyklen, wo nur für kurze Zeit Gas benötigt wird. Im Thread habe ich aus ausführlichen Ausführungen zu den verschiedenen Intervallen (normal max min mincout) gelesen.

Ich versuche es mal mit: interval 60 600 10

Nur mincount habe ich noch nicht verstanden.

birdy

Hallo zusammen

Bin gerade dabei mich mit dem ArduCounter vertraut zu machen. Momentan noch mit einem Versuchsaufbau auf einem Breadboard. Ich verwende einem 10uF Kondensator, Sketch V1.8 und die S0 Schnittstelle simuliere momentan mit einem Taster.

Dabei ist mir aufgefallen, dass jeweils immer der erste Impuls (nach Reset oder Stromunterbruch) ignoriert wird. Ab dem zweiten Impuls wird dann zuverlässig gezählt.
Ist dieses (? Fehl- ?) Verhalten auch sonst noch jemandem aufgefallen?

@ FunkOdyssey: Könnte dies deine Abweichungen erklären?

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)

StefanStrobel

Hallo birdy,

wenn der erste Impuls scheinbar nicht gezählt wird, könnte das an einer falschen Polarität liegen,
so dass nicht die Impulse sondern die Pausen zwischen den Impulsen gezählt werden.
Poste doch mal Deine Konfiguration und ein Log mit Verbose 5...

Gruss
   Stefan

StefanStrobel

Hallo FunkOdyssey,

weicht der Zählerstand im laufenden Betrieb ab oder hattest Du Unterbrechungen (Fhem-Neustart o.ä.) dazwischen?

Gruss
   Stefan

FunkOdyssey

Hmm. Ich hatte definitiv einige Neustarts dazwischen. Ich halte mein FHEM fast tagaktuell.

birdy

Zitat von: StefanStrobel am 23 September 2017, 14:18:01
...könnte das an einer falschen Polarität liegen,

Hallo Stefan

An der falschen Polarität von was?

Konfig:

Internals:
   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.71 - 9.5.2017
   buffer
   READINGS:
     2017-09-23 23:02:55   pin4            0
     2017-09-23 23:02:55   power4          0.000
     2017-09-23 11:44:17   state           opened
Attributes:
   factor     10000
   flashCommand avrdude -p atmega328P -c arduino -P [PORT] -D -U flash:w:[HEXFILE] 2>[LOGFILE]
   pinD4      rising pullup
   userattr   pinD4
   verbose    5



Testablauf

23:18:30   Reset ausgelöst
23:18:40   1. Impuls
23:18:50   2. Impuls

Log:


2017.09.23 23:18:30 3: Opening AC device /dev/ttyUSB0
2017.09.23 23:18:30 3: Setting AC serial parameters to 38400,8,N,1
2017.09.23 23:18:30 3: AC device opened
2017.09.23 23:18:30 5: SW: r

2017.09.23 23:18:31 3: AC: device sent setup message, V1.8
2017.09.23 23:18:31 4: AC: device reported firmware 1.8
2017.09.23 23:18:31 3: AC: ConfigureDevice calls Attr with pinD4 rising pullup
2017.09.23 23:18:31 5: SW: 4,3,1a

2017.09.23 23:18:31 3: AC: device: defined pin 4 PCInt pin 20, iMode rising, no min len, count 0 (+0) in 0 ms
2017.09.23 23:19:30 4: AC: Pin 4 (pin4) count 1 (diff 1) in 10.280s, result 3.502
2017.09.23 23:19:30 5: AC: interval 23:19:20 until 23:19:30
2017.09.23 23:19:30 5: AC: set readings power4 to 3.502, timeDiff4 to 10280 and countDiff4 to 1
2017.09.23 23:19:30 5: AC: Device Time 41953.51, Drift -0.141s in 269.974s, -0.05%


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)

StefanStrobel

Hallo birdy,

Die ArduCounter Firmware beginnt beim ersten Impuls mit der Messung und hat beim zweiten Impuls erstmals ein Intervall, mit dem gerechnet werden kann.
Der erste Impuls geht daher in der Zählung verloren, was aber normalerweise nicht weiter interessant ist, da vor dem Neustart ja typischerweise noch viel mehr Impulse nicht gezählt werden können
(wenn ArduCounter nicht läuft bzw. Fhem gerade neu startet, kann nicht gezählt werden).

Wenn die Firmware den ersten Impuls schon berücksichtigen würde, würde das die Messung ungenauer machen, da dann das zugehörige Intervall unbekannt ist bzw. Impulse / Intervall nicht korrekt ist.

Man könnte natürlich versuchen abzuschätzen, wie viele Impulse nach einem Neustart unter Annahme des aktuellen Energieverbrauchs bis zum Weiterzählen verpasst worden sein könnten... Aber ich denke das ist so oder so falsch.

Zur Polarität:
Da ist vor allem dann interessant, wenn Du die Pulslängen überwachst (z.B. 30 als minimale Pulslänge um Störsingnale ignorieren zu können). Dann gibt rising oder falling an, ob die Impulse auf 0 gehen oder 1.
wenn Du "pullup" angegeben hast, vermute ich, dass Dein Zähler als Impuls den Ausgang auf Masse zieht. Das ist auch bei meinen Stromzählern der Fall.
Mit "rising sagst Du aber dass die steigende Flanke gezählt werden soll. Das wäre gerade falsch herum und Du würdest Pausen statt Impulse überwachen.

Gruss
   Stefan

StefanStrobel

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...

Gruss
   Stefan

FunkOdyssey

Ich probiere das morgen mal aus.
Ich kann mir aber irgendwie nicht vorstellen, dass ein Neustart die Differenzen vollständig verursacht. Ich habe am Tag gerade einmal zwei-drei Zyklen wo der Gaszähler kurz anläuft. Da muss ich schon richtig Pech haben, dass ich genau dann mein FHEM neu starte. Da stehe ich meistens in der Dusche. 😄

Okay, es wird vielleicht der erste Impulse nicht gezählt, weil es ohne Zeitdelta halt kein Intervall geben kann. Ich werde die Zähler gleich mal wieder angleichen und morgen weiterschauen.