Skip to content

Instantly share code, notes, and snippets.

@YtvwlD
Last active March 31, 2024 17:26
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save YtvwlD/06cc690a360a8d7d29b067b800ac8998 to your computer and use it in GitHub Desktop.
Save YtvwlD/06cc690a360a8d7d29b067b800ac8998 to your computer and use it in GitHub Desktop.
mpris2mqtt
#!/usr/bin/env python3
# DEBUG
import os
DEBUG = "DEBUG" in os.environ
print("Debugging: {} {}".format(DEBUG, "(You might want to set DEBUG.)" if not DEBUG else ""))
# DBUS (pip3 install dbus-python)
from dbus.mainloop.glib import DBusGMainLoop
# GLib (apt install libglib2.0-dev libgirepository1.0-dev, pip3 install PyGObject)
from gi.repository.GLib import MainLoop
# MPRIS (pip3 install mpris2)
from mpris2 import get_players_uri, Player
from platform import node
def handle_change(current_player, info, signature):
handle_status(info["Metadata"])
def handle_status(metadata):
title = metadata["xesam:title"]
artist = ", ".join(metadata["xesam:artist"])
album = metadata["xesam:album"]
if not artist and not album and title:
if " - " in title:
artist = title.split(" - ")[0]
title = title.split(" - ")[1]
if DEBUG:
print("------------------------")
print("Currently playing: {}".format(metadata))
print("Title: {}".format(title))
print("Artist: {}".format(artist))
print("Album: {}".format(album))
print("Source: {}".format(hostname))
mqtt.publish("music/title", title)
mqtt.publish("music/artist", artist)
mqtt.publish("music/album", album)
mqtt.publish("music/source", hostname)
def quit():
print("Exiting...")
mqtt.loop_stop(force=False)
loop.quit()
hostname = node()
# connect to mqtt (pip3 install paho-mqtt)
import paho.mqtt.client
from paho.mqtt.client import CallbackAPIVersion as MqttCallbackAPIVersion
mqtt = paho.mqtt.client.Client(MqttCallbackAPIVersion.VERSION2)
mqtt.connect("mqttserver.chaosdorf.space")
mqtt.loop_start()
print("Connected to mqtt.")
print("Connecting to DBUS...")
DBusGMainLoop(set_as_default=True)
loop = MainLoop()
print("Searching for media players...")
players = list(get_players_uri())
print("Found: {}".format(players))
if not players:
print("ERROR: No media players found.")
exit()
print("Assuming first.")
print("Connecting to player...")
player = Player(dbus_interface_info={'dbus_uri': players[0]})
player.PropertiesChanged = handle_change
handle_status(player.Metadata)
# SIGTERM
import signal
signal.signal(signal.SIGTERM, quit)
print("Looping...")
try:
while True:
loop.run()
except KeyboardInterrupt:
quit()
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
mpris2 = "*"
paho-mqtt = "*"
dbus-python = "*"
pygobject = "*"
[dev-packages]
{
"_meta": {
"hash": {
"sha256": "b63dc22a8fb98e74d47bc638f307bd653e2a07a0bfe5cb04b55d9cb4b66fd1e2"
},
"pipfile-spec": 6,
"requires": {},
"sources": [
{
"name": "pypi",
"url": "https://pypi.org/simple",
"verify_ssl": true
}
]
},
"default": {
"dbus-python": {
"hashes": [
"sha256:ad67819308618b5069537be237f8e68ca1c7fcc95ee4a121fe6845b1418248f8"
],
"index": "pypi",
"markers": "python_version >= '3.7'",
"version": "==1.3.2"
},
"mpris2": {
"hashes": [
"sha256:2663be03f07559055746ef28e6fe68792165eb3dadc84880eca8841a2a7eb185"
],
"index": "pypi",
"version": "==1.0.2"
},
"paho-mqtt": {
"hashes": [
"sha256:13b205f29251e4f2c66a6c923c31fc4fd780561e03b2d775cff8e4f2915cf947",
"sha256:2ef745073dfc9aa68bfec30d0b9b6f0304ea75182bae85a7c77a80cefce1eff5"
],
"index": "pypi",
"markers": "python_version >= '3.7'",
"version": "==2.0.0"
},
"pycairo": {
"hashes": [
"sha256:1d54e28170a5e790269d9db4c195cca5152ff018ba7e330d0ed05d86ccc2ea7d",
"sha256:20a31af89d92ffd5fc60c08e65ff649f16e18621a14a40dbdb049fc74942d7a9",
"sha256:2dddd0a874fbddb21e14acd9b955881ee1dc6e63b9c549a192d613a907f9cbeb",
"sha256:3e4e18ea03122e60abe3eb611e2849859cc950083ff85d8369328eadf3df63f5",
"sha256:5986b8da3e7de7ab931d7ad527938df38f75d3a3bdea2b515c786c5ca2c5093c",
"sha256:675578bc6d62d15ff8669f264783efc9c8c73e3a6f564b294a70fb45a2f78667",
"sha256:696ba8024d2827e66e088a6e05a3b0aea30d289476bcb2ca47c9670d40900a50",
"sha256:8616408ae93de4824a3777ec532ea75643e4bf74e49d601062c0b1788180c962",
"sha256:9fa51168010e2dfb45499df071fca2d921893f724646f3454951000a7ad0cabb",
"sha256:a611e4d82ad8470138bb46d465d47e8db826d9d80b6a520ccd83ee007f2073e4",
"sha256:a8f3b567ba2ad55624a809823ccf75aff8d768c20216cb5888365f6fc695c1d2",
"sha256:aac447b423b33b64119ecdd1ffebf9163b07f5401c5da50c707197efdd1c918a",
"sha256:b6690a00fb225c19f42d76660e676aba7ae7cb18f3632cb02bce7f0d9b9c3800",
"sha256:d374d9ec6d2f791bf57105d87a9028db1ef2b687848f64a524e447033eae7229",
"sha256:d63929ab5a2f890a333f2f2f51de9f1c9fe20d1bddc982c2ca577b737448d72f"
],
"markers": "python_version >= '3.8'",
"version": "==1.26.0"
},
"pygobject": {
"hashes": [
"sha256:2c4cd7c805ee9e727904172423a7519338017fd7e122b62218ac211627436875"
],
"index": "pypi",
"markers": "python_version >= '3.8' and python_version < '4'",
"version": "==3.48.1"
}
},
"develop": {}
}
dbus-python==1.3.2
mpris2==1.0.2
paho-mqtt==2.0.0
pygobject==3.48.1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment