Spisu treści:

Monitor rachunków za energię: 4 kroki
Monitor rachunków za energię: 4 kroki

Wideo: Monitor rachunków za energię: 4 kroki

Wideo: Monitor rachunków za energię: 4 kroki
Wideo: Jak podłączyć licznik (monitor) zużycia energii elektrycznej D52 - 2066 w rozdzielnicy elektrycznej 2024, Lipiec
Anonim
Monitor rachunków za energię
Monitor rachunków za energię

O PROJEKCIE

Jeśli naprawdę chcesz, aby Twój dom był bardziej inteligentny, prawdopodobnie będziesz chciał zacząć od swoich miesięcznych rachunków (tj. Energia, gaz itp.). Jak niektórzy mówią, Good for Planet, The Wallet i The Bottom Line. Sprzęt open source to nasz sposób na osiągnięcie zrównoważonego rozwoju w środowisku domowym! Ten pomysł skłonił nas do zbudowania prostego i bezpiecznego rozwiązania, łatwego do zintegrowania z dowolnym oprogramowaniem automatyki domowej, ponieważ udostępnia dane przez MQTT (w naszym przypadku pokażemy, jak zintegrować je z Home Assistant).

Przegląd

Aby zmierzyć zużycie energii elektrycznej, zdecydowaliśmy się użyć licznika energii Finder, ponieważ jest on przeznaczony do użytku na szynie DIN i idealnie pasuje do głównej szafki naszego domu. Fajną rzeczą w tym produkcie jest to, że ma interfejs RS485 Modbus, przemysłowy protokół komunikacyjny, który sprawia, że rozmowa z Arduino jest naprawdę łatwa. W rzeczywistości Arduino wydało oficjalną tarczę, MKR485 i dwie biblioteki do dekodowania protokołu. Jako płytę główną wybraliśmy Arduino MKR WiFi 1010, ponieważ dzieli ona format MKR i ma łączność WiFi.

Konfiguracja Ostrzeżenie! Sprawdź przepisy swojego kraju dotyczące obchodzenia się z domową instalacją elektryczną i zachowaj szczególną ostrożność, ponieważ może to być śmiertelne! Jeśli nie wiesz jak, zadzwoń do elektryka. Pierwszym krokiem jest zainstalowanie licznika w szafce elektrycznej. Aby upewnić się, że pracujesz w bezpiecznym środowisku, wyłącz zasilanie z zacisku elektrycznego przed systemem i dwukrotnie sprawdź za pomocą multimetru, czy między zaciskami nie ma napięcia. Następnie umieść licznik energii w swojej szafie i podłącz przewody pod napięciem i neutralny z głównego wyłącznika do wejścia licznika, pamiętaj o zastosowaniu konwencji kolorystycznej (niebieski dla neutralnego i brązowy/czarny/szary dla napięcia w UE). Wyjście musi być połączone z resztą systemu.

Główne połączenia napięcia. Kable powyżej to wejścia, kable poniżej to wyjścia.

Krok 1: Potrzebne części

Potrzebne części
Potrzebne części

Krok 2: Potrzeby oprogramowania

Potrzeby oprogramowania
Potrzeby oprogramowania

Oprogramowanie

Uruchom komputer i otwórz swoje IDE. Możesz użyć Arduino IDE lub Arduino Create Editor. Kod spełnia następujące wymagania: komunikacja Modbus, zarządzanie Wi-Fi Protokół MQTT Modbus to otwarty protokół dla czujników i maszyn przemysłowych. Aby Arduino rozmawiało przez Modbus, użyjemy biblioteki Arduino Modbus. Ta biblioteka zawiera wszystkie programy obsługi i sprawia, że podłączanie dowolnego urządzenia Modbus jest naprawdę szybkie. Ponieważ zamierzamy czytać rejestry, podążając za arkuszem danych miernika, możemy znaleźć wszystkie potrzebne informacje, takie jak kody funkcji, adres rejestru i rozmiar rejestru w słowach. Ale żeby było jaśniej, wyjaśnijmy, jak działa Modbus: Komunikaty Modbus mają prostą strukturę: 01 03 04 00 16 00 02 25 C7 0x01 to adres urządzenia 0x03 to kod funkcji, który mówi urządzeniu, czy chcemy odczytywać lub zapisywać dane * w tym przypadku czytaj rejestry trzymające 0x04 dla Byte Count00 16 - Wysyłamy 4 bajty adresu rejestru (00 16), który mówi urządzeniu co chcemy odczytać 00 02- następnie rozmiar rejestru (00 02) słownie (każde słowo ma długość 2 bajtów) Ostatnie 4 bajty to kod CRC. Ten kod jest generowany z funkcji matematycznej na poprzednich bajtach, co zapewnia poprawny odbiór wiadomości.

Integracja z Home AssistantDodanie licznika do Home Assistant jest dość proste. Zakładając, że masz skonfigurowanego brokera MQTT (tutaj jest przewodnik), wystarczy dodać nowe definicje w pliku configuration.yaml. czujnik: - platforma: mqtt name: "Main Voltage" state_topic: "energia/main/napięcie" jednostka_miary: "V" Tutaj należy wpisać nazwę pomiaru, temat MQTT do odczytania oraz jednostkę miary wielkości. Zapisz plik, sprawdź konfigurację i przeładuj Home Assistant, teraz pomiary pojawią się na stronie głównej.

Panel zużycia Home Assistant pokazujący aktualne odczyty

Home Assistant zajmie się tworzeniem wykresów i automatyzacją procesów wywołanych przez Twoje odczyty. Ten samouczek się zakończył, teraz do Ciebie należy dodanie funkcji i dostosowanie go do własnych celów!

Krok 3: montaż

Gromadzić się
Gromadzić się
Gromadzić się
Gromadzić się

Gotowe? Czas wkręcić złącze RS485! Użyjemy skrętki jednoparowej z uziemieniem, zwykle używanej do linii telefonicznych. Za pomocą tego kabla możesz nadawać na duże odległości (1,2 km). Po prostu używamy kabla wystarczająco długiego, aby wyjść z szafki i umieścić Arduino w dostępnym miejscu.

Wyszukiwarka połączenie RS485

Interfejs RS485 nazywa swoje zaciski A, B i COM. Powszechnym de facto standardem jest używanie TX+/RX+ lub D+ jako alternatywy dla B (wysoki dla MARK tj. bezczynny), TX-/RX- lub D- jako alternatywy dla A (niski dla MARK tj. bezczynny). Ekran MKR obsługuje również Full Duplex, zobaczysz dwa inne terminale, Y i Z. Tutaj przykręcimy drugi koniec kabla, ponieważ wiemy z arkusza danych, że komunikacja half-duplex odbywa się tylko na terminalach Y i Z. Terminal COM musi być podłączony do ISOGND. Ponieważ używamy połączenia half-duplex i ponieważ okablowanie jest typu peer-to-peer, musimy ustawić przełączniki na ekranie MKR485, aby pasowały do naszej konfiguracji: ustawiamy HALF (2 na wyłączone) i zakończenie na YZ (3 do NA); pierwszy nie ma znaczenia. Zakończenie to rezystancja łącząca dwa terminale danych, do tłumienia zakłóceń.

To jest to. Teraz możesz zamknąć szafkę i skupić się na stronie oprogramowania!

Krok 4: Kod

Kod
Kod

#włączać

#include #include #include //Twoje dane uwierzytelniające Wi-Fi const char ssid = "**********"; const char pass = "**********";

Sieć klienta WiFi; Klient MQTTClient; unsigned long rate = 60000; // domyślna częstotliwość odświeżania w ms unsigned long lastMillis = 0;

//connect function void connect() { Serial.print("sprawdzam wifi…"); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); opóźnienie (1000); } Serial.print("\nłączenie…"); while (!client.connect("nazwa_urządzenia", "nazwa_użytkownika", "hasło_użytkownika")) { //ZMIEŃ NA DOPASOWANIE DO KONFIGURACJI Serial.print("."); opóźnienie (1000); } Serial.println("\npodłączony!"); client.subscribe("energia/główna/odświeżanie"); //topic, aby zdalnie ustawić częstotliwość odświeżania } //mqtt odbierz funkcję zwrotną void messageReceived(String &topic, String &payload) { Serial.println("incoming: " + topic + " - " + payload); if(topic == "energia/main/refreshrate"){ //refreshrate handler rate = payload.toInt()*1000; Serial.println("nowa stawka"+String(stawka)); } }

void setup() { Serial.begin(115200); WiFi.begin(ssid, pass); podczas (!Serial); klient.początek("IP_brokera", net); //ZMIEŃ NA DOPASOWANIE DO USTAWIEŃ client.onMessage(messageReceived); // uruchom klienta Modbus RTU if (!ModbusRTUClient.begin(9600)) { Serial.println("Nie udało się uruchomić klienta Modbus RTU!"); natomiast (1); } }

void loop() { klient.loop(); if (!client.connected()) { //sprawdź połączenie sieciowe connect(); } // opublikuj wiadomość po upłynięciu odświeżenia (procedura nieblokująca) if (millis() - lastMillis > rate) { lastMillis = millis(); //wykonaj wszystkie wywołania odczytu float volt = readVoltage(); opóźnienie (100); float amp = readCurrent(); opóźnienie (100); podwójny wat = readPower(); opóźnienie (100); float hz = readFreq(); opóźnienie (100); podwójne wh = readEnergy(); //publikuj wyniki w powiązanych tematach client.publish("energia/main/napięcie", String(volt, 3)); client.publish("energia/main/current", String(amp, 3)); client.publish("energia/główna/moc", String(wat, 3)); client.publish("energia/główna/częstotliwość", String(hz, 3)); client.publish("energia/główna/energia", String(wh, 3)); Serial.print(String(wolt, 3)+"V "+String(wzmacniacz, 3)+"A "+String(wat, 3)+"W"); Serial.println(String(hz, 3)+"Hz"+String(wh, 3)+"kWh"); opóźnienie (100); } }

/* Funkcje do odczytu rejestrów licznika energii Finder * * Sprawdź instrukcję protokołu modbus, aby zrozumieć kod * https://gfinder.findernet.com/public/attachments/7E/EN/PRT_Modbus_7E_64_68_78_86EN.pdf */ float readVoltage(){ float wolt = 0.; if (!ModbusRTUClient.requestFrom(0x01, HOLDING_REGISTERS, 0x000C, 2)) { //wykonaj wywołanie rejestru Serial.print("nie udało się odczytać napięcia! "); Serial.println(ModbusRTUClient.lastError()); //obsługa błędów }else{ uint16_t word1 = ModbusRTUClient.read(); //odczytaj dane z bufora uint16_t word2 = ModbusRTUClient.read(); uint32_t miliwolt = słowo1 << 16 | słowo2; //bit matematyczny wolt = miliwolt/1000.0; } powrót wolt; } float readCurrent(){ float amper = 0.; if (!ModbusRTUClient.requestFrom(0x01, HOLDING_REGISTERS, 0x0016, 2)) { Serial.print("nie udało się odczytać bieżącego! "); Serial.println(ModbusRTUClient.lastError()); }else{ uint16_t słowo1 = ModbusRTUClient.read(); uint16_t słowo2 = ModbusRTUClient.read(); int32_t miliamper = słowo1 << 16 | słowo2; amper = miliamper/1000,0; } return amper; }

podwójny readPower(){ podwójny wat = 0.; if (!ModbusRTUClient.requestFrom(0x01, HOLDING_REGISTERS, 0x0025, 3)) { Serial.print("nie udało się odczytać mocy! "); Serial.println(ModbusRTUClient.lastError()); }else{ uint16_t słowo1 = ModbusRTUClient.read(); uint16_t słowo2 = ModbusRTUClient.read(); uint16_t word3 = ModbusRTUClient.read(); uint64_t miliwat; if(słowo1 >> 7 == 0){ miliwat = słowo1

Zalecana: