Hauptmenü

GoogleTalk

Begonnen von kossmann, 17 Januar 2013, 17:00:56

Vorheriges Thema - Nächstes Thema

Tobias

wie kossmann, hat nach dem "pairen" sofort funktioniert. Danke!!
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Tobias

da das obige Kommando funktioniert, habe ich ein notify erstellt:
define testnotify notify HC.* {
Log 3, "Test GoogleTalk durch Änderung Heating_Control <%NAME>: %EVENT";
GoogleTalk("Änderung Heating_Control <%NAME>: %EVENT","meinemail@gmail.com");
Log 3, "Ende GoogleTalk";
}

mit einem "trigger testnotify" wird dieses notify ausgelöst, die beien Logausgaben landen auch im Log, aber per GoogleTalk wird nichts versendet.... Das Kommando wieder allein im FHEM-Commandfield funktioniert (message kommt beim Handy an).....
Ideen was da kaputt ist??
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

kossmann

Selbst genutzt habe ich das noch gar nicht, da ich grundsätzlich noch keine Event-Überwachung realisiert habe. Aber kann es sein, dass die Semikolons im Perl-Block escaped werden müssen, also ;; statt ; ???

kossmann

Wichtig: Keine doppelten, sondern einfache Anführungszeichen verwenden!!!

Ansonsten sieht es wie folgt aus ...

{ GoogleTalk("Test", "meine@email.de") }
Global symbol "@email" requires explicit package name at (eval 5373) line 1.

... statt ...

{ GoogleTalk('Test', 'meine@email.de') }
0

Sollte man doppelte Anführungszeichen verwenden, muss das @-Zeichen escaped werden, also meine\@email.de

kossmann

Du hast aber leider trotzdem Recht... im notify kommt bei mir auch nichts an, obwohl es direkt als Befehl weiterhin funktioniert.

kossmann

Ich bin dran, das @-Zeichen ist weiterhin ein Problem.

Wenn man den Code um eine Log-Ausgabe erweitert ...

 my ($message, $recipient) = @_;

  Log (3, "GoogleTalk \"" . $message . "\" to " . $recipient);

  use Net::XMPP;

... erscheint bei einem Test im Logfile ...

3: GoogleTalk "Test" to EMAILWohnzimmer_RolloSofaDOMAIN

Das @-Zeichen wird durch das notify-Device ersetzt.

Man kann es sich ganz einfach machen, und die Empfänger-Adresse in der Prozedur hart codieren, oder aber man muss das @-Zeichen noch irgendwie escapen - da frage ich mich gerade nur wie.

kossmann

Hier der neue Code mit festem Empfänger:
##########################################################
# GoogleTalk
# Nachricht mittles GoogleTalk auf ein Android-Smartphone

sub GoogleTalk($) {

  my ($message, $recipient) = @_;

  Log (3, "GoogleTalk \"" . $message . "\"");

  use Net::XMPP;
  my $conn = Net::XMPP::Client->new;

  # individuelles Google-Konto zum Versenden
  my $username = '<Google-Username>';
  my $domain = 'gmail.com';
  my $password = '<Google-Passwort>';

  # individuelles Google-Konto zum Empfangen
  my $recipient = '<Google-Username>@gmail.com';

  my $resource = 'FHEM';

  my $status = $conn->Connect(
    hostname => 'talk.google.com',
    port => 5222,
    componentname => $domain,
    connectiontype => 'tcpip',
    tls => 1,
  );

  die "Connection failed: $!" unless defined $status;
  my ($res,$msg) = $conn->AuthSend(
    username => $username,
    password => $password,
    resource => $resource,
  );

  die "Auth failed ", defined $msg ? $msg : '', " $!" unless defined $res and $res eq 'ok';
  $conn->MessageSend(
    to => $recipient,
    resource => $resource,
    subject => 'message via ' . $resource,
    type => 'chat',
    body => $message,
  );

}

Der Aufruf in FHEM erfolgt mittels Perl-Code, z.B.:

{ GoogleTalk('Warnung: Batterie am Sensor x schwach.') }
Achtet darauf, dass ganz oben auch ein $$ durch $ ersetzt wurde, also nicht nur die zwei Zeilen ergänzen ;-)

kossmann

Wie ich es hasse, nicht nachträglich editieren zu können... eine Zeile ist noch falsch:

my ($message, $recipient) = @_;
wird zu

my ($message) = @_;

-Tob-

Woher bekomme ich Net::XMPP, für meine Fritzbox 7270? ;)

Die Sache ist echt klasse, danke für den Code!!

kossmann

Die Frage kann ich dir leider nicht beantworten. Vermutlich gibt es keine Build-Umgebung (make u.a.) auf der Kiste, oder? Ansonsten könntest du den Weg über CPAN gehen.

-Tob-

Ja genau make geht nicht. Leider habe ich CPAN auch nicht zum laufen gebracht. Ich kenne mich in Perl überhaupt nicht aus und habe einfach mal alles benötigte (wie Net::XMPP, XML::Stream etc) runtergeladen und die .pm dateien auf die Fritzbox in die entsprechenden Ordner kopiert. Die Fehler das XMPP und XML Stream nicht gefunden wurden, kommen nun zumindest schon mal nicht mehr. ;)

Jetzt kommt nur noch diese Fehlermeldung:
Attempt to reload Net/XMPP.pm aborted.
Compilation failed in require at ./FHEM/99_myUtils.pm line 20.
BEGIN failed--compilation aborted at ./FHEM/99_myUtils.pm line 20.

Leider steht nicht dabei wieso es abgebrochen wird. Falls da noch jemand eine Idee hat, bin ich über eine kurze Antwort sehr dankbar. :)

kossmann

Bei mir funktionierte es gestern plötzlich auch nicht mehr. In Web-Chat konnte ich dann sehen, dass die beiden Konten sich nicht mehr "kennen" und man sich einfach keine Nachrichten mehr schicken durfte.

=> Ich habe die beiden Konten jetzt gegenseitig als Kontakt angelegt und es funktioniert wieder.

Ein Google-Chat scheint nur eine gewisse Zeit "offen" zu sein, danach ist es den alten Chat-Partnern nicht mehr erlaubt, den anderen anzuschreiben - es sei denn, man steht in dessen Kontaktliste.

Turbokid

hi,
finde das super. Würde das gerne auf meiner FB7390 ans laufen bekommen, aber wie lädt man die benötigten PAckte nach? bin bis jetzt leider 0 Fit in Linux.
Habe mir die als fehlend angezeigten pl Dateien besort und habe nun das Problem, dass ihm ein Objet fehlt. Nur CopyPaste reicht wohl nicht :D

kossmann

Da muss ich leider auch passen, mit den Möglichkeiten der FritzBox kenne ich mich nicht aus. Ich kann nebenbei nur berichten, dass meine FHEM-Installation mich jeden Tag (momentan zu Testzwecken) per GoogleTalk mit o.a. Code kontaktiert. Wenn die beiden Konten sich gegenseitig als Kontakt hinterlegt haben und der Empfänger durchgehend "verfügbar" ist, funktioniert es perfekt.

-Tob-

Falls du eine Antwort findest Turbokid, poste es bitte hier. ich bin auch schon auf der Suche wie ich perl Paket auf der Fritzbox nach installieren kann!! Oder hat doch noch jemand eine idee?

Danke