Tasmota MagicHome RGBW
Стандартный модуль MagicHome путает цвета потому тут нам подсказывают какие пины, за что отвечают
эта конфигурация с последней тасмотой на ура подхватываются модулем tasmota HomeAssistant
Стандартный модуль MagicHome путает цвета потому тут нам подсказывают какие пины, за что отвечают
эта конфигурация с последней тасмотой на ура подхватываются модулем tasmota HomeAssistant
и так тут берем мучаемся но все же запускаем мертвую камеру как ip камеру
Далее пробуем настроить детектор движения, ведь лишних датчиков не бывает
вроде тут есть инструкция, но файлы которые можно найти в репозиторием выдавали
snx_isp_ctl Segmentation fault
mosquitto_pub Segmentation fault
единственные файлы которые у меня заработали это файлы с «/media/mmcblk0p2/data/test»
Но mqtt там нет, а wget не хочет работать с post
решение
создаем два файла
vi /media/mmcblk0p2/data/usr/bin/jsonmotion.sh
#!/bin/sh
json=$(cat <<EOF
{
"motion": true
}
EOF
)&&len=${#json}&&echo -e "POST /api/webhook/my-super-secret-webhook-id HTTP/1.1\r\nHost: 192.168.1.88\r\nContent-type: application/json\r\nContent-length: $len\r\nConnection: close \r\n\r\n$json" | nc -i 3 host.ha 8123
chmod 755 /media/mmcblk0p2/data/usr/bin/jsonmotion.sh
vi /media/mmcblk0p2/data/usr/bin/jsonnomotion.sh
#!/bin/sh
json=$(cat <<EOF
{
"motion": false
}
EOF
)&&len=${#json}&&echo -e "POST /api/webhook/my-super-secret-webhook-id HTTP/1.1\r\nHost: 192.168.1.88\r\nContent-type: application/json\r\nContent-length: $len\r\nConnection: close \r\n\r\n$json" | nc -i 3 host.ha 8123
chmod 755 /media/mmcblk0p2/data/usr/bin/jsonnomotion.sh
и меняем vi /media/mmcblk0p2/data/usr/bin/rtsp-md.sh
#!/bin/sh
# Copyright 2018 Vladimir Dronnikov
# GPL
# MQTT added by Johan Leirnes 2018-11-28
snx_isp_ctl --mdset-thre 1000 # YMMV
snx_isp_md 2>&1 | awk '
/^Detected Moving!$/ {
if (alarm == 0) {
alarm = 1
print "+alarm"
system("/media/mmcblk0p2/data/usr/bin/jsonmotion.sh")
}
}
/(have no motion status = 0)/{
if (alarm != 0) {
alarm = 0
print "-alarm"
system("/media/mmcblk0p2/data/usr/bin/jsonnomotion.sh")
}
}
'
Итак, показатели счетчиков Techem собираем показания с помощью iM871A-USB | IMST и wmbusmeters
типы наших счетчиком
счетчик тепла
manufacturer: (TCH) Techem Service (0x5068)
type: Heat Cost Allocator (0x08) encrypted
ver: 0x94
и счетчик воды (горячей и холодной)
manufacturer: (TCH) Techem Service (0x5068)
type: Radio converter (meter side) (0x37) encrypted
ver: 0x95
на системе линукс устанавливаем дополнительные библиотеки клонируем репозитариум и устанавливаем программу.
sudo apt install librtlsdr-dev
git clone https://github.com/weetmuts/wmbusmeters.git
cd wmbusmeters
./configure; make; sudo make install
собираем данные которые можем получить, что
wmbusmeters --debug auto:c1 > ~/txt.txt 2>&1 &
открываем файл
nano ~/txt.txt
и ищем в нем наши счетчик воды
ctrl+w
вписываем номер с счетчика воды
пункт 1 на фото
и создаем файл с (внимание в случае со счетчиками воды номер счетчика и номер, который он передает, разный — потому id с которого будем слушать сообщение это номер 2 на фото)
nano /etc/wmbusmeters.d/woda
name=woda
id=пункт 2 с фото сверху
ctr+o
ctr+x
Y
enter
nano ~/txt.txt
и ищем в нем наши счетчик воды
ctrl+w
вписываем номер с счетчика тепла и находим id который заканчивается нашим номер пункт 2 на фото ниже
и создаем файл с нашими батареями
nano /etc/wmbusmeters.d/vanna
name=vanna
id=пункт 1+2 на фото сверху
проделываем последние шаги со всеми счетчиками
Настаиваем сервис
nano /etc/wmbusmeters.conf
loglevel=normal
# You can use auto:t1 to find the device you have connected to your system.
# But do not use auto here since it will cause unnecessary and slow probing of the serial ports.
device=im871a:t1
# And mbus
logtelegrams=true
format=json
meterfiles=/var/lib/wmbusmeters/meter_readings
meterfilesaction=overwrite
meterfilesnaming=name
meterfilestimestamp=day
logfile=/var/log/wmbusmeters/wmbusmeters.log
alarmtimeout=1h
alarmexpectedactivity=mon-sun(00-23)
ignoreduplicates=true
shell=/usr/bin/mosquitto_pub -h host -u login -P password -t wmbusmeters/$METER_ID -m "$METER_JSON"
alarmshell=/usr/bin/mosquitto_pub -h host -u login -P password -t wmbusmeters_alarm -m "$ALARM_TYPE $ALARM_MESSAGE"
Меняем выделенные значения на свои.
Далее, устанавливаем сервис
sudo systemctl enable wmbusmeters
и запускаем
sudo systemctl start wmbusmeters
Проверьте установлен ли у вас mosquitto_pub ошибок в лога у меня не было
Выполните mosquitto_pub для теста система подскажет команду для установки нужного пакеты
как результат мы получим наши счетчики. Вода
И тепло, с показаниями температуры
Как я вытягивал камеры с очень серого IP малой кровью
Для работы с IPsec мы будем использовать пакет strongSwan, установим его:
apt install strongswan
Затем откроем файл настроек /etc/ipsec.conf и добавим в его конец следующие две секции:
conn rw-base
fragmentation=yes
dpdaction=clear
dpdtimeout=90s
dpddelay=30sconn l2tp-vpn
also=rw-base
ike=aes128-sha256-modp3072
esp=aes128-sha256-modp3072
leftsubnet=%dynamic[/1701]
rightsubnet=%dynamic
mark=%unique
leftauth=psk
rightauth=psk
type=transport
auto=add
Первая секция задает общие параметры: включает фрагментацию IKE и настраивает протокол обнаружения мертвых узлов (Dead Peer Detection, DPD), отвечающий за обнаружение неактивных клиентов. Вторая относится уже к L2TP-соединениям, указывая использовать транспортный режим IPsec, аутентификацию по общему ключу и задает используемые шифры. Приведенные значения являются рекомендуемыми и взяты из официальной документации strongSwan.
Общий ключ следует указать в файле /etc/ipsec.secrets, добавив в него следующую строку:
%any %any : PSK "mySharedKey"
Где mySharedKey — общий ключ, так как от него зависит безопасность вашей VPN-сети мы рекомендуем использовать в качестве ключа случайно сгенерированную строку из букв, цифр и спецсимволов. Для этого можно воспользоваться командой:
openssl rand -base64 18
Результатом ее выполнения станет случайная строка длинной в 18 символов.
После внесения указанных настроек перезапустим службу:
systemctl restart strongswan
В Ubuntu имя службы несколько иное — strongswan-starter, поэтому команда будет иметь вид:
systemctl restart strongswan-starter
Для реализации функций L2TP-сервера предназначен пакет xl2tpd, для его установки выполните:
apt install xl2tpd
Затем откройте файл настроек /etc/xl2tpd/xl2tpd.conf, раскомментируйте и приведите к следующему виду опции:
[global]
port = 1701
auth file = /etc/ppp/chap-secrets
access control = no
ipsec saref = yes
force userspace = yes[lns default]
exclusive = no
ip range = 10.2.2.100-10.2.2.199
hidden bit = no
local ip = 10.2.2.1
length bit = yes
require authentication = yes
name = l2tp-vpn
pppoptfile = /etc/ppp/options.xl2tpd
flow bit = yes
Большая часть опций относится к настройке протокола L2TP и требует понимания его работы, поэтому мы на них останавливаться не будем. Разберем те опции, которые имеют существенное значение. Параметр auth file указывает на файл с данными для аутентификации, а pppoptfile — набор опций для PPP-соединения, которое используется внутри L2TP-туннеля, name — имя сервера, которое будет использоваться для поиска аутентификационных данных в файле chap-secrets.
Опции local ip и ip range отвечают за локальный адрес сервера в VPN-сети и диапазон адресов для выдачи удаленным клиентам. Здесь можно использовать два подхода: выдавать клиентам адреса из диапазона локальной сети офиса и включить ProxyARP, в этом случае настраивать маршрутизацию на клиентах не требуется, они будут как-бы включены в общую сеть офиса на канальном уровне (L2), либо выдавать адреса из непересекающегося диапазона и использовать маршрутизацию. Автоматизировать создание маршрутов для Windows-клиентов можно с использованием PowerShell.
Для настройки PPP перейдем в /etc/ppp и скопируем стандартный файл настроек:
cd /etc/ppp
cp options options.xl2tpd
Затем открываем файл /etc/ppp/options.xl2tpd на редактирование и приводим к следующему виду. Опции перечислены в порядке их следования, нужно раскомментировать их и указать нужное значение, если опция отсутствует, то ее следует добавить в конце файла.
asyncmap 0
auth
crtscts
lock
hide-password
modem
mtu 1460
lcp-echo-interval 30
lcp-echo-failure 4
noipx
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
multilink
mppe-stateful
Если вы будете использовать ProxyARP то дополнительно раскомментируйте опцию:
proxyarp
Также для Windows-клиентов можно передать настройку DNS-серверов, для этого добавьте опции:
ms-dns 192.168.1.1
ms-dns 192.168.1.2
Это позволит настроить первичный и альтернативный DNS-сервера в системе.
Сохраним все внесенные изменения и перезапустим службу L2TP-сервера:
systemctl restart xl2tpd
Строку со следующим сообщением можно проигнорировать, на работу VPN-сервера она не влияет:
xl2tpd[843]: setsockopt recvref[30]: Protocol not available
Заключительным этапом настройки будет создание учетных записей для удаленных клиентов, для этого откроем файл /etc/ppp/chap-secrets и внесем следующую строку:
ivanov l2tp-vpn Pa$$word_1 *
Первым указываем логин, затем имя службы, оно должно совпадать с тем, которое мы указали в опции name в xl2tpd.conf, после него идет пароль и IP-адрес клиента, символ * обозначает что можно присвоить любой адрес из выбранного диапазона. Если же требуется выдать клиенту постоянный адрес, то его следует указать явно, и он не должен входить в динамический диапазон указанный в ip range, например:
petrov l2tp-vpn Pa$$word_1 10.2.2.99
Для доступа к L2TP-серверу следует разрешить в брандмауэре входящие подключения к портам 500 UDP, 1701 UDP и 4500 UDP.
И инструкция для переброски портов доступа в интернет клиента VPN через сервер VPN
nano /etc/ppp/ip-up добавляем
iptables -t nat -A POSTROUTING -s $5 -j MASQUERADE
iptables -A FORWARD -s $5 -j ACCEPT
nano /etc/ppp/ip-down добавляем
iptables -t nat -D POSTROUTING -s $5 -j MASQUERADE
iptables -D FORWARD -s $5 -j ACCEPT
добавлено 22.02.2024
все то же самое, но если вы хотите параллельно использовать pptp
apt install pptpd
sudo systemctl enable pptpd
sudo systemctl start pptpd
sudo systemctl status pptpd
/etc/ppp/chap-secrets и внесем следующую строку:
petrov1 pptp Pa$$word_1 10.2.2.97
И так мы установили всю систему и установили сертификаты, все бы хорошо, но теперь доступ по локальному адресу должен быть по https://192.168.*.*:8123 конечно с ругательством и.т.п
Изначально было попытка настроить роутер который бы перебрасывал из локальной сети на внутренний адрес по домену этакий /etc/hosts на роутере что вполне возможно на некоторых прошивках например Padawan, но у меня две сети и Home Assistant находится во внутренней 192.168.1.*** и с 192.168.0.*** разделено через wan.
Перенаправление не работает и доступ по домену homeassistant.domaen.ru из локальной сети кидает на вебморду роутера 192.168.0.1
Решение оказалось намного проще.
Создаете себе еще один суб-домен localhomeassistant.domaen.ru и прописываете ему A запись 192.168.1.***
Если получаете сертификат через DNS проблемы заканчиваются, разве если ходите можно создать для главной сети 192.168.0.*** тогда создаете себе имя local1homeassistant.domaen.ru или что-то подобное с A записью 192.168.0.5 (wan) роутера 192.168.1.*** и на него тоже получаете сертификат
Если решились заморочиться с получением сертификатов через http, то сначала всем записям прописываете внешний IP а после получения сертификата на три домена поменяйте IP на локальные.
odksięgowanie
SELECT TOP (1000) [dkpd_IdRoku]
,[dkpd_NumerLp]
,[dkpd_NumerPozycji]
FROM [dbo].[dkr_ParametrDziennika]
SELECT TOP (1000) [dkr_Id]
,[dkr_Status]
,[dkr_Ksiegowal]
,[dkr_NrWDzienniku]
FROM [ITIST].[dbo].[dkr__Dokument] where dkr_Id >469
отменяем проведение документов с id > 471
UPDATE dbo.dkr__Dokument
SET
dkr_Status = 1,
dkr_Ksiegowal=NULL,
dkr_NrWDzienniku=NULL
where dkr_Id >471
записываем следующий номер в дневнике последний+1
dkr__Dokument.dkr_NrWDzienniku
Update [dbo].[dkr_ParametrDziennika] set dkpd_NumerLp = 115 where dkpd_IdRoku = 3
dkpd_IdRoku = порядковый номер года для обращения к справочнику
SELECT TOP (1000) [dkr_Id]
,[dkr_IdRoku]
,[dkr_DataDekretacji]
,[dkr_DataDokumentu]
,[dkr_DataOperacji]
,[dkr_Status]
,[dkr_Rejestr]
,[dkr_Numer]
,[dkr_NrPelny]
,[dkr_DokumentZrodlowy]
,[dkr_KontrolaBilansowania]
,[dkr_Waluta]
,[dkr_WalutaWyswietlana]
,[dkr_KursDokumentu]
,[dkr_LiczbaJednostek]
,[dkr_RodzajKursu]
,[dkr_DataKursu]
,[dkr_IdBanku]
,[dkr_Kwota]
,[dkr_KwotaWaluta]
,[dkr_Uwagi]
,[dkr_IdKategorii]
,[dkr_Dekretowal]
,[dkr_Ksiegowal]
,[dkr_TypObiektu]
,[dkr_IdObiektu]
,[dkr_TypDokImport]
,[dkr_IdDokImport]
,[dkr_ImportPochodzenie]
,[dkr_IdKh]
,[dkr_SymbolKh]
,[dkr_NrWDzienniku]
,[dkr_Podtyp]
,[dkr_TrybWprowadzaniaRozrachunkow]
,[dkr_WalutaKursWyswietlany]
,[dkr_KwotaWn]
,[dkr_KwotaMa]
,[dkr_KwotaWalutaWn]
,[dkr_KwotaWalutaMa]
,[dkr_Storno]
,[dkr_Opis]
,[dkr_RodzajDowodu]
,[dkr_IdObiektuVatOss]
FROM [dbo].[dkr__Dokument]
ошибка при загрузке модуля
PHP Startup: Unable to load dynamic library '/opt/php70/lib/php/modules/xmlreader.so' - /opt/php70/lib/php/modules/xmlreader.so: undefined symbol: dom_node_class_entry in Unknown on line 0
вызвана сортировкой файлов загружаемых модулей
решается
xmlreader.ini
; configuration for php xml module
; priority=20
;extension=xmlreader.so
и
dom.ini
extension=dom.so
extension=xmlreader.so
Проблема собственно в следующем, при активации сканера NFC вешается событие на считывание метки, и в примерах я не нашел как его приостановить или изменить полезно когда есть несколько типов считывания, да и просто если нужно приостановить работу сканера
например в примере
scanButton.addEventListener("click", async () => {
log("User clicked scan button");
try {
const ndef = new NDEFReader();
await ndef.scan();
log("> Scan started");
ndef.addEventListener("readingerror", () => {
log("Argh! Cannot read data from the NFC tag. Try another one?");
});
ndef.addEventListener("reading", ({ message, serialNumber }) => {
log(`> Serial Number: ${serialNumber}`);
log(`> Records: (${message.records.length})`);
});
} catch (error) {
log("Argh! " + error);
}
});
writeButton.addEventListener("click", async () => {
log("User clicked write button");
try {
const ndef = new NDEFReader();
await ndef.write("Hello world!");
log("> Message written");
} catch (error) {
log("Argh! " + error);
}
});
при повторном (n) срабатывание тригера scanButton сканер будет дублировать (n) раз
log(`> Serial Number: ${serialNumber}`);
log(`> Serial Number: ${serialNumber}`); //* n
и чтоб от этого избавится, нужно вынести активацию сканера из подписчика клика
let ndef = new NDEFReader();
async function initNFC(){
try {
await ndef.scan();
} catch (error) {
curlog("Argh! " + error);
}
}
initNFC();
scanButton.addEventListener("click", async () => {
log("User clicked scan button");
try {
const ndef = new NDEFReader();
await ndef.scan();
log("> Scan started");
ndef.addEventListener("readingerror", () => {
log("Argh! Cannot read data from the NFC tag. Try another one?");
});
ndef.addEventListener("reading", ({ message, serialNumber }) => {
log(`> Serial Number: ${serialNumber}`);
log(`> Records: (${message.records.length})`);
});
} catch (error) {
log("Argh! " + error);
}
});
далее выносим безымянную функцию
let ndef = new NDEFReader();
async function initNFC(){
try {
await ndef.scan();
} catch (error) {
curlog("Argh! " + error);
}
}
initNFC();
function readr({ message, serialNumber }){
log(`> Serial Number: ${serialNumber}`);
log(`> Records: (${message.records.length})`);
}
scanButton.addEventListener("click", async () => {
log("User clicked scan button");
ndef.addEventListener("readingerror", () => {
log("Argh! Cannot read data from the NFC tag. Try another one?");
});
ndef.addEventListener("reading", readr ({ message, serialNumber }) => {
log(`> Serial Number: ${serialNumber}`);
log(`> Records: (${message.records.length})`);
},true);
});
что позволяет нам отключить функцию readr при необходимости
let ndef = new NDEFReader();
async function initNFC(){
try {
await ndef.scan();
} catch (error) {
curlog("Argh! " + error);
}
}
initNFC();
function readr({ message, serialNumber }){
log(`> Serial Number: ${serialNumber}`);
log(`> Records: (${message.records.length})`);
}
scanButton.addEventListener("click", async () => {
log("User clicked scan button");
ndef.addEventListener("readingerror", () => {
log("Argh! Cannot read data from the NFC tag. Try another one?");
});
ndef.addEventListener("reading", readr, true);
});
disableScanButton.addEventListener("click", () => {
ndef.removeEventListener("reading", readr, false);
});
Он запускает Debian Stretch 9.2 64bit, и на 10 тоже
sudo apt update
sudo apt install xfonts-75dpi xfonts-base gvfs colord glew-utils libvisual-0.4-plugins gstreamer1.0-tools opus-tools qt5-image-formats-plugins qtwayland5 qt5-qmltooling-plugins librsvg2-bin lm-sensors
sudo wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.stretch_amd64.deb
sudo dpkg -i wkhtmltox_0.12.5-1.stretch_amd64.deb
sudo cp /usr/local/bin/wkhtmltopdf /usr/bin/
sudo cp /usr/local/bin/wkhtmltoimage /usr/bin/
wkhtmltopdf -V
wkhtmltopdf 0.12.5 (with patched qt)