Оглавление:
Видео: Монитор счета за электроэнергию: 4 шага
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:50
ОБ ЭТОМ ПРОЕКТЕ
Если вы действительно хотите сделать свой дом умнее, вы, вероятно, захотите начать со своих ежемесячных счетов (например, за электроэнергию, газ и т. Д.…). Как говорят некоторые, 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. Программное обеспечение, необходимое
Программное обеспечение
Запустите компьютер и откройте 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
Рекомендуемые:
СИСТЕМА СЧЕТА И УПРАВЛЕНИЯ ЗАПАСОМ: 3 шага
СИСТЕМА УПРАВЛЕНИЯ СЧЕТАМИ И СЧЕТАМИ: С помощью этих инструкций я подскажу вам идею создания системы управления счетами и инвентаризацией. С использованием доступа MS. Это очень просто и не требует дополнительных знаний компьютера или программирования. Если у вас есть базовые знания Ms Доступ, столы. формы и отчеты t
Монитор смягчения последствий радона: 4 шага
Монитор по снижению уровня радона: обзор Радон естественным образом образуется из камней и почвы под нашими домами в Соединенных Штатах и Европейском Союзе. Это всегда вокруг нас невидимый радиоактивный газ без запаха, вкуса и запаха. Радон проблематичен, потому что он проникает в наш дом
Монитор водонагревателя AO Smith Lowes IRIS: 3 шага
AO Smith Water Heater Monitor Lowes IRIS: Вскоре после покупки нового водонагревателя, способного быть «умным»; или дистанционно. Lowes прекратил выпуск своей платформы IRIS, сделав все продукты IRIS бесполезными. Хотя они и выпустили исходный код для своего хаба, но я
Таймер счета Arduino для объявления: 5 шагов
Таймер отсчета Arduino для объявления: это таймер обратного отсчета, который работает с использованием Arduino UNO и ЖК-монитора. Причина, по которой я сделал этот проект, потому что в нашей школе (KCIS) нам нужно резервировать обед каждую среду в 21:30 онлайн. Однако самая известная и еда, которая есть в г
Счета: 10 шагов
Счета-фактуры: Счета-фактуры - это большая часть любой профессиональной работы, выполняемой для человека или компании. В счете-фактуре точно указывается, какая работа была сделана и сколько за нее было начислено, чтобы не было путаницы. Я занимаюсь укладкой напольных покрытий, поэтому собираюсь выложить