Bluetooth eigener Agent
Verfasst: Dienstag 27. April 2021, 11:35
Hallo zusammen,
ich wollte von einem Raspberry per Bluetooth einen HC06 kontaktieren. Je nach Aufruf auf verschiedene HC06. Angeben wollte ich Bluetooth-Adresse und Pincode und damit automatisiert die Verbindung aufbauen.
Zu diesem Zweck hab ich ein Simple-Agent-Beispiel angepasst. Jedoch als Neuling bei Sockets und DBus unter Python.
Wenn ich starte kommt der Standard-Agent mit dem Pin-Eingabe-Fenster. Mein Agent scheint nicht angesprochen zu werden. Wo liegt der Fehler?
ich wollte von einem Raspberry per Bluetooth einen HC06 kontaktieren. Je nach Aufruf auf verschiedene HC06. Angeben wollte ich Bluetooth-Adresse und Pincode und damit automatisiert die Verbindung aufbauen.
Zu diesem Zweck hab ich ein Simple-Agent-Beispiel angepasst. Jedoch als Neuling bei Sockets und DBus unter Python.
Code: Alles auswählen
from bluetool import Bluetooth
import bluetooth
import sys
from gi.repository import GObject
import dbus
import dbus.service
import dbus.mainloop.glib
from optparse import OptionParser
BUS_NAME = 'org.bluez'
AGENT_INTERFACE = 'org.bluez.Agent1'
AGENT_PATH = "/test/agent"
bus = None
device_obj = None
dev_path = None
bd_addr = "12:34:56:78:90:AB"
bd_pin = "1234"
class Rejected(dbus.DBusException):
_dbus_error_name = "org.bluez.Error.Rejected"
class Agent(dbus.service.Object):
pin = "1234"
def setPin(self, pin):
self.pin = pin
@dbus.service.method(AGENT_INTERFACE, in_signature="", out_signature="")
def Release(self):
print("Release")
mainloop.quit()
@dbus.service.method(AGENT_INTERFACE, in_signature="o", out_signature="s")
def RequestPinCode(self, device):
print("RequestPinCode (%s)" % (device))
return(self.pin)
if __name__ == '__main__':
bt = Bluetooth()
devices = bt.get_paired_devices()
print(devices)
bd_addrb = bytes(bd_addr, 'utf-8')
if(next((item for item in devices if item["mac_address"] == bd_addrb), False)):
print("paired")
port = 1
sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
sock.bind(("", port))
try:
sock.connect((bd_addr, port))
sock.send("hello!!")
sock.close()
except(bluetooth.BluetoothError):
print("bt-error")
except:
print("Fehler")
else:
print("not paired")
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SystemBus()
path = "/test/agent"
agent = Agent(bus, path)
agent.setPin(bd_pin)
obj = bus.get_object(BUS_NAME, "/org/bluez");
manager = dbus.Interface(obj, "org.bluez.AgentManager1")
manager.RegisterAgent(path, "KeyboardDisplay")
print("Agent registered")
port = 1
sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
sock.bind(("", port))
try:
sock.connect((bd_addr, port))
sock.send("hello!!")
sock.close()
except(bluetooth.BluetoothError):
print("bt-error")
except:
print("Fehler")
manager.RequestDefaultAgent(path)