Приветствую, друзья! Те, кто давно читает мои статьи, возможно вспомнит одну из первых, посвященную самодельным устройствам на базе ESP8266. В то время у меня был целый цикл статей, посвященный ES8266, но сейчас речь идет о той, где я рассказывал про самоделку для автоматизации своего Гаража.
Устройство включало в себя:
- Реле - 4шт. для управления светом, вытяжкой и сиреной;
- Дискретные входы, для подключения датчика движения и геркона на ворота;
- Датчик температуры/влажности DHT22;
- Датчик температуры для улицы DS18B20.
С тех пор прошло очень много времени, накопилось достаточно много опыта, но переделывать устройство не было необходимости - все работало так, как задумывалось на тот момент. Единственное, чего очень хотелось - чтобы устройство работало не по протоколу Wi-Fi, а хотя бы через Ethernet. Можно было бы просто заменить плату на ESP32 с возможностью подключения по Ethernet, но, как говорится, "Работает - не лезь!".
И вот тут я случайно наткнулся на DIY контроллер на DIN-рейку JetHome JetHub E1, который, якобы, должен был полностью заменить мою самоделку. Давайте разбираться, так ли это.
Обзор
Взяв в руки контроллер JetHome JetHub E1, первое впечатление было - "да это же JetHome JetHub D1", но присмотревшись ближе я понял, что это не так. Это совершенно другой контроллер - как по архитектуре, так и по функционалу.
JetHome JetHub E1 - DIY контроллер на базе вышеупомянутой ESP32 с Ethernet интерфейсом на борту. Для расширения количества пинов ESP32 используется расширитель портов PCF8574. Итак, давайте разберемся что умеет JetHome JetHub E1 и для кого он подойдет, а главное, сможет ли он заменить мою самоделку.
Технический характеристики
На сайте производителя в наличии 3 ревизии контроллера. Давайте сравним их между собой.
Периферийная плата | PD76-R5 (v1) | PD76-R5-DC (v2) | PD76-R5-AC (v2) |
Чипсет | ESP32 | ESP32 | ESP32 |
Тип корпуса | На DIN рейку | На DIN рейку | На DIN рейку |
RAM | 520 KB | 520 KB | 520 KB |
Флеш | SPI NOR 4MB | SPI NOR 4MB | SPI NOR 4MB |
Тип питания | DC 9v~56v (клеммы)/Passive PoE | DC 9v~56v (клеммы)/Passive PoE | AC 220v (клеммы) |
Network | Ethernet 10/100, Wi-Fi 2.4Ghz | Ethernet 10/100, Wi-Fi 2.4Ghz | Ethernet 10/100, Wi-Fi 2.4Ghz |
Реле 16A | 5 | 5 | 5 |
Вход "сухой контакт" | 6 | 6 | 6 |
1-Wire | - | 1 | 1 |
Как видим, контроллеры очень похожи, потому что они все собраны на базе одно и того же контроллера ESP32. Отличаются только способом питания и наличием пина для подключения 1-Wire.
Для своих целей я решил использовать версию PD76-R5-AC (v2), чтоб не использовать внешний адаптер питания. Давайте ближе с ней познакомимся.
Фото контроллера
Как я уже сказал, JetHome JetHub E1 очень похож на JetHome JetHub D1(+). Все потому, что он выполнен в том же корпусе и в единой стилистике девайсов компании.
- Габаритные размеры корпуса: 130 x 76 x 57 мм.
- Ширина корпуса 76мм, что составляет около 4,3 модулей DIN.
Также не могу не обратить внимание на то, что разработчики позаботились о том, чтобы мы как можно меньше лазили в свой щиток и вывели консольный порт для прошивки контроллера на переднюю панель.
Ну и раз мы заговорили про прошивку контроллера, давайте соберем прошивку и зальем ее в контроллер.
Прошивка
На странице заказа контроллера можно выбрать предустановку программного обеспечения ESPHome. Я выбрал без ПО, решил сам разобраться во всем. Контроллер приехал, подключаем его через консольный кабель к ПК, в ESPhome, компилируем прошивку, сохраняем .bin файл и заливаем его в контроллер любым привычным для нас способом.
В документации к контроллеру, во вкладке Программное обеспечение, производитель добавил файлы конфигурации. Я же немного переделал его под себя.
Мой конфиг ESPhome
В дефолтном конфиге отключены web-интерфейс контроллера и MQTT брокер. Для своих нужд я все же включу их, дальше поймете для чего я это сделал.
esphome:
name: e1-pd76-r5-406aa8 # где "-406aa8" суфикс mac-адреса platform: ESP32
board: nodemcu-32s
#name_add_mac_suffix: true # This option adds MAC address to the end of the device name
## WARNING: Disable WiFi and captive_portal if Ethernet enabled
#wifi:
# ssid: "***"
# password: "***"
#
# # Enable fallback hotspot (captive portal) in case wifi connection fails
# ap:
# ssid: "JetHub E1 Fallback Hotspot"
# password: "***"
#
#captive_portal:
# Enable Ethernet
ethernet:
type: LAN8720
mdc_pin: GPIO23
mdio_pin: GPIO18
clk_mode: GPIO17_OUT
phy_addr: 1
# Enable logging
logger:
# Enable Home Assistant API
api:
# Enable OTA firmware update
ota:
# Веб сервер
web_server:
port: 80
#MQTT клиент
mqtt:
broker: 192.168.88.6
port: 1883
username: admin
password: admin
discovery: false
# Enable I2C bus
i2c:
sda: 5
scl: 4
frequency: 400kHz
scan: true
id: i2c1
# Enable UART1
uart:
- tx_pin: 33
rx_pin: 34
baud_rate: 115200
id: uart1
# Enable I2C GPIO expanders
pcf8574:
- id: cpu_gpio_exp
address: 0x20
pcf8575: true
- id: mb_gpio_exp
address: 0x22
pcf8575: true
# Enable digital outputs: LEDs and relays
switch:
- platform: gpio
name: "LED Red"
id: red_led
pin:
pcf8574: cpu_gpio_exp
number: 0
mode: OUTPUT
inverted: true
- platform: gpio
name: "LED Green"
id: green_led
pin:
pcf8574: cpu_gpio_exp
number: 1
mode: OUTPUT
inverted: true
- platform: gpio
name: "Relay 1"
id: relay_1
pin:
pcf8574: mb_gpio_exp
number: 8
mode: OUTPUT
inverted: true
- platform: gpio
name: "Relay 2"
id: relay_2
pin:
pcf8574: mb_gpio_exp
number: 9
mode: OUTPUT
inverted: true
- platform: gpio
name: "Relay 3"
id: relay_3
pin:
pcf8574: mb_gpio_exp
number: 10
mode: OUTPUT
inverted: true
- platform: gpio
name: "Relay 4"
id: relay_4
pin:
pcf8574: mb_gpio_exp
number: 11
mode: OUTPUT
inverted: true
- platform: gpio
name: "Relay 5"
id: relay_5
pin:
pcf8574: mb_gpio_exp
number: 12
mode: OUTPUT
inverted: true
#Кнопка перезапуска
- platform: restart
name: JetHub E1 Restart
# Enable inputs: button and discrete inputs
binary_sensor:
- platform: gpio
name: "FN button"
pin:
number: 0
inverted: true
- platform: gpio
name: "Input 1"
pin:
pcf8574: mb_gpio_exp
number: 0
inverted: false
- platform: gpio
name: "Input 2"
pin:
pcf8574: mb_gpio_exp
number: 1
inverted: false
- platform: gpio
name: "Input 3"
pin:
pcf8574: mb_gpio_exp
number: 2
inverted: false
- platform: gpio
name: "Input 4"
pin:
pcf8574: mb_gpio_exp
number: 3
inverted: false
- platform: gpio
name: "Input 5"
pin:
pcf8574: mb_gpio_exp
number: 4
inverted: false
- platform: gpio
name: "Input 6"
pin:
pcf8574: mb_gpio_exp
number: 5
inverted: false
# Enable 1-Wire bus on external connector
dallas:
- pin: 16
## Configure individual sensors
sensor:
- platform: dallas
address: 0x0b3c01b556be2a28
name: "Temperature"
#Время в онлайне
- platform: uptime
name: JetHub E1 Uptime
#Версия прошивки
text_sensor:
- platform: version
name: JetHub E1 FW version
После прошивки контроллер готов к использованию, и для пользователей Home Assistant на этом можно было бы все завершить. Через api ESPhome контроллер добавился в систему и добавил все необходимые сущности.
Web-интерфейс ESPhome JetHub E1
Но мы же пойдем дальше и добавим контроллер JetHome JetHub E1 в Sprut.hub
JetHome Jetub E1 в Sprut.hub
Для каждого пользователя шаблон будет немного отличаться, но за основу можно использовать мой.
{
"name": "JetHub E1",
"manufacturer": "JetHome",
"model": "e1-pd76-r5",
"catalogId": 4181,
"services": [
{
"name": "Relay 1",
"type": "Switch",
"characteristics": [
{
"type": "On",
"link": {
"type": "String",
"topicSearch": "(.*)/switch/relay_1/state",
"topicGet": "(1)/switch/relay_1/state",
"topicSet": "(1)/switch/relay_1/command",
"map": {
"false": "OFF",
"true": "ON"
}
}
}
]
},
{
"name": "Relay 2",
"type": "Switch",
"characteristics": [
{
"type": "On",
"link": {
"type": "String",
"topicGet": "(1)/switch/relay_2/state",
"topicSet": "(1)/switch/relay_2/command",
"map": {
"false": "OFF",
"true": "ON"
}
}
}
]
},
{
"name": "Relay 3",
"type": "Switch",
"characteristics": [
{
"type": "On",
"link": {
"type": "String",
"topicGet": "(1)/switch/relay_3/state",
"topicSet": "(1)/switch/relay_3/command",
"map": {
"false": "OFF",
"true": "ON"
}
}
}
]
},
{
"name": "Relay 4",
"type": "Switch",
"characteristics": [
{
"type": "On",
"link": {
"type": "String",
"topicGet": "(1)/switch/relay_4/state",
"topicSet": "(1)/switch/relay_4/command",
"map": {
"false": "OFF",
"true": "ON"
}
}
}
]
},
{
"name": "Relay 5",
"type": "Switch",
"characteristics": [
{
"type": "On",
"link": {
"type": "String",
"topicGet": "(1)/switch/relay_5/state",
"topicSet": "(1)/switch/relay_5/command",
"map": {
"false": "OFF",
"true": "ON"
}
}
}
]
},
{
"name": "LED Red",
"type": "Switch",
"characteristics": [
{
"type": "On",
"link": {
"type": "String",
"topicGet": "(1)/switch/led_red/state",
"topicSet": "(1)/switch/led_red/command",
"map": {
"false": "OFF",
"true": "ON"
}
}
}
]
},
{
"name": "LED Green",
"type": "Switch",
"characteristics": [
{
"type": "On",
"link": {
"type": "String",
"topicGet": "(1)/switch/led_green/state",
"topicSet": "(1)/switch/led_green/command",
"map": {
"false": "OFF",
"true": "ON"
}
}
}
]
},
{
"name": "FN button",
"type": "ContactSensor",
"characteristics": [
{
"type": "ContactSensorState",
"link": {
"type": "String",
"topicGet": "(1)/binary_sensor/fn_button/state",
"map": {
"0": "OFF",
"1": "ON"
}
}
}
]
},
{
"name": "Input 1",
"type": "ContactSensor",
"characteristics": [
{
"type": "ContactSensorState",
"link": {
"type": "String",
"topicGet": "(1)/binary_sensor/input_1/state",
"map": {
"0": "OFF",
"1": "ON"
}
}
}
]
},
{
"name": "Input 2",
"type": "ContactSensor",
"characteristics": [
{
"type": "ContactSensorState",
"link": {
"type": "String",
"topicGet": "(1)/binary_sensor/input_2/state",
"map": {
"0": "OFF",
"1": "ON"
}
}
}
]
},
{
"name": "Input 3",
"type": "ContactSensor",
"characteristics": [
{
"type": "ContactSensorState",
"link": {
"type": "String",
"topicGet": "(1)/binary_sensor/input_3/state",
"map": {
"0": "OFF",
"1": "ON"
}
}
}
]
},
{
"name": "Input 4",
"type": "ContactSensor",
"characteristics": [
{
"type": "ContactSensorState",
"link": {
"type": "String",
"topicGet": "(1)/binary_sensor/input_4/state",
"map": {
"0": "OFF",
"1": "ON"
}
}
}
]
},
{
"name": "Input 5",
"type": "ContactSensor",
"characteristics": [
{
"type": "ContactSensorState",
"link": {
"type": "String",
"topicGet": "(1)/binary_sensor/input_5/state",
"map": {
"0": "OFF",
"1": "ON"
}
}
}
]
},
{
"name": "Input 6",
"type": "ContactSensor",
"characteristics": [
{
"type": "ContactSensorState",
"link": {
"type": "String",
"topicGet": "(1)/binary_sensor/input_6/state",
"map": {
"0": "OFF",
"1": "ON"
}
}
}
]
},
{
"type": "TemperatureSensor",
"characteristics": [
{
"type": "CurrentTemperature",
"link": {
"type": "Float",
"topicGet": "(1)/sensor/temperature/state"
}
}
]
}
]
}
Как видим, контроллер с его полным функкционалом доступен в Sprut.hub
Альтернативное ПО (ESP_Easy и Tasmota)
Я решил пойти дальше, и захотел протестировать работоспособность ESP_Easy и Tasmota. Проблемы, с которыми столкнулся:
- Как ESP_Easy, так и Tasmota из коробки не имеют в своем наборе поддерживаемой платы расширения портов PCF8574.
- Что касается интерфейса Ethernet, то он без каких-либо проблем работает в обеих вышеупомянутых системах.
Для тех, кто сможет помочь скомпилировать прошивку ESP_Easy или Tasmota, добавив в нее поддержку PCF8574 (16-портовый расширитель), просьба написать либо в комментарии, либо в личку (TG: @red_ik), буду очень благодарен.
Пины для подключени
Давайте еще раз детальнее рассмотрим, какими пинами оснащен контроллер.
Верхняя часть
Сверху расположились 5 реле до 16А каждое.
- 1 имеет состояние как НО, НЗ (перекидное).
- 2-4 только НО.
Нижняя часть
- Питание, в моем случае переменный ток 100 - 240В.;
- Шина 1-Wire;
- 6 дискретных входов;
- Ethernet порт.
1-Wire
Контроллер имеет пины для подключения по шине 1-Wire, поэтому нет необходимости что-то изобретать. На примере датчика температуры DS18B20 я продемонстрирую, как это выглядит. В прошивке выше я уже указал подключение датчика, единственное отличие будет в его адресе, который вы должны указать свой.
Также не могу не обратить внимание, что на одну шину можно подключить несколько датчиков DS18B20.
Отвечаю на вопросы
Для кого подойдет контроллер JetHome JetHub E1?
- Если вам необходим Wi-Fi или Ethernet контроллер на DIN-рейку, совместимый с любой платформой, которая поддерживает MQTT (например: Home Assistant, Sprut.hub, node-RED, HomeBridge ...), с возможностью коммутации до 5 реле, и до 6 дискретных выходов. Это то, что вам нужно. Бонусом получите несколько плюшек в виде интерфейса 1-Wire для подключения датчиков температуры DS18b20, 2х-цветный светодиод можно использовать для индикации событий и дополнительный дискретный вход в виде кнопки на передней панели FN. А также на выбор возможность питания контроллера как от постоянного напряжения 9-56В., так и от сети 220В. переменного тока.
Получилось ли у меня заменить мою самоделку из далекого 2018 года на JetHome JetHub E1?
- Отвечаю: более чем. Еще осталось незадействованное 1 реле и 4 дискретных входа. Кстати дискретные входы можно использовать как датчики состояния закрытия ригилей замков, повесив на них герконы или концевики.
Чего не хватает? Недостатки контроллера
- К недостаткам контроллера можно отнести только 1. В контроллере очень не хватает пинов для подключения внешней переферии, например i2c, или обычного датчика температуры/влажности DHT11/22... Но в оправдание производителя я отвечу на этот вопрос. Причиной, по которой производитель не вывел пины - нехватка пинов ESP32. Поэтому это как бы и не совсем недостаток, а скорее техническая невозможность.
Для кого еще подойдет контроллер?
- Для любителей программировать самостоятельно на Arduino IDE. Мы имеет полноценное DIY устройство, а как это будет работать - зависит только от ваших фантазий. Можно использовать как автономную железку для автоматизации вытяжки или освещения, без наличия интернета.