Natural Language User Interface 95_Babble.pm

Begonnen von Prof. Dr. Peter Henning, 28 Dezember 2017, 17:37:03

Vorheriges Thema - Nächstes Thema

Prof. Dr. Peter Henning

Achtung, ab sofort wird Babble per Update verteilt. Die neueste Version mit RiveScript ChatBot wurde soeben eingecheckt.

Nachdem das Thema Sprachsteuerung immer interessanter wird, habe ich aus meiner Sprachanalysefunktion ein universelles Modul als Natural Language User Interface (NLUI) gebaut.

Die erste Version einer Dokumentation findet sich im Wiki, https://wiki.fhem.de/wiki/Modul_Babble.


Achtung, beim Update wird nicht automatisch der contrib-Ordner aktualisiert. Darin befinden sich aber im Unterordner Babble die beiden RiveScript-Dateien, die für das Funktionieren des Chatbots nötig sind - also diesen Ordner ggf. manuell aktualisieren. Oder die beiden angehängten Dateien begin.rive und general.rive verwenden.


LG

pah


sash.sc

Wie kommen die Sprachbefehle ins fhem?

AMADNG? TtsMsg?

Gruß Sascha

Gesendet von meinem...... was auch immer

Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

Prof. Dr. Peter Henning

Soll unabhängig davon funktionieren. Tut es bei mir auch schon.

LG

pah

the ratman

#3
mal das ganze installieren

nach einbau und fhem restart im log:2017.12.30 19:17:16 1: PERL WARNING: Useless use of a constant ("new") in void context at ./FHEM/95_Babble.pm line 1352.
2017.12.30 19:17:16 1: stacktrace:
2017.12.30 19:17:16 1:     main::__ANON__                      called by ./FHEM/95_Babble.pm (1352)
2017.12.30 19:17:16 1:     (eval)                              called by fhem.pl (2436)
2017.12.30 19:17:16 1:     (eval)                              called by fhem.pl (2435)
2017.12.30 19:17:16 1:     main::CommandReload                 called by fhem.pl (1851)
2017.12.30 19:17:16 1:     main::LoadModule                    called by fhem.pl (1908)
2017.12.30 19:17:16 1:     main::CommandDefine                 called by fhem.pl (1168)
2017.12.30 19:17:16 1:     main::AnalyzeCommand                called by fhem.pl (1022)
2017.12.30 19:17:16 1:     main::AnalyzeCommandChain           called by ./FHEM/01_FHEMWEB.pm (2466)
2017.12.30 19:17:16 1:     main::FW_fC                         called by ./FHEM/01_FHEMWEB.pm (878)
2017.12.30 19:17:16 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (520)
2017.12.30 19:17:16 1:     main::FW_Read                       called by fhem.pl (3488)
2017.12.30 19:17:16 1:     main::CallFn                        called by fhem.pl (687)
2017.12.30 19:17:16 1: [Babble_restore] read error=Can't open babbleFILE: No such file or directory
2017.12.30 19:17:16 1: PERL WARNING: Use of uninitialized value $l in print at fhem.pl line 4862.
2017.12.30 19:17:16 1: stacktrace:
2017.12.30 19:17:16 1:     main::__ANON__                      called by fhem.pl (4862)
2017.12.30 19:17:16 1:     main::FileWrite                     called by ./FHEM/95_Babble.pm (419)
2017.12.30 19:17:16 1:     main::Babble_save                   called by ./FHEM/95_Babble.pm (252)
2017.12.30 19:17:16 1:     main::Babble_Define                 called by fhem.pl (3488)
2017.12.30 19:17:16 1:     main::CallFn                        called by fhem.pl (1930)
2017.12.30 19:17:16 1:     main::CommandDefine                 called by fhem.pl (1168)
2017.12.30 19:17:16 1:     main::AnalyzeCommand                called by fhem.pl (1022)
2017.12.30 19:17:16 1:     main::AnalyzeCommandChain           called by ./FHEM/01_FHEMWEB.pm (2466)
2017.12.30 19:17:16 1:     main::FW_fC                         called by ./FHEM/01_FHEMWEB.pm (878)
2017.12.30 19:17:16 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (520)
2017.12.30 19:17:16 1:     main::FW_Read                       called by fhem.pl (3488)
2017.12.30 19:17:16 1:     main::CallFn                        called by fhem.pl (687)
2017.12.30 19:17:16 1: [Babble_Define] data hash is initialized

dann hat man im webinterface auf höhe des z.b. floorplan links nen neuen raum.
in dem raum liegts device, darunter steht:Can't use an undefined value as an ARRAY reference at ./FHEM/95_Babble.pm line 1197.
die selbe meldung hab ich im automatisch angelegten weblink.

im device wurden keine bubbleDevices angelegt. drum fehlen mir auch die im wiki gezeigten einstellmöglichkeiten (denk ich mal).
soll ich mal selber ein device anlegen, oder soll ich gleich mal was für dich probieren?

aja ...
rennt auf nem win10pro mit debian auf ner vm. alles tagesaktuell.
→do↑p!dnʇs↓shit←

Prof. Dr. Peter Henning

OK, danke fürs testen. Der Reihe nach.

Der erste Fehler mit dem "Useless use" war ein überflüssiger String, habe ich in der obigen Datei behoben.

Das "Nichtlesenkönnen" der Datei ist ok, entsprechend wird der hash auch noch initialisiert. Dabei geht aber irgendetwas in die Hose, muss ich checken. Vlt. mal checken, welche Attribute im Babble Device gesetzt sind - bei mir sieht das z.B. so aus


attr Babble babbleArticles der die das den des dem zur
attr Babble babblePlaces Wohnzimmer
attr Babble babblePrepos von vom des der in im auf bei am
attr Babble babbleQuests wie wo wann
attr Babble babbleStatus Status Wert Wetter Zeit
attr Babble babbleTimes heute morgen übermorgen nacht
attr Babble babbleVerbParts zu auf ent wider ein an aus ab um
attr Babble babbleVerbs schalt,schalte:schalten mach,machs,mache:machen öffne:öffnen schließe,schließ:schließen
attr Babble babbleWrites sagen senden hinzufügen entfernen ändern löschen


Wenn diese Werte gesetzt sind, kann man die Spracherkennung schon mit Hilfe des Testbuttons test, auch dann, wenn noch keine Devices definiert worden sind.

LG

pah

the ratman

nicht viel anders ...Attributes:
   babbleArticles der die das den des dem zur
   babblePrepos von vom des der in im auf bei am
   babbleQuests wie wo wann
   babbleStatus Status Wert Wetter Zeit
   babbleTimes heute morgen übermorgen nacht
   babbleVerbParts zu auf ent wider ein an aus ab um
   babbleVerbs schalt,schalte:schalten
   babbleWrites sagen senden hinzufügen entfernen ändern löschen
   icon       im_bubble2

ich hab jetzt auch nen place dazu erfunden, nutzt aber auch nix.

babbledevices brauch ich ja nicht unbedingt, wenn ich keine externen instanzen hab?

der vollständigkeit halber ein list:Internals:
   CFGFN     
   CHANGED   
   NAME       babble
   NR         185
   STATE      Initialized
   TYPE       Babble
   VERSION    0.3
   DATA:
     commands   
     devcontacts
     devs       
     places     
     rooms     
     splaces   
     status     
     times     
     writes     
     command:
       :
         alarm:
           sagen:
         alarmanlage:
           :
           sagen:
         baumarktliste:
           sagen:
         das:
           :
         den:
           :
         die:
           :
         dominics_liste:
           :
         einkaufsliste:
           sagen:
         gerät:
           sagen:
         gute:
           :
           sagen:
         guten:
           :
           sagen:
         haus:
           sagen:
         haustür:
           sagen:
         licht:
           sagen:
         sage:
           :
         schalte:
           :
         sichere:
           :
         status:
           :
         wecker:
           sagen:
         wetter:
           :
           sagen:
         öffne:
           :
       an:
         mach:
           :
         schalte:
           :
       auf:
         mach:
           :
         schließe:
           :
         stelle:
           :
       aus:
         mache:
           :
         schalte:
           :
       bratheringe:
         zur:
           :
       das:
         wie:
           :
       den:
         stelle:
           :
       der:
         schalte:
           :
       die:
         stelle:
           :
       ein:
         schalte:
           :
       feuchte:
         wie:
           :
       gerät:
         sage:
           :
         wie:
           :
       im:
         status:
           :
       morgen:
         wie:
           :
       münchen:
         peters_liste:
           :
       schlafzimmer:
         status:
           :
       sitzgruppe:
         schalte:
           :
       status:
         wie:
           :
       temperatur:
         wie:
           :
       von:
         sage:
           :
         wie:
           :
       wecker:
         wie:
           :
       wert:
         stelle:
           :
         wie:
           :
       wetter:
         wie:
           :
       zu:
         schließe:
           :
     verbs:
     verbsi:
       schalten
     verbsicc:
       ARRAY(0x55aa84b6af30)
   READINGS:
     2017-12-30 19:17:16   savedate        Sat Dec 30 19:17:16 2017
     2017-12-30 19:17:16   state           Initialized
Attributes:
   babbleArticles der die das den des dem zur
   babblePlaces sofa
   babblePrepos von vom des der in im auf bei am
   babbleQuests wie wo wann
   babbleStatus Status Wert Wetter Zeit
   babbleTimes heute morgen übermorgen nacht
   babbleVerbParts zu auf ent wider ein an aus ab um
   babbleVerbs schalt,schalte:schalten mach,machs,mache:machen öffne:öffnen schließe,schließ:schließen
   babbleWrites sagen senden hinzufügen entfernen ändern löschen
   icon       im_bubble2
   room       babbleRoom
→do↑p!dnʇs↓shit←

Prof. Dr. Peter Henning

Ist gefixt, Download oben im ersten Post.

LG

pah

the ratman

#7
jo, schaut glei viel süßer aus *g*

sag, was empfielst du als lieferant für den text ?
wär übrigens lustig, gleich in babble ne anbindung an hardware und z.b. googles spracherkennung zu haben. quasi alles aus einer hand ...
→do↑p!dnʇs↓shit←

the ratman

ach guck ...
2017.12.30 21:21:42 1: logfile wurde gelöscht
2017.12.30 21:21:56 1: PERL WARNING: Use of uninitialized value $l in print at fhem.pl line 4862.
2017.12.30 21:21:56 1: eval: {Babble_Html("babble")}
2017.12.30 21:21:56 1: stacktrace:
2017.12.30 21:21:56 1:     main::__ANON__                      called by fhem.pl (4862)
2017.12.30 21:21:56 1:     main::FileWrite                     called by ./FHEM/95_Babble.pm (410)
2017.12.30 21:21:56 1:     main::Babble_save                   called by ./FHEM/95_Babble.pm (1252)
2017.12.30 21:21:56 1:     main::Babble_getplaces              called by ./FHEM/95_Babble.pm (1439)
2017.12.30 21:21:56 1:     main::Babble_Html                   called by (eval 2932) (1)
2017.12.30 21:21:56 1:     (eval)                              called by fhem.pl (1074)
2017.12.30 21:21:56 1:     main::AnalyzePerlCommand            called by ./FHEM/98_weblink.pm (99)
2017.12.30 21:21:56 1:     main::weblink_FwFn                  called by ./FHEM/01_FHEMWEB.pm (1848)
2017.12.30 21:21:56 1:     main::FW_showRoom                   called by ./FHEM/01_FHEMWEB.pm (1031)
2017.12.30 21:21:56 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (520)
2017.12.30 21:21:56 1:     main::FW_Read                       called by fhem.pl (3488)
2017.12.30 21:21:56 1:     main::CallFn                        called by fhem.pl (687)
2017.12.30 21:21:56 1: PERL WARNING: Use of uninitialized value $l in print at fhem.pl line 4862.
2017.12.30 21:21:56 1: eval: {Babble_Html("babble")}
2017.12.30 21:21:56 1: stacktrace:
2017.12.30 21:21:56 1:     main::__ANON__                      called by fhem.pl (4862)
2017.12.30 21:21:56 1:     main::FileWrite                     called by ./FHEM/95_Babble.pm (410)
2017.12.30 21:21:56 1:     main::Babble_save                   called by ./FHEM/95_Babble.pm (1386)
2017.12.30 21:21:56 1:     main::Babble_getwords               called by ./FHEM/95_Babble.pm (1453)
2017.12.30 21:21:56 1:     main::Babble_Html                   called by (eval 2932) (1)
2017.12.30 21:21:56 1:     (eval)                              called by fhem.pl (1074)
2017.12.30 21:21:56 1:     main::AnalyzePerlCommand            called by ./FHEM/98_weblink.pm (99)
2017.12.30 21:21:56 1:     main::weblink_FwFn                  called by ./FHEM/01_FHEMWEB.pm (1848)
2017.12.30 21:21:56 1:     main::FW_showRoom                   called by ./FHEM/01_FHEMWEB.pm (1031)
2017.12.30 21:21:56 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (520)
2017.12.30 21:21:56 1:     main::FW_Read                       called by fhem.pl (3488)
2017.12.30 21:21:56 1:     main::CallFn                        called by fhem.pl (687)
2017.12.30 21:21:56 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/95_Babble.pm line 1506.
2017.12.30 21:21:56 1: eval: {Babble_Html("babble")}
2017.12.30 21:21:56 1: stacktrace:
2017.12.30 21:21:56 1:     main::__ANON__                      called by ./FHEM/95_Babble.pm (1506)
2017.12.30 21:21:56 1:     main::Babble_Html                   called by (eval 2932) (1)
2017.12.30 21:21:56 1:     (eval)                              called by fhem.pl (1074)
2017.12.30 21:21:56 1:     main::AnalyzePerlCommand            called by ./FHEM/98_weblink.pm (99)
2017.12.30 21:21:56 1:     main::weblink_FwFn                  called by ./FHEM/01_FHEMWEB.pm (1848)
2017.12.30 21:21:56 1:     main::FW_showRoom                   called by ./FHEM/01_FHEMWEB.pm (1031)
2017.12.30 21:21:56 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (520)
2017.12.30 21:21:56 1:     main::FW_Read                       called by fhem.pl (3488)
2017.12.30 21:21:56 1:     main::CallFn                        called by fhem.pl (687)

kommt bei jedem aufruf des weblinks
→do↑p!dnʇs↓shit←

Prof. Dr. Peter Henning

#9
Harmlos, passiert nur nur solange keine Babble-Devices definiert sind. Werde ich im nächsten Release abfangen.

Für die Anbindung: Es gibt schon eine ganze Menge Frontends, die diese Anbindung machen. Würde ich gerne offen halten.

Ich benutze dafür wandhängende Tablets und ein upgecyceltes Smartphone, siehe https://forum.fhem.de/index.php/topic,81863.0.html


LG

pah

the ratman

#10
nebenher ... deinen wecker halt ich für genial. schaut ja fast nach designerstück aus ...

aber du verwirrst mich grad ... wir haben ein modul, dass sprache über z.b. google als text raus gibt?
wo hab ich das den wieder übersehen? kenn nur amad, aber ich werd wohl bald keine tablets an der wand haben. ansagen über (w)lan-boxen, tv, ... und als erkennungs-hw für befehle schwebt mir matrix voice, als modul zur "übersetzung" dazu [...bitte hier einfügen...] vor. wer braucht dann noch displays und touch, wenn das mal geht? der onkel will hier erpelsteiß-verhältnisse *g*.

btw - offtopic zwar, aber guck mal das "andere ende" an, dass da kommen wird *sabber*
https://google.github.io/tacotron/publications/tacotron2/
→do↑p!dnʇs↓shit←

MadMax-FHEM

Zitat von: the ratman am 30 Dezember 2017, 22:19:22
aber du verwirrst mich grad ... wir haben ein modul, dass sprache über z.b. google als text raus gibt?
wo hab ich das den wieder übersehen?

Dazu braucht es kein Modul, du kannst von Google Home per IFTTT (z.B.) und WebHook direkt Babble aufrufen (denke ich bzw. werde ich mal so versuchen / komme leider erst am Mo dazu)...

Aktuell mache ich das mit TEERKO so...

Bin schon gespannt, wenn ich endlich loslegen kann...

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)

Ma_Bo

#12
Wäre es möglich, hier etwas zu implementieren, was mir noch nen Antworttext zurück gibt, ich bräuchte ein Reading, indem dann der Antworttext steht.
Genial wäre auch, wenn ich mehrere Antworttexte definiere und das Modul sich zufällig davon einen raussucht.

Z.B. sage ich:

"Schalte die Lampe im Wohnzimmer ein"

dann soll es evtl verschiedene Antworten geben

"ok, ich schalte die lampe im Wohnzimmer ein"
"die lampe im wohnzimmer wird eingeschaltet"
usw.

######Edit 1
Ist es auch möglich dann Zustände von Fhem-Devices abzufragen und diese dann in den Antworttext auszugeben?

Z.B. würde ich fragen wollen:
"wie warm ist es im wohnzimmer"

dann würde im Antworttext (den es ja noch nicht gibt) stehen:
"im wohnzimmer sind es x Grad"
"es sind x Grad im wohnzimmer"
"die temperatur im wohnzimmer beträgt x Grad"



Grüße Marcel
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

Phill

Zitat von: Ma_Bo am 31 Dezember 2017, 01:00:36
Wäre es möglich, hier etwas zu implementieren, was mir noch nen Antworttext zurück gibt, ich bräuchte ein Reading, indem dann der Antworttext steht.
Genial wäre auch, wenn ich mehrere Antworttexte definiere und das Modul sich zufällig davon einen raussucht.
Hey mal Werbung in eigener Sache...  ;) https://forum.fhem.de/index.php/topic,80960.0.html
Talk2Fhem kann genau das...

Grüße
Homebrew 1-Wire / HomeMatic Mix - Cubietruck mit FHEM als Server - Raspberry PI 3 als Informationsanzeige im MagicMirror Stil - Raspberry Pi 1 als Klingelanlage - VDR

Mein Modul: Talk2Fhem - Mein Tipp: https://forum.fhem.de/index.php/topic,82442.0.html

Ma_Bo

Zitat von: Phill am 31 Dezember 2017, 01:25:28
Hey mal Werbung in eigener Sache...  ;) https://forum.fhem.de/index.php/topic,80960.0.html
Talk2Fhem kann genau das...

Grüße

Schon gesehen und dort lese ich fleissig mit, werde ich auch testen, aber das Modul hier ist schön zum zusammenklicken...  ::)
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.