Hallo, ich habe einen Shelly Plus 2PM den ich gerne mit ESPHome laufen lassen würde.
Laut ESPHome geht das ja schon.
Ich habe einige ESP8266 mit ESPHome am laufen und das ist mein erster ESP32.
Der original Code von ESPHome zeigt mir Fehler an, wenn ich ihn einbinden möchte.
[restore_mode] is an invalid option for [switch.output]. Please check the indentation.
Ich habe den Code dann soweit es für mich möglich angepasst, allerdings funktioniert das immer noch nicht, da ich keine Werte bekomme.
esphome:
name: esp2pm-146
platformio_options:
board_build.f_cpu: 160000000L
substitutions:
device_name_1: "Shelly Plus 2PM Switch 1"
device_name_2: "Shelly Plus 2PM Switch 2"
#Home Assistant light bulb to toggle
bulb_name_1: "light.smart_bulb_1"
bulb_name_2: "light.smart_bulb_2"
max_power: "3600.0"
max_temp: "80.0"
esp32:
board: esp32doit-devkit-v1
framework:
type: esp-idf
sdkconfig_options:
CONFIG_FREERTOS_UNICORE: y
CONFIG_ESP32_DEFAULT_CPU_FREQ_160: y
CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ: "160"
logger:
level: VERY_VERBOSE
api:
ota:
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# fast_connect: true
time:
- platform: homeassistant
i2c:
sda: GPIO33
scl: GPIO25
#Shelly Switch Output
switch:
- platform: gpio
name: "${device_name_1} Output"
pin: GPIO13
id: "relay_1"
# output: "relay_output_1"
# restore_mode: RESTORE_DEFAULT_OFF
- platform: gpio
name: "${device_name_2} Output"
pin: GPIO12
id: "relay_2"
# output: "relay_output_2"
# restore_mode: RESTORE_DEFAULT_OFF
# Restart Button
button:
- platform: restart
id: "restart_device"
name: "${device_name_1} Restart"
entity_category: 'diagnostic'
#home assistant bulb to switch
text_sensor:
- platform: homeassistant
id: 'ha_bulb_1'
entity_id: "${bulb_name_1}"
internal: true
- platform: homeassistant
id: 'ha_bulb_2'
entity_id: "${bulb_name_2}"
internal: true
binary_sensor:
#Shelly Switch Input 1
- platform: gpio
name: "${device_name_1} Input"
pin: GPIO2
#small delay to prevent debouncing
filters:
- delayed_on_off: 50ms
# config for state change of input button
on_state:
then:
- if:
condition:
and:
- wifi.connected:
- api.connected:
- switch.is_on: "relay_1"
- lambda: 'return (id(ha_bulb_1).state == "on" || id(ha_bulb_1).state == "off");'
# toggle smart light if wifi and api are connected and relay is on
then:
- homeassistant.service:
service: light.toggle
data:
entity_id: "${bulb_name_1}"
else:
- switch.toggle: "relay_1"
#Shelly Switch Input 2
- platform: gpio
name: "${device_name_2} Input"
pin: GPIO18
#small delay to prevent debouncing
filters:
- delayed_on_off: 50ms
# config for state change of input button
on_state:
then:
- if:
condition:
and:
- wifi.connected:
- api.connected:
- switch.is_on: "relay_2"
- lambda: 'return (id(ha_bulb_2).state == "on" || id(ha_bulb_2).state == "off");'
# toggle smart light if wifi and api are connected and relay is on
then:
- homeassistant.service:
service: light.toggle
data:
entity_id: "${bulb_name_2}"
else:
- switch.toggle: "relay_2"
#reset button on device
- platform: gpio
name: "${device_name_1} Button"
pin:
number: GPIO27
inverted: yes
mode:
input: true
pullup: true
on_press:
then:
- button.press: "restart_device"
filters:
- delayed_on_off: 5ms
internal: true
sensor:
# Uptime sensor.
- platform: uptime
name: ${device_name_1} Uptime
entity_category: 'diagnostic'
update_interval: 300s
# WiFi Signal sensor.
- platform: wifi_signal
name: ${device_name_1} WiFi Signal
update_interval: 60s
entity_category: 'diagnostic'
#temperature sensor
- platform: ntc
sensor: temp_resistance_reading
name: "${device_name_1} Temperature"
unit_of_measurement: "°C"
accuracy_decimals: 1
icon: "mdi:thermometer"
entity_category: 'diagnostic'
calibration:
#These default values don't seem accurate
b_constant: 3350
reference_resistance: 10kOhm
reference_temperature: 298.15K
#Alternative calibration values based on IR thermometer reading with case removed
#- 2.284kOhm -> 48°C
#- 10.19kOhm -> 17°C
#- 5.856kOhm -> 25°C
on_value_range:
- above: ${max_temp}
then:
- switch.turn_off: "relay_1"
- switch.turn_off: "relay_2"
- homeassistant.service:
service: persistent_notification.create
data:
title: "Message from ${device_name_1}, ${device_name_2}"
data_template:
message: "Switch turned off because temperature exceeded ${max_temp}°C"
- platform: resistance
id: temp_resistance_reading
sensor: temp_analog_reading
configuration: DOWNSTREAM
resistor: 6kOhm
- platform: adc
id: temp_analog_reading
pin: GPIO37
attenuation: 11db
update_interval: 60s
#power monitoring
- platform: ade7953
irq_pin: GPIO36 # Prevent overheating by setting this
voltage:
name: ${device_name_1} voltage
entity_category: 'diagnostic'
# On the Shelly 2.5 channels are mixed ch1=B ch2=A
current_a:
name: ${device_name_2} current
entity_category: 'diagnostic'
current_b:
name: ${device_name_1} current
entity_category: 'diagnostic'
active_power_a:
name: ${device_name_2} power
id: power_channel_2
entity_category: 'diagnostic'
# active_power_a is normal, so don't multiply by -1
on_value_range:
- above: ${max_power}
then:
- switch.turn_off: "relay_2"
- homeassistant.service:
service: persistent_notification.create
data:
title: "Message from ${device_name_2}"
data_template:
message: "Switch turned off because power exceeded ${max_power}W"
active_power_b:
name: ${device_name_1} power
id: power_channel_1
entity_category: 'diagnostic'
# active_power_b is inverted, so multiply by -1
filters:
- multiply: -1
on_value_range:
- above: ${max_power}
then:
- switch.turn_off: "relay_1"
- homeassistant.service:
service: persistent_notification.create
data:
title: "Message from ${device_name_1}"
data_template:
message: "Switch turned off because power exceeded ${max_power}W"
update_interval: 30s
status_led:
pin:
number: GPIO0
inverted: true
Desweiteren kann ich den Webserver nicht einbinden. Geht das am ESP32 nicht?
This feature is only available with frameworks ['arduino'].
Kann mir jemand weiterhelfen ?