Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| de:tech:bedsensor [2021/01/19 03:34] – bullar | de:tech:bedsensor [2026/08/12 13:54] (aktuell) – claude | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | =====Bed Sensor===== | + | =====Bett Sensor===== |
| ====Motivation==== | ====Motivation==== | ||
| - | Jeder der mit dem Thema Smart Home infiziert hat, überlegt fast kontinuierlich wie er/sie noch manuelle, wiederkehrende Aufgaben automatisieren kann. Vorausgesetzt die passenden Sensoren und Aktuatoren sind schon vorhanden. Ein Sensorbereich der etwas unterrepräsentiert erscheint, ist der Belegungssensor um z.B. durch den Gang ins Bett Aktionen auszulösen oder zu unterlassen. \\ | + | Jeder der sich mit dem Thema Smart Home infiziert hat, überlegt fast kontinuierlich wie er/sie noch manuelle, wiederkehrende Aufgaben automatisieren kann. Vorausgesetzt die passenden Sensoren und Aktuatoren sind schon vorhanden. Ein Sensorbereich der etwas unterrepräsentiert erscheint, ist der Belegungssensor um z.B. durch den Gang ins Bett Aktionen auszulösen oder zu unterlassen. \\ |
| - | Es gibt Alarmmatten als Bettvorleger oder professionelle Bettsensoren aus dem Pflegebereich. Auch die Sitzsensoren aus der Automobilindustrie erfüllen eine ähnliche Aufgabe. Allen gemeinsam ist aber die fehlende Anbindung an ein offenes Protokoll wie z.B. MQTT und natürlich der meist seher hohe Anschaffungspreis. | + | Es gibt Alarmmatten als Bettvorleger oder professionelle Bettsensoren aus dem Pflegebereich. Auch die Sitzsensoren aus der Automobilindustrie erfüllen eine ähnliche Aufgabe. Allen gemeinsam ist aber die fehlende Anbindung an ein offenes Protokoll wie z.B. MQTT oder Home Assistant |
| - | {{: | + | {{:media:tech:bedsensor: |
| - | {{: | + | {{:media:tech:bedsensor: |
| Einige findige Entwickler sind diese Lücke angegangen und haben z.B. Schalter in das Bettgestell integriert [[https:// | Einige findige Entwickler sind diese Lücke angegangen und haben z.B. Schalter in das Bettgestell integriert [[https:// | ||
| Zeile 13: | Zeile 13: | ||
| Mein Ansatz sieht etwas anders aus um möglichst minimalinvasiv für das Bettgestellt zu sein. Als Sensor verwende ich einen druckempfindlichen Widerstand (force-sensitive resistor FSR). Den gibt es auch in einer extra langen Version von 60cm [[https:// | Mein Ansatz sieht etwas anders aus um möglichst minimalinvasiv für das Bettgestellt zu sein. Als Sensor verwende ich einen druckempfindlichen Widerstand (force-sensitive resistor FSR). Den gibt es auch in einer extra langen Version von 60cm [[https:// | ||
| - | {{ : | + | {{ :media:tech:bedsensor: |
| - | {{ : | + | {{ :media:tech:solarvilla: |
| - | {{ : | + | {{ :media:tech:bedsensor: |
| Beim FSR 408 lässt sich der vorliegende Druck leicht mit einen einfachen Widerstandsnetzwerk und einem A/D Wandler oder Comparator auswerten. | Beim FSR 408 lässt sich der vorliegende Druck leicht mit einen einfachen Widerstandsnetzwerk und einem A/D Wandler oder Comparator auswerten. | ||
| - | Um die Auswertung dann auch ins Smart Home Netzwerk zu bekommen gibt es mehrere Möglichkeiten. Eine der einfachsten ist ein ESP8266 Modul (ESP-07) mit der Open/Source Firmware [[https:// | + | Um die Auswertung dann auch ins Smart Home Netzwerk zu bekommen gibt es mehrere Möglichkeiten. Eine der einfachsten ist ein ESP8266 Modul (ESP-07) mit der Open-Source Firmware [[https:// |
| - | {{ : | + | {{ :media:tech:powermeter: |
| ====Features==== | ====Features==== | ||
| Zeile 27: | Zeile 27: | ||
| * Zwei Sensoreingänge für ein Doppelbett | * Zwei Sensoreingänge für ein Doppelbett | ||
| * WLAN Einbindung | * WLAN Einbindung | ||
| - | * MQTT Protokoll | + | * MQTT Protokoll |
| ====Hardware==== | ====Hardware==== | ||
| Zeile 33: | Zeile 33: | ||
| Das Widerstandsnetzwerk zur Auswertung des Drucks sieht wie folgt aus: | Das Widerstandsnetzwerk zur Auswertung des Drucks sieht wie folgt aus: | ||
| - | {{ : | + | {{ :media:tech:bedsensor: |
| Die Ausgangsspannung zum ADC berechnet sich damit so: | Die Ausgangsspannung zum ADC berechnet sich damit so: | ||
| Zeile 52: | Zeile 52: | ||
| Der Maximalwert sollte in unserer Anwendung 1V nicht überschreiten, | Der Maximalwert sollte in unserer Anwendung 1V nicht überschreiten, | ||
| - | {{ : | + | {{ :media:tech:bedsensor: |
| Natürlich kann man auch nur einen FSR408 mit R2 direkt an das Modul anschliessen und umgeht so eventuell sogar die Platine mit einer Freiverdrahtung. | Natürlich kann man auch nur einen FSR408 mit R2 direkt an das Modul anschliessen und umgeht so eventuell sogar die Platine mit einer Freiverdrahtung. | ||
| Zeile 58: | Zeile 58: | ||
| Um das Modul möglichst klein zu halten ist die Schaltung in SMD ausgeführt. Geeignete Heim-Löttechniken sind ja schon an verschiedenen Stellen veröffentlich worden. | Um das Modul möglichst klein zu halten ist die Schaltung in SMD ausgeführt. Geeignete Heim-Löttechniken sind ja schon an verschiedenen Stellen veröffentlich worden. | ||
| - | {{ : | + | {{ :media:tech:bedsensor: |
| - | {{ : | + | {{ :media:tech:bedsensor: |
| Der Anschluss der Sensoren erfolgt über Standard 2.5mm Klinkenbuchsen (JY029). Die Spannungsversorgung ist auch steckbar mit einer 5.5/2.1mm Hohlbuchse (HEBW21). Hierzu findet man sehr preiswerte [[https:// | Der Anschluss der Sensoren erfolgt über Standard 2.5mm Klinkenbuchsen (JY029). Die Spannungsversorgung ist auch steckbar mit einer 5.5/2.1mm Hohlbuchse (HEBW21). Hierzu findet man sehr preiswerte [[https:// | ||
| Mit einem 3D Drucker lässt sich dann noch ein unauffälliges Gehäuse verwirklichen was man leicht mit doppelseitigen Klebeband unterhalb des Bettes befestigen kann. | Mit einem 3D Drucker lässt sich dann noch ein unauffälliges Gehäuse verwirklichen was man leicht mit doppelseitigen Klebeband unterhalb des Bettes befestigen kann. | ||
| - | {{ : | + | {{ :media:tech:bedsensor: |
| - | {{ : | + | {{ :media:tech:bedsensor: |
| - | ====Programmierung==== | + | ====Programmierung |
| Nachdem die Hardware erstellt ist müssen wir noch das ESP Modul programmieren. Wir schon erwähnt basiert der Bettsensor auf [[https:// | Nachdem die Hardware erstellt ist müssen wir noch das ESP Modul programmieren. Wir schon erwähnt basiert der Bettsensor auf [[https:// | ||
| Zeile 78: | Zeile 78: | ||
| Der Bettsensor soll sich ja mit einem vorhandenen MQTT Server verbinden und die aktuelle Belegungsinformation bei Änderung dorthin übertragen. Dazu gehen wir auf den Reiter // | Der Bettsensor soll sich ja mit einem vorhandenen MQTT Server verbinden und die aktuelle Belegungsinformation bei Änderung dorthin übertragen. Dazu gehen wir auf den Reiter // | ||
| - | {{ : | + | {{ :media:tech:bedsensor: |
| ===Devices=== | ===Devices=== | ||
| Als zweites brauchen wir ein Device was den analogen Wert misst und speichert. Das lässt sich über den Reiter //Devices// erreichen. Für jeden Sensor gibt es ein eigenes Device und zusätzlich benötigen wir noch ein Dummy Device um den vorherigen Messewert zwischen zu speichern. | Als zweites brauchen wir ein Device was den analogen Wert misst und speichert. Das lässt sich über den Reiter //Devices// erreichen. Für jeden Sensor gibt es ein eigenes Device und zusätzlich benötigen wir noch ein Dummy Device um den vorherigen Messewert zwischen zu speichern. | ||
| - | {{ : | + | {{ :media:tech:bedsensor: |
| Die grünen Zahlen rechts geben übrigens die aktuellen Messwerte wieder. In dem Beispiel liegt keiner im Bett.\\ | Die grünen Zahlen rechts geben übrigens die aktuellen Messwerte wieder. In dem Beispiel liegt keiner im Bett.\\ | ||
| Hier die Einstellungen für die Devices: | Hier die Einstellungen für die Devices: | ||
| - | {{: | + | {{:media:tech:bedsensor: |
| - | {{: | + | {{:media:tech:bedsensor: |
| ===Rules=== | ===Rules=== | ||
| Zeile 135: | Zeile 135: | ||
| Während des SystemBoot setzen wir den Multiplexer entsprechend auf Eingang 1, die Startwerte auf 100 und einen Timer der jede Sekunde die folgende Routine aufruft. | Während des SystemBoot setzen wir den Multiplexer entsprechend auf Eingang 1, die Startwerte auf 100 und einen Timer der jede Sekunde die folgende Routine aufruft. | ||
| Jede Sekunde werden dann beide Werte ausgelesen und wenn es eine Veränderung um den Schwellwert gegeben hat, wird das Ergebnis an den MQTT Server gesendet. Das sind die Zustände IN bzw. OUT. Man kann natürlich auch die aktuellen Werte übermitteln und die Entscheidung ob IN oder OUT der Homeautomatisierung überlassen. Im folgenden Beispiel habe ich so mal eine Nacht aufgezeichnet. | Jede Sekunde werden dann beide Werte ausgelesen und wenn es eine Veränderung um den Schwellwert gegeben hat, wird das Ergebnis an den MQTT Server gesendet. Das sind die Zustände IN bzw. OUT. Man kann natürlich auch die aktuellen Werte übermitteln und die Entscheidung ob IN oder OUT der Homeautomatisierung überlassen. Im folgenden Beispiel habe ich so mal eine Nacht aufgezeichnet. | ||
| + | |||
| + | ====Programmierung (ESPHome)==== | ||
| + | Die Integration in [[https:// | ||
| + | Hier der passende Code für den Bedsensor: | ||
| + | |||
| + | <code yaml> | ||
| + | esphome: | ||
| + | name: bedsensor | ||
| + | on_boot: | ||
| + | then: | ||
| + | - delay: 20s | ||
| + | - output.turn_off: | ||
| + | |||
| + | esp8266: | ||
| + | board: esp01_1m | ||
| + | |||
| + | # Enable logging | ||
| + | logger: | ||
| + | |||
| + | # Enable Home Assistant API | ||
| + | api: | ||
| + | encryption: | ||
| + | key: " | ||
| + | |||
| + | ota: | ||
| + | password: " | ||
| + | |||
| + | wifi: | ||
| + | ssid: !secret wifi_ssid | ||
| + | password: !secret wifi_password | ||
| + | |||
| + | # Enable fallback hotspot (captive portal) in case wifi connection fails | ||
| + | ap: | ||
| + | ssid: " | ||
| + | password: " | ||
| + | |||
| + | captive_portal: | ||
| + | |||
| + | switch: | ||
| + | - platform: gpio | ||
| + | pin: GPIO12 | ||
| + | id: sensor_select | ||
| + | internal: true | ||
| + | |||
| + | output: | ||
| + | - platform: gpio | ||
| + | pin: GPIO2 | ||
| + | inverted: true | ||
| + | id: led_blue | ||
| + | |||
| + | sensor: | ||
| + | - platform: adc | ||
| + | pin: A0 | ||
| + | id: bed_raw_adc | ||
| + | update_interval: | ||
| + | raw: true | ||
| + | accuracy_decimals: | ||
| + | internal: true | ||
| + | on_raw_value: | ||
| + | then: | ||
| + | - lambda: |- | ||
| + | if (id(sensor_select).state) { | ||
| + | if (x < 50) { | ||
| + | id(bed_sensor_2).publish_state(false); | ||
| + | } else { | ||
| + | id(bed_sensor_2).publish_state(true); | ||
| + | } | ||
| + | id(sensor_select).turn_off(); | ||
| + | } else { | ||
| + | if (x < 50) { | ||
| + | id(bed_sensor_1).publish_state(false); | ||
| + | } else { | ||
| + | id(bed_sensor_1).publish_state(true); | ||
| + | } | ||
| + | id(sensor_select).turn_on(); | ||
| + | } | ||
| + | |||
| + | binary_sensor: | ||
| + | - platform: template | ||
| + | name: "Bed Sensor 1" | ||
| + | id: bed_sensor_1 | ||
| + | |||
| + | - platform: template | ||
| + | name: "Bed Sensor 2" | ||
| + | id: bed_sensor_2 | ||
| + | </ | ||
| + | |||
| ====Beispiel==== | ====Beispiel==== | ||
| - | Hier die Aufzeichnung der konvertierten Werte [0..1023] einer Nacht. Die Drops sind nicht bedingt durch eine altersbedingte Inkontinenz sondern das kurzzeitige Wegkuscheln auf die Bettmitte : | + | Hier die Aufzeichnung der konvertierten Werte [0..1023] einer Nacht. Die Drops sind nicht bedingt durch eine altersbedingte Inkontinenz sondern |
| - | {{ :tech:bed?diagram.jpeg? | + | {{ :media:tech:bedsensor: |
| Zeile 146: | Zeile 233: | ||
| ====Downloads==== | ====Downloads==== | ||
| - | * {{:tech:bedsensor_BOM.pdf|Bestückungsliste (BOM)}} | + | * {{:media:tech:bedsensor: |
| - | * {{: | + | * {{:media:tech:bedsensor: |
| - | * {{: | + | * {{:media:tech:bedsensor: |
| ====Links==== | ====Links==== | ||
| * [[http:// | * [[http:// | ||
| + | ==== Spenden ==== | ||
| + | |||
| + | Wenn ihr meine Arbeit unterstützen wollt, so könnt ihr mir gerne einen Cappuccino oder so spenden: . | ||
| + | |||
| + | < | ||
| + | |||
| + | <form action=" | ||
| + | <input type=" | ||
| + | <input type=" | ||
| + | <img alt="" | ||
| + | </ | ||
| + | |||
| + | </ | ||