Tartalomjegyzék:

Az energiaszámla monitor: 4 lépés
Az energiaszámla monitor: 4 lépés

Videó: Az energiaszámla monitor: 4 lépés

Videó: Az energiaszámla monitor: 4 lépés
Videó: E.ON Solar 2024, Július
Anonim
Az energiaszámla monitor
Az energiaszámla monitor

EZT A PROJEKTET

Ha valóban okosabbá akarja tenni otthonát, akkor valószínűleg a havi számláiból (azaz energia, gáz stb.) Kell kiindulnia. Ahogy egyesek mondják, jó a Planetnek, a pénztárcának és a lényegnek. A nyílt forráskódú hardver az utunk a fenntarthatóság eléréséhez az otthoni környezetben! Ez az ötlet arra késztetett bennünket, hogy egy egyszerű és biztonságos megoldást hozzunk létre, amely könnyen integrálható bármilyen otthoni automatizálási szoftverrel, mivel az MQTT -n keresztül teszi közzé az adatokat (a mi esetünkben megmutatjuk, hogyan integrálhatja őket a Home Assistant rendszerbe).

Áttekintés

Az elektromos energiafogyasztás mérése érdekében a Finder energiamérő használatát választottuk, mivel azt DIN sínre tervezték, és tökéletesen illeszkedik házunk főszekrényébe. A jó dolog ebben a termékben az, hogy rendelkezik RS485 Modbus interfésszel, egy ipari szabványos kommunikációs protokollal, amely igazán megkönnyíti az Arduino -val való beszélgetést. Valójában az Arduino kiadott egy hivatalos pajzsot, az MKR485 -öt és két könyvtárat a protokoll dekódolásához. Alaplapként az Arduino MKR WiFi 1010 -et választottuk, mivel az MKR formatervezéssel megegyezik, és WiFi -kapcsolattal rendelkezik.

Beállítás Figyelem! Ellenőrizze az ország szabályait a ház elektromos rendszerével kapcsolatban, és legyen rendkívül óvatos, mert halálos lehet! Ha nem tudja, hívjon villanyszerelőt. Az első lépés a mérő felszerelése az elektromos szekrénybe. Annak érdekében, hogy biztonságos környezetben dolgozzon, kapcsolja ki az áramellátást a rendszer előtt lévő elektromos terminálról, és ellenőrizze a multiméterrel, hogy nincs feszültség a csatlakozók között. Ezután helyezze az energiamérőt a szekrényébe, és csatlakoztassa a feszültségmentes és semleges vezetékeket a fő megszakítóból a mérő bemenetéhez, ne felejtse el használni a színmegállapítást (kék a semlegeshez, barna/fekete/szürke az EU -ban élőkhöz). A kimenetet a rendszer többi részéhez kell csatlakoztatni.

Fő feszültségcsatlakozások. A fenti vezetékek bemenetek, a túlsó vezetékek kimenetek.

1. lépés: Szükséges alkatrészek

Szükséges alkatrészek
Szükséges alkatrészek

2. lépés: Szoftver szükséges

Szoftver szükségletek
Szoftver szükségletek

Szoftver

Indítsa el a számítógépet, és nyissa meg az IDE -t. Használhatja az Arduino IDE vagy az Arduino Create Editor programot. A kód megfelel a következő kéréseknek: Modbus kommunikáció, WiFi menedzsment MQTT protokoll A Modbus és nyílt forráskódú protokoll ipari érzékelőkhöz és gépekhez. Ahhoz, hogy az Arduino beszéljen Modbusról, az Arduino Modbus könyvtárat fogjuk használni. Ez a könyvtár csomagolja az összes kezelőt, és minden Modbus -eszköz csatlakoztatását igazán gyorsá teszi. Mivel a regisztereket fogjuk olvasni, a mérő adatlapját követve minden szükséges információt megtalálunk, például a funkciókódokat, a regiszter címét és a regiszter méretét szavakkal. De hogy világosabb legyen, magyarázzuk el a Modbus működését: A Modbus üzenetek egyszerű szerkezetet követnek: 01 03 04 00 16 00 02 25 C7 0x01 az eszköz címe A 0x03 a funkciókód, amely megmondja a készüléknek, hogy adatokat akarunk -e olvasni vagy írni. *, ebben az esetben olvassa el a 0x04 tároló regisztereket a Byte Count00 16 számára - 4 bájt regisztrációs címet küldünk (00 16), amely megmondja az eszköznek, hogy mit szeretnénk olvasni 00 02- majd a regiszter méretét (00 02) szavakkal (minden szó 2 bájt hosszú) Az utolsó 4 bájt CRC kód. Ez a kód egy matematikai függvényből generálódik az előző bájtokhoz képest, ez biztosítja, hogy az üzenetet megfelelően fogadták.

Az otthoni asszisztens integrálása A mérő hozzáadása a Home Assistant -hez meglehetősen egyszerű. Feltételezve, hogy MQTT bróker van konfigurálva (itt található az útmutató), mindössze annyit kell tennie, hogy új definíciókat ad hozzá a configuration.yaml fájlhoz. érzékelő: - platform: mqtt name: "Main Voltage" state_topic: "energia/fő/feszültség" unit_of_measurement: "V" Ide kell beírni a mérés nevét, az MQTT témát és a mennyiség mértékegységét. Mentse a fájlt, ellenőrizze a konfigurációt és töltse be újra a Home Assistant alkalmazást, most a mérések megjelennek a főoldalon.

A Home Assistant fogyasztási panel az aktuális értékeket mutatja

A Home Assistant gondoskodik a grafikonok létrehozásáról és az olvasás által kiváltott folyamatok automatizálásáról. Ez az oktatóanyag befejeződött, most Önön múlik, hogy milyen funkciókat ad hozzá és testre szabja saját céljaira!

3. lépés: Szerelje össze

Összeszerelni
Összeszerelni
Összeszerelni
Összeszerelni

Kész? Itt az ideje, hogy csavarja be az RS485 csatlakozót! Csavart egypáros kábelt fogunk használni a földdel, általában telefonvonalakhoz. Ezzel a kábellel nagy távolságra (1,2 km) továbbíthat. Azonban csak elég hosszú kábelt használunk a szekrényből való kilépéshez, és az Arduino -t hozzáférhető helyre helyezzük.

Kereső RS485 kapcsolat

Az RS485 interfész elnevezi A, B és COM termináljait. Általános de facto szabvány a TX+/RX+ vagy a D+ alternatívája a B számára (magas a MARK, azaz üresjárat), a TX-/RX- vagy a D- alternatíva az A számára (alacsony a MARK, azaz üresjárat). Az MKR pajzs támogatja a Full Duplex funkciót is, két másik terminált lát, Y és Z. Itt csavarjuk be a kábel másik végét, mivel az adatlapból tudjuk, hogy a fél-duplex kommunikáció csak az Y és Z terminálokon történik. A COM terminált az ISOGND -hez kell csatlakoztatni. Mivel fél-duplex kapcsolatot használunk, és mivel a kábelezés peer-to-peer, ezért az MKR485 pajzson lévő kapcsolókat úgy kell beállítanunk, hogy illeszkedjenek a beállításunkhoz: a FÉL (2 ki) és a befejezést YZ (3- TOVÁBB); az első nem számít. A lezárás a két adatterminált összekötő ellenállás az interferencia csillapítására.

Ez az. Most bezárhatja a szekrényt, és a szoftver oldalára koncentrálhat!

4. lépés: Kód

Kód
Kód

#befoglalni

#include #include #include // wifi hitelesítő adatai const char ssid = "**********"; const char pass = "**********";

WiFiClient net; MQTTClient kliens; előjel nélküli hosszú árfolyam = 60000; // alapértelmezett frissítési gyakoriság ms -ban unsigned long lastMillis = 0;

// connect function void connect () {Serial.print ("wifi ellenőrzése …"); while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); késleltetés (1000); } Serial.print ("\ ncsatlakozás …"); while (! client.connect ("device_name", "user_name", "user_pw"))) {// VÁLTOZTATÁS A BEÁLLÍTÁSOK MEGFELELÉSÉHEZ Serial.print ("."); késleltetés (1000); } Serial.println ("\ ncsatlakoztatva!"); client.subscribe ("energia/fő/frissítés"); // téma a frissítési gyakoriság távoli beállításához} // mqtt visszahívási funkció fogadása void messageReceived (String & topic, String & payload) {Serial.println ("bejövő:" + téma + " -" + hasznos terhelés); if (topic == "energy/main/refreshrate") {// frissítési gyakoriság kezelő rate = payload.toInt ()*1000; Serial.println ("új arány"+karakterlánc (arány)); }}

void setup () {Serial.begin (115200); WiFi.begin (ssid, pass); while (! Sorozat); client.begin ("broker_ip", net); // VÁLTOZTATÁS A BEÁLLÍTÁSOK klienséhez.onMessage (messageReceived); // indítsa el a Modbus RTU ügyfelet, ha (! ModbusRTUClient.begin (9600)) {Serial.println ("Nem sikerült elindítani a Modbus RTU klienst!"); míg (1); }}

void loop () {client.loop (); if (! client.connected ()) {// ellenőrizze a hálózati kapcsolatot connect (); } // üzenet közzététele a frissítés után (nem blokkoló rutin) if (millis () - lastMillis> rate) {lastMillis = millis (); // hogy az összes olvasott hívás float volt = readVoltage (); késleltetés (100); float amp = readCurrent (); késleltetés (100); dupla watt = readPower (); késleltetés (100); float hz = readFreq (); késleltetés (100); double wh = readEnergy (); // az eredmények közzététele kapcsolódó témák alatt client.publish ("energia/fő/feszültség", String (volt, 3)); client.publish ("energia/fő/áram", karakterlánc (erősítő, 3)); client.publish ("energia/fő/teljesítmény", String (watt, 3)); client.publish ("energia/fő/frekvencia", karakterlánc (hz, 3)); client.publish ("energia/fő/energia", karakterlánc (wh, 3)); Soros.nyomat (String (volt, 3)+"V"+String (amp, 3)+"A"+String (watt, 3)+"W"); Soros.println (Karakterlánc (hz, 3)+"Hz"+Karakterlánc (wh, 3)+"kWh"); késleltetés (100); }}

/ * A Finder Energy Meter regiszterek olvasásának funkciói * * A kód megértéséhez nézze meg a modbus protokoll kézikönyvét * 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)) {// hívja fel a Serial.print regisztert ("nem sikerült leolvasni a feszültséget!"); Serial.println (ModbusRTUClient.lastError ()); // hibakezelő} else {uint16_t word1 = ModbusRTUClient.read (); // adatok olvasása a pufferből uint16_t word2 = ModbusRTUClient.read (); uint32_t millivolt = szó1 << 16 | szó2; // bit matematikai volt = millivolt/1000.0; } visszatérő volt; } float readCurrent () {float amper = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0016, 2)) {Serial.print ("nem sikerült leolvasni az aktuálisat!"); Serial.println (ModbusRTUClient.lastError ()); } else {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); int32_t milliamp = szó1 << 16 | szó2; amper = milliamp/1000,0; } visszatérő amper; }

double readPower () {double watt = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0025, 3)) {Serial.print ("nem sikerült leolvasni a teljesítményt!"); Serial.println (ModbusRTUClient.lastError ()); } else {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); uint16_t word3 = ModbusRTUClient.read (); uint64_t milliwatt; ha (szó1 >> 7 == 0) {milliwatt = szó1

Ajánlott: