Wie der Titel schon sagt. Ich verweise vollständig auf die folgenden Artikel. Vielen Dank. Der Code ist fast derselbe. Wenn Sie also darauf hinweisen, werden wir ihn sofort löschen.
Umschalten der Bot-Thermo-Hygrometer-Werte mit Raspberry Pi https://qiita.com/c60evaporator/items/7c3156a6bbb7c6c59052
Es gab einen Teil, der in meiner Umgebung nicht funktioniert hat, daher werde ich den Code, der als privates Protokoll funktioniert hat, einfügen.
Sie können dies in der Anwendung auf Ihrem Smartphone überprüfen.
pi@raspberrypi:~ $ sudo hcitool lescan | grep EB:F6:31:8C:1F:E9
EB:F6:31:8C:1F:E9 (unknown)
EB:F6:31:8C:1F:E9 (unknown)
EB:F6:31:8C:1F:E9 (unknown)
Was ist dieser Befehl?
NAME
hcitool - configure Bluetooth connections
DESCRIPTION
hcitool is used to configure Bluetooth connections and send some spe-
cial command to Bluetooth devices. If no command is given, or if the
option -h is used, hcitool prints some usage information and exits.
Verwenden Sie bluepy. Verweisen Sie auf die verknüpfte URL.
pi@raspberrypi:~ $ sudo install libglib2.0-dev
pi@raspberrypi:~ $ pip3 install bluepy
pi@raspberrypi:~ $ cd .local/lib/python3.7/site-packages/bluepy
pi@raspberrypi:~ $ sudo setcap 'cap_net_raw,cap_net_admin+eip' bluepy-helper
switchbot.py
from bluepy import btle
import struct
class SwitchbotScanDelegate(btle.DefaultDelegate):
def __init__(self, macaddr):
btle.DefaultDelegate.__init__(self)
self.sensorValue = None
self.macaddr = macaddr
def handleDiscovery(self, dev, isNewDev, isNewData):
if dev.addr == self.macaddr:
for (adtype, desc, value) in dev.getScanData():
if desc == '16b Service Data':
self._decodeSensorData(value)
def _decodeSensorData(self, valueStr):
valueBinary = bytes.fromhex(valueStr[4:])
batt = valueBinary[2] & 0b01111111
isTemperatureAboveFreezing = valueBinary[4] & 0b10000000
temp = ( valueBinary[3] & 0b00001111 ) / 10 + ( valueBinary[4] & 0b01111111 )
if not isTemperatureAboveFreezing:
temp = -temp
humid = valueBinary[5] & 0b01111111
self.sensorValue = {
'SensorType': 'SwitchBot',
'Temperature': temp,
'Humidity': humid,
'BatteryVoltage': batt
}
main.py
from bluepy import btle
from switchbot import SwitchbotScanDelegate
scanner = btle.Scanner().withDelegate(SwitchbotScanDelegate('eb:f6:31:8c:1f:e9'))
scanner.scan(5.0)
print(scanner.delegate.sensorValue)
pi@raspberrypi:~ $ python3 ./main.py
{'SensorType': 'SwitchBot', 'Temperature': 25.2, 'Humidity': 68, 'BatteryVoltage': 100}
Recommended Posts