Talaan ng mga Nilalaman:

Ang iyong Energy Bill Monitor: 4 na Hakbang
Ang iyong Energy Bill Monitor: 4 na Hakbang

Video: Ang iyong Energy Bill Monitor: 4 na Hakbang

Video: Ang iyong Energy Bill Monitor: 4 na Hakbang
Video: MERALCO REQUIREMENTS AT PROCESS SA PAG APPLY NG KUNTADOR NG KURYENTE NG WALANG CONTRACTOR 2024, Nobyembre
Anonim
Ang iyong Energy Bill Monitor
Ang iyong Energy Bill Monitor

TUNGKOL SA PROYEKTO NA ITO

Kung nais mo talagang gawing mas matalino ang iyong bahay, malamang na gugustuhin mong magsimula mula sa iyong buwanang singil (ie enerhiya, gas, atbp …). Tulad ng sinasabi ng ilan, Mabuti para sa Planet, The Wallet at The Bottom Line. Ang open-source na hardware ay ang aming paraan upang maabot ang pagpapanatili sa kapaligiran sa bahay! Dinala kami ng ideyang ito upang bumuo ng isang simple at ligtas na solusyon, madaling maisama sa anumang software ng automation sa bahay dahil inilalantad nito ang data sa MQTT (sa aming kaso ipapakita namin sa iyo kung paano isama ito sa Home Assistant).

Pangkalahatang-ideya

Upang sukatin ang pagkonsumo ng enerhiya sa kuryente, pinili naming gamitin ang Finder Energy Meter, dahil idinisenyo ito para sa paggamit ng DIN rail at ganap na umaangkop sa pangunahing gabinete ng aming bahay. Ang cool na bagay tungkol sa produktong ito ay mayroon itong interface na RS485 Modbus, isang pang-industriya na pamantayan sa komunikasyon na proteksyon na ginagawang talagang madali ang pakikipag-usap sa isang Arduino. Sa katunayan, naglabas ang Arduino ng isang opisyal na kalasag, ang MKR485 at dalawang aklatan upang ma-decode ang protocol. Bilang mainboard, pinili namin ang Arduino MKR WiFi 1010, dahil ibinabahagi nito ang kadahilanan ng form ng MKR at may koneksyon sa WiFi.

Pag-setup ng Babala! Suriin ang mga regulasyon ng iyong bansa tungkol sa pagharap sa iyong sistemang elektrisidad sa bahay at maging labis na mag-ingat dahil maaari itong nakamamatay! Kung hindi mo alam, paano tumawag sa isang elektrisyan. Ang unang hakbang ay i-install ang metro sa iyong de-koryenteng kabinet. Upang matiyak na nagtatrabaho ka sa isang ligtas na kapaligiran, patayin ang kuryente mula sa de-koryenteng terminal nang maaga sa iyong system at i-double check sa multimeter na walang boltahe sa pagitan ng mga terminal. Pagkatapos ay ilagay ang metro ng enerhiya sa loob ng iyong gabinete at ikonekta ang live at walang katuturang mga wire mula sa pangunahing breaker hanggang sa input ng metro, tandaan na gamitin ang kulay na kombensyon (asul para sa walang kinikilingan at kayumanggi / itim / kulay-abo para sa live sa EU). Ang output ay dapat na konektado sa natitirang system.

Pangunahing mga koneksyon sa boltahe. Ang mga wire sa itaas ay input, ang mga wire na lampas ay mga output.

Hakbang 1: Kailangan ng Mga Bahagi

Mga Bahaging Kailangan
Mga Bahaging Kailangan

Hakbang 2: Mga Kailangan ng Software

Mga Kailangan ng Software
Mga Kailangan ng Software

Software

Simulan ang iyong computer at buksan ang iyong IDE. Maaari mong gamitin ang Arduino IDE o Arduino Lumikha ng Editor. Natutugunan ng code ang mga sumusunod na kahilingan: Pakikipag-usap sa Modbus, pamamahala ng WiFiMQTT protocol na Modbus ay at open-source na protokol para sa mga pang-industriya na sensor at makina. Upang magsalita ang Arduino na Modbus, gagamitin namin ang Arduino Modbus library. Ang library na ito ay naka-pack ang lahat ng mga handler at ginagawang hooking up ang anumang aparato ng Modbus na talagang napakabilis. Dahil magbabasa kami ng mga rehistro, kasunod sa datasheet ng metro, mahahanap namin ang lahat ng impormasyong kailangan namin tulad ng mga function code, address ng rehistro at laki ng rehistro sa mga salita. Ngunit upang gawing mas malinaw ito, ipaliwanag namin kung paano gumagana ang Modbus: Ang mga mensahe sa Modbus ay sumusunod sa isang simpleng istraktura: 01 03 04 00 16 00 02 25 C7 0x01ay ang Device Address 0x03 ay ang Function Code na nagsasabi sa aparato kung nais nating basahin o sumulat ng data *, sa kasong ito, basahin ang mga hawak na rehistro 0x04 para sa Byte Count00 16 - Nagpadala kami ng 4 bytes ng rehistro ng rehistro (00 16) na nagsasabi sa aparato kung ano ang nais naming basahin 00 02- pagkatapos ang laki ng rehistro (00 02) sa mga salita (bawat salita ay 2 bytes ang haba) Huling 4 bytes ay CRC code. Ang code na ito ay nabuo mula sa isang pag-andar sa matematika sa mga nakaraang byte, tinitiyak nito na natanggap nang tama ang mensahe.

Pagsasama ng Home Assistant Ang pagdaragdag ng metro sa Home Assistant ay medyo prangka. Ipagpalagay na mayroon kang isang MQTT broker na na-configure (Narito ang gabay), ang kailangan mo lang gawin ay upang magdagdag ng mga bagong kahulugan sa ilalim ng config.yaml file. sensor: - platform: pangalan ng mqtt: "Pangunahing Boltahe" state_topic: "enerhiya / pangunahing / boltahe" unit_of_measurement: "V" Narito kailangan mong ilagay ang pangalan ng pagsukat, ang paksang MQTT na babasahin at ang yunit ng pagsukat ng dami. I-save ang file, suriin ang pagsasaayos at i-reload ang Home Assistant, ngayon ang mga sukat ay lilitaw sa pangunahing pahina.

Ang panel ng pagkonsumo ng Home Assistant ay nagpapakita ng kasalukuyang mga pagbasa

Pangangalaga sa Home Assistant ang paglikha ng mga graph at i-automate ang mga proseso na na-trigger ng iyong mga pagbasa. Tapos na ang tutorial na ito, ngayon nasa sa iyo na magdagdag ng mga tampok at ipasadya ito para sa iyong sariling mga layunin!

Hakbang 3: Magtipon

Magtipun-tipon
Magtipun-tipon
Magtipun-tipon
Magtipun-tipon

Tapos na? Panahon na upang i-tornilyo ang koneksyon sa RS485! Gumagamit kami ng baluktot na solong pares ng cable na may lupa, karaniwang ginagamit para sa mga linya ng telepono. Sa pamamagitan ng cable na ito, maaari kang magpadala sa isang mahabang distansya (1.2 km). Gayunpaman, gumagamit lamang kami ng isang cable sapat na katagal upang lumabas sa gabinete at ilagay ang Arduino sa isang madaling ma-access na lugar.

Koneksyon ng Finder RS485

Pinangalanan ng interface ng RS485 ang mga terminal nito na A, B at COM. Ang isang karaniwang pamantayan ng de-facto ay ang paggamit ng TX + / RX + o D + bilang isang kahalili para sa B (mataas para sa MARK ie idle), TX- / RX- o D- bilang isang kahalili para sa A (mababa para sa MARK ie ie idle) Dahil ang Sinusuportahan din ng MKR kalasag ang Buong Duplex, makikita mo ang dalawang iba pang mga terminal, Y at Z. Dito namin i-tornilyo ang kabilang dulo ng cable dahil alam namin mula sa datasheet na ang komunikasyon na kalahating duplex ay nangyayari lamang sa mga terminal ng Y at Z. Ang terminal ng COM ay dapat na konektado sa ISOGND. Dahil gumagamit kami ng isang koneksyon na half-duplex at dahil ang paglalagay ng kable ay peer-to-peer, kailangan naming i-set up ang mga switch sa kalasag na MKR485 upang tumugma sa aming pag-set up: itinakda namin ang HALF (2 hanggang off) at pagwawakas sa YZ (3 to ON); ang una ay hindi mahalaga. Ang pagwawakas ay isang paglaban na kumukonekta sa dalawang mga terminal ng data, para sa pamamasa ng mga pagkagambala.

Heto na. Ngayon ay maaari mong isara ang gabinete at ituon ang bahagi ng software!

Hakbang 4: Code

Code
Code

# isama

#include #include #include // your wifi credentials const char ssid = "*********"; Const char pass = "*********";

WiFiClient net; MQTTClient client; unsigned mahabang rate = 60000; // default refresh rate in ms unsigned long lastMillis = 0;

// connect function void connect () {Serial.print ("check wifi…"); habang (WiFi.status ()! = WL_CONNected) {Serial.print ("."); pagkaantala (1000); } Serial.print ("\ hindi nag-uugnay …"); habang (! client.connect ("device_name", "user_name", "user_pw")) {// PAGBABAGO UPANG MATCH IYONG SETUP Serial.print ("."); pagkaantala (1000); } Serial.println ("\ nconnected!"); client.subscribe ("enerhiya / pangunahing / pag-refresh"); // paksa upang itakda ang rate ng pag-refresh nang malayuan} // mqtt makatanggap ng pag-andar ng callback na walang bisa na mensaheReceived (String at paksa, String at payload) {Serial.println ("papasok:" + paksa + "-" + payload); kung (paksa == "enerhiya / main / refreshrate") {// rate ng rate ng handler na i-refresh = payload.toInt () * 1000; Serial.println ("bagong rate" + String (rate)); }}

void setup () {Serial.begin (115200); WiFi.begin (ssid, pass); habang (! Serial); client.begin ("broker_ip", net); // CHANGE TO MATCH Your SETUP client.onMessage (messageReceived); // start the Modbus RTU client if (! ModbusRTUClient.begin (9600)) {Serial.println ("Nabigong simulan ang Modbus RTU Client!"); habang (1); }}

void loop () {client.loop (); kung (! client.connected ()) {// suriin ang koneksyon sa koneksyon kumonekta (); } // publish a message pagkatapos ng pag-refresh na lumipas (hindi regular na pag-block) kung (millis () - lastMillis> rate) {lastMillis = millis (); // make all the read calls float volt = readVoltage (); pagkaantala (100); float amp = readCurrent (); pagkaantala (100); doble wat = readPower (); pagkaantala (100); float hz = readFreq (); pagkaantala (100); dobleng wh = readEnergy (); //-publish ang mga resulta sa ilalim ng mga nauugnay na paksa client.publish ("enerhiya / pangunahing / boltahe", String (volt, 3)); client.publish ("enerhiya / pangunahing / kasalukuyang", String (amp, 3)); client.publish ("enerhiya / pangunahing / lakas", String (watt, 3)); client.publish ("enerhiya / pangunahing / dalas", String (hz, 3)); client.publish ("enerhiya / pangunahing / enerhiya", 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"); pagkaantala (100); }}

/ * Mga pagpapaandar upang mabasa ang mga rehistro ng Finder Energy Meter * * Suriin ang manu-manong modbus protocol upang maunawaan ang code * https://gfinder.findernet.com/public/attachments/7E/EN/PRT_Modbus_7E_64_68_78_86EN.pdf * / float readVoltage () {float volt = 0.; kung (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x000C, 2)) {// tumawag sa rehistro ng Serial.print ("nabigo na basahin ang boltahe!"); Serial.println (ModbusRTUClient.lastError ()); // error handler} iba pa {uint16_t word1 = ModbusRTUClient.read (); // read data from the buffer uint16_t word2 = ModbusRTUClient.read (); uint32_t millivolt = word1 << 16 | salita2; // bit math volt = millivolt / 1000.0; } bumalik volt; } float readCurrent () {float ampere = 0. kung (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0016, 2)) {Serial.print ("nabigong basahin ang kasalukuyang!"); Serial.println (ModbusRTUClient.lastError ()); } iba pa {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); int32_t milliamp = word1 << 16 | salita2; ampere = milliamp / 1000.0; } bumalik ampere; }

double readPower () {doble wat = 0.; kung (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0025, 3)) {Serial.print ("nabigong basahin ang lakas!"); Serial.println (ModbusRTUClient.lastError ()); } iba pa {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); uint16_t word3 = ModbusRTUClient.read (); uint64_t milliwatt; kung (word1 >> 7 == 0) {milliwatt = word1

Inirerekumendang: