angesagt bin ich offenbar nicht, hab aber trotzdem ein highlicht

felix schwenzel, , in artikel    

digitalzimmer.de hat angesagte Blogger-Kollegen gefragt, welche Produkte oder Trends sie in den vergangenen zwölf Monaten besonders beeindruckt haben.

ich wurde nicht gefragt, bin also in der digitalzimmerwelt nicht angesagt. das hat den vorteil, dass ich ohne einschränkungen trotzdem meinen senf abgeben kann und mich vor allem nicht wie die „blogger-kollegen“ an „highlights“ und „trends“ halten muss, die man einfach im laden kaufen kann. meine highlights bestehen nämlich (quasi) aus bausätzen.

* * *

felix schwenzel

felix schwenzel ist gründer des kraut- und rüben-blogs wirres.net. vor zwei jahren hat er begonnen funksteckdosen zu vernetzen und funksensoren zu bauen. auf der suche nach wegen seine vernetzten geräte zu automatisieren, stiess er auf home-assistant und verwaltet damit jetzt fast alle leuchten in seiner wohnung, um die 50 sensoren und gefühlt 600 automatisierungen.

vor einem jahr habe ich mit amazons alexa die freuden der sprachsteuerung entdeckt. meine wirklich grosse freude über funktionierende spracherkennung und die möglichkeit sowohl unsinn als auch sinnvolles per sprache zu steuern, wurde allerdings dadurch getrübt, dass es unglaublich viele restriktionen bei der anpassung an unsere bedürfnisse gab und gibt. weder ich noch die beifahrerin können uns die teils komplizierten, erforderlichen satzkonstruktionen merken („öffne bring und füge joghurt zur einkaufliste hinzu“). die mangelnde kontrolle, das nagende unwohlsein einen lauschsprecher in der küche zu haben, der alle möglichen daten und audioschnipsel in amazons silos speichert, hat schliesslich dazu geführt, dass ich mit snips experimentieren wollte.

das experiment stellte sich als arbeitsintensiv, aber für meine bedürfnisse besser geeignet als de amazon-cloud-lösung heraus. snips ist deshalb mein highlight des jahres 2018, weil ich endlich natürlich und personalisiert mit meinen vernetzten lichtern, aktoren und sensoren reden kann. um szenen zu aktivieren brauche ich nicht zu sagen „aktiviere entspannung“, sondern kann sätze sagen wie: „ich möchte fernsehen“ (dimmt das licht im aktuellen raum), „katia möchte im kinderzimmer lesen“ (aktiviert die szene „lesen“ im kinderzimmer), „katia möchte fernsehen“ (erkennt dass es sich um den raum „stube“ handelt und schaltet neben gedimmten licht auch gleich den fernseher ein). den „küchentisch“ kann ich beliebig dimmen (indem ich prozentzahlen sage, „hell“, „dunkel“, „heller“, „dunkler“ sage), farben anpassen („gelbweiss“, „blauweiss“, „tageslichtweiss“), aber auch alltagssätze wie „es ist zu dunkel“, „es ist dunkel wie im bärenarsch“ oder „katia ist da“ verändern das licht entsprechend (die beifahrerin möchte es in der küche immer hell haben, ich eher gedimmt, weshalb „katia ist da“ oder „katia ist wieder weg“ entsprechend die lichtstimmung steuern und das ganze mit blöden sprüchen komplettieren). vor allem kann ich die küchentischbeleuchtung auch „tisch“, „esstisch“ oder „deckenlampe“ nennen — und wäre ich lustig mir auch beliebig viele andere synonyme ausdenken.

ich kann den vorhang mit einfachen sätzen steuern („vorhang auf“, „vorhang schliessen“, „kannst du den vorhang auf machen?“), was mir mit alexa nur auf umwegen gelungen ist („schalte den vorhang ein“). wenn ich in der küche sage, dass das essen fertig sei, ruft snips die beifahrerin und dimmt das licht (mittelhell, so wie die beifahrerin es gerade noch aushält). timer und wecker kann ich nicht nur (wie mit alexa) auf zuruf stellen, sondern auch anzeigen. geräusche, umgebungsgeräusche (ambient sounds) kann ich mit sätzen wie „meeresrauschen im bad“ oder „pups mal im flur“ auf unsere audio-systeme schicken (musik steuern wir (momentan noch) lieber per mobiltelefon, wo spotify-connect sie dann auf ein paar raspberries oder einem yamaha verstärker in beliebigen räumen abspielt).

der vorteil von snips ist gleichzeitig der nachteil von snips: man muss/kann alles selbst machen. welche sätze snips versteht bestimme ich, nicht ein amazon-ingenieur. die arbeit die mir hunderte oder gar tausende amazon-ingenieure abnehmen, wenn ich einen echo-lauschsprecher nutze, muss ich zum grossen teil selbst erledigen. wobei snips einem da wirklich sehr viel arbeit abnimmt. und auch wenn snips noch nicht alle quellen ofengelegt hat, sind doch immerhin alle schnittstelen offen und dokumentiert und das basteln, das selber bauen, das tinkern und rumprobieren wird von den entwicklern und einer recht aktiven community unterstützt.

die sprachassistenten von amazon, apple oder google haben alle eine rudimentäre persönlichkeit. mit snips kann man die persönlichkeit seines assistenten selbst formen. wie er oder sie antwortet, auf was er oder sie wie reagiert, das alles habe ich mit snips selbst in der hand. das macht grossen spass.

und der lackmustest den jedes konsumentenfreundliche gerät bestehen sollte: snips lässt sich auch einfach abschalten.

befriedigende automatisierung

felix schwenzel, , in artikel    

so wie das modewort „nachhaltig“ eigentlich nichts anderes als „zukunftsfähig“ bedeutet, sind sogenannte „smart-home“ geräte oder apparate mit dem präfix „smart“ eigentlich eine umschreibung für „vernetzt“. un-smarte geräte sind auch vernetzt, aber lediglich mit dem stromnetz. vom stromnetz werden sie mit schaltern am gerät oder in der nähe des geräts geschaltet und machen dann ihr unvernetztes ding, für das sie gebaut sind.

vernetzte geräte, die sich dank ihrer vernetzung nicht nur durch schalter fernsteuern lassen, sondern durch apps oder sprach-assistenten, sind toll. ich beschäftige mich jetzt seit zwei, drei jahren intensiv mit ihnen. dabei haben sich ein paar eigentlich triviale, aber dennoch zentrale erkenntnisse herausgebildet:

erstens: fernbedienung ist toll, aber wichtiger sind offene, programmierbare schnittstellen
eine lampe mit einer app zu steuern ist vielleicht für ein paar wochen aufregend. danach wünscht man sich schalter oder andere ergonomisch angebrachte steuerelemente, zum beispiel ein touchpad, drehregler oder — seit knapp zwei jahren ganz neu — sprachsteuerung. aber am allermeisten wünscht und fragt man sich, also ich zumindest, wie man das vielleicht alles ein bisschen automatisieren, abkürzen kann — und nicht mehr alles selbst zusammenklicken muss.

zweitens: beware of the cloud
es gibt kaum noch „smarte“ (also vernetzte) geräte zu kaufen, die ohne „cloud“, also mit einer direkten leitung zum hersteller, angeboten werden. gegen die cloud sprechen nicht nur allerlei datenschutz- und privatshären-gründe, sondern auch praktische erwägungen: die cloud hat hohe latenzzeiten und die internet-verbindung ist öfter weg als man denkt, aber noch öfter sind die hersteller die einem das gerät verkauft haben und die cloud am laufen halten, plötzlich vom fenster weg oder werden von arschloch-firmen aufgekauft. geräte die sich nicht auch lokal, vor ort vernetzen lassen, also auch eine lokale API (schnittstelle) anbieten, haben im haus oder der wohnung eigentlich nichts verloren. abhängigkeit von der cloud ist alles andere als „smart“.

worauf ich aber eigentlich heraus will, und weshalb ich den artikel vor ein paar tagen ursprünglich angefangen zu schreiben habe, ist automatisierung. was mich (als frickler), aber (hoffentlich) auch andere haushaltsmitglieder dauerhaft begeistert, sind ausgefeilte automatisierungen.

anfang der woche habe ich die spülmaschine eingeschaltet und 5 sekunden später plärrte es aus meinem lautsprecher: „es sind nur noch wenige geschirrtabs da. ich hab tabs auf die einkaufsliste gesetzt.“

das schöne ist: ohne weiteres zutun hat das auch funktioniert.

automatisierungsergebnis

die automatisierung die die aktion ausgelöst hat ist alles andere als „smart“ oder wirklich intelligent; eigentlich ist sie sogar trivial:

automatisierung

so trivial diese automatik auch ist, ich habe noch keinen weg gefunden, soetwas mit systemen der grossen player abzubilden, weder mit homekit, bzw. der home-app von apple, noch mit alexa-routinen oder dem google-home gedöns. samsung hat ein cloud-basiertes system namens „smartthings“, mit dem man sowas vielleicht machen könnte, aber das problem, das alle grossen hersteller bisher nicht mal in ansätzen gelöst haben, ist die integration von sensoren und aktoren über herstellergrenzen hinweg.

ansätze dafür gibt es, aber lösungen die über viele herstellergrenzen hinweg funktionieren, sind bisher nur im DIY (do it yourself) bereich zu finden. lösungen wie home assistant, openHAB und viele andere ermöglichen alle möglichen geräte, sensoren, aktoren zusammenzuflanschen und in einem guss zu automatisieren.

zurück zum beispiel: grundlage der bestell-automatik sind natürlich erst mal sensoren, an erster stelle ein sensor der die anzahl verbliebener tabs verzeichnet. die anzahl tabs ist ein abgeleiter sensor. ich leite die zahl der tabs von einem sensor ab, der registriert wenn die spülmschine angeschaltet wird (und wann sie fertig ist). das wiederum leite ich von einem senor ab, der den stromverbrauch der spülmaschine misst und daraus den betriebszustand der spülmaschine ableitet.

die aktoren sind schon etwas komplexer. es gibt derzeit keinen weg der bring.app einkäufe hinzuzufügen — ausser über die app oder über alexa. bring hält es für unnötig hier eine öffentlich zugängliche API zur verfügung zu stellen. über die alexa-integration, die selbstverständlich auf einer (geschlossenen) API basiert, zu der nur amazon und bring selbst zugang haben, kann ich mich aber trotzdem einklinken.

der dienst bespoken.io erlaubt es mir statt alexa ein komando zuzurufen, alexa ein kommando per rest-schnittstelle zu übermitteln. obwohl ich keinen echo-lauschsprecher mehr in betrieb habe, kann ich so mit alexa-skills kommunizieren die mit meinem amazon-konto verknüpft sind.

shell_command:
  ask_alexa: >-
      /usr/bin/curl -X PUT -G 'https://virtual-device.bespoken.io/process' --data-urlencode 'message={{message}}' --data-urlencode user_id=alexa-xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx --data-urlencode language_code=de-DE -H 'content-length: 0' -o /Users/ix/.homeassistant/scripts/alexa_response.json

wenn ich bespoken programmatisch bitte die nachricht „öfffne bring und füge geschirrtabs hinzu“ an mein alexa-amazon konto zu senden, hat das die gleiche wirkung als würde ich das in ein amazon-echo-mikrofon sprechen. die antwort des bring-skills liefert bespoken freundlicherweise auch gleich mit, so dass ich den auch wieder ausgeben kann — ganz ohne echo dot. (ein weiterer vorteil der lösung über snips ist übrigens auch, dass ich jetzt einfach sagen kann: „wir brauchen milch“, wohingegen mich die alexa-lösung dazu zwingt einen quatsch-satz zu sagen wie: „öffne bring und füge milch zu meiner liste hinzu“)

der zweite aktor macht nichts anderes als snips zu bitten eine tts (text to speech) nachricht in der küche abzuspielen: „es sind nur noch wenige geschirrtabs da. ich hab tabs auf die einkaufsliste gesetzt.“

aufmerksame leser bemerken jetzt natürlich einen widerspruch: ich nutze die cloud für unseren einkaufszettel und um diesen zu füllen. wichtig ist (mir) aber ein prinzip, von dem ich zuerst im architekturstudium gehört habe, und dem ich später in der programmierung und webseitengestaltung wiederbegegnet bin: das prinzip der würdevollen fehlfunktion („degrade in grace“). beim studium ging es eigentlich um materialien „die würdevoll altern“, aber egal ob es sich um material, code oder eine benutzerschnittstelle handelt, alle sollten bei fehlfunktion die würde und ihr gesicht wahren. wenn der eintrag nicht in der einkaufsliste auftaucht, weil die cloudanbindung nicht funktioniert: halb so schlimm, mich hat zumindest die nachricht erreicht, dass nur noch wenige tabs da sind. vielleicht habe ich das auch schon so gesehen. wichtiger ist mir hingegen die zahl der spülzyklen zu erfassen (und daraus den strom und spülmittelverbrauch abzuleiten und gegebenenfalls auszuwerten). das funktioniert auch ohne internet verbindung und diese sensor-daten bleiben in der wohnung. sollte das lokale netzwerk ausfallen ist es zwar schade, dass dann die laufzeiten nicht erfasst werden und ich keine spülmaschine-ist-fertig-nachricht mehr auf mein handy bekomme, aber immerhin funktioniert die spülmaschine noch. fällt der strom aus, kann ich immer noch wasser mit dem gasherd aufkochen und mit der hand spülen. ohne gas ist es dann aber aus mit der wohnwürde.

dieser schichtweise aufbau der technik-funktionen ist meiner meinung nach bei der konzipierung aller aspekte der heimautomatisierung essentiell. die äusserste schicht, die cloud, auf die ich den wenigsten einfluss und kaum kontrolle habe, sollte, wenn überhaupt, nur für komfort-/luxusfunktionen dienen. alles was essentiell ist, licht, wärme, schlösser, geräuschquellen sollten mindestens zwei ebenen tiefer liegen und möglichst eine optionale manuelle steuerung bieten.

tl;dr: weder vernetzung, noch fernbedienung oder automatisierung verdienen im heim wirklich das label „smart“. aber die automatisierung von (am besten lokal) vernetzten, fernbedienbaren geräten macht wirklich spass und befriedigt (wenns funktioniert) tief.

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)