Möchte gerne mit einem ESP32 Mini D1 einen Komforschalter fürs Stiegenhauslicht realisieren. Ein Taster, 5 Lampen parallel.
Funktion 1: Bei Stromausfall Lampe immer aus
Funktion 2: Taster mit umschalten EIN/AUS muss immer funktionieren
Funktion 3: Bei Lampe EIN Zeit für wider aus 30s (zum testen)
Funktion 4: Bei drücken von 5sek Lampe 3x blinken und 1min ein
Da mein altes Logo nicht ewig überleben wird (schon 15Jahre auf Buckel und Netzteil schon ersetzt und wo habe ich nochmals das programm mit kabel an 9pol dsub) würde ich es gerne auf ein günstiges Teil umbauen.
Wer könnte da helfen, hab mich schon mit chat gpt4 etwas schlauer gemacht aber die funktionen laufen nicht so richtig.
Hier ist schon mal ein Programmbeispiel:
esphome:
name: treppenhaus-licht
friendly_name: Treppenhaus-Licht
esp32:
board: esp32dev
framework:
type: arduino
# Enable Home Assistant API
api:
encryption:
key: "4cO321ej9fWCfGAxQ1p0sScsBbwt36wEt1Z5ehrS+vg="
ota:
password: "935aab5c2baa499d02e9717bf5eb8408"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Treppenhaus-Licht"
password: "s3R7rkheOm2B"
logger:
level: DEBUG
captive_portal:
# Konstanten für GPIO-Pins
substitutions:
taster_pin: GPIO21
lampe_pin: GPIO18
globals:
- id: kurze_druck_zeit
type: string # Ändern Sie den Typ auf "string"
restore_value: no
initial_value: "1s" # Verwenden Sie Zeichenketten mit "s" als Einheit
- id: lampe_kurz_zeit
type: string # Ändern Sie den Typ auf "string"
restore_value: no
initial_value: "30s" # Verwenden Sie Zeichenketten mit "s" als Einheit
- id: langer_druck_zeit
type: string # Ändern Sie den Typ auf "string"
restore_value: no
initial_value: "5s" # Verwenden Sie Zeichenketten mit "s" als Einheit
- id: lampe_lang_zeit
type: string # Ändern Sie den Typ auf "string"
restore_value: no
initial_value: "60s" # Verwenden Sie Zeichenketten mit "s" als Einheit
binary_sensor:
- platform: gpio
pin:
number: ${taster_pin}
mode: INPUT_PULLUP
inverted: True
name: "Treppenhaus-Taster"
id: Treppenhaus_Taster # Fügen Sie diese Zeile hinzu
filters:
- delayed_on: 50ms
- delayed_off: 50ms
on_press:
then:
- logger.log: "Taster gedrückt"
- switch.toggle: lampe
- logger.log: "Lampe umgeschaltet"
- delay: !lambda 'return id(kurze_druck_zeit);'
- if:
condition:
- binary_sensor.is_off: Treppenhaus_Taster
then:
- logger.log: "Kurzes Drücken erkannt, Lampe für 30 Sekunden eingeschaltet"
- switch.turn_on: lampe
- delay: !lambda 'return id(lampe_kurz_zeit);'
- switch.turn_off: lampe
- logger.log: "Lampe nach 30 Sekunden ausgeschaltet"
else:
- delay: !lambda 'return id(langer_druck_zeit) - id(kurze_druck_zeit);'
- logger.log: "Langes Drücken erkannt, Lampe für 1 Minute eingeschaltet"
- switch.turn_on: lampe
- delay: !lambda 'return id(lampe_lang_zeit);'
- switch.turn_off: lampe
- logger.log: "Lampe nach 1 Minute ausgeschaltet"
switch:
- platform: gpio
name: "Treppenhaus-Lampe"
pin: ${lampe_pin}
id: lampe
restore_mode: ALWAYS_OFF
sensor:
# Sensoren für die Anzeige der aktuellen Zeiteinstellungen
- platform: template
name: "Kurze Druck Zeit"
id: kurze_druck_zeit_sensor
lambda: 'return id(kurze_druck_zeit);'
update_interval: 60s
- platform: template
name: "Lampe Kurz Zeit"
id: lampe_kurz_zeit_sensor
lambda: 'return id(lampe_kurz_zeit);'
update_interval: 60s
- platform: template
name: "Langer Druck Zeit"
id: langer_druck_zeit_sensor
lambda: 'return id(langer_druck_zeit);'
update_interval: 60s
- platform: template
name: "Lampe Lang Zeit"
id: lampe_lang_zeit_sensor
lambda: 'return id(lampe_lang_zeit);'
update_interval: 60s
number:
# Einstellbare Number-Entitäten für Home Assistant
- platform: template
name: "Einstellbare Kurze Druck Zeit"
min_value: 1
max_value: 600
step: 1
lambda: 'return id(kurze_druck_zeit);'
set_action:
- logger.log: "Kurze Druck Zeit geändert auf {:.0f} Sekunden" # Log-Meldung für geänderte Variable
- lambda: |-
id(kurze_druck_zeit) = string(x) + "s"; # Umrechnung in Zeichenkette mit Einheit "s"
id(kurze_druck_zeit_sensor).publish_state(id(kurze_druck_zeit)); # Aktualisieren Sie den Sensor
- platform: template
name: "Einstellbare Lampe Kurz Zeit"
min_value: 10
max_value: 3600
step: 10
lambda: 'return id(lampe_kurz_zeit);'
set_action:
- logger.log: "Lampe Kurz Zeit geändert auf {:.0f} Sekunden" # Log-Meldung für geänderte Variable
- lambda: |-
id(lampe_kurz_zeit) = string(x) + "s"; # Umrechnung in Zeichenkette mit Einheit "s"
id(lampe_kurz_zeit_sensor).publish_state(id(lampe_kurz_zeit)); # Aktualisieren Sie den Sensor
- platform: template
name: "Einstellbare Langer Druck Zeit"
min_value: 10
max_value: 600
step: 10
lambda: 'return id(langer_druck_zeit);'
set_action:
- logger.log: "Langer Druck Zeit geändert auf {:.0f} Sekunden" # Log-Meldung für geänderte Variable
- lambda: |-
id(langer_druck_zeit) = string(x) + "s"; # Umrechnung in Zeichenkette mit Einheit "s"
id(langer_druck_zeit_sensor).publish_state(id(langer_druck_zeit)); # Aktualisieren Sie den Sensor
- platform: template
name: "Einstellbare Lampe Lang Zeit"
min_value: 60
max_value: 1200
step: 60
lambda: 'return id(lampe_lang_zeit);'
set_action:
- logger.log: "Lampe Lang Zeit geändert auf {:.0f} Sekunden" # Log-Meldung für geänderte Variable
- lambda: |-
id(lampe_lang_zeit) = string(x) + "s"; # Umrechnung in Zeichenkette mit Einheit "s"
id(lampe_lang_zeit_sensor).publish_state(id(lampe_lang_zeit)); # Aktualisieren Sie den Sensor
by HarryP: Codezeilen formatiert (bitte immer in </> einbinden)