Obsah:

Váš monitor účtů za energii: 4 kroky
Váš monitor účtů za energii: 4 kroky

Video: Váš monitor účtů za energii: 4 kroky

Video: Váš monitor účtů za energii: 4 kroky
Video: 05# Spuštění FVE, aplikace pro sledování výkonu a nutné legislativní kroky 2024, Červenec
Anonim
Váš monitor účtů za energii
Váš monitor účtů za energii

O TOMTO PROJEKTU

Pokud opravdu chcete, aby byl váš dům chytřejší, budete pravděpodobně chtít začít od svých měsíčních účtů (tj. Energie, plyn atd.…). Jak někteří říkají, Dobré pro planetu, Peněženku a Sečteno a podtrženo. Open-source hardware je náš způsob, jak dosáhnout udržitelnosti v domácím prostředí! Tato myšlenka nás přivedla k vytvoření jednoduchého a bezpečného řešení, které lze snadno integrovat s jakýmkoli softwarem pro domácí automatizaci, protože vystavuje data prostřednictvím MQTT (v našem případě vám ukážeme, jak jej integrovat do Home Assistant).

Přehled

Abychom změřili spotřebu elektrické energie, rozhodli jsme se použít Finder Energy Meter, protože je určen pro použití na lištu DIN a perfektně se hodí do hlavní skříně našeho domu. Skvělou věcí na tomto produktu je, že má rozhraní RS485 Modbus, průmyslový standardní komunikační protokol, díky němuž je rozhovor s Arduinem opravdu snadný. Ve skutečnosti Arduino vydalo oficiální štít, MKR485 a dvě knihovny k dekódování protokolu. Jako základní desku jsme vybrali Arduino MKR WiFi 1010, protože sdílí tvarový faktor MKR a má WiFi připojení.

Nastavení Varování! Podívejte se na předpisy vaší země týkající se nakládání s vaším domácím elektrickým systémem a buďte velmi opatrní, protože to může být smrtelné! Pokud nevíte jak, zavolejte elektrikáře. Prvním krokem je instalace měřiče do vaší elektrické skříně. Abyste zajistili, že pracujete v bezpečném prostředí, vypněte napájení z elektrické svorky před vaším systémem a pomocí multimetru znovu zkontrolujte, zda mezi svorkami není napětí. Poté umístěte měřič energie do skříně a připojte živé a neutrální vodiče z hlavního jističe ke vstupu měřiče, nezapomeňte použít konvenci barev (modrá pro neutrální a hnědá/černá/šedá pro živé v EU). Výstup musí být připojen ke zbytku systému.

Přípojky hlavního napětí. Dráty nahoře jsou vstupy, vodiče za nimi jsou výstupy.

Krok 1: Potřebné součásti

Potřebné díly
Potřebné díly

Krok 2: Softwarové potřeby

Softwarové potřeby
Softwarové potřeby

Software

Spusťte počítač a otevřete IDE. Můžete použít Arduino IDE nebo Arduino Create Editor. Kód splňuje následující požadavky: Komunikace Modbus, správa WiFi Protokol MQTT Modbus je a open-source protokol pro průmyslové senzory a stroje. Aby Arduino promluvilo o Modbusu, použijeme knihovnu Arduino Modbus. Tato knihovna obsahuje všechny ovladače a umožňuje rychlé připojení jakéhokoli zařízení Modbus. Protože se chystáme číst registry, podle datového listu měřiče můžeme najít všechny potřebné informace, jako jsou funkční kódy, adresa registru a velikost registru ve slovech. Aby to bylo jasnější, vysvětlíme si, jak Modbus funguje: Zprávy Modbus mají jednoduchou strukturu: 01 03 04 00 16 00 02 25 C7 0x01 je adresa zařízení 0x03 je funkční kód, který zařízení informuje, zda chceme číst nebo zapisovat data *, v tomto případě přečtěte udržovací registry 0x04 pro počet bytů 00 16 - Pošleme 4 bajty adresy registru (00 16), která zařízení řekne, co chceme číst 00 02 - pak velikost registru (00 02) slovy (každé slovo je 2 bajty dlouhé) Poslední 4 bajty jsou kód CRC. Tento kód je generován z matematické funkce přes předchozí bajty, což zajišťuje, že zpráva byla přijata správně.

Integrace Home Assistant Přidání měřiče do Home Assistant je velmi jednoduché. Za předpokladu, že máte nakonfigurovaného brokera MQTT (zde je průvodce), stačí do souboru configuration.yaml přidat nové definice. čidlo: - platforma: mqtt název: "Main Voltage" stav_topika: "energie/hlavní/napětí" unit_of_measurement: "V" Zde musíte zadat název měření, téma MQTT ke čtení a jednotku měření veličiny. Uložte soubor, zkontrolujte konfiguraci a znovu načtěte Home Assistant, nyní se měření objeví na hlavní stránce.

Panel spotřeby Home Assistant zobrazující aktuální hodnoty

Home Assistant se postará o vytváření grafů a automatizuje procesy spouštěné vašimi odečty. Tento tutoriál skončil, nyní je na vás, abyste přidali funkce a přizpůsobili si je pro své vlastní účely!

Krok 3: Sestavte

Shromáždit
Shromáždit
Shromáždit
Shromáždit

Hotovo? Je na čase zašroubovat připojení RS485! Použijeme kroucený jednopárový kabel se zemí, obvykle používaný pro telefonní linky. S tímto kabelem můžete vysílat na velkou vzdálenost (1,2 km). K opuštění skříně a umístění Arduina na přístupné místo však použijeme dostatečně dlouhý kabel.

Finder připojení RS485

Rozhraní RS485 pojmenovává své terminály A, B a COM. Běžným de facto standardem je použití TX+/RX+ nebo D+ jako alternativy pro B (vysoké pro MARK tj. Nečinnosti), TX-/RX- nebo D- jako alternativu pro A (nízké pro MARK tj. Nečinné) Štít MKR podporuje také Full Duplex, uvidíte dva další terminály, Y a Z. Zde se chystáme přišroubovat druhý konec kabelu, protože z datového listu víme, že poloduplexní komunikace probíhá pouze na svorkách Y a Z. Terminál COM musí být připojen k ISOGND. Protože používáme poloduplexní připojení a protože kabeláž je peer-to-peer, musíme nastavit přepínače na stínění MKR485 tak, aby odpovídaly našemu nastavení: nastavíme HALF (2 na off) a ukončení na YZ (3 až NA); na prvním nezáleží. Zakončení je odporem spojujícím dva datové terminály pro tlumení interferencí.

To je ono. Nyní můžete skříň zavřít a soustředit se na softwarovou stránku!

Krok 4: Kód

Kód
Kód

#zahrnout

#include #include #include // vaše wifi pověření const char ssid = "**********"; const char pass = "**********";

WiFi klientská síť; Klient MQTTClient; nepodepsaná dlouhá sazba = 60 000; // výchozí obnovovací frekvence v ms bez znaménka dlouhá lastMillis = 0;

// funkce připojení void connect () {Serial.print ("kontrola wifi …"); while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); zpoždění (1000); } Serial.print ("\ npřipojování …"); while (! client.connect ("název_zařízení", "jméno_uživatele", "uživatel_pw")) {// ZMĚNA SPOJENÍ S NASTAVENÍM Serial.print ("."); zpoždění (1000); } Serial.println ("\ npřipojeno!"); client.subscribe („energie/hlavní/refreshrate“); // téma pro vzdálené nastavení obnovovací frekvence} // mqtt přijímat funkci zpětného volání void messageReceived (String & topic, String & payload) {Serial.println ("incoming:" + topic + " -" + payload); if (topic == "energy/main/refreshrate") {// rychlost obsluhy obnovovací frekvence = payload.toInt ()*1000; Serial.println („nová sazba“+řetězec (sazba)); }}

neplatné nastavení () {Serial.begin (115200); WiFi.begin (ssid, pass); while (! Serial); client.begin ("broker_ip", net); // ZMĚNA K VYROVNÁNÍ VAŠEHO NASTAVENÍ client.onMessage (messageReceived); // spusťte klienta Modbus RTU if (! ModbusRTUClient.begin (9600)) {Serial.println ("Spuštění klienta Modbus RTU se nezdařilo!"); zatímco (1); }}

void loop () {client.loop (); if (! client.connected ()) {// kontrola síťového připojení connect (); } // zveřejnění zprávy po uplynutí aktualizace (neblokující rutina) if (millis () - lastMillis> rate) {lastMillis = millis (); // všechna volání pro čtení float volt = readVoltage (); zpoždění (100); float amp = readCurrent (); zpoždění (100); dvojitý watt = readPower (); zpoždění (100); float hz = readFreq (); zpoždění (100); double wh = readEnergy (); // zveřejnění výsledků v souvisejících tématech client.publish ("energy/main/voltage", String (volt, 3)); client.publish ("energie/hlavní/aktuální", řetězec (zesilovač, 3)); client.publish ("energy/main/power", String (watt, 3)); client.publish ("energie/hlavní/frekvence", řetězec (hz, 3)); client.publish ("energie/hlavní/energie", řetězec (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"); zpoždění (100); }}

/ * Funkce pro čtení registrů Finder Energy Meter * * Pro pochopení kódu si prostudujte manuál protokolu modbus * 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)) {// uskutečněte volání do registru Serial.print ("nepodařilo se načíst napětí!"); Serial.println (ModbusRTUClient.lastError ()); // obsluha chyb} else {uint16_t word1 = ModbusRTUClient.read (); // čtení dat z vyrovnávací paměti uint16_t word2 = ModbusRTUClient.read (); uint32_t millivolt = word1 << 16 | slovo2; // bit math volt = millivolt/1000.0; } návrat voltů; } float readCurrent () {float ampere = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0016, 2)) {Serial.print ("nepodařilo se přečíst aktuální!"); Serial.println (ModbusRTUClient.lastError ()); } else {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); int32_t milliamp = word1 << 16 | slovo2; ampér = miliampér/1000,0; } vrátit ampér; }

double readPower () {double watt = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0025, 3)) {Serial.print ("nepodařilo se přečíst moc!"); Serial.println (ModbusRTUClient.lastError ()); } else {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); uint16_t word3 = ModbusRTUClient.read (); uint64_t miliwatt; if (slovo1 >> 7 == 0) {milliwatt = slovo1

Doporučuje: