Отслеживайте свои счета за электроэнергию через Modbus, MKR WiFi 1010 и RS485
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Необходимые инструменты и машины
| ||||
| ||||
| ||||
|
Приложения и онлайн-сервисы
| ||||
| ||||
|
Об этом проекте
Если вы действительно хотите сделать свой дом умнее, вы, вероятно, захотите начать со своих ежемесячных счетов (например, за электроэнергию, газ и т. Д.). Как говорят некоторые: Хорошо для планеты, кошелька и прибыли . Аппаратное обеспечение с открытым исходным кодом - это наш способ добиться устойчивости в домашних условиях! Эта идея побудила нас создать простое и безопасное решение, легко интегрируемое с любым программным обеспечением для домашней автоматизации, поскольку оно предоставляет данные через MQTT (в нашем случае мы покажем вам, как интегрировать его в Home Assistant).
Обзор
Чтобы измерить потребление электроэнергии, мы решили использовать счетчик энергии Finder, поскольку он разработан для использования на DIN-рейке и идеально подходит для основного шкафа в нашем доме. Самое замечательное в этом продукте то, что он имеет RS485 Modbus . interface, промышленный стандартный протокол связи, который упрощает общение с Arduino. Фактически, Arduino выпустила официальный щит MKR485 . и две библиотеки для декодирования протокола. В качестве основной платы мы выбрали Arduino MKR WiFi . 1010, поскольку он имеет форм-фактор MKR и имеет возможность подключения к Wi-Fi.
Настройка
Предупреждение! Ознакомьтесь с правилами вашей страны по обращению с электрической системой вашего дома и будьте предельно осторожны, потому что это может быть смертельно опасным! Если вы не знаете как вызвать электрика. Первым делом установите счетчик в свой электрический шкаф. Чтобы обеспечить безопасную работу, отключите питание от электрического разъема перед системой . и дважды проверьте мультиметром, что между клеммами нет напряжения .
Затем поместите счетчик энергии в свой шкаф и подключите токоведущие и нейтральные провода от главного выключателя к входу счетчика, не забудьте использовать цветовое соглашение (синий для нейтрали и коричневый / черный / серый для напряжения под напряжением в ЕС). Выход должен быть подключен к остальной части системы.
Сделанный? Пора вкрутить соединение RS485! Мы будем использовать однопарный витой кабель с заземлением, обычно используемый для телефонных линий. С помощью этого кабеля вы можете передавать на большие расстояния (1,2 км). Однако мы просто используем кабель, достаточно длинный, чтобы выйти из шкафа и разместить Arduino в доступном месте.
Интерфейс RS485 называет свои клеммы A, B и COM.
Поскольку экран MKR поддерживает также полнодуплексный режим, вы увидите два других терминала, Y и Z. Здесь мы собираемся прикрутить другой конец кабеля, поскольку мы знаем из таблицы данных, что полудуплексная связь происходит только по Y и Z терминалы. Терминал COM должен быть подключен к ISOGND. Поскольку мы используем полудуплексное соединение и проводка является одноранговой, мы должны настроить переключатели на экране MKR485 в соответствии с нашей настройкой: мы устанавливаем ПОЛОВИНУ (2 на ВЫКЛ.) И завершение на YZ (3 в ON); первый не имеет значения. Терминатор представляет собой сопротивление, соединяющее два вывода данных, для подавления помех.
Это оно. Теперь вы можете закрыть кабинет и сосредоточиться на программном обеспечении!
Программное обеспечение
Запустите компьютер и откройте IDE. Вы можете использовать Arduino IDE или Arduino Create Editor. Код отвечает следующим требованиям:
- Связь Modbus,
- Управление Wi-Fi
- Протокол MQTT
Modbus - это протокол с открытым исходным кодом для промышленных датчиков и машин. Чтобы заставить Arduino говорить о Modbus, мы собираемся использовать библиотеку Arduino Modbus. Эта библиотека объединяет все обработчики и позволяет очень быстро подключить любое устройство Modbus. Поскольку мы собираемся читать регистры, следуя таблице данных счетчика, мы можем найти всю необходимую нам информацию, такую как коды функций, адрес регистра и размер регистра в словах. Но чтобы было понятнее, давайте объясним, как работает Modbus:
Сообщения Modbus имеют простую структуру:
01 03 04 00 16 00 02 25 C7
0x01
это адрес устройства
0x03
это код функции который сообщает устройству, хотим ли мы читать или записывать данные * в данном случае считываем регистры хранения
0x04
для Byte Count00 16 - Мы отправляем 4 байта регистрационного адреса (00 16) который сообщает устройству, что мы хотим прочитать
00 02
- t размер реестра (00 02) прописью (каждое слово имеет длину 2 байта)
Последние 4 байта - это код CRC . Этот код генерируется математической функцией на основе предыдущих байтов, это гарантирует, что сообщение было получено правильно.
В Arduino все это обрабатывается в if
состояние:
// Создано Альберто Перро - Officine Innesto //// Прочитать целое число из регистров хранения устройства Modbus float readCurrent () {float ampere =0 .; // следующая команда форматирует запрос и отправляет его через RS485 if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0016, 2)) {// Обработка ошибок Serial.print («не удалось прочитать напряжение!»); Serial.println (ModbusRTUClient.lastError ()); } еще {uint16_t word1 =ModbusRTUClient.read (); // чтение MSW из буфера uint16_t word2 =ModbusRTUClient.read (); // чтение LSW из буфера int32_t milliamp =word1 <<16 | word2; // объединяем слова для получения int ampere =milliamp / 1000.0; // преобразование в амперы} return ampere;}
В else
часть у нас есть обработчик ответа.
Поскольку этот регистр состоит из двух слов, мы должны соединить их двоичной математикой. Мы читаем слова из буфера и сохраняем их в виде целого числа без знака длиной 16 бит (2 байта или слово), затем мы объединяем их в целое число со знаком длиной 32 бита, сдвигая первое слово влево и применяя код <> ИЛИ над вторым словом. Таким образом, мы получаем значение тока в мА, разделив его на 1000, и получаем ток в амперах.
Этот же процесс адаптирован ко всему, что мы хотим прочитать.
Остальная часть кода предназначена для обработки сетей MQTT и WiFi.
Интеграция Home Assistant
Добавить счетчик в Home Assistant довольно просто. Предполагая, что у вас настроен брокер MQTT (вот руководство), все, что вам нужно сделать, это добавить новые определения в файл configuration.yaml.
датчик:- платформа:mqtt name:"Main Voltage" state_topic:"energy / main / Voltage" unit_of_measurement:"V"
Здесь вы должны указать название измерения, тему MQTT для чтения и единицу измерения количества. Сохраните файл, проверьте конфигурацию и перезагрузите Home Assistant, теперь измерения появятся на главной странице.
Home Assistant позаботится о создании графиков и автоматизирует процессы, вызванные вашими показаниями. Это руководство закончено, теперь вам нужно добавить функции и настроить его для своих целей!
Код
Мост Modbus RTU к MQTT для Finder
Этот эскиз обеспечивает полный мост между счетчиком энергии Finder и mqtt. Разработано для отслеживания затрат на электроэнергию и ее использования в Casa Jasmina.Производственный процесс
- Создайте своего робота для видеостриминга, управляемого через Интернет, с помощью Arduino и Raspberry Pi
- Создание монитора Ambilight с помощью Arduino
- Как создать монитор энергии и регистратор данных Arduino
- ЖК-анимация и игры
- Вольтметр своими руками с использованием Arduino и смартфона
- Монитор сердечного ритма с использованием Интернета вещей
- Arduino Temp. Монитор и часы реального времени с дисплеем 3.2
- WebServerBlink с использованием Arduino Uno WiFi
- Arduino - отправка температуры в Интернет через последовательный
- Формы энергии:кинетическая и потенциальная энергия