Hallo,
ich bin gerade dabei meine Kaffeemaschine Delonghi Magnifica S smart zu machen.
Ich benutze einen ESP 32 und Optokoppler um den LED Status der Maschine auslesen zu können. Das funktioniert so weit ganz gut, ich scheitere jedoch den Status der Maschine korrekt anzuzeigen.
Geplant ist es so:
- wenn beide LED (Kaffe und Espresso) leuchten, ist die Maschine bereit,
- wenn nur eine LED leuchtet, wird gerade zubereitet,
- und wenn beide aus sind, ist die Maschine nicht bereit.
Der Status soll dann in einem Text Sensor “status_kaffee” ausgegeben werden
Ich habe das ganze mal auf einem Experimentierboard aufgebaut.
Der Status Bereit, nicht bereit wird angezeigt die Zubereitung jedoch nicht. Ich vermute, dass der ESP nur den einen GPIO als Änderung betrachtet und somit nicht die Prüfung wie im “lamda”-Teil durchführt.
Hat wer eine Idee wie ich das richtig machen kann?
hier der Code
captive_portal:
binary_sensor:
- platform: gpio
pin: GPIO27
id: led_espresso
name: "Status LED Espresso"
entity_category: diagnostic
icon: mdi:led-outline
disabled_by_default: false
publish_initial_state: true
filters:
#delayed_on_off: 100ms
- platform: gpio
pin: GPIO25
id: led_kaffee
name: "Status LED Kaffe"
entity_category: diagnostic
icon: mdi:led-outline
disabled_by_default: false
publish_initial_state: true
filters:
#delayed_on_off: 100ms
- platform: template
name: "Zubereitung Kaffee"
lambda: |-
if (id(led_kaffee).state == 1 && id(led_espresso).state == 0) {
return true;
} else {
return false;
}
on_state:
- logger.log: "Zubereitung Kaffee"
- text_sensor.template.publish:
id: status_kaffee
state: "Zubereitung Kaffee"
- platform: template
name: "Zubereitung Espresso"
lambda: |-
if (id(led_kaffee).state == 0 && id(led_espresso).state == 1) {
return true;
} else {
return false;
}
on_state:
- logger.log: "Zubereitung Espresso"
- text_sensor.template.publish:
id: status_kaffee
state: "Zubereitung Espresso"
- platform: template
name: "Maschine bereit"
lambda: |-
if (id(led_kaffee).state == 1 && id(led_espresso).state == 1) {
return true;
} else {
return false;
}
on_state:
- logger.log: "Maschine Bereit"
- text_sensor.template.publish:
id: status_kaffee
state: "Maschine Bereit"
- platform: template
name: "Maschine nicht bereit"
lambda: |-
if (id(led_kaffee).state == 0 && id(led_espresso).state == 0) {
return true;
} else {
return false;
}
on_state:
- logger.log: "Maschine nicht Bereit / ausgeschaltet"
- text_sensor.template.publish:
id: status_kaffee
state: "Maschine nicht Bereit / ausgeschaltet"
- platform: gpio
pin: GPIO32
name: "Status Led Wassertank"
entity_category: diagnostic
icon: mdi:led-outline
disabled_by_default: true
publish_initial_state: true
filters:
delayed_on_off: 100ms
on_multi_click:
- timing: # Wassertank ok
- OFF for at least 2000ms
then:
- logger.log: "Wasser OK"
- text_sensor.template.publish:
id: status_wassertank
state: "Wasser OK"
- timing: # Wassertank fehlt
- ON for at least 2000ms
then:
- logger.log: "Wassertank fehlt"
- text_sensor.template.publish:
id: status_wassertank
state: "Wassertank fehlt"
- timing: # Wassertank leer
- ON for 200ms to 270ms
- OFF for 200ms to 270ms
- ON for 200ms to 270ms
- OFF for 200ms to 270ms
- ON for 200ms to 270ms
- OFF for 200ms to 270ms
- ON for 200ms to 270ms
- OFF for 200ms to 270ms
- ON for 200ms to 270ms
- OFF for 200ms to 270ms
- ON for 200ms to 270ms
- OFF for 200ms to 270ms
- ON for 200ms to 270ms
- OFF for 200ms to 270ms
then:
- logger.log: "Wassertank leer"
- text_sensor.template.publish:
id: status_wassertank
state: "Wassertank leer"
invalid_cooldown: 500ms
- platform: gpio
pin: GPIO12
name: "Status Led Satzbehälter"
entity_category: diagnostic
icon: mdi:led-outline
disabled_by_default: true
publish_initial_state: true
filters:
delayed_on_off: 100ms
on_multi_click:
- timing: # Satzbehälter ok
- OFF for at least 2000ms
then:
- logger.log: "Satzbehälter OK"
- text_sensor.template.publish:
id: status_satzbehalter
state: "Satzbehälter OK"
- timing: # Satzbehälter fehlt
- ON for at least 2000ms
then:
- logger.log: "Satzbehälter fehlt"
- text_sensor.template.publish:
id: status_satzbehalter
state: "Satzbehälter fehlt"
- timing: # Wassertank leer
- ON for 200ms to 270ms
- OFF for 200ms to 270ms
- ON for 200ms to 270ms
- OFF for 200ms to 270ms
- ON for 200ms to 270ms
- OFF for 200ms to 270ms
- ON for 200ms to 270ms
- OFF for 200ms to 270ms
- ON for 200ms to 270ms
- OFF for 200ms to 270ms
- ON for 200ms to 270ms
- OFF for 200ms to 270ms
- ON for 200ms to 270ms
- OFF for 200ms to 270ms
then:
- logger.log: "Satzbehälter voll"
- text_sensor.template.publish:
id: status_satzbehalter
state: "Satzbehälter voll"
invalid_cooldown: 500ms
# Binary Sensor für eingeschaltet/aufheizen fehlt noch eventuell nicht notwendig????
output:
- platform: gpio
pin: GPIO14 # Ein Aus Schalter
id: relay_1
- platform: gpio
pin: GPIO4 # Espresso Schalter
id: relay_2
- platform: gpio
pin: GPIO33 # Kaffe Jenny Schalter
id: relay_3
button:
- platform: output
output: relay_1 # Ein und ausschalten der Maschine
id: button_1
disabled_by_default: false
duration: 200ms
name: "Ein/Aus"
icon: "mdi:power"
- platform: output
output: relay_2
id: button_2
disabled_by_default: false
duration: 200ms # Espresso machen
name: "Espresso"
icon: "mdi:coffee"
- platform: output
output: relay_3
id: button_3
duration: 200ms # Jenny Kaffee machen
name: "Kaffee"
icon: "mdi:coffee"
# # Sensors for ESP version and WIFI information
text_sensor:
- platform: template
icon: mdi:information-outline
id: status_kaffee
name: "Status Kaffee"
- platform: template
icon: mdi:information-outline
id: status_wassertank
name: "Status Wassertank"
- platform: template
icon: mdi:information-outline
id: status_satzbehalter
name: "Status Satzbehälter"
# Installed version
- platform: template
name: "Device Version"
id: device_version
icon: "mdi:label-outline"
entity_category: diagnostic
lambda: |-
return {"${project_version}"};
update_interval: 6h
# ESPHome version
- platform: version
hide_timestamp: true
name: 'ESPHome Version'
# IP address and connected SSID
- platform: wifi_info
ip_address:
name: 'IP Address'
icon: mdi:wifi
ssid:
name: 'SSID'
icon: mdi:wifi-strength-2
sensor:
# Uptime
- platform: uptime
name: Uptime Sensor
# WiFi signal
- platform: wifi_signal
name: "WiFi Signal"
update_interval: 120s