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

StefanStrobel

Ich würde das so interpretieren dass bei 1l / Minute 0.2 Hz also 12 Impulse je Minute kommen.
Wenn Du Liter/Minute haben möchtest, dann sind das also 12 Pulses per Unit ...
Einfach mal testen ...

Gruß
   Stefan

der-Lolo

Guten Morgen Stefan,
ich habe nun den Durchflussmesser vor Ort verkabelt - leider kommt nix an auf dem Counter Device.

Ich kann weder einen Konfigurations noch einen Herdware Fehler ausschliessen - deswegen frage ich hier mal kurz um Hilfe...

Erstmal ein list des Arducounters

Internals:
   Board      NANO
   BoardDet   
   DEF        /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A50285BI-if00-port0@115200
   DeviceName /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A50285BI-if00-port0@38400
   FD         4
   FUUID      60ca5943-f33f-cc16-2887-3888100706131113
   HistIdx    1
   Initialized 1
   LASTOPEN   1624430527.53021
   LastHistSeq 0
   NAME       FlowMeter
   NOTIFYDEV  global
   NR         34
   NTFY_ORDER 50-FlowMeter
   PARTIAL   
   STATE      opened
   SketchCompile Jun 16 2021 20:14:03
   TYPE       ArduCounter
   VersionFirmware 3.34
   VersionModule 7.30 - 17.5.2020
   allowedPins 3,4,5,6,7,8,9,10,11,13,14,A0,15,A1,16,A2,17,A3,18,A4,19,A5,20,A6,21,A7
   buffer     
   deviceBooted 1624430529.56619
   devioLoglevel 3
   nextOpenDelay 60
   History:
     Seq      0 2021-06-23 08:42:09 Pin D3   0.000 seconds at 0 ->
   HistoryPin:
     D3
   READINGS:
     2021-06-23 08:43:11   calcCounterD3   0
     2021-06-23 08:43:11   calcCounterD3_i 0
     2021-06-23 08:43:11   calcCounterD4   0
     2021-06-23 08:43:11   calcCounterD4_i 0
     2021-06-23 08:43:11   countDiffD3     0
     2021-06-23 08:43:11   countDiffD4     0
     2021-06-23 08:43:11   interpolatedLongD3 0
     2021-06-23 08:43:11   interpolatedLongD4 0
     2021-06-23 08:43:11   longD3          0
     2021-06-23 08:43:11   longD4          0
     2021-06-23 08:43:11   pinD3           0
     2021-06-23 08:43:11   pinD4           0
     2021-06-23 08:43:11   powerD3         0.000
     2021-06-23 08:43:11   powerD4         0.000
     2021-06-23 08:43:11   rejectD3        0
     2021-06-23 08:43:11   rejectD4        0
     2021-06-23 08:42:07   state           opened
     2021-06-23 08:43:11   timeDiffD3      60001
     2021-06-23 08:43:11   timeDiffD4      60001
   runningCfg:
     3          P3 falling pullup min 5, R3 C0 D0/0 T0 N1585,0 X0
     4          P4 falling pullup min 3, R4 C0 D0/0 T0 N1585,0 X0
     I          30 60 2 2
     V          1
Attributes:
   disable    0
   enableHistory 1
   flowUnitTime 60
   pinD3      falling pullup min 5
   pinD4      falling pullup min 3
   pulsesPerUnit 12


Es gibt am FlowSensor 3 Adern: gelb, rot, schwarz
Ich habe am Arduino NANO pinD3 mit der gelben Ader belegt - rot auf +5V und schwarz auf GND
Ich messe 4,9V zwischen +5V und GND und 2,3V am pinD3

Fehlt noch etwas an der Konfiguration des Devices innerhalb FHEM..?
Muss ich noch irgendetwas zum NANO übertragen von FHEM aus?

Ich habe die Datei ArduCounter3.30.ino aus dem Contrib heruntergeladen auf meinen iMac - und dort via ArduinoIDE die Countersoftware auf den NANO geflasht.

Ich hoffe ich bekomme es ans laufen - am Raspberry habe ich durch "pusten" pule zählen können.
Jetzt wo das Ding im Wasserkreislauf verbaut ist kann ich nicht mehr hinein schauen und weiß nicht ob das TurbinenRad sich dreht ;)

Hardware defekt kann ich also nicht ausschliessen.

Noch ein Auszug des FHEM Logs beim letztem neustart.
Falls relevant - ich habbe einen aktiven USB Hub, der am RAPSI hängt, versorge den RASPI selbst aber auch über diesen HUB.

2021.06.23 08:33:56 1: Including ./log/fhem.save
2021.06.23 08:33:57 3: Optidrive: bad reading name 'KühlkörperTemp.' (allowed chars: A-Za-z/\d_\.-)
2021.06.23 08:33:57 3: FlowMeter: Notify called with events: INITIALIZED, open device and set timer to send hello to device
2021.06.23 08:33:57 3: Opening FlowMeter device /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A50285BI-if00-port0
2021.06.23 08:33:57 1: FlowMeter: Can't open /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A50285BI-if00-port0: No such file or directory
2021.06.23 08:33:57 3: Optidrive: RegisterAtIODev called from SetIODev registers Optidrive at modbusRTU with id 1, MODE master, PROTOCOL RTU
2021.06.23 08:33:57 3: Optidrive: Notify / Init: using modbusRTU for communication
2021.06.23 08:33:57 3: Opening PoolWago device 192.168.1.190:502
2021.06.23 08:34:00 1: PoolWago: Can't connect to 192.168.1.190:502: Connection timed out
2021.06.23 08:34:00 3: Opening modbusRTU device /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AG0KFFLW-if00-port0
2021.06.23 08:34:00 3: Setting modbusRTU serial parameters to 115200,8,N,1
2021.06.23 08:34:00 3: modbusRTU device opened
2021.06.23 08:34:00 0: Featurelevel: 6
2021.06.23 08:34:00 0: Server started with 23 defined entities (fhem.pl:24365/2021-05-01 perl:5.028001 os:linux user:fhem pid:547)
2021.06.23 08:34:03 3: FlowMeter: Invalid device display configuration
2021.06.23 08:35:32 1: OWX_Init called for bus 1wire with interface state opened, now going for detect
2021.06.23 08:35:32 1: OWX_SER::Detect 1-Wire bus 1wire: interface master DS2480 re-detected
2021.06.23 08:35:32 1: OWX_Discover: 1-Wire devices found on bus 1wire (SolarRLTemp,PoolTemp,AbsorberTemp)
2021.06.23 08:40:29 2: AttrTemplates: got 227 entries
2021.06.23 08:40:53 3: Opening FlowMeter device /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A50285BI-if00-port0
2021.06.23 08:40:53 1: FlowMeter: Can't open /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A50285BI-if00-port0: No such file or directory
2021.06.23 08:41:59 3: /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AG0KFFLW-if00-port0 disconnected, waiting to reappear (modbusRTU)
2021.06.23 08:42:01 3: Setting FlowMeter serial parameters to 115200,8,N,1
2021.06.23 08:42:01 3: /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A50285BI-if00-port0 reappeared (FlowMeter)
2021.06.23 08:42:03 3: Setting modbusRTU serial parameters to 115200,8,N,1
2021.06.23 08:42:03 3: /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AG0KFFLW-if00-port0 reappeared (modbusRTU)
2021.06.23 08:42:05 3: FlowMeter: sending h(ello) to device to ask for version
2021.06.23 08:42:07 3: FlowMeter: device didn't reply to h(ello). Is the right sketch flashed? Serial speed was 115200. Trying again with @38400
2021.06.23 08:42:07 3: Opening FlowMeter device /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A50285BI-if00-port0
2021.06.23 08:42:07 3: Setting FlowMeter serial parameters to 38400,8,N,1
2021.06.23 08:42:07 3: FlowMeter device opened
2021.06.23 08:42:09 3: FlowMeter: device: no config in EEPROM
2021.06.23 08:42:09 3: FlowMeter: device sent hello with outdated Arducounter Firmware (3.34) - please update!
2021.06.23 08:42:09 3: FlowMeter: unparseable message from device: T100 110
2021.06.23 08:42:10 3: FlowMeter: ConfigureDevice: send config
2021.06.23 08:42:10 3: FlowMeter: ConfigurePin sends old syntax to outdated firmware (3.34)
2021.06.23 08:42:10 3: FlowMeter: ConfigurePin creates command 4,2,1,3a
2021.06.23 08:42:10 3: FlowMeter: ConfigurePin sends old syntax to outdated firmware (3.34)
2021.06.23 08:42:10 3: FlowMeter: ConfigurePin creates command 3,2,1,5a
2021.06.23 08:42:10 3: FlowMeter: Invalid interval specification
2021.06.23 08:42:10 3: FlowMeter: ConfigureVerboseLevels creates command 1,0,0,0,0v
2021.06.23 08:42:10 3: FlowMeter: device: defined P4 falling pullup min 3
2021.06.23 08:42:10 3: FlowMeter: device: defined P3 falling pullup min 5
2021.06.23 08:42:10 3: FlowMeter: device: devVerbose set to 1
2021.06.23 08:42:10 3: FlowMeter: device: Status: ArduCounter V3.34 on NANO compiled Jun 16 2021 20:14:03
2021.06.23 08:42:10 3: FlowMeter: unparseable message from device: T100 110
2021.06.23 08:42:10 3: FlowMeter: device: no config in EEPROM
2021.06.23 08:42:10 3: FlowMeter: device: Next report in 28779 milliseconds
2021.06.23 08:43:11 3: FlowMeter: pin D4 (pin4) interpolating for 1369.57 secs until boot, 0 estimated pulses (before 0 in 60001 ms, now 0 in 60001 ms, avg ratio 0 p/s)
2021.06.23 08:43:11 3: FlowMeter: pin D3 (pin3) interpolating for 1330.57 secs until boot, 0 estimated pulses (before 0 in 60001 ms, now 0 in 60001 ms, avg ratio 0 p/s)
2021.06.23 08:44:07 1: /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AG0K8WU5-if00-port0 disconnected, waiting to reappear (1wire)
2021.06.23 08:44:07 1: OWX_SER::Query 1wire:  0 of 1 bytes in last attempt and state opened, this is an unrecoverable error
2021.06.23 08:44:07 1: OWX_Complex called while interface 1wire disconnected
2021.06.23 08:44:09 1: OWX_Complex called while interface 1wire disconnected
2021.06.23 08:44:10 1: OWX_Complex called while interface 1wire disconnected
2021.06.23 08:45:09 1: OWX_Init called for bus 1wire with interface state opened, now going for detect
2021.06.23 08:45:09 1: OWX_SER::Detect 1-Wire bus 1wire: interface master DS2480 re-detected
2021.06.23 08:45:10 1: OWX_Discover: 1-Wire devices found on bus 1wire (SolarRLTemp,PoolTemp,AbsorberTemp)
2021.06.23 08:45:10 1: /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AG0K8WU5-if00-port0 reappeared (1wire)



der-Lolo

Sorry fürs Spamen...

Ich habe nun von FHEM aus den NANO geflasht, musste nur avrdude installieren...
und siehe da es kommt was an...

Internals:
   Board      NANO
   BoardDet   
   DEF        /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A50285BI-if00-port0@115200
   DeviceName /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A50285BI-if00-port0@115200
   FD         14
   FUUID      60ca5943-f33f-cc16-2887-3888100706131113
   HistIdx    76
   Initialized 1
   LASTOPEN   1624446079.87703
   LastHistSeq 64500
   NAME       FlowMeter
   NOTIFYDEV  global
   NR         34
   NTFY_ORDER 50-FlowMeter
   PARTIAL   
   STATE      opened
   SketchCompile Jun  6 2020 12:40:29
   TYPE       ArduCounter
   VersionFirmware 4.26
   VersionModule 7.30 - 17.5.2020
   allowedPins 2,3,4,5,6,7,8,9,10,11,12,13,14,A0,15,A1,16,A2,17,A3,18,A4,19,A5,20,A6,21,A7
   buffer     
   deviceBooted 1624446082.58622
   devioLoglevel 3
   nextOpenDelay 60
   History:
     Seq  60834 2021-06-23 13:26:26 Pin D3   0.025 seconds at 0 -> pulse counted
     Seq  60835 2021-06-23 13:26:26 Pin D3   0.025 seconds at 1 -> gap
     Seq  60836 2021-06-23 13:26:26 Pin D3   0.025 seconds at 0 -> pulse counted
     Seq  60837 2021-06-23 13:26:26 Pin D3   0.024 seconds at 1 -> gap
     Seq  60838 2021-06-23 13:26:26 Pin D3   0.024 seconds at 0 -> pulse counted
     Seq  60839 2021-06-23 13:26:26 Pin D3   0.023 seconds at 1 -> gap
     Seq  60840 2021-06-23 13:26:26 Pin D3   0.025 seconds at 0 -> pulse counted
     Seq  60841 2021-06-23 13:26:26 Pin D3   0.023 seconds at 1 -> gap
     Seq  60842 2021-06-23 13:26:26 Pin D3   0.025 seconds at 0 -> pulse counted
     Seq  60843 2021-06-23 13:26:26 Pin D3   0.025 seconds at 1 -> gap
     Seq  60844 2021-06-23 13:26:26 Pin D3   0.023 seconds at 0 -> pulse counted
     Seq  60845 2021-06-23 13:26:26 Pin D3   0.025 seconds at 1 -> gap
     Seq  60846 2021-06-23 13:26:26 Pin D3   0.024 seconds at 0 -> pulse counted
     Seq  60847 2021-06-23 13:26:27 Pin D3   0.024 seconds at 1 -> gap
     Seq  60848 2021-06-23 13:26:27 Pin D3   0.023 seconds at 0 -> pulse counted
     Seq  60849 2021-06-23 13:26:27 Pin D3   0.025 seconds at 1 -> gap
     Seq  62047 2021-06-23 13:26:59 Pin D3   0.025 seconds at 1 -> gap
     Seq  62048 2021-06-23 13:26:59 Pin D3   0.024 seconds at 0 -> pulse counted
     Seq  62049 2021-06-23 13:26:59 Pin D3   0.026 seconds at 1 -> gap
     Seq  62050 2021-06-23 13:26:59 Pin D3   0.024 seconds at 0 -> pulse counted
     Seq  62051 2021-06-23 13:26:59 Pin D3   0.024 seconds at 1 -> gap
     Seq  62052 2021-06-23 13:26:59 Pin D3   0.026 seconds at 0 -> pulse counted
     Seq  62053 2021-06-23 13:26:59 Pin D3   0.024 seconds at 1 -> gap
     Seq  62054 2021-06-23 13:26:59 Pin D3   0.025 seconds at 0 -> pulse counted
     Seq  62055 2021-06-23 13:26:59 Pin D3   0.025 seconds at 1 -> gap
     Seq  62056 2021-06-23 13:26:59 Pin D3   0.025 seconds at 0 -> pulse counted
     Seq  62057 2021-06-23 13:26:59 Pin D3   0.025 seconds at 1 -> gap
     Seq  62058 2021-06-23 13:26:59 Pin D3   0.025 seconds at 0 -> pulse counted
     Seq  62059 2021-06-23 13:26:59 Pin D3   0.025 seconds at 1 -> gap
     Seq  62060 2021-06-23 13:26:59 Pin D3   0.023 seconds at 0 -> pulse counted
     Seq  62061 2021-06-23 13:26:59 Pin D3   0.026 seconds at 1 -> gap
     Seq  62062 2021-06-23 13:26:59 Pin D3   0.024 seconds at 0 -> pulse counted
     Seq  62063 2021-06-23 13:26:59 Pin D3   0.024 seconds at 1 -> gap
     Seq  62064 2021-06-23 13:26:59 Pin D3   0.025 seconds at 0 -> pulse counted
     Seq  62065 2021-06-23 13:26:59 Pin D3   0.023 seconds at 1 -> gap
     Seq  62066 2021-06-23 13:27:00 Pin D3   0.025 seconds at 0 -> pulse counted
     Seq  63264 2021-06-23 13:27:25 Pin D3   0.025 seconds at 0 -> pulse counted
     Seq  63265 2021-06-23 13:27:25 Pin D3   0.024 seconds at 1 -> gap
     Seq  63266 2021-06-23 13:27:25 Pin D3   0.024 seconds at 0 -> pulse counted
     Seq  63267 2021-06-23 13:27:25 Pin D3   0.025 seconds at 1 -> gap
     Seq  63268 2021-06-23 13:27:25 Pin D3   0.024 seconds at 0 -> pulse counted
     Seq  63269 2021-06-23 13:27:25 Pin D3   0.024 seconds at 1 -> gap
     Seq  63270 2021-06-23 13:27:25 Pin D3   0.025 seconds at 0 -> pulse counted
     Seq  63271 2021-06-23 13:27:25 Pin D3   0.024 seconds at 1 -> gap
     Seq  63272 2021-06-23 13:27:25 Pin D3   0.025 seconds at 0 -> pulse counted
     Seq  63273 2021-06-23 13:27:25 Pin D3   0.026 seconds at 1 -> gap
     Seq  63274 2021-06-23 13:27:25 Pin D3   0.024 seconds at 0 -> pulse counted
     Seq  63275 2021-06-23 13:27:25 Pin D3   0.025 seconds at 1 -> gap
     Seq  63276 2021-06-23 13:27:25 Pin D3   0.024 seconds at 0 -> pulse counted
     Seq  63277 2021-06-23 13:27:25 Pin D3   0.024 seconds at 1 -> gap
     Seq  63278 2021-06-23 13:27:26 Pin D3   0.024 seconds at 0 -> pulse counted
     Seq  63279 2021-06-23 13:27:26 Pin D3   0.025 seconds at 1 -> gap
     Seq  63280 2021-06-23 13:27:26 Pin D3   0.025 seconds at 0 -> pulse counted
     Seq  63281 2021-06-23 13:27:26 Pin D3   0.023 seconds at 1 -> gap
     Seq  63282 2021-06-23 13:27:26 Pin D3   0.026 seconds at 0 -> pulse counted
     Seq  63283 2021-06-23 13:27:26 Pin D3   0.023 seconds at 1 -> gap
     Seq  64481 2021-06-23 13:27:55 Pin D3   0.025 seconds at 1 -> gap
     Seq  64482 2021-06-23 13:27:55 Pin D3   0.026 seconds at 0 -> pulse counted
     Seq  64483 2021-06-23 13:27:55 Pin D3   0.024 seconds at 1 -> gap
     Seq  64484 2021-06-23 13:27:55 Pin D3   0.025 seconds at 0 -> pulse counted
     Seq  64485 2021-06-23 13:27:55 Pin D3   0.025 seconds at 1 -> gap
     Seq  64486 2021-06-23 13:27:55 Pin D3   0.025 seconds at 0 -> pulse counted
     Seq  64487 2021-06-23 13:27:55 Pin D3   0.025 seconds at 1 -> gap
     Seq  64488 2021-06-23 13:27:55 Pin D3   0.026 seconds at 0 -> pulse counted
     Seq  64489 2021-06-23 13:27:56 Pin D3   0.024 seconds at 1 -> gap
.......
     D3
     D3
     D3
     D3
.......
   OLDREADINGS:
   READINGS:
     2021-06-23 13:46:26   calcCounterD3   4046.75
     2021-06-23 13:46:26   calcCounterD3_i 142.833333333333
     2021-06-23 13:46:26   countDiffD3     0
     2021-06-23 13:46:26   interpolatedLongD3 48561
     2021-06-23 13:46:26   longD3          46847
     2021-06-23 13:46:26   pinD3           46847
     2021-06-23 13:46:26   powerD3         0.000
     2021-06-23 13:46:26   rejectD3        0
     2021-06-23 13:01:19   state           opened
     2021-06-23 13:46:26   timeDiffD3      60002
   runningCfg:
     3          P3fp m5, DR3C0D0/0T0X0
     4          P4fp m3, DR4C0D0/0T0X0
     I          30,60,2,2,50,4
     V          1,0,0,0,0
Attributes:
   disable    0
   enableHistory 1
   flowUnitTime 60
   pinD3      falling pullup min 5
   pulsesPerUnit 12


Ich hätte jetzt erwartet das das Reading calcCounterD3_i auf Null geht wenn aktuell kein Druchfluss herrscht (aktuelle Durchfluss)
Calc Counter D3 - wäre dann eine aufsummierte (bewegte menge insgesamt)

Komisch finde ich in der History die doppelten einträge hintereinander, also nicht im wechsel. Sowohl bei GAP als auch pulse counted.
Sollte ich meine def für den pin 3 anpassen..?

Ich habe eben sowohl Solaranlage als auch Chlorgenerator mitlaufen lassen - der Durchfluss wird also eher noch um ein paar l/min steigen - Später soll aber ja auch noch der FU für Energieersparnis sorgen - das würde wieder etwas weniger Durchfluss bedeuten.

Perspektivisch würde ich später am liebsten sowas machen wie --> 18Uhr schauen wieviel Liter bewegt wurden und abhängig von Tagestemperatur und Badebetrieb eine Pumpenrestlaufzeit berechnen. Diese dann so starten das gegen 23 Uhr die gewünschte Soll umwälzung erreicht würde.
Den Counter könnte ich dann zum Tageswechsel in ein readingsHistory schreiben und ablöschen.


StefanStrobel

Hallo,

das Reading calcCounterD3_i ist genauso wie calcCounterD3 selbst ein kumulierendes Reading.
calcCounterD3 zeigt typischerweise die insgesamt gezählte und interpolierte Menge (z.B. kWh oder auch l).
calcCounterD3_i zeigt wie viel von calcCounterD3 nicht wirklich gezählt sondern bei einem Neustart des Boards interpoliert wurde.
Wenn Du das Board mal trennst oder auf reset drückst, kann es ja nicht zählen bis es wieder läuft.
Das Fhem-Modul bemerkt das und rät dann anhand des Verbrauchs vor dem Neustart und dem Verbrauch nach dem Neustart, wie viele Impulse vermutlich verpasst worden sind. Die werden beim calcCounterD3 dazugezählt und im calcCounterD3_i explizit ausgewiesen.
Auf 0 gehen diese Readings nur wenn Du sie explizit auf 0 setzt. Sonst zählen die immer weiter.

Die doppelten Gaps / Pulses in der History kommen von Lücken in der History. Wenn Du genau hinschaust, dann ist dazwischen jeweils eine Lücke in der Sequence-Nummer.
Das mit der History ist mehr für Debugging gedacht. Wenn die Impulse in schneller Folge kommen, dann schafft es das Board evt. nicht alle History-Zeilen über die "langsame" serielle Schnittstelle zu schieben.

Gruss
   Stefan

der-Lolo

Das bedeutet alles ist gut konfiguriert..?
Ich bin begeistert - hatte echt ein bisschen Angst davor den ArduCounter einzusetzen, vom Prinzip her ist aber doch sehr einfach.

Tausen Dank für das Modul - für mein PoolFHEM eine echte bereicherung...

PS: als nächstes geht der FU via Modbus an den start - da schlage ich sicher wieder mit fragen auf ;)

Aurel_B

Liebe Alle,

ich habe eine Anschluss-/Verständnisfrage zur Wassermessung mittels Durchflussmesser. Ich habe total 3 Flow Meter (https://www.aliexpress.com/item/32450030424.html), jede pro Wohnung. Ziel ist, den Wasserverbrauch zu visualisieren (also "wieviel Wasser in Litern wurden pro Messintervall verbraucht"). Gemäss Webseite berechnet sich der Fluss wie folgt:

F(Hz)=(8.1xQ) -3%    Q=L/min (nehme an, das sollte +- 3% heissen)

Also wenn ich das richtig verstanden habe: 8.1 Pulse pro Sekunde bei 1L/min 8.1*60s == 486 Pulse pro Minute.

Konfiguraton des Arducounters (Flow Meter hängt am A0):

boardNANO
enableHistory1
interval60 600 5 2
pinA0falling pullup
readingFlowUnitTimeA060
readingPulsesPerUnitA0486

Ich habe nun den Hahn voll aufgedreht, 1 Liter Wasser (genau gemessen: 990ml) rausgelassen und die Zeit gemessen: es waren 10.6 Sekunden. Danach (erst nach 60s! Und nicht nach 5s wie ich eigentlich erwartet hätte von "interval 60 600 5 2"??) wurden folgende Werte gemeldet:


calcCounterA00.923868312757202
calcCounterA0_i0
countDiffA0448
interpolatedLongA0449
longA0449
pinA0449
powerA01.213
rejectA00
timeDiffA045580

Wie komme ich nun von diesen Werten auf meine 1 Liter Wasserverbrauch? Die 448 kommen in die Nähe von den errechneten 486 Impulsen für eine Flussrate von 1L/min. Aber da meine 1 Liter für die Messung innerhalb von ca. 10s rausgeflossen sind würde die Flussrate ja 6L/min entsprechen? Diese wären aber nur innerhalb von 10s in denen tatsächlich Wasser geflossen sind angefallen, die restlichen 50s der Messperiode fand kein Durchfluss statt. Also => 1/6*2916 (==Flussrate von 6l/min) + 5/6*0 (==Flussrate von 0l/min) == 486? Stimmt meine Überlegung?

Ich habe ein paar Minuten später langsam nochmals 1 Liter Wasser rausgelassen (genau: 974ml). Danach wurden folgende Werte angezeigt:


calcCounterA01.70987654320988
calcCounterA0_i0
countDiffA0382
interpolatedLongA0831
longA0831
pinA0831
powerA00.786
rejectA00
stateopened
timeDiffA060001

Ist das wirklich so einfach? Anzahl Pulse pro Messperiode / 486 == Anzahl Liter pro Messperiode? Dann wäre der verwendete Zähler recht ungenau: bei raschem Durchfluss entsprechen 1 Liter 448 Impulse, bei auf geschätzt 1/3 reduziertem Durchfluss aber nur noch 831 - 448 == 383 Impulse pro Liter.

Stehe gerade völlig auf dem Schlauch.

Nachtrag: die History:

Seq    882 2021-09-16 21:20:24 Pin A0   0.013 seconds at 1 -> gap
Seq    883 2021-09-16 21:20:24 Pin A0   0.011 seconds at 0 -> pulse counted
Seq    884 2021-09-16 21:20:24 Pin A0   0.012 seconds at 1 -> gap
Seq    885 2021-09-16 21:20:24 Pin A0   0.012 seconds at 0 -> pulse counted
Seq    886 2021-09-16 21:20:24 Pin A0   0.013 seconds at 1 -> gap
Seq    887 2021-09-16 21:20:24 Pin A0   0.012 seconds at 0 -> pulse counted
Seq    888 2021-09-16 21:20:24 Pin A0   0.014 seconds at 1 -> gap
Seq    889 2021-09-16 21:20:24 Pin A0   0.014 seconds at 0 -> pulse counted
Seq    890 2021-09-16 21:20:24 Pin A0   0.015 seconds at 1 -> gap
Seq    891 2021-09-16 21:20:25 Pin A0   0.017 seconds at 0 -> pulse counted
Seq    892 2021-09-16 21:20:25 Pin A0   0.020 seconds at 1 -> gap
Seq    893 2021-09-16 21:20:25 Pin A0   0.021 seconds at 0 -> pulse counted
Seq    894 2021-09-16 21:20:25 Pin A0   0.026 seconds at 1 -> gap
Seq    895 2021-09-16 21:20:25 Pin A0   0.029 seconds at 0 -> pulse counted
Seq    896 2021-09-16 21:20:25 Pin A0   0.035 seconds at 1 -> gap
Seq    897 2021-09-16 21:20:25 Pin A0   0.042 seconds at 0 -> pulse counted
Seq    898 2021-09-16 21:20:25 Pin A0   0.058 seconds at 1 -> gap
Seq    899 2021-09-16 21:20:25 Pin A0   0.077 seconds at 0 -> pulse counted
Seq    900 2021-09-16 21:20:25 Pin A0   0.150 seconds at 1 -> gap
Seq   1646 2021-09-16 21:23:36 Pin A0   0.039 seconds at 1 -> gap
Seq   1647 2021-09-16 21:23:36 Pin A0   0.036 seconds at 0 -> pulse counted
Seq   1648 2021-09-16 21:23:36 Pin A0   0.039 seconds at 1 -> gap
Seq   1649 2021-09-16 21:23:36 Pin A0   0.036 seconds at 0 -> pulse counted
Seq   1650 2021-09-16 21:23:36 Pin A0   0.039 seconds at 1 -> gap
Seq   1651 2021-09-16 21:23:36 Pin A0   0.037 seconds at 0 -> pulse counted
Seq   1652 2021-09-16 21:23:36 Pin A0   0.039 seconds at 1 -> gap
Seq   1653 2021-09-16 21:23:36 Pin A0   0.035 seconds at 0 -> pulse counted
Seq   1654 2021-09-16 21:23:36 Pin A0   0.039 seconds at 1 -> gap
Seq   1655 2021-09-16 21:23:36 Pin A0   0.037 seconds at 0 -> pulse counted
Seq   1656 2021-09-16 21:23:36 Pin A0   0.039 seconds at 1 -> gap
Seq   1657 2021-09-16 21:23:36 Pin A0   0.036 seconds at 0 -> pulse counted
Seq   1658 2021-09-16 21:23:36 Pin A0   0.039 seconds at 1 -> gap
Seq   1659 2021-09-16 21:23:37 Pin A0   0.036 seconds at 0 -> pulse counted
Seq   1660 2021-09-16 21:23:37 Pin A0   0.039 seconds at 1 -> gap
Seq   1661 2021-09-16 21:23:37 Pin A0   0.039 seconds at 0 -> pulse counted
Seq   1662 2021-09-16 21:23:37 Pin A0   0.048 seconds at 1 -> gap
Seq   1663 2021-09-16 21:23:37 Pin A0   0.057 seconds at 0 -> pulse counted

my-engel

Hallo,
ich habe mal eine Frage. Ich habe die Firmware auf einen ProMini geflasht und diesen an den
2.UART eines MapleCun angeschlossen. Der MapleCun läuft über LAN mit IP:Port (2325)

Es funktioniert soweit nur ist mir aufgefallen, dass die Werte aller 120 Sekunden und nicht
wie beim Nano an USB aller 60 Sekunden aktualisiert werden.
Kann dies am ProMini liegen da dieser mit 3.3V 8MHz läuft und nicht mit 16MHz?
Das Attribut flowUnitTime 60 bringt keine Änderung.
Die Werte kommen alle rein aber ich kann nicht prüfen ob die Berechnungen stimmen.

Des Weiteren funktioniert das Flashen nicht mit:
set ,,device" flash
da vermutlich der Port nicht angegeben wird. Kann man dieses mit ins Modul einbauen?

VG Uwe
Edit: hatte ich vergessen, musste die UART1 auch auf 57600 stellen,
da es bei anderen Geschwindigkeiten nicht funktionierte...

birdy

Hallo Stefan

Bei mir hängt am PIN 4 des  ArduCounter einen Durchflussmesser. Was mich interessiert ist nur die Gesamtmenge in Liter. Wie die momentan Durchflussmenge , Liter pro Minute oder so ist interessiert mich nicht. Das Ganze läuft relativ gut, es kommt aber immer wieder zu kleinen Abweichungen. Ich muss also den aktuellen Stand gelegentlich manuell abgleichen.
Der Durchflussmesser schaltet pro dl einmal von 0 auf 1 und zurück, als in Halbdeziliter Takt.

Wenn der ,,Hahn" geöffnet ist, liegt die maximale Durchflussmenge bei ca. 2.5 Liter pro Stunde.
Als max. 1 Statusübergang pro Minute, von 0 auf 1, oder Umgekehrt. Der ,,Hahn" kann aber auch Stunden, Tage oder gar Wochen komplett geschlossen bleiben.

PIN 4 habe ich wie folgt definiert. Pin4 falling pullup min 3000
Gibt es eine Möglichkeit sowohl für den UP- wie auch den DOWN- Zustand geleichzeitig eine minimale Länge zu definieren? 
Falls ja wie würde diese Definition aussehen?

Besten Dank für einen Tipp
birdy


Internals:
   Board      NANO
   BoardDet   
   DEF        /dev/ttyUSB0@38400
   DeviceName /dev/ttyUSB0@38400
   FD         5
   FUUID      5c750411-f33f-51b2-370d-212c15e972e22e88
   Initialized 1
   LASTOPEN   1632079026.9521
   NAME       AC
   NOTIFYDEV  global
   NR         21
   NTFY_ORDER 50-AC
   PARTIAL   
   STATE      opened
   SketchCompile Aug 12 2019 21:16:36
   TYPE       ArduCounter
   VersionFirmware 3.34
   VersionModule 7.30 - 17.5.2020
   allowedPins 3,4,5,6,7,8,9,10,11,13,14,A0,15,A1,16,A2,17,A3,18,A4,19,A5,20,A6,21,A7
   buffer     
   deviceBooted 1632079029.02103
   devioLoglevel 3
   nextOpenDelay 60
   READINGS:
     2021-09-20 17:09:18   OelVorrat       1927.1
     2021-09-20 17:09:18   OelZaehler      6527.7
     2021-09-20 17:09:18   OelZaehlerI     6527.7
     2021-09-20 17:09:18   StromZaehler    10784.51
     2021-09-20 17:09:18   calcCounter4    238.199999999955
     2021-09-20 17:09:18   calcCounter4_i  0
     2021-09-20 17:08:18   calcCounter6    3569.82000000984
     2021-09-20 17:08:18   calcCounter6_i  0.48
     2021-09-20 17:09:18   countDiff4      0
     2021-09-20 17:08:18   countDiff6      1
     2021-09-20 17:09:18   interpolatedLong4 65277
     2021-09-20 17:08:18   interpolatedLong6 1078451
     2020-12-28 00:27:30   long            53522
     2021-09-20 17:09:18   long4           65277
     2021-09-20 17:08:18   long6           1078261
     2021-09-20 17:09:18   pin4            9
     2021-09-20 17:08:18   pin6            794
     2021-09-20 17:09:18   power4          0.000
     2021-09-20 17:08:18   power6          0.372
     2021-09-20 17:09:18   reject4         0
     2021-09-20 17:08:18   reject6         4080
     2020-11-28 17:48:36   seq4            26
     2020-11-28 17:49:36   seq6            120
     2021-09-19 21:17:07   state           opened
     2021-09-20 17:09:18   timeDiff4       414500
     2021-09-20 17:08:18   timeDiff6       96852
   runningCfg:
     4          P4 falling pullup min 3000, R4 C0 D0/0 T0 N7340,0 X0
     6          P6 falling pullup min 75, R6 C0 D0/0 T0 N7340,0 X0
     I          60 360 0 0
     V          0
Attributes:
   flashCommand avrdude -p atmega328P -c arduino -b 57600 -P [PORT] -D -U flash:w:[HEXFILE] 2>[LOGFILE]
   interval   60 360
   pin4       falling pullup min 3000
   pin6       falling pullup 75
   pulsesPerKWh 100
   room       Keller
   userReadings OelZaehler {ReadingsVal("AC","long4",0)/10},OelZaehlerI {ReadingsVal("AC","interpolatedLong4",0)/10},OelVorrat {8454.8-ReadingsVal("AC","OelZaehlerI",0)},StromZaehler {ReadingsVal("AC","interpolatedLong6",0)/100}
   userattr   pin4 pin6 readingFactor6
   verbose    5
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 ansgru,

Deine Konfiguration
Zitat
interval   60 600 5 2
bedeutet laut Referenz
Zitat
interval <normal> <max> [<min> <min count> [<analog interval> <analog samples>]]
Defines the parameters that affect the way counting and reporting works. This Attribute expects at least two and a maximum of six numbers as value. The first is the normal interval, the second the maximal interval, the third is a minimal interval and the fourth is a minimal pulse count. The last two numbers are only needed for counting with reflective light barriers. They specify the delay between the measurements and the number of samples for each measurement.
...

Nach 5 Sekunden kommt also keine Meldung sondern erst nach 60 Sekunden. Wenn Du das schneller haben möchtest, dann muss der erste Wert kleiner sein.

Gruss
   Stefan

StefanStrobel

Hallo my-engel,

hast Du die Firmware denn neu für den ProMini compiliert?

Gruss
   Stefan

StefanStrobel

Hallo birdy,

den Anwendungsfall mit hin- und herschalten hatte ich noch nicht.
Allerdings wird die minimale Pulslänge ohnehin schon auf beide Zustände (0/1) angewendet.
Eigentlich sollte es also direkt funktionieren.

Gruss
   Stefan

birdy

Hallo Stefan

Danke für die schnelle Antwort

Zitat von: StefanStrobel am 20 September 2021, 20:07:50
den Anwendungsfall mit hin- und herschalten hatte ich noch nicht.......

Ist immer noch derselbe Anwendungsfall wie in #211  also eingentlich nichts Neues   ;)

Es ist natürlich nicht auszuschliessen, dass der Durchfluss auch genau am Schaltpunt zum Stillstand kommt. Würde aber trotzen erwarten, dass der Schalter sauber schaltet und nicht flattert..

Ich werde also weiterhin ab und zu beim Durchflussmesser vorbeischauen, und falls es notwendig sein sollte, manuell abgleichen.


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)

my-engel

Hallo Stefan,

JaNein
hatte es anfangs mit der "ArduCounter3.30.ino" aus dem contrib Verzeichnis compiliert (V3.34 vom 12.8.19)
Da diese sehr alt ist und ich keine neueren Quellen gefunden hatte, habe ich einen FTDI per USB mit FHEM verbunden und
über diesen den ProMini geflasht, sprich es ist die hex vom Nano drauf...
Hast du die neueren ArduCounterXXX.ino irgendwo veröffentlicht?

VG Uwe

Aurel_B

Hallo Stefan,

Zitat von: StefanStrobel am 20 September 2021, 20:00:59
Deine Konfigurationbedeutet laut Referenz
Nach 5 Sekunden kommt also keine Meldung sondern erst nach 60 Sekunden. Wenn Du das schneller haben möchtest, dann muss der erste Wert kleiner sein.

besten Dank für deine Antwort! Dann habe ich das falsch verstanden -> habe gedacht, dass bei:

interval   60 600 5 2

Normalerweise alle 60s, wenn aber keine Daten kommen erst nach 10min gepollt wird. Wenn aber sehr rasch Daten kommen (>= 2 Inputs), dann wird bereits nach 5s ein Wert eingelesen... Habe deine ausführliche Erläuterung in https://forum.fhem.de/index.php/topic,19285.msg513028.html#msg513028 gefunden und glaub ich ansatzweise verstanden  8) Finde den Wiki Eintrag hierzu etwas verwirrend und würde folgenden Eintrag vorschlagen:

Zitatinterval <normal> <max> [<min> <min count> [<analog interval> <analog samples>]]
    Defines the parameters that affect the way counting and reporting works.
    This Attribute expects at least two and a maximum of six numbers as value. The first is the normal interval, the second the maximal interval, the third is a minimal interval and the fourth is a minimal pulse count. The last two numbers are only needed for counting with reflective light barriers. They specify the delay between the measurements and the number of samples for each measurement.
   
    The normal use case (where the normal interval is smaller than the maximum interval) would be where the Arduino board just counts and remembers the time between the first impulse and the last impulse for each pin.
    After the normal interval has elapsed the Arduino board reports the count and time for those pins where impulses were encountered.
    This means that even though the normal interval might be 10 seconds, the reported time difference can be different because impulses are observed by start and end point. The Power (e.g. for energy meters) is then calculated based of the counted impulses and the time difference between the first and the last impulse.
    For the next interval, the starting time will be the time of the last impulse in the previous reporting period and the time difference will be taken up to the last impulse before the reporting interval has elapsed.
    The second, third and fourth numbers (maximum, minimal interval and minimal count) exist for the edge cases where the pulse frequency is very low and the reporting time is comparatively short.
    For example if the normal interval (first number) is 60 seconds but there is only one impulse every 90 seconds you will have spikes in your power readings (where there should be none).
    This can be avoided by choosing the max/min/min count numbers wisely: If impulses occur less frequently than the normal interval readings will be prolonged until max interval is reached. If however the last max interval has had no pulses, a new max interval has just started and right after it started an impuls occurs this would again cause spikes the way Arducounter works. To prevent those spikes from happening use <min> / <min count>. They make sure, that more than <min count> impulses and less than <min> time between impulses must have occured for the impulses to be considered as part of a normal interval (=a steady flow of impulses). If however it's just a single impulse which comes at an "akward" moment as mentioned before it won't be considered during a normal interval unless other impulses follow. Instead the normal interval will be prolonged until max interval is reached.

Wenn das so ok ist für dich würde ich den Wikitext abändern?

Ah und zum Wasserzähler (meine ursprüngliche Frage): irgend etwas wird gezählt (siehe Graphik), mir reicht es für den Moment. Die Daten sind auch schlüssig wenn ich das mit den Temperaturwerten des Boilers vergleiche. Werde nach einem halben Jahr oder so den longA0 Wert mit der tatsächlich geflossenen Litermenge gemäss Wasseruhr abgleichen und dann eventuell schlauer sein  ;D

StefanStrobel