Donnerstag, 16. Juli 2009

Pidgin Nachrichtenweiterleitung über DBus

Eigentlich hat alles damit angefangen, dass ich mir ein "Googlephone" G1 gekauft habe. Dieses hat echt gute Features und durch eine gewisse Anbindung an die Googledienste auch Push-Funktionen, wie Googlemail. Ich bin mir nicht sicher, aber ich vermute, dass auch Google Talk auf dem G1 als Push-Dienst funktioniert.
Beim Hören eines Podcasts kam ich auf die Idee, mir Systemnachrichten über Google Talk auf das Handy schicken zu lassen. Als erstes ist mir dann aber etwas Anderes eingefallen. Es wäre schön, dass, wenn man sich vom Rechner entfernt, die eintreffenden IMs weitergeleitet werden würden. Wenn man dann dringend erreicht werden muss, merkt man das auch.
Eigentlich gleicht man damit nur nicht vorhandene Fähigkeiten der proprietären Protokolle gegenüber jabber aus. Aber wer nutzt schon jabber... (leider)
Lange Rede, kurze Zusammenfassung: Ich wollte eine Weiterleitung von IMs auf jabber (Google Talk). Von DBus hatte ich schon mal gehört, daher hab ich über die DBus-Anbindung von Pidgin versucht. Im Netz habe ich einige passende Codefragmente gefunden, die allesamt in Python geschrieben waren. Ich hab es dann auch mit Python versucht, obwohl ich davon nicht viel Ahnung habe. Und hier ist das zusammengestückelte Skript zur Nachrichtenweiterleitung:
#!/usr/bin/env python

# Version: 0.2

import sys
import os
import xmpp
import time
import urllib
import urllib2
import dbus
import gobject
import dbus.glib
from dbus.mainloop.glib import DBusGMainLoop

def sendToJabber(text):
	tojid = 'Empfängeradresse'
	jidparams={}
	jid=xmpp.protocol.JID('Benutzername@server.domain')
	cl=xmpp.Client(jid.getDomain(),debug=[])
	jidparams['username']="Benutzername Sender"
	jidparams['password']="Passwort"
	jidparams['resource']="away-forward"
	
	
	con=cl.connect()
	if not con:
    		print 'could not connect!'
    		sys.exit()
	print 'connected with',con
	auth=cl.auth(jidparams['username'],jidparams['password'],resource=jidparams['resource'])
	if not auth:
    		print 'could not authenticate!'
    		sys.exit()
	print 'authenticated using',auth

	id=cl.send(xmpp.protocol.Message(tojid,text))
	print 'sent message with id',id

	time.sleep(1)


def onSessionIdleChanged(state):
    global away
    if state:
	away=1
    else:
	away=0

def receivedMessage(account, sender, message, conversation, flags):
    buddy = purple.PurpleFindBuddy(account, sender)
    alias = purple.PurpleBuddyGetAlias(buddy)
    text = alias + ": " + message
    if away == 1:
        sendToJabber(text)




away=0
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()
bus.add_signal_receiver(receivedMessage, dbus_interface="im.pidgin.purple.PurpleInterface", signal_name="ReceivedImMsg")
bus.add_signal_receiver(onSessionIdleChanged, 'SessionIdleChanged', 'org.gnome.ScreenSaver')
obj = bus.get_object("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject")
purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface")


loop = gobject.MainLoop()
loop.run()
Der Knackpunkt bei der Sache ist die Abfrage, ob der Benutzer abwesend ist. Ich habe es gelöst, indem das Skript den away-Status von Pidgin abfragt. Dazu habe ich mir einen extra Status angelegt, der bei kurzer Abwesenheitszeit automatisch eingestellt wird. Dabei wird dann auch automatisch das Google Talk-Konto abgemeldet, um eine unendliche Nachrichtenschleife vermieden wird. Da ich noch Twitgin für Twitter nutze, melde ich dieses damit auch automatisch ab, um nicht diese Nachrichten auch noch weitergeleitet zu bekommen. Leider gibt DBus den Status nicht unter dem bei Pidgin eingestellten Namen weiter, sondern unter einer Nummer. Diese muss man erst einmal herausfinden. Dafür ist die Zeile "print status". Startet man das Skript im Terminal, gibt dies den aktuellen Pidginstatus aus. Den Richtigen (den für abwesend) muss man dann in der nächsten Zeile eintragen.
Der Rest ist recht selbsterklärend, man benötigt nur die Adresse des Ziel-Google-Talk-Kontos und die Zugangsdaten eines zweiten jabber-Kontos zum Nachrichten senden.

Leider gibt es in Google Talk einen Bug beim Nachrichtenempfang (nicht alle werden angezeigt), aber man erhält jede Nachricht als Benachrichtigung. Und hoffentlich wird der Fehler in Android bald behoben!

Update: Das mit den Statusnummern hat sich als unzuverlässig erwiesen. Daher hab ich auf den Idle-Status von Gnome umgeschwenkt (schon im Code ergänzt).

Chili-Update mit vielen Bildern

Seit dem letzten Eintrag hat sich an der Chilifront viel getan:
Alle Pflanzen sind kräftig gewachsen. Alle Sorten haben Blüten angesetzt und bis auf die Habanero-Chilis tragen auch schon alle die ersten, leider noch nicht reifen, Früchte.

Chili-Garten

Wie man sehen kann, ist eine neue, große Pflanze hinzugekommen. Dabei handelt es sich um eine Jalapeño Chili, die ich hier im Baumarkt gekauft habe. Darauf gestoßen bin ich durch einen sehr lieben Tipp - vielen Dank!

Aurora

Hier sieht man die Früchte der Aurora. In der Mitte beginnt eine Chili zu reifen und ändert die Farbe.

Sweet Cayenne

Die Sweet Cayenne wurde als einzige Pflanze an den Früchten angeknabbert. Trotzdem sehr schöne und beeindruckende Chilis. Laut Webseite des Händlers, bei dem ich die Samen gekauft habe, sollen die Früchte rot werden. Auf jeden Fall verfärben sie sich schon langsam.

Jalapeno

Als letztes die bereits erwähnte Jalapeño. Als nicht selbstgezüchtete natürlich eine besonders schöne Pflanze mit schon sehr vielen Früchten. Diese sind noch grün, beginnen aber schon violett zu werden.

User Status

Du bist nicht angemeldet.

Suche

 

Aktuelle Beiträge

Sorry, dass ich schon...
Sorry, dass ich schon wieder nerve, aber dann sitzt...
Maxe (Gast) - 23. Nov, 22:37
Das erste "tail" ist...
Das erste "tail" ist remote, das zweite lokal. Die...
Barahir - 23. Nov, 20:15
Super
Danke. Kannst du mir jetzt noch verraten, wozu das...
Maxe (Gast) - 23. Nov, 18:23

Charts Lieblingskünstler - Diese Woche

RSS Box

Using an iPhone as a Newton keyboard
[Jesus Alvarez] sent us this funny little project....
Caleb Kraft - 28. Nov, 22:07
GSM enabled security door
The security door at the front of [Oliver's] building...
Mike Szczys - 28. Nov, 20:31
How to use Wiimotes w/ Linux
[Sprite_tm] has whipped up yet another interesting tutorial...
Jacob Woj - 28. Nov, 16:55
Barahir: Hab auch #wave-invites. Wer mag?
Barahir: Hab auch #wave-invites. Wer mag?
28. Nov, 15:08
13th century navigation system
[Tom Wujec] explains how an astrolabe works and its...
Mike Szczys - 28. Nov, 14:52
Four tear-downs for your Friday afternoon
We know that feeling, you’ve been up all morning...
Jakob Griffith - 28. Nov, 02:32
Door opening help
For those who are seeking prosthetic limbs,. ..
Caleb Kraft - 27. Nov, 17:23
Autonomous Turret wielding biped bot
Pay close attention. At roughly 36 seconds we see...
Caleb Kraft - 27. Nov, 15:14
DS goes full size – pockets everywhere rally in protest
It’s hard to believe we missed this one from...
Mike Szczys - 26. Nov, 20:48
Tiny keyboard/touchpad has “hack” written all over...
Yes, we know, this is not a hack, yet it just has...
Phil Burgess - 26. Nov, 16:52
Make any gloves work with a touch screen
The chill of autumn is upon us, and with it comes...
Phil Burgess - 25. Nov, 23:06
Recover borked HDD after Xbox 360 ban
[Incudie] tipped us off about a method to fix a borked...
Mike Szczys - 25. Nov, 21:20
Turkey fryer; awful, bad, and worse
Tomorrow’s turkey day here in the United States....
Mike Szczys - 25. Nov, 20:30
Voice controlled lock? Almost…
If you watched the video before reading...
Jakob Griffith - 25. Nov, 19:13
TI sports watch for hacking
How would you like to have a 3-axis accelerometer,...
Mike Szczys - 25. Nov, 17:55

Status

Online seit 1123 Tagen
Zuletzt aktualisiert: 23. Nov, 22:37