messlatte

felix schwenzel, , in artikel    

nachdem ich die nicht ganz billige (inklusive lieferung ca. 110,00 €) nokia-sleep an die beifahrerin weitergegeben hatte, wollte ich mir (endlich) eine zuverlässige schlaferkennung, bzw. einen zuverlässig bett-präsenz-sensor, selbst bauen. in diversen foren las ich von leuten, die sich günsige gewichtssensoren unter die vier beine ihres betts montierten und so quasi ihr ganzes bett wogen, um festzustellen, ob es besetzt ist.

mich schreckte der aufwand einer solchgen konstruktion ein bisschen. dafür müssten kabel von über zwei meter länge an allen seiten des betts verlegt werden, eine optisch akzeptable lösung für die bettbeine gefunden werden und eine lösung, mit der man das bett noch bewegen könnte, ohne die sensoren zu verlieren oder neu kalibrieren müsste. meine idee war die gewichtssensoren einfach auf eine zusätzle lattenrostlatte zu montieren. damit konnte ich zwar nicht mehr mein gewicht im schlaf messen, aber, so glaubte ich, zumindest zuverlässig erkennen, ob ich im bett liege oder nicht.

die sensoren, die ich mir in china kaufte (drei euro für vier stück) dürfen nicht plan aufliegen, sondern ihr mittelteil muss sich frei bewegen können. um sie auf eine latte zu montieren, mussen sie entweder in halteschalen liegen, oder über einem entsprechenden loch. statt drei-d-zu-drucken oder zu fräsen, habe ich einfach meine stecheisen ausgemotttet und eine span-latte, die früher als transportsicherung für ikea-küchen-fussleisten genutzt wurde, entsprechend malträtiert.

messlatte mit angezeichneten sensoren
messlatte mit sensoren löchern
messlatte mit sensoren

um die sensoren zu halten und das gewicht der matraze auf beide sensoren zu verteilen, habe ich eine weitere latte oben aufgeschraubt. die steht zwar leicht über (die spanlatte hat zufällig die gleiche höhe wie die regulären latten des lattenrost), aber das wird von der matraze aufgefangen und ist nicht zu bemerken.

messlatte
messlatte

die sensoren werden in der regel, zum beispiel in körperwaagen, zu viert verbaut. um ordentliche messwerte zu bekommen, wird meist eine sehr günstige platine mit einem verstärker genutzt, ein HX711-modul, in deutsch auch „wägezellenverstärker“ genannt. ich habe mir das teil von sparkfun gekauft (ca. 10 euro), die module gibt es aber auch sehr viel günstiger in china (ab 60 cent).

um die drei kabel der einzelnen sensoren zu verschalten gibt es unzählige schaltbilder im netz, für lediglich zwei sensoren musste ich ein bisschen suchen. dave x hat das auf stackexchange sehr schön dokumentiert. die HX711-modul-eingänge sind in der regel mit E+, E-, A+, A-, B+ und B- beschriftet. dafür lautet das anschlussschema dann:

   HX711.E+ : Cell1.White + Cell2.Black
   HX711.E- : Cell1.Black + Cell2.White
   HX711.A+ : Cell1.Red
   Hx711.A- : Cell2.Red

das sparkfun-HX711-modul ist allerdings mit RED, BLK, WHT, GRN und YLW beschriftet, die zuordnung lautet entsprechend:

   E+ RED
   E- BLK
   A- WHT
   A+ GRN

so habe ich die kabel der wägezellen dann auch angelötet.

messlattenelektronik (HX711 und esp8266)

vom wägezellenverstärker geht es dann zu einem microcontroller, der die messwerte auswertet und an die heimautomatisiewrungszentrale sendet, in meinem fall homeassistant. auch hierfür gibt es ein paar bibliotheken (eins, zwei, etc.), aber ich wollte gerne ESPeasy nutzen, weils so einfach ist. im aktuellen mega-pre-release-entwicklungsstrang, gibt es ein experiementelles modul für die HX711-unterstützung. um das zu nutzen, habe ich mir das aktuelle mega-pre-release von der ESPeasy-releaseseite auf github runtergeladen. im realease-zip findet sich ein vorkompiliertes firmware-image für den esp8266, in meinem fall ESP_Easy_mega-20180421_test_ESP8266_4096.bin, das ich einfach per komandozeile und esptool auf einen esp8266 geflasht habe (hier gibt’s weitere flashanleitungen):

./esptool -vv -cd nodemcu -cb 115200 -bz 4M -cp /dev/cu.wchusbserial1460 -ca 0x00000 -cf ESP_Easy_mega-20180421_test_ESP8266_4096.bin

mit ESPeasy ist die weitere konfiguration dann wirklich einfach: vom HX711-modul habe ich die DAT- und CLK-ausgänge mit den pins D4 (DOUT=DAT) und D5 (SCL=CLK) verbunden (VDD und VCC mit dem 5-volt- und GND mit dem masse-anschluss) — fertig:

ESPeasy konfiguration

damit sendet der esp8266 das gemessene gewicht alle zwei sekunden per mqtt. die formel ((%value%+135750)*-1)/20 kalibriert das gewicht auf ungefähr null kilogram. um die kalibirierungswerte rauszubekommen, habe ich die messlatte mit 1-kg-mehl- oder zucker-paketen belastet, mir die werte notiert, mich gewundet, wie genau die konstuktion misst und dann die formel oben ausgerechnet. je nach verwendeten modulen wird das wohl anders aussehen.

zusätzlich zu den wägezellen, habe ich in der messlatte auch noch einen RCWL-0516-radar-bewegungssensor und einen DHT-22 temperatur und feuchtemesser (in matrazennähe) eingebaut. wirklich nötig ist das aber natürlich nicht, wobei der DHT tatsächlich durch die matraze nach einer ca. 30 minütigen latenzzeit präsenz durch erhöhte feuchtigkeit misst. die temperatur-werte sind durch die matraze nicht wirklich verwertbar. den bewegungssensor nutze ich eigentlich um bewegungen im raum zu erfassen, aber natürlich erfasst er auch bewegungen im bett. allerdings, im gegenteil zu den wägezellen, auch die bewegungen im nebenbett.

die montage im bett ist einfach, wenn die messlatte die gleiche länge wie die übrigen latten hat und schmal genug ist, um zwischen die vorhandenen latten zu passen.

messlatte montiert

die messwerte der wägezellen sind erstaunlich genau. so bin ich (offensichtlich) gestern um kurz nach elf ins bett gegangen und nach wenigen minuten eingeschlafen (letzte bewegung um 23:22 uhr). nach dem einschlafen habe ich mich eine halbe stunde nicht bewegt, zwischen mitternacht und ein uhr war der schlaf dann etwas unruhiger, bis kurz vor zwei wurde es dann wieder etwas ruhiger, ab drei wurde mein schlaf offenbar immer leichter und um vier bin ich aufgewacht und aufgestanden. um viertel nach fünf hab ich mich dann wieder hingelegt, 20 minuten gelesen und habe dann nochmal zweieinhalb stunden anständig geschlafen.

messwerte der messlatte in grafana

* * *

weil die messwerte natürlich ständig fluktuieren, runde ich die messwerte im homeassistant auf ganze kilowerte. damit ist die messkurve, wie oben zu sehen, relativ stabil.


sensor:
  - platform: mqtt
    state_topic: "bett/weight/Weight"
    name: "bett gewicht"
    value_template: "{{ (value | float /1000) | round(0) }}"
    qos: 0
    unit_of_measurement: "kg"
    availability_topic: "bett/status/LWT"
    payload_available: "Connected"
    payload_not_available: "Connection Lost"

für die präsenzerkennung nutze ich einen binär-sensor, mit dem ich automatisierungen fürs licht steuern kann, obwohl die messwerte stabil genug sind um für automatisierungen auch direkt den messwert zu nutzen:


- platform: template
sensors:
bett_ix_besetzt:
friendly_name: "Bett ix (Messlatte)"
device_class: occupancy
entity_id: sensor.bett_gewicht
delay_on:
seconds: 5
delay_off:
seconds: 6
value_template: >-
{% if not is_state("sensor.bett_gewicht", "") %}
{{ states.sensor.bett_gewicht.state|float > 10 }}
{% else %}
False
{% endif %}

meine lieblingsautomatisierung ist derzeit, wenn der sensor für mehr als 10 sekunden einen wert grösser als 30 kilogramm misst, also die beifahrerin offenbar auf meine seite rübergerollt ist, dass dann für 10 sekunden serge gainsburgs je t’aime erklingt. ich finde das sehr witzig, die beifahrerin mittlerweile auch (ein bisschen).

gekostet hat der spass signifikant weniger als das nokia-sleep-dings für etwas über 100 euro. hier lagen die materialkosten eher so bei 20 euro.

einkaufsliste:

  • esp8266 (3-8 euro)
  • HX711 (1-10 euro)
  • wägezellen (3 euro)
  • [RCWL-0516 (1 euro)]
  • [DHT-22 (3 euro)]