Mục lục:

Theo dõi hóa đơn năng lượng của bạn: 4 bước
Theo dõi hóa đơn năng lượng của bạn: 4 bước

Video: Theo dõi hóa đơn năng lượng của bạn: 4 bước

Video: Theo dõi hóa đơn năng lượng của bạn: 4 bước
Video: Bạn Đang Bị TẤN CÔNG TÂM LINH? Hãy Kiểm Tra 4 DẤU HIỆU Này | BA Universe 2024, Có thể
Anonim
Giám sát hóa đơn năng lượng của bạn
Giám sát hóa đơn năng lượng của bạn

GIỚI THIỆU VỀ DỰ ÁN NÀY

Nếu bạn thực sự muốn làm cho ngôi nhà của mình thông minh hơn, có thể bạn sẽ muốn bắt đầu từ các hóa đơn hàng tháng (tức là năng lượng, khí đốt, v.v.). Như một số người nói, Good for Planet, The Wallet và The Bottom Line. Phần cứng mã nguồn mở là cách của chúng tôi để đạt được sự bền vững trong môi trường gia đình! Ý tưởng này đã giúp chúng tôi xây dựng một giải pháp đơn giản và an toàn, dễ dàng tích hợp với bất kỳ phần mềm tự động hóa gia đình nào vì nó hiển thị dữ liệu qua MQTT (trong trường hợp của chúng tôi, chúng tôi sẽ hướng dẫn bạn cách tích hợp nó vào Home Assistant).

Tổng quat

Để đo mức tiêu thụ năng lượng điện, chúng tôi đã chọn sử dụng Finder Energy Meter, vì nó được thiết kế để sử dụng đường ray DIN và hoàn toàn phù hợp trong tủ chính của ngôi nhà của chúng tôi. Điều thú vị về sản phẩm này là nó có giao diện RS485 Modbus, một giao thức truyền thông tiêu chuẩn công nghiệp giúp việc nói chuyện với Arduino thực sự dễ dàng. Trên thực tế, Arduino đã phát hành một lá chắn chính thức, MKR485 và hai thư viện để giải mã giao thức. Là bo mạch chủ, chúng tôi đã chọn Arduino MKR WiFi 1010, vì nó chia sẻ hệ số hình thức MKR và có kết nối WiFi.

Cảnh báo cài đặt! Kiểm tra các quy định của quốc gia bạn về việc xử lý hệ thống điện trong nhà và cực kỳ cẩn thận vì nó có thể gây chết người! Nếu bạn không biết cách, hãy gọi thợ điện. Bước đầu tiên là lắp đồng hồ vào tủ điện của bạn. Để đảm bảo bạn đang làm việc trong một môi trường an toàn, hãy tắt nguồn điện từ đầu nối điện phía trước hệ thống của bạn và kiểm tra lại bằng đồng hồ vạn năng xem không có điện áp giữa các đầu cuối. Sau đó, đặt đồng hồ đo năng lượng bên trong tủ của bạn và kết nối dây trực tiếp và dây trung tính từ cầu dao chính đến đầu vào của đồng hồ, hãy nhớ sử dụng quy ước màu sắc (xanh lam cho trung tính và nâu / đen / xám cho trực tiếp ở EU). Đầu ra phải được kết nối với phần còn lại của hệ thống.

Các kết nối điện áp chính. Dây phía trên là đầu vào, dây phía trên là đầu ra.

Bước 1: Các bộ phận cần thiết

Các bộ phận cần thiết
Các bộ phận cần thiết

Bước 2: Nhu cầu phần mềm

Nhu cầu phần mềm
Nhu cầu phần mềm

Phần mềm

Khởi động máy tính của bạn và mở IDE của bạn. Bạn có thể sử dụng Arduino IDE hoặc Arduino Create Editor. Mã đáp ứng các yêu cầu sau: Giao tiếp Modbus, quản lý WiFi Giao thức MQTT Modbus là và giao thức mã nguồn mở cho các cảm biến và máy móc công nghiệp. Để làm cho Arduino nói Modbus, chúng ta sẽ sử dụng thư viện Arduino Modbus. Thư viện này đóng gói tất cả các trình xử lý và giúp kết nối bất kỳ thiết bị Modbus nào thực sự nhanh chóng. Vì chúng ta sẽ đọc các thanh ghi, theo dõi biểu dữ liệu của đồng hồ, chúng ta có thể tìm thấy tất cả thông tin chúng ta cần như mã chức năng, địa chỉ của thanh ghi và kích thước của thanh ghi bằng chữ. Nhưng để làm rõ hơn, hãy để chúng tôi giải thích cách hoạt động của Modbus: Các thông báo Modbus tuân theo một cấu trúc đơn giản: 01 03 04 00 16 00 02 25 C7 0x01là Địa chỉ thiết bị 0x03 là Mã chức năng cho thiết bị biết nếu chúng ta muốn đọc hoặc ghi dữ liệu *, trong trường hợp này, đọc các thanh ghi giữ 0x04 cho Byte Count00 16 - Chúng tôi gửi 4 byte địa chỉ thanh ghi (00 16) cho thiết bị biết chúng ta muốn đọc gì 00 02- sau đó kích thước của thanh ghi (00 02) bằng chữ (mỗi từ dài 2 byte) 4 byte cuối cùng là mã CRC. Mã này được tạo ra từ một hàm toán học trên các byte trước đó, điều này đảm bảo thông báo đã được nhận một cách chính xác.

Tích hợp Home Assistant Việc thêm đồng hồ vào Home Assistant khá đơn giản. Giả sử bạn đã cấu hình một nhà môi giới MQTT (Đây là hướng dẫn), tất cả những gì bạn cần làm là thêm các định nghĩa mới trong tệp config.yaml. sensor: - platform: mqtt name: "Main Voltage" state_topic: "energy / main /tage" unit_of_measurement: "V" Ở đây bạn phải đặt tên của phép đo, chủ đề MQTT cần đọc và đơn vị đo của đại lượng. Lưu tệp, kiểm tra cấu hình và tải lại Home Assistant, bây giờ các phép đo sẽ xuất hiện trên trang chính.

Bảng tiêu thụ Trợ lý Trang chủ hiển thị các kết quả đọc hiện tại

Home Assistant sẽ đảm nhận việc tạo đồ thị và tự động hóa các quy trình được kích hoạt bởi các bài đọc của bạn. Hướng dẫn này đã kết thúc, bây giờ tùy thuộc vào bạn để thêm các tính năng và tùy chỉnh nó cho các mục đích của riêng bạn!

Bước 3: Lắp ráp

Tập hợp
Tập hợp
Tập hợp
Tập hợp

Xong? Đã đến lúc vặn chặt kết nối RS485! Chúng tôi sẽ sử dụng cáp đơn đôi xoắn với mặt đất, thường được sử dụng cho các đường dây điện thoại. Với cáp này, bạn có thể truyền trên một khoảng cách xa (1,2 km). Tuy nhiên, chúng tôi chỉ sử dụng một dây cáp đủ dài để thoát ra khỏi tủ và đặt Arduino ở nơi dễ tiếp cận.

Kết nối RS485 của Finder

Giao diện RS485 đặt tên cho các thiết bị đầu cuối của nó là A, B và COM. Một tiêu chuẩn thực tế phổ biến là việc sử dụng TX + / RX + hoặc D + để thay thế cho B (cao cho MARK tức là không hoạt động), TX- / RX- hoặc D- để thay thế cho A (thấp cho MARK tức là không hoạt động) Vì Tấm chắn MKR cũng hỗ trợ Full Duplex, bạn sẽ thấy hai thiết bị đầu cuối khác, Y và Z. Ở đây chúng tôi sẽ vặn đầu kia của cáp vì chúng tôi biết từ biểu dữ liệu rằng giao tiếp bán song công chỉ xảy ra trên các đầu cuối Y và Z. Đầu cuối COM phải được kết nối với ISOGND. Vì chúng tôi sử dụng kết nối bán song công và vì cáp là ngang hàng, chúng tôi phải thiết lập các công tắc trên lá chắn MKR485 để phù hợp với thiết lập của chúng tôi: chúng tôi đặt HALF (2 thành tắt) và kết thúc trên YZ (3 thành TRÊN); cái đầu tiên không quan trọng. Sự kết thúc là một điện trở kết nối hai thiết bị đầu cuối dữ liệu, để làm giảm nhiễu.

Đây chính là nó. Bây giờ bạn có thể đóng tủ và tập trung vào mặt phần mềm!

Bước 4: Mã

Mã số
Mã số

#bao gồm

#include #include #include // thông tin đăng nhập wifi của bạn const char ssid = "**********"; const char pass = "**********";

Mạng WiFiClient; Khách hàng MQTTClient; tỷ giá dài không dấu = 60000; // tốc độ làm mới mặc định tính bằng ms unsigned long lastMillis = 0;

// kết nối hàm void connect () {Serial.print ("kiểm tra wifi…"); while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); chậm trễ (1000); } Serial.print ("\ nconnecting…"); while (! client.connect ("device_name", "user_name", "user_pw")) {// THAY ĐỔI CÀI ĐẶT CỦA BẠN Serial.print ("."); chậm trễ (1000); } Serial.println ("\ nconnected!"); client.subscribe ("năng lượng / chính / tốc độ làm mới"); // chủ đề để đặt tốc độ làm mới từ xa} // mqtt nhận hàm gọi lại void messageReceive (String & topic, String & payload) {Serial.println ("incoming:" + topic + "-" + payload); if (topic == "energy / main / refreshrate") {// tốc độ xử lý refresh rate = payload.toInt () * 1000; Serial.println ("tỷ lệ mới" + String (tỷ lệ)); }}

void setup () {Serial.begin (115200); WiFi.begin (ssid, pass); while (! nối tiếp); client.begin ("broker_ip", net); // THAY ĐỔI ĐỂ PHÙ HỢP VỚI CÀI ĐẶT CỦA BẠN client.onMessage (messageReceive); // khởi động máy khách Modbus RTU if (! modbusRTUClient.begin (9600)) {Serial.println ("Không khởi động được máy khách Modbus RTU!"); trong khi (1); }}

void loop () {client.loop (); if (! client.connected ()) {// kiểm tra kết nối mạng connect (); } // xuất bản thông báo sau khi làm mới trôi qua (quy trình không chặn) if (millis () - lastMillis> rate) {lastMillis = millis (); // thực hiện tất cả các lệnh gọi float volt = readVoltage (); chậm trễ (100); float amp = readCurrent (); chậm trễ (100); đôi watt = readPower (); chậm trễ (100); float hz = readFreq (); chậm trễ (100); double wh = readEnergy (); // công bố kết quả theo chủ đề liên quan client.publish ("energy / main /tage", String (volt, 3)); client.publish ("energy / main / current", String (amp, 3)); client.publish ("energy / main / power", String (watt, 3)); client.publish ("năng lượng / chính / tần số", String (hz, 3)); client.publish ("energy / main / energy", String (wh, 3)); Serial.print (String (volt, 3) + "V" + String (amp, 3) + "A" + String (watt, 3) + "W"); Serial.println (Chuỗi (hz, 3) + "Hz" + Chuỗi (wh, 3) + "kWh"); chậm trễ (100); }}

/ * Các chức năng để đọc các thanh ghi của Finder Energy Meter * * Kiểm tra hướng dẫn sử dụng giao thức modbus để hiểu mã * https://gfinder.findernet.com/public/attachments/7E/EN/PRT_Modbus_7E_64_68_78_86EN.pdf * / float readVoltage () {float vôn = 0.; if (! modbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x000C, 2)) {// thực hiện lệnh gọi đến thanh ghi Serial.print ("không đọc được điện áp!"); Serial.println (ModbusRTUClient.lastError ()); // trình xử lý lỗi} else {uint16_t word1 = ModbusRTUClient.read (); // đọc dữ liệu từ bộ đệm uint16_t word2 = ModbusRTUClient.read (); uint32_t millivolt = word1 << 16 | từ2; // bit toán học volt = millivolt / 1000.0; } trả về vôn; } float readCurrent () {float ampere = 0.; if (! modbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0016, 2)) {Serial.print ("không thể đọc hiện tại!"); Serial.println (ModbusRTUClient.lastError ()); } else {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); int32_t milliamp = word1 << 16 | từ2; ampe = miliampe / 1000.0; } trả về ampe; }

double readPower () {double watt = 0.; if (! modbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0025, 3)) {Serial.print ("không thể đọc nguồn!"); Serial.println (ModbusRTUClient.lastError ()); } else {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); uint16_t word3 = ModbusRTUClient.read (); uint64_t milliwatt; if (word1 >> 7 == 0) {milliwatt = word1

Đề xuất: