Ich habe 2 Pulse Sensoren, die ich mit ESP8266 oder ESP32 auswerten
kann.
Die zwei Sensoren schalten zeitverzögert, aber fast direkt
hintereinander oder sogar überlagert.
Ich brauche eine Erkennung, welcher Sensor zuerst geschaltet hat.
Mit den ESP Mikrocontrollern habe ich erst seit kurzem zu tun. Nutze das
mit Home Assistant und ESP Home.
Früher habe ich beruflich sehr viel SPS-Steuerungen programmiert, kenne
mich in visual Basic auch etwas aus.
Das hier ist neu und deshalb frage ich nach, ob das überhaupt zu
realisieren ist. Gibt das die Microcontrollerprogrammierung her ?
Ich kann mich da rein fuchsen, will aber wissen, ob das überhaupt
machbar ist.
Meine Vorstellung in VBA:
1
Dim M1 as boolean
2
Dim M2 as boolean
3
dim reset as double
4
5
if Sensor1 = true then
6
if M2 = true then
7
M1 = false
8
else
9
M1 = true
10
M2 = false
11
Reset = 0
12
end if
13
end if
14
15
if Sensor2 = true then
16
if M1 = true then
17
M2 = false
18
else
19
M2 = true
20
M1 = false
21
Reset = 0
22
end if
23
end if
24
25
if Reset = 100000 then
26
M1 = false
27
M2 = false
28
Reset = 0
29
end if
Wird vielleicht auch nicht alles mit ESP Home machbar sein, was mit
direkter programmierung möglich ist.
Die Daten werden jede Minute an home Assistant gegeben. dort werte ich
dann die Anzahl der Pulse aus sowie den Zustand von M1 und M2
Vielen Dank für eure Hilfe.
Jochen B. schrieb:> Die zwei Sensoren schalten zeitverzögert, aber fast direkt> hintereinander oder sogar überlagert.
Wie kritisch ist die Auflösung? Wenn der eine Sensor 1us vor dem anderen
schaltet, muss das korrekt erkannt werden oder reicht es dann auch das
als "gleichzeitig" zu erkennen?
Ron-Hardy G. schrieb:> flankengesteuerte Interrupts machen und nicht über polling
Interrupts haben eine gewisse Latenz und werden u.U. nicht in der
richtigen Reihenfolge abgearbeitet. Wenn die Signale also sehr schnell
aufeinander folgen kann man das so nicht auflösen.
Wenn es also sehr genau sein muss könnte es sein dass das mit den ESP
nicht geht. Da bräuchte es einen Mikrocontroller mit besserer
Timer-Peripherie, z.B. STM32, oder etwas externe digitale Logik.
Jochen B. schrieb:> Ich brauche eine Erkennung, welcher Sensor zuerst geschaltet hat.
In welchen Zeitdimensionen (fs, µs, s, min, h, d, a ...)?
Jochen B. schrieb:> Meine Vorstellung in VBA:
Was soll das werden?
"reset" ist überflüssig, da es immer 0 ist.
Man sollte sich Code auch logisch durchdenken oder besser erstmal einen
Programmablaufplan erstellen.
Sind die ESP Module bei ESP Home überhaupt frei programmierbar?
Willst du die "Zentrale" oder die ESP Module programmieren?
Hängen beide Sensoren zusammen am selben ESP chip?
Hallo,
vielen Dank für Eure Unterstützung.
Die zwei Sensoren sind an einem ESP8266. Auf D5 und D6 zum Beispiel.
Die Signale kommen verzögert mindestens 500 ms versetzt.
Überlagert bedeutet, dass Signal 2 auf high geht, während Signal 1 noch
high ist.
Das ganze muss auf dem ESP8266 programmiert werden.
Ich habe da ins blaue den vba Code gemacht, damit ihr ne Vorstellung
bekommt, was das werden soll.
Der Einwand, dass Reset immer Null ist, ist korrekt. Denn ich habe im
Code die Zeile : Reset = Reset + x vergessen.
Die zwei Sensoren schalten intervallmäßig, die Merker müssen nach Zeit x
resetet werden. Nur so ist eine Änderung der Richtung erkennbar. gibt 2
Möglichkeiten: S2 folgt auf S1 und S1 folgt auf S2. je nachdem welcher
Sensor zuerst schaltet. Das kann sich ändern.
Jochen B. schrieb:> mindestens 500 ms
Also ewig und 3 Tage für einen Mikrocontroller.
Dann polle mit 100ms beide Eingänge. Dazwischen kann der µC stromsparend
schlafen.
Jochen B. schrieb:> Ich habe da ins blaue den vba Code gemacht, damit ihr ne Vorstellung> bekommt, was das werden soll.
Lese beide Sensoren gemeinsam (über einen Bytezugriff) ein und nicht
"Sensor1 hier und Sensor2 dort". Danach wertest du in aller Ruhe durch
Vergleich mit dem Zustand beim vorherigen Auslesen aus.
Jochen B. schrieb:> Die zwei Sensoren schalten intervallmäßig, die Merker müssen nach Zeit x> resetet werden.
Das ist fehlerträchtig, wenn sich die Signale nicht exakt an Deinen
Ablauf halten.
Warum nicht einfach nur auswerten, wenn einer auf 1 geht, während der
andere auf 0 ist.
Peter D. schrieb:> Jochen B. schrieb:>> Die zwei Sensoren schalten intervallmäßig, die Merker müssen nach Zeit x>> resetet werden.>> Das ist fehlerträchtig, wenn sich die Signale nicht exakt an Deinen> Ablauf halten.> Warum nicht einfach nur auswerten, wenn einer auf 1 geht, während der> andere auf 0 ist.
So den Reset zu machen war meine erste Idee. Die Pausenzeit zwischen den
Pulsen ist auch Faktor 10. Nach dem jeweileigen 1x Puls pro Sensor kommt
eine 10fache Pausenzeit, dann wieder 1x ein Puls je Sensor. Ich dachte ,
die Zeit über Versuche ermitteln zu können.
Vielen Dank für die Ideen. Ich gucke mir da gerade die Befehle von ESP
Home an.
Was vereinfacht die Byteauswertung ? Ich muss das erkennen, welches Bit
zuerst gesetzt wurde. Ich müsste das Byte abfragen, dann merken, dass
ein Bit gesetzt wurde, danach, wenn das zweite Bit gesetzt wird,
auswerten. Aber wenn die Bit einzeln hintereinander ohne Überschneidung
kommen ?
Bin trotzdem für jede Idee dankbar.
Jedenfalls bin ich sicher, dass der ESP8266 das kann. Sonst hättet ihr
mein Vorhabnen längst zerrissen. Ich bekomme das hin, ist auch nix
kompliziertes.
Jochen B. schrieb:> Die zwei Sensoren sind an einem ESP8266. Auf D5 und D6 zum Beispiel.> Die Signale kommen verzögert mindestens 500 ms versetzt.
In 500ms kann der Prozessor auf dem ESP eine Endlosschleife locker 3x
komplett durchzählen...
Jochen B. schrieb:> ob der Code geht.
Wenigstens ein PNG und kein JPEG.
Dir ist aber grundsaätzlich schon klar, dass ein normales Textfile oder
ein Codeschnipsel zwischen [code]-Tags viel leichter bearbeitbar wäre?
Lothar M. schrieb:> In 500ms kann der Prozessor auf dem ESP eine Endlosschleife locker 3x> komplett durchzählen...
steckt da etwa ein kleiner chuck norris drinnen? ;-)
Lothar M. schrieb:>> Dir ist aber grundsaätzlich schon klar, dass ein normales Textfile oder> ein Codeschnipsel zwischen Tags viel leichter bearbeitbar wäre?
hatte das vorher probiert, aber das "/" am ende Code vergessen. so wurde
die Formatierung zerlegt. Deshalb habe ich ein Bild gepostet. Ich hab
früher viel in Access Foren geschrieben, da auch immer als Code
gepostet.
Der Zweck heiligt die Mittel. Wenn der Code geht ist gut. Ich hab bisher
nix mit esp Programmierung und auch ESP Home zu tun gehabt. Und auch nix
im internet gefunden, das problem hatte bis jetzt wohl niemand. Wenn
sich jemand hier her verirrt, hier der Code zum kopieren. Ihr braucht
das aber sicher nicht, das ist ja was Home Assistant spezielles. D8 ist
nicht belegt, wird als dummy benutzt.
1
captive_portal:
2
3
switch:
4
- platform: gpio
5
pin: D8
6
name: "swMerker vorwarts"
7
id: sw_vorwarts
8
9
- platform: gpio
10
pin: D8
11
name: "swMerker zuruck"
12
id: sw_zuruck
13
14
- platform: gpio
15
pin: D8
16
name: "laufrichtung"
17
id: laufrichtung
18
19
20
binary_sensor:
21
- platform: gpio
22
pin: D5
23
name: "binMerker vorwarts"
24
id: bin_M_v
25
on_press:
26
then:
27
- switch.turn_on: sw_vorwarts # hier wird der Switch "vorwärts" eingeschaltet
28
- delay: 5s # nach 5 Sekunden wird der Switch wieder ausgeschaltet
29
- switch.turn_off: sw_vorwarts
30
on_state:
31
- if:
32
condition: # hier wird die Laufrichtung auf False = vorwärts geschaltet
33
switch.is_on: sw_zuruck
34
then:
35
- switch.turn_on: laufrichtung
36
else:
37
- switch.turn_off: laufrichtung
38
39
- platform: gpio
40
pin: D6
41
name: "binMerker zuruck"
42
id: bin_M_z
43
on_press:
44
then:
45
- switch.turn_on: sw_zuruck # hier wird der Switch "rückwärts" eingeschaltet
46
- delay: 5s # nach 5 Sekunden wird der Switch wieder ausgeschaltet
47
- switch.turn_off: sw_zuruck
48
on_state:
49
- if:
50
condition: # hier wird die Laufrichtung auf True = rückwärts geschaltet