Das ist das Skript, paar Pythonlibs muss man mit pip oder wie auch immer installieren, der ganze Import-Kram da.
Als Broker nehme ich broker.hivemq.com, der tut im Gegensatz zu test.mosquitto.org zumindest momentan immer.
Die Topics xyz/bbb/… kannst Du auch mit mqtt-dash oder irgendeiner Androidapp fuer mqtt abonnieren/anzeigen, Du siehst aber auch in der Shell die Sitzungen mit der Anzahl der Teilnehmer.
#!/usr/bin/python
#coding:utf-8
#Mit bbb-conf --secret den Endpoint und das Secret anzeigen lassen und hier eintragen
import hashlib, requests
import paho.mqtt.client as mqtt
import psutil
from xml.etree import ElementTree
url = "https://bbb.deinedomainhalt.de/bigbluebutton/" + "api/"
secret = "dasganzesecretvonbbmusshierrein"
meeting_info = "getMeetings"
def on_connect(client, userdata, flags, rc):
print("Connected with result code " + str(rc))
client = mqtt.Client()
client.on_connect = on_connect
client.connect("broker.hivemq.com", 1883, 60)
client.loop_start()
m = hashlib.sha1()
m.update(meeting_info + secret)
checksum = m.hexdigest()
request_url = url + meeting_info + "?checksum=" + checksum
response = requests.get(url=request_url)
tree = ElementTree.fromstring(response.content)
meetings = tree.find("meetings")
sum_audio = 0
sum_video = 0
sum_listening = 0
sum_participants = 0
output_table = []
output_table.append(["ID", "Name", "Moderator", "Teilnehmer", "Nur zuhoeren", "Im VoiceChat", "Mit Video"])
for index, meeting in enumerate(meetings):
meetingName = meeting.find("meetingName").text
meetingAudio = int(meeting.find("voiceParticipantCount").text)
meetingVideo = int(meeting.find("videoCount").text)
meetingParticipants = int(meeting.find("participantCount").text)
meetingListening = int(meeting.find("listenerCount").text)
creator = "-"
attendees = meeting.find("attendees")
for attendee in attendees:
if attendee.find("role").text == "MODERATOR":
creator = attendee.find("fullName").text
break
sum_video += meetingVideo
sum_audio += meetingAudio
sum_listening += meetingListening
sum_participants += meetingParticipants
output_table.append([str(index + 1), meetingName, creator, str(meetingParticipants), str(meetingListening), str(meetingAudio), str(meetingVideo)])
client.publish("xyz/bbb/video", str(sum_video))
client.publish("xyz/bbb/audio", str(sum_audio))
client.publish("xyz/bbb/participants", str(sum_participants))
client.publish("xyz/bbb/cpu", str(psutil.cpu_percent()))
output_table.append(["", "", "", "", "", "", ""])
output_table.append(["", "Gesamt", "", str(sum_participants), str(sum_listening), str(sum_audio), str(sum_video)])
max_width = [0, 0, 0, 0, 0, 0, 0]
for row in output_table:
for index, data in enumerate(row):
max_width[index] = max(len(data), max_width[index])
for row in output_table:
for index, data in enumerate(row):
print (data.ljust(max_width[index])),
print ("\n"),