ti­mer- und pups-in­tents für ho­me­as­sistant und snips

felix schwenzel in artikel

ale­xa, bzw. un­ser echo-dot ist jetzt seit un­ge­fähr 6 wo­chen off­line und emp­fängt jetzt ihr gna­den­brot. wenn ich ar­ti­kel über neue oder nütz­li­che fea­tures von ale­xa lese zu­cke ich meist mit der schul­ter und be­mer­ke, dass mich die meis­ten skills oder fea­tures von ale­xa oh­ne­hin nicht in­ter­es­siert ha­ben und dass es ge­ra­de­mal 5 sa­chen gab, die wir/ich re­gel­mäs­sig an ale­xa her­an­ge­tra­gen ha­ben:

  • licht- und ge­rä­te­steue­erung, vor al­lem in der kü­che, wo ale­xa leb­te uns zu­hör­te
  • ti­mer
  • fül­len un­se­rer ge­mein­sa­men ein­kaufs­lis­te in bring per zu­ruf
  • ge­le­gent­li­che fra­gen nach öff­nungs­zei­ten oder wi­ki­pe­dia-ar­ti­keln

die licht und ge­rä­te­steue­rung macht snips mitt­ler­wei­le, wie ich fin­de, bes­ser als ale­xa, vor al­lem auch, weil ich den lam­pen, ge­rä­ten und räu­men ein­fa­cher (un be­lie­big vie­le) syn­ony­me ge­ben kann und vor al­lem weil ich die ak­tio­nen nach gut­dün­ken, vor al­lem kurz ge­fasst auf­ru­fen kann. kann na­tür­lich auch sein, dass mir das mer­ken leich­ter fällt, weil ich mir die trig­ger­sät­ze aus­ge­dacht habe und nicht ein ama­zon-mit­ar­bei­ter. es kann aber auch sein, dass ich die licht-, ge­rä­te- und raum­zu­ord­nun­gen per ho­me­as­sistant bes­ser und ein­fa­cher struk­tu­rie­ren konn­te, als mit der ale­xa app. aber das ist ein an­de­rer ar­ti­kel. ge­nau­so wer­de ich ei­nen ar­ti­kel dar­über schrei­ben, wie ich snips dazu ge­bracht habe ein­kaufs­er­in­ne­run­gen in bring zu be­kom­men, ob­wohl bring sich wei­gert eine öff­fent­li­che API an­zu­bie­ten (spoi­ler: sie ha­ben eine API, den ale­xa-skill). le­dig­lich wis­sen­fra­gen nach wi­ki­pe­dia-ar­ti­keln oder öff­nungs­zei­ten von ge­schäf­ten in der nähe konn­te ich snips noch nicht bei­brin­gen, vor al­lem weil ein snips ein all­ge­mei­nes deut­sches wör­ter­buch fehlt, snips also kurz­ge­sagt nur das ver­steht, was man snips ex­pli­zit bei­gebracht hat.

was ich bei ale­xa wirk­lich häu­fig ge­nutzt habe war die ti­mer-funk­ti­on. was mich al­ler­dings im­mer ge­stört hat, war das feh­len­de vi­su­el­le feed­back. um zu er­fah­ren wie lan­ge der ti­mer noch läuft, muss­te ich im­mer nach­fra­gen. das kann jede ei­er­uhr bes­ser. sämt­li­che ver­su­che per API auf die ale­xa/echo ti­mer­funk­tio­nen zu­zu­grei­fen schei­ter­ten, al­les was über die API (per IFTTT) mög­lich schien, war eine ak­ti­on nach dem ab­lau­fen von ti­mern zu trig­gern, was ich aber nicht brauch­te.




die ti­mer-funk­ti­on, die ich hier ne­ben der eben­so wich­ti­gen „pups mal!“-ak­ti­on ab­ge­filmt habe, habe ich na­tür­lich mit hil­fe vom home-as­sistant ge­baut. wie ge­nau, er­zäh­le ich im fol­gen­den, muss da­für aber vor­her noch­mal kurz aus­ho­len.

skills legt man mit snips in der (on­line) kon­so­le von snips an (das bau­en von as­sis­ten­ten und skills ist die ein­zi­ge funk­ti­on von snips, die (noch) nicht off­line ver­füg­bar ist, nach dem de­ploy­ment funk­tio­niert snips dann aber zu 100% off­line).

der „skill“ ti­mer be­steht aus zwei „in­tents“, ti­mer star­ten und ti­mer stop­pen. die in­tents fin­det snips „schwach“, weil ich je­weils nur sechs, bzw. elf trai­nings­sät­ze ein­ge­ge­ben habe.

die trai­nings­sät­ze sind die sät­ze die snips er­ken­nen soll, wenn ich ei­nen ti­mer star­ten möch­te, also zum bei­spiel:

  • Er­in­ner mich in 2 Mi­nu­ten
  • We­cke mich in ei­ner Stun­de
  • Er­in­ne­re mich in 30 Mi­nu­ten
  • Nu­del­ti­mer von 8 Mi­nu­ten
  • Ei­er­uhr für 6 Mi­nu­ten
  • We­cker in 15 Se­kun­den
  • Ti­mer 30 Se­kun­den
  • 2 Mi­nu­ten Count­down
  • Star­te ei­nen Count­down für 2 Mi­nu­ten
  • 10 Mi­nu­ten Ti­mer
  • Ti­mer 10 Mi­nu­ten

da­mit ich nicht je ei­nen trai­nings­satz für je­den mög­li­chen zeit­raum auf­schrei­ben muss, gibt es vor­ge­fer­tig­te slots für stan­dard­wer­te wie die dau­er, zah­len, tem­pe­ra­tu­ren oder geld­be­trä­ge. des­halb habe ich dem in­tent ei­nen slot für die ti­mer-dau­er hin­zu­ge­fügt. die satz­tei­le mit der dau­er muss man an­fangs selbst mar­kie­ren, nach ei­ner wei­le lernt die kon­so­le dazu und er­kennt die dau­er in bei­spiel­sät­zen al­lei­ne. der zwei­te slot er­fasst den na­men des ti­mers, so dass ich theo­re­tisch meh­re­re ti­mer par­al­lel auf­set­zen kann oder snips mich beim be­en­den des ti­mers dar­an er­in­nern kann, um was der ti­mer geht.

im prin­zip ist das schon al­les was man für mei­ne lö­sung auf snips-sei­te an­le­gen muss. den rest er­le­di­ge ich mit ho­me­as­sistant. man kann für snips auch ak­tio­nen in py­thon pro­gram­mie­ren, die auf den in­tent re­agie­ren und agie­ren. die­se py­thon-scrip­te in­stal­liert snips dann auch lo­kal auf dem raspber­ry. es gibt ein paar fer­ti­ge skills (oder apps) die man in ei­ner art app-store in der kon­so­le in­stal­lie­ren kann. ein paar von de­nen habe ich aus­pro­biert, aber meis­tens wa­ren die an­pas­sun­gen die ich an die­sen fer­ti­gen apps vor­neh­men muss­te oder woll­te auf­wän­di­ger als es mit ho­me­as­sistant selbst zu ma­chen. die meis­ten der skills die ich in der kon­so­le an­le­ge ha­ben des­halb gar kei­ne ak­tio­nen.

trotz­dem ha­ben die skills, oder ge­nau­er die ein­zel­nen in­tents ak­tio­nen zur fol­ge, wenn man im ho­me­as­sistant die snips-kom­pon­ne­te in­stal­liert hat. dann schnappt sich ho­me­as­sistant so­zu­sa­gen die in­tents auf, die man kon­fi­gu­riert hat. für den in­tent sieht das dann so aus:

die­se zei­len bit­ten ho­me­as­sistant, so­bald snips das aus­lö­sen des -In­tents mel­det, ak­tiv zu wer­den. ei­ner­seits mit ei­nem au­dio-feed­back und an­de­rer­seit mit ei­ner ak­ti­on. der in­tent lie­fert nach dem aus­lö­sen die auf­ge­schnapp­ten „slots“ mit, also in die­sem fall die dau­er () und den na­men (). wie man sieht, igno­rie­re ich den na­men und wer­te bis jetzt le­dig­lich die dau­er aus.

wenn ich also sage „10 mi­nu­ten ti­mer“ er­kennt snips die dau­er (10 mi­nu­ten) und den in­tent (ti­mer start) und gibt das auf dem „mqtt-bus“ be­kannt. weil ho­me­as­sistant den bus ab­hört ar­bei­tet ho­me­as­sistant dann mei­ne kon­fi­gu­ra­ti­on ab und weist snips fol­gen­des an sprach­feed­back zu ge­ben: „ti­mer 10 mi­nu­ten ab jetzt.“ aus­ser­dem stoppt ho­me­as­sistant even­tu­ell schon lau­fen­de ti­mer und star­tet ei­nen neu­en ti­mer mit der über­mit­tel­ten dau­er ( wird von der ho­me­as­sistant-snips-kom­po­nen­te freund­li­cher­wei­se in se­kun­den um­ge­rech­net, ist der der ein­ga­be-, also der rohe wert).

weil jetzt aus­ser ei­nem lau­fen­den ti­mer nichts wei­ter pas­sie­ren wür­de, muss ich na­tür­lich noch eine au­to­ma­ti­on an­le­gen, die sich um die dar­stel­lung der rest­lauf­zeit küm­mert und eine, die den ab­ge­lau­fe­nen ti­mer an­kün­digt.

die ers­te au­to­ma­ti­on läuft jede se­kun­den wenn der läuft (sonst nicht). die be­rech­net, bzw. zählt die rest­lauf­zeit (in se­kun­den) und schickt die rest­lauf­zeit auf mei­nen selbst­ge­bau­ten ma­trix-dis­play, der sich per mqtt füt­tern lässt. das pay­load-tem­p­la­te macht nichts an­ders als aus der ti­mer-zeit und der ab­ge­lau­fe­nen zeit die ver­blei­ben­den mi­nu­ten und se­kun­den aus­zu­rech­nen und sie im for­mat '%M%:%S' dar­zu­stel­len.

die zwei­te au­to­ma­ti­on wird ge­trig­gert, so­bald der ti­mer ab­ge­lau­fen ist und stellt den text „fer­tig“ auf dem led-ma­trix-bild­schirm dar und lässt snips sa­gen: „dein ti­mer ist ab­ge­lau­fen“.

das gan­ze wür­de even­tu­ell mit ei­nem py­thon-script viel ein­fa­cher um­zu­set­zen zu sein, aber für kom­ple­xe­res py­thon bin ich noch zu doof. die ho­me­as­sistant yaml-kon­fi­gu­ra­ti­on ist auch nicht ge­ra­de tri­vi­al, aber weil ich mitt­ler­wei­le in die­ser form ge­fühlt 800 au­to­ma­ti­sie­run­gen für die woh­nung ge­schrie­ben habe, bin ich da re­la­tiv tritt­si­cher.

das bei­spiel zeigt die qua­li­tät vom zu­sam­men­spiel von snips und ho­me­as­sistant ei­gent­lich ganz gut: im prin­zip ist das al­les recht ein­fach, aber man muss halt fast al­les selbst ma­chen. die snipskon­so­le und do­ku­men­ta­ti­on hel­fen, ho­me­as­sistant nimmt ei­nem so­wie­so ei­nen gros­sen teil ar­beit ab, aber je­den ein­zel­fall, je­des de­tail muss man selbst be­den­ken. die nüs­se die man für ein­zel­ne skills kna­cken muss sind teils weich, teils sehr hart. mir hat das in den letz­ten wo­chen aber gros­sen spass be­rei­tet die­se nüs­se ein­zeln zu kna­cken: wie be­kom­me ich snips/ho­me­as­sistant dazu ein­zel­ne lich­ter, ge­rä­te oder licht­sze­nen zu schal­ten, wie kann ich mei­ne bring-ein­kaufs­lis­te per zu­ruf fül­len, wie nach tem­pe­ra­tu­ren fra­gen. das ist ein biss­chen wie kreuz­wort­rät­sel lö­sen, mit dem un­ter­schied, dass man sich die auf­ga­ben und lö­sun­gen hier selbst aus­den­ken muss und es kei­ne rich­ti­ge oder fal­sche lö­sung gibt, son­dern nur je­weils eine, die aus­rei­chend gut funk­tio­niert.


wo ich ge­ra­de da­bei bin er­klär ich noch, wie ich snips (ivan­ka) das pup­sen bei­gebracht habe. den in­tent, bzw. die trai­nings­sät­ze an­zu­le­gen war eher tri­vi­al:

  • noch­mal pup­sen
  • bit­te pups noch­mal
  • pups noch­mal
  • pups­ge­ne­ra­tor
  • fla­tu­lenz
  • bit­te fla­tu­lie­ren
  • fla­tu­lie­re bit­te
  • bit­te fur­zen
  • bit­te pup­sen
  • pup mal
  • kannst du fur­zen?
  • bit­te furz mal
  • bit­te pups mal
  • fur­zen
  • furz mal
  • pup­sen
  • pups mal
  • pup­se bit­te
  • kannst du pup­sen?

je­der die­ser sät­ze trig­gert im ho­me­as­sistant den in­tent :

sagt snips be­scheid, dass der in­tent aus­ge­führt wur­de, auch wenn die ak­ti­on noch nicht zu­en­de aus­ge­führt wur­de. die ak­ti­on be­steht im prin­zip aus ei­nem kom­man­do­zei­len be­fehl der snips eine wav-da­tei zum ab­spie­len schickt. die aus­wahl der wav-da­tei er­folgt per zu­fall aus 13 da­tei­en die ich mir zu­sam­men­ge­goo­glet habe. wich­tig sind noch die va­ria­blen und . die bei­den wer­te lie­gen bei je­dem in­tent-auf­ruf vor und sind dann wich­tig, wenn man meh­rer snips-as­sis­ten­ten zu­hau­se hat, also in ver­schie­de­nen räu­men. ich habe im kin­der­zim­mer ei­nen snips-sate­lit­ten in­stal­liert und wenn ich snips dort fra­ge mal zu pup­sen, wird die wav-da­tei eben auch dort ab­ge­spielt.

der kom­man­do­zei­len­be­fehl schickt nach dem auf­ruf durch den in­tent die wav-da­tei per mqtt an den snips-au­dio-ser­ver. durch die weiss snips auf wel­chem laut­spre­cher die da­tei ab­zu­spie­len ist und das ist un­ge­fähr al­les was man tun muss, um snips zum pup­sen auf­zu­for­dern.

weil ich es lus­tig fand pups ge­räu­sche im bad ab­zu­spie­len, wenn dort je­mand an­ders sitzt, habe ich mnoch ei­nen zu­sätz­li­chen skill zu­sam­men­ge­stellt, der ge­nau das macht. ele­gan­ter wäre es na­tür­lich al­les in ei­nem skill, bzw. in­tent ab­zu­han­deln, also zu prü­fen, ob der in­tent ei­nen raum mit­lie­fert oder nicht und ent­spre­chend zu agie­ren (bei kei­ner raum­nen­nung ab­spie­len im raum wo der in­tent ge­trig­gert wur­de, sonst im ge­nann­ten raum).

so viel spass wie ich mit @snips (und @ home_as­sistant) beim „pro­gram­mie­ren“ habe, hat­te ich nicht mal an­satz­wei­se bei der be­nut­zung von ama­zons ale­xa.#ad­vents­au­to­ma­ti­sie­run­gen pic.twit­ter.com/OFUX­KnkLqp

fe­lix schwen­zel (@di­plix04.12.2018 10:00


hier ist ein gist, mit der ho­me­as­sistant kon­fi­gu­ra­ti­on für den ti­mer und den pups in­tent.