Multiple Serial Sensor Integrations

I have successfully installed a multi-variable serial.sensor using /dev/ttyUSB0 with the following YAML:

# KCS Arduino Weather Sensor
sensor:
  - platform: serial
    serial_port: /dev/ttyUSB0
    baudrate: 115200

  - platform: template
    sensors:
      my_temperature_sensor:
        friendly_name: WTemperature
        unit_of_measurement: "°C"
        value_template: "{{ states('sensor.serial_sensor').split(',')[1] | float }}"
      my_humidity:
        friendly_name: WHumidity
        unit_of_measurement: "%"
        value_template: "{{ states('sensor.serial_sensor').split(',')[3] | float }}"
      my_pressure:
        friendly_name: WBarometer
        unit_of_measurement: "mBar"
        value_template: "{{ states('sensor.serial_sensor').split(',')[2] | float }}"
      my_pir:
        friendly_name: Motion1
        unit_of_measurement: " "
        value_template: "{{ states('sensor.serial_sensor').split(',')[4] | int }}"
      my_irmotehb:
        friendly_name: IR Mote Heart Beat
        unit_of_measurement: " "
        value_template: "{{ states('sensor.serial_sensor').split(',')[6] | float }}" 

I have a second USB port ready to accept a slew of other variables from a PLC.

I have not been able to determine the syntax for defining the second value template. THe following YAML attempts to define the second sensor, and the config.yaml confirms fine, but after restarting HA no new entities are discernable:

# SLC PLC data
sensor:
  - platform: serial
    serial_port: /dev/ttyUSB1
    baudrate: 115200

  - platform: template
    sensors:
      first_floor_temp:
        friendly_name: FirstFloorTemp
        unit_of_measurement: "°F"
        value_template: "{{ states('sensor.serial_sensor').split(',')[1] | int }}"

How does one differentiate between multiple serial sensors?

Thanks.

Solved.

If you stare long enough at the SERIAL// doc, you begin to see the options that aren’t ever used in examples. Using the name: attribute allows me to use something other than the default “sensor.serial_sensor” id that is provided when you do not specify a name.

Thus, naming the two serial platforms provides the differentiation I was looking for:

# KCS Arduino Weather Sensor
sensor:
  - platform: serial
    serial_port: /dev/ttyUSB1
    baudrate: 115200
    name: "DuinoIRXmtrMote1"

  - platform: template
    sensors:
      my_temperature_sensor:
        friendly_name: WTemperature
        unit_of_measurement: "°C"
        value_template: "{{ states('sensor.DuinoIRXmtrMote1').split(',')[1] | float }}"
      my_humidity:
        friendly_name: WHumidity
        unit_of_measurement: "%"
        value_template: "{{ states('sensor.DuinoIRXmtrMote1').split(',')[3] | float }}"
      my_pressure:
        friendly_name: WBarometer
        unit_of_measurement: "mBar"
        value_template: "{{ states('sensor.DuinoIRXmtrMote1').split(',')[2] | float }}"
      my_pir:
        friendly_name: Motion1
        unit_of_measurement: " "
        value_template: "{{ states('sensor.DuinoIRXmtrMote1').split(',')[4] | int }}"
      my_irmotehb:
        friendly_name: IR Mote Heart Beat
        unit_of_measurement: " "
        value_template: "{{ states('sensor.DuinoIRXmtrMote1').split(',')[6] | float }}"
        
# SLC Data
  - platform: serial
    serial_port: /dev/ttyUSB0
    baudrate: 115200
    name: "slcdata"

  - platform: template
    sensors:
      first_floor_temp:
        friendly_name: FirstFloorTemp
        unit_of_measurement: "°F"
        value_template: "{{ states('sensor.slcdata').split(',')[3] | int }}"

1 Like