Kazalo:

Monitor vašega računa za energijo: 4 koraki
Monitor vašega računa za energijo: 4 koraki

Video: Monitor vašega računa za energijo: 4 koraki

Video: Monitor vašega računa za energijo: 4 koraki
Video: Моя работа наблюдать за лесом и здесь происходит что-то странное 2024, Julij
Anonim
Vaš monitor računa za energijo
Vaš monitor računa za energijo

O TEM PROJEKTU

Če želite resnično narediti svoj dom pametnejši, boste verjetno želeli začeti z mesečnimi računi (to je energija, plin itd.). Kot nekateri pravijo, Good for Planet, The Wallet in The Bottom Line. Odprtokodna strojna oprema je naš način doseganja trajnosti v domačem okolju! Ta zamisel nas je pripeljala do izdelave preproste in varne rešitve, ki je enostavna za integracijo s katero koli programsko opremo za avtomatizacijo doma, saj razkriva podatke prek MQTT (v našem primeru vam bomo pokazali, kako jih vključiti v pomočnika za dom).

Pregled

Za merjenje porabe električne energije smo se odločili za uporabo merilnika energije Finder, saj je zasnovan za uporabo po DIN tirnicah in se popolnoma prilega glavni omari naše hiše. Lepa stvar tega izdelka je, da ima vmesnik RS485 Modbus, industrijski standardni komunikacijski protokol, ki olajša pogovor z Arduinom. Pravzaprav je Arduino izdal uradni ščit, MKR485 in dve knjižnici za dekodiranje protokola. Za matično ploščo smo izbrali Arduino MKR WiFi 1010, saj si deli oblikovni faktor MKR in ima povezavo WiFi.

Nastavitev Opozorilo! Preverite predpise svoje države glede ravnanja z električnim sistemom vašega doma in bodite zelo previdni, ker je lahko smrtonosno! Če ne veste, pokličite električarja. Prvi korak je namestitev števca v električno omarico. Če želite zagotoviti, da delate v varnem okolju, izklopite napajanje iz električnega priključka pred vašim sistemom in z multimetrom dvakrat preverite, ali med priključki ni napetosti. Nato postavite merilnik energije v omarico in priključite napeljave in nevtralne žice od glavnega odklopnika do vhoda števca. Ne pozabite uporabiti barvne konvencije (modra za nevtralno in rjava/črna/siva za napetost v EU). Izhod mora biti priključen na preostali del sistema.

Glavni napetostni priključki. Žice zgoraj so vhodne, žice zunaj so izhodi.

Korak: Potrebni deli

Potrebni deli
Potrebni deli

2. korak: Potrebe po programski opremi

Potrebe po programski opremi
Potrebe po programski opremi

Programska oprema

Zaženite računalnik in odprite IDE. Uporabite lahko Arduino IDE ali Arduino Create Editor. Koda izpolnjuje naslednje zahteve: Komunikacija Modbus, upravljanje WiFi Protokol MQTT Modbus je odprtokodni protokol za industrijske senzorje in stroje. Če želimo, da Arduino govori o Modbusu, bomo uporabili knjižnico Arduino Modbus. Ta knjižnica vsebuje vse upravljavce in omogoča zelo hitro priklop katere koli naprave Modbus. Ker bomo brali registre, lahko po podatkovnem listu števca najdemo vse potrebne informacije, kot so kode funkcij, naslov registra in velikost registra z besedami. Če pa želimo biti bolj jasni, razložimo, kako deluje Modbus: Sporočila Modbusa imajo preprosto strukturo: 01 03 04 00 16 00 02 25 C7 0x01 je naslov naprave 0x03 koda funkcije, ki napravi pove, ali želimo brati ali pisati podatke *, v tem primeru preberite registre za shranjevanje 0x04 za število bajtov00 16 - Pošljemo 4 bajte naslova registra (00 16), ki napravi pove, kaj želimo prebrati 00 02 - nato velikost registra (00 02) z besedami (vsaka beseda je dolga 2 bajta) Zadnji 4 bajti so koda CRC. Ta koda je ustvarjena iz matematične funkcije v prejšnjih bajtih, kar zagotavlja, da je bilo sporočilo pravilno sprejeto.

Integracija domačega pomočnika Dodajanje merilnika v domačega pomočnika je precej preprosto. Ob predpostavki, da je konfiguriran posrednik MQTT (tukaj je vodnik), vse kar morate storiti je, da v datoteko configuration.yaml dodate nove definicije. senzor: - platforma: ime mqtt: "Glavna napetost" stanje_teme: "energija/glavna/napetost" enota_merja: "V" Tukaj morate vnesti ime meritve, temo MQTT za branje in mersko enoto količine. Shranite datoteko, preverite konfiguracijo in znova naložite Home Assistant, zdaj se bodo meritve pojavile na glavni strani.

Plošča za porabo domačega pomočnika prikazuje trenutne odčitke

Domači pomočnik bo skrbel za ustvarjanje grafov in avtomatiziral procese, ki jih sprožijo vaši odčitki. Ta vadnica je končana, zdaj je na vas, da dodate funkcije in jih prilagodite za svoje namene!

3. korak: Sestavite

Sestavite
Sestavite
Sestavite
Sestavite

Končano? Čas je, da privijete povezavo RS485! Z ozemljitvijo bomo uporabili sukani en parni kabel, ki se običajno uporablja za telefonske linije. S tem kablom lahko prenašate na dolge razdalje (1,2 km). Uporabljamo pa dovolj dolg kabel, da zapustimo omarico in postavimo Arduino na dostopno mesto.

Povezava Finder RS485

Vmesnik RS485 imenuje svoje priključke A, B in COM. Skupni standard de facto je uporaba TX+/RX+ ali D+ kot alternative za B (visoka za MARK, tj. V prostem teku), TX-/RX- ali D- kot alternativa za A (nizka za MARK, tj. V prostem teku) Ker MKR ščit podpira tudi Full Duplex, videli boste še dva terminala, Y in Z. Tu bomo privijali drugi konec kabla, saj iz podatkovnega lista vemo, da se poldupleksna komunikacija dogaja samo na sponkah Y in Z. COM terminal mora biti priključen na ISOGND. Ker uporabljamo poldupleksno povezavo in ker je kabel enakovreden, moramo stikala na ščitniku MKR485 nastaviti tako, da ustrezajo naši nastavitvi: HALF (2 na off) in zaključek na YZ (3 na ON); prvi ni pomemben. Zaključek je upor, ki povezuje oba podatkovna terminala za dušenje motenj.

To je to. Zdaj lahko zaprete omarico in se osredotočite na programsko stran!

4. korak: Koda

Koda
Koda

#vključi

#include #include #include // vaše poverilnice za wifi const char ssid = "**********"; const char pass = "**********";

WiFiClient mreža; Odjemalec MQTTClient; nepodpisana dolga obrestna mera = 60000; // privzeta hitrost osveževanja v ms unsigned long lastMillis = 0;

// poveži funkcijo void connect () {Serial.print ("preverjanje wifi …"); while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); zamuda (1000); } Serial.print ("\ npovezava …"); while (! client.connect ("ime_uređaja", "uporabniško_ime", "uporabniško_pw")) {// SPREMENI, DA SE UJMARI Z VAŠIMI NASTAVITVAMI Serial.print ("."); zamuda (1000); } Serial.println ("\ npovezano!"); client.subscribe ("energija/glavna/osvežitev"); // tema za nastavitev hitrosti osveževanja na daljavo} // mqtt sprejme funkcijo povratnega klica void messageReceived (String & topic, String & payload) {Serial.println ("dohodni:" + tema + " -" + koristna obremenitev); if (topic == "energy/main/refreshrate") {// stopnja osveževalca hitrosti osveževanja = payload.toInt ()*1000; Serial.println ("nova stopnja"+niz (stopnja)); }}

void setup () {Serial.begin (115200); WiFi.begin (ssid, pass); while (! Serijski); client.begin ("broker_ip", neto); // SPREMEMBA, DA SE UJMARI Z VAŠO NASTAVITEV client.onMessage (messageReceived); // zaženite odjemalca Modbus RTU if (! ModbusRTUClient.begin (9600)) {Serial.println ("Odpiranje odjemalca Modbus RTU ni uspelo!"); medtem ko (1); }}

void loop () {client.loop (); if (! client.connected ()) {// preverite omrežno povezavo connect (); } // objavi sporočilo po preteku osveževanja (neblokirajoča rutina) if (millis () - lastMillis> rate) {lastMillis = millis (); // naj vsi prebrani klici plavajo volt = readVoltage (); zamuda (100); float amp = readCurrent (); zamuda (100); dvojni vat = readPower (); zamuda (100); float hz = readFreq (); zamuda (100); dvojni wh = readEnergy (); // objavi rezultate pod sorodnimi temami client.publish ("energija/glavni/napetost", niz (volt, 3)); client.publish ("energija/glavni/tok", niz (amp, 3)); client.publish ("energija/glavna/moč", niz (vati, 3)); client.publish ("energija/glavna/frekvenca", niz (hz, 3)); client.publish ("energija/glavna/energija", niz (wh, 3)); Serial.print (niz (volt, 3)+"V"+niz (amp, 3)+"A"+niz (vati, 3)+"W"); Serial.println (niz (hz, 3)+"Hz"+niz (wh, 3)+"kWh"); zamuda (100); }}

/ * Funkcije za branje registrov Finder Energy Meter * * Preverite priročnik protokola modbus, da razumete kodo * 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)) {// pokličite register Serial.print ("napetost ni uspela prebrati!"); Serial.println (ModbusRTUClient.lastError ()); // upravljavec napak} else {uint16_t word1 = ModbusRTUClient.read (); // branje podatkov iz vmesnega pomnilnika uint16_t word2 = ModbusRTUClient.read (); uint32_t millivolt = word1 << 16 | word2; // bitni matematični volt = milivolt/1000,0; } povratni volt; } float readCurrent () {float amper = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0016, 2)) {Serial.print ("ni mogoče prebrati trenutnega!"); Serial.println (ModbusRTUClient.lastError ()); } else {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); int32_t milliamp = word1 << 16 | word2; amper = miliamper/1000,0; } povratni amper; }

dvojno branjePower () {dvojni vat = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0025, 3)) {Serial.print ("napaka pri branju ni uspela!"); Serial.println (ModbusRTUClient.lastError ()); } else {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); uint16_t word3 = ModbusRTUClient.read (); uint64_t milivat; if (word1 >> 7 == 0) {milliwatt = word1

Priporočena: