Obsah:

Váš monitor účtov za energie: 4 kroky
Váš monitor účtov za energie: 4 kroky

Video: Váš monitor účtov za energie: 4 kroky

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

O TOMTO PROJEKTE

Ak naozaj chcete, aby bol váš domov múdrejší, pravdepodobne budete chcieť začať od svojich mesačných účtov (t. J. Energie, plyn atď.…). Ako niektorí hovoria, je to dobré pre planétu, peňaženku a konečný súčet. Open-source hardvér je náš spôsob, ako dosiahnuť udržateľnosť v domácom prostredí! Táto myšlienka nás priviedla k vytvoreniu jednoduchého a bezpečného riešenia, ktoré je možné ľahko integrovať s akýmkoľvek softvérom pre domácu automatizáciu, pretože vystavuje údaje prostredníctvom MQTT (v našom prípade vám ukážeme, ako ho integrovať do Home Assistant).

Prehľad

Aby sme mohli merať spotrebu elektrickej energie, rozhodli sme sa použiť merač energie Finder, pretože je navrhnutý na použitie na lištu DIN a perfektne sa hodí do hlavnej skrinky nášho domu. Super na tomto produkte je, že má rozhranie RS485 Modbus, komunikačný protokol štandardného priemyselného štandardu, vďaka ktorému je rozprávanie s Arduino skutočne jednoduché. Arduino v skutočnosti vydal oficiálny štít, MKR485 a dve knižnice na dekódovanie protokolu. Ako základnú dosku sme vybrali Arduino MKR WiFi 1010, pretože zdieľa tvarový faktor MKR a má pripojenie WiFi.

Inštalácia Varovanie! Pozrite sa na predpisy svojej krajiny týkajúce sa zaobchádzania s vašim domácim elektrickým systémom a buďte veľmi opatrní, pretože to môže byť smrteľné! Ak neviete ako, zavolajte elektrikára. Prvým krokom je inštalácia merača do vašej elektrickej skrinky. Aby ste zaistili, že pracujete v bezpečnom prostredí, vypnite napájanie z elektrického terminálu pred systémom a pomocou multimetra znova skontrolujte, či medzi svorkami nie je napätie. Potom umiestnite merač energie do svojej skrinky a zapojte živé a nulové vodiče z hlavného ističa do vstupu elektromera. Nezabudnite použiť konvenciu farieb (modrá pre neutrál a hnedá/čierna/sivá pre živé napätie v EÚ). Výstup musí byť pripojený k zvyšku systému.

Pripojenia hlavného napätia. Káble vyššie sú vstupné, vodiče za nimi sú výstupy.

Krok 1: Potrebné diely

Potrebné diely
Potrebné diely

Krok 2: Softvérové potreby

Softwarové potreby
Softwarové potreby

Softvér

Spustite počítač a otvorte IDE. Môžete použiť Arduino IDE alebo Arduino Create Editor. Kód spĺňa nasledujúce požiadavky: Komunikácia Modbus, WiFi správaMQTT protokol Modbus je a open-source protokol pre priemyselné snímače a stroje. Aby Arduino hovorilo Modbus, použijeme knižnicu Arduino Modbus. Táto knižnica obsahuje všetky ovládače a umožňuje pripojenie akéhokoľvek zariadenia Modbus skutočne rýchlo. Pretože ideme čítať registre, podľa údajového listu meradla nájdeme všetky potrebné informácie, ako sú kódy funkcií, adresa registra a veľkosť registra v slovách. Aby sme to však objasnili, vysvetlite nám, ako Modbus funguje: Správy Modbus majú jednoduchú štruktúru: 01 03 04 00 16 00 02 25 C7 0x01 je adresa zariadenia 0x03 je funkčný kód, ktorý hovorí zariadeniu, či chceme čítať alebo zapisovať údaje. *, v tomto prípade prečítajte udržiavacie registre 0x04 pre počet bajtov 00 16 - Pošleme 4 bajty adresy registra (00 16), ktoré zariadeniu oznámia, čo chceme čítať 00 02 - potom veľkosť registra (00 02) slovami (každé slovo má 2 bajty) Posledné 4 bajty sú kód CRC. Tento kód je generovaný z matematickej funkcie oproti predchádzajúcim bajtom, čo zaisťuje správne prijatie správy.

Integrácia Home Assistant Pridanie merača do Home Assistant je veľmi jednoduché. Za predpokladu, že máte nakonfigurovaného brokera MQTT (Tu je návod), stačí do súboru configuration.yaml pridať nové definície. snímač: - platforma: mqtt názov: "Hlavné napätie" stav_topika: "energia/hlavné/napätie" jednotka_m_merania: "V" Tu musíte zadať názov merania, tému MQTT, ktorá sa má odčítať, a meraciu jednotku veličiny. Uložte súbor, skontrolujte konfiguráciu a znova načítajte Home Assistant, teraz sa merania zobrazia na hlavnej stránke.

Panel spotreby Home Assistant zobrazujúci aktuálne namerané hodnoty

Home Assistant sa postará o vytváranie grafov a automatizáciu procesov spustených vašimi údajmi. Tento tutoriál skončil, teraz je na vás, aby ste pridali funkcie a prispôsobili ich svojim vlastným účelom!

Krok 3: Zostavte

Zostaviť
Zostaviť
Zostaviť
Zostaviť

Hotový? Je čas zaskrutkovať pripojenie RS485! Na uzemnenie použijeme krútený jednopárový kábel, ktorý sa bežne používa pre telefónne linky. S týmto káblom môžete prenášať na veľkú vzdialenosť (1,2 km). Na opustenie skrinky však použijeme dostatočne dlhý kábel a Arduino umiestnime na prístupné miesto.

Finder pripojenie RS485

Rozhranie RS485 označuje svoje terminály A, B a COM. Bežným de facto štandardom je použitie TX+/RX+ alebo D+ ako alternatívy pre B (vysoké pre MARK tj. Nečinné), TX-/RX- alebo D- ako alternatívne pre A (nízke pre MARK tj. Nečinné) Pretože Štít MKR podporuje aj Full Duplex, uvidíte ďalšie dva terminály, Y a Z. Tu budeme skrutkovať druhý koniec kábla, pretože z technického listu vieme, že poloduplexná komunikácia sa deje iba na svorkách Y a Z. Terminál COM musí byť pripojený k ISOGND. Pretože používame poloduplexné pripojenie a keďže kabeláž je peer-to-peer, musíme nastaviť prepínače na štíte MKR485 tak, aby zodpovedali nášmu nastaveniu: nastavíme HALF (2 na vypnuté) a ukončenie na YZ (3 na ZAPNUTÉ); na prvom nezáleží. Zakončením je odpor spájajúci dva dátové terminály na tlmenie rušenia.

To je ono Teraz môžete skriňu zavrieť a zamerať sa na softvérovú stránku!

Krok 4: Kód

Kód
Kód

#zahrnúť

#include #include #include // vaše poverenia pre wifi const char ssid = "**********"; const char pass = "**********";

WiFi klientska sieť; Klient MQTTClient; nepodpísaná dlhá sadzba = 60 000; // predvolená obnovovacia frekvencia v ms bez znamienka dlhá lastMillis = 0;

// funkcia pripojenia void connect () {Serial.print ("kontrola wifi …"); while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); oneskorenie (1000); } Serial.print ("\ npripojenie …"); while (! client.connect ("device_name", "user_name", "user_pw")) {// ZMENA PODPORUJE VAŠU NASTAVENIE Serial.print ("."); oneskorenie (1000); } Serial.println ("\ npripojené!"); client.subscribe („energia/hlavná/refreshrate“); // téma na diaľkové nastavenie obnovovacej frekvencie} // mqtt funkcia prijatia spätného volania void messageReceived (String & topic, String & payload) {Serial.println ("incoming:" + topic + " -" + payload); if (topic == "energy/main/refreshrate") {// rýchlosť obsluhy obnovovacej frekvencie = payload.toInt ()*1000; Serial.println („nová sadzba“+reťazec (sadzba)); }}

void setup () {Serial.begin (115200); WiFi.begin (ssid, pass); while (! Serial); client.begin ("broker_ip", net); // ZMENA NA ZHODU S NASTAVENÍM client.onMessage (messageReceived); // spustite klienta Modbus RTU if (! ModbusRTUClient.begin (9600)) {Serial.println ("Spustenie klienta Modbus RTU zlyhalo!"); pričom (1); }}

void loop () {client.loop (); if (! client.connected ()) {// skontrolovať sieťové pripojenie connect (); } // publikovanie správy po uplynutí obnovenia (rutina bez blokovania), ak (millis () - lastMillis> sadzba) {lastMillis = millis (); // uskutočnenie všetkých prečítaných hovorov float volt = readVoltage (); oneskorenie (100); float amp = readCurrent (); oneskorenie (100); dvojitý watt = readPower (); oneskorenie (100); float hz = readFreq (); oneskorenie (100); double wh = readEnergy (); // zverejnenie výsledkov v príbuzných témach client.publish ("energy/main/voltage", String (volt, 3)); client.publish ("energia/hlavný/prúd", reťazec (zosilňovač, 3)); client.publish ("energia/hlavná/výkon", reťazec (watt, 3)); client.publish ("energia/hlavná/frekvencia", reťazec (hz, 3)); client.publish ("energia/hlavná/energia", reťazec (wh, 3)); Serial.print (Reťazec (volt, 3)+"V"+Reťazec (zosilňovač, 3)+"A"+Reťazec (watt, 3)+"W"); Serial.println (String (hz, 3)+"Hz"+String (wh, 3)+"kWh"); oneskorenie (100); }}

/ * Funkcie na čítanie registrov merača energie Finder * * Ak chcete porozumieť kódu, prečítajte si príručku k 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)) {// uskutočnite volanie do registra Serial.print ("nepodarilo sa načítať napätie!"); Serial.println (ModbusRTUClient.lastError ()); // obsluha chýb} else {uint16_t word1 = ModbusRTUClient.read (); // čítanie údajov z vyrovnávacej pamäte uint16_t word2 = ModbusRTUClient.read (); uint32_t millivolt = word1 << 16 | slovo2; // bitová matematika volt = millivolt/1000,0; } vrátiť napätie; } float readCurrent () {float ampere = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0016, 2)) {Serial.print ("nepodarilo sa načítať prúd!"); Serial.println (ModbusRTUClient.lastError ()); } else {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); int32_t milliamp = slovo1 << 16 | slovo2; ampér = miliampér/1000,0; } vrátiť ampér; }

double readPower () {double watt = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0025, 3)) {Serial.print ("zlyhalo čítanie sily!"); 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

Odporúča: