(Werbung) In diesem Beitrag zeige ich dir ein Unboxing des Nous Zigbee LCD Temperatur-/Luftfeuchtesensor E6, die Integration in Home Assistant über ZHA und „custom quirks“ und ein Vergleich mit anderen Temperatur-/Luftfeuchtesensoren.
Sie sehen gerade einen Platzhalterinhalt von YouTube. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr InformationenInhaltsverzeichnis
Unboxing
Bei dem Temperatur-/Luftfeuchtigkeitssensor E6 von Nous handelt es sich um Sensoren, dessen Werte du in einem 2,8 Zoll großen Display angezeigt bekommst. Neben den Werten zur Temperatur und Luftfeuchtigkeit, werden dir die Uhrzeit, die Verbindung, der Batteriestand und die Qualität der Temperatur durch ein Smileysymbol angezeigt. Beim Verbindungssymbol wird dir angezeigt, ob das Gerät gerade eine Verbindung hat oder nicht. Das Gerät sendet mit Zigbee 3.0. Auf der Oberseite des Sensors befindet sich ein Knopf um das Gerät in den Paringmodus zu versetzen. Halte diesen Knopf für ca. 5 Sekunden gedrückt, dann siehst du auf dem Display, dass sich das Gerät im Pairingmodus befindet. Zum Lieferumpfang gehören noch 2 AA Batterien und ein Informationsblatt, wo du die Bedienungsanleitung für das Gerät findest. Diese ist auf folgender Seite herunterladbar (Bedienungsanleitung). Die Batteriekebensdauer wird mit ca. 12 Monaten angegeben.
Integration in Home Assistant
Du kannst den Sensor mittels ZHA in Home Assistant integrieren. Hierzu klickst du in Home Assistant auf Einstellungen -> Geräte & Dienste -> ZHA Geräte -> Geräte hinzufügen. Das Gerät versetzt du nun in den Pairingmodus, indem du ca. 5 Sekunden auf den Knopf auf der Oberseite des Sensors drückst. Anschließend wird das Gerät ZHA hinzugefügt. Die Sensorwerte sind nicht verfügbar. Diese musst du (Stand 4/2023) mit einer custom quirks in ZHA hinzufügen.
Custom quirks
Im File editor fügst du im Ordner config einen Unterordner zha_quirks hinzu. In diesen Ordner fügst du eine Datei mit dem Namen Nous_E6.py hinzu. In dieser Datei kopierst du folgenden Code. Dieser wurde freundlicherweise auf folgender Githubseite zur Verfügung gestellt (github).
"""Tuya temp and humidity sensor with screen.""" from typing import Dict ################## clean this up import zigpy.types as t from zigpy.zcl import foundation from zhaquirks.tuya import TuyaTimePayload, TuyaCommand, TuyaDPType import datetime from typing import Tuple, Optional, Union ################## from zigpy.profiles import zha from zigpy.quirks import CustomDevice from zigpy.zcl.clusters.general import Basic, Groups, Ota, Scenes, Time, AnalogOutput from zigpy.zcl.clusters.measurement import RelativeHumidity, TemperatureMeasurement from zhaquirks.const import ( DEVICE_TYPE, ENDPOINTS, INPUT_CLUSTERS, MODELS_INFO, OUTPUT_CLUSTERS, PROFILE_ID, SKIP_CONFIGURATION, ) from zhaquirks.tuya import TuyaLocalCluster, TuyaPowerConfigurationCluster2AAA from zhaquirks.tuya.mcu import DPToAttributeMapping, TuyaMCUCluster TUYA_SET_TIME = 0x24 # NOTES: # The data comes in as a string on cluster, if there is nothing set up you may see these lines in the logs: # Unknown message (b'19830100a40102000400000118') on cluster 61184: unknown endpoint or cluster id: 'No cluster ID 0xef00 on (a4:c1:38:d0:18:8b:64:aa, 1)' # 28.0 degrees # Unknown message (b'19840100a5020200040000022c') on cluster 61184: unknown endpoint or cluster id: 'No cluster ID 0xef00 on (a4:c1:38:d0:18:8b:64:aa, 1)' # 55.6% humid # Unknown message (b'19850100a60402000400000064') on cluster 61184: unknown endpoint or cluster id: 'No cluster ID 0xef00 on (a4:c1:38:d0:18:8b:64:aa, 1)' # 100% battery class TemperatureUnitConvert(t.enum8): """Tuya Temp unit convert enum.""" Celsius = 0x00 Fahrenheit = 0x01 class TuyaTemperatureMeasurement(TemperatureMeasurement, TuyaLocalCluster): """Tuya local TemperatureMeasurement cluster.""" attributes = TemperatureMeasurement.attributes.copy() attributes.update( { 0x8001: ("temp_unit_convert", t.enum8), 0x8002: ("alarm_max_temperature", t.Single), 0x8003: ("alarm_min_temperature", t.Single), 0x8004: ("temperature_sensitivity", t.Single), } ) class TuyaRelativeHumidity(RelativeHumidity, TuyaLocalCluster): """Tuya local RelativeHumidity cluster.""" class TemperatureHumidityManufCluster(TuyaMCUCluster): """Tuya Manufacturer Cluster with Temperature and Humidity data points.""" dp_to_attribute: Dict[int, DPToAttributeMapping] = { 1: DPToAttributeMapping( TuyaTemperatureMeasurement.ep_attribute, "measured_value", converter=lambda x: x * 10, # decidegree to centidegree ), 2: DPToAttributeMapping( TuyaRelativeHumidity.ep_attribute, "measured_value", converter=lambda x: x * 100, # 0.01 to 1.0 ), 4: DPToAttributeMapping( TuyaPowerConfigurationCluster2AAA.ep_attribute, "battery_percentage_remaining", converter=lambda x: x * 2, # reported percentage is doubled ), 9: DPToAttributeMapping( TuyaTemperatureMeasurement.ep_attribute, "temp_unit_convert", converter=lambda x: TemperatureUnitConvert(x) ), 10: DPToAttributeMapping( TuyaTemperatureMeasurement.ep_attribute, "alarm_max_temperature", converter=lambda x: x / 10 ), 11: DPToAttributeMapping( TuyaTemperatureMeasurement.ep_attribute, "alarm_min_temperature", converter=lambda x: x / 10 ), 19: DPToAttributeMapping( TuyaTemperatureMeasurement.ep_attribute, "temperature_sensitivity", converter=lambda x: x / 10 ) } set_time_offset = 1970 set_time_local_offset = 1970 data_point_handlers = { 1: "_dp_2_attr_update", 2: "_dp_2_attr_update", 4: "_dp_2_attr_update", 9: "_dp_2_attr_update", 10: "_dp_2_attr_update", 11: "_dp_2_attr_update", 19: "_dp_2_attr_update", } def handle_set_time_request(self, sequence_number: t.uint16_t) -> foundation.Status: payload = TuyaTimePayload() utc_now = datetime.datetime.utcnow() now = datetime.datetime.now() offset_time = datetime.datetime(self.set_time_offset, 1, 1) offset_time_local = datetime.datetime(self.set_time_local_offset, 1, 1) utc_timestamp = int((utc_now - offset_time).total_seconds()) local_timestamp = int((now - offset_time).total_seconds()) payload.extend(utc_timestamp.to_bytes(4, "big", signed=False)) payload.extend(local_timestamp.to_bytes(4, "big", signed=False)) self.create_catching_task( self.command(TUYA_SET_TIME, payload, manufacturer=foundation.ZCLHeader.NO_MANUFACTURER_ID, expect_reply=False) ) return foundation.Status.SUCCESS class TuyaNousE6TempHumiditySensor(CustomDevice): """Custom device representing tuya temp and humidity sensor with a screen (NOUS E6).""" signature = { # <SimpleDescriptor endpoint=1, profile=260, device_type=81 # device_version=1 # input_clusters=[4, 5, 61184, 0] # output_clusters=[25, 10]> MODELS_INFO: [("_TZE200_nnrfa68v", "TS0601")], ENDPOINTS: { 1: { PROFILE_ID: zha.PROFILE_ID, DEVICE_TYPE: zha.DeviceType.SMART_PLUG, # this is how the device reports itself INPUT_CLUSTERS: [ Basic.cluster_id, Groups.cluster_id, Scenes.cluster_id, TemperatureHumidityManufCluster.cluster_id, ], OUTPUT_CLUSTERS: [Ota.cluster_id, Time.cluster_id], } }, } replacement = { SKIP_CONFIGURATION: True, ENDPOINTS: { 1: { PROFILE_ID: zha.PROFILE_ID, DEVICE_TYPE: zha.DeviceType.TEMPERATURE_SENSOR, INPUT_CLUSTERS: [ Basic.cluster_id, TemperatureHumidityManufCluster, # Single bus for temp, humidity, and battery TuyaTemperatureMeasurement, TuyaRelativeHumidity, TuyaPowerConfigurationCluster2AAA, ], OUTPUT_CLUSTERS: [Ota.cluster_id, Time.cluster_id], } }, }
Soweit bisher noch nicht geschehen, muss die configuration.yaml nun angepasst werden.
configuration.yaml
zha: !include zha.yaml
Nun ist noch die Datei zha.yaml zu erstellen. Hier ist folgender Code einzutragen.
zha.yaml
enable_quirks: true custom_quirks_path: /config/zha_quirks/
Nun ist über die Entwicklerwerkzeuge die Konfiguration zu prüfen. Anschließend ist Home Assistant neu zu starten. Nach dem Neustart wird noch einmal ein Pairing durchgeführt.
Vergleich mit anderen Geräten
In meinem Versuchsaufbau habe ich mehrere Temperatur-/Luftfeuchtigkeitsmesser nebeneinander gestellt und geschaut, in wieweit die Werte voneinander abweichen. Der Vergleich wird mit folgenden Geräten durchgeführt.
- Nous Temperatur-/Luftfeuchtigkeitssensor E6
- Ecowitt Temperatur-/Luftfeuchtigkeitssensor
- IKEA Vindstyrka
- analoger Temperatur-/Luftfeuchtigkeitsmesser
Beim Vergleich viel auf, dass die Temperatur-/Luftfeuchtigkeitswerte des Ecowitt und Nous fast identisch waren. Bei den beiden Werten werden beim Ikea Vindstyrka höhere Werte wiedergegeben. Die Temperaturwerte sind beim analogen Messgerät vergleichbar mit dem Ecowitt und dem Nous.
Fazit
Der Nous Temperatur-/Feuchtigkeitssensor E6 funktioniert bei mir ohne Probleme. Die gemessenen Werte sind mit dem Temperatur-/Luftfeuchtigkeitsmesser von Ecowitt vergleichbar. Lediglich beim Ablesen wäre es wünschenswert, wenn das Display durch Tastendruck beleuchtet werden könnte. Die Beleuchtung des IKEA Vindstyrka gefällt mir sehr gut.
Transparenzhinweis
Die Firma Nous Technology hat mir den Sensor zur Verfügung gestellt. In meiner Berichterstattung bin ich jedoch vollkommen frei.
Änderungsprotokoll
04/2023: Veröffentlichung des Beitrages
*Die mit Sternchen markierten Links sind sogenannte „Affiliate-Links“. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen. Wird über diese ein Einkauf getätigt, werde ich mit einer kleinen Provision beteiligt – ohne das Kosten für dich entstehen. Vielen Dank für deinen Support!
Hallo,
das set up hat gut funktioniert. Leider ist die refresh Rate für die Temperatur bei ca. 60 Minuten. Gibt es eine Möglichkeit diese zu ändern, bzw. bei Änderungen von +/- 0,2 Grad zu aktualisieren?