Мазмуну:

Сиздин Energy Bill Monitor: 4 кадам
Сиздин Energy Bill Monitor: 4 кадам

Video: Сиздин Energy Bill Monitor: 4 кадам

Video: Сиздин Energy Bill Monitor: 4 кадам
Video: GEELY MONJARO СОСТОЯНИЕ ЧЕРЕЗ 7000км ПРОБЕГА / КАЧЕСТВО КИТАЙСКОЙ СБОРКИ И ОСНОВНЫЕ МОМЕНТЫ ИЗНОСА 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 менеджмент 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 деп атаган. Жалпы де-факто стандарт TX+/RX+ же D+ ды B үчүн альтернатива катары колдонуу (MARK үчүн бош, башкача айтканда бош), TX-/RX- же D- үчүн альтернатива катары (MARK үчүн төмөн, башкача айтканда бош). MKR калкан Full Duplexти дагы колдойт, сиз Y жана Z деген башка эки терминалды көрөсүз. Бул жерде биз кабелдин экинчи учун бурап жатабыз, анткени биз маалымат баракчасынан жарым дуплекстүү байланыш Y жана Z терминалдарында гана болорун билебиз. COM терминалы ISOGND менен туташышы керек. Биз жарым дуплекстүү туташууну колдонгондуктан жана кабель тең-теңме-тең болгондуктан, биз MKR485 калканчындагы өчүргүчтөрдү орнотууларыбызга ылайыкташтырышыбыз керек: биз HALF (2 өчүк) жана YZ (3 КҮЙҮК); биринчиси мааниге ээ эмес. Токтотуу - бул эки маалымат терминалын туташтырган каршылык, тоскоолдуктарды басаңдатуу үчүн.

Бул ушул. Эми сиз кабинетти жаап, программалык камсыздоого көңүл бурсаңыз болот!

4 -кадам: Код

Code
Code

#кошуу

#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 messageReceived (String & theme, String & payload) {Serial.println ("incoming:" + topic + " -" + payload); if (topic == "energy/main/refreshrate") {// refresh rate handler rate = payload.toInt ()*1000; Serial.println ("жаңы чен"+Сап (чен)); }}

void setup () {Serial.begin (115200); WiFi.begin (ssid, pass); while (! Сериялык); client.begin ("broker_ip", net); // ӨЗГӨРТҮҮЛӨРҮҢҮЗДҮ ӨЗГӨРТҮҮ client.onMessage (messageReceived); // Modbus RTU кардарын баштоо, эгерде (! ModbusRTUClient.begin (9600)) {Serial.println ("Modbus RTU Кардарын баштоо ишке ашкан жок!"); while (1); }}

void loop () {client.loop (); if (! client.connected ()) {// тармак туташуусун текшерүү connect (); } // жаңыртуу аяктагандан кийин билдирүүнү жарыялоо (блокировкалоочу эмес) 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 ("энергия/негизги/күч", Стринг (ватт, 3)); client.publish ("энергия/негизги/жыштык", 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"); кечиктирүү (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 ()); // ката иштетүүчү} башка {uint16_t word1 = ModbusRTUClient.read (); // буферден маалыматтарды окуу uint16_t word2 = ModbusRTUClient.read (); uint32_t millivolt = word1 << 16 | word2; // бит математика вольт = милливольт/1000.0; } return volt; } float readCurrent () {float ampere = 0.; if (! 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; } кайтаруу ампери; }

кош окууPower () {кош ватт = 0.; if (! 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

Сунушталууда: