Bekerja dengan Pemantauan Populer Python dengan Raspberry Pi

Mencoba menghubungkan sensor suhu DS18B20 saya ke rumah kaca pintar saya , saya menemukan bahwa Internet tidak memiliki instruksi lengkap untuk menghubungkan sensor ini melalui bahasa pemrograman Python. Saya menggunakannya karena saya bekerja dengan platform Raspberry Pi. Saya memutuskan untuk memperbaiki masalah ini. Ternyata bekerja dengan TCP tidak begitu sulit, tetapi Anda perlu memahami apa yang kami lakukan dan mengapa. Tarian dua jam dengan rebana jelas membuatku kesal. Jadi di sini, selain bagian perangkat lunak itu sendiri, saya ingin memberi tahu seluruh algoritme dari awal hingga akhir. Saya pikir sensor lain bekerja dengan cara yang sama, jadi artikel yang besar akan sama untuk semua orang. Saya harap jika Anda ingin menghubungkan sensor Anda, Anda tidak perlu rebana :) Jadi, mari kita mulai, saya minta Habrokat.

Shamanisme dengan sensor


Bagi kami, kami perlu menghubungkan sensor itu sendiri. Saya akan bekerja dengan sensor suhu DS18B20. Artikel lengkap tentang topik ini, kami tidak akan menggandakannya. Anda dapat membaca tentang koneksi di sini . Maka kita perlu mendapatkan data dari sensor. Kami akan melakukan hal yang sama seperti yang ditunjukkan pada artikel di atas. Ada contoh Python besar yang saya suka.

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

Jangan lupa ganti data dengan sensor Anda.

Seperti yang dapat kita lihat, suhu mengambil variabel suhu (siapa yang mengira), yang akan kita butuhkan lebih lanjut.

Sesuaikan dengan pemantauan


Nah, pertama-tama Anda perlu mendaftarkan narodmon.ru , mereka yang belum melakukannya. API layanan menawarkan kami untuk mengirimkan data melalui TCP. Jadi mari kita lakukan. Kami diminta untuk menyampaikan teks dalam format berikut:

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

Namun pada kenyataannya, kita hanya perlu melewati tiga parameter: MAC perangkat, nama sensor dan nilainya. Sisanya tidak perlu, dan kita tidak benar-benar membutuhkannya.

Pada baris pertama kita harus melewati karakter kisi, MAC, dan umpan baris \ n.
Pada baris kedua dan selanjutnya, kita kembali mentransfer grid, nama sensor, lagi grid dan pembacaan sensor. Kami mengakhiri ini dengan karakter linefeed \ n.
Di baris terakhir Anda harus melewati dua kisi untuk menyelesaikan paket.

Hasilnya, formatnya tetap sebagai berikut:

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

Menulis Program Python


Kami akan menulis program dengan Python 2. Algoritma akan seperti ini. Kami menerima data dari sensor dan menuliskannya ke variabel suhu. Kemudian kami membentuk paket dan mengirimkannya ke People Monitoring Server. Kami akan menjalankan skrip setiap 10 menit (interval minimum yang diizinkan untuk mengirim bacaan adalah 5 menit) melalui cron.

Pengiriman terjadi sebagai berikut (contoh di situs pemantauan):

Kirim Kode Skrip
#!/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))


Kami terhubung ke server narodmon.ru:8283

Akibatnya, kami mendapatkan skrip ini:

Kode skrip yang sudah selesai
#!/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]


Seperti inilah bentuk pengiriman data dari dua sensor. Jika Anda memberi nama sensor dimulai dengan T, maka server itu sendiri akan menentukan bahwa itu adalah sensor suhu.

Sekarang kita perlu menambahkan sensor ke cron. Kami ketik: crontab -edan tambahkan baris berikut di sana:

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

Kami sedang menunggu skrip dijalankan.

Sekarang kita buka di sini narodmon.ru/ip dan lihat apakah datanya ditransmisikan. Jika semuanya beres, lalu klik tombol "Tambah perangkat" pada halaman utama di menu dan tentukan MAC. Sekarang kita bisa menyesuaikan semuanya sesuai selera (nama, tipe, lokasi, dll.). Anda dapat membuat sensor publik satu hari setelah dimulainya transmisi kesaksian.

Itu saja. Semoga beruntung dalam menghubungkan sensor. Lakukan lebih sering, karena sangat nyaman dari rumah untuk melihat suhu terlebih dahulu di tempat tujuan Anda.

Sampai jumpa lagi :)

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


All Articles