Arbeiten mit Python Popular Monitoring mit Raspberry Pi

Beim Versuch, meinen DS18B20-Temperatursensor an mein intelligentes Gewächshaus anzuschließen, stellte ich fest, dass das Internet keine vollständigen Anweisungen zum Anschließen dieses Sensors über die Programmiersprache Python enthält. Ich benutze es, da ich mit der Raspberry Pi-Plattform arbeite. Ich habe beschlossen, dieses Problem zu beheben. Es stellt sich heraus, dass die Arbeit mit TCP nicht so schwierig ist, aber Sie müssen verstehen, was wir tun und warum. Ein zweistündiger Tanz mit einem Tamburin machte mich sichtlich wütend. Daher möchte ich hier zusätzlich zum Softwareteil selbst den gesamten Algorithmus von Anfang bis Ende beschreiben. Ich denke, dass andere Sensoren ähnlich funktionieren, so dass ein großer Artikel für alle gleich ist. Ich hoffe, wenn Sie Ihren Sensor anschließen möchten, brauchen Sie kein Tamburin :) Also, fangen wir an, ich frage Sie nach Habrokat.

Schamanismus mit einem Sensor


Für uns müssen wir den Sensor selbst anschließen. Ich werde mit dem Temperatursensor DS18B20 arbeiten. Vollständige Artikel zu diesem Thema werden nicht dupliziert. Über die Verbindung können Sie hier lesen. Dann müssen wir Daten vom Sensor erhalten. Wir werden das Gleiche tun, wie im obigen Artikel angegeben. Es gibt ein großartiges Python-Beispiel, von dem ich ein Fan bin.

import os tfile=open("/sys/bus/w1/devices/28-000000d7970b/w1_slave") ttext=tfile.read() tfile.close() temp=ttext.split("\n")[1].split(" ")[9] temperature=float(temp[2:])/1000 print temperature 

Vergessen Sie nicht, die Daten durch Ihren Sensor zu ersetzen.

Wie wir sehen können, nimmt die Temperatur die Temperaturvariable an (wer hätte das gedacht), die wir weiter benötigen werden.

Mit Überwachung beschwören


Nun, zuerst müssen Sie narodmon.ru registrieren, diejenigen, die es noch nicht getan haben. Die Service-API bietet uns die Möglichkeit, Daten über TCP zu übertragen. Also lass es uns tun. Wir werden gebeten, den Text in folgendem Format zu übermitteln:

 #MAC[#NAME][#LAT][#LNG][#ELE]\n #mac1#value1[#time1][#name1]\n ... #macN#valueN[#timeN][#nameN]\n ## 

Tatsächlich müssen wir jedoch nur drei Parameter übergeben: den MAC des Geräts, den Namen des Sensors und seinen Wert. Der Rest ist nicht notwendig und wir brauchen ihn nicht wirklich.

In der ersten Zeile müssen wir das Gitter-, MAC- und Zeilenvorschubzeichen \ n übergeben.
In der zweiten und den folgenden Zeilen übertragen wir erneut das Raster, den Sensornamen, erneut das Raster und die Sensorwerte. Wir beenden dies mit dem Zeilenvorschubzeichen \ n.
In der letzten Zeile müssen Sie zwei Gitter übergeben, um das Paket zu vervollständigen.

Infolgedessen bleibt das Format wie folgt:

 #MAC\n #mac1#value1\n #macN#valueN\n ## 

Ein Python-Programm schreiben


Wir werden das Programm in Python 2 schreiben. Der Algorithmus wird so sein. Wir empfangen Daten vom Sensor und schreiben sie in die Temperaturvariable. Dann bilden wir das Paket und senden es an den People Monitoring Server. Wir werden das Skript alle 10 Minuten (das minimal zulässige Intervall für das Senden von Messwerten beträgt 5 Minuten) über cron ausführen.

Das Senden erfolgt wie folgt (Beispiel auf der Überwachungsseite):

Senden Sie den Skriptcode
 #!/usr/bin/env python2 # -*- coding: utf-8 -*- # by Roman Vishnevsky aka.x0x01 @ gmail.com import socket # MAC  .   ! DEVICE_MAC = '0123456789012' #  ,    01 (02)  mac  SENSOR_ID_1 = DEVICE_MAC + '01' SENSOR_ID_2 = DEVICE_MAC + '02' #  ,  float/integer sensor_value_1 = 20 sensor_value_2 = -20.25 #   sock = socket.socket() #   try: #    sock.connect(('narodmon.ru', 8283)) #       sock.send("#{}\n#{}#{}\n##".format(DEVICE_MAC, SENSOR_ID_1, sensor_value_1)) #       # sock.send("#{}\n#{}#{}\n#{}#{}\n##".format(DEVICE_MAC, SENSOR_ID_1, sensor_value_1, SENSOR_ID_2, sensor_value_2)) #   data = sock.recv(1024) sock.close() print data except socket.error, e: print('ERROR! Exception {}'.format(e)) 


Wir sind mit dem Server narodmon.ru:8283 verbunden

Als Ergebnis erhalten wir das folgende Skript:

Code des fertigen Skripts
 #!/usr/bin/env python2 # -*- coding: utf-8 -*- import socket import os import fnmatch # MAC  .   ! DEVICE_MAC = 'FF:FF:FF:FF:FF:FF' #  SENSOR_ID_1 = 'T1' SENSOR_ID_2 = 'T2' #   temperature = [] IDs = [] for filename in os.listdir("/sys/bus/w1/devices"): if fnmatch.fnmatch(filename, '28-031652ddbdff'): with open("/sys/bus/w1/devices/" + filename + "/w1_slave") as fileobj: lines = fileobj.readlines() if lines[0].find("YES"): pok = lines[1].find('=') temperature.append(float(lines[1][pok+1:pok+7])/1000) IDs.append(filename) else: logger.error("Error reading sensor with ID: %s" % (filename)) temperature2 = [] for filename in os.listdir("/sys/bus/w1/devices"): if fnmatch.fnmatch(filename, '28-011563e8d2ff'): with open("/sys/bus/w1/devices/" + filename + "/w1_slave") as fileobj: lines = fileobj.readlines() if lines[0].find("YES"): pok = lines[1].find('=') temperature2.append(float(lines[1][pok+1:pok+7])/1000) IDs.append(filename) else: logger.error("Error reading sensor with ID: %s" % (filename)) sock = socket.socket() # try: sock.connect(('narodmon.ru', 8283)) # ,        sock.send("#{}\n#{}#{}\n#{}#{}\n##".format(DEVICE_MAC, SENSOR_ID_1, str(temperature)[1:-1], SENSOR_ID_2, str(temperature2)[1:-1])) #  data=sock.recv(1024) sock.close() print data except socket.error, e: print('ERROR! Exception {}'.format(e)) print str(temperature)[1:-1] print str(temperature2)[1:-1] 


So sieht das Senden von Daten von zwei Sensoren aus. Wenn Sie dem Sensor einen Namen geben, der mit T beginnt, stellt der Server selbst fest, dass es sich um einen Temperatursensor handelt.

Jetzt müssen wir den Sensor zu cron hinzufügen. Wir geben Folgendes ein: crontab -e und fügen dort die folgende Zeile hinzu:

 */10 * * * * sudo python /home/pi/narod.py 

Wir warten darauf, dass das Skript ausgeführt wird.

Jetzt gehen wir hier narodmon.ru/ip und sehen, ob die Daten übertragen wurden. Wenn alles in Ordnung ist, klicken Sie auf der Hauptseite im Menü auf die Schaltfläche "Gerät hinzufügen" und geben Sie den MAC an. Jetzt können wir alles nach Geschmack anpassen (Name, Typ, Ort usw.). Sie können den Sensor einen Tag nach Beginn der Zeugnisübertragung veröffentlichen.

Das ist alles Ich wünsche Ihnen viel Glück beim Anschließen der Sensoren. Tun Sie es öfter, weil es von zu Hause aus so bequem ist, die Temperatur an dem Ort, an dem Sie unterwegs sind, im Voraus zu sehen.

Wir sehen uns wieder :)

Source: https://habr.com/ru/post/de401313/


All Articles