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

Hallo Stefan,

ich mache das morgen, heute geht noch nicht.

Ich mache das so, dass es möglichst gut nachvollziehbar ist!

Danke Dir bis dahin

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

Otto123

Hallo Stefan,

ich habe mal alle Dateien zusammengepackt.
Ich habe jeweils ein Stunde mitgeschrieben, 13:00 Uhr bis 14:00 mit Version 1.5 dann umgestellt und mit Version 1.6 von 14:30 bis 15:30 Uhr
Hardware ist alles so geblieben, nur geflashed und Modul kopiert, FHEM neu gestartet und Arduino Reset.

Ich habe den Eindruck, der zählt mit Version 1.6 einfach doppelt.

Zählerstände Ac und in echt abgelesen
Filelog
Fhemlog
Bild vom Plot gestreckt
List vom define


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

BillyPbg

Hallo Otto,

ändere Mal von "rising pullup" auf "falling pullup 30" bzw. die "30ms" entsprechend Deines S0-Zählers.

Bei mir, wie offensichtlich auch bei Stefan, sind es z.B. 90ms.
Du zählst die Pausen, keine Impulse, somit zählt Dein Counter bei Spikes bzw. fehlerhaften Impulsen mindestens doppelt...

Zitiere Stefan:
"falling" gibt an, dass der Impuls entsprechend mit der fallenden Flanke beginnt (sonst wird die Länge der Pause gemessen und nicht die Länge des Pulses) und das 30 steht für minimale Pulslänge von 30 ms.

Gruß
BillyPbg

Otto123

Hi BillyPbg,

kann ich machen, aber Dein Zitat stammt von der Version 1.5. damit funktioniert alles. Meine Zähler haben Open Collector Ausgänge die liefern saubere Impulse. Und warum sollte die Zählung nur von der Version abhängen? Ist für mich unlogisch.

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

StefanStrobel

Hallo,

Der entscheidende Hinweis war die Ausgabe zu get info aus dem Log.
Da steht iMode change ... also wird bei jeder Ämderung ein Interrupt ausgelöst.
Ich habe ja die Kommunikation zwischen Fhem und dem Arduino umgebaut. Im Sketch hat in einem case ein break gefehlt. So wurde aus RISING ein CHANGE und bei jedem Impuls wird zwei mal gezählt...
Bei falling bzw. wenn die Pulslänge geprüft wird sollte alles stimmen.
Update kommt. Ich teste es nur noch ein wenig ;-)

Gruß
    Stefan

Otto123

Hallo Stefan,

na dann war das ja Glück, dass ich mal get info gedrückt hab. Und beim kopieren ist mir das change auch aufgefallen. Da wollte ich noch was dazu schreiben, habe ich aber dann beim zusammenkopieren vergessen.
Ich wollte eigentlich die get info Ausgaben noch separat dazu schreiben, das wäre ja dann der entscheidende Hinweis gewesen.
Jetzt mit 1.5 steht rising.  8)

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

StefanStrobel

So, hier eine neue Version mit der letzten Korrektur.
Vielen Dank für die Unterstützung bei der Fehlersuche :-)
Ich hab auch noch was neues eingebaut. Das Modul versucht jetzt nebenbei noch die Abweichung des millis() Timers im Arduino zu ermitteln. Der weicht ja z.B. auch wegen der Interrupts ab. Wenn es sich lohnt, könnte man in einer künftigen Version diese Abweichung bei der Berechnung berücksichtigen. Vermutlich wäre das aber nur Spielerei ;-)

Das neue Modul benötigt auch wieder einen neuen Sketch bzw. neue Firmware. Anbei die Dateien.
Wenn es bei Euch soweit klappt, würde ich alles einchecken und von contrib in den offiziellen Fhem-Zweig verschieben, so dass es künftig per Update verteilt wird. Ich denke inzwischen ist es reif dafür.

Gruss
   Stefan

Otto123

Moin Stefan,

danke! Test läuft  8) get info sieht gut aus  ;)

2017.01.05 11:37:24 5: AC: ReadAnswer called
2017.01.05 11:37:24 4: AC: device reported firmware 1.8
2017.01.05 11:37:24 3: AC: device: normal interval 60000
2017.01.05 11:37:24 3: AC: device: max interval 300000
2017.01.05 11:37:24 3: AC: device: min interval 2000
2017.01.05 11:37:24 3: AC: device: min count 1
2017.01.05 11:37:24 3: AC: device: pin 4 PCInt pin 20, iMode rising, no min len, count 16 (+4) in 28413 ms
2017.01.05 11:37:24 3: AC: device:   first at 900, last at 22225, avg len 0
2017.01.05 11:37:24 3: AC: device: pin 5 PCInt pin 21, iMode rising, no min len, count 0 (+0) in 112089 ms
2017.01.05 11:37:24 3: AC: device: pin 6 PCInt pin 22, iMode rising, no min len, count 3 (+1) in 29745 ms
2017.01.05 11:37:24 3: AC: device:   first at 540, last at 540, avg len 0
2017.01.05 11:37:24 3: AC: device: Next report in 36557 Milliseconds
2017.01.05 11:37:24 5: AC: ReadAnswer matched Next report in [0-9]+ Milliseconds

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

BillyPbg

Hallo Stefan,

schlechte News...

Die aktuelle Version  ( Vers.1.8 ) hat einen FileLog,Bug:
Beim Zeitstempel fehlt das Datum:

Auszug:
...
20:05:16 ArduCOUNTER power5W: 61 W
20:05:16 ArduCOUNTER lastMsg5: R5 C263 D1 T58542 N8602371 X0 F58542 L58542 A90
20:05:16 ArduCOUNTER pin5: 263
20:04:17 ArduCOUNTER power5: 0.061
2017-01-05_20:04:16 ArduCOUNTER Verbrauch5kWh: 0.298 kWh (UserReading, zum Vergleich)
20:04:16 ArduCOUNTER power5W: 63 W
20:04:16 ArduCOUNTER lastMsg5: R5 C262 D1 T56699 N8542371 X0 F56699 L56699 A90
20:04:16 ArduCOUNTER pin5: 262
20:03:19 ArduCOUNTER power5: 0.063
2017-01-05_20:03:16 ArduCOUNTER Verbrauch5kWh: 0.297 kWh (UserReading, zum Vergleich)
...

Ansonsten bin ich noch beim Austesten - Bericht/ Ergebnis folgt...

Gruß
BillyPbg


BillyPbg

Kleiner Nachtrag...

fand gerade zwei Perl-Warnungen direkt nach/während der Einspielung der ".pm" im zentralen LogFile:

2017.01.05 16:37:59.670 1: PERL WARNING: Argument "" isn't numeric in numeric ge (>=) at ./FHEM/98_ArduCounter.pm line 624.
2017.01.05 16:37:18.371 1: PERL WARNING: Argument "" isn't numeric in subtraction (-) at ./FHEM/98_ArduCounter.pm line 631.
[/b]
2017.01.05 16:36:43.716 1: PERL WARNING: Subroutine ArduCounter_Ready redefined at ./FHEM/98_ArduCounter.pm line 808.
2017.01.05 16:36:43.713 1: PERL WARNING: Subroutine ArduCounter_ReadAnswer redefined at ./FHEM/98_ArduCounter.pm line 734.
2017.01.05 16:36:43.709 1: PERL WARNING: Subroutine ArduCounter_Read redefined at ./FHEM/98_ArduCounter.pm line 709.
2017.01.05 16:36:43.705 1: PERL WARNING: Subroutine ArduCounter_Parse redefined at ./FHEM/98_ArduCounter.pm line 536.
2017.01.05 16:36:43.693 1: PERL WARNING: Subroutine ArduCounter_HandleVersion redefined at ./FHEM/98_ArduCounter.pm line 519.
2017.01.05 16:36:43.691 1: PERL WARNING: Subroutine ArduCounter_Get redefined at ./FHEM/98_ArduCounter.pm line 483.
2017.01.05 16:36:43.688 1: PERL WARNING: Subroutine ArduCounter_Set redefined at ./FHEM/98_ArduCounter.pm line 384.
2017.01.05 16:36:43.681 1: PERL WARNING: Subroutine ArduCounter_Attr redefined at ./FHEM/98_ArduCounter.pm line 245.
2017.01.05 16:36:43.673 1: PERL WARNING: Subroutine ArduCounter_HelloTimeout redefined at ./FHEM/98_ArduCounter.pm line 233.
2017.01.05 16:36:43.671 1: PERL WARNING: Subroutine ArduCounter_SendHello redefined at ./FHEM/98_ArduCounter.pm line 214.
2017.01.05 16:36:43.669 1: PERL WARNING: Subroutine ArduCounter_Write redefined at ./FHEM/98_ArduCounter.pm line 195.
2017.01.05 16:36:43.668 1: PERL WARNING: Subroutine ArduCounter_Notify redefined at ./FHEM/98_ArduCounter.pm line 165.
2017.01.05 16:36:43.666 1: PERL WARNING: Subroutine ArduCounter_Undef redefined at ./FHEM/98_ArduCounter.pm line 156.
2017.01.05 16:36:43.665 1: PERL WARNING: Subroutine ArduCounter_ConfigureDevice redefined at ./FHEM/98_ArduCounter.pm line 137.
2017.01.05 16:36:43.663 1: PERL WARNING: Subroutine ArduCounter_Define redefined at ./FHEM/98_ArduCounter.pm line 105.
2017.01.05 16:36:43.660 1: PERL WARNING: Subroutine ArduCounter_Initialize redefined at ./FHEM/98_ArduCounter.pm line 71.

Gruß
BillyPbg

StefanStrobel

Hallo BillyPbg,

danke für's Testen!
Offensichlich verwendest Du das readingStartTime Feature ;-)

Hier nochmal ein Update. Bei mir kommen keine Warnings mehr.

Gruss
    Stefan

BillyPbg

Hallo Stefan,

ALLES SUPI!
Danke für den erstklassigen Support!

Melde mich mit meinem Feedback voraussichtlich Sonntag oder Montag.

Gru

Otto123

Hallo Stefan,

habe gerade gemerkt: die Zähler im Arduino werden jetzt aber wieder beim neustart von FHEM gelöscht.

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

StefanStrobel

Hallo Otto,

bei mir macht er das nicht:

2017.01.06 14:41:34 4: ACTest: Pin 4 (pin4) count 79 (diff 0) in 60.000s, result 0.000
2017.01.06 14:41:34 5: ACTest: interval 14:40:34 until 14:41:34
2017.01.06 14:41:34 5: ACTest: readingStartTime4 specified: setting reading timestamp to 14:40:34
2017.01.06 14:41:34 5: ACTest: set readings power4 to 0.000, timeDiff4 to 60000 and countDiff4 to 0
2017.01.06 14:41:34 5: ACTest: Device Time 63480, Drift -0.099s in 119.901s, -0.08%

2017.01.06 14:41:43 0: Server shutdown
2017.01.06 14:41:46 1: Including fhem.cfg
2017.01.06 14:41:46 3: telnetPort: port 7072 opened
2017.01.06 14:41:47 3: WEB: port 8083 opened
2017.01.06 14:41:47 3: WEBphone: port 8084 opened
2017.01.06 14:41:47 3: WEBtablet: port 8085 opened
2017.01.06 14:41:48 2: eventTypes: loaded 256 events from ./log/eventTypes.txt
2017.01.06 14:41:52 1: Including ./log/fhem.save
2017.01.06 14:41:52 5: ACTest: Notify called with events: INITIALIZED, open device and set timer to send hello to device
2017.01.06 14:41:52 3: Opening ACTest device /dev/ArduinoSainsmart
2017.01.06 14:41:52 3: Setting ACTest serial parameters to 38400,8,N,1
2017.01.06 14:41:52 3: ACTest device opened
2017.01.06 14:41:52 0: Featurelevel: 5.7
2017.01.06 14:41:52 0: Server started with 15 defined entities (fhem.pl:12804/2016-12-17 perl:5.020002 os:linux user:fhem pid:12271)
2017.01.06 14:41:55 3: ACTest: sending h(ello) to device to ask for version
2017.01.06 14:41:55 5: SW: h

2017.01.06 14:41:55 3: ACTest: device replied to hello, V1.8
2017.01.06 14:41:55 4: ACTest: device reported firmware 1.8
2017.01.06 14:41:55 3: ACTest: ConfigureDevice calls Attr with interval 30 60
2017.01.06 14:41:55 5: SW: 30,60,0,0i

2017.01.06 14:41:55 3: ACTest: ConfigureDevice calls Attr with pin4 rising pullup
2017.01.06 14:41:55 5: SW: 4,3,1a

2017.01.06 14:41:55 3: ACTest: device: intervals set to 30 60 0 0
2017.01.06 14:41:55 3: ACTest: device: defined pin 4 PCInt pin 20, iMode rising, no min len, count 79 (+0) in 21021 ms

2017.01.06 14:42:34 4: ACTest: Pin 4 (pin4) count 79 (diff 0) in 60.000s, result 0.000
2017.01.06 14:42:34 5: ACTest: interval 14:41:34 until 14:42:34
2017.01.06 14:42:34 5: ACTest: readingStartTime4 specified: setting reading timestamp to 14:41:34
2017.01.06 14:42:34 5: ACTest: set readings power4 to 0.000, timeDiff4 to 60000 and countDiff4 to 0
2017.01.06 14:42:34 5: ACTest: Initialize clock offset to 1483646614.23288
2017.01.06 14:42:34 5: ACTest: Device Time 63540, Drift 0.000s in 0.000s


Beim Starten schickt Fhem einen (h)ello Befehl an den Arduino, der meldet sich und dann werden die Pins nochmal übermittelt.
Der interne Zähler bleibt dabei unverändert (bei mir im obigen Log auf 79).

Es ist natürlich denkbar, dass ein anderer Arduino sich beim Öffnen der seriellen Schnittstelle resettet.
Wie sieht das bei Dir im Log aus?

Gruss
    Stefan

Otto123

Hallo Stefan,

naja bei mir macht er genau das nicht, die Zähler sind null. Ich habe mal ein get info gemacht, dann shutdwon restart dann sieht man was er macht und dann noch ein get info.
2017.01.06 10:08:22 3: AC: Sending info command to device
2017.01.06 10:08:22 3: AC: device: normal interval 60000
2017.01.06 10:08:22 3: AC: device: max interval 300000
2017.01.06 10:08:22 3: AC: device: min interval 2000
2017.01.06 10:08:22 3: AC: device: min count 1
2017.01.06 10:08:22 3: AC: device: pin 4 PCInt pin 20, iMode rising, no min len, count 0 (+0) in 278826 ms
2017.01.06 10:08:22 3: AC: device: pin 5 PCInt pin 21, iMode rising, no min len, count 64 (+0) in 144995 ms
2017.01.06 10:08:22 3: AC: device: pin 6 PCInt pin 22, iMode rising, no min len, count 11 (+0) in 29646 ms
2017.01.06 10:08:22 3: AC: device: Next report in 49917 Milliseconds
2017.01.06 10:14:55 0: Server shutdown
....
2017.01.06 10:15:12 3: AC: device sent setup message, V1.8
2017.01.06 10:15:12 3: AC: ConfigureDevice calls Attr with pinD4 rising pullup
2017.01.06 10:15:12 3: AC: ConfigureDevice calls Attr with pinD5 rising pullup
2017.01.06 10:15:12 3: AC: ConfigureDevice calls Attr with interval 60 300
2017.01.06 10:15:12 3: AC: ConfigureDevice calls Attr with pinD6 rising pullup
2017.01.06 10:15:12 3: AC: device: defined pin 4 PCInt pin 20, iMode rising, no min len, count 0 (+0) in 0 ms
2017.01.06 10:15:12 3: AC: device: defined pin 5 PCInt pin 21, iMode rising, no min len, count 0 (+0) in 0 ms
2017.01.06 10:15:12 3: AC: device: intervals set to 60 300 0 0
2017.01.06 10:15:12 3: AC: device: defined pin 6 PCInt pin 22, iMode rising, no min len, count 0 (+0) in 4 ms
2017.01.06 10:15:41 3: AC: Sending info command to device
2017.01.06 10:15:41 3: AC: device: normal interval 60000
2017.01.06 10:15:41 3: AC: device: max interval 300000
2017.01.06 10:15:41 3: AC: device: min interval 2000
2017.01.06 10:15:41 3: AC: device: min count 1
2017.01.06 10:15:41 3: AC: device: pin 4 PCInt pin 20, iMode rising, no min len, count 6 (+6) in 26665 ms
2017.01.06 10:15:41 3: AC: device:   first at 12, last at 26677, avg len 0
2017.01.06 10:15:41 3: AC: device: pin 5 PCInt pin 21, iMode rising, no min len, count 0 (+0) in 29569 ms
2017.01.06 10:15:41 3: AC: device: pin 6 PCInt pin 22, iMode rising, no min len, count 1 (+1) in 15840 ms
2017.01.06 10:15:41 3: AC: device:   first at 10309, last at 26149, avg len 0
2017.01.06 10:15:41 3: AC: device: Next report in 58883 Milliseconds


Das ging doch aber schon mal  :o der nano ist noch derselbe. Wo kann ich sehen ob der Reset macht?

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