Обновить
0
0

Пользователь

Отправить сообщение

Наполнение бачка с отсечкой по времени имеет один минус: давление на входе может быть низким, когда кончилась вода в баке осмоса.

Кратко поделюсь решением своих задач:

  • включать электроподогрев двигателя машины по расписанию (через уличную розетку), при необходимости управлять вручную

  • дистанционное открывание/закрывание ворот с телефона одной кнопкой

  • не использовать облачные решения и сим-карты (для безопасности)

Железяки:
  • роутер с OpenWRT (белый IP, Wireguard-сервер, пакеты: luci-app-commands, python3, python3-requests, cron)

  • WiFi-реле Sonoff miniR2, цена 500р

  • телефон Android. ПО: wireguard, Firefox Focus

Что сделано:
  • создана отдельная подсеть (VLAN) для IoT устройств без выхода в инет.

  • Реле переведено в DIY-режим (см. документацию производителя), при этом отключается доступ в облако, управление и обратная связь осуществляется через HTTP-POST запросы

  • при необходимости делается пропил дремелем между контактами +перемычка (ссылка) для получения гальванически развязанных контактов (нажимать кнопки)

  • У производителя реле есть примеры POST запроса, пришлось лишь перевести их на Python для запуска на роутере (пакет luci-app-commands предоставляет гиперссылки для любых кастомных команд). Открыл с телефона ссылку - команда выполнилась.

  • для удобства открытия ссылок вынес их через Firefox Focus на рабочий экран телефона.

  • реле подогревателя интегрировано в огромную дождезащищенную уличную китайскую розетку отменного качества (ссылку к сожалению не могу найти). Настроен обычный режим - удержание последней поданной команды (вкл или выкл).

  • реле ворот - соответственно в модуле ворот на контактах последовательного управления (открыть-остановить-закрыть-остановить). Через http запросы настроен импульсный режим (при подаче команды включить - реле замыкается на 0.5сек - имитация нажатия кнопки).

  • cron на роутере настроен на авто включение и выключение подогрева

скрипты Python
отключить подогрев:
import http.client
import json

conn = http.client.HTTPConnection("192.168.100.201", 8081)
payload = json.dumps({
  "deviceid": "10015a6cdd",
  "data": {
    "switch": "off"
  }
})
headers = {
  'Content-Type': 'application/json'
}
conn.request("POST", "/zeroconf/switch", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))

включить подогрев:
import http.client
import json

conn = http.client.HTTPConnection("192.168.100.201", 8081)
payload = json.dumps({
  "deviceid": "10015a6cdd",
  "data": {
    "switch": "on"
  }
})
headers = {
  'Content-Type': 'application/json'
}
conn.request("POST", "/zeroconf/switch", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))

посмотреть статус реле:
import http.client
import json

conn = http.client.HTTPConnection("192.168.100.201", 8081)
payload = json.dumps({
  "deviceid": "10015a6cdd",
  "data": { }
})
headers = {
  'Content-Type': 'application/json'
}
conn.request("POST", "/zeroconf/info", payload, headers)
res = conn.getresponse()
data = res.read()
decoded = data.decode("utf-8")
#print(decoded)
dct = eval(decoded.replace('false', 'False'))
#print(dct, sep='\n')
print(dct['data']['switch'])

активация импульсного режима:
import http.client
import json

conn = http.client.HTTPConnection("192.168.100.201", 8081)
payload = json.dumps({
  "deviceid": "",
  "data": {
      "pulse": "on", 
      "pulseWidth": 1000
  }
})
headers = {
  'Content-Type': 'application/json'
}
conn.request("POST", "/zeroconf/pulse", payload, headers)
res = conn.getresponse()
data = res.read()
decoded = data.decode("utf-8")
#print(decoded)
dct = eval(decoded.replace('false', 'False'))
print(dct, sep='\n')
#print(dct['data']['switch'])

другие примеры на сайте производителя

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность