timer- und pups-intents für homeassistant und snips

felix schwenzel, , in artikel    

alexa, bzw. unser echo-dot ist jetzt seit ungefähr 6 wochen offline und empfängt jetzt ihr gnadenbrot. wenn ich artikel über neue oder nützliche features von alexa lese zucke ich meist mit der schulter und bemerke, dass mich die meisten skills oder features von alexa ohnehin nicht interessiert haben und dass es gerademal 5 sachen gab, die wir/ich regelmässig an alexa herangetragen haben:

  • licht- und gerätesteueerung, vor allem in der küche, wo alexa lebte uns zuhörte
  • timer
  • füllen unserer gemeinsamen einkaufsliste in bring per zuruf
  • gelegentliche fragen nach öffnungszeiten oder wikipedia-artikeln

die licht und gerätesteuerung macht snips mittlerweile, wie ich finde, besser als alexa, vor allem auch, weil ich den lampen, geräten und räumen einfacher (un beliebig viele) synonyme geben kann und vor allem weil ich die aktionen nach gutdünken, vor allem kurz gefasst aufrufen kann. kann natürlich auch sein, dass mir das merken leichter fällt, weil ich mir die triggersätze ausgedacht habe und nicht ein amazon-mitarbeiter. es kann aber auch sein, dass ich die licht-, geräte- und raumzuordnungen per homeassistant besser und einfacher strukturieren konnte, als mit der alexa app. aber das ist ein anderer artikel. genauso werde ich einen artikel darüber schreiben, wie ich snips dazu gebracht habe einkaufserinnerungen in bring zu bekommen, obwohl bring sich weigert eine öfffentliche API anzubieten (spoiler: sie haben eine API, den alexa-skill). lediglich wissenfragen nach wikipedia-artikeln oder öffnungszeiten von geschäften in der nähe konnte ich snips noch nicht beibringen, vor allem weil ein snips ein allgemeines deutsches wörterbuch fehlt, snips also kurzgesagt nur das versteht, was man snips explizit beigebracht hat.

was ich bei alexa wirklich häufig genutzt habe war die timer-funktion. was mich allerdings immer gestört hat, war das fehlende visuelle feedback. um zu erfahren wie lange der timer noch läuft, musste ich immer nachfragen. das kann jede eieruhr besser. sämtliche versuche per API auf die alexa/echo timerfunktionen zuzugreifen scheiterten, alles was über die API (per IFTTT) möglich schien, war eine aktion nach dem ablaufen von timern zu triggern, was ich aber nicht brauchte.

die timer-funktion, die ich hier neben der ebenso wichtigen „pups mal!“-aktion abgefilmt habe, habe ich natürlich mit hilfe vom home-assistant gebaut. wie genau, erzähle ich im folgenden, muss dafür aber vorher nochmal kurz ausholen.

skills legt man mit snips in der (online) konsole von snips an (das bauen von assistenten und skills ist die einzige funktion von snips, die (noch) nicht offline verfügbar ist, nach dem deployment funktioniert snips dann aber zu 100% offline).

snips konsole

der „skill“ timer besteht aus zwei „intents“, timer starten und timer stoppen. die intents findet snips „schwach“, weil ich jeweils nur sechs, bzw. elf trainingssätze eingegeben habe.

snips timer app

die trainingssätze sind die sätze die snips erkennen soll, wenn ich einen timer starten möchte, also zum beispiel:

  • Erinner mich in 2 Minuten
  • Wecke mich in einer Stunde
  • Erinnere mich in 30 Minuten
  • Nudeltimer von 8 Minuten
  • Eieruhr für 6 Minuten
  • Wecker in 15 Sekunden
  • Timer 30 Sekunden
  • 2 Minuten Countdown
  • Starte einen Countdown für 2 Minuten
  • 10 Minuten Timer
  • Timer 10 Minuten

damit ich nicht je einen trainingssatz für jeden möglichen zeitraum aufschreiben muss, gibt es vorgefertigte slots für standardwerte wie die dauer, zahlen, temperaturen oder geldbeträge. deshalb habe ich dem intent einen slot für die timer-dauer hinzugefügt. die satzteile mit der dauer muss man anfangs selbst markieren, nach einer weile lernt die konsole dazu und erkennt die dauer in beispielsätzen alleine. der zweite slot erfasst den namen des timers, so dass ich theoretisch mehrere timer parallel aufsetzen kann oder snips mich beim beenden des timers daran erinnern kann, um was der timer geht.

snips intent TimerStart

im prinzip ist das schon alles was man für meine lösung auf snips-seite anlegen muss. den rest erledige ich mit homeassistant. man kann für snips auch aktionen in python programmieren, die auf den intent reagieren und agieren. diese python-scripte installiert snips dann auch lokal auf dem raspberry. es gibt ein paar fertige skills (oder apps) die man in einer art app-store in der konsole installieren kann. ein paar von denen habe ich ausprobiert, aber meistens waren die anpassungen die ich an diesen fertigen apps vornehmen musste oder wollte aufwändiger als es mit homeassistant selbst zu machen. die meisten der skills die ich in der konsole anlege haben deshalb gar keine aktionen.

snips timer app aktionen (keine)

trotzdem haben die skills, oder genauer die einzelnen intents aktionen zur folge, wenn man im homeassistant die snips-komponnete installiert hat. dann schnappt sich homeassistant sozusagen die intents auf, die man konfiguriert hat. für den TimerStart intent sieht das dann so aus:


intent_script:
  TimerStart:
    speech:
      text: >-
          timer {{timer_duration_raw}} ab jetzt.
          {% if timer_duration > 3600 %}
              Timer von mehr als einer Stunde stelle ich wahrscheinlich falsch dar.
              Felix ist da zu doof für, das ordentlich zu machen.
          {% endif %}
    action:
      - service: timer.finish
        entity_id: timer.snips
      - service: timer.start
        data_template:
          entity_id: timer.snips
          duration: '{{ timer_duration }}'

diese zeilen bitten homeassistant, sobald snips das auslösen des TimerStart-Intents meldet, aktiv zu werden. einerseits mit einem audio-feedback und andererseit mit einer aktion. der intent liefert nach dem auslösen die aufgeschnappten „slots“ mit, also in diesem fall die dauer (timer_duration) und den namen (timer_name). wie man sieht, ignoriere ich den namen und werte bis jetzt lediglich die dauer aus.

wenn ich also sage „10 minuten timer“ erkennt snips die dauer (10 minuten) und den intent (timer start) und gibt das auf dem „mqtt-bus“ bekannt. weil homeassistant den bus abhört arbeitet homeassistant dann meine konfiguration ab und weist snips folgendes an sprachfeedback zu geben: „timer 10 minuten ab jetzt.“ ausserdem stoppt homeassistant eventuell schon laufende timer und startet einen neuen timer mit der übermittelten dauer (timer_duration wird von der homeassistant-snips-komponente freundlicherweise in sekunden umgerechnet, timer_raw ist der der eingabe-, also der rohe wert).

weil jetzt ausser einem laufenden timer nichts weiter passieren würde, muss ich natürlich noch eine automation anlegen, die sich um die darstellung der restlaufzeit kümmert und eine, die den abgelaufenen timer ankündigt.


automation:
  - alias: timerstarted
    trigger:
      platform: time
      seconds: '/1'
    condition:
      condition: state
      entity_id: timer.snips
      state: active
    action:
      - service: counter.increment
        data:
          entity_id: counter.snips_elapsed
      - service: mqtt.publish
        data_template:
          topic: "devices/led-matrix/light/print/set"
          payload: >-
              {% set duration = states.timer.snips.attributes.duration %}
              {% set elapsed = states("counter.snips_elapsed") | default(0) | int %}
              {% set hms_split = duration.split(':') %}
              {% set hours = hms_split[0] | int %}
              {% set minutes = hms_split[1] | int %}
              {% set seconds = hms_split[2] | int %}
              {% set duration = seconds + (minutes * 60) + (hours * 60 * 60) %}
              {{ (duration - elapsed ) | int | timestamp_custom('%M%:%S') }}
  - alias: timerfinished
    trigger:
      platform: event
      event_type: timer.finished
      event_data:
        entity_id: timer.snips
    action:
      - service: counter.reset
        data:
          entity_id: counter.snips_elapsed
      - condition: state
        entity_id: timer.snips
        state: idle
      - service: mqtt.publish
        data_template:
          topic: "devices/led-matrix/light/print/set"
          payload: 'fertig!'
      - service: snips.say
        data_template:
          site_id: "ivanka"
          text: "dein timer ist abgelaufen"

die erste automation läuft jede sekunden wenn der timer.snips läuft (sonst nicht). die action berechnet, bzw. zählt die restlaufzeit (in sekunden) und schickt die restlaufzeit auf meinen selbstgebauten matrix-display, der sich per mqtt füttern lässt. das payload-template macht nichts anders als aus der timer-zeit und der abgelaufenen zeit die verbleibenden minuten und sekunden auszurechnen und sie im format '%M%:%S' darzustellen.

die zweite automation wird getriggert, sobald der timer abgelaufen ist und stellt den text „fertig“ auf dem led-matrix-bildschirm dar und lässt snips sagen: „dein timer ist abgelaufen“.

das ganze würde eventuell mit einem python-script viel einfacher umzusetzen zu sein, aber für komplexeres python bin ich noch zu doof. die homeassistant yaml-konfiguration ist auch nicht gerade trivial, aber weil ich mittlerweile in dieser form gefühlt 800 automatisierungen für die wohnung geschrieben habe, bin ich da relativ trittsicher.

das beispiel zeigt die qualität vom zusammenspiel von snips und homeassistant eigentlich ganz gut: im prinzip ist das alles recht einfach, aber man muss halt fast alles selbst machen. die snipskonsole und dokumentation helfen, homeassistant nimmt einem sowieso einen grossen teil arbeit ab, aber jeden einzelfall, jedes detail muss man selbst bedenken. die nüsse die man für einzelne skills knacken muss sind teils weich, teils sehr hart. mir hat das in den letzten wochen aber grossen spass bereitet diese nüsse einzeln zu knacken: wie bekomme ich snips/homeassistant dazu einzelne lichter, geräte oder lichtszenen zu schalten, wie kann ich meine bring-einkaufsliste per zuruf füllen, wie nach temperaturen fragen. das ist ein bisschen wie kreuzworträtsel lösen, mit dem unterschied, dass man sich die aufgaben und lösungen hier selbst ausdenken muss und es keine richtige oder falsche lösung gibt, sondern nur jeweils eine, die ausreichend gut funktioniert.

* * *

snips pupsen app und pupsen intent

wo ich gerade dabei bin erklär ich noch, wie ich snips (ivanka) das pupsen beigebracht habe. den intent, bzw. die trainingssätze anzulegen war eher trivial:

  • nochmal pupsen
  • bitte pups nochmal
  • pups nochmal
  • pupsgenerator
  • flatulenz
  • bitte flatulieren
  • flatuliere bitte
  • bitte furzen
  • bitte pupsen
  • pup mal
  • kannst du furzen?
  • bitte furz mal
  • bitte pups mal
  • furzen
  • furz mal
  • pupsen
  • pups mal
  • pupse bitte
  • kannst du pupsen?

jeder dieser sätze triggert im homeassistant den intent pupsen:


intent:
  pupsen:
    async_action: True
    action:
      - service: shell_command.snips_wav
        data_template:
          site_id: "{{ site_id }}"
          session_id: "{{ session_id }}"
          wav_file: >-
              {%- set file = [
              "Girl Fart-SoundBible.com-669012925",
              "Quick An Small Fart-SoundBible.com-958779407.wav",
              "Fart Reverberating Bathroom-SoundBible.com-2032114496.wav",
              "Wet Fart Squish-SoundBible.com-332766022.wav",
              "Fart Short Ripper-SoundBible.com-1317602707.wav",
              "King Farthur-SoundBible.com-922925717.wav",
              "Funny Fart Trail-SoundBible.com-1691782690.wav",
              "Squish Fart-SoundBible.com-115133916.wav",
              "Rigid Fart-SoundBible.com-1121832279.wav",
              "Quick Fart-SoundBible.com-655578646.wav",
              "Windy Fart-SoundBible.com-1980462064.wav",
              "Bean Fart-SoundBible.com-215806729.wav",
              "Silly_Farts-Joe-1473367952.wav"
              ] | random -%}
              /Users/ix/.homeassistant/sounds/pupse/{{ file }}
shell_command:
  snips_wav: >-
      /usr/local/Cellar/mosquitto/1.4.14_2/bin/mosquitto_pub -h ivanka.local -p 1883 -u <USER> -P <PASSWORD> -t 'hermes/audioServer/{{ site_id }}/playBytes/{{ session_id }}' -f '{{wav_file}}'

async_action sagt snips bescheid, dass der intent ausgeführt wurde, auch wenn die aktion noch nicht zuende ausgeführt wurde. die aktion besteht im prinzip aus einem kommandozeilen befehl der snips eine wav-datei zum abspielen schickt. die auswahl der wav-datei erfolgt per zufall aus 13 dateien die ich mir zusammengegooglet habe. wichtig sind noch die variablen site_id und session_id. die beiden werte liegen bei jedem intent-aufruf vor und sind dann wichtig, wenn man mehrer snips-assistenten zuhause hat, also in verschiedenen räumen. ich habe im kinderzimmer einen snips-satelitten installiert und wenn ich snips dort frage mal zu pupsen, wird die wav-datei eben auch dort abgespielt.

der kommandozeilenbefehl schickt nach dem aufruf durch den intent die wav-datei per mqtt an den snips-audio-server. durch die site_id weiss snips auf welchem lautsprecher die datei abzuspielen ist und das ist ungefähr alles was man tun muss, um snips zum pupsen aufzufordern.

weil ich es lustig fand pups geräusche im bad abzuspielen, wenn dort jemand anders sitzt, habe ich mnoch einen zusätzlichen skill zusammengestellt, der genau das macht. eleganter wäre es natürlich alles in einem skill, bzw. intent abzuhandeln, also zu prüfen, ob der intent einen raum mitliefert oder nicht und entsprechend zu agieren (bei keiner raumnennung abspielen im raum wo der intent getriggert wurde, sonst im genannten raum).

* * *

hier ist ein gist, mit der homeassistant konfiguration für den timer und den pups intent.

was vor allem gerade schief läuft

felix schwenzel, in links    

manchmal macht es klick, wenn ich texte lese. dann kommen sachen die mir im kopf schwirren plötzlich zusammen, weil irgendwer es geschafft hat die schwirrenden dinge zu verbunden und per logik das schwirren zumindest für eine weile zu unterbinden. zuletzt ist das vor ein paar tagen robert reich gelungen, dessen leider etwas bescheuert übertitelter text Amazon Is Everything That's Wrong With America viel weniger polemisch ist, als die überschrift vermuten lässt.

in aller kürze sagt reich im text, dass amazon ein symptom der derzeitigen krise in amerika ist, bzw. dass amazons jüngste entscheidung für zwei neue hauptquartiere das problem deutlich macht, an dem amerika leidet — aber auch andere westliche länder:

das problem ist eine wachsende ungleichheit von orten („widening inequalities of place“). amazon habe sich entschieden seine zwei neuen hauptquartiere nicht in einer ländlicheren, konservativen gegend anzusiedeln, sondern im liberalen new york und der metropolengegend washingtons.

aus amazons perspektive ist das folgerichtig, weil amazon gebildete, talentierte menschen benötigt um sein geschäft zu betreiben und weiterzuentwickeln. amazon verkauft eben nicht nur sachen im internet, sondern erfindet sich ständig neu, und verbessert seine methoden kontinuierlich, um konsumenten besser und schneller zu bedienen. amazon ist auf technologie angewiesen und technologie, technologieentwicklung ist eben kein ding an sich, sondern ein prozess, ein hin und her, dialoge zwischen menschen, die voneiander lernen, sich inspirieren und sich gegenseit (intellektuell) auf die schultern steigen. und genau das, schreibt reich, passiere eben in hauptsächlich in wenigen geographischen clustern, in den USA vor allem an den küsten. an der westküste, in den bundesstaaten washinton und kalifornien oder an der ostküste um washington DC, boston und new york herum. in europa ist das nicht anders, auch hier findet technologische innovation eher in urbanen gegenden statt, weniger im ländlichen raum.

die talentierten menschen, die technologie vorantreiben, die in technologie-firmen arbeiten, studieren in städten und ziehen die grossräume von städten auch zum späteren leben und arbeiten vor.

und genau das ist das problem: der ländliche raum bleibt vom derzeitigen fortschrittstreiber ausgeschlossen. der ländliche raum ist nahezu ausgeschlossen von jobwachstum, den geld- und steuerströmen, die sich fast ausschliesslich in die städtischen räume ergiessen.

Between 2010 and 2017, according to Brookings, nearly half of the America’s employment growth centered in just 20 large metro areas, now home to about a third of the U.S. population.

Relative to these booming hubs, America’s heartland is becoming older, less well-educated, and poorer.

The so-called “tribal” divide in American politics, which Trump has exploited, is better understood in these economic and cultural terms: On one side, mega-urban clusters centered on technologies of the future. On the other, great expanses of space inhabited by people left behind.

überspitzt formuliert: der ländliche raum verarmt, verblödet, überaltert. populisten wie trump wissen das mit ihren lügen, hohlen versprechen und vermeintlichem mitgefühl für die unterpriviligierten auszunutzen. die gutbezahlten jobs entstehen in den metropolen, aber auch hier entstehen durch einkommensungleichheit immer mehr prekäre einkommenssituationen.

auch in deutschland scheinen sich diese probleme zuzuspitzen. die unterschiede zwischen arm und reich steigen, die mittelschicht verschwindet und die gutbezahlten jobs entstehen in den städten. amazon hat sein hauptquartier in münchen schwabing, „am Berliner Standort entwickelt Amazon“, laut selbstbeschreibung, „seit 2013 zukunftsweisende Technologien“, „In Dresden ist das Amazon Office ein Kompetenzzentrum für Linux Kern- und Hypervisor-Entwicklung“, die eher schlechtbezahlten jobs in logistikzentren siedelt amazon dann auch im ländlichen raum an (graben, bad hersfeld, rheinberg, werne, pforzheim, koblenz, brieselang oder winsen).

in deutschland wie in amerika tendieren die metropolen politisch nach links. seattle, kalifornien, new york, washington DC, alle nennt robert reich „true blue“, also demokratisch dominiert. die republikaner sind dafür in den ländlichen gegenden stärker. in deutschland sind die metropolen zwar nicht blau, aber dafür stark von rot und grüntönen dominiert. in den USA verzerrt sich durch die konzentration der progressiven wähler in den metropolen auch das politische klima:

Another consequence is a more distorted democracy. California (now inhabited by 39.54 million) and New York (19.85 million) each get two senators, as do Wyoming (573,000) and North Dakota (672,591).

Even though Democratic Senate candidates in the midterm elections received 12 million more votes than Republican Senate candidates, Republicans still gained at least one more Senate seat.

ich vermute, dass das sich das in deutschland tendenziell ähnlich verhält, auch wenn die gleichheit der wahl in deutschland offenbar ein höheres gewicht hat, als in den USA.

das problem des „tribal divide“ dürfte sich aber in den kommenden jahren genauso verstärken, wie sich die trends der wachsenden einkommenungleichheit und der sich ausdünnenden mittelschicht auch langsam aber sicher bei uns breit machen.

robert reichs wikipedia-artikel zu lesen, lohnt sich übrigens auch:

In seinem Werk Supercapitalism stellte Reich fest, im vorherrschenden Wirtschaftssystem würden Personen als Verbraucher und Anleger zunehmend mehr Macht erhalten, als Arbeitnehmer und Bürger jedoch immer weniger. Ein Primat der Ökonomie über die Politik untergrabe die Demokratie. Reich stellte dem eine Forderung nach dem Primat der Politik entgegen.

Reich begründet seine Auffassung mit dem Paradox des Superkapitalismus. Dieses besagt: Die Bürger in den Industrieländern und immer mehr Menschen in Schwellenländern profitieren als Verbraucher und Anleger von der Globalisierung und Liberalisierung der Märkte, als Bürger ihrer Staaten lehnen sie jedoch deren negative Folgen weitgehend ab. Als Konsumenten suchen sie nach den besten Preisen, als Bürger beklagen sie jedoch das Aussterben der kleinen Quartierläden und die schlechten Arbeitsbedingungen in den Supermärkten. Als Anleger erwarten sie hohe Renditen, als Bürger verurteilen sie jedoch die Manager, die aus Renditegründen Arbeitsstellen kürzen. Für Reich ist die Bilanz dieser Ambivalenz eindeutig: Die Anleger und Konsumenten sind die Gewinner der Globalisierung. Ihre Auswahlmöglichkeiten nehmen laufend zu. Die Bürger hingegen sind immer öfter die Verlierer: Die Löhne nehmen ab, die Arbeitsunsicherheit nimmt zu und ebenso die gesellschaftliche Ungleichheit.

Der Vorzug von Robert Reichs Superkapitalismus-Konzept liegt darin, dass es nicht zu unsachlicher System- oder Kapitalismuskritik verleitet, denn neoliberal sind in dieser Betrachtungsweise nicht Systeme, sondern Personen, die als Investoren und Konsumenten handeln.

das ist eigentlich ein schöner schlusssatz, auch wenn vieles von dem was reich sagt nachdenkenswert und diskussionswürdig ist: neoliberal sind nicht „die da oben“, sondern wir konsumenten.

ivanka test-setup

felix schwenzel, , in artikel    

letzte woche kam der raspberry und ein ps3 eye kamera/mikrofon, das ich neben den anderen komponenenten für ivanka bestellt hatte. auf die lieferung von eckstein, mit dem aufsteckmikrofon-hat und lautsprecher, warte ich noch immer. ich versuche ja eher weniger bei amazon zu bestellen, aber wenn man sich anguckt wie eckstein meine bestellung händelte, fühle ich mich inspiriert dann doch wieder lieber bei amazon zu bestellen. von eckstein wurde vor allem stille geliefert, erst als ich nach über einer woche nachfragte, antwortete man mir, dass es störungen im zulieferungsprozess gäbe (meine worte) und ich mich noch mindestens eine woche gedulden müsse.

trotzdem konnte ich mir meine neue sprachassistentin, die alexa ablösen soll, zusammenbauen. an den raspberry schloss ich, neben den kamera/mikorofon von sony, dass gerade mal 10 euro kostet aber 4 richtmikrofone verbaut hat und exzellente empfehlungen für sprachassistenten hat, einen batteriebetriebenen mini-lautsprecher, der noch bei uns rumlag, an den kopfhörerausgang an. auf eine SD-karte kopierte ich raspbian, so wie die hervorragende snips-doku das empfiehlt, der ich schritt für schritt folgte.

das betriebsystem und snips selbst zu installieren ging schnell und war nicht übermässig anspruchsvoll. die tools, insbesondere das snips eigene sam, macht die installation wirklich einfach — wenn man mindestens weiss was eine kommandozeile ist. ein bisschen kniffelig war ein konfigurationsaspekt, der eher schlecht dokumentiert ist. seit ein paar releases lässt die snips konfigurationsdatei (/etc/snips.toml) nämlich zu, dass man, statt des mosquitto mqtt-servers auf dem raspberry, auch seinen vorhandenen, eigenen mosquitto nutzen kann. das problem (bei mir) war allerdings, dass mit dem externen, also dem vorhandnen mqtt-server, nichts mehr richtig funktionierte. die spracherkennung funktionierte noch, aber weder der demo-client noch nachinstallierte apps wollten richtig funktionieren. nach einigen stunden debugging war klar, mit externem mqtt geht’s nicht. zu viele komponenten, vor allem aber zu viele fertige action-scripte haben den lokalen mqtt-server hardgecodet auf localhost:1883.

das ist aber auch kein problem, ich habe den lokalen snips-mosquitto einfach in meinen eigenen mosquitto gebridged. in der /etc/mosquitto/mosquitto.conf habe ich folgendes ergänzt:


connection snipsmqtt
address <remote ip>:<port>
remote_username <username>
remote_password <password>
remote_clientid snips
start_type automatic
topic hermes/dialogueManager/# in
topic hermes/asr/# in
topic hermes/hotword/# out
topic hermes/intent/# out
topic hermes/asr/# out
topic hermes/hotword/# out
topic hermes/nlu/# out
topic hermes/tts/# in

damit leitet der snips-mosquitto alle relevanten topics an meinen homeassistant-mqtt-server weiter und empfängt alles was homeassistant zurückschickt.

snips nutzt mqtt als bus. das heisst, alle snips-komponenten kommunizieren über mqtt. der snips-audioserver sendet ständig audiosample-schnipsel über mqtt, die wiederum von der snips wake-/hotword-komponente aufgefangen und analysiert werden. schlägt die hotword komponente alarm, schnappt die ASR-komponente (Automatic Speech Recognition) die audio-samples auf und versucht gesprochenen worte aus den audio-samples zu extrahieren. die extrahierten, gesprochenen sätze werden dann wieder über mqtt an die NLU-komponente (Natural Language Understanding) weitergegeben, die aus den worten den sinn zu exrahieren versucht. danach übernehmen scripte, aktionen oder dialog-komponenten und am ende die tts-komponente (Text to Speech). alles über mqtt.

bevor ich weiter in technische details gehe, fang ich mal mit dem fazit an: das funktioniert alles sehr, sehr gut, mit ein paar abstrichen.

sowohl das eingebaute, mitgelieferte hot-/wakeword (auf deutsch nur eins: „hey snips“), als auch die spracherkennung und analyse funktioniere solide. die standardmässige sprachausgabe, die, wie alles andere, lokal auf dem raspberry stattfindet, ist ein bisschen erbärmlich. pico2wave hört sich noch schlimmer an, als die unheimlichen, von apple mitgelieferten tts-stimmen (auf deutsch „Anna“, auf englisch „Alex“, „Fred“, „Samantha“ und „Victoria“).

ebenso enttäuschend wie die sprachsynthese, ist die personalisierte, „custom“ hotword-erstellung. ein bisschen war das ja der witz, eine sprachassistin zu haben die wir nicht mit „alexa“ aufrufen müssen, sondern mit „ivanka“. snips liefert ein python-script mit dem die aufnahme von audio-schnipseln wirklich einfach ist und diese persönlichen modelle reagieren dann auch auf „ivanka“, aber eben auch auf geschirrklappern, naseschnäuzen, husten oder wenn die beifahrerin etwas lauter redet. auf was diese persönlichen modelle nicht reagieren: wenn die beifahrerin „ivanka“ sagt. um universelle hotword-modelle zu bauen, die mit verschiedenen, möglichst allen stimmen und dialekten funktionieren, benötigt man tausende verschiedene sprachsamples mit denen dann das modell trainiert wird.

die schwächen der weckwort-erkennung, sowie der standard text-zu-sprache-komponente, lassen sich aber dank der extrem modularen bauweise von snips gut beheben. weil eben alles über den mqtt-bus geht und die komponenten nicht direkt, sondern eben über über mqtt-nachrichten kommunizieren, kann man einfach komponenten ergänzen oder austauschen. dazu in einem anderen artikel mehr.

der rest von snips funktioniert aber, wie gesagt, enorm befriedigend. die spracherkennung, das anlegen, pflegen von skills, intents, slots und die integration in home-assistant funktionieren so gut, dass ich die original alexa bereits vor vier tagen ausgestöpselt habe. die von uns am häufigsten genutzten alexa-funktionen (lichtsteuerung in der küche, timer, einkaufsliste (via bring), wetter) konnte ich bereits alle in snips nachbauen. dazu in separaten artikeln mehr.

was mich an der original-alexa damals sehr begeistert hat war, dass sie mich auch hörte (wenn’s ruhig war), wenn ich neben der küche auf dem klo sass und sagte: „alexa, licht im flur ausschalten!“ ich fand das gleichzeitig (technisch) beeindruckend, aber auch ein bisschen creepy. wenn alexa mich bei geöffneten türen (und ruhe) auch auf dem klo hört, was hört sie sonst noch alles? mein provisorischer snips-setup mit dem ps3 eye kamera/mikrofon funktioniert aber erstaunlicherweise genauso gut! ohne sonderlich laut zu werden, kann ich snips auch auf dem klo sitzend sagen, das licht im flur an (oder aus) zu schalten.

ich bin gespannt, ob der etwas kompaktere mikrofon-hat, wenn er denn irgendwann mal von eckstein geliefert wird, genauso beeindruckend funktionieren wird.

snips
von links: alexa (offline), ps3 eye kamera/mikrofon, raspberry und ein lautsprecher. dazwischen bastelkram.

die original alexa liegt noch in der küche, allerdings offline und kabellos, als kandis-dosen-beschwerer. so richtig vermisst habe ich sie in den letzten tagen, seit dem sie offline ist, nicht. snips ist toll!

wenn die leute wissen, wie würste gemacht werden …

felix schwenzel, in artikel    

Sometimes, magic is just someone spending more time on something than anyone else might reasonably expect. — Teller

dieses zitat von teller, der gemeinsam mit penn das bühnenpaar penn & teller bildet, ist auf vielen ebenen grandios. einerseits erklärt es die essenz des showbusiness, aber auch die des hochleistungssports und ich würde fast wagen zu sagen, auch der kunst.

menschen die grosse teile ihres lebens einer sache widmen und unvorstellbar viel zeit darein stecken, erlangen damit im besten fall die fähigkeit uns zu unterhalten und zu faszinieren.

der trick ist, mehr arbeit in eine fähigkeit zu stecken, als es sich jemand anders vernünftigerweise vorstellen kann.

mittlerweile habe ich sogar meine zweifel, ob es sowas wie talent überhaupt gibt und ob wir talent als das wahrnehmen, was eigentlich das ergebnis von enorm viel übung, oder genauer vom festbeissen und manische verfolgen einer sache, einer fähigkeit, eines ziels ist. nach dieser lesart wäre talent dann eigentlich die fähigkeit und der wille sich auf eine sache so zu konzentrieren, wie es sich niemand anders vorstellen mag oder kann.

aber ich wollte eigentlich auf etwas ganz anderes hinaus: auf teller und penn (spoiler: eigentlich auf dieses interview, aber bis dahin brauche ich noch ein paar zeilen). teller ist der manische part vom bühnenduo penn & teller. der nerd, der sich monate-, jahrelang mit der perfektionierung, optimierung von zaubertricks beschäftigen kann. in diesem wunderbaren podcast ist ein kapitel, in dem teller zu einem bestimmten zaubertrick befragt wird: dem schwebender-ball-trick.

teller erzählt, wie er diesen ziemlich alten trick zuerst beherrschen wollte, dann verbesserte und erweiterte und daran 8 monate allein und bei jeder gelegenheit, auch im urlaub, dran arbeitete. alleine, vor dem spiegel, nach gemeinsamen auftritten nachts auf der bühne. nach 8 monaten zeigte er den trick zum ersten mal seinem bühnenpartner penn jillette. der witz ist: penn mochte den trick nicht, er war ihm zu schmalzig, zu circe-du-soleil-mässig. teller arbeitete weiter, monatelang, an dem trick, gab dem auftritt eine richtung, eine art geschichte, aber auch das reichte nicht um penn zu überzeugen (ich verkürze grob, es lohnt sich das ganze podcast-kapitel mit teller anzuhören). denn abgesehen davon, dass der trick einfach nicht penns geschmack entsprach, fehlte eine entscheidende zutat, die alle — oder die meisten tricks — von penn & teller ausmacht. radikale offenheit, kein ornament, kein schmalz, kene mystik. und: oft verrät penn auf der bühne das geheimnis des tricks auf der bühne (teller spricht auf der bühne nicht).

und genau das war es, was den trick für penn dann erträglich machte: er kündigt den trick (wahrheitsgemäss) an, als einen trick, der einzig und allein mit einem faden funktioniert. trotzdem, oder erst recht deshalb, verzaubert der trick das publikum. das gelüftete geheimnis nimmt dem trick nichts, im gegenteil, durch die perfekt einstudierten bewegungen tellers, fasziniert der trick noch mehr als wenn das publikum den hinweis nicht erhalten hätte oder irgendeinen mysterien-scheiss aufgetischt bekommen hätte.

das was teller hier macht, ist ein durch-choreographierter tanz, mit unverständlichen, nicht nachvollziehbaren bewegungen.

youtube-video
youtube

das gleiche prinzip, wenn auch ein bisschen platter, erkennt man in diesem trick. obwohl penn & teller hier sogar jedes detail des tricks erklären, reduziert das die faszination nicht um das geringste, sondern steigert sie in bewunderung.

youtube-video
youtube

wahrscheinlich ist es ähnlich wie beim ballet. man sieht und versteht vermeintlich jede bewegung, aber kaum einer ist in der lage, diese bewegungen nachzuvollziehen, jedenfalls nicht in dieser perfektion und dieser (vermeintlichen) leichtigkeit.

aber der entscheidenste punkt von allen ist noch etwas anderes, was penn in diesem interview (hier gefunden) erklärt:

Vulture: But why is the audience willing to get emotionally engaged even after you’ve explicitly said the trick is done with thread?

Penn: It’s because there’s a secret that I would like to take credit for uncovering: The audience is smart. That’s all. Our goal when we started was “Let’s do a magic show for people smarter than us.” No other magicians have ever said that sentence. I hated the whole idea that some smarmy motherfucker who couldn’t get laid was out there saying, “I can do this; you can’t.” So when Teller and I first got together I said, “I want to do a magic show that’s honest and has complete respect for the audience.” And when you start being honest with the audience, they start to play a game within themselves. Here’s an example that kills me: People who have just talked to Teller will come over to me after the show and say, “I think it’s great that Teller never says anything.” Internalizing a counterfactual is just something people can do.

man zieht das publikum auf seine seite, wenn man es einweiht, die internen abläufe transparent darstellt und es respektvoll, auf augenhähe behandelt. das hört sich jetzt abstrakt und theoretisch an, aber wenn man sich vor augen hält wie zum beispiel journalismus heutzutage (oder auch schin immer) funktioniert, wird einem schnell klar, dass journalismus, der mit den gefühlen seiner leserschaft spielt, der gezielt emotionen schürt, genau dem prinzip entspricht, wie zauberei die penn & teller verachten. zauberei, die uri-geller-mässig dem publlikum irgendwelche mysterien und unbekannten kräfte auftischt, um sensationeller zu wirken, ist das gleiche, wie raunender journalismus, der tatsachenfragmente aufpeppt mit verschwörung, ressentiments verstärkt und letzten endes mit dem publikum spielt. boulevardmedien, klatschblätter bedienen ihre leser nicht, sie spielen (von oben herab) mit ihren gefühlen und wenden dafür alt-bewährte rezepte an.

die meisterschaft, der es bedarf sich in die karten gucken zu lassen, die internen abläufe darzustellen — und trotzdem das publikum zu begeistern oder mindesten zu interessieren, beherrschen die wenigsten journalisten — und natürlich auch die wenigsten entertainer. und schlimmer: sich auf augenhöhe herabzulassen und dem publikum ebendort zu begegnen, das publikum zu respektieren und an dessen intelligenz zu glauben, scheint nach wie vor ein ding der unmöglichkeit für die meisten öffenbtlichkeitsarbeiter zu sein.

auf einen ähnlichen gedanken geht penn in dem interview ein, als er dem interviewer in einem punkt heftig widerspricht:

Vulture: So what you’re saying is that you’re skeptical that there’s been a shift, which is often attributed to Trumpism, in those people’s willingness to believe things at odds with facts?

Penn: But when you say “those people” you’ve made a huge error because there are no “those people.” They don’t exist. You hear stuff like, “Trump supporters are homophobic. Trump supporters are misogynist.” This is a mistake that was made by Democrats. They would accuse Trump supporters of being things that Trump supporters knew they weren’t. There are Trump supporters that have best friends who have gay sex. They do. You can’t put a “they”-type thing on that.

etiketten sind praktisch, sie erleichtern (vermeintlich) die orientierung. aber eigentlich dienen sie, egal ob von recht, links, oben oder unten angewendet, lediglich der ausgrenzung. die welt ist kompliziert, menschen sind noch komplizierter. die welt oder die beurteilung von menschen zu vereinfachen, lässt die welt für einen moment verständlicher erscheinen, stört aber den blick für gemeinsamkeiten und vertieft spaltungen.

„diese leute“ (oder „jene“) gibt es nicht, jedes etikett greift (immer) zu kurz. das gilt in der politik, aber eben auch in der unterhaltung.

was ich an penn am allermeisten mag, ist sein unbeugsamer optimismus.

Penn: For 50 million years our biggest problems were too few calories, too little information. For about 50 years our biggest problem has been too many calories, too much information. We have to adjust, and I believe we will really fast. I also believe it will be wicked ugly while we’re adjusting.

Vulture: How will that ugliness manifest itself?

Penn: Donald Trump.

ich weise da auch gerne drauf hin. die verwerfungen die wir derzeit in und um die sozialen medien erleben, sind umwäzungsprozesse an die wir uns erst gewöhnen müssen, mit denen wir erst noch lernen müssen umzugehen, persönlich, aber mehr noch: gesellschaftlich.

meine fernbsteuerbaren geräte (erster teil: die esp8266-basierten)

felix schwenzel, in artikel    

weil ich selbst schnell den überblick verliere, wollte ich heute mal kurz notieren, welche geräte hier in meiner wohnung funken. ich fange mal an mit den esp8266-basierten wlan geräten. sind doch einige geworden.

* * *

später details zu den mysensor-nodes (arduino- und nrf24l01-basiert), zwei raspberry pis, und diversen 433 mhz-basierten geräten.

hoffentlich ist es ein technisches problem!

felix schwenzel, , in artikel    

ich bin zwar kein souveränitätscoach, aber mir kommt das ein bisschen unsouverän vor, dass der tagesspiegel mir seit diesem artikel keine einladungen mehr zu seiner „confronting the future“-veranstaltungsreihe schickt. eigentlich auch ein bisschen schade.

kann natürlich auch ein technisches problem sein, dachte ich mir gestern. denn ich bekomme seit dem 15. mai auch keinen tagesspiegel-checkpoint mehr. also habe ich versucht mich mit meiner bisher genutzten adresse ix@wirres.net nochmal anzumelden. das ergibt eine komische fehlermeldung:

anmeldung mit ix@wirres.net
anmeldung mit ix@wirres.net

na gut, das kann daran liegen, dass ich mit ix@wirres.net schon angemeldet bin und die anmeldemechanik mich kryptisch daran erinnern möchte, dass das so nicht geht. also habe ich mich mit ix@schwenzel.de angemeldet. ich bekomme sofort eine „aktivierungsmail“ und opte ein. jetzt bin ich mit ix@schwenzel.de beim checkpoint angemeldet und habe heute früh auch wieder einen checkpoint bekommen. versuche ich mich jetzt mit ix@schwenzel.de erneut anzumelden, bekomme ich wieder eine aktivierungsmail. das kann ich wiederholen, so oft ich will.

anmeldung mit ix@schwenzel.de
anmeldung mit ix@schwenzel.de

irgendetwas scheint also im zusammenhang mit meiner ix@wirres.net-email-adresse nicht zu stimmen. vielleicht bin ich wegen zustellungsschwierigkeiten automatisch auf einer ausschussliste gelandet, vielleicht bin ich da manuell drauf gesetzt worden. mich würde der grund wirklich interessieren und habe gestern mal bei checkpoint@tagesspiegel.de nachgefragt. sollte da jemals eine antwort kommen, ergänze ich den artikel hier.

ich hoffe ja wirklich inständig, dass das alles ein technisches problem ist. weil wenn der tagesspiegel mich wirklich wegen ein bisschen harmloser kritik auf irgendwelche schwarzen listen gesetzt hätte, würde das die austeilen-und-einstecken-können-quote in berlin massiv aus dem gleichgewicht bringen. muss man sich mal vorstellen: dann wäre die berlin-brandenburger flughafengesellschaft plötzlich souveräner als der tagesspiegel selbst!

* * *

[nachtrag 08.06.2018]

mittlerweile habe ich post vom tagesspiegel „Support-Newsletter“ bekommen:

Wir hatten von Ihnen eine Aufforderung, Ihnen keine Mail mehr zuzuschicken. Daher sind Sie auf unserer sog. Sperrliste verzeichnet.

eben noch war ich mir noch sehr, sehr sicher mich weder vom checkpoint noch vom „confronting the future“-verteiler abgemeldet zu haben. mittlerweile bin ich ins grübeln geraten: hab ich mich eventuell doch vom „confronting the future“-verteiler abgemeldet? wenn ja, wäre dieser artikel natürlich ein bisschen peinlich, zumindest die unterstellung an den tagesspiegel wegen der mangelnden souveränität. eine abmeldebestätigung kann ich jedenfalls nicht in meinem postfächern finden.

was allerdings verwunderlich bliebe: hätte ich mich tatsächlich von einladuingen zur „confronting the future“-veranstaltungsreihe abgemeldet, dass ich dann auch gleichzeitig aus dem checkpoint fliege.

ich hoffe der tagesspiegel „Support-Newsletter“ antwortet mir ein weiteres mal auf die frage, ob die abmeldung irgendwie nachvollziehbar ist. ich kann mich jedenfalls nicht daran erinnern mich abgemeldet zu haben.

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)]

nokia sleep

felix schwenzel, , in artikel    

ich habe bisher meinen schlaf mit der apple watch in kombination mit der autosleep-app getrackt. das funktioniert ganz gut, obwohl ich die uhr nachts meistens nicht trage (sondern lade). durch die kombination mit der iphone app weiss autosleep, dass ich wach bin, solange, oder sobald, sich mein iphone bewegt. trägt man die uhr, trackt autosleep auch die schlafherzfrequenz oder schlaftiefe.

vor ein paar wochen hörte ich, dass nokias neuer schlaftracker nokia sleep vorbestellbar sei und mitte april lieferbar sei. mitte april kam das teil dann unter meine matraze, um zu sehen, ob das versprechen nokias erfüllbar ist, dass das teil nicht nur die zeit, die ich im bett bin und schlafe misst, sondern auch die schlaftiefe, meine herzfrequenz und schnarchintervalle.

tatsächlich schien das nokia-sleep-teil das ganz gut hinzubekommen. die auswertung meiner nächtlichen herzfrequenz sah schlüssig aus, der vergleich mit den werten der apple watch zeigte, dass die messung mindestens so akkurat ist, wie die der apple watch. auch die auswertung der schlafftiefe, bestätigte die selbsteinschätzung meines schlafverhaltens. ich schlafe, im vergleich zur beifahrerin, relativ wenig, früher reichten mir unter der woche sechs stunden, mittlerweile reichen mir auch fünfeinhalb oder fünf stunden (am wochenende schlaf ich gerne zusatzlich tagsüber ein oder zwei stunden). meine vermutung war schon länger, dass ich meine erholsamen tiefschlafphasen relativ früh in der nacht, also nach dem einschlafen erledige und so auch bei frühmen aufstehen ziemlich erholt bin. andere, die ihre tefschlafphasen erst später in der nacht haben, tun sich mit frühaufstehen deshalb ein bisschen schwerer.

die auswertung der nokia-sleep-app meckerte zwar über meine niedrige gesamtschlafzeit, attestierte mir aber lange tiefschlafphasen, in der nacht von 20. april, trotz lediglich 5 stunden schlafzeit, immerhin fast 3 stunden tiefschlaf und mehr als eine stunde REM-schlaf.

zwei tage meiner schlafanalyse
zwei tage meiner schlafanalyse

nach zwei wochen habe ich die nokia-sleep-matte unter die matraze der beifahrerin geschoben und konnt bei ihr das gegenteil beobachten. ihre knapp acht stunden schlaf bestanden am 5. mai aus viereinhalb stunden unruhigem, leichten schlaf und nur drei stunden erholungsschlaf (tief und REM).

zwei tage schlafanalyse der beifahrerin
zwei tage schlafanalyse der beifahrerin

nach meiner beobachtung ist REM-schlaf-phasenerkennung nicht ganz akkurat. zumindest wenn ich morgens aus träumen aufwachte, was man ja vor allem in REM-phasen tut, sah mich nokia eher in tief- oder leichtschlaf. die beobachtungen der beifahrerin zeigen das gleiche.

* * *

einer der gründe mir das nicht ganz günstige (110,00 €) nokia-sleep-teil zu kaufen, war etwas was mir bei autosleep fehlte: die anbindung an meine hausautomatisierung.

es gibt keinen weg die daten aus der apple watch oder aus autosleep auszulesen oder auslöser für aktionen zu definieren. die nokia sleep kommt mit einer anbindung an den automatisierungsdienst ifttt. ifttt mag ich eigentlich nur so mittel, einerseits weil die reaktionszeiten von ifttt aus erfahrung eher bescheiden sind und weil ich mich bei hausautomatisierung eher ungerne auf daten aus der cloud verlasse (measure local, act local).

grundsätzlich halten sich meine bedenken, vitaldaten in der cloud zu speichern in grenzen. auf apple-servern dürfte sich da seit jahren einiges angesammelt haben. jetzt liegen vitaldaten von mir (und der beifahrerin) eben auch bei nokia, nachdem ich meine vitaldaten auch dem mittlerweile insolvent gegangenen sen.se für eine weile über deren schlafnuss (sleep-peanut) zugeführt habe. jetzt pumpt eben die (der) nokia-sleep diese daten in die nokia-cloud. was mich am cloud-gedöns eher nervt ist die (oft fehlende) zugänglichkeit der daten. ich möchte die auch selbst auswerten können und in echtzeit darauf zugreifen.

bevor ich mir die nokia sleep gekauft habe, hab ich mir die API von nokia-health angeschaut und das sah eigentlich ganz gut aus. theoretisch gibt es zugriff per API auf alle daten in der cloud, gesichert über oauth2 und token-basierte requests. das sieht in meiner mittelkompetenten einschätzung seriös und ausreichend sicher aus, aber eben auch kompliziert. was gut für die sicherheit und schwierig für die selbstauswertung ist.

da das einzig relevante datum für die heimautomatisierung aber ohnehin der zeitpunkt wann man sich ins bett legt und aufsteht ist, entschied ich mich für den ifttt-weg, statt selbst eine API-anbindung zu basteln (diektzugriff auf das per wlan im heimnetze eingebundene nokia health scheint nicht möglich, das teil scheint keine offenen ports zu haben). ifttt sendet meiner heimautomatisierungszentrale homeassistant eine nachricht, wenn ich mich ins bett lege und wenn ich aufstehe. das funktioniert erstaunlich gut und für ifttt-verhältnisse auch ganz flott. sobald ich 30-60 sekunden im bett liege, schlägt der auslöser bei mir auf. beim aufstehen dauerts gerade mal 2-3 sekunden. das ergebnis ist befriedigend: restlichter im schlafzimmer oder der wohnung kann ich so ausschalten (lassen) sobald ich im bett bin oder wenn ich tagsüber im bett liege, bestimmte mitteilungen an mein handy unterdrücken. weil die daten zuverlässig und zeitnah sind, könnte ich auch einen alarm scharf schalten (hätten wir einen) oder bewegungsmelder oder telefone stummschalten. sobald ich aufstehe, sind die bewegungsmelder wieder aktiv und abhängig von der zeit oder dem schlafzustand der mitbewohner liessen sich vorhänge öffnen. diese präzise und relativ zeitnahe bett-präsenz-erkennung für die heimautomatisierung war, wie gesagt, der hauptgrund mir den (die) nokia-sleep zu kaufen.

vorher hat das zwar auch ganz gut funktioniert, indem ich verschiedene sensordaten über bayesische wahrscheinlichkeitsrechnung zusammenführte (zeit, helligkeit, bewegungsmelderdaten, status meines laptops, an der steckdose gemssener ladestrom der apple watch, co2-gehalt der luft). diese bayesische sensor blieb aber, trotz ständiger optimierung leider eher unscharf, mit zu vielen falschen positiven. in sachen bett-präsenz-erkennung bin ich mit dem nokia-sleep hochzufrieden.

auch die nokia health mate app, bzw. deren schlafauswertung wirkt positiv. die sen.se-app, die die daten die meiner schlafnuss in die cloud pumpte, nervte bereits nach ein paar tagen und wirkte wie unseröser und unzuverlässiger hokus-pokus. dagegen scheint mir die health-mate-auswertung und usability um welten besser. die daten stehen nach dem aufstehen sofort zur verfügung (sen.se rechnete daran teilweise stundenlang rum) und daten sind übersichtlich und schlüssig dargestellt. sogar mit meinen mittagsschläfen kommt die auswertung zurecht und markiert sie als „siestas“. für alle daten (schlaftiefe, einschlafdauer, aufwachdauer, herzfrequenz, etc.) gibt es detailansichten, die angebliche schnarchdauer wird allerdings n ur aggregiert dargestellt.

die c’t kommt in ihrer aktuellen ausgabe zu ähnlichen testergebnissen wie ich, was die zuverlässigkeit der auswertung und ifttt-anbindung anbelangt. ich habe aber auch von mindestens zwei leuten gehört, bei denen die auswertung kompletten quatsch lieferte (30 minuten schlafdauer). ich vermute hier probleme mit der kalibrierung, entweder wegen der matrazen-dicke oder der form des lattenrosts.

weil ich die (das?) nokia-sleep an die beifahrerin weitergegeben habe (als eins der vielen geburtstagsgeschenke, über das sie sich nicht sonderlich freute), habe ich mir ein nokia-sleep selbst gebastelt, für 10 euro, statt 100. (artikel dazu folgt)

automatischer vorhang

felix schwenzel, , in artikel    

einkäufe bei aliexpress, also direkt in china, sind eigentlich gar nicht aufregend. dieses mal war ich aber ziemlich aufgeregt. ich habe zum ersten mal etwas bestellt was teurer als 15 euro war, nämlich einen gardinenmotor. ich kann mich zwar nicht erinnern, jemals mit einer aliexpress-bestellung oder lieferung unzufrieden gewesen sein, aber diese bestellung hatte das potenzial dass einiges schief hätte laufen können, hat die laufschiene die richtge länge? funktioniert der motor mit 230 volt? kommt es heile an, ist es zu laut, kommt es durch den zoll?

um es vorwegzunehmen; die aufregung war unnötig, die lieferung hat wunderbar geklappt, der motor funktioniert wie erwartet, die schiene passt, alles liess sich an einem abend montieren.

hier erzähle ich im detail, wie ich die schiene bestellt habe, warum ich jetzt eine eori-nummer habe und wie sich der neue vorhang in meine haussteuerung einbinden liess.

die auswahl bei aliexpress an motorisierten gardinen ist riesig. bei amazon findet man auch ein paar angebote und ein paar deutschsprachige angebote habe ich auch gefunden. hier rangierten die preise für 3,50 meter länge von 480 bis 1100 euro, bei aliexpress war der preisbereich zwischen 120 und 300 euro. die motoren von dooya machten einen guten eindruck und schienen ein etabliertes produkt zu sein, das auch in europa unter verschiedenen markennamen (gowe, somfy) verkauft wird. der dt52e-motor schien mir die richtigen features zu haben, einen 433 MHZ funkempfänger, autokalibrierung und ein „light touch“ feature, mit dem man den vorhang durch leichten zug öffnen oder schliessen kann.

ich entschied mich am ende für dieses angebot, bei dem der preis für 3,50 meter länge allerdings nicht ganz klar war. also bat ich den händler per chat um ein angebot. das angebot was mir zhiwei ren machte hörte sich gut an:

Hello
friend
Your package includes a 3.49-meter curtain track, a DT52E curtain track motor for $ 155 USD to ship your package via Hong Kong Federation IE

ungefähr 130 euro, inklusive versand fand ich super. für die bezahlung schickte mir der händler einen anderen link, wo das produkt mit versand etwas teurer war, ich solle aber dort bestellen und dann die zahlung zurückhalten. nachdem ich dem händler die bestellnummer durchgab, senkte er den preis auf 155 dollar und ich bezahlte.

ein paar stunden später war ich dann fast wieder so weit, die bestellung zu canceln, der händler wollte eine eori-nummer von mir haben. eine kurz-recherche im netz ergab, das ist eine internationale zoll-nummer, mit der importeure die zollabfertigung vereinfachen können. das netz und die zoll-FAQs sagten, dass privatpersonen die eigentlich nicht benötigten. der händler meinte aber, dass er den versand ohne diese nummer nicht einleiten könne. nach einer eori-nummer hatte mich bisher noch nie ein aliexpress-händler gefragt, also musste ich mich wohl ins behörden-deutsch einlesen. tatsächlich war das aber relativ einfach und auch für privatpersonen möglich. der zoll erklärt:

Als förmlicher Antrag ist der Internetbeteiligtenantrag (IBA) oder das Formular 0870 "Beteiligte - Stammdaten - EORI-Nummer" zu verwenden. Dieser Antrag ist rechtsverbindlich zu unterschreiben und mit den erforderlichen Unterlagen per E-Mail (als PDF-Dokument), schriftlich oder per Fax der GZD - DO Dresden - Stammdatenmanagement zu übersenden.

auf deutsch heisst das alle pflichtfelder dieses formulars auszufüllen und den unterschriebenen ausdruck an den zoll zu faxen. das habe ich gemacht und bekam 5 tage später tatsächlich einen brief (per post) vom zoll mit meiner eori-nummer.

nachdem ich dem aliexpress-händler die eori-nummer schickte, konnte der die lieferung mit fedex klarmachen („Hong Kong Federation IE“ ist fedex, wusste ich auch nicht). das war insofern toll, weil ich jetzt die erste aliexpress-bestellung hatte, bei der ich den exakten verlauf des pakets verfolgen konnte. nach zwischenstops in hong-kong, neu dehli, dubai und paris, lag das paket dann ein wochenende im kölner luftfrachtflughafen und kam am montag zu mir ins büro.

durch die zollabfertigung kam es ohne zollgebühren, weil der händler den warenwert (ungefragt) mit 30 euro angegeben hatte.

* * *

die gardinenschiene war vormontiert, allerdings für den transport in 1 meter lange stücke zerschnitten. mit ein paar montageplatten liess sich die schiene wieder zusammensetzen.

einzelteile des automatischen vorhangs
mechanik des automatischen vorhangs

der transportgurt war auf die richtige länge vorgeschnitten, die rollen waren an der richtigen stelle, ich musste nur noch den zweiten transportwagen mit ein paar schrauben und halteplatten fixieren. und auch die länge der schiene war genauso wie bestellt und passte zwischen die wände. puh. der rest der montage war dann klassische wandmontage: anzeichnen, bohren dübeln, schrauben. nach ein paar stunden hing die stange.

schiene des automatischen vorhangs

der motor kam leider ohne fernbedienung. aber der witz mit dem vorhang, wie mit allen anderen haushaltsgeräten, ist ja nicht, dass er fernbedienbar ist, sondern dass ich ihn automatisieren kann, bzw. irgendwie in meine heimsteuerungszentrale homeassistant bekomme. dort kann ich regeln für den vorhang definieren, die dann, je nach komplkexität, auch ansatzweise intelligent wirken. zum beispiel öffnen und schliessen nach tageslichtbedingungen, wenn niemand da ist, bzw. keine gäste oder das kind nicht zu besuch ist. oder die überbrückung vom homeassistant in die home-app von apple, damit ich, beispielsweise, auf dem klo sitzend meiner uhr sagen kann: „vorhang schliessen“.

jedenfalls war die steuerung des motors dank meines in homeassistant angebundenen 433 MHZ senders/empfängers kein problem. in diesem diskussionsstrang hatte ich mich bereits vorab eingelesen und auch die rfxtrx-anleitung verliert worte dazu. einfach einen code ausdenken, motor darauf trainieren, fertig. ein bisschen komplizierter wird’s nur deshalb, weil man zum trainieren den rfxtrx eigenen manager, ein windows-programm wie aus den 80ern, nutzen muss. aber dank virtual box geht das heutzutage ja auch mal eben.

die einbindung in homeassistant und homebridge ist eigentlich trivial, aber dann im detail doch nochmal ein bisschen kompliziert. der vorhang versteht nur drei befehle, öffnen, schliessen, stoppen. feedback zur position liefert er nicht, auch nicht wenn er manuell bewegt wird (man kann den vorhang auch durch leichtes zerren am vorhang öffnen oder schliessen; das startet den motor). die home-app von apple möchte aber einen rückgabewert des öffnungszustands haben. weil der vorhang sich mit 20 cm pro sekunde bewegt, lässt sich die position aber leicht ausrechnen und als fake-sensor einbinden.

* * *

ich bin sehr angetan von diesem motorisierten vorhang. die beifahrerin nur so mittel, sie findet die schiene eher hässlich. und die öffnung zu den seiten unpraktisch, weil ein kleiner teil des rechten, geöffneten vorhangs noch das fenster verdeckt. da werde ich irgendwann nochmal eine baustelle aufmachen müssen, die schiene mit einer blende verstecken, in der sich eventuell auch eine beleuchtung untzerbringen liesse und die öffnungsgeometrie von links/recht zur mitte ändern in links/mitte nach rechts. die mechanik der schiene müsste das hergeben, ich glaube das lässt sich umbauen.

die grundidee, nicht mehr morgens und abends an zwei tüchern die vor dem fenster hängen selbst ziehen zu müssen, ist grossartig. dass sich die vorhänge zur strassenseite hin auch bei abwesenheit öffnen und schliessen lassen ist balsam auf die leicht paranoide seele der beifahrerin und tut den pflanzen im kinderzimmer auch gut. das handling des vorhangs auch mit konsvervativen methoden (zerren) entspricht meiner lieblingsphilosophie beim heimautomatisieren: optimalerweise sollte alles so funktionieren wie vorher, plus passgenaue automatisierung wo es sinnvoll ist — und bei internet- oder stromausfall sollte möglichst viel weiter funktionieren.

der chinesische händler war zwar der meinung, dass zu meiner bestellung keine fernbedienung gehörte, entscheid sich aber, nachdem ich ihn auf unsere chatprotokolle hinwies, in denen ich den eindruck bekommen hatte dass sie dabei sei, für eine nachlieferung. ich kann den händler deshalb vorbehaltslos weiterempfehlen (das ist ein link auf seinen shop), das handling der bestellung, der lieferung und der konfektionierung war tadellos. dass der händler eine eori-nummer haben wollte hat mich kurz echauffiert, aber es zeigte sich, dass es sich lohnte, den die lieferung per fedex war die bisher schnellste und lückenlosest dokumentierte bestellung die ich jemals in china getätigt habe.

die mechanik dser schiene und des antriebs ist ziemlich ausgefeilt und flexibel und soweit ich sehe, kann man die laufrichtungen auch selbst anpassen. der motor ist relativ leise und arbeitet bisher tadellos.nur eins hat mich bei aller ausgefeiltheit der mechanik gewundert: hängt man den vorhang einfach an die laufrollen und lässt ihn motorisiert schliessen, zieht der motor die vorhänge ohne raffung, ohne faltenwurf zu.

automatischer vorhangs ohne raffung

die vorhänge hängen dann wie tücher vorm fenster. das liess sich mit schnürchen, mit denen ich die laufrollen in geringerem abstand zusammenband beseitigen, irritierte mich aber angesichts der ausgefeiltheit der restlichen mechanik.

automatischer vorhangs mit raffung

eventuell lässt sich das auch durch gechicktere befestigung des stoffs beseitigen, aber ins fachgebiet dekoration wollte ich mich nicht auch noch einarbeiten. ich bin auch so sehr, sehr zufrieden.

differenzierter ressentimieren mit dem tagesspiegel

felix schwenzel, , in artikel    

wie sicher fühlen sie sich? / warum vitamin b12 wichtig ist!

frank bachner fragt im tagesspiegel: „Wird Berlin zum Angstraum?“. als einstieg in seinen artikel wählt er den von populisten bereits gut ausgebauten pfad der emotion und rezitiert drei vorfälle, in denen „arabischstämmigen junge Männer“ auffielen oder pöbelten. damit man als leser nicht den fehler macht, einzelfälle als einzelfälle abzutun, betont er: „Es gibt viele dieser Einzelfälle in der Stadt.“

hörte man nach den ersten paar absäzen auf zu lesen, könnte man glauben, dass der tagesspiegel hier einem moderaten AFDler eine meinungsplattform bietet. aber nach der grossen, emotionalen einstiegsgeste, macht frank bachner einen kleinen schwenker, zitiert die rückläufige kriminalitätsstatistik, die dem sicherheitsgefühl „der Menschen“ widerspräche. berlin sei schon immer von sozialen spannungen geplagt gewesen, nie ein „reiner Wohlfühlort“ gewesen.

weil ich ja nicht nach ein paar absätzen aufgehört habe zu lesen, wird mir langsam klar, worauf frank bachner hinaus will. die „Einzelfälle“ summieren sich zu einem von vielen gespürtem gefühl: angst. und deshalb, schreibt er, „verschwindet bei vielen Menschen zunehmend die Bereitschaft zum differenzierten Blick“. diesen differenzierten blick versucht frank bachner dann auch im laufe seines artikels schweifen zu lassen; er weist auf die überlastete justiz, den schwindenden respekt gegenüber der polizei hin, er identifiziert problem-bezirke (hermannplatz) und bereiche in denen konfliktbewältigungsstrategien gut funktionieren (fussballturniere, schulen).

ich bin ein grosser fan der differenzierung, auch wenn es mir nicht immer gelingt ausreichend zu differenzieren oder das grössere ganze zu sehen. aber genau so, wie es wichtig ist probleme zu erkennen (und zu benennen), ist es wichtig haltung zu bewahren und die verschiedenen möglichen blickwinkel nicht aus den augen zu verlieren. wer jemals ein bisschen in geschichtsbüchern (oder der GEO-epoche) geblättert hat, erinnert sich, dass es unzählige situationen gab, in den neuankömmlinge von den früher angekommenen als bedrohung angesehen wurden. die iren in den usa („When America Despised the Irish: The 19th Century’s Refugee Crisis“) oder die polen im ruhrgebiet (die im 19ten jahrhundert parallelgesellschaften bildeten). das muster ist immer das gleiche: die neuangekommenen werden als bedrohung angesehen, es gibt unzählige konflikte und spannungen, aber nach zwei, drei generationen wirkt der name schimanski plötzlich deutsch und die saint-patricks-parade in new-york ur-amerikanisch. irgendwann ist die integration derjenigen, die noch vor ein paar generationen für „angstträume“ sorgten, so gut gelungen, dass sie selbst gegen neuankömmlinge agitieren.

man darf von einem artikel von einem lokalredakteur in einer lokalzeitung natürlich nicht zu viel erwarten, aber denoch haben mir historischen perspektiven in diesem artikel gefehlt, aber auch die ganz konkreten perspektiven, zum beispiel die sicht der neuangekommenen.

der deutschlandfunk zitiert den historiker philipp ther zu angela merkels wir-schaffen-das-satz wie folgt:

Wir? Wer ist hier wir? Eigentlich sind es sie, die es schaffen, also die Flüchtlinge. Vielleicht wäre es auch wichtig, denen eine Stimme in der gegenwärtigen Debatte zu geben.

natürlich ist es auch wichtig den unzufriedenen, den angstträumenden, denjenigen, die dazu neigen einzelfälle zu verallgemeinern, zuzuhören, aber genauso wichtig ist es eben auch — immer wieder — auf das grosse ganze, auf die grossartige idee des rechtsstaats hinzuweisen. in diesem rechtsstaat sitzen üblicherweise eben nicht die betroffenen über täter zu gericht, sondern richter, die (im idealfall) nicht von emotionen, ängsten oder resentiments getrieben sind. emotionen und recht führen, wie emotionen in der politik, nicht unbedingt zu gerechtigkeit.

zur differnzierung gehört auch ein hinweis darauf, dass kriminalität, gewalt oder pöbelei eben nicht nur ein problem mit „arabischstämmigen jungen männern“ ist, sondern ein problem mit fast allen jungen männern — und oft auch mit älteren.
die aggressivität (nicht nur) im strassenverkehr ist ein problem, das genau wie die aktuellen spannungen und probleme um flüchtlinge ein anlass sein könnte, justiz und polizei zu stärken und besser auszustatten. das argument für die stärkung des rechtsstaats sollte aber lauten, dass sich alle an recht und gesetz und anstand halten müssen und nicht nur eine bestimmte gruppe. oder differenziert ausgedrückt: arschlochverhalten (nach dem gesetz) muss sanktioniert werden, egal von wem es verübt wird.

auch robert ide versucht im heutigen checkpoint zu unterstreichen, dass frank bachner mit seinem artikel nicht nur emotionen und ängste schüren möchte, oder potenziellen afd-wähler mit verständnis überschütten möchte, sondern dass er differenzieren möchte:

mir fällt es schwer insgesamt schwer hier diesen differenzierungswillen zu erkennen, insbesondere aber angesichts dieses schlusssatzes, der den leser ohne weitere einordnung zu grosser sorge auffordert:

Wir müssen uns darauf vorbereiten, dass eine neue Welle von Gewalt auf uns zukommt.

ich glaube wir müssen uns auf einen rechtsdrallige boulevardisierung des tagesspiegel vorbereiten (wird der tagesspiegel zum boulevardblatt?) und ich sehe eine medien-welle von AFD-umfeld-verständnisbekundungen auf uns zukommen.