Last active
December 12, 2025 04:37
-
-
Save smirnowegor/3c07f8b74fe4fd7b76629aaced790484 to your computer and use it in GitHub Desktop.
Neptun for Esphome for Home Assistant ( Modbus RTU)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| esphome: | |
| name: main-controller | |
| friendly_name: Main controller | |
| esp32: | |
| board: esp32dev | |
| framework: | |
| type: arduino | |
| # Enable logging | |
| logger: | |
| level: DEBUG | |
| # Enable Home Assistant API | |
| api: | |
| encryption: | |
| key: "1J746fTvtBqR2NDS5ARLa8wPfrLH7I5PWThuzNUыыыmQ1M=" | |
| ota: | |
| - platform: esphome | |
| password: "PASS" | |
| # wifi: | |
| # Если Wi-Fi не используется, закомментируйте ssid и password | |
| # ssid: !secret wifi_ssid | |
| # password: !secret wifi_password | |
| # Enable fallback hotspot (captive portal) in case wifi connection fails | |
| # ap: | |
| # ssid: "Main-Controller Fallback Hotspot" | |
| # password: "PASS" | |
| ethernet: | |
| type: LAN8720 | |
| mdc_pin: GPIO23 | |
| mdio_pin: GPIO18 | |
| clk: | |
| pin: GPIO17 | |
| mode: CLK_OUT # или CLK_EXT_IN — зависит от твоей схемы | |
| phy_addr: 0 | |
| manual_ip: | |
| static_ip: 192.168.1.199 | |
| gateway: 192.168.1.1 | |
| subnet: 255.255.255.0 | |
| # ВЫШЕ ваша конфигурация esp платы, ниже можно копировать и вставлять к себе. Внимание! Используется стандартный адрес Neptun который 240б если другой то нужно поменять. | |
| captive_portal: | |
| uart: | |
| id: uart_modbus | |
| tx_pin: GPIO33 | |
| rx_pin: GPIO32 | |
| baud_rate: 9600 | |
| data_bits: 8 | |
| stop_bits: 1 | |
| parity: NONE | |
| modbus: | |
| id: modbus_neptun | |
| uart_id: uart_modbus | |
| modbus_controller: | |
| - id: neptun_device | |
| # Адрес модуля по умолчанию 240 (0xF0) согласно регистру 0005 | |
| address: 240 | |
| modbus_id: modbus_neptun | |
| setup_priority: -10 | |
| update_interval: 15s # Опрос раз в 15 секунд для теста | |
| switch: | |
| # РАБОЧИЙ ВАРИАНТ Управление кранами Группы 1 (Бит 8 регистра 0) | |
| - platform: modbus_controller | |
| modbus_controller_id: neptun_device | |
| name: "Neptun Valve Group 1" | |
| id: valve_group_1 | |
| address: 0 # Адрес регистра 0000 | |
| register_type: holding | |
| bitmask: 0x100 # Маска для 8-го бита (0x100) | |
| icon: "mdi:pipe-valve" | |
| # Управление кранами Группы 2 Группа 2 не подключена (Бит 9 регистра 0) | |
| - platform: modbus_controller | |
| modbus_controller_id: neptun_device | |
| name: "Neptun Valve Group 2" | |
| id: valve_group_2 | |
| address: 0 # Адрес регистра 0000 | |
| register_type: holding | |
| bitmask: 0x200 # Маска для 9-го бита (0x200) | |
| icon: "mdi:pipe-valve" | |
| # --- СИСТЕМНЫЕ НАСТРОЙКИ (Регистр 0) --- | |
| # Включение группирования (Регистр 0, бит 10 / А) | |
| # 0 - одна группа (все краны работают синхронно) | |
| # 1 - две группы (краны управляются раздельно) | |
| - platform: modbus_controller | |
| modbus_controller_id: neptun_device | |
| name: "Neptun Two Groups Mode" | |
| address: 0 | |
| register_type: holding | |
| bitmask: 0x400 # Бит 10 (шестнадцатеричное A) | |
| entity_category: config | |
| icon: "mdi:checkbox-multiple-marked" | |
| # Закрывание кранов при потере беспроводного датчика (Регистр 0, бит 11 / B) | |
| # 0 - выключено, 1 - включено | |
| - platform: modbus_controller | |
| modbus_controller_id: neptun_device | |
| name: "Neptun Close on Sensor Lost" | |
| address: 0 | |
| register_type: holding | |
| bitmask: 0x800 # Бит 11 (шестнадцатеричное B) | |
| entity_category: config | |
| icon: "mdi:shield-alert" | |
| # Режим "Мойка пола" (Регистр 0, бит 0) | |
| # При включении игнорирует протечки в течение 45 минут (обычно) | |
| - platform: modbus_controller | |
| modbus_controller_id: neptun_device | |
| name: "Neptun Floor Cleaning Mode" | |
| address: 0 | |
| register_type: holding | |
| bitmask: 0x01 | |
| icon: "mdi:cleaning-services" | |
| # Блокировка клавиатуры (Регистр 0, бит 12) | |
| - platform: modbus_controller | |
| modbus_controller_id: neptun_device | |
| name: "Neptun Keypad Lock" | |
| address: 0 | |
| register_type: holding | |
| bitmask: 0x1000 # 12-й бит (2^12 = 4096 = 0x1000) | |
| icon: "mdi:lock" | |
| binary_sensor: | |
| # --- ГРУППА 1 --- | |
| # Тревога протечки по Группе 1 (Регистр 0, бит 1) | |
| - platform: modbus_controller | |
| modbus_controller_id: neptun_device | |
| name: "Neptun Alarm Group 1" | |
| id: neptun_alarm_g1 | |
| register_type: holding | |
| address: 0 | |
| bitmask: 0x02 # Бит 1 | |
| device_class: moisture | |
| # Статус кранов Группы 1 (Регистр 0, бит 8: 0-закрыто, 1-открыто) | |
| - platform: modbus_controller | |
| modbus_controller_id: neptun_device | |
| name: "Neptun Valve Status Group 1" | |
| id: neptun_valve_status_g1 | |
| register_type: holding | |
| address: 0 | |
| bitmask: 0x100 # Бит 8 | |
| device_class: opening | |
| # --- ГРУППА 2 --- | |
| # Тревога протечки по Группе 2 (Регистр 0, бит 2) | |
| - platform: modbus_controller | |
| modbus_controller_id: neptun_device | |
| name: "Neptun Alarm Group 2" | |
| id: neptun_alarm_g2 | |
| register_type: holding | |
| address: 0 | |
| bitmask: 0x04 # Бит 2 | |
| device_class: moisture | |
| # Статус кранов Группы 2 (Регистр 0, бит 9) | |
| - platform: modbus_controller | |
| modbus_controller_id: neptun_device | |
| name: "Neptun Valve Status Group 2" | |
| id: neptun_valve_status_g2 | |
| register_type: holding | |
| address: 0 | |
| bitmask: 0x200 # Бит 9 | |
| device_class: opening | |
| # --- ОБЩИЕ СИСТЕМНЫЕ СТАТУСЫ --- | |
| # Флаг потери беспроводных датчиков (Регистр 0, бит 4) | |
| - platform: modbus_controller | |
| modbus_controller_id: neptun_device | |
| name: "Neptun Wireless Sensor Lost" | |
| register_type: holding | |
| address: 0 | |
| bitmask: 0x10 | |
| device_class: problem | |
| # Флаг разряда батарей в беспроводных датчиках (Регистр 0, бит 3) | |
| - platform: modbus_controller | |
| modbus_controller_id: neptun_device | |
| name: "Neptun Wireless Low Battery" | |
| register_type: holding | |
| address: 0 | |
| bitmask: 0x08 | |
| device_class: battery | |
| # --- ПРОВОДНЫЕ ЛИНИИ (ДЕТАЛИЗАЦИЯ) --- | |
| # Статусы конкретных проводных линий (Регистр 3) | |
| - platform: modbus_controller | |
| modbus_controller_id: neptun_device | |
| name: "Neptun Wired Line 1 Alarm" | |
| register_type: holding | |
| address: 3 | |
| bitmask: 0x02 # Бит 1 (В документации бит 1 это линия 2? Проверьте на практике, обычно 0=Линия1) | |
| # Согласно : Бит 1 - Вторая линия, Бит 2 - Третья. | |
| # Если следовать PDF буквально: | |
| # Бит 0 - ? (в PDF не описан явно, но логично предположить Линию 1, либо Линия 1 это Бит 1) | |
| # Примечание: В PDF для регистра 0001 биты 0-1 это Линия 2. Это странно. | |
| # Рекомендую проверить биты: 0x01, 0x02, 0x04, 0x08. | |
| device_class: moisture | |
| # --- Беспроводные датчики (наличие тревоги) --- | |
| - platform: modbus_controller | |
| modbus_controller_id: neptun_device | |
| name: "Neptun: WS1 - Alarm" | |
| register_type: holding | |
| address: 57 # рег.0057 | |
| bitmask: 0x0001 # бит0 = наличие тревоги | |
| device_class: moisture | |
| icon: "mdi:water-alert" | |
| - platform: modbus_controller | |
| modbus_controller_id: neptun_device | |
| name: "Neptun: WS2 - Alarm" | |
| register_type: holding | |
| address: 58 # рег.0058 | |
| bitmask: 0x0001 | |
| device_class: moisture | |
| icon: "mdi:water-alert" | |
| - platform: modbus_controller | |
| modbus_controller_id: neptun_device | |
| name: "Neptun: WS3 - Alarm" | |
| register_type: holding | |
| address: 59 # рег.0059 | |
| bitmask: 0x0001 | |
| device_class: moisture | |
| icon: "mdi:water-alert" | |
| sensor: | |
| # --- СИСТЕМНАЯ ИНФОРМАЦИЯ --- | |
| # Текущий Modbus адрес устройства (Регистр 5, старший байт) | |
| - platform: modbus_controller | |
| modbus_controller_id: neptun_device | |
| name: "Neptun Modbus Address" | |
| address: 5 | |
| register_type: holding | |
| value_type: U_WORD | |
| accuracy_decimals: 0 | |
| entity_category: diagnostic | |
| filters: | |
| # Сначала превращаем x в int, потом сдвигаем | |
| - lambda: return ((int)x >> 8); | |
| # Скорость порта (Регистр 5, младший байт) | |
| - platform: modbus_controller | |
| modbus_controller_id: neptun_device | |
| name: "Neptun Baud Rate Index" | |
| id: neptun_baud_index | |
| address: 5 | |
| register_type: holding | |
| value_type: U_WORD | |
| accuracy_decimals: 0 | |
| entity_category: diagnostic | |
| filters: | |
| # Сначала превращаем x в int, потом применяем маску | |
| - lambda: return ((int)x & 0xFF); | |
| - platform: modbus_controller | |
| modbus_controller_id: neptun_device | |
| name: "Neptun: Wireless sensors count" | |
| register_type: holding | |
| address: 6 | |
| value_type: U_WORD | |
| unit_of_measurement: "шт" | |
| accuracy_decimals: 0 | |
| icon: "mdi:chip" | |
| - platform: modbus_controller | |
| modbus_controller_id: neptun_device | |
| name: "Neptun Wireless 1 Status Raw" | |
| id: neptun_ws1_raw | |
| address: 57 | |
| register_type: holding | |
| value_type: U_WORD | |
| unit_of_measurement: "" | |
| accuracy_decimals: 0 | |
| - platform: modbus_controller | |
| modbus_controller_id: neptun_device | |
| name: "Neptun Wireless 2 Status Raw" | |
| id: neptun_ws2_raw | |
| address: 58 | |
| register_type: holding | |
| value_type: U_WORD | |
| unit_of_measurement: "" | |
| accuracy_decimals: 0 | |
| - platform: modbus_controller | |
| modbus_controller_id: neptun_device | |
| name: "Neptun Wireless 3 Status Raw" | |
| id: neptun_ws3_raw | |
| address: 59 | |
| register_type: holding | |
| value_type: U_WORD | |
| unit_of_measurement: "" | |
| accuracy_decimals: 0 | |
| - platform: template | |
| name: "Neptun Wireless 1 Battery Percent" | |
| id: neptun_ws1_batt | |
| unit_of_measurement: "%" | |
| accuracy_decimals: 0 | |
| lambda: |- | |
| uint16_t v = (uint16_t)id(neptun_ws1_raw).state; | |
| return (float)((v >> 8) & 0xFF); | |
| - platform: template | |
| name: "Neptun Wireless 1 Signal Level" | |
| id: neptun_ws1_signal_level | |
| accuracy_decimals: 0 | |
| lambda: |- | |
| uint16_t v = (uint16_t)id(neptun_ws1_raw).state; | |
| return (float)((v >> 3) & 0x07); | |
| - platform: template | |
| name: "Neptun Wireless 2 Battery Percent" | |
| id: neptun_ws2_batt | |
| unit_of_measurement: "%" | |
| accuracy_decimals: 0 | |
| lambda: |- | |
| uint16_t v = (uint16_t)id(neptun_ws2_raw).state; | |
| return (float)((v >> 8) & 0xFF); | |
| - platform: template | |
| name: "Neptun Wireless 2 Signal Level" | |
| id: neptun_ws2_signal_level | |
| accuracy_decimals: 0 | |
| lambda: |- | |
| uint16_t v = (uint16_t)id(neptun_ws2_raw).state; | |
| return (float)((v >> 3) & 0x07); | |
| - platform: template | |
| name: "Neptun Wireless 3 Battery Percent" | |
| id: neptun_ws3_batt | |
| unit_of_measurement: "%" | |
| accuracy_decimals: 0 | |
| lambda: |- | |
| uint16_t v = (uint16_t)id(neptun_ws3_raw).state; | |
| return (float)((v >> 8) & 0xFF); | |
| - platform: template | |
| name: "Neptun Wireless 3 Signal Level" | |
| id: neptun_ws3_signal_level | |
| accuracy_decimals: 0 | |
| lambda: |- | |
| uint16_t v = (uint16_t)id(neptun_ws3_raw).state; | |
| return (float)((v >> 3) & 0x07); | |
| text_sensor: | |
| # Текстовое представление скорости порта (без изменений, но для контекста) | |
| - platform: template | |
| name: "Neptun Baud Rate" | |
| entity_category: diagnostic | |
| icon: "mdi:speedometer" | |
| lambda: |- | |
| // Здесь тоже важно убедиться, что мы берем целое число | |
| int idx = (int)id(neptun_baud_index).state; | |
| switch(idx) { | |
| case 0: return {"1200"}; | |
| case 1: return {"2400"}; | |
| case 2: return {"4800"}; | |
| case 3: return {"9600"}; | |
| case 4: return {"19200"}; | |
| case 5: return {"38400"}; | |
| case 6: return {"57600"}; | |
| case 7: return {"115200"}; | |
| case 8: return {"230400"}; | |
| case 9: return {"460800"}; | |
| case 10: return {"921600"}; | |
| default: return {"Unknown"}; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment