вторник, 9 сентября 2025 г.

OpenSMTPD + Dovecot + Sieve

Потребовалось для небольшоя почтовой задачки создать возможность раскладки входящей почты по определенным папкам почтового ящика в соответствии с некими правилами.

Установка и настройка OpenSMTPD и Dovecotдля базового функционала не рассматривается.

OpenSMTPD - получает почту, раскладывает ее по ящикам, отправляет почту ;
Dovecot - используя IMAP управляет письмами в ящиках;

В данной связке особых сложностей нет, каждый выполняет свои задачи. Но никто из них явно не обладает функционалом раскладки писем на основании правил.

Для Dovecot можно использовать скриптовый язык Sieve, реализующий требуемый функционал.
Для того, чтобы Dovecot мог использовать Sieve необходимо дополнительно установить pigeonhole.
Если установка производится из сырцов, то при сборке необходимо указать путь до каталога, где находится файл dovecot-config из комплекта Dovecot, например --with-dovecot=/path
При установке также устанавливаются доки, в которых много чего подробно написано, но в общую картину складывается не очень и на вскидку ни первого, ни со второго раза не заработало.

И теперь изложение в каком варианте настроек функционал заработал:
1.Создать в каталоге нужно пользователя (пусть будет - cat) каталог для Sieve:
user=cat;d=/home/${user}/sieve;[ -d $d ] || mkdir -p $d && chown $user $d
 

2.Создаем файл скрипта /home/cat/sieve/rules.sieve примерно следующего содержания:
require ["fileinto"];

if header :contains ["From"] ["home-3011"]
 {
    fileinto "Alerts";
 }
elsif header :contains ["X-Spam-Flag"] ["YES"]
 {
    fileinto "Junk";
 }
 else
  {
    keep;
  }

Согласно данным правилам входящие письма содержащие в поле "From" фразу "home-3011" будут перемещены в папку "Alerts" почтового ящика пользователя "cat". Входящие письма содержащие в поле "X-Spam-Flag" фразу "YES" будут перемещены в папку "Junk", остальные в папаку "INBOX".

3.Параметры Sieve в файле /etc/dovecot/conf.d/90-sieve.conf:
plugin {
...

sieve = file:~/sieve;active=~/sieve/rules.sieve

#
На время запуска и отладки Sieve включить подробный вывод инфы в файлы
sieve_trace_dir = /tmp

sieve_trace_level = matching

...

}

Файл 90-sieve.conf идет в комплекте с pigeonhole, если установка была из сырцов, то лежит он в "pigeonhole-dir-source"/doc/example-config/conf.d

4.Для раскладки писем используется "dovecot-lda" (lda - local delivery agent) из комплекта Dovecot. "dovecot-lda" использует скрипты Sieve для анализа писем.
Прописать в файле /etc/dovecot/conf.d/15-lda.conf:
protocol lda {
  mail_plugins = $mail_plugins sieve
  log_path =
  info_log_path =
  syslog_facility = mail
}

Логи отдаются syslog, правила sieve берутся из файла ~/sieve/rules.sieve, который был создан выше. 

5.OpenSMTPD отдает входящие письма "dovecot-lda" который и раскладывает их по папкам в соответствии со скриптом ~/sieve/rules.sieve:
/etc/opensmtpd/smtpd.conf:
table aliases file:/etc/aliases
action "local_mail" mda "/usr/local/dovecot/libexec/dovecot/dovecot-lda -d %{user.username}" alias <aliases>


Путь до "dovecot-lda" нужно указать в соответствии с текущей ОС.
 
6.Проверить работоспособность послав тестовое письмо.

пятница, 14 марта 2025 г.

Templates Zabbix for Megatec SNMP NetagentA DA807 UPS card

Существует в мире серия внешних модулей для управления UPS от megatec.com.tw. Используют эту серию разные производители UPS. И умеют эти модули управлять UPS и получать от него информация с использованием сетевого протокола SNMP. И есть в комплекте с модулем MIB файл и даже программа для удаленного управления UPS по SNMP.

Но вот захотелось мне помониторить такой модуль из Zabbix. Вроде бы что тут сложного - посмотрел MIB, позапускал snmpwalk/snmptranslate с нужными OID и дело в шляпе.

Но нет, наши восточные друзья, как часто бывает, модуль сделали и он с родным ПО вроде как и работает, но попытки использовать родной MIB во вне не увенчались успехом - никто такие OID не знает...

И тогда пришлось с помощью бубна и такой-то матери выискивать верное и работающее.

Результатом стал шаблон для Zabbix.

четверг, 13 февраля 2025 г.

Установка комплекта Node-Red+ MQTT+Zigbee2mqtt на планшет на базе Android для управления "умным домом"

Для реализации данного решения потребуется:
планшет (можно использовать и любой более/менее современный телефон, но размер экрана слишком мал для удобного управления) на котором можно получить разблокированный загрузчик и в дальнейшем, root права;
zigbee2mqtt контроллер;
OTG кабель;

Предполагается что Вы знаете, что такое IP адрес, командная строка и немного знакомы с unix системами.

Вы все делаете на свой страх и риск. Любые данные, находящиееся на планшете перед началом действий, могут и будут потеряны.

Мой выбор пал на Aquarius NS220  - 10", 2/16ГБ, Type-C. Брал на Авито.

Довел до стостояния root прав (на каждом конкретном уст-ве это достигается разными способами, поэтому нет смысла это описывать).

Все действия выполняются именно в такой последовательности, поскольку некоторые вещи зависят от наличия других вещей.

 

1.Termux
Берется на f-droid. Далее все делается в
Termux.
Запустить Termux, выполнить:
termux-change-repo
apt update
apt upgrade
pkg install root-repo tsu mc openssh coreutils nodejs
git

2.Настроить ssh:
ssh-keygen -t rsa -b 2048
cd .ssh
cat id_rsa.pub > authorized_keys
cp id_rsa /storage/self/primary/Download/
cd ~/

Забрать с планшета файл
id_rsa на свой комп, запустить puttygen.exe (из пакета PuTTY)
Импортировать id_rsa в puttygen.exe, при этом будет показан пользователь
для которого созданы ключи ssh, его и нужно использовать при логине с ключом (
или whoami для определения пользователя Андроида).
Нажать кнопку "Save private key" и записать файл с произвольным именем в защищенное место.
Запустить putty.exe, указать адрес, который получил планшет в сети, порт 8022, слева на дереве опций в разделе "Data"->"Auto-login username" прописать ранее определенное имя пользователя, в разделе "SSH"->"Auth"->"Private key file for authontication" указать полный путь к файлу с приватным ключом, который записали ранее.
Выбрать раздел "Windows"->"Translation"->"Remoute character set" и указать KOI8-R.
Выбрать раздел "Session"->"Saved session" и указать осмысленное имя подключения к планшету, нажать кнопку "Save".
В дальнейшем для подключения к планшету запустить
putty.exe, для подключения два раза кликнуть на имени ранее созданного подключения.
Чтобы не иметься с vi, nano и подобными "правильными" редакторами
используем mc (благо Termux позволяет) - работа с файлами, редактор текстовых файлов, выставление прав на файлы и.д. и т.п.

Далее все действия производятся через ssh подключение с компа. Все команды копируются на компе в буфер обмена, в putty вставляеются Shift+ПКМ, копируются -
Shift+ЛКМ
 

2.NodeRed
npm i -g --unsafe-perm node-red
node-red

При первом запуске будет создан каталог .node-red в котором содержаться конфиги.

С компа - http://адрес_планшета:1880

Если веб-морда доступна, то движемся дальше, если нет, смотрим вывод инфы при старте.
Останавливаем - Ctrl+C
Для недопущения посторонних к управлению NodeRed рекомендуется выставить авторизацию для доступа к настройкам и панели управления:
mcedit ~/.node-red/settings.js
(или идем в каталог .node-red и F4 на файле settings.js)
доступ к настройкам:
adminAuth
доступ к управлению: httpNodeAuth

Запуск как сервис:
node-red &
Остановка:
killall
node-red


3.MQTT
Функционал MQTT реализуется нодой в N
odeRed. Название ноды: node-red-contrib-aedes
Создать в NodeRed подключение "MQTT брокер"  используя ноду "aedes broker".
После деплоя должен поднятся порт 1883, убедится, что порт поднялся:
sudo netstat -ant

 

4.Zigbee2mqtt
Ноды, реализующий функционал zigbee2mqtt шлюза на
NodeRed не обнаружил.
zigbee2mqtt реализован отдельной прогой, являющейся по сути стандартом. Поскольку она также, как и NodeRed, реализована на nodejs, особых проблем не возникло.
Необходимо убедится, что
Zigbee контроллер распознается в Termux. Подключить контроллер OTG кабелем к планшету и посмотреть, что появилось:
sudo ls /dev|grep tty

среди всего прочего должно быть что-то такое: ttyACM0
таким образом название контроллера, в данном случае, будет: /dev/
ttyACM0
Установка Zigbee2mqtt шлюза:
npm install -g pnpm
git clone --depth 1 https://github.com/Koenkk/zigbee2mqtt.git zigbee2mqtt
cd zigbee2mqtt
pnpm install --no-frozen-lockfile
pnpm run build
cd ..
cp
zigbee2mqtt/data/configuration.example.yaml zigbee2mqtt/data/configuration.yaml
chmod 644
zigbee2mqtt/data/configuration.yaml

в configuration.yaml раскоментировать и установить параметры (
у меня - adapter: zstack):
mcedit zigbee2mqtt/data/configuration.yaml
frontend:
    enabled: true
    port: 8080
serial:
  port: /dev/ttyACM0
  adapter: zstack

Запуск:
su -c `which node` zigbee2mqtt/index.js &
Остановка:
sudo killall -9 su


С компа - http://адрес_планшета:8080
Для обнаружения zigbee уст-в  веб-морде нажать кнопку "Разрешить обнаружение".


Если доступа нет - логи лежат в zigbee2mqtt/data/log/

Zigbee2mqtt должен запускаться через su, т.к. требуется повышение привилегий для доступа к /dev/ttyACM0. Для редактирования конфига и просмотра логов также потребуются права root, поэтому и mc нужно запускать как
sudo mc
Будет хорошо запустить два подключения к планшету, в одном запусить mc от пользователя, в другом от root. В первом делать все настройки, во втором только то, что связано с
Zigbee2mqtt.

5.Завершение
После выполнения всего вышеперечисленного на планшете в среде
Termux будут выполнятся NodeRed+MQTT broker, Zigbee2mqtt+zigbee2mqtt контроллер. И браузер, в котором открыть адрес панели управления NodeRed http://127.0.0.1:1880/ui

Для запуска приложений при загрузке планшета или через виджеты возможно использовать следующие варианты:
Termux:Boot или Termux:Widget.

понедельник, 29 февраля 2016 г.

Как я заказывал точильный станок для ножей ЕРМАК через интернет

Периодически возникает потребность в заточке ножей. У многих возникает такая потребность. Чего проще, беру бытовую точилку, три четыре движения туда-сюда, и вуаля, нож заточен. Режет лучше чем раньше, но... не надолго и лезвие, при близком рассмотрении, все какое то "рваное". Ну что ж, в следующий раз беру точильный брусок, делаю возвратно-поступательные движение (с детства применяемый способ) и нож заточен. Получше чем первый вариант. Но всегда огорчали царапины на лезвии ножа после заточки. Пробовал на электрическом точильном станке станке, но уж больно быстро "слизывается" полотно ножа. Наверное, у опытного слесаря такая операция не вызовет проблем, но у меня не получалось сделать, как мне хотелось.
Как то на работе краем уха услышал отрывок разговора наших ножевых "маньяков" о заточке ножей. Заинтересовался, подошел, поспрашивал. Так для меня открылся мир заточных станков для ножей. Не долго думая, доверяя мнению "маньяков", купил набор Lansky. И только потом стал читать по этому вопросу. Информации вагон, но большая часть одно и тоже, изложенное в разных вариантах.
Подготовивишись теоретически принялся за практическую часть. Первый нож заточил отлично... Режет просто чудо! Но, когда эйфория спала, оказалось что не совсем верно выставил направляющие для камней и угол получился совершенно не тот, который планировался.
Но мы не привыкли отступать, нам расколоть его поможет киножурнал "Хочу все знать" (шутка). Вторая попытка оказалась более удачной. После окончания заточки помыл нож, стал вытирать кухонным полотенцем и... порезался. Одно неосторожное движение и нож разрезал несколько слоев вафельного полотенца и зацепил кожу на пальце. Разрез был короткий, но чертовски глубокий. Даааа.
Заточил кухонные ножи. Жена прочувствовала. Восторг!
То же произошло и с тещей.
Зачем я все это пишу? Просто пока не попробовал заточку на станке, разница в заточке не могла проявится. Попробуйте, ощутите разницу.
А вот теперь о главном. Lansky вещь хорошая, но все же не полноценный станок. Захотелось большего. Захотелось полноценного станка, с нормальными камнями, с удобным креплением полотна. В интернетах полно предложений готовых станков и инструкций, как самому сделать станок. Но большая часть предложений либо не сильно отличались от Lansky, либо имела заоблачные цены (еще и камни нужны, они тоже не копейки стоят, о водных вообще молчу). И однажды на оружейном форуме наткнулся на фото станка, выглядевшего пришельцем из будущего. Пошел на сайт источника фото. Дааа, это что-то. На мой взгляд  - отличный дизайн, широкий функционал, удобный крепеж полотна. Вызвало сомнение использование материала - что вроде оргстекла (надеюсь, не сильно ошибся, полимер в любом случае), распилка на лазерном станке. Но вроде как отзывы были положительные.
А вот дальше пошел русский реализм. Цена за не топовую модель, но и за не самую младшую почти 25тыс. руб. Для меня цена высоковата. Но скрепя сердцем все же решился купить. Написал изготовителю письмо с просьбой о покупке. Оказалось срок изготовления ДВА месяца. Два!!! Вот жеж. В то время, как наши корабли бороздят просторы космоса, а тут такие сроки. Но... согласился.
Терпеливо жду, прошел положенный срок, никакой информации нет. Набрался наглости написал сам. Оказывается, изготовитель болел почти месяц и выполнение заказа откладывается. Но клиенту ни гу-гу. Ну ладно, все мы привыкли к наплевательскому отношению со стороны продавцов, перетерплю.
Сегодня пришло письмо от изготовителя, что станок "почти готов" и можно произвести оплату... по номеру банковской карты, через WEBMONEY или QIWI.
Мне нужно послать 25 тысяч на "деревню дедушке".
Постойте, говорю, а как же счет, чек или еще что, как же мне быть в случае каких либо проблем при проверке товара или его пересылке?
В ответ  -"хотите докумены, платите как юр. лицо - цена на 15% выше".
"Так как мне быть без чека на руках".
И тут же ответ - "Нет проблем, заказ снимается".
Ну ладно.
Пишу в ответ - "Ну что ж, так и запишем - ведете коммерческую деятельность в обход налоговых органов."
И... мне присылаются реквизиты для оплаты как юр. лицу с ценой на 15% больше. Но я не юр. лицо и такую оплату провести вряд ли смогу.
Да, и оплата пересылки товара за мой счет. И я должен указать реквизиты паспорта, кроме ФИО и адреса.
Возможно изготовитель и порядочный человек и все сделает по честному. Но какие гарантии я получу? Никаких, кроме "честного благородного слова". Смешно. И какие у меня возникнут эмоции от такого общения?
В общем от общения с изготовителем остались пренеприятные ощущения.
Когда я был маленьким, таких людей, называли хапугами. ИМХО. Да есть бизнесмены, заботящиеся о своем бизнесе, а есть хамоватые хапуги, которым плевать на покупателя.
Вот такие дела.
Сайт изготовителя: http://ermak-laser.ru
Общался с: Юрий Тамазин ermak333@mail.ru

понедельник, 17 марта 2014 г.

Выбор и установка бортового компьютера Vapor TRIAL TECH (далее приборка) на Yamaha BWS 100



Немного смешно выглядит  желание установить бортовой компьютер на скутер, но так как сам с электроникой с детства на ты, решил желание не душить и просто поставить.
Долго перебирал разные модели электронных приборок - Koso, Vapor, Stage и т.д. Цены кусачие, купить локально проблематично, ехать, как в старые времена за всем в Москву не хотелось...
В конце концов, остановился на Trail Tech Vapor - весь нужный мне функционал присутствовал - одометр, спидометр, часы, тахометр, напряжение в бортовой сети, есть батарейка для хранения. Дополнительную панель с индикаторами решил не брать, т.к. собирался поставить электронную приборку в параллель со стоковой.
Цена более/менее, купить решил напрямую у производителя. Но возникло маленькое затруднение - производитель выпускает сам корпус и периферию (датчики, соединительные провода, болты крепежа датчиков) комплектами под конкретную модель транспортного средства. Под мой скут комплекта не было. Также на сайте нет данных по длине проводов, диаметре болтов и т.д. - возьми готовый комплект под свой мот и будет тебе счастье. Пришлось брать дополнительный кит, содержащий детальки как раз для такого случая. Выбор модели приборки делал на основании наиболее узкого и дорого места - диаметр кольца датчика температуры двигателя - ставится вместо стандартного кольца под свечу зажигания. У меня 14 мм, от него и танцевал - Vapor Kit: 752-4016 (Black). Дополнительно взял Magnet Kit: Generic 704-01, это дополнительный комплект болтов разной длины и диаметра - используются как источник магнитного поля для датчика скорости. Повезло - нужный мне болт (диаметр 8мм) в комплекте был. Общая стоимость с доставкой в Россию получилась $244.49.
Посылка пришла примерно через 12 дней, привезла UPS Worldwide Expedited. При получении удивился размерам посылки - очень маленькая, на мой взгляд, оказалась. Спустя некоторое время закрались сомнения, что промахнулся с моделью, уж дюже невелика приборка по сравнению со стоковой. Поискал в инете и нашел уже в установленном виде - вроде так и должно быть.
Установка особых трудностей не вызвала. Вырезал в щитке прямоугольное отверстие под крепеж корпуса (в комплекте идет под разный диаметр трубы руля). Коротковаты хвосты с разъемами - оказались в узком месте, вошли с некоторым трудом. Кабель для датчика температуры слишком короткий, пришлось нарастить - использовал пайку. Провод для тахометра не стал накручивать на бронепровод (и такой вариант возможен), положил на контакт катушки зажигания, сверху надел разъем идущий от зажигания.
Датчик температуры в колодце свечи размещается с трудом - мешает кожух воздушного охлаждения - пришлось немного подпилить его в месте выхода провода датчика из колодца. После установки свечи провод прижался резиновым чехольчиком, который надевается на свечу для защиты от грязи.
Питания взял с выхода замка зажигания - приборка запитывается от аккумулятора скута только при включенном зажигании, остальное время на своей батарейке. При включении зажигания подсветка на приборке горит постоянно (возможно это настраивается, но пока не нашел где).
Суммарно больше всего времени потратил на установку датчика скорости. Датчик у Vapor свой, магнитный, у данной модели ставится на переднее колесо с дисковым тормозом слева. Убирается один стоковый болт крепления диска тормоза, вместо него ставится болт из дополнительного кита (содержит в головке болта магнит). Вот с креплением датчика пришлось немного повозится - комплект не рассчитан на мой скут. Вначале попытался вырезать скобу из куска металла, но поскольку в слесарном инструменте ограничен - приличного качества добиться не удалось. Тогда пошел другим путем. В магазине крепежа купил перфорированный уголок 35х10мм. Рассверлил крайнее отверстие до диаметра 8мм, с другой стороны уголка отрезал 15мм. Собрал, крутанул колесо - индикатор скорости показал что датчик работает.

Осталось покрасить эмалью в черный цвет. Ходовые испытания - весной :).

Немного о настройке приборки:


CURRENT SPEED (SPD) - текущая скорость
REVS PER MINUTE (RPM) - обороты двигателя в минуту
RPM BAR GRAPH – графическое представление оборотов двигателя
MAXIMUM SPEED (MS)  - максимальная скорость
DISTANCE (DST) - пройденное расстояние
STOP WATCH (TT) секундомер
ODOMETR (ODO)  - пробег
RIDE TIME (RT) - продолжительность работы двигателя
ACCUM. RIDE TIME (ART) – общая продолжительность работы двигателя
LOW BATTERY (LO)  - низкий уровень заряда батарейки
TIRE SIZEдлина покрышки по окружности того колеса, на котором стоит датчик скорости.
PULSES PER REVOLUTION (PPR) – кол-во импульсов на один оборот коленвала

Кнопки:
«MODE» - переключение между экранами информации.
«LEFT»+ «MODE» - сброс значений максимальной скорости ,пройденного расстояния, секундомера, максимальной температуры двигателя и максимальных оборотов
«RIGHT» - переключение между свойствами в нормальном режиме.
«MODE» в течении 3 сек. – изменение пройденного пути
«LEFT»+ «MODE»+ «RIGHT» - вход в режим настроек
            «MODE» - переход к следующим параметрам
            «LEFT» - увеличения значения
            «RIGHT» - перейти к следующему знакоместу

Последовательность операция при настройке Vapor:

1.«LEFT»+ «MODE»+ «RIGHT» в течении 3 сек
2.Установить единицу измерения пробега нажимая «RIGHT», затем «MODE».
3.Установить длину окружности покрышки колеса, на котором стоит датчик скорости, нажимая «RIGHT», переход к следующей позиции «LEFT», затем «MODE».
4.Установить 24 и 12 часов режим часов нажимая «RIGHT», затем «MODE».
5.Установить время нажимая «RIGHT», переход к следующей позиции «LEFT», затем «MODE».
6.Установить кол-во импульсов на один оборот коленвала, нажимая «RIGHT», переход к следующей позиции «LEFT», затем «MODE», возможные значения – 0.5, 1, 2.
7.В следующем разделе можно установить кол-во импульсов в зависимости, от оборотов коленвала нажимая «RIGHT», переход к следующей позиции «LEFT», затем «MODE».
8.И в этом разделе то же, если в предыдущем что-то ввели.
9.Установить единицу измерения температуры нажимая «RIGHT», переход к следующей позиции «LEFT», затем «MODE».
10.Установить значение температуры, при котором зажигается левый предупреждающий индикатор, нажимая «RIGHT», переход к следующей позиции «LEFT», затем «MODE», по умолчанию 90 градусов.
11.Установить значение температуры, при котором зажигается правый предупреждающий индикатор, нажимая «RIGHT», переход к следующей позиции «LEFT», затем «MODE», по умолчанию 110 градусов.
12.Установить значение оборотов, при котором зажигается левый предупреждающий индикатор, нажимая «RIGHT», переход к следующей позиции «LEFT», затем «MODE», по умолчанию 6000.
13.Установить значение оборотов, при котором зажигается правый предупреждающий индикатор, нажимая «RIGHT», переход к следующей позиции «LEFT», затем «MODE», по умолчанию 10000.

В нормальном режиме нажатие на «MODE» приводит к циклическому переключению между тремя информационными экранами:
Первый экран: текущая скорость, одометр, текущее время, температура окружающей среды, графический индикатор оборотов.
Второй экран: текущая скорость, обороты, секундомер, время в пути, температура двигателя, графический индикатор оборотов. Переключение между секундомером и временем в пути - «RIGHT».
Третий экран: максимальная скорость, максимальные обороты, общее время в пути, одометр, максимальная температура. Переключение между общим временем в пути и одометром - «RIGHT».