msgDialog: Instant Messaging als FHEM Interface

Begonnen von igami, 30 September 2017, 15:09:01

Vorheriges Thema - Nächstes Thema

ErzGabriel

Nein, ist nicht die aktuellste Version. Ist Version 5.6 mit ein paar PM-Dateien geupdatet.

binford6000

Hi, habe meinen ersten kleinen lauffähigen Dialog gebaut. Nur wird das "Menü" - also "Einschalten, "Ausschalten" und "abbrechen" nur als normale Textnachricht angezeigt. Bei Eingabe von "Einschalten", "Ausschalten" oder "abbrechen" wird der Dialog korrekt ausgeführt und landet danach wieder im Hauptmenü. Woran kann das liegen?

{"Flur":{
  "message": [
    "(Einschalten)",
    "(Ausschalten)",
    "(abbrechen)"
  ],
  "Einschalten":{
  "commands": "set fl_sw_1 on",
  "message":[
    "(%me%) ",
    "Die Lampe im Flur wurde eingeschaltet."
  ]
  },
  "Ausschalten":{
  "commands": "set fl_sw_1 off",
  "message":[
    "(%me%) ",
    "Die Lampe im Flur wurde ausgeschaltet."
  ]
  }
}
}

VG Sebastian

igami

ParseParams ist noch nicht sooo alt, da ist dann ein Update fällig.


Zu einem Keyboard Gehört auch immer eine  normale Nachricht.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

ErzGabriel

Schade, dann kann ich es nicht nutzen, weil ein Update mache ich nicht.
Beim letzten Versuch des Updates auf die aktuelle Version lief meine Ha_bridge nicht mehr und ich habe sie auch nicht mehr zum laufen bekommen.
Danke für Deine Hilfe.

igami

Du könntest in fhem.pl die sub updaten

sub parseParams($;$$);


sub
parseParams($;$$)
{
  my($cmd, $separator, $joiner) = @_;
  $separator = ' ' if(!$separator);
  $joiner = $separator if(!$joiner); # needed if separator is a regexp
  my(@a, %h);

  my @params;
  if( ref($cmd) eq 'ARRAY' ) {
    @params = @{$cmd};
  } else {
    @params = split($separator, $cmd);
  }

  while (@params) {
    my $param = shift(@params);
    next if($param eq "");
    my ($key, $value) = split( '=', $param, 2 );

    if( !defined( $value ) ) {
      $value = $key;
      $key = undef;

    # the key can not start with a { -> it must be a perl expression # vim:}
    } elsif( $key =~ m/^\s*{/ ) { # for vim: }
      $value = $param;
      $key = undef;
    }

    #collect all parts until the closing ' or "
    while( $param && $value =~ m/^('|")/ && $value !~ m/$1$/ ) {
      my $next = shift(@params);
      last if( !defined($next) );
      $value .= $joiner . $next;
    }
    #remove matching ' or " from the start and end
    if( $value =~ m/^('|")/ && $value =~ m/$1$/ ) {
      $value =~ s/^.(.*).$/$1/;
    }

    #collect all parts until opening { and closing } are matched
    if( $value =~ m/^\s*{/ ) { # } for match
      my $count = 0;
      for my $i (0..length($value)-1) {
        my $c = substr($value, $i, 1);
        ++$count if( $c eq '{' );
        --$count if( $c eq '}' );
      }

      while( $param && $count != 0 ) {
        my $next = shift(@params);
        last if( !defined($next) );
        $value .= $joiner . $next;

        for my $i (0..length($next)-1) {
          my $c = substr($next, $i, 1);
          ++$count if( $c eq '{' );
          --$count if( $c eq '}' );
        }
      }
    }

    if( defined($key) ) {
      $h{$key} = $value;
    } else {
      push @a, $value;
    }

  }
  return(\@a, \%h);
}
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

ErzGabriel


igami

Zitat von: binford6000 am 02 Oktober 2017, 19:58:24
Hi, habe meinen ersten kleinen lauffähigen Dialog gebaut. Nur wird das "Menü" - also "Einschalten, "Ausschalten" und "abbrechen" nur als normale Textnachricht angezeigt. Bei Eingabe von "Einschalten", "Ausschalten" oder "abbrechen" wird der Dialog korrekt ausgeführt und landet danach wieder im Hauptmenü. Woran kann das liegen?

{"Flur":{
  "message": [
    "(Einschalten)",
    "(Ausschalten)",
    "(abbrechen)"
  ],
  "Einschalten":{
  "commands": "set fl_sw_1 on",
  "message":[
    "(%me%) ",
    "Die Lampe im Flur wurde eingeschaltet."
  ]
  },
  "Ausschalten":{
  "commands": "set fl_sw_1 off",
  "message":[
    "(%me%) ",
    "Die Lampe im Flur wurde ausgeschaltet."
  ]
  }
}
}

VG Sebastian
Du könntest für fl_sw_1 auch noch einen Platzhalter, z.B. %actor%, ersetzen, dann ist es nachher einfacher wenn man den Dialog für andere Räume kopierst ;)
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

binford6000

ZitatDu könntest für fl_sw_1 auch noch einen Platzhalter, z.B. %actor%, ersetzen, dann ist es nachher einfacher wenn man den Dialog für andere Räume kopierst ;)
Hab ich schon gesehen, aber eins nach dem anderen...  ;) Die bedingte Anzeige steht auch auf dem ToDo:
"{return('(Einschalten) ') if(ReadingsVal('%controlUnit%', 'state', '') eq off')}",
ZitatZu einem Keyboard Gehört auch immer eine  normale Nachricht.
Hab jetzt eine normale Nachricht dazugeschrieben und schwupps funktionierts  :)
{"Flur":{
  "message": [
    "(Einschalten) ",
    "(Ausschalten) ",
    "(abbrechen) ",
    "Bitte auswählen:"
  ],

Danke und noch einen schönen Feiertag!

ErzGabriel

Ich bräuchte nochmals Hilfe, bin zu blöde den Fehler zu finden.
Wollte als Test erstmal den Waschmaschinen Dialog anlegen.
define Waschmaschine_Dialog msgDialog {}
Klappt ohne Probleme.

Füge ich dann den Code in die def ein, kommt folgendes beim speichern:
Usage: define <name> msgDialog {JSON}

illegal backslash escape sequence in string, at character offset 714 (before "\\) ",\n        "Das...") at ./FHEM/76_msgDialog.pm line 85.


Und da will mir nicht in den Kopf warum, habe mir den Thread mittlerweile mehrmals durch gelesen aber ich sehe meinen Fehler nicht.
Habe die Zeile:
attr myMsgConfig evalSpecials me=kanaan\
TelegramBot=TelegramBot

mit meinen Daten angepasst.

binford6000

attr myMsgConfig evalSpecials me=kanaan\
Hast Du auch den Backslash entfernt? Da bin ich auch drübergestolpert...
Sieht bei mir zB. so aus:
me=Q
TelegramBot=fhemBot

VG Sebastian

igami

Zitat von: ErzGabriel am 03 Oktober 2017, 11:57:16
Habe die Zeile:
attr myMsgConfig evalSpecials me=kanaan\
TelegramBot=TelegramBot

mit meinen Daten angepasst.
Sind ja auch zwei Zeilen und der \ steht in der Raw definition für den Zeilenumbruch ;)
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

ErzGabriel

Alles klar, gleiche Stelle gefallen, der Backslash.  ::)

Danke euch.

ErzGabriel

Hi.
Leute, ich stell mich zu dämlich an. Ich habe die ersten Dialoge definiert aber kriege vom Bot keine Antwort.
In myMsgConfig:
evalSpecials me=Marcus
TelegramBot=Jarvis_RPibot


In Residents rr_Marcus
msgContactPush Jarvis:@Jarvis_RPibot

Zum testen habe ich den Dialog Waschmaschine übernommen. Schicke ich jetzt per Telegram an den Bot: Waschmaschine, wird der Text in Fhem angezeigt aber vom Bot kommt keine Antwort.
Ich habe jetzt auch sämtliche Kombinationen ausprobiert, die mir einfallen, ich wüsste nicht mehr, wo jetzt noch was falsch ist.
Sorry, aber ich bräuchte nochmal Eure Hilfe.

igami

Zitat von: ErzGabriel am 03 Oktober 2017, 17:12:44
Hi.
Leute, ich stell mich zu dämlich an. Ich habe die ersten Dialoge definiert aber kriege vom Bot keine Antwort.
In myMsgConfig:
evalSpecials me=Marcus
TelegramBot=Jarvis_RPibot


In Residents rr_Marcus
msgContactPush Jarvis:@Jarvis_RPibot

Zum testen habe ich den Dialog Waschmaschine übernommen. Schicke ich jetzt per Telegram an den Bot: Waschmaschine, wird der Text in Fhem angezeigt aber vom Bot kommt keine Antwort.
Ich habe jetzt auch sämtliche Kombinationen ausprobiert, die mir einfallen, ich wüsste nicht mehr, wo jetzt noch was falsch ist.
Sorry, aber ich bräuchte nochmal Eure Hilfe.
das msgContactPush Attribut ist falsch definiert.
Es muss sein

msgContactPush Jarvis_RPibot:@<PeerId>

Dann sollte im rr_Marcus auch ein neues Reading auftauchen in dem deine Nachricht steht.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

ErzGabriel

Habe es jetzt mit Jarvis_RPibot und Jarvis probiert, keines bringt den gewünschten Erfolg.
Die me Zeile im Bot, sieht wie folgt aus:
me 428936987:Jarvis:@Jarvis_RPibot

Vermute, das ich da noch was falsch mache.