Natural Language User Interface 95_Babble.pm

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

Vorheriges Thema - Nächstes Thema

the ratman

das stimmt so nicht ganz - kein raum heißt "wettervorhersage" ich hab nur nen raum "wetter". das device "wetter_proplanta" hat den alias "wettervorhersage". das darf also nicht sein?

wie komm ich den an die daten im svn?
vom text her scheint im 1. beitrag mal ein link oder anhang gewesen zu sein, aber nu find ich nix ...
→do↑p!dnʇs↓shit←

Prof. Dr. Peter Henning

Das Problem ist, dass Babble-Devicenamen mit "irgendwas_ziffer" als Erweiterungsdevice zu "irgendwas" behandelt werden (um zu ermöglichen, das mehrere physikalisch unterschiedliche FHEM-Devices in der Sprachsteuerung als "irgendwas" angesprochen werden).

Das ist einerseits ganz nett, denn auf diese Weise kann man verschiedene Leuchten mit dem Babble-Devicenamen "Licht_1", "Licht_2" usw. versehen und die tatsächliche Auswahl bei der Analyse des Satzes "Mach das Licht im XY-Zimmer an" der Ortsbezeichnung "XY-Zimmer" überlassen.

Andererseits schafft das hier das Problem, dass "wetter_proplanta" als Erweiterungsdevice des generischen Babble-Device "wetter" behandelt wird - und das stimmt eben mit dem Raum "wetter" überein. Das muss also vermieden werden, z.B. ganz einfach dadurch dass dem FHEM-Device "wetter_proplanta" ein anderer Name gegeben wird. Allerdings kann man dann nicht mehr fragen "wie wird morgen das wetter" ? Also würde ich tatsächlich vorschlagen, den Raumnamen "Wetter" durch etwas Anderes zu ersetzen, und dem Proplanta-Dingens den Babble-Devicenamen "wetter" zu geben.

Ich habe gerade ein Update eingecheckt, das die oben angemoserte Benutzung von "defined(@parms)" vermeidet.

Die beiden rive-Dateien stehen hier: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/Babble

LG

pah


the ratman

#152
so, jetzt hab ichs mal auf 0 gesetzt.
babble-device wetter gelöscht, im contrib alles reingeworfen mit passenden rechten, auch alles sonstige babble-artige gekilled.
nachdem im svn 95_Basbble.pm von 17:17 heute is, geh ich davon aus, das neueste zu haben.
define babble babble macht aber immer noch2018.02.28 08:14:45 1: logfile wurde von hand gelöscht
2018.02.28 10:18:17 1: PERL WARNING: Subroutine Babble_Initialize redefined at ./FHEM/95_Babble.pm line 178.
2018.02.28 10:18:17 1: PERL WARNING: Subroutine Babble_Define redefined at ./FHEM/95_Babble.pm line 220.
2018.02.28 10:18:17 1: PERL WARNING: Subroutine Babble_Undef redefined at ./FHEM/95_Babble.pm line 285.
2018.02.28 10:18:17 1: PERL WARNING: Subroutine Babble_Attr redefined at ./FHEM/95_Babble.pm line 307.
2018.02.28 10:18:17 1: PERL WARNING: Subroutine Babble_CreateEntry redefined at ./FHEM/95_Babble.pm line 330.
2018.02.28 10:18:17 1: PERL WARNING: Subroutine Babble_Set redefined at ./FHEM/95_Babble.pm line 369.
2018.02.28 10:18:17 1: PERL WARNING: Subroutine Babble_Get redefined at ./FHEM/95_Babble.pm line 411.
2018.02.28 10:18:17 1: PERL WARNING: Subroutine Babble_save redefined at ./FHEM/95_Babble.pm line 440.
2018.02.28 10:18:17 1: PERL WARNING: Subroutine Babble_savename redefined at ./FHEM/95_Babble.pm line 460.
2018.02.28 10:18:17 1: PERL WARNING: Subroutine Babble_restore redefined at ./FHEM/95_Babble.pm line 474.
2018.02.28 10:18:17 1: PERL WARNING: Subroutine Babble_Test redefined at ./FHEM/95_Babble.pm line 506.
2018.02.28 10:18:17 1: PERL WARNING: Subroutine Babble_Normalize redefined at ./FHEM/95_Babble.pm line 617.
2018.02.28 10:18:17 1: PERL WARNING: Subroutine Babble_timecorrector redefined at ./FHEM/95_Babble.pm line 1003.
2018.02.28 10:18:17 1: PERL WARNING: Subroutine Babble_createRive redefined at ./FHEM/95_Babble.pm line 1036.
2018.02.28 10:18:17 1: PERL WARNING: Subroutine Babble_getcsrf redefined at ./FHEM/95_Babble.pm line 1061.
2018.02.28 10:18:17 1: reload: Error:Modul 95_Babble deactivated:
Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at ./FHEM/95_Babble.pm line 1103.

2018.02.28 10:18:17 0: Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at ./FHEM/95_Babble.pm line 1103.



dumme idee:
vielleicht könnte man nicht auf einfach nur "wetter" bei deiner leutchen-bespaßung setzen, sondern tatsächlich was mit "_" verlangen bei "multibenennung"?
dann würde sowohl "wetter" als auch "wetterdödel" kein problem sein und babble erst auf babblenamen wie "wetter_xxx" abfahren, wenn ich das richtig verstehe.
→do↑p!dnʇs↓shit←

Hauswart

Hallo pah,
habe heute mit dem aktuellsten Update folgenden Fehler:
define Babble Babble
Erhalte ich im Log:
Zitat
2018.02.28 10:52:55 1: reload: Error:Modul 95_Babble deactivated:
Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at ./FHEM/95_Babble.pm line 1103.

2018.02.28 10:52:55 0: Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at ./FHEM/95_Babble.pm line 1103.
1. Installation:
KNX, Tasmota (KNX), Sonos, Unifi

2. Installation:
HM-CFG-USB, Unifi (, SIGNALduino 868, MySensors, SIGNALduino 433)

Prof. Dr. Peter Henning

In der heute um 7:17 Uhr aktuell eingecheckten Version ist das behoben, siehe: https://svn.fhem.de/trac/browser/trunk/fhem/FHEM/95_Babble.pm

LG

pah

Hauswart

Super danke.
Zitat von: Prof. Dr. Peter Henning am 24 Februar 2018, 18:15:39
Tipp: Macht echt Spaß, Babble über einen Telegram-Client zu bedienen.
@Phiolin @pah möchte einer von euch mal seine Beispiel Definition von der Telegram Integration preisgeben?
1. Installation:
KNX, Tasmota (KNX), Sonos, Unifi

2. Installation:
HM-CFG-USB, Unifi (, SIGNALduino 868, MySensors, SIGNALduino 433)

the ratman

hmmm ... mein log is gemein - sagt die ganze zeit folgendesfhem
nothing to do...

fhemabfall
nothing to do...
und was es zu nem define sagt, steht weiter oben.
bin a bissi ratlos ...

ich frag halt nochmal: in welche richtung würdest mich stoßen wegen der meldungen? hab ja leider keinen schimmer woher das kommen könnt, fals ich "schuld" bin.
→do↑p!dnʇs↓shit←

Hauswart

Pah seine Version von heute morgen mit den fix wird noch nicht über das Update verteilt. Hast du die Datei manuell herunterladen und neu geladen?
1. Installation:
KNX, Tasmota (KNX), Sonos, Unifi

2. Installation:
HM-CFG-USB, Unifi (, SIGNALduino 868, MySensors, SIGNALduino 433)

the ratman

#158
aso, nö - thx für den hinweis.
dachte svn = aktuell, überhaupt, wenns vor 8 uhr war.

nachtrag:
babble aus svn, restart ...
nö, bleibt bei exakt der selben log-vermüllung *g*
hinzu kommt, um der langeweile entgegen zu wirken, in rauhen mengen zeug wie z.b.:
2018.02.28 13:50:13 0: syntax error at ./FHEM/95_Babble.pm line 8, near "<"
Unknown regexp modifier "/t" at ./FHEM/95_Babble.pm line 9, at end of line
Unknown regexp modifier "/t" at ./FHEM/95_Babble.pm line 9, at end of line
Unknown regexp modifier "/e" at ./FHEM/95_Babble.pm line 9, at end of line
syntax error at ./FHEM/95_Babble.pm line 15, near "-->"
syntax error at ./FHEM/95_Babble.pm line 34, near "$(".trac-autofocus""
syntax error at ./FHEM/95_Babble.pm line 35, near "$(".trac-target-new""
syntax error at ./FHEM/95_Babble.pm line 36, near ") {"
syntax error at ./FHEM/95_Babble.pm line 37, near "$(".trac-disable-on-submit""
syntax error at ./FHEM/95_Babble.pm line 40, near ""text/javascript" src"
./FHEM/95_Babble.pm has too many errors.
ich hoff, das is ned mein fehler - hab das ding einfach mit save file aus dem svn gestohlen ...
→do↑p!dnʇs↓shit←

Prof. Dr. Peter Henning

Zitatmein fehler
Aber doch. Das sichert nämlich die HTML-Datei, nicht die Perl-Datei.

LG

pah

nils_

Zitat von: the ratman am 28 Februar 2018, 13:46:51
ich hoff, das is ned mein fehler - hab das ding einfach mit save file aus dem svn gestohlen ...

wie pah schon sagte: doch!


scroll ganz runter, und dann rechts-klick auf "Ursprüngliches Format" und dann "save as"
viele Wege in FHEM es gibt!

the ratman

oh ja !
da hab ich ja wiedermal einen beweis meiner geistigen fähigkeiten geliefert ...
wer noch was zu lachen will: die rive scripts hatte ich korrekt gesaugt. wer will, der darf nun lachen.

jetzt nur mehr kleinigkeiten. beim restart kam...
PERL WARNING: RiveScript::Warning: loadDirectory failed: ./rivescript is not a directory!
...
und beim aufruf des babble-rooms kommt2018.02.28 15:28:15 1: PERL WARNING: Use of uninitialized value $l in print at fhem.pl line 4925.
2018.02.28 15:28:15 1: eval: {Babble_Html("babble")}
2018.02.28 15:28:15 1: stacktrace:
2018.02.28 15:28:15 1:     main::__ANON__                      called by fhem.pl (4925)
2018.02.28 15:28:15 1:     main::FileWrite                     called by ./FHEM/95_Babble.pm (449)
2018.02.28 15:28:15 1:     main::Babble_save                   called by ./FHEM/95_Babble.pm (1705)
2018.02.28 15:28:15 1:     main::Babble_getplaces              called by ./FHEM/95_Babble.pm (1905)
2018.02.28 15:28:15 1:     main::Babble_Html                   called by (eval 5551) (1)
2018.02.28 15:28:15 1:     (eval)                              called by fhem.pl (1079)
2018.02.28 15:28:15 1:     main::AnalyzePerlCommand            called by ./FHEM/98_weblink.pm (99)
2018.02.28 15:28:15 1:     main::weblink_FwFn                  called by ./FHEM/01_FHEMWEB.pm (1896)
2018.02.28 15:28:15 1:     main::FW_showRoom                   called by ./FHEM/01_FHEMWEB.pm (1067)
2018.02.28 15:28:15 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (537)
2018.02.28 15:28:15 1:     main::FW_Read                       called by fhem.pl (3528)
2018.02.28 15:28:15 1:     main::CallFn                        called by fhem.pl (690)
2018.02.28 15:28:15 1: [Babble_save]
2018.02.28 15:28:15 1: PERL WARNING: Use of uninitialized value $l in print at fhem.pl line 4925.
2018.02.28 15:28:15 1: eval: {Babble_Html("babble")}
2018.02.28 15:28:15 1: stacktrace:
2018.02.28 15:28:15 1:     main::__ANON__                      called by fhem.pl (4925)
2018.02.28 15:28:15 1:     main::FileWrite                     called by ./FHEM/95_Babble.pm (449)
2018.02.28 15:28:15 1:     main::Babble_save                   called by ./FHEM/95_Babble.pm (1848)
2018.02.28 15:28:15 1:     main::Babble_getwords               called by ./FHEM/95_Babble.pm (1921)
2018.02.28 15:28:15 1:     main::Babble_Html                   called by (eval 5551) (1)
2018.02.28 15:28:15 1:     (eval)                              called by fhem.pl (1079)
2018.02.28 15:28:15 1:     main::AnalyzePerlCommand            called by ./FHEM/98_weblink.pm (99)
2018.02.28 15:28:15 1:     main::weblink_FwFn                  called by ./FHEM/01_FHEMWEB.pm (1896)
2018.02.28 15:28:15 1:     main::FW_showRoom                   called by ./FHEM/01_FHEMWEB.pm (1067)
2018.02.28 15:28:15 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (537)
2018.02.28 15:28:15 1:     main::FW_Read                       called by fhem.pl (3528)
2018.02.28 15:28:15 1:     main::CallFn                        called by fhem.pl (690)
2018.02.28 15:28:15 1: [Babble_save]
2018.02.28 15:28:15 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/95_Babble.pm line 1979.
2018.02.28 15:28:15 1: eval: {Babble_Html("babble")}
2018.02.28 15:28:15 1: stacktrace:
2018.02.28 15:28:15 1:     main::__ANON__                      called by ./FHEM/95_Babble.pm (1979)
2018.02.28 15:28:15 1:     main::Babble_Html                   called by (eval 5551) (1)
2018.02.28 15:28:15 1:     (eval)                              called by fhem.pl (1079)
2018.02.28 15:28:15 1:     main::AnalyzePerlCommand            called by ./FHEM/98_weblink.pm (99)
2018.02.28 15:28:15 1:     main::weblink_FwFn                  called by ./FHEM/01_FHEMWEB.pm (1896)
2018.02.28 15:28:15 1:     main::FW_showRoom                   called by ./FHEM/01_FHEMWEB.pm (1067)
2018.02.28 15:28:15 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (537)
2018.02.28 15:28:15 1:     main::FW_Read                       called by fhem.pl (3528)
2018.02.28 15:28:15 1:     main::CallFn                        called by fhem.pl (690)
2018.02.28 15:28:15 1: PERL WARNING: Use of uninitialized value $l in print at fhem.pl line 4925.
2018.02.28 15:28:15 1: eval: {Babble_Html("babble")}
2018.02.28 15:28:15 1: stacktrace:
2018.02.28 15:28:15 1:     main::__ANON__                      called by fhem.pl (4925)
2018.02.28 15:28:15 1:     main::FileWrite                     called by ./FHEM/95_Babble.pm (449)
2018.02.28 15:28:15 1:     main::Babble_save                   called by ./FHEM/95_Babble.pm (1705)
2018.02.28 15:28:15 1:     main::Babble_getplaces              called by ./FHEM/95_Babble.pm (1905)
2018.02.28 15:28:15 1:     main::Babble_Html                   called by (eval 5555) (1)
2018.02.28 15:28:15 1:     (eval)                              called by fhem.pl (1079)
2018.02.28 15:28:15 1:     main::AnalyzePerlCommand            called by ./FHEM/98_weblink.pm (99)
2018.02.28 15:28:15 1:     main::weblink_FwFn                  called by ./FHEM/01_FHEMWEB.pm (1896)
2018.02.28 15:28:15 1:     main::FW_showRoom                   called by ./FHEM/01_FHEMWEB.pm (1067)
2018.02.28 15:28:15 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (537)
2018.02.28 15:28:15 1:     main::FW_Read                       called by fhem.pl (3528)
2018.02.28 15:28:15 1:     main::CallFn                        called by fhem.pl (690)
2018.02.28 15:28:15 1: [Babble_save]
2018.02.28 15:28:15 1: PERL WARNING: Use of uninitialized value $l in print at fhem.pl line 4925.
2018.02.28 15:28:15 1: eval: {Babble_Html("babble")}
2018.02.28 15:28:15 1: stacktrace:
2018.02.28 15:28:15 1:     main::__ANON__                      called by fhem.pl (4925)
2018.02.28 15:28:15 1:     main::FileWrite                     called by ./FHEM/95_Babble.pm (449)
2018.02.28 15:28:15 1:     main::Babble_save                   called by ./FHEM/95_Babble.pm (1848)
2018.02.28 15:28:15 1:     main::Babble_getwords               called by ./FHEM/95_Babble.pm (1921)
2018.02.28 15:28:15 1:     main::Babble_Html                   called by (eval 5555) (1)
2018.02.28 15:28:15 1:     (eval)                              called by fhem.pl (1079)
2018.02.28 15:28:15 1:     main::AnalyzePerlCommand            called by ./FHEM/98_weblink.pm (99)
2018.02.28 15:28:15 1:     main::weblink_FwFn                  called by ./FHEM/01_FHEMWEB.pm (1896)
2018.02.28 15:28:15 1:     main::FW_showRoom                   called by ./FHEM/01_FHEMWEB.pm (1067)
2018.02.28 15:28:15 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (537)
2018.02.28 15:28:15 1:     main::FW_Read                       called by fhem.pl (3528)
2018.02.28 15:28:15 1:     main::CallFn                        called by fhem.pl (690)
2018.02.28 15:28:15 1: [Babble_save]
2018.02.28 15:28:15 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/95_Babble.pm line 1979.
2018.02.28 15:28:15 1: eval: {Babble_Html("babble")}
2018.02.28 15:28:15 1: stacktrace:
2018.02.28 15:28:15 1:     main::__ANON__                      called by ./FHEM/95_Babble.pm (1979)
2018.02.28 15:28:15 1:     main::Babble_Html                   called by (eval 5555) (1)
2018.02.28 15:28:15 1:     (eval)                              called by fhem.pl (1079)
2018.02.28 15:28:15 1:     main::AnalyzePerlCommand            called by ./FHEM/98_weblink.pm (99)
2018.02.28 15:28:15 1:     main::weblink_FwFn                  called by ./FHEM/01_FHEMWEB.pm (1896)
2018.02.28 15:28:15 1:     main::FW_showRoom                   called by ./FHEM/01_FHEMWEB.pm (1067)
2018.02.28 15:28:15 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (537)
2018.02.28 15:28:15 1:     main::FW_Read                       called by fhem.pl (3528)
2018.02.28 15:28:15 1:     main::CallFn                        called by fhem.pl (690)
→do↑p!dnʇs↓shit←

Prof. Dr. Peter Henning

Zitatmöchte einer von euch mal seine Beispiel Definition von der Telegram Integration preisgeben

In Auszügen - ist ziemlich komplexer Code


sub telegramRecognition($){
    my ($event)        = @_;
my $querypeer      = ReadingsVal("TelegramBot", "queryPeer", 0);
    my $msgpeer        = ReadingsVal("TelegramBot", "msgPeer", 0);
my $queryReplyMsgId= ReadingsVal("TelegramBot", "queryReplyMsgId", 0);
my $MsgId          = ReadingsVal("TelegramBot", "MsgId", 0);
    my $menuMsgId      = ReadingsVal("TelegramBot", "menuMsgId", $queryReplyMsgId);
my $calldata       = ReadingsVal("TelegramBot", "callData", "");
my $tg;
my $dp;
my $dm;
my $res;
my $tit;
my $cmd;
my $click=0;
my ($cb1,$cb2,$cb1raw);
my $person = "";

.....
       fhem("attr TelegramBot queryAnswerText Gerne zu Diensten!");
     

Der nachfolgende Teil nimmt eine Antwort vom Chatbot entgegen (event=botreply) und sendet diese an den Telegram-Empfänger als Nachricht mit erzwungener Antwort


    #-- receiving reply from bot to telegram
    if( $event =~ /botreply\:\s(.*)/ ){
      $cb1 = $1;
      fhem("set TelegramBot msgForceReply \@$querypeer $cb1");
      fhem("setreading TelegramBot prevCmd chatbot $cb1");


Dieser Teil sendet das anfängliche Keyboard

     
    #-- click event from inline keyboard
    }elsif( $event =~ /queryData\:\s(.*)/ ){
      ($cb1,$cb2) = split(/ /,$1,2);
      #Log 1,"[telegramRecognition] queryData $cb1";
      #-- Level 0/1 => new menuMsgId after start of Bot
      if( $cb1 =~ /(PostIt)|(Steuerung)|(ChatBot)/ ){
        $menuMsgId = $queryReplyMsgId;
        fhem("setreading TelegramBot menuMsgId $menuMsgId");
      }
     
      #-- Level 0
      if( $cb1 eq "Hauptmenü"){
          fhem("set TelegramBot queryInline \@$querypeer (PostIt) (Steuerung) (ChatBot) Hauptmenü");   
     
 

Dieser Teil empfängt die Message, die beim forced replay vom Telegram client gesendet wurde. Wenn die vorige Message an den client vom Chatbot stammte, wird geprüft, ob der Nachrichteninhalt "Stop" lautet. Wenn ja => Hauptmenü, wenn nein, leite den Nachrichteninhalt an den Chatbot weiter.

    #-- Process line from forced reply
    }elsif( $event =~ /msgReplyMsgId\:\s+(\d*)/ ){
      my $mn = $1;
      my $mo = ReadingsVal("TelegramBot", "prevMsgId", 0)+1;
      my $prev = ReadingsVal("TelegramBot","prevCmd","none");
     
    ....
       
      #-- ChatBot
      }elsif( $prev =~ /chatbot/ ){
        my $text = ReadingsVal("TelegramBot","msgText","");
        if( $text =~ /(s|S)top.*/ ){
           InternalTimer(gettimeofday()+1, "telegramRecognition","queryData: Hauptmenü",0);
        }else{
          fhem194Cmd("{Babble_DoIt('Babble','".$text."','Telegram')}");
        }
      }
    }
  }


LG

pah

Prof. Dr. Peter Henning

ZitatRiveScript::Warning: loadDirectory failed: ./rivescript is not a directory!

Na, da steht es doch. Die RiveScript-Dateien müssen in /opt/fhem/rivescript und werden vom Modul mit dem Präfix ./rivescript (steht für /opt/fhem/rivescript) geladen.


LG

pah

Prof. Dr. Peter Henning

#164
Achtung: Babble enthält jetzt schon ein neues Attribut dnuFile = (Do not understand-File). Wird dieses auf einen Dateinamen gesetzt, schreibt Babble alle nicht verstandenen Sätze dort hinein.

So als eine Art RoadMap: Als Nächstes bekommt der ChatBot von Babble die Fähigkeit, bestimmte Dinge direkt an FHEM weiterzuleiten - ohne Umweg über die semantische Analyse von Babble. Etwa, ob ein bestimmtes Gerät vorhanden ist (Der Name soll ggf. buchstabierbar sein). Das Ziel ist dann, mit Hilfe des ChatBot ein neues Babble-Device anzulegen...

LG

pah