{"id":268,"date":"2026-05-17T17:19:13","date_gmt":"2026-05-17T15:19:13","guid":{"rendered":"https:\/\/www.coremind.ch\/wordpress\/?p=268"},"modified":"2026-05-17T17:19:13","modified_gmt":"2026-05-17T15:19:13","slug":"pir-abloesen-mit-mmwave-ts0601-als-zuverlaessiger-anwesenheitssensor","status":"publish","type":"post","link":"https:\/\/www.coremind.ch\/wordpress\/pir-abloesen-mit-mmwave-ts0601-als-zuverlaessiger-anwesenheitssensor\/","title":{"rendered":"PIR abl\u00f6sen mit mmWave: TS0601 als zuverl\u00e4ssiger Anwesenheitssensor"},"content":{"rendered":"<p>PIR-Sensoren waren lange das Arbeitspferd jeder Heimautomation. Sie sind g\u00fcnstig, batteriebetrieben und reagieren auf Bewegung. Sobald jemand still am Schreibtisch sitzt, schaltet aber das Licht aus \u2013 und alle Bewohner fluchen \u00fcber die Smarthome-Romantik. Genau hier setzen mmWave-Radarsensoren an. Sie messen winzigste Brustbewegungen und erkennen Anwesenheit auch bei lesendem, schlafendem oder telefonierendem Menschen. In meinem Heimaufbau ersetze ich gerade die letzten PIR-Sensoren durch den Tuya TS0601 \u2013 konkret die Variante <code>_TZE200_kb5noeto<\/code>. Hier sind die Erkenntnisse aus drei Monaten Produktivbetrieb.<\/p>\n<h2>Problem: PIR ist blind, sobald du still sitzt<\/h2>\n<p>Klassische PIR-Sensoren reagieren auf W\u00e4rmeunterschiede, die sich relativ zum Hintergrund bewegen. Wer am Schreibtisch eine Excel-Tabelle anstarrt, erzeugt keine messbare Bewegung mehr. Ergebnis: Die Bewegungsmelder-Automation schaltet nach zwei Minuten das Licht aus. L\u00f6sung der meisten Bastler: Timeout auf zehn Minuten, dann f\u00fcnfzehn, dann irgendwann der Wechsel zum Always-on-Schalter.<\/p>\n<p>Ein mmWave-Sensor wie der TS0601 funktioniert anders. Er sendet ein 24-GHz-Radarsignal aus und misst, welche Reflexionen sich zwischen den Messzyklen ver\u00e4ndern. Eine ruhig atmende Person ver\u00e4ndert die Reflexionen alle vier Sekunden ein bisschen \u2013 das reicht. Damit unterscheidet sich Anwesenheit (<code>occupancy<\/code>) klar von Bewegung (<code>motion<\/code>), und das Licht bleibt an, solange jemand im Raum ist.<\/p>\n<p>In meinem Aufbau liefern zwei Entit\u00e4ten die kombinierte Information:<\/p>\n<ul>\n<li><code>binary_sensor.tze200_kb5noeto_ts0601<\/code> \u2013 Radar (mmWave), reagiert auf kleinste Bewegungen<\/li>\n<li><code>binary_sensor.tze200_kb5noeto_ts0601_belegung<\/code> \u2013 Belegung (PIR), nutzt den zus\u00e4tzlichen Infrarotkanal des Ger\u00e4ts<\/li>\n<\/ul>\n<h2>Schritt 1: Einbinden \u00fcber ZHA mit Quirk<\/h2>\n<p>Der TS0601 ist in der Standard-ZHA-Bibliothek noch nicht vollst\u00e4ndig unterst\u00fctzt. Beim Pairing zeigt sich oft nur ein einziges Cluster, die Sensitivit\u00e4tsoptionen fehlen. Die L\u00f6sung heisst Custom Quirk. Legen Sie unter <code>\/config\/custom_zha_quirks\/<\/code> eine Datei <code>ts0601_mmwave.py<\/code> an und \u00fcbernehmen Sie den Quirk aus dem GitHub-Issue zigpy\/zha-device-handlers#2950. Anschliessend:<\/p>\n<pre><code class=\"language-yaml\">\n# configuration.yaml\nzha:\n  custom_quirks_path: \/config\/custom_zha_quirks\/\n<\/code><\/pre>\n<p>Nach einem Neustart von Home Assistant erscheinen die zus\u00e4tzlichen Konfigurations-Entit\u00e4ten: Empfindlichkeit, Mindestdistanz, Haltezeit. Bei mir hat sich folgende Einstellung als robust erwiesen:<\/p>\n<pre><code class=\"language-yaml\">\n# Sensitivit\u00e4t 7 von 10 \u2013 nicht zu zappelig\n# Erkennungsdistanz: 3.5 m\n# Haltezeit: 30 s (nicht null, sonst flackert das Signal)\n<\/code><\/pre>\n<h2>Schritt 2: Anwesenheit korrekt entprellen<\/h2>\n<p>Auch ein guter Radarsensor produziert kurze Aussetzer, etwa wenn die Person hinter eine Trennwand greift. Daf\u00fcr entprellen wir das Signal mit einer Template-Binary-Sensor-Logik. Diese h\u00e4lt die Belegung weitere 90 Sekunden, falls der Radar kurz auf \u00aboff\u00bb springt:<\/p>\n<pre><code class=\"language-yaml\">\ntemplate:\n  - binary_sensor:\n      - name: \"B\u00fcro belegt\"\n        unique_id: buro_belegt\n        delay_off:\n          seconds: 90\n        state: >\n          {{ is_state('binary_sensor.tze200_kb5noeto_ts0601', 'on')\n             or is_state('binary_sensor.tze200_kb5noeto_ts0601_belegung', 'on') }}\n<\/code><\/pre>\n<p>Der Effekt ist drastisch: W\u00e4hrend das reine Radarsignal in einer typischen B\u00fcrostunde 15- bis 20-mal kurz wackelt, kennt der entprellte Sensor nur noch einen sauberen on-Zustand. Automationen f\u00fcr Licht, Heizung oder Audio greifen damit zuverl\u00e4ssig und ohne Flackerphasen.<\/p>\n<h2>Schritt 3: Praktische Nutzung im Alltag<\/h2>\n<p>Im B\u00fcro nutze ich den entprellten Sensor f\u00fcr drei Dinge. Erstens steuert er die <a href=\"https:\/\/www.coremind.ch\/wordpress\/\">Entfeuchter-Logik<\/a>, die wir fr\u00fcher schon einmal aufgesetzt haben \u2013 das Ger\u00e4t l\u00e4uft nur noch, wenn jemand wirklich im Raum ist. Zweitens setzt er das Spotify-Profil meiner Office-Lautsprecher aktiv, sobald Anwesenheit erkannt wird. Drittens triggert er die Schreibtischbeleuchtung \u00fcber Hue:<\/p>\n<pre><code class=\"language-yaml\">\nautomation:\n  - alias: \"B\u00fcro Licht bei Anwesenheit\"\n    trigger:\n      - platform: state\n        entity_id: binary_sensor.buro_belegt\n        to: \"on\"\n    condition:\n      - condition: numeric_state\n        entity_id: sensor.weather_station_buro_helligkeit\n        below: 300\n    action:\n      - service: light.turn_on\n        target:\n          entity_id: light.hue_white_lamp_1\n        data:\n          brightness_pct: 85\n          transition: 2\n<\/code><\/pre>\n<p>Mit dem Helligkeitssensor als Bedingung springt das Licht nur an, wenn es wirklich zu dunkel ist \u2013 sonst bleibt es aus, auch wenn jemand reinkommt.<\/p>\n<h2>Fazit: ein kleiner Sensor mit grosser Wirkung<\/h2>\n<p>Der TS0601 kostet rund 25 Franken, ist Zigbee-basiert und damit netzwerkfreundlich, und liefert eine Anwesenheitserkennung, an die ein PIR nicht herankommt. Wer einen einzigen Sensor tauschen will, beginnt im B\u00fcro oder im Wohnzimmer \u2013 dort, wo Menschen am l\u00e4ngsten ruhig sitzen. Mit dem Custom Quirk, einer sauberen Entprellung und einem zus\u00e4tzlichen Helligkeitssensor entsteht so eine Automation, die genau das tut, was sie soll: Licht an, wenn jemand da ist \u2013 und aus, sobald wirklich niemand mehr im Raum ist. Nicht fr\u00fcher, nicht sp\u00e4ter.<\/p>\n<p>Im n\u00e4chsten Schritt schaue ich, wie sich mehrere mmWave-Sensoren zu einer raum\u00fcbergreifenden Anwesenheitskarte zusammenf\u00fchren lassen \u2013 dann sieht Home Assistant nicht nur \u00abirgendwo ist jemand\u00bb, sondern \u00abin welchem Raum genau\u00bb.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>PIR-Sensoren waren lange das Arbeitspferd jeder Heimautomation. Sie sind g\u00fcnstig, batteriebetrieben und reagieren auf Bewegung. Sobald jemand still am Schreibtisch sitzt, schaltet aber das Licht aus \u2013 und alle Bewohner fluchen \u00fcber die Smarthome-Romantik. Genau hier setzen mmWave-Radarsensoren an. Sie messen winzigste Brustbewegungen und erkennen Anwesenheit auch bei lesendem, schlafendem oder telefonierendem Menschen. In meinem &#8230; <a title=\"PIR abl\u00f6sen mit mmWave: TS0601 als zuverl\u00e4ssiger Anwesenheitssensor\" class=\"read-more\" href=\"https:\/\/www.coremind.ch\/wordpress\/pir-abloesen-mit-mmwave-ts0601-als-zuverlaessiger-anwesenheitssensor\/\" aria-label=\"Mehr Informationen \u00fcber PIR abl\u00f6sen mit mmWave: TS0601 als zuverl\u00e4ssiger Anwesenheitssensor\">Weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-268","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"_links":{"self":[{"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/posts\/268","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/comments?post=268"}],"version-history":[{"count":1,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/posts\/268\/revisions"}],"predecessor-version":[{"id":270,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/posts\/268\/revisions\/270"}],"wp:attachment":[{"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/media?parent=268"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/categories?post=268"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/tags?post=268"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}