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.