Natural Language User Interface 95_Babble.pm

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

Vorheriges Thema - Nächstes Thema

Phiolin

Dann hätte ich gerne auch noch den hier:

diff 95_Babble.pm.orig 95_Babble.pm
186c186
<                          "babbleIds babblePreSubs babbleDevices babblePlaces babbleNotPlaces babbleVerbs babbleVerbParts babblePrepos babbleQuests babbleArticles babbleStatus babbleWrites babbleTimes";
---
>                          "babbleIds babblePreSubs babbleDevices babbleOkWord babblePlaces babbleNotPlaces babbleVerbs babbleVerbParts babblePrepos babbleQuests babbleArticles babbleStatus babbleWrites babbleTimes";
1176c1176,1183
<         $func =~ s/\$HELP/OhKee/g;
---
>         $func =~ s/\$DEV/$device/g;
>         $func =~ s/\$VALUE/$value/g;
>         for(my $i=0;$i<int(@parms);$i++){
>           $func =~ s/\$PARM$i/$parms[$i]/g;
>         }
>         my $okWord = AttrVal($name,"babbleOkWord","OhKee");
>         $func =~ s/\$HELP/$okWord/g;
>
1326c1333,1339
<       $func =~ s/\$HELP/OhKee/g;
---
>       $func =~ s/\$DEV/$device/g;
>       $func =~ s/\$VALUE/$value/g;
>       for(my $i=0;$i<int(@parms);$i++){
>         $func =~ s/\$PARM$i/$parms[$i]/g;
>       }
>       my $okWord = AttrVal($name,"babbleOkWord","OhKee");
>       $func =~ s/\$HELP/$okWord/g;
2297a2311,2312
>             <li><a name="babbleOkWord"><code>attr &lt;name&gt; babbleOkWord <text></code></a>
>                 <br />Word or phrase to be used as confirmation when a command is executed that has no other response. Default: OhKee</li>


Damit funktioniert die VALUE/DEV/PARM Ersetzung dann auch wenn die Standardantwort "OhKee" verwendet wird.

Außerdem führt es ein neues Attribut "babbleOkWord" ein, mit dem man das standardmäßige "OhKee" durch was eigenes ersetzen kann. :)

Phiolin

Ich habe übrigens ein paar Probleme, Umlaute als Trigger zum Rivescript Bot zu bekommen.

Wenn ich auf der Console über "rivescript --utf8 /opt/fhem/rivescript" den Interpreter starte, und den dann mit z.B. "mir ist heiß" füttere, kommt aus dem Rivescript die richtige Antwort.
Schicke ich aber aus Babble über das Eingabefeld (oder auch über Babble_DoIt) den gleichen String, kommt stattdessen die Standardantwort für "Keine Ahnung was du von mir willst".
Ich suche jetzt schon eine Weile im Skript herum, woran das liegen könnte, bin aber noch nicht fündig geworden. Die Strings scheinen mir bis zum Aufruf von $rs->reply noch korrekt zu sein.
Jetzt könnte ich natürlich einfach auf dem Weg die Umlaute durch ss/oe/ae/ue ersetzen, aber so richtig schön ist das ja nicht, vor allem da der Rivescript Interpreter damit ja scheinbar eigentlich klar kommt. Irgendeine Idee?

Prof. Dr. Peter Henning

#122
Das OK-Wort habe ich heute nachmittag herausgeworfen, das wird ein anderer Mechanismus.

Das Umlautproblem ist noch nicht ganz gelöst - denn obwohl ich den RiveScript-Interpreter mit
$rs = new RiveScript(utf8=>1);
starte, hat er Probleme mit einem UTF-8 codierten Umlaut.

Das hat mit dem Einlesen der *.rive-Dateien und deren Encoding zu tun.

Wenn man nämlich im Babble-Modul mit dem Codefragment
$rs->stream (q~
    + hello böt
    - Hello, hümän.
~);

eine triviale Antwort einbaue, antwortet der ChatBot auf "hello böt" ganz richtig mit "hello hümän".

In meinen Rivescript-Dateien habe ich wenigstens in Perl-Routinen die Ausgabe von Umlauten hinbekommen, indem ich diese explizit codiert habe (also z.B. ä=\xc3\xa4).


LG

pah


Edit: Ich habe das Problem zumindest mit einem Workaround gelöst. Mein Editor ist ein ziemlich schlaues Teil der aber die *.rive-Dateien (noch) nicht als UTF8 abspeichert. Wenn man die Datei general.rive aus dem contrib-Ordner Babble mittels
recode latin-1..utf-8 general.rive
explizit umcodiert, machen die Umlaute keine Probleme mehr.





Phiolin

#123
Bot Antworten mit Umlauten funktionieren bei mir interessanterweise. Nur für die Trigger-Phrasen klappt es nicht.

+ mir ist (warm|heiß|heiss)
- Wenn dir <star1> ist, kann ich die Heizung ausstellen. Oder du öffnest ein Fenster.

+ *
- Leider kann ich damit nichts anfangen.


Das ö in der Antwort kommt bei mir  durch.
Der ,,heiß" Trigger klappt jedoch nicht. Siehe Anhang.

Mit dem OK Wort bin ich auch nicht ganz glücklich, wenn sich da eine bessere Lösung findet, gerne.
Das Wort wird ja auch dann mitgeschickt, wenn ein ausgeführtes Kommando selber schon einen Output geliefert hat.
Beispiel im 2. Bild. Mein OhKee Wort hab ich hier auf ,,Erledigt" geändert.
Schön wäre, wenn man das unterdrücken könnte, wenn ein Kommando schon selber Output erzeugt. Wie auch immer man das feststellen oder festlegen kann...

Ansonsten finde ich das insgesamt mit dem angeflanschten TelegramBot schon ganz gut, Potential ist auf jeden Fall da. Am Ende hätte ich natürlich auch gerne eine einfache Methode zur Spracheingabe, bin mir aber nicht sicher, wie ich das am besten umsetzen kann.

Prof. Dr. Peter Henning

Ich habe eine neue Version eingecheckt, bei der man für jeden Befehl konfigurieren kann, ob er bestätigt wird oder nicht.

Das Umlautproblem ist gelöst: Man benötigt wirklich einen Editor, der die UTF8-Codierung erzwingt. Als Hilfestellung sind dafür in der Datei general.rive die entsprechenden binären Sequenzen für die kleinen Umlaute vermerkt.

LG

pah

meddie

Hallo zusammen,

ich wollte mal das Babble testen, stecke aber voll in den Anfangsschwierigkeiten, ich habe per Update 95_Babble und anschließend FHEM restart und define Babble Babble das Babble Moduil installiert bekommen. Aber wenn ich nun ein Test mit Hallo machen möchte bekomme ich folgende Fehlermeldung, mit de rich nicht viel Anfangen kann.

fhem?detail=Babble_weblink line 162:
Uncaught ReferenceError: babble_testit is not defined


Ich kann auch keine Verben anlegen oder den vorhanden editieren da bekomme ich dann sowas:

fhem?detail=Babble_weblink line 170:
Uncaught ReferenceError: babble_modverb is not defined


Könnt Ihr mir ein TTipp geben, wasich falsch gemacht habe?
Vielen Dank
Gruß Eddie

Eisix

Hallo,

habe gerade mal testen wollen, kriege aber einen error wenn ich Aktionen zusammen klicke und dann sichern will.

VERSION 1.24


babble.js line 290:
Uncaught TypeError: Cannot read property 'checked' of undefined



Wo liegt mein Fehler?

Gruß
Eisix




Eisix

Bin etwas weiter gekommen. (siehe screenshot)
Die zwei unteren konnte ich sicheren, danach kommt die Fehlermeldung.

Gruß
Eisix


Prof. Dr. Peter Henning

@meddie: Sieht so aus, als ob babble.js nicht installiert ist.

@Eisix: Mein Fehler - es fehlte bei neuen Zeilen die Checkbox. Ist gefixt (beide Dateien) und eingecheckt.

LG

pah

ekur

@pah

Ich hatte das JSON getestet und nochmals neuinstalliert, dazu habe ich ein paar andere Sachen in FHEM getestet bei dem JSON verwendet wird, da funktioniert es wunderbar.

Ich habe inzwischen aber etwas interessantes festgestellt:

Ich habe auf meinem Raspberry zwei FHEM Instanzen laufen um Prozesse die lange dauern in einem zweiten FHEM (Datensammler) auszuführen und mir meine Steuerungsinstanz nicht zu blockieren und im Module zu testen. Werte werden per FHEM2FHEM übergeben, in diesem Datensammler habe ich auch eine Erstinstallation von Babble gemacht um dieses zu testen. Erst zu einem späteren Zeitpunkt habe ich das Modul dort gelöscht und in meiner Steuerungsinstanz installiert.

Wenn ich jetzt in der Datensammlerinstanz wieder das  Babblemodul installiere werden dort angelegte devices in der BabbleFILE gespeichert. Die Übergabe an JSON funktioniert also. Ich kann jetzt mit der einen FHEM Instanz ein Babblefile mit Werten füllen, wenn ich in der normalen FHEM Instanz speichere wird wieder eine leere Datei erzeugt. Da beide FHEM Instanzen auf den gleichen Stand der Module zugreifen und auch auf die gleichen Bibliotheken ist mir das ein bisschen ein Rätsel.

Leider ist es nicht so dass die eine Instanz die andere sperrt, denn wenn ich die Datenloggerinstanz ausschalte kann ich immer noch keine gefüllte Datei generieren.

Irgendeine Ahnung woran das liegen könnte? Welche Dateien muss ich manuell löschen damit ich sicher alle Dateien von Babble entfernt habe?, nur die 95_Babble.pm und die BabbleFILE oder auch noch andere?
FHEM 5.8 auf Intel NUC, Visualisierung TabletUI auf Lenovo Tab10, Datenlogging MySQL
CUL_HM  HM-CC-RT-DN, HM-RC, HM-LC-BL1-FM, HM-PBI-4-FM, HM-SEC-SD, HM-SEC-SCo
ZWave
OWDevice:DS1420,DS18B20 an Intel NUC

refi

Hallo,
wie muss ich in der Version 1.24 das Perl-Unterprogramm Babble_DoIt aufrufen?
Mit Babble_DoIt("Babble","<zu analysierender Satz>") bekomme ich nun ein "[Babble_Normalize] Input: ... ".
Der Befehl wird analysiert aber nicht ausgeführt.
Gruß René
Raspberry Pi3: Duofern, Z-Wave, EnOcean

Prof. Dr. Peter Henning

Ups, da habe ich doch glatt einen Fehler eingebaut ...

Habe die Korrektur schon eingecheckt - der Einfachheit halber hier direkt zum download.

LG

pah

refi

Raspberry Pi3: Duofern, Z-Wave, EnOcean

Eisix


Prof. Dr. Peter Henning

Tipp: Macht echt Spaß, Babble über einen Telegram-Client zu bedienen.

LG

pah