Um es kurz zu machen: ich habe folgendes geändert damit es funktioniert.
habe ich den ESP8266 nodemcu v3 gegen einen ESP32-S3 getauscht
habe ich heraus gekitzelt, dass diese Devices nicht mit READ, sondern mit HOLDING register arbeiten.
Mit folgender YAML-Konfiguration läuft jetzt alles:
uart:
rx_pin: GPIO44
tx_pin: GPIO43
baud_rate: 4800
parity: NONE
stop_bits: 1
data_bits: 8
// debug:
// direction: BOTH
// dummy_receiver: true
// sequence:
// - lambda: UARTDebug::log_hex(direction, bytes,':');
modbus:
id: modbus1
modbus_controller:
- id: wind_speed_meter
address: 1
modbus_id: modbus1
setup_priority: -10
command_throttle: 200ms
update_interval: 30s #or whatever you need
- id: wind_direction_meter
address: 2
modbus_id: modbus1
setup_priority: -10
command_throttle: 200ms
update_interval: 30s #or whatever you need
sensor:
- platform: modbus_controller
modbus_controller_id: wind_speed_meter
name: "Wind Speed"
device_class: wind_speed
id: wind_speed
register_type: holding
address: 0000
unit_of_measurement: "m/s"
value_type: U_WORD
accuracy_decimals: 1
filters:
- multiply: 0.1
// folgendes soll glätten, funktioniert aber zu träge
// - max:
// window_size: 5
// send_every: 5
// - exponential_moving_average:
// alpha: 0.1
// send_every: 12
- platform: modbus_controller
modbus_controller_id: wind_direction_meter
name: "Wind direction gear"
internal: true
register_type: holding
address: 0000
value_type: U_WORD
accuracy_decimals: 0
on_value:
- lambda: |-
switch (int(x)) {
case 0:
id(wind_direction_cardinal).publish_state("N"); //North
break;
case 1:
id(wind_direction_cardinal).publish_state("NE"); //North-East
break;
case 2:
id(wind_direction_cardinal).publish_state("E"); //East
break;
case 3:
id(wind_direction_cardinal).publish_state("SE"); //South-East
break;
case 4:
id(wind_direction_cardinal).publish_state("S"); //South
break;
case 5:
id(wind_direction_cardinal).publish_state("SW"); //South-West
break;
case 6:
id(wind_direction_cardinal).publish_state("W"); //West
break;
case 7:
id(wind_direction_cardinal).publish_state("NW"); //North-West
break;
default:
id(wind_direction_cardinal).publish_state(""); //invalid
}
- platform: modbus_controller
modbus_controller_id: wind_direction_meter
name: "Windrichtung in Grad"
register_type: holding
address: 0001
value_type: U_WORD
accuracy_decimals: 0
state_class: measurement
unit_of_measurement: "°"
text_sensor:
- platform: template
name: "Windrichtung"
id: wind_direction_cardinal