I built on @jaaem work and printed a circuit board. I’m also powering the circuit with a USB to 5V barrel connector instead of micro USB.
I have 3 more boards if anyone wants one. Just pay shipping
Parts:
Case: https://www.amazon.com/gp/product/B083LC22JZ
AMS1117-3.3 3.3V Voltage Regulator: https://www.amazon.com/gp/product/B07CP4P5XJ
TTL to RS485 Module 485: https://www.amazon.com/gp/product/B07YZTGHGG
D1 Mini (ESP8266): https://www.amazon.com/gp/product/B081PX9YFV
120 Ohm Resistor: https://www.amazon.com/EDGELEC-Resistor-Tolerance-Multiple-Resistance/dp/B07QH5QLR1
Connectors: https://www.amazon.com/gp/product/B091MQSM63
USB to Barrel: https://www.amazon.com/gp/product/B073SNC45F
DC Power Supply Jack Socket: https://www.amazon.com/gp/product/B082GHXS1Q
esphome:
name: boiler
esp8266:
board: d1_mini
uart:
id: mod_bus
tx_pin: GPIO3
rx_pin: GPIO1
baud_rate: 38400
modbus:
id: modbus1
modbus_controller:
- id: vlb
## the Modbus device addr
address: 0x1
modbus_id: modbus1
setup_priority: -10
command_throttle: 100ms
sensor:
- platform: modbus_controller
modbus_controller_id: vlb
name: "outlet_temp"
id: outlet_temp
register_type: holding
address: 0x7
value_type: U_WORD
accuracy_decimals: 1
filters:
- lambda: return x * 0.18 + 32.0;
unit_of_measurement: "°F"
- platform: modbus_controller
modbus_controller_id: vlb
name: "fan_rate"
id: fan_rate
register_type: holding
address: 0x8
value_type: U_WORD
accuracy_decimals: 1
bitmask: 0x7FFF
unit_of_measurement: "rpm"
- platform: modbus_controller
modbus_controller_id: vlb
name: "max_rpm"
id: max_rpm
register_type: holding
address: 193
value_type: U_WORD
accuracy_decimals: 1
unit_of_measurement: "rpm"
- platform: template
name: "firing_rate"
lambda: |-
return 11900.0 * id(fan_rate).state / id(max_rpm).state;
unit_of_measurement: "Btu/h"
- platform: modbus_controller
modbus_controller_id: vlb
name: "outdoor_temp"
id: outdoor_temp
register_type: holding
address: 170
value_type: U_WORD
accuracy_decimals: 1
unit_of_measurement: "°F"
filters:
- lambda: |-
if (x > 32767 ) {
return (x - 65536.0) * 0.18 + 32.0;
} else {
return x * 0.18 + 32.0;
}
# Alpine 150 = BTU Heat Rating: 119000 Btu/h
binary_sensor:
- platform: modbus_controller
modbus_controller_id: vlb
id: ch_demand
name: "Heat Demand"
register_type: holding
address: 66
- platform: modbus_controller
modbus_controller_id: vlb
id: water_demand
name: "Water Demand"
register_type: holding
address: 83
# Enable logging
logger:
level: VERBOSE
baud_rate: 0
# Enable Home Assistant API
api:
encryption:
key: "mxZeFzB2BiiUbCwflfkhM43uMqlDzoMJy2ChJhBsdRM="
ota:
password: !secret ota_password
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Boiler Fallback Hotspot"
password: ""
captive_portal:
web_server:
port: 80