Inhaltsverzeichnis:

Überwachen und Aufzeichnen der Temperatur mit Bluetooth LE und RaspberryPi - Gunook
Überwachen und Aufzeichnen der Temperatur mit Bluetooth LE und RaspberryPi - Gunook

Video: Überwachen und Aufzeichnen der Temperatur mit Bluetooth LE und RaspberryPi - Gunook

Video: Überwachen und Aufzeichnen der Temperatur mit Bluetooth LE und RaspberryPi - Gunook
Video: Schrämper Tobias: Innenraumüberwachung Wohnmobil (Temperatur und Feuchte) mit Bluetooth LE Sensoren 2024, Juli
Anonim
Überwachen und Aufzeichnen der Temperatur mit Bluetooth LE und RaspberryPi
Überwachen und Aufzeichnen der Temperatur mit Bluetooth LE und RaspberryPi
Überwachen und Aufzeichnen der Temperatur mit Bluetooth LE und RaspberryPi
Überwachen und Aufzeichnen der Temperatur mit Bluetooth LE und RaspberryPi

In dieser Anleitung geht es darum, wie man ein Mehrknoten-Temperaturüberwachungssystem mit Bluetooth LE-Sensorfehler von Blue Radios (BLEHome) und RaspberryPi 3B zusammenstellt. Dank der Entwicklung des Bluetooth LE-Standards gibt es jetzt leicht verfügbare drahtlose Sensoren mit geringem Stromverbrauch auf dem Markt zu sehr geringen Kosten und kann monatelang mit einer einzigen Knopfzelle betrieben werden. Einer dieser Sensoren, die ich aufgenommen habe, ist von Blue Radio namens Sensor Bugs. Es kostet etwa 25 US-Dollar bei Amazon und ist ein Bluetooth LE-Gerät mit Temperatursensor, Lichtsensor und Beschleunigungsmesser, die alle in einer kleinen Einheit integriert sind, die drahtlos kommunizieren kann. Dies ist eine perfekte Ergänzung für Raspberry Pi 3B, das Bluetooth LE-Radio unterstützt.

Schritt 1: Raspberry Pi einrichten

Der erste Schritt besteht darin, ein funktionierendes Raspberry Pi-Setup zu erhalten. Folgen Sie den Anweisungen von der Raspberry Pi-Website, laden Sie Raspbian auf eine SD-Karte, legen Sie sie in den Raspberry Pi ein und booten Sie ihn Zeitzone auf die aktuelle Zeitzone anstelle von UTC. Sie können dies mit dem folgenden Befehl tun: $ sudo dpkg-reconfigure tzdataDer Rest der Anweisung geht davon aus, dass die Einrichtung über die Befehlszeilenschnittstelle erfolgt.

Schritt 2: MySQL auf Raspberry Pi einrichten

Es ist sinnvoll, eine lokal installierte Datenbank zu haben, um alle erfassten Daten zu speichern. Die Installation von MySQL auf Raspberry Pi ist super einfach. Es ist auch nicht schwer, das Skript zu ändern, um eine externe Verbindung zu einem SQL-Server herzustellen. Sie können diesen Schritt überspringen, wenn Sie einen SQL-Server im Netzwerk verwenden möchten. Es gibt viele Anweisungen im Netz, ich schlage Folgendes vor: https:// www.stewright.me/2014/06/tutorial-install-…

Sobald der SQL-Server installiert ist, können Sie den MySQL CLI-Client verwenden, um Benutzer, Datenbanken und Tabellen zu erstellen. Um MySQL CLI einzugeben, verwenden Sie den Befehl:

$ sudo mysql -uroot-pErstelle zuerst einen lokalen Benutzer, um erfasste Daten einzufügen: > CREATE USER 'datasrc'@'localhost' IDENTIFYED BY 'datasrc000';Erstelle als nächstes eine Datenbank und eine Tabelle: > CREATE DATABASE SensorBug;Einrichten des Benutzers Berechtigung: > GEWÄHLE ALLE PRIVILEGIEN AUF SensorBug.* TO 'datasrc'@'localhost';Füge nun eine neue Tabelle zur Datenbank hinzu. Für dieses Beispiel füge ich eine Tabelle mit den folgenden Spalten hinzu: DATE, TIME, ADDRESS, LOCATION, TEMPERATURE und ACCEROMETER

  • DATUM/ZEIT - Dies ist das Datum und die Uhrzeit der Datenaufzeichnung
  • ADRESSE - Dies ist der MAC des SensorBug, von dem die Nachricht erfasst wird
  • STANDORT - Eine von Menschen lesbare Zeichenfolge, um anzuzeigen, wo sich der Sensor befindet
  • TEMPERATUR - Dies ist die aufgezeichnete Temperatur
  • ACCELE - Dies ist der Wert des Beschleunigungsmesserausgangs, nützlich für die Aufzeichnung der Sensorposition (falls aktiviert)

Der Befehl, der dies tut, ist: > USE SensorBug; > CREATE TABLE data (Datum DATE, Uhrzeit TIME, Adresse TINYTEXT, Standort TINYTEXT, Temperatur FLOAT, accele INT); Jetzt ist die Datenbank fertig, wir können mit dem Einrichten der sensorBugs fortfahren.

Schritt 3: Einrichten der SensorBugs

Die Sensor Bugs sind ziemlich nette kleine Geräte. Leider hat der Hersteller nur eine IOS-App zum Programmieren mitgeliefert. Trotzdem ist es immer noch möglich, damit zu arbeiten, wenn Sie nur ein Android-Gerät haben. Im ersten Schritt koppeln Sie das Gerät mit einem Telefon. Ohne das Koppeln des Geräts wird der SensorBug keine Daten ankündigen. Ich habe versucht zu sehen, ob ich dies direkt mit RaspberryPi machen kann, leider scheint der Bluetooth LE-Treiber auf RaspberryPi noch experimentell zu sein und Fehler zu enthalten, um zu verhindern, dass er mit Bluetooth LE-Geräten gekoppelt wird. Zukünftige Versionen des blueZ-Treibers könnten dies beheben, aber wie aktuell geschrieben, gibt es keine Möglichkeit, den SensorBug mit RaspberryPi zu koppeln. Zum Glück müssen wir das Gerät nicht koppeln, um die angekündigten Daten zu erfassen. Das einzige, was wir brauchen, ist ein Telefon, um den SensorBug zu konfigurieren. Standardmäßig startet der SensorBug die Anzeige von Temperaturdaten im 1-Sekunden-Intervall, sobald er mit einem Gerät gekoppelt ist. Für die Erfassung von Temperaturdaten ist das alles, was benötigt wird. Wenn Sie planen, den Positions- oder Lichtsensor zu verwenden, ist eine Konfiguration des Geräts erforderlich. Für den Anfang koppeln wir das Gerät und trennen es. Dies reicht für die Temperaturerfassung aus. Drücken Sie zunächst beide Tasten am SensorBug. Die blau/grüne LED blinkt, um anzuzeigen, dass sie eingeschaltet ist. Drücken Sie eine der Tasten, die grüne LED sollte aufleuchten und anzeigen, dass das Gerät eingeschaltet ist. Wenn die grüne LED nicht leuchtet, drücken Sie beide Tasten, um das Gerät erneut einzuschalten. Halten Sie eine der Tasten gedrückt, bis die blaue LED zu blinken beginnt. Dadurch wird das Gerät in den Pairing-Modus versetzt. Gehen Sie auf dem Telefon in das Bluetooth-Konfigurationsmenü und suchen Sie nach dem SensorBug-Gerät. Sobald es angezeigt wird, wählen Sie es aus, um es mit dem Gerät zu koppeln. Das war's, jetzt ist der SensorBug mit Strom versorgt und gibt die Temperaturdaten bekannt

Schritt 4: Installieren des Bluetooth LE Python Wrappers

Als nächstes müssen wir die Bibliothek für Python installieren, um mit dem Bluetooth LE-Stack zu kommunizieren. Die Anleitung finden Sie hier: https://github.com/IanHarvey/bluepyFür Python 2.7 ist es so einfach, die folgenden Befehle einzugeben:

$ sudo apt-get install python-pip libglib2.0-dev $ sudo pip install bluepy

Schritt 5: Scannen und finden Sie die Adresse des SensorBug heraus

Um die SensorBug-MAC-Adresse herauszufinden, verwenden Sie diesen Befehl: $ sudo hcitool lescan Sie sollten eine Ausgabe wie die folgende sehen:

EC:FE:7E:10:B1:92 (unbekannt)Wenn Sie viele Bluetooth-LE-Geräte in der Nähe haben, kann es schwierig sein, herauszufinden, mit welchem Sie sprechen. Sie können Bluetoothctl ausprobieren, das weitere Details enthält:

$ sudo bluetoothctl[bluetooth]# scan on [NEW] Device EC:FE:7E:10:B1:92 SensorBug10B192 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Key: 0x0085 [CHG] Device EC: FE:7E:10:B1:92 ManufacturerData Wert: 0x02 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Wert: 0x00 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Wert: 0x3c [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Wert: 0x25 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Wert: 0x09 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Wert: 0x41 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Wert: 0x02 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Wert: 0x02 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Wert: 0x43 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Wert: 0x0b [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Wert: 0x01 [CHG] Gerät EC:FE:7E:10:B1:92 ManufacturerData Wert: 0x6f

Notieren Sie die MAC-Adresse, diese muss in das Python-Skript eingegeben werden, um unerwünschte Bluetooth LE-Geräte herauszufiltern

Schritt 6: Fügen Sie das Python-Skript hinzu

Eine Kopie des Python-Skripts ist erhältlich von:

drive.google.com/open?id=10vOeEAbS7mi_eXn_…

Hier ist die gleiche Datei, achten Sie beim Kopieren auf den Einzug:

Aktualisieren Sie außerdem die MAC-Adresse in der Python-Datei, damit sie mit der aus dem Scan-Ergebnis erhaltenen Sensoradresse übereinstimmt.

# Dieses Programm ist freie Software: Sie können es weitergeben und/oder modifizieren

# es unter den Bedingungen der GNU General Public License, wie veröffentlicht von

# die Free Software Foundation, entweder Version 3 der Lizenz, oder

# (nach Ihrer Wahl) jede neuere Version.

#

# Dieses Programm wird in der Hoffnung verteilt, dass es nützlich ist, # aber OHNE JEGLICHE GARANTIE; auch ohne die stillschweigende garantie von

# MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Siehe die

# GNU General Public License für weitere Details.

#

# Sie sollten eine Kopie der GNU General Public License erhalten haben

# zusammen mit diesem Programm. Wenn nicht, siehe.

# bscan.py - Einfacher Bluetooth LE-Scanner und Datenextraktor

from bluepy.btle import Scanner, DefaultDelegate

Importzeit

pymysql importieren

Importstruktur

Hostname = 'localhost'

Benutzername = 'datasrc'

Passwort = 'datasrc000'

Datenbank = 'SensorBug'

#Geben Sie die MAC-Adresse des Sensors aus dem lescan ein

SENSOR_ADDRESS = ["ec:fe:7e:10:b9:92", "ec:fe:7e:10:b9:93"]

SENSOR_LOCATION = ["Garage", "Außenbereich"]

Klasse DecodeErrorException(Ausnahme):

def _init_(self, value):

Eigenwert = Wert

def _str_(selbst):

Rückgaberepr(self.value)

Klasse ScanDelegate (DefaultDelegate):

def _init_(selbst):

DefaultDelegate._init_(self)

def handleDiscovery(self, dev, isNewDev, isNewData):

if isNewDev:

print "Entdecktes Gerät", dev.addr

elif isNewData:

print "Neue Daten erhalten von", dev.addr

def doQueryInsert (conn, addr, loc, temp, accero):

#blesensor-Tabelle ist Datum, Uhrzeit, Adresse, Ort, Temperatur, Accero

cur = conn.cursor()

dostr = 'INSERT INTO DatenWERTE (CURRENT_DATE(), NOW(), %s, %s, %s, %s);'

cur.execute (dostr, (addr, loc, temp, accero))

conn.commit()

Scanner = Scanner().withDelegate(ScanDelegate())

myConnection = pymysql.connect (host=hostname, user=username, passwd=password, db=database)

ManuDataHex =

ReadLoop = True

Versuchen:

while (ReadLoop):

Geräte = Scanner.scan(2.0)

ManuData = ""

für Dev-In-Geräte:

Eintrag = 0

AcceroData = 0

AcceroType = 0

Temperaturdaten = 0

für saddr in SENSOR_ADDRESS:

Eintrag += 1

if (dev.addr == saddr):

print "Gerät %s (%s), RSSI=%d dB" % (dev.addr, dev.addrType, dev.rssi)

CurrentDevAddr = saddr

CurrentDevLoc = SENSOR_LOCATION[Eintrag-1]

for (adtype, desc, value) in dev.getScanData():

print " %s = %s" % (desc, value)

if (desc == "Hersteller"):

ManuData = Wert

if (ManuData == ""):

print "Keine Daten empfangen, Dekodierung beenden"

fortsetzen

#ManuData drucken

für i, j in zip (ManuData[::2], ManuData[1::2]):

ManuDataHex.append(int(i+j, 16))

#Starten Sie die Dekodierung der rohen Herstellerdaten

if ((ManuDataHex[0] == 0x85) und (ManuDataHex[1] == 0x00)):

print "Headerbyte 0x0085 gefunden"

anders:

print "Header-Byte 0x0085 nicht gefunden, Dekodierungsstopp"

fortsetzen

#Major/Minor überspringen

#Index 5 ist 0x3c, zeigt Batteriestand und Konfiguration an #

if (ManuDataHex[4] == 0x3c):

BatteryLevel = ManuDataHex[5]

ConfigCounter = ManuDataHex[6]

idx = 7

#print "TotalLen: " + str(len(ManuDataHex))

while (idx < len(ManuDataHex)):

#print "Idx: " + str(idx)

#print "Daten: " + hex(ManuDataHex[idx])

if (ManuDataHex[idx] == 0x41):

#Beschleunigungsmesser-Daten

idx += 1

AcceleroType = ManuDataHex[idx]

AcceleroData = ManuDataHex[idx+1]

idx += 2

elif (ManuDataHex[idx] == 0x43):

#Temperaturdaten

idx += 1

TempData = ManuDataHex[idx]

TempData += ManuDataHex[idx+1] * 0x100

TempData = TempData * 0,0625

idx += 2

anders:

idx += 1

print "Geräteadresse: " + CurrentDevAddr

print "Gerätestandort: " + CurrentDevLoc

print "Batteriestand: " + str(Batteriestand) + "%"

print "Config Counter: " + str(ConfigCounter)

print "Accelero Data: " + hex(AcceleroType) + " " + hex(AcceleroData)

print "Temp-Daten: " + str(TempData)

doQueryInsert(myConnection, CurrentDevAddr, CurrentDevLoc, TempData, AcceleroData)

ReadLoop = False

außer DecodeErrorException:

passieren

Schritt 7: Testen Sie das Python-Skript

Das Skript muss im Root ausgeführt werden, also:

$ sudo python bscan.pyDiscovered device ec:6e:7e:10:b1:92 Device ec:6e:7e:10:b1:92 (public), RSSI=-80 dB Flags = 06 Incomplete 16b Services = 0a18 Manufacturer = 850002003c25094102024309016f Header-Byte 0x0085 gefunden Geräteadresse: ec:6e:7e:10:b1:92 Gerätestandort: Garage Batteriestand: 37% Konfigurationszähler: 9 Accero Data: 0x2 0x2 Temp Data: 16.5625

Schritt 8: Fügen Sie das Python-Skript zur Crontab hinzu

Das Python-Skript muss im Root ausgeführt werden. Wenn Sie die Daten automatisch erfassen möchten, muss es der crontab des Roots hinzugefügt werden. In diesem Beispiel führe ich das Skript alle 20 Minuten aus Verwenden Sie den Befehl:

$ sudo crontab -e

# Bearbeiten Sie diese Datei, um Aufgaben einzuführen, die von Cron ausgeführt werden sollen.

# # Jede auszuführende Aufgabe muss durch eine einzige Zeile definiert werden # mit verschiedenen Feldern, die angeben, wann die Aufgabe ausgeführt wird # und welcher Befehl für die Aufgabe ausgeführt werden soll # # Um die Zeit zu definieren, können Sie konkrete Werte für # Minuten (m), Stunde (h), Tag des Monats (dom), Monat (mon), # und Wochentag (dow) oder verwenden Sie '*' in diesen Feldern (für 'any').# # Beachten Sie, dass Aufgaben gestartet werden basierend auf der Vorstellung von Zeit und Zeitzonen des cron-Systems # Daemons. # # Die Ausgabe der crontab-Jobs (einschließlich Fehlern) wird über # E-Mail an den Benutzer gesendet, zu dem die crontab-Datei gehört (sofern nicht umgeleitet). # # Sie können beispielsweise jede Woche um 5 Uhr morgens ein Backup all Ihrer Benutzerkonten durchführen mit: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # Weitere Informationen finden Sie im Handbuchseiten von crontab(5) und cron(8) # # mh dom mon dow Befehl 0 * * * * python /home/pi/bscan.py 20 * * * * python /home/pi/bscan.py 40 * * * * Python /home/pi/bscan.py

Das ist es. Das Python-Skript wird in regelmäßigen Abständen ausgeführt und codiert die Ausgabe in die SQL-Datenbank um

Schritt 9: Extra: Konfigurieren Sie den SensorBug für den Positionssensorausgang

Extra: Konfigurieren Sie den SensorBug für den Positionssensorausgang
Extra: Konfigurieren Sie den SensorBug für den Positionssensorausgang
Extra: Konfigurieren Sie den SensorBug für den Positionssensorausgang
Extra: Konfigurieren Sie den SensorBug für den Positionssensorausgang

Es ist möglich, den SensorBug auf Android für die Positionserkennungsausgabe zu konfigurieren. Für die Positionsänderungserkennung, die sogenannte Garagentorerkennung, erkennt der SensorBug, ob das Gerät aufrecht steht oder flach liegt. Wenn das Gerät flach ist, ist der aufgezeichnete Wert 0x20 Wenn das Gerät aufrecht steht, ist der Wert 0x02Es macht keinen Unterschied, ob die X- oder Y-Position oben ist, solange die Z-Achse nicht oben oder unten ist. Am einfachsten geht dies mit der LightBlue App. Der SensorBug sollte im Scan-Menü angezeigt werden. Wählen Sie das Gerät aus, das Sie konfigurieren möchten, gehen Sie zu den GATT-Eigenschaften für die Konfiguration des Beschleunigungsmessers UUID:9DC84838-7619-4F09-A1CE-DDCF63225B11

Siehe Bild:Schreiben Sie einen neuen Konfigurationsstring:

010d3f02020000002d00000002Lesen Sie den Konfigurationsstring zurück, um den Schreibvorgang zu bestätigen. Dadurch wird der Beschleunigungsmesser für die Positionserfassung aktiviert.

Empfohlen: