Лічильник SDM630 та OpenHAB

ля вимірювання параметрів електричної мережі на мій погляд доцільно використовувати створені для цього пристрої. Одним з таких пристроїв є лічильник електричної енергії Eastron SDM630  Наскільки я знаю він не сертифікований в Україні та не є вимірювальним приладом, але для дома ніхто не заважає його використовувати (його однофазний аналог в мене нарахував на 3 кВт більше у порівнянні з лічильником від обленерго. За цей період було спожито біля 4000 кВт*ч. Вважаю що це нормальний результат, хоча він ніяк не дає можливості робити висновки на відповідність китайського лічильника нормам). SDM630 окрім рахування спожитої енергії вимірює усі основні показники як напруга, струм, потужність активна те реактивна по фазам та у цілому та інші. Отримати ці значення можна за допомогою протоколу Modbus. Знайти опис регістрів можна наприклад за цим посиланням – SDM630-Modbus_Protocol.pdf (innon.com)

Я буду отримувати параметри електромережі за допомогою Openhub. Він має підтримку протоколу Modbus. Лічильник має порт RS485 у той час як openHAB працює у віртуальному середовищі та немає ніяких фізичних портів. Для можливості легкого переносу віртуальної машини у іншу систему віртуалізації чи апаратну платформу ніякого доступу з віртуальної машини до заліза робити не будемо. Для підключення будемо використовувати TCP2RS485 Modbus gateway. Схема виходить наступна:


Read More

Світло для ліжка

Вже давно мені не подобалась наявність тільки одного джерела світла у кімнаті. Через це треба було постійно вставати з ліжка щоб його вимкнути чи увімкнути, та й у більшості випадків треба було світло не у кімнаті, а локальне світло біля ліжка. Просто придбати маленький світильник це дуже просто та й займає він додаткове місце. Окрім цього вже багато років після ремонту ліжко чекало виготовлення узголів’я. Час прийшов, було вирішено зробити узголів’я та вмонтувати світло у нього. Основні вимоги до світла:

  • плавне вмикання/вимикання
  • наявність нічника
  • можливість керувати з будь-якої сторони ліжка

Схематично це повинно виглядати так

Створюємо креслення узголів’я, та віддаємо у меблеву майстерню на виготовлення, а тим часом переходимо до створення електроніки та програмного забезпечення.

Апаратна частина

У якості плати керування беремо саморобну плату на ESP32 котра має живлення через мережу Ethernet та перетворювач на 12В потужністю 13 Вт.
Read More

Моніторінг температури у будинку

Вартість енергоносіїв вимагає бути від сучасних будинків енергоефективними. Одного дня було вирішено перевірити наскільки температура всередині будинку залежить від температури на вулиці коли вдома немає опалення. Щоб ще зробити треба просто розташувати кілька вимірювачів температури, зібрати показники та намалювати графік. Read More

Друге життя Windows Phone – модем

Вже багато років в мене лежить Samsung Focus ( SGH-I917).  От він дочекався свого часу – його можна використовувати як 3G/LTE модем.

Він надасть можливість отримувати дані про температуру на дачі. Як “сервер” сбору даних будемо використовувати Orange Pi One (так само й як телефон просто лежала та чекала свого часу).  Підключити OrangePi до мережі інтернет за допомогою телефона дуже просто.

Телефон

  1.  Набираємо ##634# та дзаонимо – після цього з’являється діагностичне меню.
  2.  У діагностичному меню набираємо *#7284# – Modem, USB diag.
  3.  Вставляємо у модем картку яка дозволяє користуватись інтернетом.

OrangePi

Йдемо на сайт https://www.armbian.com/download/ та завантажуємо образ
Записуємо на SD картку за допомогою Win32diskimager
Вставляємо картку та завантажуємо систему, створюємо пароль, та нового користувача.
Підключаємо телефон до USB порта, перевіряємо що система його побачила (повинен бути пристрій ttyACM0):

Встановлюємо wvdial за допомогою команди

sudo apt-get install wvdial

Створюємо конфігурацію за допомогою команди

sudo wvdialconf

ця команда створить файл конфігурації cat /etc/wvdial.conf

Після додавання правильної APN вийшов такий файл:

[Dialer Defaults]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init3 = AT+CGDCONT=1,"IP","internet"
Modem Type = USB Modem
Phone = *99***1#
ISDN = 0
Auto Reconnect = on
Password = xz
New PPPD = yes
Username = xz
Modem = /dev/ttyACM0
Baud = 921600
Auto Reconnect = on

Перевіряємо найвність посилання /etc/resolv.conf =>  /run/resolvconf/resolv.conf, якщо немає – створюємо.
Додаємо до файлу /etc/network/interfaces конфігурацію:

auto ppp0
iface ppp0 inet wvdial

Перезавантажуємо, перевіряємо що все працює автоматично.

Встановлюємо openvpn клієнт за допомогою команди

apt-get install -y openvpn

додаємо конфігурацію клієнта та маємо можливість у будь-який час під’єднатись до пристроя.

Керування кондиціонером за допомогою OpenHAB

Керування кондиціонером за допомогою системи автоматизації будинку може бути корисним, але більшість дешевих домашніх кондиціонерів не мають інтерфейсів для керування. Вони можуть керуватись тільки за допомогою інфрачервоного пульта керування. Гарна новина у тому, що зробити  пристрій котрий буде відправляти на кондиціонер таки самі команди як пульт не складно. В інтернеті можна знайти кілька готових бібліотек, мені більш сподобалась arduino-heatpumpir. Вона підтримує arduino, ESP8266 та з моєю допомогою – ESP32.

arduino-heatpumpir це бібліотека, яка дозволяє керувати кондиціонерами з якогось коду, це не готове рішення. Для керування я бажаю використовувати OpenHAB  за допомогою MQTT. У якості апаратного забезпечення я буду використовувати ESP32 модуль з підтримкою Ethernet. Програмне забезпечення модуля – ESPHome. У результаті треба створити таке рішення:

Read More

Створення gerber з EAGLE

Зробити плату для DIY проекту можна вдома чи замовити на фабриці. Якщо є час та натхнення, то односторонню плату можна зробити вдома, якщо є ще більше часу та натхнення то можна зробити двосторонню плату вдома, а потім паяти перемички між шарами плати вручну. Але якщо ви бажаєте мати нормальну металізацію між шарами, дуже тонкі доріжки та інше – простіше замовити плату на фабриці. 5-10 плат розміром десь 10х10 см коштують $12-13 разом з доставкою в Україну. Деякі компанії можуть узяти в роботу файли з sprint layout чи EAGLE, але для універсальним є gerber формат.Read More

Ethernet модуль розумного будинку

Основним компонентом розумного будинку є пристрої які збирають якісь дані та відправляють до центрального модуля чи виконують команди центрального модуля. Зв’язок з центральним модулем може бути як дротовий так й бездротовий. Мої експеріменти:

MODBUS – центральний модуль повинен послідовно опитувати усі пристрої. Для збору даних з лічильника електроенергії гарний вибір (особливо якщо лічильник не має інших інтерфейсів), для збору інформації про стан вимикача освітлення та керування освітленням – на мій погляд поганий вибір. Мій тестовий стенд мав лічильник електроенергії, 1 вимикач та одне реле. Між вмиканням світла та спрацьовуванням реле проходив досить великий інтервал часу (у порівняні з роботою звичайного некерованого вимикача, іноді це займало десь пів секунди чи більше)

MQTT via WiFi – у якості пристроїв я використовував ESP8266 з прошивкою від Letscontrolit.  У цілому усе працювало, але іноді WiFi зв’язок пропадав, що приводило до затримок у передаванні команд (заходиш на кухню, а світло не вмикається). Та й потенційно ці система може бути виведена з ладу при наявності завад у радіоканалі.

Read More

pfSense mitm SSL proxy та firefox з Android

Після налаштування SSL Man In the Middle Filtering на pfSense для нормальної роботи треба встановити ca сертифікат на усіх пристроях.

Якщо просто завантжити сертифікат на Android за допомогою firefox, firefox завантажить сертифікат та ви зможете встановити його до системи, але firefox цей сертифікат його використовувати не буде. Щоб firefox розпізнав сертифікат як CA сертифікат треба щоб сервер віддав його як “application/x-x509-ca-cert” content-type.

Зробити це можна багатьма шляхами, я зробив це за допомогою сервера на Java:

package maxx.ca.rest;

import java.io.IOException;
import java.io.InputStream;

import org.apache.commons.io.IOUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class CertPage {
    @GetMapping(value = "/android", produces = "application/x-x509-ca-cert")
    public @ResponseBody
    byte[] getImageWithMediaType() throws IOException {
        InputStream in = getClass().getResourceAsStream("/ssl+ca.crt");
        return IOUtils.toByteArray(in);
    }
}

Відкриваємо firefox на Android та вводимо http://host:8080/android у строку адреси, встановлюємо сертифікат.

Openhab on FreeBSD: InfluxDB+Grafana persistence and graphing

Для керування домашніми приладами я використовую Openhab котрий інстальовано на FreeBSD. Як відомо, FreeBSD дуже гарна система, але є деяки ньюанси з програмним забезпеченням. З openhab ніяких проблем немає, але коли я спробував малювати графіки за допомогою Grafana проблема виникла. Сама інcтрукція по встановленню InfluxDb та Grafana є тут

На момент написанні цієї статті не виникло жодних проблем з встановленням InfluxDb та Grafana на FreeBSD (усе доступно у вигляді пакетів та встановлюється за допомогою 2-х команд). Навіть ніяких проблем з побудовою графіка у grafana. Проблема виникла у той час, коли треба було графік від grafana додати на дашбоард опенхаба. Grafana дозволяє експортувати графіки у вигляді малюнку з прямим посиланням, а опенхаб дозволяє вставляти малюнки на дашбоард. Проблема полягяла у тому, що grafana використовує phantomjs для генерування малюнку, а у пакетах цього додатка не було. На спробу експортуваи малюнок за посиланням отримуємо помилку:

Rendering failed – PhantomJS isn’t installed correctly

Перша спроба поставити з портів закінчилась невдало – помилка компіляції. Як з’ясувалось – проблема була у версії openssl, проблема вирішилась встановленням останньої версії openssl з пакетів. Після компіляції та копіювання phantomjs у папку, grafana змінила помилку на:

t=2019-02-09T15:18:25+0200 lvl=info msg=Rendering logger=rendering path="d-solo/Ita8FKXmk/heat-dashboard?orgId=1&from=1549707668905&to=1549718468906&panelId=2&width=1000&height=500&tz=Europe%2FKiev"
t=2019-02-09T15:18:25+0200 lvl=eror msg="Phantomjs exited with non zero exit code" logger=rendering error="exit status 255"
t=2019-02-09T15:18:25+0200 lvl=eror msg="Rendering failed." logger=context userId=1 orgId=1 uname=admin error="exit status 255"

Як з’ясувалось – не вистачало файла render.js. Знайти його можна за посиланням

Після копіювання цього файла до теки /usr/local/share/grafana/tools/phantomjs/ усе запрацювало як треба.

 

 

 

Встановлення та отримання стану виходу/входу за допомогою MQTT шини

Коли ви маєте вимикач та лампу, нічого вам не заважає контролювати напряму стан цієї лампи за допомогою вимикача, але ми не шукаємо простих рішень.

Маємо:

  • вимикач
  • лампа
  • openhab

Бажаємо: підключити лампу та вимикач до openhab, вимикати та вмикати лампу за допомогою цього вимикача.

Апаратне забезпечення: беремо raspberry pi (можна зробити на ESP8266 але є бажання не мати WiFi там, де його можна не мати), на вході зробимо просту схему для захисту (ну якщо вимикач буде далеко, а неподалік буде блискавка), на виході MOC3063 (навіть без додаткового сімістора вона позволяє керувати сучасними лампами).

Виходить щось таке:

 

 

 

 

 

Програмне забезпечення: spring-boot java додаток. Додаток можна знайти тут.

Openhab конфігурація:  повинна мати такий запис у секції items:

Switch PI1_SW_1 { mqtt=">[broker:/java-switch/gpio/out/GPIO 2:state:OFF:LOW],>[broker:/java-switch/gpio/out/GPIO 2:state:ON:HIGH],<[broker:/java-switch/gpio/in/GPIO 0:state:MAP(HILO.map)]" }

Як наслідок, воно працює. Затримка між командою зі станом та між та командою на зміну стану є приблизно 50 мс.

Як додаток можна подивитись (та змінити) поточний стан за допомогою веб інтерфейсу: