Код Python, чтобы ждать SMS -сообщения, полученные ModemmanagerPython

Программы на Python
Anonymous
 Код Python, чтобы ждать SMS -сообщения, полученные Modemmanager

Сообщение Anonymous »

У меня есть система Debian с использованием Modemmanager с сотовым модемом 4G (Debian 10 Buster, с Modemmanager 1.10, чтобы быть точным). < /p>
Я хочу контролировать сообщения D-BUS, с Приложение Python, чтобы ждать полученных SMS-сообщений, а затем обработать их, но у меня возникли проблемы с выяснением, как это сделать (пути D-BUS для Modemmanager и т. Д.). < /p>
Я могу отправить SMS -сообщение в модем, и я вижу его, полученное с помощью команды MMCli .
# mmcli -m 0 --messaging-list-sms
/org/freedesktop/ModemManager1/SMS/0 (unknown)
< /code>
Я также могу увидеть сигнализацию, контролируя D-bus. < /p>
$ dbus-monitor --system | grep -i modem

signal time=1550204358.384516 sender=:1.3 -> destination=(null destination) serial=524686 path=/org/freedesktop/ModemManager1/Modem/0; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged
string "org.freedesktop.ModemManager1.Modem"
signal time=1550204358.386776 sender=:1.3 -> destination=(null destination) serial=524687 path=/org/freedesktop/ModemManager1/Modem/0; interface=org.freedesktop.ModemManager1.Modem; member=StateChanged
signal time=1550204358.402441 sender=:1.3 -> destination=(null destination) serial=524690 path=/org/freedesktop/ModemManager1/Modem/0; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged
string "org.freedesktop.ModemManager1.Modem"
signal time=1550204358.408122 sender=:1.3 -> destination=(null destination) serial=524691 path=/org/freedesktop/ModemManager1/Modem/0; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged
string "org.freedesktop.ModemManager1.Modem"
object path "/org/freedesktop/ModemManager1/Bearer/56203"
signal time=1550204358.410651 sender=:1.3 -> destination=(null destination) serial=524692 path=/org/freedesktop/ModemManager1/Modem/0; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged
string "org.freedesktop.ModemManager1.Modem"
signal time=1550204358.412569 sender=:1.3 -> destination=(null destination) serial=524693 path=/org/freedesktop/ModemManager1/Modem/0; interface=org.freedesktop.ModemManager1.Modem; member=StateChanged
signal time=1550204358.897303 sender=:1.3 -> destination=(null destination) serial=524694 path=/org/freedesktop/ModemManager1/Modem/0; interface=org.freedesktop.ModemManager1.Modem.Messaging; member=Added
object path "/org/freedesktop/ModemManager1/SMS/5"
signal time=1550204358.898987 sender=:1.3 -> destination=(null destination) serial=524695 path=/org/freedesktop/ModemManager1/Modem/0; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged
string "org.freedesktop.ModemManager1.Modem.Messaging"
object path "/org/freedesktop/ModemManager1/SMS/5"
object path "/org/freedesktop/ModemManager1/SMS/4"
object path "/org/freedesktop/ModemManager1/SMS/3"
object path "/org/freedesktop/ModemManager1/SMS/2"
object path "/org/freedesktop/ModemManager1/SMS/1"
object path "/org/freedesktop/ModemManager1/SMS/0"
< /code>
Однако я не смог получить сценарий Python, чтобы вести себя так же. т.е. подождите, пока сообщения SMS будут происходить на D-BUS, и разбудить скрипт для дальнейшей обработки. p>
Вот какой -то код, который я пробовал. Я не вижу напечатанных сообщений.
Я уверен, что это мое отсутствие понимания D-BUS и требуемых путей и т. Д. Для Modemmanager. < /P>
#!/usr/bin/env python3

from dbus_next.constants import BusType
from dbus_next.aio import MessageBus

import asyncio

loop = asyncio.get_event_loop()

async def main():
bus = await MessageBus(bus_type=BusType.SYSTEM).connect()

# introspection = await bus.introspect('org.freedesktop.ModemManager1.Sms', '/org/freedesktop/ModemManager1/Sms')
introspection = await bus.introspect('org.freedesktop.ModemManager1', '/org/freedesktop/ModemManager1')

obj = bus.get_proxy_object('org.freedesktop.ModemManager1.Sms', '/org/freedesktop/ModemManager/SMSs', introspection)

modems = bus.get_proxy_object('org.freedesktop.ModemManager1.Modem', '/org/freedesktop/ModemManager1/Modems', introspection)

# modems_children = modems.get_children()
# modem = modems_children[0]

modem = bus.get_proxy_object('org.freedesktop.ModemManager1.Modem', '/org/freedesktop/ModemManager1/Modem/0', introspection)

properties = obj.get_interface('org.freedesktop.DBus.Properties')
# properties = obj.get_interface('org.freedesktop.ModemManager1.Sms.Properties')
# properties = obj.get_interface('org.freedesktop.ModemManager1.Properties')

# messaging = modem.get_interface('org.freedesktop.ModemManager1.Modem.Messaging')

# listen to signals
def on_properties_changed(interface_name, changed_properties, invalidated_properties):
for changed, variant in changed_properties.items():
print(f'property changed: {changed} - {variant.value}')

properties.on_properties_changed(on_properties_changed)
# messaging.on_properties_changed(on_properties_changed)

await loop.create_future()

loop.run_until_complete(main())


Подробнее здесь: https://stackoverflow.com/questions/793 ... demmanager

Вернуться в «Python»