FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: kossmann am 17 Januar 2013, 17:00:56

Titel: GoogleTalk
Beitrag von: kossmann am 17 Januar 2013, 17:00:56
Hallo zusammen,

hier eine Prozedur für die 99_myUtils.pm, welche Push-Nachrichten mittels GoogleTalk auf das Smartphone bringt.

##########################################################
# GoogleTalk
# Nachricht mittles GoogleTalk auf ein Android-Smartphone

sub GoogleTalk($$) {

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

  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>';

  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.','meinname@gmail.com') }
FHEM benötigt ein eigenes Google-Konto, welches natürlich individuell eingetragen werden muss. Der Empfänger sollte sich sinnvollerweise im Status 'Verfügbar' befinden.
Titel: Aw: GoogleTalk
Beitrag von: korbinian am 17 Januar 2013, 17:34:01
Moin Kossmann,

Hatte vorher einen wrapper für ein python script, werd gleich mal umstellen.
Nur muss ich noch Net::XMPP unter Centos 6 minimal installiert bekommen, cpan mag nicht so recht.

Code frei von SchnickSchnack, Danke auf jedenfall.
Titel: Aw: GoogleTalk
Beitrag von: kossmann am 17 Januar 2013, 17:37:09
Cpan.org war heute Mittag "hacked by ...", also besser aufpassen oder nach RPMs suchen
Titel: Aw: GoogleTalk
Beitrag von: korbinian am 17 Januar 2013, 18:17:37
Hätte man besser mal ein paar euro für Sicherheit ausgegeben... ;)

CentOS:
yum install perl-Net-XMPP

Debian: sudo apt-get install libnet-xmpp-perl

Windows: keine Ahnung, evtl über cpan

Grüße
Titel: Aw: GoogleTalk
Beitrag von: ChrisW am 17 Januar 2013, 19:22:16
hm habs nachinstalliert aber keine Funktion. Auch im Log steht nix :(

Hat es schon jemand anderes ausprobiert?
Titel: Aw: GoogleTalk
Beitrag von: kossmann am 17 Januar 2013, 19:27:53
Ich habe den Code um viel BlaBla gekürzt, aber es hat weiterhin funktioniert.

- Hast du unterschiedliche Google-Konten zum Senden und Empfangen verwendet? Ich vermute (!), dass dies notwendig ist.

- Bis du mit dem Empfangs-Konto "verfügbar"?

- Sind die beiden Konten jeweils in der anderen GoogleTalk-Kontaktliste (und wurde eine entsprechende Test-Nachricht über die Weboberfläche verschickt)?
Titel: Aw: GoogleTalk
Beitrag von: ChrisW am 17 Januar 2013, 19:33:04
ja beide verbunden und über web kann ich hin / herschreiben vll muss ich PC mal neu starten
Titel: Aw: GoogleTalk
Beitrag von: kossmann am 17 Januar 2013, 19:36:17
Dann habe ich vielleicht zu viel heraus gekürzt, wundere mich dann aber, dass es bei mir funktioniert. Das ganze ist von hier (//blogs.perl.org/users/marco_fontani/2010/03/google-talk-with-perl.html) mehr oder weniger übernommen. Probier´ mal aus, ob der obere Block wieder rein muss.

Ich hatte es mit zwei GoolgeApp-Konten in der selben Domain probiert (fhem@meinedomain.de (fhem@meinedomain.de) -> ich@meinedomain.de (ich@meinedomain.de)), vielleicht ist für echte Google-Konten etwas mehr Code notwendig.
Titel: Aw: GoogleTalk
Beitrag von: ChrisW am 17 Januar 2013, 19:42:15
hm muss ich mal testen. Aber komisch das es nirgends ne Fehlermeldung gibt :(
Benutzername ist XXXX ohne das @gmail.com oder ? Dafür ist ja Domain da ?
Titel: Aw: GoogleTalk
Beitrag von: kossmann am 17 Januar 2013, 19:44:33
Ja, wenn deine GMail-Adresse hansdampf@gmail.com (hansdampf@gmail.com) ist, ist $username=hansdampf und $domain=gmail.com, bei GoogleApps-Konten wird $domain entsprechend anders gesetzt.

Bei mir funktioniert es übrigens noch ;-)
Titel: Aw: GoogleTalk
Beitrag von: ChrisW am 17 Januar 2013, 19:45:49
jo also hab ich da alles richtig gemacht.  Kannst du da keine Log abfrage ins Perl script packen ? Nichtmal in der Console sehe ich etwas
Titel: Aw: GoogleTalk
Beitrag von: kossmann am 17 Januar 2013, 19:49:37
Ich kann mir das morgen noch mal genauer ansehen, aber wie gesagt: Das Skript basiert grundsätzlich nicht auf meinem Hirnschmalz, sondern ist aus dem Link kopiert, gekürzt und angepasst.
Titel: Aw: GoogleTalk
Beitrag von: ChrisW am 17 Januar 2013, 19:53:05
okay ich warte einfach mal vielleicht probiert es in der Zeit noch jemand anderes aus. Bin leider kein Perl Experte.
Titel: Aw: GoogleTalk
Beitrag von: rtv am 17 Januar 2013, 20:54:44
Ich hab' auch nur wenig hilfreiches Feedback:
- Mit gmail Account (und appspezifischem Passwort) kein Fehler, Anmeldung gelingt, keine Nachrichten.
- mit gapps Account (für FHEM) an gmail Account kam die erste Nachricht an aber keine weiteren.
Titel: Aw: GoogleTalk
Beitrag von: kossmann am 18 Januar 2013, 09:16:16
Ich habe mir soeben zwei GMail-Konten zum testen erstellt, diese erst mal im Online-Chat miteinander "bekannt" gemacht und erste Test-Nachrichten hin und her geschrieben, was natürlich funktioniert hat.

In o.a. Prozedur habe ich anschießend das erste Test-Konto definiert (username, domain (gmail.com), password) und mich mit dem zweiten im Büro (natürlich andere IP-Adresse als zu Hause) im Browser angemeldet.

Ein { GoogleTalk('Test','test...2@gmail.com' ('test...2@gmail.com')) } kommt sofort an, womit die Prozedur in meinen Augen funktioniert.
Titel: Aw: GoogleTalk
Beitrag von: Tobias am 23 Januar 2013, 08:41:01
wie kossmann, hat nach dem "pairen" sofort funktioniert. Danke!!
Titel: Aw: GoogleTalk
Beitrag von: Tobias am 23 Januar 2013, 14:08:20
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??
Titel: Aw: GoogleTalk
Beitrag von: kossmann am 23 Januar 2013, 14:14:30
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 ; ???
Titel: Aw: GoogleTalk
Beitrag von: kossmann am 23 Januar 2013, 14:24:02
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
Titel: Aw: GoogleTalk
Beitrag von: kossmann am 23 Januar 2013, 15:17:31
Du hast aber leider trotzdem Recht... im notify kommt bei mir auch nichts an, obwohl es direkt als Befehl weiterhin funktioniert.
Titel: Aw: GoogleTalk
Beitrag von: kossmann am 23 Januar 2013, 15:50:14
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.
Titel: Aw: GoogleTalk
Beitrag von: kossmann am 23 Januar 2013, 15:59:39
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 ;-)
Titel: Aw: GoogleTalk
Beitrag von: kossmann am 23 Januar 2013, 16:01:22
Wie ich es hasse, nicht nachträglich editieren zu können... eine Zeile ist noch falsch:

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

my ($message) = @_;
Titel: Aw: GoogleTalk
Beitrag von: -Tob- am 24 Januar 2013, 16:03:19
Woher bekomme ich Net::XMPP, für meine Fritzbox 7270? ;)

Die Sache ist echt klasse, danke für den Code!!
Titel: Aw: GoogleTalk
Beitrag von: kossmann am 24 Januar 2013, 16:36:45
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 (//perl.about.com/od/packagesmodules/qt/perlcpan.htm) gehen.
Titel: Aw: GoogleTalk
Beitrag von: -Tob- am 25 Januar 2013, 16:43:21
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. :)
Titel: Aw: GoogleTalk
Beitrag von: kossmann am 29 Januar 2013, 12:05:15
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.
Titel: Aw: GoogleTalk
Beitrag von: Turbokid am 05 Februar 2013, 20:17:39
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
Titel: Aw: GoogleTalk
Beitrag von: kossmann am 05 Februar 2013, 20:24:20
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.
Titel: Aw: GoogleTalk
Beitrag von: -Tob- am 05 Februar 2013, 21:36:48
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
Titel: Aw: GoogleTalk
Beitrag von: Tobias am 18 Februar 2013, 10:11:01
falls ich es noch nicht geschrieben hatte, ich habe es im svn in contrib als 99_Utils_GoogleTalk.pm eingecheckt
Titel: Aw: GoogleTalk
Beitrag von: f.reddy am 12 Mai 2013, 14:09:17
Find ich auch ganz interessant - eben nochmal Google bemüht. Wie ich das verstehe müsste man das Perl Modul mit Freetz bauen und könnte das dann verwenden.
Mangels Zeit für die ganze Einarbeitung und Zweitbox die ich mal schnell umflashen könnte für mich leider nicht möglich.
Wenn das irgendwer kann wäre klasse.

Gruß
Titel: Aw: GoogleTalk
Beitrag von: Tobias am 31 Mai 2013, 12:06:55
funktioniert bei Euch noch GoogleTalk?
Ich habe es seit längerem nicht mehr benutzt. Wenn ich jetzt eine Message absetzen möchte hängt mein gesamtes FHEM.
Titel: Aw: GoogleTalk
Beitrag von: f.reddy am 04 Juni 2013, 22:28:29
Jepp - hier durchgehend im Einsatz. Läuft nicht 100% zuverlässig (hin und wieder verschluckts mal eine Nachricht) - jedoch kann man von 90% Erfolg oder mehr ausgehen.
Titel: Aw: GoogleTalk
Beitrag von: febus am 09 Juni 2013, 13:20:22
Hi, ich kriege immer ein "Auth failed" und komme nicht weiter. Leider keine Einträge im Log.
Habe es von einem gmail Konto mit und ohne eigener Domain versucht.

  # individuelles Google-Konto zum Versenden
  my $username = 'user.name';
  my $domain = 'gmail.com';
  my $password = 'mypassword';

  # individuelles Google-Konto zum Empfangen
  my $recipient = 'myName@mydomain.de' ('myName@mydomain.de');

Ich nutze ein RPi für FHEM hinter einer Fritzbox. Kann das irgendwie noch an Portfreigaben liegen?

Gruß,
Marc
Titel: Aw: GoogleTalk
Beitrag von: kossmann am 10 Juni 2013, 09:24:44
Portfreigaben werden hier nicht benötigt. Aber hast du vielleicht die 2-Wege-Authentifizierung für dein (Absender-) Google-Konto aktiviert? In diesem Falls müsstest du hier ein eigenes Anwendungspasswort vergeben und nutzen.
Titel: Aw: GoogleTalk
Beitrag von: febus am 10 Juni 2013, 14:12:53
Habe ich gerade nochmal überprüft: 2-Wege-Auth ist deaktiviert.
Ich versuche von einem gmail account (email@googlemail.com (email@googlemail.com)) an einen google-app account (email@myName.de (email@myName.de)) zu schicken.
Habe im Code als Domain gmail.com und googlemail.com ausprobiert. Benutzername ist der Teil der E-Mail vor dem "@", richtig? Passwort stimmt auch...

Hmmmm.
Titel: Aw: GoogleTalk
Beitrag von: kossmann am 10 Juni 2013, 14:20:33
VON gmail account (email@googlemail.com (email@googlemail.com))

my $username = 'email';
my $domain = 'googlemail.com';
my $password = '<das zugehörige Passwort>';

AN google-app account (email@myName.de (email@myName.de))

my $recipient = 'email@myname.de';

... du solltest es also eigentlich richtig gemacht haben.

Da GoogleTalk ja mittlerweile zu Hangouts gehört... hast du mal geprüft, ob die Accounts sich in Hangouts untereinander noch Mitteilungen schicken können?
Titel: Aw: GoogleTalk
Beitrag von: febus am 10 Juni 2013, 14:28:27
Ja, Nachrichten zwischen den beiden Accounts funktionieren via Browser oder Handy.
Versuche später mal einen neuen Account zum Senden anzulegen. Vielleicht ist da noch irgendwas faul.
Ansonsten bin ich ratlos.
Danke für Deine Hilfe!
Titel: Aw: GoogleTalk
Beitrag von: kossmann am 10 Juni 2013, 14:33:03
Sollte an dem Sende-Account nichts wichtiges/sensibles hängen (eMails, Kontakte, ...), könntest du mir diesen inkl. temp. geändertem Passwort auch per PM schicken und ich probiere es von meinem Server mal.
Titel: Aw: GoogleTalk
Beitrag von: febus am 10 Juni 2013, 21:12:19
Kann es sein, dass Google mit der Umstellung auf Hangouts XMPP kappt?
Siehe hier.... (//linuxundich.de/de/ubuntu/umstieg-von-google-talk-auf-hangouts-kappt-verbindung-zu-jabberxmpp/)
und ich deswegen keine Verbindung hinkriege?
Titel: Aw: GoogleTalk
Beitrag von: kossmann am 11 Juni 2013, 09:07:50
Ja, als ich dies vor einigen Wochen gelesen habe, dachte ich auch, dass dies hier nicht mehr funktioniert. Was mich jedoch wundert: Bei mir funktioniert o.a. Code noch und FHEM kann mir Nachrichten per Hangouts auf´s Smartphone schicken. Dazu gibt es jedoch die Anmerkung: Es hat vorher schon per GoogleTalk funktioniert. Vielleicht hat Google noch nicht alle XMPP-Schnittstellen geschlossen, sondern baut diese nur für neue Hangouts nicht auf - dies wird aber ein Geheimnis von Google bleiben.

Daher nun die Frage: Bin ich der einzige, bei dem es noch funktioniert? Ich nutze übrigens 2 Google-Apps-Konten zur Kommunikation und hier (//news.ycombinator.com/item?id=5714557) steht ggf. auch der Grund, warum es bei mir noch funktioniert.
Titel: Aw: GoogleTalk
Beitrag von: f.reddy am 11 Juni 2013, 13:16:04
Hier ist auch noch alles gut. Habe für FHEM ein eigenes Konto registriert bevor Hangouts kam. Da log ich mich nie ein und stell auch nix um.
Das läuft bisher noch wie immer zu Hangouts auf Handy und Tablet...
Titel: Antw:GoogleTalk
Beitrag von: abraxas678 am 16 Oktober 2013, 13:33:40
Hallo,

ich habe GTalk auf meiner Fritzbox 7390 nie zum laufen gebracht, jedoch eine sehr zuverlässige Lösung gefunden, evt. interessiert es jemand:

in einem notify wird folgende Adresse aufgerufen:

GetHttpFile("MEINSERVER.com", "/fhem/mobilealert.php?alert=Wohnzimmerfenster%%20ist%%20offen")

Der Text nach ?alert wird als GTalk message zu mir geschickt.

Das PHP Script auf dem server ist folgendes:

<?php
   
require_once('xmpphp/XMPPHP/XMPP.php'); 
 
$conn = new XMPPHP_XMPP('talk.google.com', 5222, 'SENDERACCOUNT@gmail.com',   
'MEIN_PASSWORT', 'xmpphp', 'gmail.com', $printlog = false,   
$loglevel = XMPPHP_Log::LEVEL_INFO); 

try { 
$alert=$_GET['alert'];
    $conn->connect(); 
    $conn->processUntil('session_start'); 
    $conn->presence();
    $conn->message('EMPFÄNGERACCOUNT@gmail.com', "FHEM:". $alert); 
    $conn->disconnect(); 
} catch(XMPPHP_Exception $e) { 
    die($e->getMessage()); 
}
?>


Gruss Abraxas
Titel: Antw:GoogleTalk
Beitrag von: daschauher am 25 Mai 2014, 23:24:45
Hallo an Alle!

Mich würde das Thema per FHEM Status Meldungen ans Android Handy zu schicken auch brennend interessieren. Am besten ohne ne neue App.
Hat schon mal wieder jemand versucht GTalk bzw. Hangouts zum laufen zu bekommen?
Ich dachte mir ich frag mal nach bevor ich mir nen 2ten Account anlege um festzustellen dass es nicht geht :-)

vg
Markus
Titel: Antw:GoogleTalk
Beitrag von: stoxx am 02 Juni 2014, 19:28:40
Das Skript mit "festem Empfänger" klappt super, danke!!!
Das erste mit variablen Empfängern hat komischerweise bei mir nicht funktioniert...
Gibt es eine Möglichkeit, bei der zweiten Variante noch einen festen Empfänger dazu zu nehmen?
Habe es mit my $recipient = 'email1@myname.de,email2@myname.de'; versucht, hat aber leider nicht geklappt...
Titel: Antw:GoogleTalk
Beitrag von: f.reddy am 06 Januar 2015, 22:22:54
Für alle, die noch GTalk nutzen oder das zukünftig wollen:
Bekommt ihr einen Auth failed dann schaut mal hier:
https://support.google.com/accounts/answer/6010255

https://myaccount.google.com/
und den Zugriff für weniger sichere Apps erlauben... hab mir grade nen Wolf gesucht, warum das nach längerer Pause nicht mehr funktioniert  :-\