Мазмұны:

Сіздің энергия есебінің мониторы: 4 қадам
Сіздің энергия есебінің мониторы: 4 қадам

Бейне: Сіздің энергия есебінің мониторы: 4 қадам

Бейне: Сіздің энергия есебінің мониторы: 4 қадам
Бейне: #Донор Қазірден бастап барлық кинотеатрларда! 2024, Қараша
Anonim
Сіздің энергия есебінің мониторы
Сіздің энергия есебінің мониторы

БҰЛ ЖОБА ТУРАЛЫ

Егер сіз шынымен де үйіңізді ақылды еткіңіз келсе, сіз ай сайынғы төлемдерден (энергия, газ және т. Кейбіреулер айтқандай, планета, әмиян және төменгі сызық үшін жақсы. Ашық бастапқы жабдық-бұл үй жағдайында тұрақтылыққа жетудің жолы! Бұл идея бізге кез келген үй автоматтандыру бағдарламалық жасақтамасымен оңай қосылатын қарапайым және қауіпсіз шешімді құруға мүмкіндік берді, өйткені ол MQTT арқылы деректерді көрсетеді (біздің жағдайда біз оны үй көмекшісіне қалай біріктіру керектігін көрсетеміз).

Шолу

Электр энергиясын тұтынуды өлшеу үшін біз Finder Energy Meter қолдануды шештік, себебі ол DIN рельсіне арналған және біздің үйдің негізгі шкафына өте жақсы сәйкес келеді. Бұл өнімдегі керемет нәрсе - бұл RS485 Modbus интерфейсі, өнеркәсіптік стандартты байланыс протоколы, бұл Arduino -мен сөйлесуді жеңілдетеді. Шын мәнінде, Arduino протоколын декодтау үшін MKR485 ресми қалқаны мен екі кітапхананы шығарды. Негізгі тақта ретінде біз Arduino MKR WiFi 1010 таңдадық, себебі ол MKR формалық факторымен бөліседі және WiFi байланысы бар.

Орнату Ескерту! Сіздің елдегі үйдің электр жүйесімен жұмыс істеу ережелерін тексеріңіз және өте сақ болыңыз, себебі ол өлімге әкелуі мүмкін! Егер сіз білмесеңіз, электрикке хабарласыңыз. Бірінші қадам - есептегішті электр шкафына орнату. Қауіпсіз ортада жұмыс жасайтындығыңызды қамтамасыз ету үшін жүйенің алдында тұрған электр терминалының қуатын өшіріп, терминалдар арасында кернеу жоқ екенін мультиметрмен екі рет тексеріңіз. Содан кейін энергия есептегішті шкафтың ішіне қойыңыз және негізгі ажыратқыштан есептегіштің кірісіне ток пен бейтарап сымдарды қосыңыз, түс конвенциясын қолдануды ұмытпаңыз (бейтарап үшін көк және ЕО -да қоңыр/қара/сұр). Шығу жүйенің қалған бөлігіне қосылуы керек.

Негізгі кернеу қосылыстары. Жоғарыдағы сымдар - кіріс, одан тыс сымдар - шығыс.

1 -қадам: қажет бөлшектер

Қажетті бөлшектер
Қажетті бөлшектер

2 -қадам: Needes бағдарламалық жасақтамасы

Бағдарламалық қамтамасыз ету Needes
Бағдарламалық қамтамасыз ету Needes

Бағдарламалық қамтамасыз ету

Компьютерді іске қосыңыз және IDE ашыңыз. Arduino IDE немесе Arduino Create Editor қолдануға болады. Код келесі сұраныстарды қанағаттандырады: Modbus байланысы, WiFi менеджменті MQTT Modbus-бұл өнеркәсіптік датчиктер мен машиналарға арналған ашық коды. Arduino Modbus -пен сөйлесу үшін біз Arduino Modbus кітапханасын қолданамыз. Бұл кітапхана барлық өңдеушілерді жинайды және кез келген Modbus құрылғысын тез қосады. Біз регистрлерді оқитын болсақ, есептегіштің деректер кестесіне сүйене отырып, біз функционалдық кодтар, регистрдің мекен -жайы мен регистрдің өлшемі сияқты барлық қажетті ақпаратты сөзбен таба аламыз. Бірақ түсінікті болу үшін Modbus қалай жұмыс жасайтынын түсіндірейік: Modbus хабарламалары қарапайым құрылым бойынша жүреді: 01 03 04 00 16 00 02 25 C7 0x01 - бұл құрылғы мекенжайы 0x03 - бұл функция, егер біз деректерді оқығымыз немесе жазғымыз келсе, құрылғыға хабар беретін код. *, бұл жағдайда, байт Count00 үшін 0x04 холдинг регистрлерін оқыңыз - Біз құрылғыға оқығымыз келетін нәрсені айтатын регистр адресінің 4 байтын (00 16) жібереміз 00 02- содан кейін регистрдің өлшемін (00 02) сөзбен (әр сөздің ұзындығы 2 байт) Соңғы 4 байт - CRC коды. Бұл код алдыңғы байттарға қарағанда математикалық функциядан жасалады, бұл хабардың дұрыс қабылданғанын қамтамасыз етеді.

Үй көмекшісінің интеграциясы Үйге көмекшіге есептегішті қосу өте қарапайым. Егер сізде MQTT брокері конфигурацияланған болса (мұнда нұсқаулық), сізге конфигурация.yaml файлының астына жаңа анықтамалар қосу жеткілікті. сенсор: - платформа: mqtt атауы: «Негізгі кернеу» күйі_тақырыбы: «энергия/негізгі/кернеу» бірлігі_оның өлшемі: «V» Мұнда өлшеу атауын, оқылатын MQTT тақырыбын және шаманың өлшем бірлігін қою керек. Файлды сақтаңыз, конфигурацияны тексеріңіз және Home Assistant -ті қайта жүктеңіз, енді өлшемдер негізгі бетте пайда болады.

Ағымдағы көрсеткіштерді көрсететін Home Assistant тұтыну тақтасы

Үй көмекшісі графиктер құруға және сіздің оқуларыңыз арқылы процестерді автоматтандыруға қамқорлық жасайды. Бұл оқу құралы аяқталды, енді мүмкіндіктерді қосу және оны өз мақсаттарыңыз үшін баптау сізге байланысты!

3 -қадам: жинау

Жинау
Жинау
Жинау
Жинау

Орындалды ма? RS485 қосылымын бұрайтын уақыт келді! Біз әдетте телефон желілері үшін пайдаланылатын жермен бұралған бір жұп кабельді қолданамыз. Бұл кабель арқылы сіз алыс қашықтыққа (1,2 км) жібере аласыз. Дегенмен, біз шкафтан шығып, Arduino -ны қол жетімді жерге қою үшін жеткілікті ұзын кабельді қолданамыз.

Finder RS485 қосылымы

RS485 интерфейсі өзінің терминалдарын A, B және COM деп атайды. Жалпыға ортақ де-факто стандарт- бұл B-ге балама ретінде TX+/RX+ немесе D+ қолдану (MARK үшін жоғары, яғни бос), TX-/RX- немесе D- үшін альтернатива ретінде (MARK үшін төмен, яғни бос). MKR экраны Full Duplex-ті қолдайды, сіз басқа екі терминалды көресіз: Y және Z. Мұнда біз кабельдің екінші ұшын бұрап аламыз, өйткені біз деректер парағынан жартылай дуплексті байланыс тек Y және Z терминалдарында болатынын білеміз. COM терминалы ISOGND -ге қосылуы керек. Біз жартылай дуплексті қосылымды қолданатындықтан және кабель бір-біріне тең болғандықтан, біз MKR485 қалқанындағы қосқыштарды біздің қондырғымызға сәйкес орнатуымыз керек: біз ЖАРТЫ (2 өшірулі) және YZ (3 ҚОСУЛЫ); біріншісі маңызды емес. Аяқтау - бұл кедергілерді азайту үшін екі деректер терминалын қосатын қарсылық.

Бұл - бұл. Енді сіз шкафты жауып, бағдарламалық қамтамасыз ету жағына назар аудара аласыз!

4 -қадам: код

Код
Код

#қосу

#include #include #include // сіздің wifi тіркелгі деректеріңіз const char ssid = «**********»; const char pass = «**********»;

WiFiClient желісі; MQTTClient клиенті; қол қойылмаған ұзақ ставка = 60000; // әдепкі жаңарту жылдамдығы мс белгісіз 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»))) // // ОРНАТУҢЫЗДЫ ӨЗГЕРТУ Serial.print («.»); кешіктіру (1000); } Serial.println («\ nбайланысты!»); client.subscribe («energy/main/refreshrate»); // жаңарту жылдамдығын қашықтан орнату үшін тақырып} // mqtt кері шақыру функциясын қабылдайды void хабар Алынды (Жол және тақырып, Жол және жүктеме) {Serial.println («кіріс:» + тақырып + « -» + пайдалы жүктеме); if (topic == «energy/main/refreshrate») {// жаңарту жиілігін өңдегіш жылдамдығы = payload.toInt ()*1000; Serial.println («жаңа тариф»+Жол (жылдамдық)); }}

void setup () {Serial.begin (115200); WiFi.begin (ssid, pass); while (! сериялық); client.begin («broker_ip», net); // ӨЗГЕРТУЛЕРДІ ОРНАТУ клиент.onMessage (хабарлама алынды); // Modbus RTU клиентін іске қосыңыз, егер (! ModbusRTUClient.begin (9600)) {Serial.println («Modbus RTU клиентін іске қосу сәтсіз болды!»); кезінде (1); }}

void loop () {client.loop (); if (! 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 («энергия/негізгі/ағым», String (амп, 3)); client.publish («энергия/негізгі/қуат», String (ватт, 3)); client.publish («энергия/негізгі/жиілік», Жол (гц, 3)); client.publish («energy/main/energy», String (wh, 3)); Serial.print (Жол (вольт, 3)+«V»+Жол (амп, 3)+«А»+Жол (ватт, 3)+«W»); Serial.println (String (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.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x000C, 2)) {// Serial.print регистріне қоңырау шалыңыз («кернеу оқылмады!»); Serial.println (ModbusRTUClient.lastError ()); // қате өңдеуші} else {uint16_t word1 = ModbusRTUClient.read (); // деректерді буферден оқу uint16_t word2 = ModbusRTUClient.read (); uint32_t millivolt = word1 << 16 | word2; // бит математикалық вольт = милливольт/1000,0; } қайтару вольты; } float readCurrent () {float ampere = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0016, 2)) {Serial.print («ағымдағы оқылмады!»); Serial.println (ModbusRTUClient.lastError ()); } басқа {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); int32_t milliamp = word1 << 16 | word2; ампер = миллиампер/1000,0; } амперді қайтару; }

қос оқуPower () {қосарланған ватт = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0025, 3)) {Serial.print («қуатты оқи алмады!»); Serial.println (ModbusRTUClient.lastError ()); } басқа {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); uint16_t word3 = ModbusRTUClient.read (); uint64_t милливатт; егер (word1 >> 7 == 0) {milliwatt = word1

Ұсынылған: