Daftar Isi:

Monitor Tagihan Energi Anda: 4 Langkah
Monitor Tagihan Energi Anda: 4 Langkah

Video: Monitor Tagihan Energi Anda: 4 Langkah

Video: Monitor Tagihan Energi Anda: 4 Langkah
Video: Cara atasi tagihan Listrik yang membengkak di tempat Kost atau ruko dengan kwh meter DWH 75Sd 2024, Juli
Anonim
Monitor Tagihan Energi Anda
Monitor Tagihan Energi Anda

TENTANG PROYEK INI

Jika Anda benar-benar ingin membuat rumah Anda lebih pintar, Anda mungkin ingin memulai dari tagihan bulanan Anda (yaitu energi, gas, dll…). Seperti yang dikatakan beberapa orang, Good for Planet, The Wallet, dan The Bottom Line. Perangkat keras sumber terbuka adalah cara kami untuk mencapai keberlanjutan di lingkungan rumah! Ide ini membawa kami untuk membangun solusi yang sederhana dan aman, mudah diintegrasikan dengan perangkat lunak otomatisasi rumah apa pun karena ini memaparkan data melalui MQTT (dalam kasus kami, kami akan menunjukkan cara mengintegrasikannya ke Asisten Rumah).

Gambaran

Untuk mengukur konsumsi energi listrik, kami memilih untuk menggunakan Finder Energy Meter, karena dirancang untuk penggunaan DIN rail dan sangat pas di lemari utama rumah kami. Hal keren tentang produk ini adalah ia memiliki antarmuka Modbus RS485, protokol komunikasi standar industri yang membuat berbicara dengan Arduino sangat mudah. Faktanya, Arduino telah merilis perisai resmi, MKR485 dan dua perpustakaan untuk memecahkan kode protokol. Sebagai mainboard, kami memilih Arduino MKR WiFi 1010, karena berbagi faktor bentuk MKR dan memiliki konektivitas WiFi.

PengaturanPeringatan! Periksa peraturan negara Anda tentang menangani sistem kelistrikan rumah Anda dan berhati-hatilah karena dapat mematikan! Jika Anda tidak tahu caranya, hubungi teknisi listrik. Langkah pertama adalah memasang meteran di kabinet listrik Anda. Untuk memastikan Anda bekerja di lingkungan yang aman, matikan daya dari terminal listrik di depan sistem Anda dan periksa kembali dengan multimeter bahwa tidak ada tegangan di antara terminal. Kemudian letakkan pengukur energi di dalam kabinet Anda dan hubungkan kabel hidup dan netral dari pemutus utama ke input pengukur, ingatlah untuk menggunakan konvensi warna (biru untuk netral dan coklat/hitam/abu-abu untuk siaran langsung di UE). Output harus terhubung ke seluruh sistem.

Sambungan tegangan utama. Kabel di atas adalah input, kabel di luar adalah output.

Langkah 1: Bagian yang Dibutuhkan

Bagian yang Dibutuhkan
Bagian yang Dibutuhkan

Langkah 2: Kebutuhan Perangkat Lunak

Kebutuhan Perangkat Lunak
Kebutuhan Perangkat Lunak

Perangkat lunak

Mulai 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 dan protokol sumber terbuka untuk sensor dan mesin industri. Untuk membuat Arduino talk Modbus, kita akan menggunakan library Arduino Modbus. Pustaka ini mengemas semua penangan dan membuat menghubungkan perangkat Modbus dengan sangat cepat. Karena kita akan membaca register, mengikuti lembar data meter, kita dapat menemukan semua informasi yang kita butuhkan seperti kode fungsi, alamat register dan ukuran register dalam kata-kata. Namun agar lebih jelas, mari kita jelaskan cara kerja Modbus: Pesan Modbus mengikuti struktur sederhana: 01 03 04 00 16 00 02 25 C7 0x01adalah Device Address 0x03 adalah Kode Fungsi yang memberi tahu perangkat jika kita ingin membaca atau menulis data *, dalam hal ini, baca holding register 0x04 untuk Byte Count00 16 - Kami mengirim 4 byte alamat register (00 16) yang memberi tahu perangkat apa yang ingin kami baca 00 02- lalu ukuran register (00 02) dalam kata-kata (setiap kata panjangnya 2 byte) 4 byte terakhir adalah kode CRC. Kode ini dihasilkan dari fungsi matematika di atas byte sebelumnya, ini memastikan pesan telah diterima dengan benar.

Integrasi Asisten RumahMenambahkan meteran ke Asisten Rumah cukup mudah. Dengan asumsi Anda memiliki broker MQTT yang dikonfigurasi (Berikut adalah panduannya), yang perlu Anda lakukan adalah menambahkan definisi baru di bawah file configuration.yaml. sensor: - platform: mqtt nama: "Tegangan Utama" state_topic: "energi/utama/tegangan" unit_of_measurement: "V" Di sini Anda harus memasukkan nama pengukuran, topik MQTT yang akan dibaca dan satuan besaran. Simpan file, periksa konfigurasi dan muat ulang Home Assistant, sekarang pengukuran akan muncul di halaman utama.

Panel konsumsi Asisten Rumah menampilkan bacaan saat ini

Asisten Rumah akan menangani pembuatan grafik dan mengotomatiskan proses yang dipicu oleh pembacaan Anda. Tutorial ini telah selesai, sekarang terserah Anda untuk menambahkan fitur dan menyesuaikannya untuk tujuan Anda sendiri!

Langkah 3: Merakit

Berkumpul
Berkumpul
Berkumpul
Berkumpul

Selesai? Saatnya memasang koneksi RS485! Kami akan menggunakan kabel twisted pair dengan ground, biasanya digunakan untuk saluran telepon. Dengan kabel ini, Anda dapat mentransmisikan jarak jauh (1,2 km). Namun, kami hanya menggunakan kabel yang cukup panjang untuk keluar dari kabinet dan menempatkan Arduino di tempat yang mudah dijangkau.

Koneksi Finder RS485

Antarmuka RS485 menamai terminalnya A, B dan COM. Standar de-facto yang umum adalah penggunaan TX+/RX+ atau D+ sebagai alternatif untuk B (tinggi untuk MARK yaitu idle), TX-/RX- atau D- sebagai alternatif untuk A (rendah untuk MARK yaitu idle) Sejak Pelindung MKR juga mendukung Full Duplex, Anda akan melihat dua terminal lain, Y dan Z. Di sini kita akan memasang ujung kabel yang lain karena kita tahu dari datasheet bahwa komunikasi half-duplex hanya terjadi pada terminal Y dan Z. Terminal COM harus terhubung ke ISOGND. Karena kami menggunakan koneksi half-duplex dan karena pengkabelan adalah peer-to-peer, kami harus mengatur sakelar pada pelindung MKR485 agar sesuai dengan pengaturan kami: kami mengatur HALF (2 ke off) dan penghentian pada YZ (3 ke PADA); yang pertama tidak masalah. Terminasi adalah resistansi yang menghubungkan dua terminal data, untuk meredam interferensi.

Ini dia. Sekarang Anda dapat menutup kabinet dan fokus pada sisi perangkat lunak!

Langkah 4: Kode

Kode
Kode

#termasuk

#include #include #include //kredensial wifi Anda const char ssid = "**********"; const char pass = "**********";

jaringan WiFiClient; klien MQTTClient; tingkat panjang yang tidak ditandatangani = 60000; // kecepatan refresh default dalam ms unsigned long lastMillis = 0;

//koneksi fungsi void connect() { Serial.print("memeriksa wifi…"); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); penundaan (1000); } Serial.print("\nmenghubungkan…"); while (!client.connect("device_name", "user_name", "user_pw")) { //CHANGE TO MATCH YOUR SETUP Serial.print("."); penundaan (1000); } Serial.println("\nterhubung!"); client.subscribe("energi/utama/refresh"); //topik untuk mengatur kecepatan refresh dari jarak jauh } //mqtt menerima fungsi panggilan balik void messageReceived(String &topic, String &payload) { Serial.println("incoming: " + topic + " - " + payload); if(topic == "energy/main/refreshrate"){ //refresh rate handler rate = payload.toInt()*1000; Serial.println("nilai baru "+String(tarif)); } }

void setup() { Serial.begin(115200); WiFi.begin(ssid, pass); while (!Serial); client.begin("broker_ip", bersih); //UBAH UNTUK SESUAI DENGAN KONFIGURASI ANDA client.onMessage(messageReceived); // memulai klien Modbus RTU if (!ModbusRTUClient.begin(9600)) { Serial.println("Gagal memulai Klien Modbus RTU!"); sementara (1); } }

void loop() { klien.loop(); if (!client.connected()) { //periksa koneksi jaringan connect(); } // mempublikasikan pesan setelah penyegaran berlalu (rutin tanpa pemblokiran) if (millis() - lastMillis > rate) { lastMillis = millis(); //membuat semua panggilan baca float volt = readVoltage(); penundaan(100); float amp = readCurrent(); penundaan(100); watt ganda = readPower(); penundaan(100); float hz = readFreq(); penundaan(100); ganda wh = readEnergi(); //mempublikasikan hasil di bawah topik terkait client.publish("energi/utama/tegangan", String(volt, 3)); client.publish("energi/utama/arus", String(amp, 3)); client.publish("energi/utama/daya", String(watt, 3)); client.publish("energi/utama/frekuensi", String(hz, 3)); client.publish("energi/utama/energi", String(wh, 3)); Serial.print(String(volt, 3)+"V "+String(amp, 3)+"A "+String(watt, 3)+"W "); Serial.println(String(hz, 3)+"Hz "+String(wh, 3)+"kWh"); penundaan(100); } }

/* Berfungsi untuk membaca register Finder Energy Meter * * Periksa manual protokol modbus untuk memahami kodenya * https://gfinder.findernet.com/public/attachments/7E/EN/PRT_Modbus_7E_64_68_78_86EN.pdf */ float readVoltage(){ float volt = 0.; if (!ModbusRTUClient.requestFrom(0x01, HOLDING_REGISTERS, 0x000C, 2)) { //memanggil register Serial.print("gagal membaca tegangan! "); Serial.println(ModbusRTUClient.lastError()); //penangan kesalahan }else{ uint16_t word1 = ModbusRTUClient.read(); //membaca data dari buffer uint16_t word2 = ModbusRTUClient.read(); uint32_t milivolt = kata1 << 16 | kata2; //bit matematika volt = milivolt/1000.0; } tegangan kembali; } float readCurrent(){ float ampere = 0.; if (!ModbusRTUClient.requestFrom(0x01, HOLDING_REGISTERS, 0x0016, 2)) { Serial.print("gagal membaca arus! "); Serial.println(ModbusRTUClient.lastError()); }else{ uint16_t word1 = ModbusRTUClient.read(); uint16_t word2 = ModbusRTUClient.read(); int32_t milliamp = word1 << 16 | kata2; ampere = miliamp/1000.0; } kembali ampere; }

double readPower(){ double watt = 0.; if (!ModbusRTUClient.requestFrom(0x01, HOLDING_REGISTERS, 0x0025, 3)) { Serial.print("gagal membaca daya! "); Serial.println(ModbusRTUClient.lastError()); }else{ uint16_t word1 = ModbusRTUClient.read(); uint16_t word2 = ModbusRTUClient.read(); uint16_t word3 = ModbusRTUClient.read(); uint64_t miliwatt; if(word1 >> 7 == 0){ milliwatt = word1

Direkomendasikan: