[GELÖST] Pulscounter mit Wemos Nachbau funktioniert nicht

Begonnen von Mitch, 16 Januar 2018, 16:54:16

Vorheriges Thema - Nächstes Thema

Mitch

Hallo Zusammen,

ich bin gerade dabei, mein ganzes System Stück für Stück von FS20 zu "befreien".
Im Moment bin ich an den Zählern (Gas, Wasser, Strom).

Habe jetzt mit Gas angefangen und an den vorhandenen Reedkontakt einen D1 Mini NodeMcu mit ESP8266 ESP-12F (Nachbau eines Wemos) angeschlossen. Der D1 ist mit EasyESP v2.0-20180113 geflashed.

Ich bin nun einfach auf D3 (GPIO 0) gegangen und habe dort einen Kontakt vom Reed und den zweiten auf Ground angeschlossen.
In der EasyESP GUI unter Hardware den GPIO boot states von D3 auf Input gesetzt und ein Device als Generic - Pulse counter mit Mode Type: FALLING angelegt.

Leider kommt rein gar nichts an (also weder in der EasyESP GUI, noch in FHEM).

Wenn ich mir die technischen Daten vom D1 anschaue, dann ist Port D3 (GPIO 0) ein IO mit 10k Pull-up.
Das sollte dann ja so passen.

Hab ich irgendwo noch einen Denkfehler?
FHEM im Proxmox Container

Otto123

Wenn GPIO0 beim Start des ESP mit Masse verbunden ist geht er in den Flash Modus.

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

Mitch

Okay, das ist ein Argument, aber der D1 ist ja normal gebooted, up and running und kann über die EasyESP GUI konfiguriert werden.
FHEM im Proxmox Container

Mitch

So, habe jetzt mal umverkabelt und benutze nun D8.
Mein Denkfehler war Pull-up vs. Pull-down.

Der D8 ist Pull-down und genau das habe ich ja.
FHEM im Proxmox Container

Otto123

#4
Auch wenn es jetzt klappt, fiel mir noch die Spezialität der Node MCU ein. Die haben ja noch eine spezielle Beschaltung zwecks einfachen Flashen.
Siehe https://raw.githubusercontent.com/nodemcu/nodemcu-devkit/master/Documents/NODEMCU_DEVKIT_SCH.png
Auch der Wemos hat dort eine Beschaltung
https://wiki.wemos.cc/_media/products:d1:mini_new_v2_2_0.pdf

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

duu75

Ich krame den Beitrag mal hervor in der Hoffnung er wird noch gelesen und beantwortet.

Ich habe das Problem mit dem Wemos D1 mini und einem Reedkontakt am Gaszähler, dass die Pulse nicht sauber gezählt werden, sondern immer zuviele.
Als ob der Reedkontakt prellt.

Habe schon den Deboundtimer auf 3000ms gestellt bringt nichts.
Nutze den GPIO 0 / D3  mit externen 11K Pullup Widerstand gegen 3.3V.
Der Reedkontakt zieht laut Messgerät auch sauber beim Nulldurchgang gegen Masse.
Trotzdem zählt der PulseCounter 3fach oder sogar 4 fach.

Habe als Counter Falling oder Rising getestet ohne Erfolg.

Wieso zählt das Teil nicht sauber?
FHEM auf Ubuntu 20.04
RaspberryMatic CCU3 Charly, CUL 868, HUEBridge 2.0, HM-CFG-USB, AVR-NET-IO, Wemos D1 Mini ESP Easy, ESP32-CAM AI-on-the-Edge

Otto123

Welche Software hast Du drauf?
Bei tasmota kannst Du drei Parameter einstellen:
ZitatCounterDebounce   0 = turn off counter debounce
1..32000 = set counter debounce time in milliseconds. Counter is increased with every falling edge when CounterType=0 or time between successive falling edges is measured when CounterType=1. When CounterDebounceLow and CounterDebounceHigh are set to zero (default) only falling edges of the counter's GPIO are checked. Any CounterDebounceLow or CounterDebounceHigh unequal zero checks are carried out befor CounterDebounce check is done. As an example you can set CounterDebounce 500 to allow a minimum distance between to succesive valid falling edges equal to 500ms.
CounterDebounceLow   0 = turn off counter debounce low
1..32000 = set counter debounce low time in milliseconds. Allow individual debounce times for low pulse widths to discard non valid falling edges. These are checked before legacy CounterDebounce checks distance between two valid falling edges. When unequal zero tasmota will check falling and rising edges on the counter's GPIO. For CounterDebounceLow any GPIO change from low to high hat happens after the GPIO was not low for at least CounterDebounceLow will be ignored. As an example you can set CounterDebounceLow 50 to allow a valid minimum distance between a falling and rising edge equal to 50ms while having a final CounterDebounce 500 check between to succesive valid falling edges equal to 500ms.
CounterDebounceHigh   0 = turn off counter debounce high
1..32000 = set counter debounce high time in milliseconds. Allow individual debounce times for high pulse widths to discard non valid falling edges. These are checked before legacy CounterDebounce checks distance between two valid falling edges. When unequal zero tasmota will check falling and rising edges on the counter's GPIO. For CounterDebounceHigh any GPIO change from high to low hat happens after the GPIO was not high for at least CounterDebounceHigh will be ignored. As an example you can set CounterDebounceHigh 100 to allow a valid minimum distance between a rising and falling edge equal to 100ms while having a final CounterDebounce 500 check between to succesive valid falling edges equal to 500ms.
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

Papa Romeo

Zitat von: duu75 am 13 Mai 2021, 14:23:08
Habe schon den Deboundtimer auf 3000ms gestellt bringt nichts.
Nutze den GPIO 0 / D3  mit externen 11K Pullup Widerstand gegen 3.3V.
Der Reedkontakt zieht laut Messgerät auch sauber beim Nulldurchgang gegen Masse.
Trotzdem zählt der PulseCounter 3fach oder sogar 4 fach.

Habe als Counter Falling oder Rising getestet ohne Erfolg.

Wieso zählt das Teil nicht sauber?

Zu Anfangszeiten bin ich auch daran verzweifelt ... mit den "Mehrfachimpulsen" und hab auch allerhand Dinge versucht und die sauberste Lösung ist und bleibt ein "Monoflop".
Ich hab mir damals eine kleine Platine gemacht, die ich zwischenschalte. Auf dieser werkelt ein PIC12F6xx dem ich ein kleines Programm verpasst habe, der das nun für mich erledigt.

LG
Papa Romeo
...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

duu75

Zitat von: Otto123 am 13 Mai 2021, 14:53:55
Welche Software hast Du drauf?
Bei tasmota kannst Du drei Parameter einstellen:

ESP Easy     
ESP_Easy_mega_20210223_normal_ESP8266_4M1M
FHEM auf Ubuntu 20.04
RaspberryMatic CCU3 Charly, CUL 868, HUEBridge 2.0, HM-CFG-USB, AVR-NET-IO, Wemos D1 Mini ESP Easy, ESP32-CAM AI-on-the-Edge

duu75

Zitat von: Papa Romeo am 13 Mai 2021, 20:25:03
Zu Anfangszeiten bin ich auch daran verzweifelt ... mit den "Mehrfachimpulsen" und hab auch allerhand Dinge versucht und die sauberste Lösung ist und bleibt ein "Monoflop".
Ich hab mir damals eine kleine Platine gemacht, die ich zwischenschalte. Auf dieser werkelt ein PIC12F6xx dem ich ein kleines Programm verpasst habe, der das nun für mich erledigt.

LG
Papa Romeo

Wo ist aber das Problem?
Der D3 Input ist mittels intern verbauten Pullup auf 3,3V gezogen.
Extern Pullup 11k habe ich zusätzlich dran.
Dann kommt der Reedkontakt und zieht auf LOW.
Das muss doch der GPIO am Wemos hinbekommen, zumal ich schon Entprellung mit 5000ms eingestellt habe und nur auf die fallende Flanke triggere.
Oder ist das Problem die Länge des LOW-Pulses, wenn der Zähler ganz langsam läuft und der Puls für 10 Sekunden oder gar Minuten lang besteht?
z.B. bei Stillstand genau zwischen der 9 und der 0?
Würde ein Hallsensor evtl. Besserung bringen?
Habe ich nur nicht eben rumliegen leider.


FHEM auf Ubuntu 20.04
RaspberryMatic CCU3 Charly, CUL 868, HUEBridge 2.0, HM-CFG-USB, AVR-NET-IO, Wemos D1 Mini ESP Easy, ESP32-CAM AI-on-the-Edge

Papa Romeo

Das war eben auch mein Problem. Ich hab mir damals die Mühe gemacht, das Signal mit dem Oszi anzuschauen.

Fazit: Der Reed schaltet nicht sauber bzw. mehrfach, da eventuell das Magnetfeld des Zählers nicht sehr stark genug. Meine Vermutung des zu schwachen Feldes beruht darauf, dass ich dann statt dem Reed einen Hallsensor verwendet habe. Brachte zwar eine Verbesserung, aber Fehlimpulse gab es gelegentlich immer noch und zwar hauptsächlich dann, wenn der Zähler in der Gegend zwischen 9 und 0 stehen blieb.
Aber dann erfolgte ein Zählerwechsel ... gleicher Typ gegen gleiche Typ ... kein Problem ... Sensor hier weg und da dran ... Pustekuchen ... mit dem Hallsensor konnte ich dem Teil einfach keine Impulse mehr entlocken ... auch andere Hallsensoren brachten keine Lösung.

Jetzt hab ich wieder so nen Mini-Reedkontakt dran, der über die Zusatzplatine meinen Zähler füttert und es funktioniert.

LG
Papa Romeo
...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

Otto123

ich denke mit debounce Zeiten für low und high die man an die maximale Frequenz des Zählers anpasst bekommt man das in Griff. Nur eine Zeit und nur eine bestimmte Flanke hilft nicht.
Versuch doch mal Tasmota?
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

Prince

Der BK-G4 wird bei uns mit der Erweiterungsplatine der Ebus-Paltine2.0 und Tasmota gezählt. Funktionierte auf Anhieb und hat sich nicht einmal verzählt. Chons RC-Glied sorgt hier für die nötige Zuverlässigkeit.

Zitat von: chons am 18 September 2017, 23:10:26

Beschreibung: "Reedkontakt mit Impulsentprellung (GAS Counter)"
Wird der Reedkontakt geschlossen, dann entlädt sich der Kondensator und der Eingang wird negativ, öffnet der Kontakt lädt sich der Kondensator wieder und wird vom Wemos als Impuls erkannt. Prellt der Kontakt, dann verhindert der Kondensator mit dem Widerstand 18K als RC Glied das prellen weil er zwischenzeitlich immer wieder über 1,2K geladen wird und so die untere Schaltschwelle nie erreicht.

Papa Romeo

Zitat von: Otto123 am 14 Mai 2021, 00:16:36
... nur eine Zeit und nur eine bestimmte Flanke hilft nicht.

...genau das macht der PIC. Er erkennt am Eingang ein LOW-Signal und erzeugt darauf hin einen definierten Impuls am Ausgang. Gleichzeitig wird die  Ausgangsimpulserzeugung gesperrt und geprüft ob am Eingang nach einer bestimmten Zeit , z.B. einer Sekunde, wieder einen HIGH-Pegel ansteht.
Ist ein HIGH-Pegel vorhanden wird die Impulserzeugung wieder freigegeben und der Eingang kann auf das nächste "LOW" warten.
Steht am Eingang aber immer noch ein LOW-Pegel an, wird gewartet bis der Eingang wieder auf "HIGH" geht um die Impulserzeugung dann wieder frei zu geben.

An meinem Gas-Zähler z.B. nutze ich das so und da ich auch die minimale Umlaufzeit meines Zähler kenne, bei mir z.B knapp 18 Sekunden,  kann ich auch "Fremdeinstreuungen" eliminieren, indem ich die Warte- oder Sperrzeit in diesem Fall auf 16 oder 17 Sekunden einstelle ... fire and forget ...

Debounce mag auch eine tolle Möglichkeit sein, dies zu erledigen ... aber ich bleibe hier, wenigstens teilweise, dem zweiten Satz in meiner Signatur treu

LG
Papa Romeo

...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

duu75

Zitat von: Otto123 am 14 Mai 2021, 00:16:36
ich denke mit debounce Zeiten für low und high die man an die maximale Frequenz des Zählers anpasst bekommt man das in Griff. Nur eine Zeit und nur eine bestimmte Flanke hilft nicht.
Versuch doch mal Tasmota?

Werde ich mal mit Tasmota versuchen.
Da muss ich mich erstmal einarbeiten.
Habe ganz frisch mich mal an ein Wemos D1 Mini rangemacht und einfach mal mit ESP Easy begonnen.

Oder ich versuche aber auch mal, ob ein RC-Glied dort vlt. den Puls etwas "begradigt".
FHEM auf Ubuntu 20.04
RaspberryMatic CCU3 Charly, CUL 868, HUEBridge 2.0, HM-CFG-USB, AVR-NET-IO, Wemos D1 Mini ESP Easy, ESP32-CAM AI-on-the-Edge