вторник, 25 ноября 2025 г.

Nextcloud: AppAPI default deploy daemon is not set

 После обновления Nextcloud до версии 32.x в настройках появилось предупреждение "AppAPI deploy daemon: AppAPI default deploy daemon is not set. Please register a default deploy daemon in the settings to install External Apps (Ex-Apps).".

Я не планирую ставить external apps и просто хочу отключить эту функциональность. В разделе поддержки Nextcloud нашёлся ответ как это сделать - нужно зайти в список активных приложений и отключить "AppAPI". После этого предупреждение пропадает.

четверг, 20 ноября 2025 г.

Апгрейд SSD в ноутбуке

В процессе установки пакета разработки для STM32 в очередной раз закончилось место на домашнем разделе (/home) в ноутбуке. Походил с du по директориям, но больше 4 GB освободить не получилось. Заниматься радикальной чисткой или перемещением части данных на домашний сервер было лениво и в итоге был заказан новый NVME SSD на 1 TB от Kingston (SNV3S1000G).

Т.к. новый диск заметно больше прежнего, то перенос системы не вызывает вопросов. Подключил новый диск через USB-NVME переходник и скопировал данные

$ sudo dd if=/dev/nvme0n1 of=/dev/sda bs=1M iflag=direct oflag=direct conv=notrunc status=progress

Дальше переставил новый диск в ноутбук и загрузился с LiveCD чтобы увеличить размер домашнего раздела. У меня система стоит на LVM поверх LUKS поэтому команды специфичны для этого варианта установки.

$ sudo parted /dev/nvme0n1 resizepart 3 100%

$ sudo cryptsetup luksOpen /dev/nvme0n1p3 nvme0n1p3_crypt

$ sudo cryptsetup resize nvme0n1p3_crypt

$ sudo pvresize /dev/mapper/nvme0n1p3_crypt

$ sudo vgchange -ay dragoncore

$ sudo fsck -Cf /dev/dragoncore/home

$ sudo lvextend -L+650G dragoncore/home

$ sudo resize2fs -p /dev/dragoncore/home

$ sudo vgchange -an dragoncore

$ sudo cryptsetup close nvme0n1p3_crypt

воскресенье, 16 ноября 2025 г.

Заново открываю для себя STM32

Так вышло что микроконтроллеры STM32 я обошёл стороной и в основном использовал ATMEGA8/ATMEGA328 и ESP8266. Заказывал на пробу платы Blue pill с STM32F103C8T6, помигал светодиодом и отложил в ящик до лучших времён. Тогда интерес был в районе IoT и ESP8266 давал больше возможностей в сравнении с ATMEGA и STM32 у которого не было встроенного WiFi.

Недавно собирал частотомер на ESP32-S3 и мне не хватало 32-битного таймера чтобы считать импульсы без переполнения. Полистал спецификацию на популярные сейчас Black pill и заказал две платы с STM32F411CEU6 на борту чтобы сделать ещё один подход к STM32.

Обе платы приехали ко мне меньше чем за месяц. На фотографии одна из плат с уже с припаянными контактами. Одна из них после включения плавно мигает синим светодиодом, а во вторую залита обычная мигалка.

Для поддержки этой платы потребуется Arduino IDE 2.х (я установил актуальную версию 2.3.6) в которой нужно добавить ссылку https://raw.githubusercontent.com/stm32duino/BoardManagerFiles/refs/heads/main/package_stmicroelectronics_index.json в поле "Дополнительные ссылки для Менеджера плат" в меню Файл / Параметры.

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

Ingress-nginx уходит на покой

На днях в блоге Kubernetes появилась запись Ingress NGINX Retirement: What You Need to Know в которой сообщается что поддержка Ingress Nginx будет осуществляться до марта 2026 и далее не стоит ожидать каких-либо новых выпусков или исправлений.

To prioritize the safety and security of the ecosystem, Kubernetes SIG Network and the Security Response Committee are announcing the upcoming retirement of Ingress NGINX. Best-effort maintenance will continue until March 2026. Afterward, there will be no further releases, no bugfixes, and no updates to resolve any security vulnerabilities that may be discovered. Existing deployments of Ingress NGINX will continue to function and installation artifacts will remain available.

Другими словами, самое время начинать двигаться дальше и искать альтернативу. Жаль конечно, на мой взгляд это был один из самых популярных ингресс контроллеров, но отсутствие ресурсов на поддержку и "излишняя гибкость" сделали своё дело.

вторник, 11 ноября 2025 г.

Сломалась сборка образов в Gitlab

 Сегодня сборка Docker образов сломалась на docker-machine ранерах.

*** WARNING: Service runner-xxxxxxxx-project-xxxxx-concurrent-0-xxxxxxxxxxxxxx-docker-0 probably didn't start properly.
Health check error:
service "runner-xxxxxxxx-project-xxxxx-concurrent-0-xxxxxxxxxxxxxx-docker-0-wait-for-service" health check: exit code 1
Health check container logs:
2025-11-11T14:15:01.392368160Z FATAL: No HOST or PORT found                      
Service container logs:
2025-11-11T14:15:01.155180886Z cat: can't open '/proc/net/ip6_tables_names': No such file or directory
2025-11-11T14:15:01.156146175Z cat: can't open '/proc/net/arp_tables_names': No such file or directory
2025-11-11T14:15:01.159149102Z iptables v1.8.11 (nf_tables)
2025-11-11T14:15:01.198255845Z time="2025-11-11T14:15:01.197837859Z" level=info msg="Starting up"
2025-11-11T14:15:01.201660747Z time="2025-11-11T14:15:01.201577762Z" level=warning msg="Binding to IP address without --tlsverify is insecure and gives root access on this machine to everyone who has access to your network." host="tcp://0.0.0.0:2375"
2025-11-11T14:15:01.201682858Z time="2025-11-11T14:15:01.201643206Z" level=warning msg="Binding to an IP address, even on localhost, can also give access to scripts run in a browser. Be safe out there!" host="tcp://0.0.0.0:2375"
2025-11-11T14:15:01.201770114Z time="2025-11-11T14:15:01.201692789Z" level=warning msg="[DEPRECATION NOTICE] In future versions this will be a hard failure preventing the daemon from starting! Learn more at: https://docs.docker.com/go/api-security/" host="tcp://0.0.0.0:2375"

Вызовы docker завершались ошибкой

ERROR: Cannot connect to the Docker daemon at tcp://docker:2375. Is the docker daemon running?

Связано это с выходом Docker 29.0.0, который перестал быть совместимым с docker-machine (подробности есть в gitlab-org/gitlab-runner #39100 и cattle-ops/terraform-aws-gitlab-runner #1324).

Для исправления достаточно откатиться на предыдущую версию Docker добавив engine-install-url=https://releases.rancher.com/install-docker/28.3.3.sh в MachineOptions

Если используется модуль cattle-ops/terraform-aws-gitlab-runner, то это делается через добавление параметра

  runner_worker_docker_machine_ec2_options = [
    "engine-install-url=https://releases.rancher.com/install-docker/28.3.3.sh",
  ]

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

Обновление генератора сигналов UTG932E до UTG962E

Перед покупкой генератора сигналов UTG932E проштудировал форумы и выяснил что нет смысла переплачивать за версию на 60 МГц, т.к. с точки зрения железа они ничем не отличаются. Получить старшую модель можно редактированием одного байта в микросхеме EEPROM.

Пока не было необходимости в частотах выше 30 МГц, то не было и смысла лезть внутрь генератора. Когда игрался с самодельным частотомером и входным формирователем, то захотелось проверить их на более высоких частотах чем 30 МГц.

Сегодня дошли руки до этой переделки и первым делом съездил в магазин электроники за программатором на базе CH341A.

В описании товара было указано "CH341A-MOD" и в нём реализовано питание микросхемы CH341A от 3,3 В стабилизатора а также 9 ножка (V3) подключена к 3,3В. В этом случае прошиваемые микросхемы питаются от 3,3В и уровень сигнала соответствующий. Без каких либо переделок этим программатором можно прошивать микросхемы EEPROM/FLASH 24-й (I2C) и 25-й (SPI) серий на 5В и 3,3В. Если понадобится прошить микросхему на 1,8 В, то потребуется отдельный переходник.

пятница, 7 ноября 2025 г.

Услышать мерцание света

Стараюсь покупать лампочки с высоким цветовым индексом и отсутствием пульсаций, которые могут привести к усталости во время чтения. Рейтинг ламп смотрел на сайте проекта LampTest, но не всегда получалось найти информацию о лампах которые продаются в данный момент.

Мерцание ламп можно определить если подключить фотоэлемент к осциллографу, но это вариант для дома. Если лампа мерцает, то придётся тратить время на возврат и снова выбирать другую лампу.

Этот проект начался после просмотра видео ИНДИКАТОР МЕРЦАНИЯ - в каждую избу! от Дмитрия Коржевского. Вместо использования bluetooth колонки я собрал свой вариант из готовых модулей:

  • Фотоэлемент 70х70 мм на 5,5 В 
  • PAM8403 в качестве усилителя
  • Динамик 6 Ом 1,5 Вт от старой колонки
  • MT3608 повышает напряжение литиевого аккумулятора до 5 В
  • TP4056 для зарядки и защиты литиевого аккумулятора
  • Литиевый аккумулятор стандарта 18650
  • Выключатель 

Первый вариант схемы не заработал из-за дохлого MT3608 (он был уже паянный, но не помню чтобы я его палил). Со второго раза всё заработало на столе

Чтобы придать законченный вид смоделировал и распечатал корпус. Для фотоэлемента сделано углубление чтобы он не выступал из корпуса.

воскресенье, 2 ноября 2025 г.

Отрицательный Vref для OXCO генератора OSC5A2B02

 Со временем OCXO (Oven Controlled Crystal Oscillator) генераторы стареют и перестают соответствовать изначальной спецификации. Эта одна из причин почему пожилое измерительное оборудование начинает привирать. Так и произошло с моим OCXO генератором CTI OSC5A2B02 на 10 МГц который сейчас выдаёт 10000025 Гц при напряжении подстройки частоты Vref равным 0 В и 10000056 Гц при Vref равным 4 В. Т.е. его уже не получится штатно подстроить до ровных 10 МГц, т.к. диапазон регулировки по документации 2 В ± 2 В (от 0 В до 4 В). 

А что если попробовать подать на Vref отрицательное напряжение? Не зная как выглядит схема таких генераторов можно ему что-то спалить. Поискал схему подобных генераторов в сети и нашёл срисованную схему от CTS 1960017 10MHz OCXO.

Всё что правее конденсатора C2 можно не смотреть, т.к. там идёт формирование прямоугольных импульсов и стабилизация температуры. Я не делал детальный анализ или моделирование схемы, но на первый взгляд никаких активных элементов кроме пары диодов и варикапа в задающей части нет.

суббота, 1 ноября 2025 г.

Измерение частоты кварца ардуинки

Я когда-то пробовал считать время в микроконтроллере atmega8, но столкнулся с погрешностью из-за неточности частоты кварцевого резонатора. Тогда у меня была возможность измерить частоту кварца с точностью до килогерцев используя тестер для кварцевых резонаторов или с помощью осциллографа.

Например частоту кварца платы Freeduino 2009 можно измерить подключившись щупом осциллографа к пину XTAL2 в режиме 10Х (если попытаться подключиться щупом без делителя, то программа сразу зависнет).

Осциллограф показывает частоту 15,9996 МГц и период 63 нс. Я только сейчас заметил что в осциллографе можно включить дополнительное измерение частоты, а не довольствоваться значением 15,9 МГц внизу экрана. Нужно будет полистать его 250+ страниц документации повнимательнее.

пятница, 31 октября 2025 г.

Корпус для входного формирователя частотомера

 Не пользовался КОМПАС-3D с университета, но месяц назад открыли бета-тест версии для Linux и я получил пробную лицензию на 60 дней. До этого для моделирования использовал либо OpenSCAD, либо FreeCAD, а сейчас решил вспомнить работу в КОМПАС-3D и смоделировать корпус для входного формирователя частотомера.

Корпус состоит из двух П-образных половинок со стойками для печатной платы



 Снизу сделаны углубления чтобы винты не царапали поверхность стола. Для боковых панелей сделаны пазы в которые они вставляются.

вторник, 28 октября 2025 г.

Входной формирователь для частотомера

 В генераторе сигналов Uni-T UTG932E есть частотомер от 0,1 Гц до 100 МГц, но его вход поддерживает только TTL-совместимый сигнал. Таким частотомером не получится измерить слабый сигнал или сигнал который симметричен относительно нуля.

Чтобы обойти это ограничение собрал входной формирователь который усиливает слабый сигнал и формирует на выходе прямоугольные импульсы с амплитудой 5 В. На генераторе выбран режим синусоидального сигнала амплитудой 35 мВ и частотой 30 МГц который подаётся на вход формирователя, а его выход подключён на вход частотомера.


 Формирователь должен работать до 100 МГц, но пока у меня нет генератора чтобы это проверить. Чем выше частота тем выше требования к минимальной амплитуде входного сигнала. На частоте 200 Гц он начинает работать от 25 мВ, но на частоте 30 МГц для устойчивой работы нужно уже 35 мВ.

четверг, 23 октября 2025 г.

ESP32 частотомер

Приехали OCXO генераторы на 10 МГц (CTI OSC5A2B02), которые я заказывал для ремонта платы генератора. Я заказывал сразу 5 штук на случай если некоторые из них тоже окажутся нерабочими, но проверка показала что они все работают.

Но вот с частотой вышло не очень, при минимальном напряжении 0 В на подстроечном выводе я измерил частоту выше 10 МГц у каждого из них, а при максимальном напряжении 4 В к частоте добавляется примерно 30 Гц. Если частотомер в моём генераторе не врёт, то меньше 10 000 016 Гц мне получить не удастся.

У меня ещё есть частотомер в тестере кварцевых резонаторов, но единицы Гц он не покажет. Попробовал собрать ещё один частотомер из платы ESP32-S3 и использовать её счётчик импульсов (PCNT) для подсчёта частоты. Этот счётчик 16-битный и им нельзя измерить частоту выше 32 кГц без переполнения. В итоге в настроил счётчик PCNT считать до 30000 и генерировать прерывание по достижению максимального значения. Каждое прерывание увеличивает счётчик переполнений. Каждую секунду счётчик PCNT и количество переполнений сбрасываются и запускается новый счёт. В следующую секунду счёт останавливается и выводится значение частоты (количество переполнений * 30000 + значение счётчика PCNT). В следующую секунду всё повторяется.

четверг, 2 октября 2025 г.

Установка КОМПАС-3D v24 Beta в Debian 13

Стартовало бета тестирование Linux версии КОМПАС-3D v24, которое проходит с 1 октября по 30 ноября 2025. В списке официально поддерживаемых систем нет Debian 13, но поставить это приложение оказалось несложно.

Я взял за основу инструкции по установке для Astra Linux 1.8 и немного доработал в районе зависимостей. В настольной системе эти зависимости скорее всего уже будут установлены, но на всякий случай приведу их список

$ sudo apt-get install --update -y curl gnupg locales desktop-file-utils libxcb-res0 libxcb-xkb1 libxcb-xinput0

Далее подключить репозитарий АСКОН для Astra Linux 1.8 и установить полную версию

$ curl -fsSL https://repo.ascon.ru/beta/deb/ascon.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/ascon.gpg
$ echo "deb [signed-by=/etc/apt/trusted.gpg.d/ascon.gpg] https://repo.ascon.ru/beta/deb 1.8_x86-64 main" | sudo tee /etc/apt/sources.list.d/ascon-beta.list

$ sudo apt-get install --update -y ascon-kompas3d-v24-full

Запуск из командной строки

$ kompas-v24

На встроенном видео Intel HD Graphics 520 работает довольно шустро, хотя сложные модели я пока не пробовал загружать. 

понедельник, 29 сентября 2025 г.

Невезение с OCXO генератором на 10 МГц

Пришёл заказанный с AliExpress модуль OCXO (Oven-Controlled Crystal Oscillator) генератора на 10 МГц. Планировал использовать его для повышения точности генератора сигналов. Потом возможно прикручу к нему GPS чтобы получить GPSDO (GPS Disciplined Oscillator).

В комплекте шёл переходник с батарейки 6F22 который оказался нерабочим - ни один из контактов не подключен. В целом не ясно зачем он нужен если при старте модуль потребляет около 0,5 А и после нескольких минут прогрева падает до 0,25 А.

Флюс китайцы отмыть забыли, но это поправимо небольшим количеством изопропилового спирта.

воскресенье, 28 сентября 2025 г.

Команды SCPI для измерителя LCR Zoyi ZT-DQ02

 Обновил прошивку измерителя LCR Zoyi ZT-DQ02 до версии 1.0.7 и немного покопался в прошивке на предмет поддерживаемых SCPI команд (в документации упомянуто управление через SCPI, но не приводятся сами команды).

На форуме EEVblog есть упоминания отдельных команд, но я использовал strings для поиска текстовых строк в файле прошивки.

Чтобы включить связь с компьютером нужно нажать и подержать кнопку "HOLD/REC", после этого в системе появится новый последовательный порт вида ttyACM0. Настройки для терминала 9600 8N1, окончание строк CRLF.

Список команд который удалось извлечь (следить за развитием можно на GitHub)

суббота, 27 сентября 2025 г.

Установка OpenWrt на TP-Link RE365 v1

Решил улучшить покрытие в домашней беспроводной сети и поставить ещё одну точку доступа чтобы интернет надёжно работал на балконе. Для этой цели на барахолке был куплен TP-Link RE365 v1 для которого доступна прошивка OpenWrt.

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

Установка OpenWrt максимально простая:

  • скачать файл прошивки openwrt-24.10.2-ramips-mt76x8-tplink_re365-v1-squashfs-factory.bin
  • на всякий случай проверить его контрольную сумму
  • сделать сброс на заводские настройки (зажать Reset на 10 секунд)
  • зайти на http://192.168.0.254/ и через штатное обновление установить OpenWrt (важно чтобы файл прошивки был с суффиксом factory, а не sysupgrade)

среда, 24 сентября 2025 г.

Изготовление печатных плат

До недавнего времени для изготовления печатных плат в домашних условиях пользовался методом лазерного утюга (ЛУТ), но решил попробовать метод "холодного" ЛУТ. Это когда перенос тонера на стеклотекстолит происходит без нагрева утюгом.

С ЛУТ у меня было две проблемы:

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

Набросал в Kicad печатную плату для источника опорного напряжения 10 В

Делитель напряжения для операционного усилителя собрал из цепочки точных сопротивлений 1 кОм ±0.1% ±25ppm/℃ 125mW, которые остались после сборки набора сопротивлений для проверки мультиметров (см. 1, 2, 3).

Обновление системы до Debian 13

Уже вышло первое исправление для Debian 13 и для меня это сигнал что можно начинать обновлять свои системы. Перед обновлением стоит почитать что нужно знать о trixie чтобы представлять что может пойти не так.

На домашнем ноутбуке обновление вышло более масштабным, т.к. заодно заменил штатный SATA SSD на NVME SSD который по размеру немного меньше прежнего, но зато в разы быстрее. Заодно перешёл на разметку диска GPT и загрузку через UEFI.

Само обновление прошло довольно гладко, но перед манипуляциями я делал полный бэкап диска через Clonezilla так что независимо от результата мне есть куда вернуться. 

Сообщение systemd "Tainted: unmerged-bin"

Это известная проблема и с этим ничего не нужно делать (подробности в #1085370).

$ systemctl status | head -n 20
● vbox
    State: running
    Units: 396 loaded (incl. loaded aliases)
     Jobs: 0 queued
   Failed: 0 units
    Since: Tue 2025-09-09 15:02:26 +03; 30min ago
  systemd: 257.8-1~deb13u1
  Tainted: unmerged-bin
   CGroup: /
           ├─init.scope
           │ └─1 /sbin/init
           ├─system.slice
           │ ├─acpid.service
           │ │ └─794 /usr/sbin/acpid
           │ ├─atd.service
           │ │ └─830 /usr/sbin/atd -f
           │ ├─containerd.service
           │ │ └─840 /usr/bin/containerd
           │ ├─cron.service
           │ │ └─821 /usr/sbin/cron -f

Bacula

Несовместимость версий в Debian 12 и Debian 13. Bacula director старой версии может общаться с новым bacula-fd, но между bacula-fd и bacula-sd старой версии дружбы не сложилось. Пришлось отложить обновление пока не будут обновлены все системы.
$ sudo aptitude hold ~ibacula

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

Диски в GCP заметно дороже

Давно не заглядывал в стоимость ресурсов Google Cloud Platform и сегодня удивился стоимости дисков в GCP. Для сравнения зональный диск на 100 GB в AWS и GCP:

Т.е. за большие деньги получаешь меньше производительности. Если пытаться подобрать аналогичную производительность диска, то это уже нужен pd-extreme где минимальный размер 500GB и стоимость больше 250 USD в месяц.

среда, 17 сентября 2025 г.

Снимок экрана генератора сигналов Uni-T UTG932E

 Разобрался как сохранять снимки экрана в генераторе сигналов Uni-T UTG932E. Я использую Linux и последовательность действий будет для этой системы. Для начала настроить правило UDEV для выдачи прав при подключении генератора к компьютеру.

В моём случае настройки UDEV находятся в файле /etc/udev/rules.d/99-utg932e.rules, но имя может быть и другим

ACTION!="add|change", GOTO="utg932e_rules_end"
SUBSYSTEM!="usb", GOTO="utg932e_rules_end"

# Uni-T UTG932E
ATTRS{idVendor}=="6656", ATTRS{idProduct}=="0834", MODE="660", GROUP="plugdev", TAG+="uaccess"

LABEL="utg932e_rules_end"

Далее перечитать настройки UDEV и переподключить устройство

$ sudo udevadm control --reload-rules

Для сохранения скриншотов я использовал https://github.com/renaatd/utg962/

$ git clone https://github.com/renaatd/utg962.git
$ cd utg962/
$ sudo apt-get install -y python3-pyvisa-py python3-pil
$ python3 utg962/save_display.py sine-wave.png

Результат

понедельник, 15 сентября 2025 г.

Фильтрация помех в сети

 Сейчас практически не осталось бытовой техники, которая не оснащена импульсным блоком питания. Я смог вспомнить только мойку воздуха внутри которой стоит обычный железный трансформатор, но это скорее по причине близкого соседства с водой.

Импульсные блоки питания при работе генерируют много помех при переключении силовых транзисторов. В качественных блоках питания на входе и выходе должны стоять фильтры. Выходной фильтр не даёт помехам идти в нагрузку, а входной защищает саму сеть от помех которые генерирует импульсный блок питания. Нередко в бюджетной технике экономят на фильтрации и в сети "гуляет" множество помех от импульсных блоков питания.

Попробую улучшить ситуацию хотя бы для измерительной техники в домашней мастерской поставив на вход удлинителя фильтр ЭМИ. С этой целью был куплен фильтр ZS-0004 в алюминиевом корпусе. Его продают как фильтр для аудиотехники, но с тем же успехом он подойдёт и для любой другой техники.

четверг, 11 сентября 2025 г.

Транзисторы BD139 и BD140 с AliExpress

Эксперимента ради покупал биполярные транзисторы BD139 (NPN 80 В 1,5 А 12,5 Вт) и BD140 (PNP 80 В 1,5 А 12,5 Вт) на AliExpress. В принципе не ожидал получить что-то оригинальное, но было любопытно насколько "левыми" они окажутся.

С доставкой вышло 1,09 USD за 20 транзисторов (10 BD139 + 10 BD140). Цены этих транзисторов от азиатских производителей в LCSC начинаются от 0,69 USD за десяток BD139 и 1,03 USB за десяток BD140. Т.е. гипотетически существует вероятность что кто-то распродаёт ненужные остатки, но здравый смысл подсказывает что будет либо перемаркировка, либо вовсе пустышки.

После получения первым делом поставил крестики на пакетики чтобы случайно не забыть про эти транзисторы и не поставить куда-то в ответственное место.

На тот момент у меня был только тестер компонентов MTester который определил что транзисторы рабочие и их проводимость соответствует маркировке. Но вот коэффициент усиления по току был заметно выше чем должно быть у BD139/BD140 по документации (у разных производителей видел только до 250). Так что это перемаркированные транзисторы и в даташит на BD139/BD140 можно не смотреть.

среда, 10 сентября 2025 г.

Кулер для Gigabyte GB-XM14-1037

 Больше 10 лет у меня трудится HTPC на базе платформы Gigabyte BRIX (аналог Intel NUC). В моём экземпляре стоит Intel Celeron 1037U который охлаждается кулером BSB05505HP от Delta Electronix.

HTPC включён 24х7 и за 10 лет в нём сменилось 3 кулера:

  1. Оригинальный проработал около 5 лет, но я его периодически смазывал. Заменить пришлось когда крыльчатка стала заметно люфтить.
  2. В 2020 году я его заменил на аналогичный кулер, который купил на AliExpress - этот кулер проработал до конца 2023.
  3. В декабре 2023 был куплен OEM кулер на Ozon и вот его хватило всего на полтора года.

Оригинальный кулер выглядит так

понедельник, 8 сентября 2025 г.

Хорошая статья о постройке частотометра

 Добавлю себе в коллекцию ссылку на отличную статью о постройке частотометра от Леонида Ивановича Ридико (leoniv). В статье подробно описаны принципы работы частотометров и этапы постройки этого проекта.

На странице проекта доступны схемы, разводка печатных плат и чертежи. Предыдущая версия этого проекта находится тут.

суббота, 6 сентября 2025 г.

ZT301 неверно измеряет скважность импульсов

Ради спортивного интереса измерил частоту и скважность импульсов с генератора сигналов обычными мультиметрами ZT102 и ZT301. Зная частоту и скважность можно вычислить длительность импульса.

На генераторе выбран режим генерации импульсов частотой 1 Гц, шириной 25 мс, амплитудой 5 В и сдвигом относительно нуля на 2,5 В (от 0 В до 5 В). Мультиметры установлены в режим измерения частоты и скважности для низкого напряжения.

Оба мультиметра верно измерили частоту сигнала.

Но ZT301 неверно определил скважность (duty cycle) - вместо ожидаемых 2,5% я вижу 100%, что в корне неверно.

четверг, 4 сентября 2025 г.

Генератор импульсов без Arduino

При измерении скорости работы прозвонки у различных мультиметров я использовал генератор сигналов Uni-T UTG932E. В нём удобно задавать частоту и продолжительность (ширину) импульсов, их амплитуду и смещение относительно нуля. Это здорово экономит время, но такой генератор есть не у каждого радиолюбителя.

Если под рукой нет подходящего генератора, то подобные импульсы можно сгенерировать с помощью микроконтроллера (например популярные платы Arduino). Отсутствие навыков программирования не должно быть помехой, т.к. есть ChatGPT, DeepSeek, и им подобные. Нейронки неплохо пишут простой код если им внятно объяснить что требуется. Умение писать запросы к нейронкам или "prompt engineering" уже стало рутиной и облегчает многие задачи как в своё время навык использования поисковых систем.

С использованием микроконтроллера сделан генератор импульсов в проекте DMM Continuity Tester. Но лично мне стало любопытно как решить эту задачу без микроконтроллера. Тем более у меня в голове кроме постановки задачи ничего не вырисовывалось.

Открываю ChatGPT и пишу запрос

опиши схему устройства которое генерирует импульсы длительностью 25 мс и частотой 1 Гц без использования микроконтроллера

среда, 3 сентября 2025 г.

Скорость прозвонки у различных мультиметров

В моей домашней мастерской несколько мультиметров: Zoyi ZT102, Zoyi ZT301 и Agilent U3402A. В каждом из этих мультиметров есть функция "прозвонки" цепей (мультиметр издаёт звуковой сигнал если сопротивление цепи ниже определённого значения).

Роль мультиметра на каждый день у меня играет ZT301 - у него неплохая точность и быстрая прозвонка. И хотя самый навороченный мультиметр в моей домашней мастерской это U3402A, я не пользуюсь его функцией прозвонки - она слишком медленно работает.

Если сравнивать ZT301 и U3402A "дедовским" методом частого кратковременного замыкания щупов в режиме прозвонки, то в большинстве случаев последний не издаёт ни звука. Даже в режиме быстрых измерений (Fast) и с выключенным автовыбором диапазона он всё равно заметно медленнее.

среда, 27 августа 2025 г.

Контакты бывают разные

 Когда собирал эталоны сопротивлений в качестве контактов использовал колодку PLS2-40 (на фотографии ниже это крайний справа) и столкнулся со значительным превышением измеренного сопротивления от ожидаемого для номинала 0,1 Ом. В этом номинале было включено параллельно 10 сопротивлений по 1 Ом с допуском 0,1% что должно давать 0,1 Ом с допуском 0,1%. Но при измерениях получалось около 0,12 Ом что на 20% больше.

Измерил сами контакты и получилось что каждый контакт имеет сопротивление больше 20 мОм (миллиом) что составляет минимум 20% от номинала эталона. Чтобы понять насколько это "норма", измерил сопротивление контактов PLS-40 (крайний слева) и PLS-40R (средний)

Сопротивление контактов измерял с помощью Yaorea YR1035+. Этот прибор измеряет с помощью переменного тока, но для короткого прямого контакта это не вносит погрешность.

воскресенье, 24 августа 2025 г.

Система тормозит на SSD

Какое-то время назад заметил что домашний ноутбук тормозит когда ставятся обновления системы и при этом постоянно горит индикатор активности диска (индикатор продолжает непрырывно светиться даже в меню Grub).

В выводе iostat видна максимальная утилизация диска при небольшом количестве операций ввода-вывода

$ iostat -x sda
Linux 6.1.0-38-amd64 (dragoncore)       22/08/25        _x86_64_        (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0,50    0,25   40,85   38,35    0,00   20,05

Device            r/s     rkB/s   rrqm/s  %rrqm r_await rareq-sz     w/s     wkB/s   wrqm/s  %wrqm w_await wareq-sz     d/s     dkB/s   drqm/s  %drqm d_await dareq-sz     f/s f_await  aqu-sz  %util
sda              1,00      0,50     0,00   0,00  251,00     0,50   40,00    459,00    20,00  33,33  146,22    11,47    0,00      0,00     0,00   0,00    0,00     0,00    7,00  133,29    7,03 105,20

В ноутбуке установлен SSD накопитель LITEON CV3-8D256-11 SATA 256GB формата M.2.

Посмотрел в атрибуты S.M.A.R.T.

$ sudo smartctl -A /dev/sda
smartctl 7.3 2022-02-28 r5338 [x86_64-linux-6.1.0-38-amd64] (local build)
Copyright (C) 2002-22, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 1
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  5 Reallocated_Sector_Ct   0x0003   100   100   000    Pre-fail  Always       -       0
  9 Power_On_Hours          0x0002   100   100   000    Old_age   Always       -       5763
 12 Power_Cycle_Count       0x0003   100   100   000    Pre-fail  Always       -       3819
175 Program_Fail_Count_Chip 0x0003   100   100   000    Pre-fail  Always       -       0
176 Erase_Fail_Count_Chip   0x0003   100   100   000    Pre-fail  Always       -       0
177 Wear_Leveling_Count     0x0003   100   100   000    Pre-fail  Always       -       768
178 Used_Rsvd_Blk_Cnt_Chip  0x0003   100   100   000    Pre-fail  Always       -       0
179 Used_Rsvd_Blk_Cnt_Tot   0x0003   100   100   000    Pre-fail  Always       -       0
180 Unused_Rsvd_Blk_Cnt_Tot 0x0033   100   100   005    Pre-fail  Always       -       1248
181 Program_Fail_Cnt_Total  0x0003   100   100   000    Pre-fail  Always       -       0
182 Erase_Fail_Count_Total  0x0003   100   100   000    Pre-fail  Always       -       0
187 Reported_Uncorrect      0x0003   100   100   000    Pre-fail  Always       -       0
194 Temperature_Celsius     0x0003   100   100   000    Pre-fail  Always       -       79
195 Hardware_ECC_Recovered  0x0003   100   100   000    Pre-fail  Always       -       0
199 UDMA_CRC_Error_Count    0x0003   100   100   000    Pre-fail  Always       -       1
238 Unknown_Attribute       0x0003   061   100   000    Pre-fail  Always       -       39
241 Total_LBAs_Written      0x0003   100   100   000    Pre-fail  Always       -       30759792686
242 Total_LBAs_Read         0x0003   100   100   000    Pre-fail  Always       -       48997828952

суббота, 23 августа 2025 г.

Экранированный кабель для четырёхпроводного измерения сопротивления

Когда я проверял точность мультиметров самодельными эталонами сопротивлений, то не смог измерить номинал 10 МОм настольным мультиметром Agilent U3402A из-за постоянно меняющихся значений в последних трёх знаках. Я пробовал оба кабеля для четырёхпроводного измерения, которые есть в моей домашней мастерской, но ни один не дал полностью устоявшихся показаний. А стоило начать немного шевелиться как уже менялись четыре, а иногда и все пять, последних знаков.

Инструкция на мультиметр рекомендует проводить измерения сопротивлений выше 100 кОм с помощью экранированного кабеля, но судя по всему оба эти кабеля были без внутреннего экрана.

Спортивный интереса ради заказал 4 метра экранированного кабеля RG178, зажимы кельвина и 4 приборных разъёма 4 мм были в наличии.

Со второй попытки получился кабель (в первый раз оторвались центральные жилы кабеля от разъёмов когда одевал комплектный держатель разъёма)

Внутри зажимов кельвина центральная жила зафиксирована термоклеем и сверху одета термоусадка. Со стороны приборных разъёмов от обрыва центральной жилы защищает два слоя термоусадки, но это слабое место кабеля.

четверг, 21 августа 2025 г.

Не проходят пробы после включения Istio Ambient

 Возился с переносом наработок по Istio Ambient из GKE (Google Kubernetes Engine) в EKS (Elastic Kubernetes Service) и столкнулся с "отваливающимися" проверками готовности подов в Knative сервисах после включения пространства имён в ambient mesh.

Новый под стартует, но через 30 секунд у него отваливается readiness check без каких либо сообщений в логе пода. Проверил логи ztunnel, но ничего интересного не увидел. Для верности почитал Platform-Specific Prerequisites для EKS но описанный там случай не подходил для моего кластера.

Попробовал искать в сообщениях об ошибках в Istio, но ничего подходящего не нашлось. Потом вспомнил про kubernetes network policy которая есть в этом неймспейсе и после её удаления проверки стали проходить нормально.

Стал искать целенаправленно и натнулся на раздел Ambient, health probes, and Kubernetes NetworkPolicy в документации Istio Ambient и стало ясно чего не хватает.

вторник, 19 августа 2025 г.

Пропадают чаты и каналы в Teams

 Сегодня заметил что в настольной версии Teams (версия 25185.410.3812.8024) стал пропадать список чатов и каналов на вкладке "Chat".


 Есть только "Recent", но отсутствуют "Chats" и "Teams and Channels". В браузерной версии это выглядит так


 Если перезапустить приложение, то несколько минут нужные разделы будут видны, но затем они пропадают. У одного из коллег сегодня аналогичная проблема, так что это не единичный случай.

понедельник, 18 августа 2025 г.

Ошибки при установке Istio в GKE

 Если вы ставите Istio в ambient режиме в GKE (Google Kubernetes Engine) кластер и не прочли Platform-Specific Prerequisites, то при установке CNI node agent вы столкнётесь с двумя ошибками.

Первая не даст установить Helm релиз (в событиях будет ошибка):

LAST SEEN   TYPE      REASON                    OBJECT                           MESSAGE
3s          Warning   FailedCreate              daemonset/istio-cni-node         Error creating: insufficient quota to match these scopes: [{PriorityClass In [system-node-critical system-cluster-critical]}]

Это связано с тем что по-умолчанию разрешает использовать priorityClassName: system-node-critical только в пространстве имён "kube-system". Чтобы разрешить использовать его в "istio-system" нужно создать ResourceQuota в соответствующем пространстве имён

apiVersion: v1
kind: ResourceQuota
metadata:
  name: gcp-critical-pods
  namespace: istio-system
spec:
  hard:
    pods: 1000
  scopeSelector:
    matchExpressions:
    - operator: In
      scopeName: PriorityClass
      values:
      - system-node-critical

Вторая проблема проявляется как постоянный перезапуск пода istio-cni и в логах будет подсказка как это чинить:

2025-08-15T14:03:48.272826Z     info    controllers     starting        controller=repair pods
2025-08-15T14:03:48.357825Z     info    cni-agent       initialization complete, watching node CNI dir
2025-08-15T14:03:48.358220Z     error   cni-agent       failed file copy of /opt/cni/bin/istio-cni to /host/opt/cni/bin: open /host/opt/cni/bin/istio-cni.tmp.2135482355: read-only file system
2025-08-15T14:03:48.358243Z     warn    hint: some Kubernetes environments require customization of the CNI directory. Ensure you properly set global.platform=<name> during installation
2025-08-15T14:03:48.358311Z     error   cni-agent       installer failed: copy binaries: open /host/opt/cni/bin/istio-cni.tmp.2135482355: read-only file system
2025-08-15T14:03:48.369141Z     info    cni-agent       terminating, but parent DS istio-cni-node is still present, this is an upgrade, leaving plugin in place
2025-08-15T14:03:48.369180Z     info    cni-agent       Ambient node agent shutting down - is upgrade shutdown? true

Для исправления достаточно задать --set global.platform=gke при установке Helm релиза.

воскресенье, 17 августа 2025 г.

Проверка измерений сопротивления в домашних условиях

 Это продолжение точные резисторы для калибровки и неожиданная цена за простую плату - собрал набор сопротивлений (0,1 Ом, 1 Ом, 10 Ом, 100 Ом, 1 кОм, 10 кОм, 100 кОм, 1 МОм, 10 МОм) которыми можно проверить точность показаний сопротивления у измерительных приборов в домашних условиях.

Использованы тонкоплёночные SMD сопротивления от Yageo с точностью 0,1% и ТКС ±25ppm.  Для всех номиналов кроме 1 МОм и 10 МОм итоговая мощность 1,25 Вт.

Использовал их для проверки точности измерения сопротивления приборами, которые есть в моей мастерской.

В качестве эталонного измерительного прибора выступил настольный мультиметр Agilent U3402A с использованием четырёхпроводной схемы измерений. В этом режиме его точность измерения сопротивления выше любого другого из моих приборов, но при измерении сопротивлений выше 100 кОм рекомендованы экранированные провода которых у меня нет.

пятница, 1 августа 2025 г.

Микрометр 0-25 мм

 Пополнил свой список измерительных инструментов микрометром 0-25 мм с ценой деления 0,01 мм (10 микрон). Этот инструмент был выпущен в 1974 году московским заводом "Калибр" и находится в хорошем состоянии.

Брал его чтобы проверить сечение многожильного провода, но по итогу оказалось что продавец неверно указал информацию о количестве и диаметре жил (в описании товара было указано 7 жил по 0,26 мм, а на самом деле там 12 жил по 0,19 мм).

Микрометр пришёл мне отрегулированным и уверенно становится на ноль если вращать за храповик. На случай если хочется проверить точность микрометра, но нет концевых мер длины, то можно проверить используя щупы для регулировки клапанов (обычно в наборе щупы 0,05 мм - 1 мм).

четверг, 17 июля 2025 г.

Wildcard SSL сертификат

Понадобилось сгенерировать wildcard SSL сертификат и раскладывать его по пространствам имён в Kubernetes кластере. Этот сертификат будет использоваться в тестах которые выполняются для набора приложений на каждый запрос на слияние.

В cert-manager настроен ClusterIssuer LE с валидацией через DNS01. Выпуск wildcard сертификата у Let's Encrypt поддерживается только через DNS валидацию и протокол ACMEv2. В примере использован сервис Cloud DNS от Google Cloud Platform.

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-production
spec:
  acme:
    email: certificates@example.com
    privateKeySecretRef:
      name: letsencrypt-production
    server: https://acme-v02.api.letsencrypt.org/directory
    solvers:
    - dns01:
        cloudDNS:
          project: GCP_PROJECT_ID

Манифест для wildcard сертификата (сам сертификат и ключ будут созданы в пространстве имён cert-manager)

вторник, 15 июля 2025 г.

Привилегии приложений в контейнерах

Хорошей практикой является принцип наименьших привилегий (давать только те права которые нужны для выполнения задачи). На практике разработчики зачастую идут путём наименьшего сопротивления и копируют "рецепты" из интернета.

Далее несколько частых случаев с которыми мне доводится сталкиваться и варианты их решения.

Прослушивание портов ниже 1024

Если программа требует повышения привилегий для прослушивания портов 80 и 443 (или любых других до 1024), то можно изменить конфигурацию для прослушивания портов выше 1024 (например 8080 и 8443), а на балансировщике сделать преобразование портов. Если переназначение портов невозможно, то можно воспользоваться Linux capabilities и выдать только CAP_NET_BIND_SERVICE вместо выдачи прав пользователя root.

воскресенье, 13 июля 2025 г.

Ремонт Amazon Kindle 4

 Купил на барахолке Kindle 4 с разбитым экраном, который послужил донором материнской платы для моего Kindle, который перестал включаться (скорее всего из-за износа внутренней памяти, но это не точно).

Слева это донор с барахолки, а справа - уже разобранный реципиент у которого виднеется отладочный провод UART. Донор включался и у него работала неповреждённая часть экрана.

Для ремонта использовал инструкцию по замене материнской платы с сайта iFixit.com, дополнительно стоит посмотреть инструкцию по замене экрана.

суббота, 12 июля 2025 г.

Java программа не видит переменных окружения с точкой в имени

 Столкнулся с интересной проблемой когда внедрял сборку контейнеров под ARM64 процессоры. Есть программа на Java контейнер которой использовал образ "eclipse-temurin:17-jre-alpine" в качестве базового. Для этого базового образа отсутствует вариант для платформы linux/arm64 и стоял вопрос что безопаснее сделать:

  • перейти на "eclipse-temurin:17-jre-noble" который использует Ubuntu вместо Alpine
  • перейти на "eclipse-temurin:21-jre-alpine" который влечёт обновление Java с 17 на 21

Разработчик выбрал первый вариант (перейти на "eclipse-temurin:17-jre-noble"), т.к. обновление версии Java выглядит рискованным (может повлечь неожиданные эффекты в какой-либо из библиотек) и требует полного цикла тестирования которое провести сейчас нет возможности.

Я также считал что замена Alpine на Ubuntu при сохранении версии Java является менее рискованным, хотя и повлечёт увеличение размера образа контейнера и возможные риски из-за замены musl на libc (хотя я не особо верю в вероятность таких неприятностей). Забегая вперёд, мы потратили несколько часов разбираясь почему программа перестала запускаться.

четверг, 10 июля 2025 г.

Рассинхронизация звука и видео в LibreELEC 12

 Какое-то время назад обновил домашние HTPC с LibreELEC 9.x на 12.x ради возможности смотреть YouTube на большом экране (отправляю ссылку с телефона на нужный HTPC через Kore). Сейчас в строю два HTPC - один собран на базе Gigabyte BRIX, а второй был на базе Raspberry PI 3B. Вот на втором из них и начались проблемы с синхронизацией звука и видео - спустя 10 минут звук начинал спешить, а через пол-часа уже невозможно смотреть.

Я пробовал менять настройки вывода звука, но заметного эффекта это не дало. Нагрузка на процессор была около 40% это не выглядело как нехватка ресурсов. В логе Kodi никаких интересных записей не нашлось.

На прошедших выходных занялся этой проблемой и заменил Raspberry PI 3B, на Raspberry PI 4. Насколько я могу судить по нескольким дням использования, проблема с синхронизацией больше не проявлялась.

среда, 9 июля 2025 г.

Держатель аккумуляторов для Zoyi ZT-DQ02

Для измерения внутреннего сопротивления аккумуляторов или иных источников питания Zoyi ZT-DQ02 комплектуется зажимами в виде крокодилов. Их удобно использовать для измерения выводных источников питания (например аккумулятор 18650 с приваренными лепестками). Если стоит задача быстро проверить десяток обычных ячеек, то гораздо быстрее будет использовать специализированный держатель.

Разъём для измерения внутреннего сопротивления у ZT-DQ02 это авиационный XS10-4P. Назначение пинов XS10-4P взял от штатного провода с крокодилами:

  1. положительный вывод
  2. положительный вывод
  3. отрицательный вывод
  4. отрицательный вывод

Какой-либо разницы по какому из них подаётся измерительный сигнал, а с какого считываются показания, по сути нет.

воскресенье, 6 июля 2025 г.

Исправление ошибки QIDIStudio при отправке на печать

Если отправить модель на печать напрямую из QIDIStudio, то программа аварийно завершится.

Чтобы этого не случалось QIDI рекомендует добавить несколько переменных окружения

$ export WEBKIT_DISABLE_COMPOSITING_MODE=0
$ export WEBKIT_DISABLE_DMABUF_RENDERER=0
$ ./QIDIStudio_1.10.02.76_Linux_Ubuntu_20.AppImage

В описании этого способа указано что будет работать только в Ubuntu 24, но на самом деле отлично работает в Debian 12.

Альтернативный варианты:

  • добавить в адрес принтера порт 7125, но перестанет работать подключение к Fluidd из QIDIStudio.
  • Сохранять файл gcode на флешку и запускать печать с принтера.

суббота, 5 июля 2025 г.

Загрузка модуля ядра в LibreELEC

 Чтобы node_exporter мог считывать показания оборотов вентилятора в HTPC системе на базе Gigabyte Brix и дистрибутива LibreELEC нужно загрузить дополнительный модуль ядра it87.

# echo it87 >> /storage/.config/modules-load.d/sensors.conf

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

# wget -qO- localhost:9100/metrics | grep ^node_hwmon_fan_rpm
node_hwmon_fan_rpm{chip="platform_it87_2592",sensor="fan1"} 0
node_hwmon_fan_rpm{chip="platform_it87_2592",sensor="fan2"} 2848
node_hwmon_fan_rpm{chip="platform_it87_2592",sensor="fan3"} 0

пятница, 4 июля 2025 г.

Неожиданная цена за простую плату

 Заказывал сегодня мелкие платки у NextPCB и столкнулся с неожиданно высокой стоимостью изготовления. Раньше при заказе двухслойной платы размером до 100х100 мм они стоили 5$ за 10 шт, но в моём случае насчитало около 20$ за плату размером 35х20 мм.

На отдельной странице стал экспериментировать с параметрами заказа без загрузки гербера и выяснилось что если размер платы меньше 30х30 мм, то 5$ превращаются в 13$. А отдельные 7$ мне накинуло за шелкографию на нижней стороне.

В итоге растянул плату до 35х30 мм и перенёс шелкографию на верхний слой.

При оформлении заказа ещё накинуло 13% налога, которого не было при прошлом заказе, но это уже мелочи.

четверг, 3 июля 2025 г.

Точные резисторы для калибровки

 В ветке форума EEVblog, посвящённой измерителю LCR Zoyi ZT-DQ02, обсуждали версию прошивки 1.0.8 и упоминалось что после обновления на эту версию потребует калибровки некоторых значений сопротивления.

В инструкции на измеритель указаны необходимые номиналы сопротивлений, требуемых для полной калибровки (их можно калибровать по отдельности):

  • для измерительного моста: 0Ω, 10mΩ, 100mΩ, 1Ω, 10Ω, 100Ω, 1kΩ, 10kΩ, 100kΩ, 1MΩ, 10MΩ
  • для измерителя внутреннего сопротивления: 0Ω, 1mΩ,10mΩ, 100mΩ, 1Ω, 10Ω, 100Ω, 1kΩ

 В сумме требуется 12 различных номиналов: 0Ω, 1mΩ, 10mΩ, 100mΩ, 1Ω, 10Ω, 100Ω, 1kΩ, 10kΩ, 100kΩ, 1MΩ, 10MΩ. Точность нужна не хуже 0.1% и очень желательно выбирать резисторы с низким ТКС (Температурный Коэффициент Сопротивления). Такие резисторы редко бывают в наличии и стоят в разы дороже обычных.

У меня такого набора резисторов нет и беглый поиск по местным магазинам показал что неполный набор можно достать только под заказ. Однако есть идея как сделать большую часть номиналов самостоятельно при этом улучшив точность и мощность - нужно соединить параллельно 10 резисторов одного номинала и получится номинал в 10 раз меньше исходного, но с мощностью в 10 раз выше исходной.

суббота, 28 июня 2025 г.

Лечение скрипа при печати Qidi Q1 Pro

У принтеров Qidi Q1 Pro есть болячка в виде скрипа при печати. В моём случае она проявилась спустя два месяца после покупки и очень раздражала. Вначале я грешил на скрип направляющих, но их смазка ничего не давала. Потом мне подсказали что звук издают ленивцы (ролики через которые проходят ремни) и посоветовали их смазывать. Но это сложно из-за их неудобного расположения и давало эффект на одну или две печати.

Сегодня в телеграмм канале прочитал что причина скрипа ленивцев - трение кромки ремня о ролик. Следовательно нужно смазать торец ремня и скрип пройдёт. Использовал жидкую силиконовую смазку которую нанёс на торец ремня ватными палочками. Нужно делать это аккуратно чтобы волокна ваты не оставались на ремне.

В итоге печать идёт уже больше часа и никакого скрипа. Огромное спасибо человеку, который поделился этим решением.

воскресенье, 22 июня 2025 г.

Amazon Kindle 4 окирпичился

Началось с того что Amazon Kindle 4 завис при открытии новой книги. На экране ничего не происходит даже если зажать кнопку включения на 15 секунд (принудительная перезагрузка). Индикатор около кнопки питания так же не светится.

Если подключить электронную книгу к компьютеру, то в логе ядра видно новое устройство

Jun 19 12:46:38 dragoncore kernel: usb 1-1: new high-speed USB device number 23 using xhci_hcd
Jun 19 12:46:39 dragoncore kernel: usb 1-1: device descriptor read/64, error -71
Jun 19 12:46:39 dragoncore kernel: usb 1-1: New USB device found, idVendor=15a2, idProduct=0052, bcdDevice= 0.01
Jun 19 12:46:39 dragoncore kernel: usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Jun 19 12:46:39 dragoncore kernel: usb 1-1: Product: NS Blank CODEX 
Jun 19 12:46:39 dragoncore kernel: usb 1-1: Manufacturer: Freescale SemiConductor Inc 
Jun 19 12:46:39 dragoncore kernel: hid-generic 0003:15A2:0052.0003: hiddev0,hidraw0: USB HID v1.10 Device [Freescale SemiConductor Inc  NS Blank CODEX ] on usb-0000:00:14.0-1/input0

Пробовал использовать Kubrick - специализированный дистрибутив для "раскирпичивания" электронных книг Amazon Kindle, но устройство не переходит в режим fastboot.

Далее в ход пошли радикальные средства - подключился к UART порту Kindle. Для этого использовал модуль USB UART на базе микросхемы FT232RL которому снижено выходное напряжение до 1,8 В чтобы соответствовать напряжению UART порта Kindle.

понедельник, 16 июня 2025 г.

Преобразователь USB RS232

 Для подключения настольного мультиметра Agilent U3402A к компьютеру я использовал преобразователь на макетной плате, который я когда-то собирал для восстановления домашнего сервера через последовательный порт. Помимо готового USB-UART модуля на микросхеме FT232RL на макетке была только одна микросхема MAX232 и четыре электролитических конденсатора на 1 мкФ. Выглядело ненадёжно и вес USB провода норовил вывернуть преобразователь из макетной платы.

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

Устройство состоит из двух плат, которые соединены через разъём и скреплены винтами через стойки. Печатная плату для USB-UART на базе микросхемы CH340G взял от изолированного USB-UART преобразователя, но вместо микросхемы гальванической развязки поставил перемычки.

среда, 11 июня 2025 г.

Переключение диапазонов для Agilent U3402A в Test Controller

 Это продолжение настройки настольного мультиметра Agilent U3402A в программе Test Controller. В прошлый раз было добавлено только переключение режимов и отображение частоты измерений.

Сейчас появился ручной выбор диапазона и частоты измерений. В этом мультиметре диапазон измерений зависит от частоты измерений.

Например для постоянного напряжения это выглядит так:

  • Низкая частота измерений
    • Автоматически
    • 120 мВ
    • 1.2 В
    • 12 В
    • 120 В
    • 1000 В
  • Средняя и высокая частота измерений
    • Автоматически
    • 400 мВ
    • 4 В
    • 40 В
    • 400 В
    • 1000 В

И так для большинства измерительных функций.

В обновленной версии конфигурации добавил в настройки поле "Rate" в котором выбирается частота измерений. При её изменении показывается показывается элемент соответствующий выбранной функции измерения с нужным списком диапазонов.

воскресенье, 1 июня 2025 г.

Источник питания стабилизированный

 Не смог пройти мимо объявления о продаже регулируемого блока питания за вполне адекватную цену (на тот момент около 15 USD). "Источник питания стабилизированный" выпускался минским заводом "Калибр" начиная с 90-х годов. Сайт завода уже не работает, но через WayBack Machine можно посмотреть как выглядела страница продукта в 2016 году.

Источник продавался с целыми заводскими пломбами и в хорошем состоянии. Им либо не пользовались, либо пользовались аккуратно. Я его купил ещё в начале мая, но только сейчас дошли руки почистить от пыли и сделать кое-какие замеры.

Технические характеристики

Измерения цифровым мультиметром показали предел регулирования напряжения от 3,1 В до 14,9 В, срабатывание защиты по току около 1,2 А и хорошую точность встроенного вольтметра.

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

Реверс инжениринг программы Test Controller

Эта статья появилась из комментария к моему обзору Test Controller на Хабре:

VC8145 не заработал, пишет что таймаут. В конфигурационном файле для него в общем-то и менять нечего. Но, насколько я понял из конфигурационного файла, он если и заработает, то умеет читать только число с основного дисплея (это я и сам умею:)). Поскольку официальной документации протокола я не нашел, мне было бы интересно посмотреть, как читаются данные с дополнительного дисплея, но увы...

Мне стало любопытно как Test Controller работает с мультиметром VC8145. Конфигурация для VC8145 действительно "скромная":

#idString Vici,VC8145
#name Vici VC8145
#handle VC8145
#driver VC8145
#port comfixedbaud
#baudrate 9600N81Rd
#help VC8145

#interfaceType DMM
#interface readValue 0

Есть только метаданные и указание драйвера VC8145, который реализован в TestController.jar. Однако узнать как он реализован несложно - Test Controller написана на Java и если автор программы не ставил цель скрыть исходный код, то достаточно загрузить этот файл в любой декомпилятор Java. Например в Java Decompiler.

воскресенье, 25 мая 2025 г.

Добавление не-SCPI устройства в Test Controller

 Ранее я писал обзор на программу Test Controller в котором в качестве примера была добавлена поддержка устройства, которое поддерживает управление через протокол SCPI. В этот раз я добавлю поддержку настольного мультиметра Agilent U3402A в котором поддержка SCPI протокола отсутствует. Точнее не так - она доступна при условии наличия модуля расширения GPIB, но в моём экземпляре такого модуля нет.

В документации на Test Controller есть раздел посвящённый поддержке не-SCPI устройств. А пример рекомендуется смотреть в файле конфигурации HP3478A.

Для начала указываю метаданные конфигурации

#idString Agilent Technologies,U3402A,
#name Agilent U3402A
#handle U3402A
#port com
#driver Ascii
#eol \r\n

Мультиметр подключается к компьютеру через последовательный порт, а драйвер будет использоваться Ascii, т.к. общение с мультиметром идёт через тестовые команды.

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

Ограничение доступа в контроллере ingress-nginx

Нередко возникает задача разрешить доступ к какому-либо приложению в Kubernetes кластере только для определённых подсетей. В случае с ingress-nginx (не путаем ingress-nginx и nginx-ingress) классический подход это использование аннотации nginx.ingress.kubernetes.io/whitelist-source-range

Например так

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: restricted-app
  annotations:
    nginx.ingress.kubernetes.io/whitelist-source-range: 192.168.0.0/16,172.16.0.0/12,10.0.0.0/8
spec:
  ingressClassName: nginx
  rules:
  - host: restricted-app.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: app-service
            port:
              number: 3000

У этого подхода есть несколько недостатков:

  • аннотации нужно обновить в каждом приложении когда изменится список разрешённых подсетей
  • в ingress-nginx контроллере могут найти уязвимость которая позволит обойти ограничение доступа

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

Ремонт сгоревшего ЛАТР

 Это продолжение истории о неудачной покупке ЛАТР. Изначально планировал вернуть его обратно продавцу, но в процессе переговоров сошлись на возврате большей части стоимости. В таком случае его ремонт становится целесообразным (забегая вперед, он оказался сложнее чем изначально представлялось) и не придётся ехать на другой конец города чтобы вернуть его.

Обмотка ЛАТР намотана медным проводом диаметром 0,5 мм по изоляции. Поискал в закромах и нашёл остатки эмалированного провода аналогичного диаметра который остался после переделки трансформатора.

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

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

вторник, 13 мая 2025 г.

Обзор программы Test Controller

Открыл для себя программу Test Controller которая предназначена для управления и регистрации данных с различных устройств (мультиметры, источники питания, электронные нагрузки). На момент обзора актуальная версия Test Controller V2.58.

У программы неплохой список поддерживаемого оборудования и возможность добавить поддержку нового устройства через текстовые конфигурационные файлы. Если сравнивать с Sigrok, то не придётся писать код и затем его компилировать. Я уже добавлял минимальную поддержку настольного мультиметра Agilent U3402A в libsigrok и это заняло несколько дней. В случае Test Controller процесс должен быть сильно проще.

Для демонстрации возможностей программы я добавлю поддержку измерителя ёмкости аккумуляторов (схема, корпус, тестирование) и сниму разрядную характеристику для аккумулятора от робота-пылесоса.

воскресенье, 11 мая 2025 г.

Проводов много не бывает

 Для работы регулируемого источника переменного напряжения требовалось двухполярное питание +12 В и -12 В для операционного усилителя. Макетную плату подключал к блоку питания проводами двух цветов - чёрный в роли общего провода, а два красных для +12 В и -12 В. Несколько раз собирал схему с нуля и каждый раз приходилось проверять какой из красных проводов отвечает за какое напряжение. Это неудобно и раздражает.

Какое-то время назад заказывал на AliExpress цветные приборные разъёмы типа банан и соответствующие по цветам зажимы типа крючок - всего 5 разных цветов (чёрный, красный, жёлтый, зелёный и синий). Из них собрал пучок проводов чтобы больше не путаться какое напряжение я буду подключать в схему.

Подключил его к своему блоку питания на 5 напряжений и теперь 4 из них легко узнаются по цветам:

четверг, 8 мая 2025 г.

Неудачно купил ЛАТР

 После экспериментов с регулируемым источником переменного напряжения решил прикупить полноценный ЛАТР (автотрансформатор).

Нашёл интересный вариант на местной барахолке и уточнил у продавца всё ли в порядке с ЛАТРом.


Модель "АОСН-2-220-82 УХЛ4" с током в 2 А который был выпущен в 1987 году. При встрече оказалось что продавец из радиолюбителей и у него есть канал на YouTube.

Дома ради интереса зашёл на его канал и поискал видео где упоминается ЛАТР. Нашлось видео с тестированием стабилизатора напряжения в котором очень похожий ЛАТР натурально горит на 17-й минуте.

вторник, 6 мая 2025 г.

Время работы устройства от батарейки

В конце ноября прошлого года купил термогигрометр чтобы отслеживать минимальные и максимальные значения температуры и влажности в подвале. Работает от батарейки CR2032, но под рукой новой не нашлось и поставил уже частично использованную.

На прошлой неделе заходил в подвал и заметил что на экране ничего не отображается, т.к. батарейка полностью разрядилась (напряжение было около 2 В). Стало интересно как часто мне придётся менять батарейки в этом устройстве.

Вначале попробовал измерить ток потребления через мультиметр в режиме Min/Max - получилось 14 мкА в минимуме и 170 мкА в максимуме. Пик потребления был примерно каждые 9 или 10 секунд. Чтобы увидеть характер потребления тока во времени подключил последовательно сопротивление на 1 кОм и параллельно ему осциллограф с развёрткой в 2 секунды.

пятница, 25 апреля 2025 г.

Регулируемый источник переменного напряжения

 Давно хотелось попробовать собрать регулируемый источник переменного напряжения. В простейшем случае берётся ЛАТР (лабораторный автотрансформатор) и разделительный трансформатор (разделительный трансформатор нужен чтобы изолироваться от сети) и мы получаем возможность регулировать переменное напряжение.

Для проверки показаний TrueRMS мультиметра нужно использовать частоту хотя бы 1 кГц и несинусоидальные формы сигнала. Для этого подойдёт генератор сигналов, но мой UTG932E может выдавать не больше 7 В эффективного напряжения.

Набросал схему усилителя для генератора сигнала, которая позволит выставить напряжение от 0 до 230 В


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

четверг, 17 апреля 2025 г.

Что внутри аккумулятора от китайского электроинструмента

В интернете часто ругают китайский электроинструмент, но его цена в разы отличается от именитых брендов вроде Bosch или Makita и не стоит ожидать от него аналогичного качества. Для эпизодического использования его надёжности вполне хватает.

Лично меня интересует вопрос безопасности его использования, а наиболее "слабым" элементом китайском электроинструменте является аккумулятор. В комплекте инструмента приложили два одинаковых аккумулятора на 21 В и 2 Ач.

Форма этого аккумулятора напоминает аккумуляторы от Makita. Далее будет разборка, тестирование ёмкости и некоторые выводы о его качестве.

понедельник, 14 апреля 2025 г.

Перестала вращаться боковая щётка пылесоса Iclebo Omega

 На прошлой неделе заметил что левая боковая щётка робота-пылесоса Iclebo Omega вся в пыли. Перед этим пылесос несколько раз останавливался с ошибкой C5 (перегрузка щёток), но визуально щётка ничем не была блокирована и после перезапуска уборка продолжалась. При очередном включении обратил внимание что левая щётка не вращается, но пылесос не выдаёт ошибку о перегрузке.

После разборки стало ясно что моторчик боковой щётки вышел из строя, т.к. при при подаче на него напряжения 3 В с лабораторного блока питания (перед этим его разъём нужно отключить от основной платы) он не вращался. Замер сопротивления обмоток мотора мультиметром показал обрыв.

На моторчике есть маркировка RC500-FN/18260A/DV, но поиск по интернет магазинам выдавал только похожие моторчики. На одном из форумов нашёл информацию что пылесос питает этот мотор напряжением 3 В.

четверг, 10 апреля 2025 г.

Как показывать версию прошивки из Git для PlatformIO

Пример показа версии прошивки из Git для PlatformIO.

В platformio.ini файл добавляем новый дефайн (в моём случае это BUILD_VERSION) а его значением делаем результат команды, которая выдаёт версию из Git

build_flags = !echo -DBUILD_VERSION='\"'$(git describe --always --tags)'\"'

В самом коде используем BUILD_VERSION в нужных местах

void scpiIdentify(SCPI_C commands, SCPI_P parameters, Stream& interface) {
    interface.print(F("Andrei Tataranovich,Power Monitor,,"));
    interface.println(BUILD_VERSION);
}

Пример ответа на команду SCPI *IDN?

*IDN?
Andrei Tataranovich,Power Monitor,,v0.2.0-1-g81a681a

Если суффикс слишком длинный, то его можно сократить добавив в команду git аргумент --abbrev=4

суббота, 5 апреля 2025 г.

Тестирование измерителя ёмкости аккумуляторов

Очередная запись о проекте измерителя ёмкости аккумуляторов, который уже перерос свою изначальную функцию. В текущей прошивке есть режимы для ручного заряда и разряда аккумуляторов, режим монитора и управление с компьютера по протоколу SCPI (Standard Commands for Programmable Instruments).

После включения устройство переходит в режим главного меню

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

В настройках задаётся напряжение окончания разряда и по его достижении внешняя нагрузка будет отключена от аккумулятора. Этим режимом я пользуюсь когда нужно разрядить аккумуляторы для длительного хранения или измерить ёмкость аккумуляторов которые не подходят к Liitokala Lii-500.