Membuat Sambungan Mqtt Ke Nrf24 Mesh
by jq_rbp in Circuits > Raspberry Pi
25 Views, 0 Favorites, 0 Comments
Membuat Sambungan Mqtt Ke Nrf24 Mesh
Proyek ini bertujuan untuk menyambungkan mqtt ke nrf24 mesh.
Ringkasan:
1. Jaringan nrf24 Mesh berdasarkan: RF24Mesh oleh nRF24.
2. Mqtt menggunakan mosquitto sebagai broker dan libmosquitto sebagai library-nya.
Untuk instalasi mosquitto broker bisa dilihat di: Komunikasi-Wemos-Dengan-Mosquitto-Mqtt
3. Program dibuat menggunakan bahasa C/C++.
4. Berbeda dengan OpenMQTTGateway, dalam proyek ini, sambungan mqtt klien ke broker berada dalam satu board, yaitu odroid-w (board ini sudah kadaluarsa, tetapi setara dengan raspberry pi zero) dengan rf24 modul tersambung secara langsung ke pin outputnya (SPI).
5. Mqtt digunakan supaya nantinya dapat disambungkan dengan interface lain, seperti Home Assistant (misal: Menghubungkan-HomeAssistant-Dengan-Mosquitto) atau openHAB, dll.
Alasan:
1. Untuk membebaskan sambungan networking, terutama wifi dari komunikasi mqtt yang terkadang mengganggu alur transfer data (internet, browser, P2P, dll) dalam saluran TCP/IP.
2. Memperluas area jaringan mqtt dalam komunikasi 2.4GHz menggunakan sistem mesh. Dengan ini, komponen node / klien dapat berada lebih jauh dari mqtt broker (selama mesh klien ke klien masih dapat tersambung) dibandingkan jika menggunakan sambungan nirkabel langsung mqtt melalui sambungan router / wifi, seperti menggunakan sambungan wemos d1 - wifi hotspot raspberry pi.
Kekurangan:
Jumlah node / klien untuk satu jaringan nrf24 mesh hanya mencapai 255 klien (referensi: Jumlah klien ID RF24Mesh) dibandingkan jumlah mqtt klien yang bisa mencapai jumlah sebesar 23 bytes.
Supplies
Peralatan untuk tes:
1. Odroid w (mirip raspberry pi zero, tetapi tanpa wifi) menggunakan distro raspbian buster. Jumlah: 1.
2. stm32f103 board, khususnya model Black Pill (STM32F103_boards). Jumlah: 1.
3. modul nrf24L01. Jumlah: 2, satu untuk odroid w sebagai master dan satu untuk stm32f103 sebagai klien.
4. (optional) relay board.
Persyaratan Perangkat Lunak
Perangkat Lunak yang diperlukan antara lain:
1. Raspbian.
2. Mosquitto (broker).
3. Arduino (untuk pemrograman stm32f103).
4. Internet (untuk pengunduhan kode).
5. Git.
6. (optional) mosquitto-clients, khususnya mosquitto_pub
7. (optional) homeassistant
//
Dalam proyek ini, diasumsikan bahwa mqtt broker (mosquitto) sudah terinstal dan siap digunakan.
Untuk detail cara instalasi mosquitto dapat dilihat di: Membuat-Mqtt-Broker-Memakai-Mosquitto.
Selan itu, sistem operasi raspbian juga sudah diinstal dan dapat diakses melalui ssh / jaringan TCP/IP.
Git juga diasumsikan telah terinstal dalam raspbian dan siap untuk digunakan.
//
Untuk melakukan kompilasi program sambungan mqtt ke rf24, diperlukan beberapa program lain, terutama:
1. RF24 Core Radio Library
2. RF24Network Library
3. RF24Mesh - Dynamic Mesh Library
4. Libmosquitto-dev
5. libcrypto-dev
6. libssl-dev
7. libboost-system-dev
Kompilasi Perangkat Lunak
1. Masuk ke dalam raspbian kemudian buat folder baru untuk menampung kompilasi perangkat lunak yang akan dilakukan, lalu masuk ke dalamnya:
$ mkdir sambungan-mqtt-nrf24
$ cd sambungan-mqtt-nrf24
2. Unduh dan buat RF24 Library:
$ git clone https://github.com/nRF24/RF24
$ cd RF24
$ sudo make install
3. Kembali ke direktori sebelumnya (sambungan-mqtt-nrf24):
$ cd ..
4. Unduh dan buat RF24Network Library:
$ git clone https://github.com/nRF24/RF24Network
$ cd RF24Network
$ sudo make install
5. Kembali ke direktori sebelumnya (sambungan-mqtt-nrf24):
$ cd ..
6. Unduh dan buat RF24Mesh Library:
$ git clone https://github.com/nRF24/RF24Mesh
$ cd RF24Mesh
$ sudo make install
7. Kembali ke direktori sebelumnya (sambungan-mqtt-nrf24):
$ cd ..
8. Install libmosquitto-dev dan library yang lain yang diperlukan untuk kompilasi:
$ sudo apt install libmosquitto-dev libssl-dev libboost-system-dev libcrypto++-dev
*Catatan: libboost-dev biasanya membutuhkan waktu yang lama.
9. Unduh kode untuk sambungan mqtt ke rf24 (rpi-rf24-master):
$ git clone https://github.com/jqrbp/rpi-nrf24-master
$ cd rpi-nrf24-master
$ make
$ cd bin
$ ls -al
Jika kompilasi berhasil, maka akan terdapat 3 file baru di direktori bin:
-rw-r--r-- 1 jeki jeki 252 Jun 29 06:35 mosquitto_default.conf
-rwxr-xr-x 1 jeki jeki 47052 Jun 29 06:35 rpi_nrf24_master
-rw-r--r-- 1 jeki jeki 384 Jun 29 06:35 rpi_nrf24_master.conf
Sesuaikan file rpi_nrf24_master.conf sesuai dengan konfigurasi mosquitto yang telah terinstal sebelumnya, terutama untuk bagian konfigurasi mqtt-nya. Atur juga sertifikat kriptografi yang sesuai dengan konfigurasi mqtt mosquitto. Dalam folder certs terdapat contoh sertifikat yang telah dibuat dan dapat digunakan untuk localhost.
Apabila konfigurasi mqtt dalam mosquitto dan rpi_nrf24_master.conf sudah sesuai, program sambungan mqtt ke rf24 pun bisa dijalankan (masih dalam direktori bin):
$ sudo ./rpi_nrf24_master
Apabila mqtt berhasil terkoneksi, maka output program akan menjadi seperti ini:
mqtt connected!
connect callback, rc=0
Jika gagal, maka akan muncul pesan:
connection error!
Menyiapkan Klien
Dalam proyek ini, karena board klien yang digunakan adalah stm32f103 mini (black pill), maka program arduino yang digunakan perlu dikonfigurasi dengan api / board manager stm32f103, terutama yang berdasarkan pada: Arduino_STM32
Kode yang digunakan dapat dilihat dalam direktori arduino_src dari kode git yang telah didonlot pada langkah sebelumnya dari https://github.com/jqrbp/rpi-nrf24-master
Dalam direktori certs terdapat sertifikat yang dapat digunakan
Tes Untuk Nrf24 Mesh Klien Melalui Serial
Serial tes:
Beberapa perintah yang bisa digunakan melalui serial untuk nrf24 klien (stm32f103 board):
g -> melihat id
i, -> mengatur nrf24 klien id,
s,, , -> mengatur pin output.
Tes Mengirim Perintah Mqtt Ke Nrf24 Klien
Untuk mengirimkan command dari mqtt ke nrf24 klien bisa melalui topik: homebridge/from/set/
dengan format perintah: ,, ,!
misal: rf0,1,28,0! -> akan mengirimkan perintah untuk mengubah output pin dari mqtt klien = rf0, nrf24 mesh klien id = 1, pin = 28, dan output = 0
Misal dengan program mosquitto, perintah mqtt ini bisa dikirimkan dengan perintah:
$ mosquitto_pub -h host -p port -u username -P password --cafile cafile --cert certfile --key keyfile -t topic -m <wrf_id>,<nrf24_id>,<pin>,<value>!
contoh:
$ mosquitto_pub -h localhost -p 8883 -u mqttuser -P mqttpass --cafile /etc/mosquitto/ca_certificates/ca.crt --cert /etc/mosquitto/certs/client.crt --key /etc/mosquitto/certs/client.key -t homebridge/from/set/rf0 -m rf0,1,28,0!
akan mengirimkan perintah untuk mengubah output pin dari mqtt klien (rpi-nrf24-master) dengan id = rf0, ke nrf24 klien dengan id = 1, pin = 28, dan output = 28.
Tes Menggunakan Homeassistant
Dalam tes ini, diasumsikan homeassistant sudah terinsal dan berjalan dengan baik.
Untuk referensi instalasi homeassistant bisa dilihat di sini: Menghubungkan-HomeAssistant-Dengan-Mosquitto
Untuk menggunakan homeassistant dengan program rpi-nrf24-master ini, tambah konfigurasi mqtt dan switch ke dalam konfigurasi homeassistant yang telah berjalan.
Misal tambahkan konfigurasi berikut dalam file konfigurasi homeassistant (di sini file configuration.yaml):
mqtt:
broker: localhost
port: 8883
client_id: hass
username: mqttuser
password: mqttpass
certificate: /etc/mosquitto/ca_certificates/ca.crt
client_cert: /etc/mosquitto/certs/client.crt
client_key: /etc/mosquitto/certs/client.key
tls_insecure: false
switch:
- platform: mqtt
name: stm32f103 led pin no.28 (PB12)
command_topic: "homebridge/from/set/rf0"
payload_on: 'rf0,1,28,0!'
payload_off: 'rf0,1,28,1!'
state_topic: "homebridge/to/set"
availability_topic: "homebridge/to/set/reachability"
payload_available: 'rf0,1!'
*Catatan:
1. homeassistant yang terbaru tidak mensupport tls 1.1:
ERROR (MainThread) [homeassistant.components.mqtt] Failed to connect due to exception: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:1056)
- Oleh karena itu, tls_version dari konfigurasi mosquitto dapat dihapus dahulu supaya otomatis terkonfigurasi.
2. konfigurasi mqtt dari homeassistant harus disesuaikan dengan konfigurasi mosquitto, terutama untuk username, password, sertifikat, dll.