Ձեր էներգախնայողության մոնիտորը `4 քայլ
Ձեր էներգախնայողության մոնիտորը `4 քայլ
Anonim
Ձեր էներգետիկ հաշիվների մոնիտորը
Ձեր էներգետիկ հաշիվների մոնիտորը

Այս նախագծի մասին

Եթե իսկապես ցանկանում եք ձեր տունը դարձնել ավելի խելացի, ապա հավանաբար կցանկանաք սկսել ձեր ամսական հաշիվներից (այսինքն ՝ էներգիա, գազ և այլն …): Ինչպես ասում են ոմանք ՝ Good for Planet, The Wallet and The Bottom Line: Բաց կոդով սարքավորումները տան միջավայրում կայունության հասնելու մեր միջոցն են: Այս գաղափարը մեզ ստիպեց կառուցել մի պարզ և ապահով լուծում, որը հեշտ է ինտեգրվել ցանկացած տան ավտոմատացման ծրագրակազմի հետ, քանի որ այն բացահայտում է տվյալները MQTT- ով (մեր դեպքում մենք ձեզ ցույց կտանք, թե ինչպես այն ինտեգրվել Home Assistant- ում):

Ակնարկ

Էլեկտրաէներգիայի սպառումը չափելու համար մենք ընտրեցինք օգտագործել Finder Energy Meter- ը, քանի որ այն նախատեսված է DIN երկաթուղու օգտագործման համար և հիանալի տեղավորվում է մեր տան գլխավոր պահարանում: Այս ապրանքի հիանալի բանն այն է, որ այն ունի RS485 Modbus ինտերֆեյս, արդյունաբերական ստանդարտ հաղորդակցության արձանագրություն, որն իսկապես հեշտացնում է Arduino- ի հետ խոսելը: Փաստորեն, Arduino- ն թողարկել է պաշտոնական վահանը ՝ MKR485- ը և երկու գրադարան ՝ արձանագրությունը վերծանելու համար: Որպես մայր տախտակ, մենք ընտրեցինք Arduino MKR WiFi 1010 -ը, քանի որ այն կիսում է MKR ձևի գործոնը և ունի WiFi միացում:

SetupWarning! Ստուգեք ձեր երկրի էլեկտրական համակարգի հետ կապված ձեր երկրի կանոնակարգերը և չափազանց զգույշ եղեք, քանի որ դա կարող է մահացու լինել: Եթե չգիտեք, թե ինչպես, զանգահարեք էլեկտրիկի: Առաջին քայլը հաշվիչի տեղադրումն է ձեր էլեկտրական պահարանում: Անվտանգ միջավայրում աշխատելն ապահովելու համար անջատեք ձեր համակարգից առաջ գտնվող էլեկտրական տերմինալը և բազմաչափով կրկնակի ստուգեք, որ տերմինալների միջև լարվածություն չկա: Այնուհետև տեղադրեք էներգիայի հաշվիչը ձեր պահարանի ներսում և միացրեք կենդանի և չեզոք լարերը հիմնական անջատիչից մինչև հաշվիչի մուտքը, հիշեք, որ օգտագործեք գունային պայմանագիրը (կապույտը ՝ չեզոք, իսկ շագանակագույնը ՝ սև/մոխրագույնը ՝ ԵՄ -ում ապրելու համար): Ելքը պետք է միացված լինի մնացած համակարգին:

Հիմնական լարման միացումներ: Վերևի լարերը մուտքային են, այն կողմը `ելքեր:

Քայլ 1: Անհրաժեշտ մասեր

Պահանջվող մասեր
Պահանջվող մասեր

Քայլ 2: Softwareրագրային ապահովման կարիքները

Softwareրագրային ապահովման կարիքներ
Softwareրագրային ապահովման կարիքներ

Ծրագրային ապահովում

Գործարկեք ձեր համակարգիչը և բացեք ձեր IDE- ն: Դուք կարող եք օգտագործել Arduino IDE կամ Arduino Ստեղծել խմբագիր: Կոդը բավարարում է հետևյալ հարցումները. Modbus հաղորդակցություն, WiFi- ի կառավարում MQTT արձանագրություն Modbus- ը և բաց կոդով արձանագրություն արդյունաբերական տվիչների և մեքենաների համար: Որպեսզի Arduino- ն խոսի Modbus- ի մասին, մենք պատրաստվում ենք օգտագործել Arduino Modbus գրադարանը: Այս գրադարանը փաթեթավորում է բոլոր մշակողները և իսկապես արագ միացնում ցանկացած Modbus սարք: Քանի որ մենք մտադիր ենք ընթերցել գրանցամատյաններ ՝ հաշվիչի տվյալների թերթիկին հետևելով, մենք կարող ենք գտնել մեզ անհրաժեշտ բոլոր տեղեկությունները ՝ գործառույթի կոդերը, գրանցամատյանի հասցեն և գրանցիչի չափը բառերով: Ավելի պարզ դարձնելու համար բացատրենք, թե ինչպես է աշխատում Modbus- ը. Modbus հաղորդագրությունները հետևում են պարզ կառուցվածքին. *, այս դեպքում, կարդացեք 0x04 պահող գրանցամատյանները Byte Count00 16 -ի համար - Մենք ուղարկում ենք 4 բայթ գրանցման հասցե (00 16), որը սարքին ասում է, թե ինչ ենք ուզում կարդալ 00 02 - այնուհետև գրանցիչի չափը (00 02) բառերով (յուրաքանչյուր բառը 2 բայթ է) Վերջին 4 բայթերը CRC կոդ են: Այս ծածկագիրը ստեղծվում է մաթեմատիկական գործառույթից ՝ նախորդ բայթերի համեմատ, ինչը երաշխավորում է, որ հաղորդագրությունը ստացվել է ճիշտ:

Տնային օգնականի ինտեգրումՀաշվիչը տան օգնականին ավելացնելը բավականին պարզ է: Ենթադրելով, որ դուք ունեք MQTT բրոքեր կազմաձևված (ահա ուղեցույցը), այն ամենը, ինչ ձեզ հարկավոր է անել, նոր սահմանումներ ավելացնել configuration.yaml ֆայլի տակ: սենսոր. Պահեք ֆայլը, ստուգեք կազմաձևը և վերաբեռնեք Home Assistant- ը, այժմ չափումները կհայտնվեն հիմնական էջում:

Home Assistant սպառման վահանակը ցույց է տալիս ընթացիկ ընթերցումները

Home Assistant- ը կհոգա գրաֆիկների ստեղծման և ձեր ընթերցումների արդյունքում առաջացած գործընթացների ավտոմատացման մասին: Այս ձեռնարկն ավարտվեց, այժմ ձեզնից է կախված ավելացնել գործառույթները և հարմարեցնել այն ձեր սեփական նպատակների համար:

Քայլ 3: Հավաքեք

Հավաքվել
Հավաքվել
Հավաքվել
Հավաքվել

Կատարած? 48ամանակն է պտուտակել RS485 կապը: Մենք կօգտագործենք ոլորված մեկ զույգ մալուխ գետնին, որը սովորաբար օգտագործվում է հեռախոսագծերի համար: Այս մալուխի միջոցով կարող եք փոխանցել մեծ հեռավորության վրա (1,2 կմ): Այնուամենայնիվ, մենք պարզապես մալուխ ենք օգտագործում բավական երկար ՝ կաբինետից դուրս գալու և Arduino- ն հասանելի վայրում տեղադրելու համար:

Finder RS485 կապ

RS485 ինտերֆեյսը անվանում է իր տերմինալները A, B և COM: Ընդհանուր դե-ֆակտո ստանդարտը TX+/RX+ կամ D+- ի օգտագործումն է որպես B- ի այլընտրանք (բարձր MARK- ի դեպքում `անգործուն), TX-/RX- կամ D- որպես A- ի այլընտրանք (ցածր MARK- ի համար, այսինքն` անգործուն) MKR վահանը աջակցում է նաև Full Duplex- ին, դուք կտեսնեք երկու այլ տերմինալ ՝ Y և Z: Այստեղ մենք պատրաստվում ենք պտուտակել մալուխի մյուս ծայրը, քանի որ տվյալների թերթիկից մենք գիտենք, որ կիսատ երկկողմանի հաղորդակցությունը տեղի է ունենում միայն Y և Z տերմինալներում: COM տերմինալը պետք է միացված լինի ISOGND- ին: Քանի որ մենք օգտագործում ենք կիսատ դուպլեքս միացում, և քանի որ մալուխը peer-to-peer է, մենք պետք է անջատիչներ տեղադրենք MKR485 վահանի վրա ՝ մեր կարգավորմանը համապատասխանելու համար. Մենք սահմանում ենք HALF (2-ից անջատված) և վերջավորությունը YZ (3-ից մինչև) ՎՐԱ); առաջինը նշանակություն չունի: Դադարեցումը երկու տվյալների տերմինալները միացնող դիմադրություն է `միջամտությունների թուլացման համար:

Սա այն է: Այժմ կարող եք փակել կաբինետը և կենտրոնանալ ծրագրակազմի վրա:

Քայլ 4: Կոդ

Կոդ
Կոդ

#ներառում

#ներառել #ներառել #ներառել // ձեր WiFi հավատարմագրերը const char ssid = "**********"; const char pass = "**********";

WiFiClient ցանց; MQTTClient հաճախորդ; անստորագիր երկար դրույք = 60000; // լռելյայն թարմացման արագություն ms- ում անստորագիր long lastMillis = 0;

// միացնել գործառույթը void connect () {Serial.print ("ստուգում wifi …"); while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); ուշացում (1000); } Serial.print ("\ n միացում…"); while (! client.connect ("device_name", "user_name", "user_pw")) {// ՓՈՓՈԽՈ TOԹՅՈՆ ՔՈ ԿԱՐԳԱՎՈՐՈՄԸ ՀԱՎԱՍԱՐԿԵԼ Serial.print ("."); ուշացում (1000); } Serial.println ("\ n միացված է"); client.subscribe («էներգիա/հիմնական/թարմացում»); // թեման հեռակա կարգով թարմացման արագություն սահմանելու համար} // mqtt ստանալ հետադարձման գործառույթ void messageReceived (String & topic, String & payload) {Serial.println ("incoming:" + topic + " -" + payload); եթե (թեմա == "էներգիա/հիմնական/թարմացում") {// թարմացման արագության կառավարիչ տոկոսադրույք = բեռնվածություն. դեպի ինտեր ()*1000; Serial.println («նոր փոխարժեք»+լարային (տոկոսադրույք)); }}

void setup () {Serial.begin (115200); WiFi.begin (ssid, pass); իսկ (! Սերիա); client.begin ("բրոքերային_իպ", զուտ); // ՓՈՓՈԽԵԼ ՔՈ ԿԱՐԳԱՎՈՐՈՄԸ ՀԱՎԵԼՎԵԼ client.onMessage (messageReceived); // գործարկեք Modbus RTU հաճախորդը, եթե (! ModbusRTUClient.begin (9600)) {Serial.println ("Չհաջողվեց գործարկել Modbus RTU Client!"); մինչդեռ (1); }}

void loop () {client.loop (); եթե (! client.connected ()) {// ստուգեք ցանցի կապի միացումը (); } // հաղորդագրություն հրապարակել թարմացումն ավարտվելուց հետո (չարգելափակող ռեժիմ) if (millis () - lastMillis> rate) {lastMillis = millis (); // բոլոր կարդացած զանգերը դարձնել float volt = readVoltage (); ուշացում (100); float amp = readCurrent (); ուշացում (100); կրկնակի վտ = readPower (); ուշացում (100); float hz = readFreq (); ուշացում (100); կրկնակի wh = readEnergy (); // արդյունքները հրապարակել համապատասխան թեմաներով client.publish («էներգիա/հիմնական/լարում», լարային (վոլտ, 3)); client.publish («էներգիա/հիմնական/ընթացիկ», լարային (ուժեղացուցիչ, 3)); client.publish («էներգիա/հիմնական/հզորություն», լարային (վտ, 3)); client.publish («էներգիա/հիմնական/հաճախականություն», լարային (հզ, 3)); client.publish («էներգիա/հիմնական/էներգիա», լարային (wh, 3)); Serial.print (լարային (վոլտ, 3)+"V"+լարային (ամպ, 3)+"A"+լարային (վտ, 3)+"W"); Serial.println (Լար (hz, 3)+"Hz"+String (wh, 3)+"kWh"); ուշացում (100); }}

/ * Finder Energy Meter գրանցամատյանները կարդալու գործառույթներ * * Ստուգեք modbus արձանագրության ձեռնարկը ՝ կոդը հասկանալու համար * https://gfinder.findernet.com/public/attachments/7E/EN/PRT_Modbus_7E_64_68_78_86EN.pdf */float readVoltage () {float վոլտ = 0.; եթե (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x000C, 2)) {// զանգահարեք գրանցամատյանում Serial.print («լարման կարդալը ձախողվեց»); Serial.println (ModbusRTUClient.lastError ()); // error handler} else {uint16_t word1 = ModbusRTUClient.read (); // կարդալ տվյալները բուֆերից uint16_t word2 = ModbusRTUClient.read (); uint32_t millivolt = word1 << 16 | word2; // բիթ մաթեմատիկական վոլտ = միլիվոլտ/1000.0; } վերադարձ վոլտ; } float readCurrent () {float ampere = 0.; եթե (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0016, 2)) {Serial.print ("հոսանքը չի կարդալ!"); Serial.println (ModbusRTUClient.lastError ()); } else {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); int32_t milliamp = word1 << 16 | word2; ամպեր = միլիամպ/1000.0; } վերադարձ ամպեր; }

double readPower () {double watt = 0.; եթե (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0025, 3)) {Serial.print ("իշխանությունը չի կարդալ!"); Serial.println (ModbusRTUClient.lastError ()); } else {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); uint16_t word3 = ModbusRTUClient.read (); uint64_t միլիվատ; if (word1 >> 7 == 0) {milliwatt = word1

Խորհուրդ ենք տալիս: