From 36606cc5ab33b27897f5a99cfd70ddc8ed7a01a7 Mon Sep 17 00:00:00 2001 From: miki Date: Tue, 2 Dec 2025 10:04:10 +0100 Subject: [PATCH] =?UTF-8?q?P=C5=99idat=20pwm-test-esphome.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pwm-test-esphome.yaml | 345 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 345 insertions(+) create mode 100644 pwm-test-esphome.yaml diff --git a/pwm-test-esphome.yaml b/pwm-test-esphome.yaml new file mode 100644 index 0000000..89eae8e --- /dev/null +++ b/pwm-test-esphome.yaml @@ -0,0 +1,345 @@ +esphome: + name: modbus-pwm + friendly_name: Modbus PWM + comment: Testovací yaml pro pwm modul arduino + +esp32: + board: esp32dev + framework: + type: esp-idf + +# Enable logging +logger: + level: DEBUG + +ota: + - platform: esphome + password: !secret ota_passwd + +wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password + +web_server: + port: 80 + version: 3 + sorting_groups: + - id: sorting_group_testing + name: "Testing components" + sorting_weight: 10 + - id: sorting_group_pwm_config + name: "PWM settings" + sorting_weight: 20 + +mqtt: + broker: !secret conf_mqtt_broker + username: !secret conf_mqtt_username + password: !secret conf_mqtt_password + discovery: true + discover_ip: true + # Načtu si teploty pro termostat + on_json_message: + topic: 'zigbee2mqtt/SNZB-02_01' + then: + - lambda: |- + id(temperature).publish_state(x["temperature"].as()); + - lambda: |- + id(humidity).publish_state(x["humidity"].as()); + + + +# ------------------------- +# UART → Modbus přes RS485 +# ------------------------- +uart: + tx_pin: GPIO18 + rx_pin: GPIO19 + baud_rate: 9600 + stop_bits: 1 + +modbus: + id: modbus1 + +modbus_controller: + - id: slave_device + address: 3 # adresa Arduino Modbus zařízení + modbus_id: modbus1 + update_interval: 10s + command_throttle: 100ms + setup_priority: -10 + +# -------------------------------------------------- +# 6× PWM výstupy → zapisují 0–100 % do holding reg. +# Použity jen 4 PWM +# 4x PWM group → zapisují 0–100 % do holding reg. +# Použitá jen jedna group +# -------------------------------------------------- +# -------------------------------------------------- +# NO/NC přepínače (holding 5–8) +# 0 = NC (normal closed → HIGH = otevře) +# 1 = NO (normal open → HIGH = zavře) +# -------------------------------------------------- +packages: +## PWM1 + pwm1_out: !include + file: common/pwm_pin_output.yaml + vars: + id: pwm1_out + address: 16 + switch_no_nc_1: !include + file: common/pwm_set_no_nc.yaml + vars: + id_name: 1 + address: 17 + pwm_to_group_1: !include + file: common/pwm_to_group.yaml + vars: + id: 1 + address: 18 +## PWM2 + pwm2_out: !include + file: common/pwm_pin_output.yaml + vars: + id: pwm2_out + address: 19 + + switch_no_nc_2: !include + file: common/pwm_set_no_nc.yaml + vars: + id_name: 2 + address: 20 + pwm_to_group_2: !include + file: common/pwm_to_group.yaml + vars: + id: 2 + address: 21 +## PWM3 + pwm3_out: !include + file: common/pwm_pin_output.yaml + vars: + id: pwm3_out + address: 22 + switch_no_nc_3: !include + file: common/pwm_set_no_nc.yaml + vars: + id_name: 3 + address: 23 + pwm_to_group_3: !include + file: common/pwm_to_group.yaml + vars: + id: 3 + address: 24 +## PVM4 + pwm4_out: !include + file: common/pwm_pin_output.yaml + vars: + id: pwm4_out + address: 25 + switch_no_nc_4: !include + file: common/pwm_set_no_nc.yaml + vars: + id_name: 4 + address: 26 + pwm_to_group_4: !include + file: common/pwm_to_group.yaml + vars: + id: 4 + address: 27 + + + group1_pwm: !include + file: common/pwm_pin_output.yaml + vars: + id: group_pwm_1 + address: 11 + +switch: +# -------------------------------------------------- +# Test Mode (holding reg. 9) +# --------------------------------------------------30.5 + - platform: modbus_controller + modbus_controller_id: slave_device + name: "Test Mode" + register_type: holding + icon: mdi:toggle-switch-variant-off + address: 1 + write_lambda: |- + return x ? 1 : 0; + # read_lambda: |- + # return (uint16_t)x == 1; + + +# -------------------------------------------------- +# LED SWITCH → D13 (holding register 12) +# 0 = OFF, 1 = ON +# -------------------------------------------------- + + - platform: modbus_controller + modbus_controller_id: slave_device + name: "LED D13" + register_type: holding + icon: mdi:toggle-switch-variant-off + address: 9 + write_lambda: |- + return x ? 1 : 0; + # read_lambda: |- + # return (uint16_t)x == 1; + +# -------------------------------------------------- +# STATUS & ERROR → monitoring (registers 10 & 11) +# Bitmask status_flags: +# bit0 = config OK +# bit1 = CRC OK +# bit2 = defaults loaded +# -------------------------------------------------- +sensor: + - platform: template + name: "Target climate temperature" + id: target_tmp + update_interval: 60s + unit_of_measurement: "°C" + icon: "mdi:thermometer" + device_class: "temperature" + state_class: "measurement" + accuracy_decimals: 1 + + - platform: pid + name: "PID Climate heat" + type: HEAT + unit_of_measurement: "%" + icon: mdi:valve + device_class: "power_factor" + state_class: "measurement" + accuracy_decimals: 1 + + - platform: template + name: "Teplota" + id: temperature + unit_of_measurement: "°C" + icon: "mdi:thermometer" + device_class: "temperature" + state_class: "measurement" + accuracy_decimals: 1 + + - platform: template + name: Vlhkost + id: humidity + unit_of_measurement: "%" + icon: "mdi:water-percent" + device_class: "humidity" + state_class: "measurement" + accuracy_decimals: 1 + + - platform: modbus_controller + modbus_controller_id: slave_device + name: "Status Flags" + register_type: holding + address: 2 + unit_of_measurement: "flags" + + - platform: modbus_controller + modbus_controller_id: slave_device + name: "Last Error Code" + register_type: holding + address: 3 + unit_of_measurement: "code" + + - platform: modbus_controller + modbus_controller_id: slave_device + name: "Modbus age" + register_type: holding + address: 4 + unit_of_measurement: "ms" + + - platform: modbus_controller + modbus_controller_id: slave_device + name: "Temperature 1" + register_type: holding + address: 5 + unit_of_measurement: "°C" + icon: "mdi:thermometer" + device_class: "temperature" + state_class: "measurement" + accuracy_decimals: 1 + filters: + - multiply: 0.01 + + - platform: modbus_controller + modbus_controller_id: slave_device + name: "Temperature 2" + register_type: holding + address: 6 + unit_of_measurement: "°C" + icon: "mdi:thermometer" + device_class: "temperature" + state_class: "measurement" + accuracy_decimals: 1 + filters: + - multiply: 0.01 + + - platform: modbus_controller + modbus_controller_id: slave_device + name: "Temperature 3" + register_type: holding + address: 7 + unit_of_measurement: "°C" + icon: "mdi:thermometer" + device_class: "temperature" + state_class: "measurement" + accuracy_decimals: 1 + filters: + - multiply: 0.01 + + - platform: modbus_controller + modbus_controller_id: slave_device + name: "Temperature 4" + register_type: holding + address: 8 + unit_of_measurement: "°C" + icon: "mdi:thermometer" + device_class: "temperature" + state_class: "measurement" + accuracy_decimals: 1 + filters: + - multiply: 0.01 + +button: + - platform: restart + name: "Restart" + + +number: + - platform: modbus_controller + id: pwm_period_ms + modbus_controller_id: slave_device + name: "PWM Period (s)" + web_server: + sorting_group_id: sorting_group_pwm_config + register_type: holding + address: 0 + unit_of_measurement: "s" + min_value: 1 + max_value: 600 + step: 1 + mode: slider + +climate: + - platform: pid + id: pid_climate + name: "Pokoj" + sensor: temperature + default_target_temperature: 20.5°C + heat_output: group_pwm_1 + control_parameters: + kp: 0.35 + ki: 0.000015 + kd: 0.0 # Není třeba protože velká setvačnost + visual: + min_temperature: 18 + max_temperature: 23 + temperature_step: 0.5 + icon: mdi:thermostat + on_state: + - lambda: |- + id(target_tmp).publish_state(id(pid_climate).target_temperature); +