MQTT Sensor


이 mqtt 센서 플랫폼은 MQTT 메시지 payload를 센서값으로 사용합니다. 이 ‘state_topic’의 메시지가 RETAIN 플래그와 함께 게시되면 센서는 마지막으로 알려진 값으로 즉시 업데이트를 받습니다. 그렇지 않으면 초기 상태가 정의되지 않습니다.

설정

MQTT 센서를 사용하려면 configuration.yaml 파일에 다음을 추가하십시오.

# Example configuration.yaml entry
sensor:
  - platform: mqtt
    state_topic: "home/bedroom/temperature"

Configuration Variables

state_topic

(string)(Required)

The MQTT topic subscribed to receive sensor values.

name

(string)(Optional)

The name of the MQTT sensor.

Default value:

MQTT Sensor

qos

(integer)(Optional)

The maximum QoS level of the state topic.

Default value:

0

unit_of_measurement

(string)(Optional)

Defines the units of measurement of the sensor, if any.

icon

(icon)(Optional)

The icon for the sensor.

expire_after

(integer)(Optional)

Defines the number of seconds after the value expires if it’s not updated.

Default value:

0

value_template

(template)(Optional)

Defines a template to extract the value.

force_update

(boolean)

Sends update events even if the value hasn’t changed. Useful if you want to have meaningful value graphs in history.

Default value:

false

availability_topic

(string)(Optional)

The MQTT topic subscribed to receive availability (online/offline) updates.

payload_available

(string)(Optional)

The payload that represents the available state.

Default value:

online

payload_not_available

(string)(Optional)

The payload that represents the unavailable state.

Default value:

offline

json_attributes_topic

(string)(Optional)

The MQTT topic subscribed to receive a JSON dictionary payload and then set as sensor attributes. Implies force_update of the current sensor state when a message is received on this topic.

json_attributes_template

(template)(Optional)

Defines a template to extract the JSON dictionary from messages received on the json_attributes_topic.

json_attributes

(string | list)(Optional)

(Deprecated, replaced by json_attributes_topic) A list of keys to extract values from a JSON dictionary payload and then set as sensor attributes.

unique_id

(string)(Optional)

An ID that uniquely identifies this sensor. If two sensors have the same unique ID, Home Assistant will raise an exception.

device_class

(device_class)(Optional)

The type/class of the sensor to set the icon in the frontend.

Default value:

None

device

(map)(Optional)

Information about the device this sensor is a part of to tie it into the device registry. Only works through MQTT discovery and when unique_id is set.

identifiers

(string | list)(Optional)

A list of IDs that uniquely identify the device. For example a serial number.

connections

(list)(Optional)

A list of connections of the device to the outside world as a list of tuples [connection_type, connection_identifier]. For example the MAC address of a network interface: "connections": [["mac", "02:5b:26:a8:dc:12"]].

manufacturer

(string)(Optional)

The manufacturer of the device.

model

(string)(Optional)

The model of the device.

name

(string)(Optional)

The name of the device.

sw_version

(string)(Optional)

The firmware version of the device.

사례

본 섹션에는 이 센서를 사용하는 방법에 대한 실제 예가 나와 있습니다.

JSON 속성 topic 설정

The example sensor below shows a configuration example which uses a JSON dict: {"ClientName": <string>, "IP": <string>, "MAC": <string>, "RSSI": <string>, "HostName": <string>, "ConnectedSSID": <string>} in a separate topic home/sensor1/attributes to add extra attributes. It also makes use of the availability topic. Extra attributes will be displayed in the frontend and can also be extracted in Templates. For example, to extract the ClientName attribute from the sensor below, use a template similar to: {{ state_attr('sensor.bs_rssi', 'ClientName') }}.

# Example configuration.yaml entry
sensor:
  - platform: mqtt
    name: "RSSI"
    state_topic: "home/sensor1/infojson"
    unit_of_measurement: 'dBm'
    value_template: "{{ value_json.RSSI }}"
    availability_topic: "home/sensor1/status"
    payload_available: "online"
    payload_not_available: "offline"
    json_attributes_topic: "home/sensor1/attributes"

JSON 속성 템플릿 설정

The example sensor below shows a configuration example which uses a JSON dict: {"Timer1":{"Arm": <status>, "Time": <time>}, "Timer2":{"Arm": <status>, "Time": <time>}} on topic tele/sonoff/sensor with a template to add Timer1.Arm and Timer1.Time as extra attributes. Extra attributes will be displayed in the frontend and can also be extracted in Templates. For example, to extract the Arm attribute from the sensor below, use a template similar to: {{ state_attr('sensor.timer1', 'Arm') }}.

# Example configuration.yaml entry
sensor:
  - platform: mqtt
    name: "Timer 1"
    state_topic: "tele/sonoff/sensor"
    value_template: "{{ value_json.Timer1.Arm }}"
    json_attributes_topic: "tele/sonoff/sensor"
    json_attributes_template: "{{ value_json.Timer1 | tojson }}"
  - platform: mqtt
    name: "Timer 2"
    state_topic: "tele/sonoff/sensor"
    value_template: "{{ value_json.Timer2.Arm }}"
    json_attributes_topic: "tele/sonoff/sensor"
    json_attributes_template: "{{ value_json.Timer2 | tojson }}"

설계상 센서의 상태 및 속성은 동일한 MQTT topic을 공유하는 경우 동기방식으로 업데이트되지 않습니다. 상태와 속성이 동일한 MQTT 메시지에 의해 동시에 변경되면 상태와 속성 데이터 사이의 시간 불일치가 발생할 수 있습니다. 센서의 상태 변경시 트리거되는 자동화는 상태 변경 또는 속성 변경시 모두 트리거됩니다. 상태와 속성이 모두 변경되면 이러한 자동화가 두 번 트리거됩니다. MQTT trigger를 사용하고 동일한 MQTT 메시지 내에서 여러 JSON 값을 동기적으로 처리해야하는 자동화를 위해 {{ trigger.payload_json }}trigger data를 통해 자동화에서 JSON을 직접 처리하십시오.

밧데리 레벨 받기

OwnTracks를 사용하고 배터리 잔량보고를 활성화 한 경우 MQTT 센서를 사용하여 배터리를 추적할 수 있습니다. OwnTracks의 일반 MQTT 메시지는 다음과 같습니다.

owntracks/tablet/tablet {"_type":"location","lon":7.21,"t":"u","batt":92,"tst":144995643,"tid":"ta","acc":27,"lat":46.12}

따라서 트릭(trick)은 payload에서 배터리 레벨을 추출하는 것입니다.

# Example configuration.yaml entry
sensor:
  - platform: mqtt
    name: "Battery Tablet"
    state_topic: "owntracks/tablet/tablet"
    unit_of_measurement: '%'
    value_template: "{{ value_json.batt }}"

온습도 받기

DHT 센서와 NodeMCU 보드 (esp8266)를 사용하는 경우 MQTT 센서로 온도 및 습도를 검색할 수 있습니다. 여기에서 코드 예제를 찾을 수 있습니다. 이 예제의 일반 MQTT 메시지는 다음과 같습니다.

office/sensor1
  {
    "temperature": 23.20,
    "humidity": 43.70
  }

그런 다음이 설정 예제를 사용하여 payload에서 데이터를 추출하십시오.

# Example configuration.yaml entry
sensor:
  - platform: mqtt
    name: "Temperature"
    state_topic: "office/sensor1"
    unit_of_measurement: '°C'
    value_template: "{{ value_json.temperature }}"
  - platform: mqtt
    name: "Humidity"
    state_topic: "office/sensor1"
    unit_of_measurement: '%'
    value_template: "{{ value_json.humidity }}"

ESPEasy를 사용하여 장치에서 센서값 받기

ESPEasy를 사용하여 ESP8266 장치를 플래시했다고 가정합니다. “Config”에서 장치의 이름 (“Unit Name:”)을 설정하십시오 (여기서는 “bathroom”). “OpenHAB MQTT” 프로토콜을 사용하는 MQTT 용 “Controller”가 있으며 항목(“Controller Subscribe:” 및 “Controller Publish:”)이 상황에 맞게 조정됩니다. 이 예에서 topic은 “home”으로 시작합니다. ESPEasy 기본 topic은 /로 시작하고 configuration.yaml 파일에 대한 항목을 작성할 때만 이름을 포함합니다.

  • Controller Subscribe: home/%sysname%/# (instead of /%sysname%/#)
  • Controller Publish: home/%sysname%/%tskname%/%valname% (instead of /%sysname%/%tskname%/%valname%)

또한 “Devices”탭에서 이름이 “analog” 및 “brightness”인 값으로 센서를 추가하십시오.

장치가 온라인 상태가 되면 센서 상태를 얻게됩니다.

home/bathroom/status Connected
...
home/bathroom/analog/brightness 290.00

설정은 아래 예와 같습니다.

# Example configuration.yaml entry
sensor:
  - platform: mqtt
    name: "Brightness"
    state_topic: "home/bathroom/analog/brightness"