ESPEasy: 3-Wege Pushbutton z.B. für Abblendlicht und Fernlicht

Heute hat mich mal wieder die Bastelwut gepackt und ich habe mich gefragt, wie ich meine folgende Anforderung realisiere. Es geht um ein Arbeitslicht am Auto, dieses hat eine Spot- und eine Flood-Funktion. Beide Funktionen will ich aber nur mit einem Pushbutton nutzen können, ebenso wie das Licht ausschalten. Dabei habe ich keine Lust alle Funktionen immer wieder durchzappen zu müssen. Auch fehlte mir die Zeit und die Lust alles von Grund neu aufzubauen und zu programmieren. Für Sensoren habe ich gerne ESPEasy genutzt für Aktoren i.d.R. eher Tasmota. Jetzt aber das Problem: Was nutze ich nun? … ESPEasy… lese hier weiter wie das umgesetzt wurde!

Das wichtigste zu erst: Ich gehe hier nicht darauf ein, wie man eine Binary auf dem ESP flashed. Dazu müssen die Infos schon im I-Net gesucht werden. Was wird genutzt?
Im Grunde wird das wichtigste über die RULE-Funktion im ESPEasy erledigt – diese muss aber extra unter Tools->Advanced freigeschaltet werden.

Die Funktion in dieser Umsetzung ist einfach beschrieben: Ein Longpress (Taste gedrückt halten) des Buttons aktiviert generell die Funktion, bzw. schaltet das Licht im Flood ein. In diesem Status kann ich jetzt mit einem kurzen Press (einfaches drücken) auf Spot wechseln, erneutes Drücken wechselt wieder in Flood. Diese Funktion steht nur zur Verfügung, wenn vorher das Licht generell eingeschaltet wurde. Langes drücken schaltet das Licht aus.
Damit genug BlaBlaBla, als erstes folgt die Rule – im Pseudocode:

// ABLENDLICHT-FERNLICHTSTEUERUNG mit einem PUSHBUTTON
// Longpress Scheinwerfer generell an oder aus
// Shortpress (nur wenn generell an) Fernlicht an oder aus
On BUTTON_1#State Do 
 if [BUTTON_1#State] = 11                        // Wenn LongPress dann Licht an
  if [RELAIS_STATES#FrontWorkingLightState] != 0 // Wenn Licht an dann Licht an
   TaskValueSet 12,1,0  // Arbeitsscheinwerfer aus
  else
   if [RELAIS_STATES#FrontWorkingLightState] = 0 // Wenn Licht an dann Licht an
    TaskValueSet 12,1,111  // Arbeitsscheinwerfer aus
   endif
  endif
 else 
  if [RELAIS_STATES#FrontWorkingLightState] = 111 // Wenn Licht an dann Licht an
   TaskValueSet 12,1,101  // Arbeitsscheinwerfer aus
  else
   if [RELAIS_STATES#FrontWorkingLightState] = 101 // Wenn Licht an dann Licht an
    TaskValueSet 12,1,111  // Arbeitsscheinwerfer aus
   endif
  endif
 endif



 if [RELAIS_STATES#FrontWorkingLightState] = 101
  GPIO,13,1
  GPIO,12,0
 endif
 if [RELAIS_STATES#FrontWorkingLightState] = 111
  GPIO,13,0
  GPIO,12,1
 endif
 if [RELAIS_STATES#FrontWorkingLightState] = 0
  GPIO,13,0
  GPIO,12,0
 endif
endon

Damit man jetzt genau weiß, was gemeint ist fehlen noch ein paar Infos:
Was macht TaskValueSet 12,1,101?
Damit setze ich in Device 12 – dem State 1 den Wert 101!
Was macht GPIO,12,1
Damit wird GPIO 12 (auf Wemos Pin D6) auf High gesetzt.
Und zu guter Letzt fehlen die Informationen zu diesen komischen Bezeichnungen:
BUTTON_1#State / RELAIS_STATES#FrontWorkingLightState
Mit Hilfe dieser Bezeichnung Adressiere ich die Devices und deren Status. Es ist schöner zu lesen wie 12,1,111.
Wie folgt sieht die Device-Konfiguration aus:

So sieht zur Zeit mein Testaufbau aus, jedoch habe ich aktuell noch LEDs statt Relais im Einsatz. Dieser Aufbau sollte nicht 1:1 nachgebaut werden, da ich selber nicht weiß was ich mache. 😀 Try-and-Error!

Ich hoffe, dass ich damit zeigen konnte, wie einfach man mit der fertigen Lösung von ESPEasy eine einfache Logik erstellen konnte.
Sicherlich – man hätte es auch einfach nur mit den Relais bauen können – aber wo bleibt der Spaß?

Da bei mir noch mehrere Funktion dazu kommen, habe ich deswegen auch diese Art der Schaltung gewählt. Ich werde vermutlich nicht auf Wemos D1 Basis bleiben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.