Оглавление:

Монитор счета за электроэнергию: 4 шага
Монитор счета за электроэнергию: 4 шага

Видео: Монитор счета за электроэнергию: 4 шага

Видео: Монитор счета за электроэнергию: 4 шага
Видео: 5 ошибок при выборе монитора⚠️Как выбрать монитор ? 2024, Ноябрь
Anonim
Ваш счетчик счетов за энергию
Ваш счетчик счетов за энергию

ОБ ЭТОМ ПРОЕКТЕ

Если вы действительно хотите сделать свой дом умнее, вы, вероятно, захотите начать со своих ежемесячных счетов (например, за электроэнергию, газ и т. Д.…). Как говорят некоторые, Good for Planet, The Wallet and The Bottom Line. Аппаратное обеспечение с открытым исходным кодом - это наш способ добиться устойчивости в домашних условиях! Эта идея привела нас к созданию простого и безопасного решения, легко интегрируемого с любым программным обеспечением для домашней автоматизации, поскольку оно предоставляет данные через MQTT (в нашем случае мы покажем вам, как интегрировать его в Home Assistant).

Обзор

Чтобы измерить потребление электроэнергии, мы решили использовать счетчик энергии Finder, поскольку он разработан для использования на DIN-рейке и идеально подходит для основного шкафа нашего дома. Самое замечательное в этом продукте то, что он имеет интерфейс RS485 Modbus, промышленный стандартный протокол связи, который делает общение с Arduino действительно простым. Фактически, Arduino выпустила официальный щит, MKR485 и две библиотеки для декодирования протокола. В качестве материнской платы мы выбрали Arduino MKR WiFi 1010, поскольку она имеет форм-фактор MKR и возможность подключения по Wi-Fi.

Setupwarning! Ознакомьтесь с правилами вашей страны, касающимися работы с электрической системой вашего дома, и будьте предельно осторожны, потому что это может быть смертельно опасным! Если вы не знаете, как это сделать, вызовите электрика. Первым делом установите счетчик в свой электрический шкаф. Чтобы убедиться, что вы работаете в безопасных условиях, отключите питание от электрического терминала перед вашей системой и дважды проверьте мультиметром, нет ли напряжения между терминалами. Затем поместите счетчик энергии в свой шкаф и подключите токоведущие и нейтральные провода от главного выключателя к входу счетчика, не забудьте использовать цветовое соглашение (синий для нейтрали и коричневый / черный / серый для напряжения под напряжением в ЕС). Выход должен быть подключен к остальной части системы.

Подключение к электросети. Провода выше являются входными, а выходящие - выходами.

Шаг 1: Необходимые детали

Необходимые детали
Необходимые детали

Шаг 2. Программное обеспечение, необходимое

Программное обеспечение 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 - это функциональный код, который сообщает устройству, хотим ли мы читать или записывать данные. *, в этом случае, считываем регистры хранения 0x04 для счетчика байтов 00 16 - Мы отправляем 4 байта адреса регистра (00 16), который сообщает устройству, что мы хотим прочитать 00 02 - затем размер регистра (00 02) в словах (каждое слово имеет длину 2 байта) Последние 4 байта - это код CRC. Этот код генерируется из математической функции по предыдущим байтам, это гарантирует, что сообщение было получено правильно.

Интеграция Home Assistant Добавить счетчик в Home Assistant довольно просто. Предполагая, что у вас настроен брокер MQTT (вот руководство), все, что вам нужно сделать, это добавить новые определения в файл configuration.yaml. sensor: - platform: mqtt name: «Main Voltage» state_topic: «energy / main / Voltage» unit_of_measurement: «V» Здесь вы должны указать название измерения, тему MQTT для чтения и единицу измерения количества. Сохраните файл, проверьте конфигурацию и перезагрузите Home Assistant, теперь измерения появятся на главной странице.

Панель потребления Home Assistant, показывающая текущие показания

Home Assistant позаботится о создании графиков и автоматизирует процессы, вызванные вашими показаниями. Этот урок закончен, теперь вам нужно добавить функции и настроить его для своих целей!

Шаг 3: соберите

Собрать
Собрать
Собрать
Собрать

Выполнено? Пора вкрутить соединение RS485! Мы будем использовать однопарный витой кабель с заземлением, обычно используемый для телефонных линий. С помощью этого кабеля вы можете передавать на большие расстояния (1,2 км). Однако мы просто используем кабель, достаточно длинный, чтобы выйти из шкафа и разместить Arduino в доступном месте.

Подключение Finder RS485

Интерфейс RS485 называет свои клеммы A, B и COM. Распространенным стандартом де-факто является использование TX + / RX + или D + в качестве альтернативы для B (высокий для MARK, т. Е. В режиме ожидания), TX- / RX- или D- в качестве альтернативы для A (низкий для MARK, т. Е. В режиме ожидания). Экран MKR поддерживает также полнодуплексный режим, вы увидите еще две клеммы, Y и Z. Здесь мы собираемся прикрутить другой конец кабеля, поскольку мы знаем из таблицы данных, что полудуплексная связь происходит только на клеммах Y и Z. Терминал COM должен быть подключен к ISOGND. Поскольку мы используем полудуплексное соединение и проводка является одноранговой, мы должны настроить переключатели на экране MKR485 в соответствии с нашей настройкой: мы устанавливаем HALF (2 в положение выключено) и завершение на YZ (от 3 до НА); первый не имеет значения. Терминатор представляет собой сопротивление, соединяющее два вывода данных, для подавления помех.

Это оно. Теперь вы можете закрыть кабинет и сосредоточиться на программной части!

Шаг 4: Код

Код
Код

#включают

#include #include #include // ваши учетные данные Wi-Fi const char ssid = "**********"; const char pass = "**********";

Сеть WiFiClient; Клиент MQTTClient; беззнаковая длинная ставка = 60000; // частота обновления по умолчанию в мс. unsigned long lastMillis = 0;

// подключаемся function void connect () {Serial.print ("проверка Wi-Fi…"); while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); задержка (1000); } Serial.print ("\ nconnecting…"); while (! client.connect ("device_name", "user_name", "user_pw")) {// ИЗМЕНИТЬ, ЧТОБЫ СООТВЕТСТВОВАТЬ ВАШИМ НАСТРОЙКАМ Serial.print ("."); задержка (1000); } Serial.println ("\ nconnected!"); client.subscribe ("энергия / основная / скорость обновления"); // тема для удаленной установки частоты обновления} // mqtt получает функцию обратного вызова void messageReceived (String & topic, String & payload) {Serial.println ("incoming:" + topic + "-" + payload); if (topic == "energy / main / refreshrate") {// обработчик частоты обновления rate = payload.toInt () * 1000; Serial.println («новая ставка» + String (скорость)); }}

void setup () {Serial.begin (115200); WiFi.begin (ssid, pass); в то время как (! серийный); client.begin ("broker_ip", net); // ИЗМЕНИТЬ ПОДХОДЯЩУЮ НАСТРОЙКУ client.onMessage (messageReceived); // запускаем клиент Modbus RTU if (! ModbusRTUClient.begin (9600)) {Serial.println («Не удалось запустить клиента Modbus RTU!»); в то время как (1); }}

недействительный цикл () {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 ("energy / main / Voltage", String (volt, 3)); client.publish ("энергия / основной / ток", String (amp, 3)); client.publish ("энергия / основная / мощность", String (ватт, 3)); client.publish ("энергия / основная / частота", String (hz, 3)); client.publish ("энергия / основная / энергия", 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 * * См. Руководство по протоколу 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 милливольт = word1 << 16 | word2; // битовая математика volt = милливольт / 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 миллиампер = word1 << 16 | word2; ампер = миллиампер / 1000,0; } обратный ампер; }

double readPower () {двойной ватт = 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 милливатт; если (слово1 >> 7 == 0) {милливатт = слово1

Рекомендуемые: