506 lines
13 KiB
YAML
506 lines
13 KiB
YAML
substitutions:
|
|
name: "riden-labornetzteil"
|
|
friendly_name: "Riden Labornetzteil"
|
|
# Change this model to fit your particular one.
|
|
# You can find it in Home Assistant as the device diagnostic "Model Name".
|
|
model: "RD6018"
|
|
device_name: "rd6018-controller"
|
|
device_friendly_name: "Riden RD6018"
|
|
device_description: "Labornetzteil"
|
|
time_timezone: "Europe/Berlin"
|
|
|
|
# Model specific settings (Don't change these!)
|
|
RD6006_voltage_maximum: "60"
|
|
RD6006_voltage_accuracy: "2"
|
|
RD6006_voltage_multiplier: "0.01"
|
|
RD6006_current_maximum: "6"
|
|
RD6006_current_accuracy: "3"
|
|
RD6006_current_multiplier: "0.001"
|
|
|
|
RD6006P_voltage_maximum: "60"
|
|
RD6006P_voltage_accuracy: "3"
|
|
RD6006P_voltage_multiplier: "0.001"
|
|
RD6006P_current_maximum: "6"
|
|
RD6006P_current_accuracy: "4"
|
|
RD6006P_current_multiplier: "0.0001"
|
|
|
|
RD6012_voltage_maximum: "60"
|
|
RD6012_voltage_accuracy: "2"
|
|
RD6012_voltage_multiplier: "0.01"
|
|
RD6012_current_maximum: "12"
|
|
RD6012_current_accuracy: "2"
|
|
RD6012_current_multiplier: "0.01"
|
|
|
|
RD6018_voltage_maximum: "60"
|
|
RD6018_voltage_accuracy: "2"
|
|
RD6018_voltage_multiplier: "0.01"
|
|
RD6018_current_maximum: "18"
|
|
RD6018_current_accuracy: "2"
|
|
RD6018_current_multiplier: "0.01"
|
|
|
|
esphome:
|
|
name: $device_name
|
|
friendly_name: $device_friendly_name
|
|
comment: $device_description
|
|
name_add_mac_suffix: false
|
|
project:
|
|
name: "wildekek.rd6006-controller"
|
|
version: "1.4.1"
|
|
|
|
esp8266:
|
|
board: esp12e
|
|
|
|
wifi:
|
|
ssid: "Voltage-legacy"
|
|
password: !secret voltage_legacy_psk
|
|
use_address: riden-labornetzteil.home
|
|
power_save_mode: high
|
|
fast_connect: on
|
|
|
|
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
|
ap:
|
|
ssid: "RD6018 Fallback Hotspot"
|
|
password: !secret fallback_psk
|
|
|
|
captive_portal:
|
|
|
|
# Enable logging
|
|
logger:
|
|
level: INFO
|
|
# Disable logging via UART, since we're using this for modbus communication
|
|
baud_rate: 0
|
|
|
|
# Enable Home Assistant API
|
|
api:
|
|
encryption:
|
|
key: !secret apikey
|
|
|
|
ota:
|
|
password: !secret ota
|
|
|
|
# Enable status LED
|
|
status_led:
|
|
pin:
|
|
number: GPIO2
|
|
inverted: true
|
|
|
|
uart:
|
|
id: mod_bus
|
|
tx_pin: GPIO1
|
|
rx_pin: GPIO3
|
|
baud_rate: 115200
|
|
data_bits: 8
|
|
stop_bits: 1
|
|
parity: none
|
|
|
|
modbus:
|
|
id: modbus1
|
|
|
|
modbus_controller:
|
|
- id: powersupply
|
|
## This address should be set to the "Address" value in the config menu
|
|
address: 0x01
|
|
modbus_id: modbus1
|
|
setup_priority: -10
|
|
update_interval: 5s
|
|
|
|
time:
|
|
# Get the time from HA, so we can use it for uptime
|
|
- platform: homeassistant
|
|
id: time_homeassistant
|
|
timezone: "${time_timezone}"
|
|
on_time_sync:
|
|
- logger.log: Time has been set and is valid!
|
|
- component.update: sensor_uptime_timestamp
|
|
- number.set:
|
|
id: date_year
|
|
value: !lambda return id(time_homeassistant).now().year;
|
|
- number.set:
|
|
id: date_month
|
|
value: !lambda return id(time_homeassistant).now().month;
|
|
- number.set:
|
|
id: date_day
|
|
value: !lambda return id(time_homeassistant).now().day_of_month;
|
|
- number.set:
|
|
id: date_hour
|
|
value: !lambda return id(time_homeassistant).now().hour;
|
|
- number.set:
|
|
id: date_minute
|
|
value: !lambda return id(time_homeassistant).now().minute;
|
|
- number.set:
|
|
id: date_second
|
|
value: !lambda return id(time_homeassistant).now().second;
|
|
|
|
sensor:
|
|
- platform: modbus_controller
|
|
id: model_number
|
|
name: "Model Number"
|
|
entity_category: diagnostic
|
|
disabled_by_default: True
|
|
modbus_controller_id: powersupply
|
|
address: 0
|
|
skip_updates: 10
|
|
unit_of_measurement: ""
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
accuracy_decimals: 0
|
|
on_value:
|
|
then:
|
|
- lambda: |-
|
|
id(model_name).publish_state(value_accuracy_to_string(x, 0));
|
|
|
|
- platform: modbus_controller
|
|
name: "Serial Number"
|
|
entity_category: diagnostic
|
|
disabled_by_default: True
|
|
modbus_controller_id: powersupply
|
|
address: 1
|
|
skip_updates: 10
|
|
register_type: holding
|
|
value_type: U_DWORD
|
|
accuracy_decimals: 0
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: powersupply
|
|
address: 3
|
|
name: "Firmware version"
|
|
entity_category: diagnostic
|
|
disabled_by_default: True
|
|
unit_of_measurement: ""
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
accuracy_decimals: 2
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: powersupply
|
|
address: 10
|
|
name: "Output voltage"
|
|
device_class: voltage
|
|
state_class: measurement
|
|
unit_of_measurement: "V"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
accuracy_decimals: ${${model}_voltage_accuracy}
|
|
filters:
|
|
- multiply: ${${model}_voltage_multiplier}
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: powersupply
|
|
address: 11
|
|
name: "Output current"
|
|
device_class: current
|
|
state_class: measurement
|
|
unit_of_measurement: "A"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
accuracy_decimals: ${${model}_current_accuracy}
|
|
filters:
|
|
- multiply: ${${model}_current_multiplier}
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: powersupply
|
|
address: 12
|
|
name: "Output Power"
|
|
device_class: power
|
|
state_class: measurement
|
|
unit_of_measurement: "W"
|
|
register_type: holding
|
|
value_type: U_DWORD
|
|
accuracy_decimals: 2
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: powersupply
|
|
address: 33
|
|
name: "Battery voltage"
|
|
device_class: voltage
|
|
state_class: measurement
|
|
unit_of_measurement: "V"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
accuracy_decimals: ${${model}_voltage_accuracy}
|
|
filters:
|
|
- multiply: ${${model}_voltage_multiplier}
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: powersupply
|
|
address: 38
|
|
name: "Battery charge"
|
|
device_class: "energy_storage"
|
|
state_class: measurement
|
|
unit_of_measurement: "Ah"
|
|
icon: "mdi:battery-60"
|
|
register_type: holding
|
|
value_type: U_DWORD
|
|
accuracy_decimals: 3
|
|
filters:
|
|
- multiply: 0.001
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: powersupply
|
|
address: 40
|
|
name: "Battery energy"
|
|
device_class: "energy_storage"
|
|
state_class: measurement
|
|
unit_of_measurement: "Wh"
|
|
icon: "mdi:battery-60"
|
|
register_type: holding
|
|
value_type: U_DWORD
|
|
accuracy_decimals: 3
|
|
filters:
|
|
- multiply: 0.001
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: powersupply
|
|
address: 14
|
|
name: "Input voltage"
|
|
device_class: voltage
|
|
unit_of_measurement: "V"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
accuracy_decimals: ${${model}_voltage_accuracy}
|
|
filters:
|
|
- multiply: ${${model}_voltage_multiplier}
|
|
|
|
- platform: modbus_controller
|
|
name: "Temperature"
|
|
device_class: temperature
|
|
state_class: measurement
|
|
modbus_controller_id: powersupply
|
|
register_type: holding
|
|
address: 4
|
|
value_type: S_DWORD
|
|
unit_of_measurement: "°C"
|
|
|
|
- platform: modbus_controller
|
|
name: "Temperature external"
|
|
state_class: measurement
|
|
modbus_controller_id: powersupply
|
|
register_type: holding
|
|
address: 34
|
|
value_type: S_DWORD
|
|
device_class: temperature
|
|
unit_of_measurement: "°C"
|
|
|
|
- platform: wifi_signal
|
|
name: "Wi-Fi Signal"
|
|
disabled_by_default: True
|
|
update_interval: 60s
|
|
|
|
# Uptime is used internally only
|
|
- platform: uptime
|
|
id: sensor_uptime
|
|
# This sensor is an alternative for the uptime sensor, which only sends the
|
|
# startup timestamp of the device to home assistant once
|
|
- platform: template
|
|
id: sensor_uptime_timestamp
|
|
name: "Uptime"
|
|
entity_category: diagnostic
|
|
device_class: "timestamp"
|
|
accuracy_decimals: 0
|
|
update_interval: never
|
|
lambda: |-
|
|
static float timestamp = (
|
|
id(time_homeassistant).utcnow().timestamp - id(sensor_uptime).state
|
|
);
|
|
return timestamp;
|
|
|
|
text_sensor:
|
|
- platform: wifi_info
|
|
ip_address:
|
|
name: "IP Address"
|
|
disabled_by_default: True
|
|
ssid:
|
|
name: "Wi-Fi SSID"
|
|
disabled_by_default: True
|
|
bssid:
|
|
name: "Wi-Fi BSSID"
|
|
disabled_by_default: True
|
|
- platform: template
|
|
id: model_name
|
|
name: "Model Name"
|
|
entity_category: diagnostic
|
|
# Updated by model number
|
|
update_interval: never
|
|
filters:
|
|
- map:
|
|
- 60062 -> RD6006
|
|
- 60065 -> RD6006P
|
|
- 60121 -> RD6012
|
|
- 60181 -> RD6018
|
|
|
|
binary_sensor:
|
|
- platform: modbus_controller
|
|
modbus_controller_id: powersupply
|
|
name: "Keypad lock"
|
|
entity_category: diagnostic
|
|
device_class: lock
|
|
address: 15
|
|
register_type: holding
|
|
bitmask: 0x1
|
|
filters:
|
|
- invert:
|
|
- platform: modbus_controller
|
|
modbus_controller_id: powersupply
|
|
address: 32
|
|
name: "Battery mode"
|
|
device_class: connectivity
|
|
register_type: holding
|
|
bitmask: 0x1
|
|
- platform: modbus_controller
|
|
modbus_controller_id: powersupply
|
|
name: "Over Voltage Protection"
|
|
device_class: problem
|
|
address: 16
|
|
register_type: holding
|
|
bitmask: 0x1
|
|
- platform: modbus_controller
|
|
modbus_controller_id: powersupply
|
|
name: "Over Current Protection"
|
|
device_class: problem
|
|
address: 16
|
|
register_type: holding
|
|
bitmask: 0x2
|
|
- platform: modbus_controller
|
|
modbus_controller_id: powersupply
|
|
name: "Constant Voltage"
|
|
address: 17
|
|
register_type: holding
|
|
bitmask: 0x1
|
|
filters:
|
|
- invert:
|
|
- platform: modbus_controller
|
|
modbus_controller_id: powersupply
|
|
name: "Constant Current"
|
|
address: 17
|
|
register_type: holding
|
|
bitmask: 0x1
|
|
|
|
number:
|
|
- platform: modbus_controller
|
|
modbus_controller_id: powersupply
|
|
name: "Backlight"
|
|
icon: "mdi:lightbulb"
|
|
entity_category: config
|
|
address: 72
|
|
value_type: U_WORD
|
|
min_value: 0
|
|
max_value: 5
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: powersupply
|
|
name: "Output voltage"
|
|
device_class: voltage
|
|
unit_of_measurement: "V"
|
|
entity_category: config
|
|
address: 8
|
|
value_type: U_WORD
|
|
min_value: 0
|
|
max_value: ${${model}_voltage_maximum}
|
|
step: ${${model}_voltage_multiplier}
|
|
lambda: !lambda return x * ${${model}_voltage_multiplier};
|
|
write_lambda: !lambda return x * (1/${${model}_voltage_multiplier});
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: powersupply
|
|
name: "Output current"
|
|
device_class: current
|
|
unit_of_measurement: "A"
|
|
entity_category: config
|
|
address: 9
|
|
value_type: U_WORD
|
|
min_value: 0
|
|
max_value: ${${model}_current_maximum}
|
|
step: ${${model}_current_multiplier}
|
|
lambda: !lambda return x * ${${model}_current_multiplier};
|
|
write_lambda: !lambda return x * (1/${${model}_current_multiplier});
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: powersupply
|
|
name: "Over Voltage Protection"
|
|
device_class: voltage
|
|
unit_of_measurement: "V"
|
|
address: 82
|
|
entity_category: config
|
|
value_type: U_WORD
|
|
min_value: 0
|
|
max_value: ${${model}_voltage_maximum}
|
|
step: ${${model}_voltage_multiplier}
|
|
lambda: !lambda return x * ${${model}_voltage_multiplier};
|
|
write_lambda: !lambda return x * (1/${${model}_voltage_multiplier});
|
|
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: powersupply
|
|
name: "Over Current Protection"
|
|
device_class: current
|
|
unit_of_measurement: "A"
|
|
address: 83
|
|
entity_category: config
|
|
value_type: U_WORD
|
|
min_value: 0
|
|
max_value: ${${model}_current_maximum}
|
|
step: ${${model}_current_multiplier}
|
|
lambda: !lambda return x * ${${model}_current_multiplier};
|
|
write_lambda: !lambda return x * (1/${${model}_current_multiplier});
|
|
|
|
# Date components are kept internal
|
|
- platform: modbus_controller
|
|
id: date_year
|
|
modbus_controller_id: powersupply
|
|
entity_category: diagnostic
|
|
register_type: holding
|
|
address: 48
|
|
value_type: U_WORD
|
|
- platform: modbus_controller
|
|
id: date_month
|
|
modbus_controller_id: powersupply
|
|
entity_category: diagnostic
|
|
register_type: holding
|
|
address: 49
|
|
value_type: U_WORD
|
|
- platform: modbus_controller
|
|
id: date_day
|
|
modbus_controller_id: powersupply
|
|
entity_category: diagnostic
|
|
register_type: holding
|
|
address: 50
|
|
value_type: U_WORD
|
|
- platform: modbus_controller
|
|
id: date_hour
|
|
modbus_controller_id: powersupply
|
|
entity_category: diagnostic
|
|
register_type: holding
|
|
address: 51
|
|
value_type: U_WORD
|
|
- platform: modbus_controller
|
|
id: date_minute
|
|
modbus_controller_id: powersupply
|
|
entity_category: diagnostic
|
|
register_type: holding
|
|
address: 52
|
|
value_type: U_WORD
|
|
- platform: modbus_controller
|
|
id: date_second
|
|
modbus_controller_id: powersupply
|
|
entity_category: diagnostic
|
|
register_type: holding
|
|
address: 53
|
|
value_type: U_WORD
|
|
|
|
switch:
|
|
- platform: modbus_controller
|
|
modbus_controller_id: powersupply
|
|
name: "Output"
|
|
address: 18
|
|
register_type: holding
|
|
bitmask: 0x1
|
|
entity_category: config
|
|
|
|
button:
|
|
- platform: safe_mode
|
|
name: "Safe mode"
|