Pantau Konsumsi Energi dengan Modbus, MKR WiFi 1010 & RS485
Komponen dan perlengkapan
Arduino MKR WiFi 1010
×
1
Arduino MKR 485 Shield
×
1
Kabel USB-A ke Micro-USB
×
1
USB Power Supply
Sumber daya apa pun yang kompatibel. MKR485 shield memiliki konverter buck 7-24V bawaan.
×
1
Kabel pasangan tunggal terpintal terlindung
×
1
Alat dan mesin yang diperlukan
Digilent Mastech MS8217 Autorange Digital Multimeter
Gunting Listrik
Obeng pipih kecil
untuk terminal MKR485
Obeng philips ukuran sedang
Aplikasi dan layanan online
Home Assistant
Arduino Web Editor
MQTT
Tentang proyek ini
Jika Anda benar-benar ingin membuat rumah Anda lebih cerdas, Anda mungkin akan mulai dari tagihan bulanan Anda (misalnya energi, gas, dll.). Seperti yang dikatakan, Baik untuk Bumi, Dompet, dan Garis Bawah. Perangkat keras open source adalah jalan kami untuk mencapai keberlanjutan di lingkungan rumah! Ide ini membawa kami untuk membangun solusi sederhana dan aman, mudah diintegrasikan dengan perangkat lunak otomatisasi rumah apa pun karena ia mengekspos data melalui MQTT (dalam kasus ini kami akan menunjukkan bagaimana mengintegrasikannya ke Home Assistant).
Ringkasan
Untuk mengukur konsumsi energi listrik, kami memilih untuk menggunakan Finder Energy Meter, karena dirancang untuk penggunaan rel DIN dan cocok dengan lemari utama rumah kami. Hal yang keren tentang produk ini adalah ia memiliki antarmuka RS485 Modbus, protokol komunikasi standar industri yang membuat berbicara dengan Arduino sangat mudah. Bahkan, Arduino telah merilis shield resmi, MKR485 dan dua library untuk mendekode protokol. Sebagai papan utama, kami memilih Arduino MKR WiFi 1010, karena berbagi bentuk MKR dan memiliki konektivitas WiFi.
Setup
Peringatan! Periksa peraturan negara Anda tentang menangani sistem listrik rumah Anda dan berhati-hati karena bisa berbahaya! Jika Anda tidak tahu bagaimana, panggil listrik. Langkah pertama adalah memasang meter di lemari listrik Anda. Untuk memastikan Anda bekerja dalam lingkungan yang aman, matikan daya dari terminal listrik sebelum sistem Anda dan periksa lagi dengan multimeter bahwa tidak ada tegangan di antara terminal.
Kemudian tempatkan meter energi di dalam lemari Anda dan hubungkan kabel live dan neutral dari breaker utama ke input meter, ingat untuk menggunakan konvensi warna (biru untuk neutral dan coklat/hitam/abu-abu untuk live di EU). Output harus terhubung ke sisa sistem.
Selesai? Saatnya memasang koneksi RS485! Kami akan menggunakan kabel pasangan tunggal terpintal dengan ground, biasanya digunakan untuk garis telepon. Dengan kabel ini Anda dapat mentransmisikan jarak jauh (1,2 km). Namun kami hanya menggunakan kabel yang cukup panjang untuk keluar dari lemari dan menempatkan Arduino di tempat yang dapat diakses.
Antarmuka RS485 menamai terminalnya A, B dan COM.
Karena MKR shield juga mendukung Full Duplex, Anda akan melihat dua terminal lain, Y dan Z. Di sini kita akan memasang ujung kabel lain, karena kita tahu dari datasheet bahwa komunikasi duplex setengah hanya terjadi pada terminal Y dan Z. Terminal COM harus dihubungkan ke ISOGND. Karena kita menggunakan koneksi duplex setengah dan karena kabelingnya peer-to-peer, kita harus mengatur saklar pada MKR485 shield agar sesuai dengan pengaturan kami: kami mengatur HALF (2 ke OFF) dan terminasi pada Y-Z (3 ke ON); yang pertama tidak masalah. Terminasi adalah resistensi yang menghubungkan dua terminal data, untuk meredam gangguan.
Itu saja. Sekarang Anda dapat menutup lemari dan fokus pada sisi perangkat lunak!
Perangkat Lunak
Nyalakan komputer Anda dan buka IDE Anda. Anda dapat menggunakan Arduino IDE atau Arduino Create Editor. Kode memenuhi permintaan berikut:
Komunikasi Modbus,
Manajemen WiFi
Protokol MQTT
Modbus adalah protokol open source untuk sensor dan mesin industri. Untuk membuat Arduino berbicara Modbus, kita akan menggunakan Arduino Modbus library. Library ini mengemas semua handler dan membuat menghubungkan perangkat Modbus apa pun sangat cepat. Karena kita akan membaca register, mengikuti datasheet meter, kita dapat menemukan semua informasi yang kita butuhkan seperti kode fungsi, alamat register dan ukuran register dalam kata. Namun untuk membuatnya lebih jelas, biarkan kami menjelaskan cara kerja Modbus:
Pesan Modbus mengikuti struktur sederhana:
01 03 04 00 16 00 02 25 C7
0x01 adalah Alamat Perangkat
0x03 adalah Kode Fungsi yang memberi tahu perangkat apakah kita ingin membaca atau menulis data *dalam kasus ini membaca holding registers
0x04 untuk Byte Count00 16 - Kami mengirim 4 byte alamat register (00 16) yang memberi tahu perangkat apa yang ingin kita baca
00 02 - tlalu ukuran register (00 02) dalam kata (setiap kata panjangnya 2 byte)
4 byte terakhir adalah kode CRC. Kode ini dihasilkan dari fungsi matematika atas byte sebelumnya, ini memastikan pesan telah diterima dengan benar.
Di Arduino semua hal ini ditangani dalam kondisi if :
// Created by Alberto Perro - Officine Innesto // // Read integer from a modbus device holding registers float readCurrent(){ float ampere = 0.; //next command format the request and send it over RS485 if (!ModbusRTUClient.requestFrom(0x01, HOLDING_REGISTERS, 0x0016, 2)) { //Error Handling Serial.print("failed to read voltage! "); Serial.println(ModbusRTUClient.lastError()); } else { uint16_t word1 = ModbusRTUClient.read(); //reading MSW from buffer uint16_t word2 = ModbusRTUClient.read(); //reading LSW from buffer int32_t milliamp = word1 << 16 | word2; //join words to retreive int ampere = milliamp/1000.0; //convert to ampere } return ampere;}
Di bagian else kita memiliki response handler.
Karena register ini panjangnya dua kata, kita harus menggabungkannya dengan matematika biner. Kami membaca kata dari buffer dan menyimpannya dalam unsigned integer 16-bit (2 byte atau kata), lalu kita menggabungkannya dalam signed integer 32-bit dengan bitshifting kata pertama ke kiri dan menerapkan OR atas kata kedua. Dengan cara ini kita mendapatkan pengukuran arus dalam mA, membaginya dengan 1000 kita mendapatkan arus dalam ampere.
Proses yang sama disesuaikan untuk semua yang ingin kita baca.
Sisa kode didedikasikan untuk menangani jaringan MQTT dan WiFi.
Integrasi Home Assistant
Menambahkan meter ke Home Assistant cukup sederhana. Asumsi Anda memiliki MQTT broker yang terkonfigurasi (Di sini panduan), yang perlu Anda lakukan adalah menambahkan definisi baru di bawah file configuration.yaml.
Di sini Anda harus memasukkan nama pengukuran, topik MQTT untuk dibaca dan satuan ukuran dari kuantitas. Simpan file, periksa konfigurasi dan muat ulang Home Assistant, sekarang pengukuran akan muncul di halaman utama.
Home Assistant akan menangani pembuatan grafik dan mengotomatisasi proses yang dipicu oleh pembacaan Anda. Tutorial ini telah selesai, sekarang terserah Anda untuk menambahkan fitur dan menyesuaikannya untuk keperluan Anda sendiri!
Kode
Modbus RTU to MQTT bridge for Finder
Sketch ini menyediakan jembatan lengkap antara meter energi finder dan mqtt. Dikembangkan untuk memantau biaya dan penggunaan listrik di Casa Jasmina.