INHOUDSOPGAWE:

U energierekeningmonitor: 4 stappe
U energierekeningmonitor: 4 stappe

Video: U energierekeningmonitor: 4 stappe

Video: U energierekeningmonitor: 4 stappe
Video: LP - Lost On You (Live) 2024, November
Anonim
Jou energierekeningmonitor
Jou energierekeningmonitor

OOR HIERDIE PROJEK

As u regtig u huis slimmer wil maak, wil u waarskynlik begin met u maandelikse rekeninge (energie, gas, ens.). Soos sommige sê, Good for Planet, The Wallet en The Bottom Line. Open-source hardeware is ons manier om volhoubaarheid in die huislike omgewing te bereik! Hierdie idee het ons 'n eenvoudige en veilige oplossing laat bou, maklik om met enige tuisautomatiseringsagteware te integreer, aangesien dit data oor MQTT blootstel (in ons geval sal ons u wys hoe u dit in Home Assistant kan integreer).

Oorsig

Om die elektriese energieverbruik te meet, het ons gekies om die Finder Energy Meter te gebruik, aangesien dit ontwerp is vir DIN -railgebruik en perfek pas in die hoofkas van ons huis. Die aangename van hierdie produk is dat dit 'n RS485 Modbus -koppelvlak het, 'n industriële standaard kommunikasieprotokol wat dit maklik maak om met 'n Arduino te praat. Trouens, Arduino het 'n amptelike skild, die MKR485 en twee biblioteke vrygestel om die protokol te dekodeer. As die hoofbord het ons die Arduino MKR WiFi 1010 gekies, aangesien dit die MKR -vormfaktor deel en WiFi -verbinding het.

Opstelling Waarskuwing! Gaan u land se regulasies na oor die hantering van u huis se elektriese stelsel, en wees uiters versigtig, want dit kan dodelik wees! Bel 'n elektrisiën as u nie weet nie. Die eerste stap is om die meter in u elektriese kas te installeer. Om te verseker dat u in 'n veilige omgewing werk, moet u die krag van die elektriese aansluiting voor u stelsel afskakel en met die multimeter kontroleer of daar geen spanning tussen die terminale is nie. Plaas dan die energiemeter in u kas en koppel lewendige en neutrale drade van die hoofbreker aan die ingang van die meter, onthou om die kleurkonvensie te gebruik (blou vir neutraal en bruin/swart/grys vir live in die EU). Die uitset moet aan die res van die stelsel gekoppel word.

Hoofspanningaansluitings. Drade hierbo is insette, drade verder is uitsette.

Stap 1: Onderdele benodig

Onderdele benodig
Onderdele benodig

Stap 2: Sagteware benodig

Sagteware benodig
Sagteware benodig

Sagteware

Begin u rekenaar en maak u IDE oop. U kan die Arduino IDE of Arduino Create Editor gebruik. Die kode voldoen aan die volgende versoeke: Modbus-kommunikasie, WiFi-bestuur MQTT-protokol Modbus is en open source-protokol vir industriële sensors en masjiene. Om Arduino Modbus te laat praat, gaan ons die Arduino Modbus -biblioteek gebruik. Hierdie biblioteek verpak al die hanteerders en maak die aansluiting van enige Modbus -toestel baie vinnig. Aangesien ons registers gaan lees, volgens die datablad van die meter, vind ons al die inligting wat ons benodig, soos funksiekodes, adres van die register en grootte van die register in woorde. Maar om dit duideliker te maak, laat ons verduidelik hoe Modbus werk: Modbus -boodskappe volg 'n eenvoudige struktuur: 01 03 04 00 16 00 02 25 C7 0x01is die toesteladres 0x03 die funksiekode wat die toestel vertel of ons data wil lees of skryf *, in hierdie geval, lees houregisters 0x04 vir Byte Count00 16 - Ons stuur 4 grepe registeradres (00 16) wat die toestel vertel wat ons wil lees 00 02- dan die grootte van die register (00 02) in woorde (elke woord is 2 grepe lank) Laaste 4 grepe is CRC -kode. Hierdie kode word gegenereer uit 'n wiskundige funksie oor vorige grepe; dit verseker dat die boodskap korrek ontvang is.

Home Assistant Integration Die toevoeging van die meter by Home Assistant is redelik eenvoudig. As u aanvaar dat u 'n MQTT -makelaar gekonfigureer het (hier is die gids), hoef u net nuwe definisies by te voeg onder die config.yaml -lêer. sensor: - platform: mqtt naam: "Hoofspanning" state_topic: "energie/hoof/spanning" eenheid_van_meting: "V" Hier moet u die naam van die meting, die MQTT -onderwerp lees en die meeteenheid van die hoeveelheid. Stoor die lêer, kyk na die konfigurasie en herlaai Home Assistant, nou sal die metings op die hoofblad verskyn.

Home Assistant -verbruikspaneel wat die huidige lesings toon

Home Assistant sorg vir die skep van grafieke en outomatiese prosesse wat deur u lesings veroorsaak word. Hierdie tutoriaal is voltooi, nou is dit aan u om funksies by te voeg en aan te pas vir u eie doeleindes!

Stap 3: Monteer

Versamel
Versamel
Versamel
Versamel

Klaar? Dit is tyd om die RS485 -aansluiting in te skroef! Ons gebruik 'n gedraaide enkelpaarkabel met die grond, gewoonlik vir telefoonlyne. Met hierdie kabel kan u oor 'n lang afstand (1,2 km) stuur. Ons gebruik egter net 'n kabel wat lank genoeg is om die kas te verlaat en die Arduino op 'n toeganklike plek te plaas.

Finder RS485 -verbinding

Die RS485 -koppelvlak noem sy terminale A, B en COM. 'N Algemene de facto-standaard is die gebruik van TX+/RX+ of D+ as 'n alternatief vir B (hoog vir MARK ie ledig), TX-/RX- of D- as 'n alternatief vir A (laag vir MARK ie ledig) Aangesien die MKR-skild ondersteun ook Full Duplex; u sien twee ander terminale, Y en Z. Hier gaan ons die ander kant van die kabel skroef, aangesien ons uit die datablad weet dat halfdupleks-kommunikasie slegs op Y- en Z-terminale plaasvind. Die COM -terminale moet aan ISOGND gekoppel word. Aangesien ons 'n half-dupleksverbinding gebruik en aangesien die bekabeling peer-to-peer is, moet ons die skakelaars op die MKR485-skild instel om by ons opstelling te pas: ons stel HALF (2 af) en beëindiging op YZ (3 tot AAN); die eerste een maak nie saak nie. Die beëindiging is 'n weerstand wat die twee dataterminale verbind om interferensies te demp.

Hierdie is dit. Nou kan u die kas toemaak en fokus op die sagteware -kant!

Stap 4: Kode

Kode
Kode

#insluit

#include #include #include // your wifi credentials const char ssid = "**********"; const char pass = "**********";

WiFiClient -net; MQTTClient kliënt; ongetekende lang koers = 60000; // standaard verversingsnelheid in ms ongetekende lang lastMillis = 0;

// verbind funksie leeg verbind () {Serial.print ("kyk na wifi …"); terwyl (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); vertraging (1000); } Serial.print ("\ nkoppel …"); terwyl (! client.connect ("device_name", "user_name", "user_pw")) {// VERANDER OM JOU INSTELLING TE PAS Serial.print ("."); vertraging (1000); } Serial.println ("\ n gekoppel!"); client.subscribe ("energie/hoof/verfris"); // onderwerp om verversingsfrekwensie op afstand te stel} // mqtt ontvang terugbelfunksie leegte boodskap Ontvang (String & onderwerp, String en loonvrag) {Serial.println ("inkomend:" + onderwerp + " -" + loonvrag); if (topic == "energy/main/refresh") {// refresh rate handler rate = payload.toInt ()*1000; Serial.println ("nuwe koers"+string (koers)); }}

ongeldige opstelling () {Serial.begin (115200); WiFi.begin (ssid, pas); terwyl (! Serial); client.begin ("broker_ip", netto); // WYSIG OM U OPSTELLING client.onMessage (boodskap ontvang) aan te pas; // begin die Modbus RTU -kliënt as (! ModbusRTUClient.begin (9600)) {Serial.println ("Kon nie Modbus RTU -kliënt begin nie!"); terwyl (1); }}

leemte -lus () {client.loop (); as (! client.connected ()) {// kyk na netwerkverbinding connect (); } // publiseer 'n boodskap nadat verversing verstryk het (nie -blokkerende roetine) as (millis () - lastMillis> rate) {lastMillis = millis (); // laat al die leesoproepe dryf volt = readVoltage (); vertraging (100); float amp = readCurrent (); vertraging (100); dubbel watt = readPower (); vertraging (100); float hz = readFreq (); vertraging (100); dubbel wh = readEnergy (); // publiseer resultate onder verwante onderwerpe client.publish ("energy/main/voltage", String (volt, 3)); client.publish ("energie/hoof/stroom", string (amp, 3)); client.publish ("energie/hoof/krag", string (watt, 3)); client.publish ("energie/hoof/frekwensie", string (hz, 3)); client.publish ("energy/main/energy", string (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"); vertraging (100); }}

/ * Funksies om Finder Energy Meter -registers te lees * * Gaan die handleiding van die modbus -protokol na om die kode te verstaan * https://gfinder.findernet.com/public/attachments/7E/EN/PRT_Modbus_7E_64_68_78_86EN.pdf */float readVoltage () {float volt = 0.; as (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x000C, 2)) {// bel die register na Serial.print ("kon nie spanning lees nie!"); Serial.println (ModbusRTUClient.lastError ()); // error handler} else {uint16_t word1 = ModbusRTUClient.read (); // lees data van die buffer uint16_t word2 = ModbusRTUClient.read (); uint32_t millivolt = word1 << 16 | woord 2; // bit wiskunde volt = millivolt/1000.0; } terugkeer volt; } float readCurrent () {float ampere = 0.; as (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0016, 2)) {Serial.print ("kon nie stroom lees nie!"); Serial.println (ModbusRTUClient.lastError ()); } anders {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); int32_t milliamp = word1 << 16 | woord 2; ampere = milliamp/1000.0; } terugkeer ampere; }

double readPower () {double watt = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0025, 3)) {Serial.print ("het nie krag gelees nie!"); Serial.println (ModbusRTUClient.lastError ()); } anders {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); uint16_t word3 = ModbusRTUClient.read (); uint64_t milliwatt; as (word1 >> 7 == 0) {milliwatt = word1

Aanbeveel: