![]() |
Dbus Help
I am trying to monitor a dbus signal, and make my n900 output some text when a specific signal is received.
I am using python. This is the signal that I am monitoring for (any presence change for a user on my jabber account). I got this using the dbus-monitor command: Code:
signal sender=:1.496 -> dest=(null destination) serial=3979 path=/org/freedesktop/Telepathy/Connection/gabble/jabber/username_40gmail_2ecom_2fMaemo; interface=org.freedesktop.Telepathy.Connection.Interface.SimplePresence; member=PresencesChanged Code:
#! /usr/bin/python |
Re: Dbus Help
Have you used dbus-monitor to confirm that the events you expect are being triggered?
|
Re: Dbus Help
Quote:
|
Re: Dbus Help
Change
bus = dbus.SystemBus() to bus = dbus.SessionBus() and all should be good. |
Re: Dbus Help
Quote:
|
Re: Dbus Help
Do you know what type is passed to handle_presence?
|
Re: Dbus Help
|
Re: Dbus Help
I changed your code to this:
Code:
def handle_presence(*args): Code:
status changed (dbus.Dictionary({dbus.UInt32(1L): dbus.Struct((dbus.UInt32(2L), dbus.String(u'available'), dbus.String(u'')), signature=None)}, signature=dbus.Signature('u(uss)')),) But I noticed that no events occur when the account is disabled, so maybe you also want to listen for this: Code:
bus.add_signal_receiver(handle_presence, 'StatusChanged', 'org.freedesktop.Telepathy.Connection', None, '/org/freedesktop/Telepathy/Connection/gabble/jabber/username_40gmail_2ecom_2fMaemo') enabled: Code:
status changed (dbus.UInt32(1L), dbus.UInt32(1L)) Code:
status changed (dbus.UInt32(2L), dbus.UInt32(1L)) |
Re: Dbus Help
What variable type is args?
I receive the following when I do print args: Code:
(dbus.Dictionary({dbus.UInt32(3L): dbus.Struct((dbus.UInt32(4L), dbus.String(u'xa'), dbus.String(u"I'm away from my computer")), signature=None)}, signature=dbus.Signature('u(uss)')),) |
Re: Dbus Help
I think all is answered by following nicolai's link and the dbus-python tutorial. According to the Data Types section, dbus.Dictionary is a sub-class of dict.
Remove the '*' from '*arg' and arg should just be a dbus.Dictionary. |
Re: Dbus Help
Quote:
I have been playing around with my handle_presence function (here's what it looks like). Can you give me a little more help to get this to work?: Code:
def handle_presence(dictionary): |
Re: Dbus Help
I ended up getting it to work by using the db2p function at the bottom of this page: http://telepathy.freedesktop.org/wik...rial%20Example
Then I searched for a particular string in the message (that I set). I feel like there should be an easier / cleaner way to do this, but what I did worked for me. |
Re: Dbus Help
Does anyone know how to send a message to a user via a dbus command? It appears that I need to create a channel first, but I am at a loss on how to do this.
This is what I have so far, but I am stuck after that: Code:
bus = dbus.SessionBus() Code:
account.Set('org.freedesktop.Telepathy.Channel.Interface.Messages', 'Send', dbus.Struct(( dbus.UInt32(0) , presence_text, ""), signature='uss'), dbus_interface='org.freedesktop.DBus.Properties') http://wiki.maemo.org/Adventures_with_D-Bus |
All times are GMT. The time now is 06:10. |
vBulletin® Version 3.8.8