[39_TEERKO.pm] Neues Modul zur textbasierten Steuerung

Begonnen von tiroso, 01 Juni 2017, 08:23:51

Vorheriges Thema - Nächstes Thema

MadMax-FHEM

#165
Hallo tiroso,

----- OFF -----
angesichts von Diskussionen in anderen Threads und da ich (aktuell) nicht mal Zeit hab die sehr umfangreiche Funktionaliät von TEERKO ausgiebig zu testen, werde ich wohl keine weiteren Module (zumidest erst mal) mehr in betracht ziehen.
TEERKO scheint mir auch ohne weitere Vergleichstests als sehr mächtig und (für meine Belange) mehr als ausreichend...
----- ENDOFF -----

Hab's geschrieben und widerspreche mir gleich ;)

Ich hatte wieder etwas Zeit und wie du weißt nutze ich aktuell hautpsächlich/meist/ausschließlich (historisch bedingt wegen Vergleich von Alexa-Einbindung vs. Google Home-Einbindung) "userdefinedcommands"... ;)

Funktioniert prima! :)

Hmmm, aber: besteht irgendwie die Möglichkeit eine in einer perl-Sub generierte Antwort zurückzugeben und das dann als TEERKO-Antwort weiter zu verarbeiten?

Wie gesagt vielleicht sehr speziell aber ich nenne mal ein Beispiel:

Ich habe eine Sub für "gute Nacht".
Die wird über Alexa (alexa-fhem Custom Skill) gerufen und dort wird dann der Return-Wert (return Antwortstring) per Alexa ausgegeben, kann also auch beliebig in der Sub "zusammengebastelt" werden...

Ich kann ja bei userdefinedcommands eben genau auch diese Sub aufrufen (tue ich bereits abwechselnd, will ja vergleichen ;)  ).
Als Antwort kann ich ja mehr oder weniger "nur" fixe Dinge vorgeben...
Bzw. nur über beispielsweise einen Dummy oder ein "selbstdefiniertes Reading" die Antwort zurückgeben...
Wobei habe ich gerade getestet: geht leider (auch) nicht.

Also Idee war: in der Sub ein "setreading" mit der Antwort und dann als "out" im userdefinedcommand %Device:reading% geht zwar aber leider ist die Antwort schneller draußen als das setreading abgearbeitet wird ;)
D.h. ich bekomme immer die "letzte" Antwort, also von dem Aufruf davor ;)

Jaja, immer die Anwender mit den Sonderlocken! ;)
Aber hier traue ich mich noch nach solchen Sonderlocken zu fragen ;)
Drum musst du nun damit leben ;)
Ups schon wieder eiegentlich "OFF"...

Aber nachdem ich wohl der einzige Anwender (ohne Probleme) bin, zumindest laut Umfrage, kann ich schon mit "Sonderbehandlung" rechen, oder? ;)

Gruß und danke für das Modul, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

tiroso

Ich lass das mal einfach so stehen ;) Ich muss ja nicht noch mehr darin rumrühren.

Zu deinem Wunsch. Der ist nachvollziehbar. Hatte ich mir vor ein paar Tagen auch gedacht.
Ich habe es mir aufgeschrieben und werde mich vllt nächste Woche mal dran begeben das umzusetzen...  ;)

Sonderbehandlungen bekommt keiner  ;D . Aber da du der einzige bist der das wirklich testet habe ich auch nur die Wünsche weiter oben ^^

MadMax-FHEM

Jaja ;)

Ah, ok, wenn du auch schon drüber nachgedacht hast...

Vielen Dank schon mal!

Eilt nicht, bin ab übernächster Woche eh erst mal für 2-3 Wochen dienstl. im Ausland...
...komme daher wohl erst Mitte Feb. wieder zum Testen... :-|

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

RoBra81

#168
Hallo,

ich habe jetzt auch mal angefangen, ein bisschen mit TEERKO zu spielen und finde es bislang recht interessant. Ich habe aber mal eine Frage zur MultiAlias-Funktion: TEERKO erkennt alle Geräte mit Alias Lampe, wenn ich im sage, er solle alle Lampen schalten. Wenn ich ihm allerdings auftrage, alle Lichter zu schalten, findet er die Geräte mit Alias Licht nicht. Kann ich ihm das irgendwie beibringen oder wäre es eher dein Part?

EDIT: Schön wäre auch, wenn er mit das Licht ebenfalls alle Geräte mit Alias Licht schalten würde (z.B. Schalte das Licht in der Küche aus)...

Vielen Dank
Ronny

tiroso

Moin...
Schön das ein weiterer das testet ;)

Lad dir nochmal das Modul aus dem ersten Post, ich habs gefixt.

Schalte das Licht in der Küche aus hätte aber eigentlich funktionieren sollen...oder meinst du mit das Licht sollen mehrere Devices gesteuert werden? Das wäre nicht so wie ich es geplant hatte. Schalte alle Lichter in der Küche aus klappt ja jetzt

Gruß

RoBra81

Vielen Dank für die Anpassung, ich werde gleich mal weiter testen. Ich habe als Proof of concept mit dem "kompliziertesten" Raum begonnen und versuche nun den für mich besten Weg zu finden (vielleicht kannst du deinen Senf dazu geben :-)):

In meiner Küche habe ich fünf schaltbare Lampen:
OG.ku.LI.Besenschrank
OG.ku.LI.Kuechenschrank
OG.ku.LI.Kuechenzeile
OG.ku.LI.Kuehlschrank
OG.ku.LI.Theke

Denen habe ich in einem ersten Versuch den Room Haus, Wohnung, Obergeschoss, !Küche, ![Name] und den Alias Lampe, Licht, ![Name] (z.B. Besenschrank) gegeben. Folgende Befehle funktionieren:

Schalte den Besenschrank ein.
Schalte alle Lampen in der Küche ein.

Durch das Hinzufügen des Namens auch zum Room funktionieren auch diese Befehle:

Schalte das Licht im Besenschrank ein. (dies wird allerdings mit Ich habe das Besenschrank in der Küche eingeschaltet. beantwortet)
Schalte das Licht an der Theke ein. (ähnliche Antwort)

Natürlichsprachlich würde ich mit

Schalte das Licht in der Küche aus.

von der angesprochenen Person erwarten, dass sie alle Lichter in der Küche ausschaltet - sprich, das Licht in/im ohne konkrete Instanz meint alle vorhandenen Instanzen des Raumes...

Ich werde weiter Testen...

Ronny

hdad

Moin,

es ist nicht so das ihr alleine seit. Ich lese auch schon eine ganze Weile mit und habe dein Modul mit AMADNG und Telegram zu laufen.
Dein Modul ist für mich,der kein Programmierer ist, einfach zu handhaben. Läuft soweit sehr gut.
Eins ist mir jetzt bei der Beta aufgefallen.
Ich habe in der Küche 2 Lampen. Alias Licht und Tresen, sage ich nun

"Schalte das Licht aus und den Tresen an"

antwortet die nette Dame

"Ich habe das Licht eingeschaltet.Ich habe den Tresen eingeschaltet"

und alles geht an.Sobald ein "an" im Input genannt ist wird das "aus" ignoriert.
Das wäre mir nicht so aufgefallen wenn es in der Alpha Version richtig funktioniert hätte.

tiroso es ist schön, das du an dem Modul weiter arbeitest.

Gruß holger
FHEM auf IntelNuc; TabletUI; MAX Heizung ; div HM-Actoren ;Z-Wave; YAMAHA Musiccast WX-030 ,YSP-1600

tiroso

#172
Nabend.

@Ronny:
Die Antwort kann ich relativ leicht erklären. Du hast den Alias im TEERKOAlias mit einem Favoriten versehen. Da das Licht in der Besenkammer kein Favorit ist wird Teerko einen Favoriten für dich raussuchen. Und das ist in dem Fall dann halt der [Name]. Eine Lösung wäre den alias Licht auch als Favoriten zu Kennzeichen. Wenn der alias den du sagst kein Favorit ist sucht Teerko der Reihe nach die aliase durch bis er einen Favoriten gefunden hat. Wenn es keinen gibt wird der alias im Antwortsatz benannt den du auch verwendet hast. Ansonsten finde ich es gut wie du es testest. Benenne wie du willst und ich hoffe das das Modul zufriedenstellend arbeitet. Ich weiß nur nicht ob ich alle Fehler mit meinem Wissen aus der Welt schaffen kann.
Ich würde mir nicht anmaßen bei meinem Wissensstand von Natural Language Processing zu sprechen. Klar ich versuche mein bestes aber da habe ich keine Ahnung wie ich das in einer Satzsemantik umsetzen soll den Bezug von das Licht auf alle "Lichter" eines Raumes einzugehen. Als Workaround würde ich vorschlagen mit einer structure oder einer lightscene zu arbeiten...Ich weiß irgendwie unbefriedigend aber da muss ich gestehen habe ich keine Ahnung.

Wo wir schon beim Thema Satzsemantik sind @holger:
Du hast Recht das war in der Alpha Version mit drin. Aaaaaaber...das Schema wie ich die Sätze auswerte ließ mich in der ersten Version an meine Grenzen kommen. Ich kann Perl nicht gut genug um die Sätze richtig auszuwerten. Ich bin in der ersten Version nach dem Wort "und" vorgegangen. Das war aber mitunter einer der Gründe wieso das Modul so instabil war. Was passierte z.b. bei Schalte das Licht in 2 Minuten und 3 Sekunden an....In der ersten Version wurde im ersten Part nichts erkannt und im zweiten das etwas Zeitverzögert angeschaltet werden sollte, aber es wurde kein Device erkannt....
Es gibt auch das Problem z.B. bei dem Satz, Schalte die Deckenlampe in der Küche an und im Wohnzimmer die Stehlampe aus und wie ist der Status aller Lampen im Erdgeschoss. Welches Device gehört zu welchem Raum? Welches Device in welchem Raum wird entweder ein oder ausgeschaltet. Und die Status Abfrage hat dann alles durcheinander gebracht.

Ich wollte mit dem Modul eine Basis schaffen um Text halbwegs vernünftig auszuwerten. Dafür musste ich erstmal auf einige Funktionen verzichten. Unter anderem das erkennen und Filtern von verschieden Aktionen zu mehreren Devices in unterschiedlichen Räumen.

Aber dein Post hat mir ein Fehler aufgezeigt den ich jetzt gefixt habe.

Teerko bildet Prioritäten über den eingegebenen Befehl. Dabei erlangt "schalte aus" eine höhere Priorität als "schalte ein". Dementsprechend sollte Teerko jetzt IMMER ausschalten bei dem Satz "Schalte das Licht aus und den Tresen an".

Ich habe trotzdem wieder eine Satztrennung mit drin. Die funktioniert allerdings nicht so wie vorher. Das Satzzeichen wo ich sicher sein kann das ein neuer Satz anfängt ist der .(Punkt). Demenstprechen könnte dein Befehl folgendermaßen funktionieren "Schalte das Licht aus. Schalte den Tresen an". Auch nicht sooooo dolle aber es klappt. Keine Sorge Google über AMAD versteht das auch. Es klingt nur unglaublich komisch und du bekommst erstmal das Gelächter deiner Frau zu hören. "Schalte das Licht aus PUNKT Schalte den Tresen an".

Wenn ich weiß wie man die Satzsemantik logisch umsetzen kann ohne auf Google zurückzugreifen dann kann ich das gerne wieder reinnnehmen ^^

RoBra81

#173
Zitat von: tiroso am 15 Januar 2018, 23:37:17
Als Workaround würde ich vorschlagen mit einer structure oder einer lightscene zu arbeiten...Ich weiß irgendwie unbefriedigend aber da muss ich gestehen habe ich keine Ahnung.
Das wäre für mich nicht wirklich ein Workaround, da ich eigentlich keine Lust habe, zusätzliche Devices hierfür anzulegen...

Zitat von: tiroso am 15 Januar 2018, 23:37:17
... ich keine Ahnung wie ich das in einer Satzsemantik umsetzen soll den Bezug von das Licht auf alle "Lichter" eines Raumes einzugehen.
Ich hätte selbst keine Idee, wie ich überhaupt eine so umfangreiche Spracherkennung umsetzen würde und verstehe, dass sicherlich eine ganze Menge Arbeit und Hirnschmalz in diesem Modul steckt. Von daher nehme ich alles, was ich bekomme ;-) und kann nur meine (vermutlich viel zu einfach gedachten) Ideen äußern: Wenn ich Teerko bei meinem Setup (ich habe die Favoriten mal rausgenommen) sage

Schalte das Licht in der Küche ein

erhalte ich als Antwort

Ich finde zuviele Geräte die den Namen Licht haben obwohl du nur eins ansteuern möchtest. Nimm alle oder nenn mir einen Raum dazu. Licht gibt es häufiger. Sei genauer wenn du Licht schalten möchtest.

Teerko findet also alle Geräte, vermutet aber, dass ich nur eines schalten möchte (dem ist ja nicht so). Vielleicht kann man ihm (generell, über Attribut am Teerko-Device (DoMultiCmd) oder aber über Teerko-Attribut am jeweiligen zu schaltenden Gerät (InkludeInMultiCmd oder so)) sagen, dass er in diesem Fall nicht davon ausgehen soll, nur eines zu schalten, sondern einfach alle Schalten soll. Ähnliches würde ja bei einer Statusabfrage auch funktionieren (Statusabfragen habe ich allerdings generell noch nicht ausprobiert, daher rein hypothetisch):

Frage: Wie warm ist es im Wohnzimmer?
Antwort: Der Temperatursensor LinkeWand melde 23°C. Der Temperatursensor RechteWand meldet 24°C. (oder die Durchschnittstemperatur aller Sensoren im Wohnzimmer)

Ronny

EDIT: Das mit der Durchschnittsttemperatur hatte ich irgendwo anders gelesen, aber vielleicht wäre es trotzdem interessant, sich das Modul mal anzusehen: https://forum.fhem.de/index.php/topic,80960.0.html (ich habe es allerdings auch noch nicht probiert - scheint mir etwas mächtiger, aber schwerer konfigurierbar zu sein als deines)

ToM_ToM

Hey, wie ich sehe, geht's wieder ordentlich voran mit dem Modul :)

Leider konnte ich die Beta noch nicht testen. Ich suche aktuell noch nach einer Lösung die Spracheingabe überhaupt zu verarbeiten. Hatte es bisher mit Autovoice und Tasker gelöst.
Problem ist nur dass bei "Autovoice Continues" die ganze Zeit die Nebengeräusche des Mikros zu hören sind, welches immer das Bing als Bestätigung zurück gibt.
Wie habt ihr das denn gelöst?

PS: Warum Autovoice? Weil Autovoice auch offline funktioniert und ich nicht alles was ich spreche, an die Google oder Amazon - Cloud übertragen muss.

VG, Thomas
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

tiroso

@Ronny:
Ich werde mal sehen ob und wie ich das umsetze mit der Angabe das Licht auf mehrere Lichter bezogen. Steht jetzt aber nicht an erster Stelle ;) Aber deine Idee wie man es umsetzen könnte nehme ich mit rein.
Ich hatte in der ersten Version eine Temperaturabfrage drin. Das würde ich auch gerne wieder reinnehmen, steht also definitv auf meiner Liste.

@Thomas:
Ich habe das ganze mit AMAD von Leon hauptsächlich umgesetzt. Der Vorteil ist natürlich das ich die Antwort darauf bekomme.
Wieso machst du das nicht auch so? AutoVoice kannst du als Plugin auch in Automagic als Trigger nutzen. Wenn du den Flow von AMAD etwas modifizierst kannst du den Befehl doch super in FHEM einbringen. Und dann natürlich auch mit TEERKo auswerten.
Was Autovoice Continues betrifft habe ich leider keine Erfahrung. Aber vom Prozedere dürfte es doch das gleiche sein wie die Auswertung über Google selber?

MadMax-FHEM

Zitat von: tiroso am 16 Januar 2018, 21:11:58
Ich hatte in der ersten Version eine Temperaturabfrage drin. Das würde ich auch gerne wieder reinnehmen, steht also definitv auf meiner Liste.

Das würde ich dann über ein userdefinedcommand lösen (wollen), wenn die zurückgegebene Antwort aus der aufgerufenen Sub dann als Antwort in TEERKO landet und auch "angesagt" wird ;)

Und noch einige weitere Abfragen... :)

Aber aktuell muss ich erst mal weitere Dinge die es schon gibt umsetzen (du weißt: Vergleich Alexa/Google Home) und dann berufsbedingt eine kleine Pause einlegen :-|

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

ToM_ToM

ZitatIch habe das ganze mit AMAD von Leon hauptsächlich umgesetzt. Der Vorteil ist natürlich das ich die Antwort darauf bekomme.
Wie genau hast du das gelöst dass dein System auf ein Triggerword hört und dann die Befehle ausführt?

VG, Thomas
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

hdad

Moin,

tiroso,
(Ich weiß das gehört vielleicht nicht hierher) ;)
würdest du uns verraten wie du den Flow von AMAD im Automagic modifiziert hast.
Auf meinem TabletUI habe ich ein Button mit dem ich

"set AMADDevice activateVoiceInput "

schalte.
Im receiveVoiceCommand von der AmadBridge kommt dann das gesprochene an.
Ich muß halt immer diesen Button drücken.
Mache ich es mit Google Assistant wo Autovoice mithört kommt nichts bei AmadBridge an.


Gruß holger
FHEM auf IntelNuc; TabletUI; MAX Heizung ; div HM-Actoren ;Z-Wave; YAMAHA Musiccast WX-030 ,YSP-1600

tiroso

@Joachim: ich werde mich bemühen ^^

@Thomas: Du kannst in Teerko Triggerwords anlegen, oder......siehe Antwort an Holger

@Holger: Da habe ich das Gefühl das du dir Automagic nur wegen AMAD installiert hast kann das sein ;)
Also...Automagic führt die Flows entweder so aus das man einen Flow manuell ausführt, in einem anderen Flow aufruft (Das ist im Moment deine Variante. Durch setzen im AMAD mit activateVoiceInput ruft Leon den Flow Voice Control auf) oder wenn du die Trigger in dem Flow modifizierst (So verwende ich den Flow)

Das erste "Kästchen" im Flow Voice Control beinhaltet die Trigger die diesen Flow auslösen. Ich habe mir einen Shortcut angelegt. Somit kann ich den Flow direkt vom Homescreen aufrufen ohne in eine TabletUi, Fhem Instance zu gehen.
Des weiteren kannst du aber als Trigger auch ein Plugin (In dem Fall Autovoice) angeben. Sobald Autovoice ein Sprachbefehl erkannt hat wird dieser Flow aufgerufen und die Variablen aus Autovoice werden mit übergeben. Soweit so gut....In dem Flow wird sofort die Spracheingabe aufgerufen...Was wir ja nicht brauchen...also kannst du das ganze mit einer Bedingung umgehen. Wenn der Trigger auslöst prüfst du ob die Variablen gesetzt worden sind. Sollte dem nicht so sein wird die Spracheingabe aufgerufen...wenn allerdings schon etwas übergeben wurde kann man den Schritt auch überspringen.
Nun kommen wir noch zur Performance...Da jeder Sprachbefehl an Fhem dann übertragen wird (Zumindest mit Autovoice Continues Mode) wird Teerko auf jeden Befehl reagieren. Es wird wahrscheinlich nicht großartig ins Gewicht fallen aber in dem Modus wird wahrscheinlich alle paar Sekunden ein Voice Kommando übertragen. Wenn du die Hotkeys im Teerko einträgst wird er auch nicht drauf reagieren. Aber du kannst genauso gut in Automagic im Trigger für das Plugin weitere Einstellungen vornehmen. Ich empfehle da schon das Keyword/Keywords einzutragen. Damit sondiert schon Autovoice ob das Voice Kommando übertragen werden soll oder nicht. Zusätzlich würde ich den Parameter Precision auf 1 setzen (Default ist 5). Damit wird nur der Befehl übertragen der die größte Übereinstimmung hat. Sonst werden 5 Varianten als Array übertragen...Was in dem Fall eher kontra produktiv ist.

Ich hoffe das war verständlich...Ich habe aber zur veranschaulichung noch ein paar Screenshots...Ein hoch auf Leons AMAD ^^

Aber dann bleiben wir bei Teerko, hmm ;)