From c738e3ad49891a39d12d6e5d25abbf3c3ced442c Mon Sep 17 00:00:00 2001 From: bes-r Date: Sat, 6 Jun 2026 21:10:34 +0200 Subject: [PATCH] 1PM-mini-gen4/detached-script.js toevoegen --- 1PM-mini-gen4/detached-script.js | 326 +++++++++++++++++++++++++++++++ 1 file changed, 326 insertions(+) create mode 100644 1PM-mini-gen4/detached-script.js diff --git a/1PM-mini-gen4/detached-script.js b/1PM-mini-gen4/detached-script.js new file mode 100644 index 0000000..a42fad1 --- /dev/null +++ b/1PM-mini-gen4/detached-script.js @@ -0,0 +1,326 @@ +# ============================================================ +# ESPHome - Shelly 1PM Mini Gen4 +# Gira System 55 aan-uit schakelaar +# ============================================================ +# +# Schakelmodi: +# - Detached: Schakelaar stuurt events naar HA, relay wordt +# door HA-automations aangestuurd. +# - Toggle: Elke schakelactie togglet de lamp. +# - Volgen: Schakelaarstand = lampstatus (aan/uit). +# +# Fallback: +# Wanneer er GEEN verbinding is met Home Assistant (geen WiFi +# of API), valt de schakelaar automatisch terug op Toggle-modus +# zodat de lamp altijd lokaal bedienbaar blijft. +# +# ============================================================ +# PINOUT Shelly 1PM Mini Gen4 (ESP32-C3) +# ============================================================ +# GPIO3 - Relay +# GPIO10 - Switch input (wandschakelaar) +# GPIO4 - Deviceknop (op de Shelly zelf) +# GPIO0 - Status LED +# GPIO6 - UART TX (BL0942 energiemeting) +# GPIO7 - UART RX (BL0942 energiemeting) +# +# ⚠️ Controleer altijd de pinout voor jouw hardwareversie! +# ============================================================ + +substitutions: + device_name: "shelly-1pm-mini-gen4" + friendly_name: "Shelly 1PM Mini Gen4" + # Pas onderstaande aan per kamer/locatie: + light_name: "Lamp" + +esphome: + name: ${device_name} + friendly_name: ${friendly_name} + +esp32: + board: esp32-c3-devkitm-1 + framework: + type: esp-idf + +# ------------------------------------------------------------ +# Logging +# ------------------------------------------------------------ +logger: + baud_rate: 0 # Disable UART logging (UART wordt gebruikt voor BL0942) + +# ------------------------------------------------------------ +# WiFi +# ------------------------------------------------------------ +wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password + + # Fallback Access Point als WiFi wegvalt + ap: + ssid: "${friendly_name} AP" + password: !secret ap_password + + # Sneller reconnecten + fast_connect: true + power_save_mode: LIGHT + +# Captive portal voor fallback AP +captive_portal: + +# ------------------------------------------------------------ +# Home Assistant API +# ------------------------------------------------------------ +api: + encryption: + key: !secret api_key + +# ------------------------------------------------------------ +# OTA Updates +# ------------------------------------------------------------ +ota: + - platform: esphome + password: !secret ota_password + +# ------------------------------------------------------------ +# Webserver (optioneel, handig voor debugging) +# ------------------------------------------------------------ +web_server: + port: 80 + +# ------------------------------------------------------------ +# Globale variabelen +# ------------------------------------------------------------ +globals: + # Schakelmodus: 0 = Detached, 1 = Toggle, 2 = Volgen + - id: switch_mode + type: int + restore_value: yes + initial_value: "0" + +# ------------------------------------------------------------ +# Relay output +# ------------------------------------------------------------ +output: + - platform: gpio + id: relay_output + pin: GPIO3 + +# ------------------------------------------------------------ +# Lamp (als Light-entity voor volledige HA-integratie) +# ------------------------------------------------------------ +light: + - platform: binary + id: lamp + name: "${light_name}" + output: relay_output + restore_mode: RESTORE_DEFAULT_OFF + +# ------------------------------------------------------------ +# Wandschakelaar (Gira System 55 aan-uit schakelaar) +# ------------------------------------------------------------ +# Een aan-uit schakelaar heeft twee stabiele standen. +# Bij elke standswijziging (hoog→laag of laag→hoog) wordt +# een actie getriggerd. We gebruiken on_state zodat BEIDE +# overgangen als schakelmoment werken. +# ------------------------------------------------------------ +binary_sensor: + - platform: gpio + id: wall_switch + name: "${light_name} Schakelaar" + pin: + number: GPIO10 + mode: + input: true + pullup: true + inverted: true + filters: + - delayed_on: 30ms + - delayed_off: 30ms + on_state: + then: + - lambda: |- + // ----------------------------------------------- + // FALLBACK: Geen API-verbinding → altijd Toggle + // ----------------------------------------------- + if (!id(ha_connected).state) { + auto call = id(lamp).toggle(); + call.perform(); + ESP_LOGD("switch", "Geen HA-verbinding → fallback toggle"); + return; + } + + // ----------------------------------------------- + // DETACHED (modus 0) + // ----------------------------------------------- + if (id(switch_mode) == 0) { + // Stuur event naar HA; HA bepaalt wat er gebeurt + // De schakelaarstand wordt als binary_sensor zichtbaar + ESP_LOGD("switch", "Detached → event naar HA"); + return; + } + + // ----------------------------------------------- + // TOGGLE (modus 1) + // ----------------------------------------------- + if (id(switch_mode) == 1) { + auto call = id(lamp).toggle(); + call.perform(); + ESP_LOGD("switch", "Toggle → lamp omgeschakeld"); + return; + } + + // ----------------------------------------------- + // VOLGEN (modus 2) + // ----------------------------------------------- + if (id(switch_mode) == 2) { + if (x) { + auto call = id(lamp).turn_on(); + call.perform(); + } else { + auto call = id(lamp).turn_off(); + call.perform(); + } + ESP_LOGD("switch", "Volgen → lamp volgt schakelaar"); + return; + } + + # Knop op de Shelly zelf + - platform: gpio + id: device_button + name: "${light_name} Knop" + pin: + number: GPIO4 + mode: + input: true + pullup: true + inverted: true + filters: + - delayed_on: 30ms + - delayed_off: 30ms + on_press: + then: + - light.toggle: lamp + + # HA-verbindingsstatus (voor fallback-logica) + - platform: status + id: ha_connected + name: "${friendly_name} Status" + internal: true + +# ------------------------------------------------------------ +# Schakelmodus selector (instelbaar vanuit HA) +# ------------------------------------------------------------ +select: + - platform: template + id: switch_mode_select + name: "${light_name} Schakelmodus" + icon: "mdi:light-switch" + options: + - "Detached" + - "Toggle" + - "Volgen" + initial_option: "Detached" + optimistic: true + restore_value: true + set_action: + - lambda: |- + if (x == "Detached") { + id(switch_mode) = 0; + ESP_LOGI("mode", "Schakelmodus → Detached"); + } else if (x == "Toggle") { + id(switch_mode) = 1; + ESP_LOGI("mode", "Schakelmodus → Toggle"); + } else if (x == "Volgen") { + id(switch_mode) = 2; + ESP_LOGI("mode", "Schakelmodus → Volgen"); + } + +# ------------------------------------------------------------ +# UART voor BL0942 energiemeting +# ------------------------------------------------------------ +uart: + tx_pin: GPIO6 + rx_pin: GPIO7 + baud_rate: 9600 + +# ------------------------------------------------------------ +# Energiemeting (BL0942) +# ------------------------------------------------------------ +sensor: + - platform: bl0942 + voltage: + name: "${light_name} Spanning" + unit_of_measurement: "V" + accuracy_decimals: 1 + filters: + - sliding_window_moving_average: + window_size: 5 + send_every: 5 + current: + name: "${light_name} Stroom" + unit_of_measurement: "A" + accuracy_decimals: 3 + filters: + - sliding_window_moving_average: + window_size: 5 + send_every: 5 + power: + name: "${light_name} Vermogen" + unit_of_measurement: "W" + accuracy_decimals: 1 + filters: + - sliding_window_moving_average: + window_size: 5 + send_every: 5 + energy: + name: "${light_name} Energie" + unit_of_measurement: "kWh" + accuracy_decimals: 3 + frequency: + name: "${light_name} Frequentie" + unit_of_measurement: "Hz" + accuracy_decimals: 1 + update_interval: 10s + + # WiFi signaalsterkte + - platform: wifi_signal + name: "${friendly_name} WiFi Signaal" + update_interval: 60s + + # Uptime + - platform: uptime + name: "${friendly_name} Uptime" + update_interval: 300s + +# ------------------------------------------------------------ +# Status LED +# ------------------------------------------------------------ +status_led: + pin: + number: GPIO0 + inverted: true + +# ------------------------------------------------------------ +# Diagnostische tekst-sensoren +# ------------------------------------------------------------ +text_sensor: + - platform: wifi_info + ip_address: + name: "${friendly_name} IP" + ssid: + name: "${friendly_name} SSID" + + - platform: version + name: "${friendly_name} ESPHome Versie" + +# ------------------------------------------------------------ +# Restart-knop vanuit HA +# ------------------------------------------------------------ +button: + - platform: restart + name: "${friendly_name} Herstart" + icon: "mdi:restart" + + - platform: safe_mode + name: "${friendly_name} Safe Mode" + icon: "mdi:shield-bug" \ No newline at end of file