
Для тех, кто создает системы мониторинга, метрик датчиков для умных домов и промышленного оборудования, есть хорошая новость. Теперь такие системы можно собирать с применением микрокомпьютера российской разработки и сборки Repka Pi 4, который есть в реестре Минпромторга, и операционной системы NapiLinux с открытым кодом, специально предназначенной для решения подобных задач, и как раз недавно портированной разработчиками на одноплатник Repka Pi 4.
К микрокомпьютеру Repka Pi 4 через порты USB, Ethernet и GPIO можно подключать различное оборудование с целью мониторинга. Операционная система NapiLinux разработана для встраиваемых (Embedded) систем и обладает множеством преимуществ:
простая установка, которая сводится к записи образа NapiLinux на SD-карту или на EMMC;
настройка всех параметров системы через Web-интерфейс NapiConfig, исключающий необходимость работы в командной строке через SSH;
предустановленное и уже настроенное ПО для сбора, хранения и отображения данных метрик — агент сбора метрик и данных Telegraf, высокопроизводительная база данных временных рядов InfluxDB, популярная платформа визуализации и мониторинга данных Grafana;
наличие программного интерфейса NaPi.API, позволяющего создавать собственные программы для обработки данных метрик и использования всех функций NapiConfig их программ;
наличие дублирующих системных разделов (A/B) для безопасного обновления и автоматического отката при сбое загрузки;
хранение пользовательских данных отдельно от системной области, что сохраняет их при переустановке или обновлении ОС.
ОС NapiLinux делает сложную установку и настройку Telegraf, InfluxDB и Grafana для сбора метрик с датчиков через Modbus и Telegraf в связке с одноплатником излишней — достаточно просто записать образ этой ОС на карту SD или EMMC, и можно начинать работу.
В этой статье рассказывается, как приступить к работе с NapiLinux, установив ее на Repka Pi 4 — показаны основные этапы настройки, подключение датчиков загрузки процессора CPU, датчика температуры и влажности XY-MD02, датчика напряжения, тока, мощности и частоты питающего напряжения PZEM-016 и датчика устройства ATS-1204, так же Вы узнаете, как просматривать графики изменения метрик в Web-интерфейсах NapiConfig, InfluxDB, а также при помощи Grafana и будут приведены примеры вызова NaPi.API через утилиту curl и с помощью программы на Python.
Оглавление
Установка NapiLinux на Repka Pi 4
Процедура установки ОС Napi Linux включает в себя скачивание образа SD-карты и определение текущего адреса IP, выделенного Repka Pi 4. Если ваш микрокомпьютер оборудован EMMC, то имеет смысл скопировать ОС NapiLinux на этот модуль памяти, это позволит одноплатному компьютеру работать ощутимо быстрее и при этом такой тип дисков более надёжный и долговечный, особенно при большом количестве перезаписываемых данных в базе денных.
Запись образа Napi Linux на SD-карту
ОС NapiLinux способен работать на различных платформах. Готовые образы этой ОС размещены на сайте https://download.napilinux.ru/napilinux/. На момент подготовки статьи была доступна версия ОС 0.2.2 с поддержкой микрокомпьютера Repka Pi 4.
Войдите в каталог napilinux-repka-pi4-optimal-dev и скачайте файл napilinux-repka-pi4-optimal-dev-0.2.2.rootfs.system_img.xz (рис. 1).

Рис. 1. Образы Napi Linux для различных платформ
Запишите файл на SD-карту объемом 32 Гбайт с помощью программы BalenaEtcher или Rufus. Далее вставьте SD-карту с образом Napi Linux в микрокомпьютер и загрузите ОС.
Определение адреса IP микрокомпьютера
Для определения текущего адреса IP, выделенного микрокомпьютеру с ОС Napi Linux подключите к Repka Pi монитор с интерфейсом HDMI и клавиатуру. Затем введите в консоли команду «ip -a» (рис. 2).

Рис. 2. Определение текущего адреса IP
Команда покажет в консоли искомый адрес IP. В дальнейшем с помощью web-интерфейса NapiConfig его нетрудно будет заменить постоянным адресом.
Чтобы проверить работу Web-интерфейса NapiConfig, введите в адресной строке браузера URL вида https://192.168.0.20/, где вместо 192.168.0.20 укажите адрес вашего узла. Подтвердив использование самоподписанного сертификата, вы увидите приглашение для ввода логина и пароля (рис. 3).

Рис. 3. Приглашение для ввода логина и пароля
Ведите логин «admin» и пароль «admin», и на экране появится главное окно web-интерфейса NapiConfig (рис. 4).

Рис. 4. Главное окно web-интерфейса NapiConfig
Копирование Napi Linux на EMMC
Для увеличения надежности работы скопируем образ Napi Linux на карту EMMC с помощью команды dd. Для этого важно узнать название устройства EMMC.
Команда lsblk покажет информацию о всех блочных устройствах:
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
mmcblk0 179:0 0 28.8G 0 disk
├─mmcblk0p1 179:1 0 1.5G 0 part /mount/rfs/ro
├─mmcblk0p2 179:2 0 1.5G 0 part
└─mmcblk0p3 179:3 0 25.9G 0 part /mount/rfs/rw
mmcblk1 179:32 0 28.9G 0 disk
└─mmcblk1p1 179:33 0 28.6G 0 part
mmcblk1boot0 179:64 0 4M 1 disk
mmcblk1boot1 179:96 0 4M 1 disk
Здесь показан результат выполнения команды lsblk сразу после установки Napi Linux на SD-карту. Видно, что SD-карте соответствует устройство mmcblk0, а памяти EMMC — устройство mmcblk1.
Назначение устройства можно проверить и такими командами:
# cat /sys/class/block/mmcblk0/device/type
SD
# cat /sys/class/block/mmcblk1/device/type
MMC
Для загрузки образа ОС Napi Linux на карту EMMC, установленную в Repka Pi 4, запустите команду:
# wget -O - https://download.napilinux.ru/napilinux/0.2.2/napilinux-repka-pi4-optimal-dev/napilinux-repka-pi4-optimal-dev-0.2.2.rootfs.system_img.xz | xz -T0 -d | dd of=/dev/mmcblk1 bs=4M status=progress
Эта команда скачивает образ NapiLinux версии 0.2.2, распаковывает его и записывает на устройство /dev/mmcblk1. Если у вас EMMC соответствует другому устройству, отредактируйте параметр of соответствующим образом.
После запуска команды wget начнется загрузка и распаковка образа, а также запись образа на устройство /dev/mmcblk1:
Connecting to download.napilinux.ru (87.245.206.189:443)
wget: note: TLS certificate validation not implemented
writing to stdout
- 43% |***************************** | 193M 0:03:39 ETA
Предупреждение «TLS certificate validation not implemented» можно игнорировать. Чтобы оно не появлялось, добавьте к команде wget --no-check-certificate.
Дождитесь завершения процесса записи:
writing to stdout
- 100% |*******************************************************************| 441M 0:00:00 ETA
written to stdout
3188154368 bytes (3.2 GB, 3.0 GiB) copied, 412 s, 7.7 MB/s
0+107914 records in
0+107914 records out
3581935616 bytes (3.6 GB, 3.3 GiB) copied, 426.483 s, 8.4 MB/s
Когда запись будет закончена, сбросьте содержимое буфера и завершите работу ОС:
# sync
# shutdown -h now
После этого выключите питание Repka Pi 4, извлеките SD-карту и загрузите Napi Linux с карты EMMC.
Настройка статического адреса IP для узла Repka Pi 4
Как мы уже говорили, в состав Napi Linux входит web-интерфейс NapiConfig, позволяющий выполнять необходимые настройки через браузер.
Откройте NapiConfig по адресу https://192.168.0.20/, заменив 192.168.0.20 адресом IP вашего узла, определенного с помощью команды «ip -a». Выберите строку Интерфейсы в разделе Сеть (рис. 5).

Рис. 5. Настройка сетевых интерфейсов
Здесь щелкните ссылку end0 и введите сетевые настройки в панели Настройки интерфейса (рис. 6).

Рис. 6. Настройки интерфейса
Здесь нужно задать как минимум IP-адрес, маршруты и DNS-серверы. Для сохранения параметров щелкните кнопку Применить. Проверьте, что после перезагрузки ОС установились правильно, а сеть доступна.
Подключение датчиков
С помощью NapiConfig можно подключить к системе сбора данных датчики самых разных типов. Для получения метрик от датчиков по протоколам Modbus RTU через RS485, через шлюз Modbus TCP и SNMP применяется Telegraf.
Собранные данные сохраняются в базе данных InfluxDB2 и могут передаваться для отображения в Grafana.
Добавляем датчик CPU
Даже если у вас еще пока нет ни одного датчика, который можно было бы подключить к Repka Pi 4, можно настроить сбор метрик с данными о загрузке CPU. Давайте добавим этот датчик в мониторинг.
Откройте раздел Датчики (рис. 7).

Рис. 7. Раздел управления датчиками
Сразу после установки NapiLinux этот раздел пустой, а служба датчиков не активна. Чтобы добавить датчик для CPU щелкните кнопку Добавить новый и заполните форму (рис. 8).

Рис. 8. Добавление датчика CPU
В поле Название введите строку CPU, а в поле Редактор конфигурации скопируйте данные для Telegraf, представленные ниже:
# Read metrics about cpu usage
[[inputs.cpu]]
## Whether to report per-cpu stats or not
percpu = false
## Whether to report total system cpu stats or not
totalcpu = true
## If true, collect raw CPU time metrics
collect_cpu_time = false
## If true, compute and report the sum of all non-idle CPU states
## NOTE: The resulting 'time_active' field INCLUDES 'iowait'!
report_active = false
## If true and the info is available then add core_id and physical_id tags
core_tags = false
Щелкните кнопку Сохранить. Появится кнопка Тест, с помощью которой нужно выполнить тестирование конфигурации (рис. 9).

Рис. 9. Окно тестирования конфигурации
Если ошибок нет, в окне Тест пройден появится сообщение «Конфигурация действительна». Закройте окно кнопкой Закрыть, а потом щелкните кнопку ^+S сохранения зеленого цвета с изображением дискеты.
После этого вернитесь в окно просмотра датчиков и щелкните там кнопку Активировать, расположенную в строке только что добавленного датчика CPU.
Через некоторое время будет активирован датчик CPU, а также служба датчиков (рис. 10).

Рис. 10. Активирован датчик CPU и служба датчиков
Служба датчиков должна быть запущена и активирована.
Подождите несколько минут, а затем откройте страницу Графики в разделе Основные. Выберите здесь датчик cpu и поле usage_user. Вы увидите график соответствующей метрики загрузки процессора (рис. 11).

Рис. 11. Просмотр графика загрузки процессора
Здесь можно выполнять различные операции с графиком — задавать период автоматического обновления, растягивать участки графика для детального просмотра, задавать временной интервал отображения метрики, коэффициент масштабирования по вертикальной оси и выполнять другие действия, описанные в документации NapiConfig.
Подключаем датчик XY-MD02 с интерфейсом RS-485
Для контроля температуры и влажности воспользуемся датчиком XY-MD02. Подключите его к микрокомпьютеру и Repka Pi 4 с помощью переходника из USB в RS-485.
Приобретая переходник из USB в RS-485, убедитесь, что в нем предусмотрена гальваническая развязка цепей. В описании преобразователя интерфейсов USB-RS485/RS232 на чипах CH340 и MAX232 есть фраза: "Адаптер имеет полную изоляцию источника питания и сигналов, обеспечивая надежную защиту от помех и безопасное использование."
Макет на базе Repka Pi 4 c ОС Napi Linux и датчиком XY-MD02 показан на рис. 12.

Рис. 12. Подключение датчика XY-MD02 к микрокомпьютеру Repka Pi 4
При сборке макета подключите питание 12 В к соответствующим выводам датчика. Контакты A+ и B- датчика подключите к контактам A и B переходника.
Для проверки возможности получения метрик от датчика используйте команду mbpoll, которая есть в ОС Napi Linux:
# mbpoll -m rtu -a 1 -r 2 -c 2 -t 3 -b 9600 -P none -s 1 -d 8 -1 -v /dev/ttyUSB0
debug enabled
Set device=/dev/ttyUSB0
mbpoll 1.0-0 - ModBus(R) Master Simulator
Copyright (c) 2015-2023 Pascal JEAN, https://github.com/epsilonrt/mbpoll
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions; type 'mbpoll -w' for details.
Opening /dev/ttyUSB0 at 9600 bauds (N, 8, 1)
Set response timeout to 1 sec, 0 us
Protocol configuration: ModBus RTU
Slave configuration...: address = [1]
start reference = 2, count = 2
Communication.........: /dev/ttyUSB0, 9600-8N1
t/o 1.00 s, poll rate 1000 ms
Data type.............: 16-bit register, input register table
-- Polling slave 1...
[01][04][00][01][00][02][20][0B]
Waiting for a confirmation...
<01><04><04><01><1F><01><8B>
[2]: 287
[3]: 507
Как видите, датчик работает. Он вернул такие значения температуры и влажности:
температура: 287/10 = 28.7 градусов Цельсия;
влажность: 507/10 = 50.7%
При запуске команде mbpoll были заданы параметры:
устройство /dev/ttyUSB0;
-b: скорость передачи данных 9600 бод;
-P, -d, -s: параметры связи: 8 бит данных, 1 стоп-бит, без бита четности;
-m: протокол Modbus RTU;
-a: адрес устройства (Slave) 1;
-r: адрес первого регистра для чтения 2;
-c: количество читаемых регистров 2:
-t : читаются входные (Input) регистры;
-1: однократное чтение данных;
-v: режим отладки, позволяет увидеть данные, отправляемые в датчик и получаемые от него, в шестнадцатеричном формате
Описание всех параметров можно получить, если указать параметр -h:
$ mbpoll -h
Для мониторинга метрик датчика XY_MD02 добавьте с помощью NapiConfig шаблон, представленный ниже:
## XY_MD02 Temperature\Humidity) Modbus RTU
[[inputs.modbus]]
name = "XY_MD02" # Название устройства
slave_id = 1
timeout = "10s"
# busy_retries = 0
# busy_retries_wait = "100ms"
controller = "/dev/ttyUSB0"
baud_rate = 9600
data_bits = 8
parity = "N"
stop_bits = 1
transmission_mode = "RTU"
# Список регистров для чтения
input_registers = [
{ measurement="XY_MD02-rtu", name = "Temperature", byte_order = "AB", data_type = "UINT16", scale=0.1, address = [1]},
{ measurement="XY_MD02-rtu", name = "Humidity", byte_order = "AB", data_type = "UINT16", scale=0.1, address = [2]},
]
На рис. 13 мы показали, что теперь Telegraf собирает метрики уже с двух датчиков.

Рис. 13. Активированы датчики CPU и XY_MD02
Через несколько минут после активации датчика XY_MD02 откройте страницу Графики в разделе Основные. Выберите здесь датчик XY_MD02-rtu и поле Humidity. Появится график изменения влажности со временем (рис. 14).

Рис. 14. График изменения влажности со временем
Подключаем датчик PZEM-016 с интерфейсом RS-485
Для того чтобы контролировать напряжение, ток и мощность нагрузки, получающей питание от электросети, можно использовать датчик PZEM-014/016 AC communication module.
Схема подключения этого датчика есть в документации, а также нарисована на корпусе датчика (рис. 15).

Рис. 15. Схема подключения датчика PZEM-016
Напряжение 220 В с вилки подается на нижние два контакта PZEM-016.
На рис. 16 показан макет в сборе, с помощью которого можно контролировать энергопотребление паяльника.

Рис. 16. Измеряем параметры потребления электроэнергии паяльника
К верхним двум контактам PZEM-016 подключается датчик тока, который нужно обернуть вокруг одного из поводов, идущих к розетке. Розетка в данном случае используется для подключения нагрузки.
После подключения PZEM-016 к микрокомпьютеру Repka Pi 4 выполним тестирование командой mbpoll:
# mbpoll -m rtu -a 1 -r 0 -c 10 -t 3 -b 9600 -P none -s 1 -d 8 -1 -0 -v /dev/ttyUSB0
debug enabled
Set device=/dev/ttyUSB0
mbpoll 1.0-0 - ModBus(R) Master Simulator
Copyright (c) 2015-2023 Pascal JEAN, https://github.com/epsilonrt/mbpoll
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions; type 'mbpoll -w' for details.
Opening /dev/ttyUSB0 at 9600 bauds (N, 8, 1)
Set response timeout to 1 sec, 0 us
Protocol configuration: ModBus RTU
Slave configuration...: address = [1]
start reference = 0, count = 10
Communication.........: /dev/ttyUSB0, 9600-8N1
t/o 1.00 s, poll rate 1000 ms
Data type.............: 16-bit register, input register table
-- Polling slave 1...
[01][04][00][00][00][0A][70][0D]
Waiting for a confirmation...
<01><04><14><08><00><00><00><01><9A><00><00><00><00><00><01><00><64><00><00>
[0]: 2226
[1]: 184
[2]: 0
[3]: 410
[4]: 0
[5]: 240
[6]: 0
[7]: 500
[8]: 100
[9]: 0
Команда читает десять входных регистров начиная с регистра с номером 0. Полученные данные можно сверить с даташитом датчика, доступном на сайте https://smacont.ru/applying/015/PZEM-014-016-Datasheet-User-Manual.pdf.
В результате измерений были получены следующие значения от команды mbpoll, характерные для паяльника мощностью 40 Вт:
Напряжение: 222.6 В
Ток: 0.184 А
Мощность: 41.0 Вт
Энергия: 240 Вт*ч
Частота: 50.0 Гц
Коэффициент мощности: 1.00
Добавьте шаблон датчика с помощью NapiConfig, как это было описано ранее, а затем активируйте датчик:
##
AC communication module
[[inputs.modbus]]
name = "pzem016"
controller = [file:///dev/ttyUSB0](file:///dev/ttyUSB0)
baud_rate = 9600
data_bits = 8
parity = "N"
stop_bits = 1
transmission_mode = "RTU"
slave_id = 1
timeout = "5s"
input_registers = [
{ measurement="pzem016-modbus-rtu", name = "Volt_a", byte_order = "AB", data_type = "UINT16", scale=0.1, address = [0]},
{ measurement="pzem016-modbus-rtu", name = "Current", byte_order = "AB", data_type = "UINT16", scale=0.001, address = [1]},
{ measurement="pzem016-modbus-rtu", name = "Power", byte_order = "AB", data_type = "UINT16", scale=0.1, address = [3]},
{ measurement="pzem016-modbus-rtu", name = "Energy", byte_order = "AB", data_type = "UINT16", scale=1.0, address = [5]},
{ measurement="pzem016-modbus-rtu", name = "Frequency", byte_order = "AB", data_type = "UINT16", scale=0.1, address = [7]},
{ measurement="pzem016-modbus-rtu", name = "Power factor", byte_order = "AB", data_type = "UINT16", scale=1.0, address = [8]},
{ measurement="pzem016-modbus-rtu", name = "Alarm status", byte_order = "AB", data_type = "UINT16", scale=1.0, address = [9]},
]
Теперь можно смотреть графики изменения метрик со временем. На рис. 17 показаны графики изменения питающего напряжения, на рис. 18 — частоты, а на рис. 19 — потребляемой мощности, соответственно.

Рис. 17. Контроль питающего напряжения

Рис. 18. Контроль частоты питающего напряжения

Рис. 19. Контроль потребляемой мощности
Скачок на графике потребляемой мощности соответствует периоду времени, когда в розетку был включен паяльник на 40 Вт.
Подключаем датчик ATS-1204
С помощью NapiConfig можно настроить мониторинг по протоколу SNMP устройства ELEMY-ATS1204. Для этого в разделе SNMP – MIBs web-интерфейса NapiConfig загрузите файлы ELEMY-MIB и ELEMY-ATS1204-MIB, доступные на сайте https://github.com/lab240/telegraf-grafana-configs/tree/main/snmp/elemy-snmp (рис. 20).

Рис. 20. Загрузка файлов ELEMY-MIB и ELEMY-ATS1204-MIB
Загрузите файл конфигурации датчика для Telegraf Elemy_ATS-1204_snmp_1.conf с сайта https://github.com/lab240/telegraf-grafana-configs/blob/main/conf-telegraf/Elemy/ATS-1204-snmp-starlrk/Elemy_ATS-1204_snmp_1.conf.
В списке датчиков должен появиться датчик Elemy_ATS-1204 (рис. 21).

Рис. 21. Датчик Elemy_ATS-1204 в списке датчиков
Щелкните название датчика и запустите тестирование конфигурации с помощью кнопки Тест. Убедитесь, что тестирование завершилось успешно.
Выберите в разделе Графики датчик Elemy_ATS-1204. Теперь можно просматривать графики данных различных метрик, выбранных в списке Поле (рис. 22).

Рис. 22. Просмотр графиков данных метрик датчика Elemy_ATS-1204
Как видите, при наличии файлов шаблонов подключение датчиков к мониторингу через NapiConfig не представляет особой трудности.
Просмотр данных в InfluxDB
Для хранения данных, поступающих от датчиков через Telegraf, в Napi Linux используется база данных InfluxDB.
Откройте web-интерфейс InfluxDB, указав в адресной строке браузера URL вида http://192.168.0.20:8086/, заменив адрес IP своим. Введите логин «admin» и пароль «nnzadmin». На экране появится окно Get Started (рис. 23).

Рис. 23. Окно Get Started
Затем откройте раздел Data Explorer, щелкнув соответствующий значок в левой панели (рис. 24).

Рис. 24. Значок для открытия раздела Data Explorer
Выберите в списке FROM контейнер (бакет) bucket1. Появится список Filter. Установите в этом списке флажок cpu.
Справа от списка Filter появится еще один такой же фильтр со списком метрик. Выберите здесь метрику usage_user. При появлении третьего списка отметьте в нем флажок cpu-total.
После выбора датчика и нужных метрик щелкните кнопку SUBMIT. Вы увидите график изменения данных, причем сможете задавать, за какое время нужно показать данные (рис. 25).

Рис. 25. График изменения данных метрики usage_user
Для получения данных в InfluxDB используется скрипт на языке программирования Flux. Чтобы просмотреть созданный скрипт, щелкните кнопку SCRIPT EDITOR. В результате вы увидите текст скрипта, который можно копировать или редактировать (рис. 26).

Рис. 26. Текст скрипта на языке Flux для получения метрики usage_user
Сохраните этот скрипт в текстовом виде:
from(bucket: "bucket1")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "cpu")
|> filter(fn: (r) => r["_field"] == "usage_user")
|> filter(fn: (r) => r["cpu"] == "cpu-total")
|> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
|> yield(name: "mean")
Он будет нужен для создания панели в Grafana.
Просмотр данных в Grafana
Если вы установили на Repka Pi 4 Napi Linux, то у вас уже есть мощная открытая платформа для визуализации и анализа данных Grafana. С ее помощью можно настроить мониторинг метрик в реальном времени через интерактивные дашборды. Среди множества источников данных она поддерживает InfluxDB.
В Grafana нетрудно создавать графики, диаграммы и алерты (оповещения о критичных событиях). Она может, например, отправлять уведомления о выходах значений метрик из заданных диапазонов.
Запуск Grafana на узле Napi Linux
Чтобы запустить Grafana на узле Napi Linux, выберите строку Службы в разделе Настройки – Система. Далее найдите сервис grafana-server.service и убедитесь, что он запущен и активирован (рис. 27).

Рис. 27. Проверка состояния сервиса grafana-server.service
После того как вы убедились, что сервис grafana-server.service работает, откройте в браузере адрес вида http://192.168.0.20:3000/, где вместо 192.168.0.20 укажите адрес IP вашего узла Napi Linux. Для доступа по этому адресу нужно использовать протокол HTTP, а не HTTPS.
Если служба запустилась без ошибок, вы увидите в браузере главную страницу Grafana (рис. 28).

Рис. 28. Главное окно Grafana
Для входа введите логин «admin» и пароль «nnzadmin».
Добавление источника данных
Убедитесь, что в Grafana добавлен источник данных — база данных InfluxDB. Для этого откройте главное меню и в разделе Connections выберите меню Data sources (рис. 29).

Рис. 29. Выбор Data sources для просмотра источников данных
Откроется вкладка Data sources (рис. 30).

Рис. 30. Вкладка Data sources
Обратите внимание, что источник данных InfluxDB уже добавлен.
Создание Dashboard
Чтобы Grafana могла отображать данные измерений, полученные от датчиков, нужно создать Dashboard или подключить уже готовые.
Откройте главное меню Grafana и выберите строку Dashboards (рис. 31).

Рис. 31. Создание панели Dashboards
Чтобы создать новую панель, щелкните ссылку New dashboard в разделе Dashboards. Далее в блоке Add panel щелкните ссылку Add a new panel для добавления новой панели (рис. 32).

Рис. 32. Добавление новой панели
Будет создана панель, показанная на рис. 33.

Рис. 33. Создание новой панели для датчика cpu
Скопируйте текст запроса на языке Flux, который мы привели в конце раздела статьи «Просмотр данных в InfluxDB». Также в поле Title задайте имя панели как CPU Panel. На рис. 33 все эти изменения уже сделаны.
После внесения изменений щелкните кнопку Apply. Вы увидите панель CPU Panel с графиком изменения значений метрики usage_user (рис. 34).

Рис. 34. Панель CPU Panel с графиком изменения значений метрики usage_user
Если все получилось, то все основные службы, необходимые для полноценной работы с ОС Napi Linux в качестве системы сбора и мониторинга данных настроены правильно.
На рис. 35 показан результат добавления панелей.

Рис. 35. Добавлены панели для основных метрик датчика PZEM-016
Дополнительно можно настроить пороги, чтобы показывать напряжение или ток другим цветом, например, при превышении заданных значений. Также есть возможность отправки оповещений из Grafana при выполнении каких-либо условий, например, если напряжение пропало или стало слишком высоким.
Готовые шаблоны датчиков
Для Grafana по адресу https://sensor.napilinux.ru/ вы можете скачать готовый шаблон (рис. 36).

Рис. 36. Готовые шаблоны для датчиков
Импортируйте шаблон ATS-1204 (или другой нужный шаблон) в разделе Import dashboard (рис. 37).

Рис. 37. Импорт шаблона
Если все сделано правильно, вы увидите данные в панели Dashboard (рис. 38).

Рис. 38. Данные датчика Elemy ATS-1204 в панели Dashboard
Работаем с NaPi.API
После установки Napi Linux вам будет доступно NaPi.API, открывающее возможность вызывать функции NapiConfig из ваших программ.
Создание API ключа
Чтобы использовать NaPi.API, создайте API ключ в разделе Безопасность (рис. 39).

Рис. 39. Создание API ключа в разделе Безопасность
Щелкните здесь кнопку Создать API ключ. На экране появится форма, где нужно заполнить поле Имя и, если это нужно, поле Описание (рис. 40).

Рис. 40. Создание API ключа
После создания ключа у вас будет одноразовая возможность его скопировать (рис. 41).

Рис. 41. Копирование API ключа
Сохраните ключ в безопасном месте. После того как вы щелкните кнопку Готово, этот ключ нельзя будет посмотреть. Но при необходимости вы можете создать новый ключ.
Созданные ключи будут показаны на вкладке API (рис. 42).

Рис. 42. Созданные API ключи
Документация NaPi.API опубликована в формате OpenAPI.
Вызов маршрутов NaPi.API с помощью утилиты curl
Приведем примеры вызова NaPi.API с помощью утилиты curl, а также код программы на Python, работающей с этим API.
Для вызова маршрута /v1/login используйте следующую команду:
$ curl -k -X POST https://192.168.0.20/api/v1/login \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "X-API-Key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE3NTI2NTY3OTIuNTI2MTUsInR5cGUiOiJhcGlfa2V5Iiwib3JpZyI6Im15X2FwcCIsImRlc3QiOiJuYXBpLXJpdmVyYW50In0.m_GUOLH2HSc-Otsz4kNOptI3_SyeLKHXy2eBFfvfniI" \
-d "username=admin&password=admin"
Здесь нужно подставить свою строку X-API-Key, о получении которой было написано выше.
Маршрут возвращает API ключ:
{"access_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuaWNrbmFtZSI6ImFkbWluIiwiZXhwIjoxNzUyNzQzOTE4LCJpYXQiOjE3NTI2NTc1MTh9.N7Dr8hgmzMzlMGZlsLyjbDXVzjqKUtr-o35i8bV_Aos"}
Чтобы получить конфигурацию всех датчиков, используйте маршрут v1/sensors/configs:
# sync
# shutdown -h now
В результате вы получите данные в виде строки, формат которой не очень удобен для просмотра:
[{"name":"CPU","description":null,"manufacturer":null,"tags":[],"file_path":"/opt/app/app/data/sensor_configs/cpu.conf","id":1,"created_at":"2025-07-14T13:18:11.088583","updated_at":"2025-07-14T13:24:20.109532","is_active":true},{"name":"XY_MD02","description":null,"manufacturer":null,"tags":[],"file_path":"/opt/app/app/data/sensor_configs/xy_md02.conf","id":2,"created_at":"2025-07-14T15:32:16.489520","updated_at":"2025-07-14T16:09:51.868062","is_active":true},{"name":"PZEM-016","description":null,"manufacturer":null,"tags":[],"file_path":"/opt/app/app/data/sensor_configs/pzem-016.conf","id":3,"created_at":"2025-07-15T08:25:41.768879","updated_at":"2025-07-15T08:25:56.086385","is_active":true}]
Для форматирования строки передайте ее команде python3 -m:
echo '[{"name":"CPU","description":null,"manufacturer":null,"tags":[],"file_path":"/opt/app/app/data/sensor_configs/cpu.conf","id":1,"created_at":"2025-07-14T13:18:11.088583","updated_at":"2025-07-14T13:24:20.109532","is_active":true},{"name":"XY_MD02","description":null,"manufacturer":null,"tags":[],"file_path":"/opt/app/app/data/sensor_configs/xy_md02.conf","id":2,"created_at":"2025-07-14T15:32:16.489520","updated_at":"2025-07-14T16:09:51.868062","is_active":true},{"name":"PZEM-016","description":null,"manufacturer":null,"tags":[],"file_path":"/opt/app/app/data/sensor_configs/pzem-016.conf","id":3,"created_at":"2025-07-15T08:25:41.768879","updated_at":"2025-07-15T08:25:56.086385","is_active":true}]' | python3 -m json.tool
[
{
"name": "CPU",
"description": null,
"manufacturer": null,
"tags": [],
"file_path": "/opt/app/app/data/sensor_configs/cpu.conf",
"id": 1,
"created_at": "2025-07-14T13:18:11.088583",
"updated_at": "2025-07-14T13:24:20.109532",
"is_active": true
},
{
"name": "XY_MD02",
"description": null,
"manufacturer": null,
"tags": [],
"file_path": "/opt/app/app/data/sensor_configs/xy_md02.conf",
"id": 2,
"created_at": "2025-07-14T15:32:16.489520",
"updated_at": "2025-07-14T16:09:51.868062",
"is_active": true
},
{
"name": "PZEM-016",
"description": null,
"manufacturer": null,
"tags": [],
"file_path": "/opt/app/app/data/sensor_configs/pzem-016.conf",
"id": 3,
"created_at": "2025-07-15T08:25:41.768879",
"updated_at": "2025-07-15T08:25:56.086385",
"is_active": true
}
]
Здесь показаны данные трех датчиков, которые я добавил ранее. Для каждого датчика выводится имя, описание, производитель и теги (если заданы), путь к файлу конфигурации Telegraf, идентификатор, даты создания и обновления конфигурации.
Вызов маршрутов NaPi.API из программы Python
Приведем для примера исходный код программы, получающей список всех датчиков и метрики датчика XY_MD02-rtu, считывая их из InfluxDB через NaPi.API.
Перед запуском программы установите пакет requests:
$ pip3 install requests
Исходный код программы приведен ниже:
import requests
import getpass
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
API_BASE = "https://192.168.0.20/api/v1"
API_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE3NTI2NTY3OTIuNTI2MTUsInR5cGUiOiJhcGlfa2V5Iiwib3JpZyI6Im15X2FwcCIsImRlc3QiOiJuYXBpLXJpdmVyYW50In0.m_GUOLH2HSc-Otsz4kNOptI3_SyeLKHXy2eBFfvfniI"
HEADERS = {
"Accept": "application/json",
"X-API-Key": API_KEY,
"Content-Type": "application/json"
}
# --- Получение всех measurements ---
meas_url = f"{API_BASE}/influxdb/data/measurements"
response = requests.get(meas_url, headers=HEADERS, verify=False)
if response.status_code != 200:
print(f"[!] Ошибка получения measurements: {response.status_code}")
print(response.text)
exit(1)
measurements = response.json()
print("\n[+] Доступные измерения (measurements):")
for m in measurements:
print("-", m)
# --- Работа с XY_MD02-rtu ---
target_measurement = "XY_MD02-rtu"
#target_measurement = "cpu"
print(f"\n[+] Обработка measurement: {target_measurement}")
# Получаем поля
fields_url = f"{API_BASE}/influxdb/data/measurements/{target_measurement}/fields"
response = requests.get(fields_url, headers=HEADERS, verify=False)
if response.status_code != 200:
print(f"[!] Ошибка получения полей для {target_measurement}: {response.status_code}")
print(response.text)
exit(1)
fields = response.json()
print(f"[+] Поля для {target_measurement}:")
for field in fields:
print("-", field)
# Получаем данные по каждому полю
print(f"\n[+] Данные по каждому полю:")
for field in fields:
sensor_url = f"{API_BASE}/influxdb/data/sensors/{target_measurement}/{field}"
response = requests.get(sensor_url, headers=HEADERS, verify=False)
print(f"\n? Поле: {field}")
if response.status_code == 200:
try:
data = response.json()
entries = data.get(target_measurement, {}).get(field, [])
if not entries:
print("Нет данных")
else:
for entry in entries:
print(f"{entry['time']}: {entry['value']}")
except Exception as e:
print("Ошибка разбора JSON:", e)
else:
print("Ошибка запроса:", response.text)
Результаты своей работы программа выводит на консоль:
# python3 napi_api.py
[+] Доступные измерения (measurements):\
XY_MD02-rtu\
cpu
[+] Обработка measurement: XY_MD02-rtu
[+] Поля для XY_MD02-rtu:\
Humidity\
Temperature
[+] Данные по каждому полю:
? Поле: Humidity
2025-07-16T09:29:40+00:00: 52
2025-07-16T09:29:50+00:00: 52
2025-07-16T09:30:00+00:00: 52
2025-07-16T09:30:10+00:00: 52
2025-07-16T09:30:20+00:00: 52
2025-07-16T09:30:30+00:00: 52
2025-07-16T09:30:40+00:00: 52
2025-07-16T09:30:50+00:00: 53
2025-07-16T09:31:00+00:00: 53
2025-07-16T09:31:10+00:00: 53
2025-07-16T09:31:20+00:00: 53
2025-07-16T09:31:30+00:00: 53
2025-07-16T09:31:40+00:00: 53
2025-07-16T09:31:50+00:00: 53
2025-07-16T09:32:00+00:00: 53
2025-07-16T09:32:10+00:00: 53
2025-07-16T09:32:20+00:00: 53
2025-07-16T09:32:30+00:00: 53
2025-07-16T09:32:40+00:00: 54
2025-07-16T09:32:50+00:00: 54
2025-07-16T09:33:00+00:00: 54
2025-07-16T09:33:10+00:00: 54
2025-07-16T09:33:20+00:00: 54
2025-07-16T09:33:30+00:00: 54
2025-07-16T09:33:40+00:00: 54
2025-07-16T09:33:50+00:00: 54
2025-07-16T09:34:00+00:00: 54
2025-07-16T09:34:10+00:00: 54
2025-07-16T09:34:20+00:00: 54
2025-07-16T09:34:30+00:00: 54
? Поле: Temperature
2025-07-16T09:29:40+00:00: 27
2025-07-16T09:29:50+00:00: 27
2025-07-16T09:30:00+00:00: 27
2025-07-16T09:30:10+00:00: 27
2025-07-16T09:30:20+00:00: 27
2025-07-16T09:30:30+00:00: 27
2025-07-16T09:30:40+00:00: 27
2025-07-16T09:30:50+00:00: 27
2025-07-16T09:31:00+00:00: 27
2025-07-16T09:31:10+00:00: 27
2025-07-16T09:31:20+00:00: 27
2025-07-16T09:31:30+00:00: 27
2025-07-16T09:31:40+00:00: 27
2025-07-16T09:31:50+00:00: 27
2025-07-16T09:32:00+00:00: 27
2025-07-16T09:32:10+00:00: 27
2025-07-16T09:32:20+00:00: 27
2025-07-16T09:32:30+00:00: 27
2025-07-16T09:32:40+00:00: 27
2025-07-16T09:32:50+00:00: 27
2025-07-16T09:33:00+00:00: 27
2025-07-16T09:33:10+00:00: 27
2025-07-16T09:33:20+00:00: 27
2025-07-16T09:33:30+00:00: 27
2025-07-16T09:33:40+00:00: 27
2025-07-16T09:33:50+00:00: 27
2025-07-16T09:34:00+00:00: 27
2025-07-16T09:34:10+00:00: 27
2025-07-16T09:34:20+00:00: 27
2025-07-16T09:34:30+00:00: 27
На рис. 43 показан соответствующий этим измерениям график изменения влажности.

Рис. 43. График изменения влажности
Таким образом, с помощью NaPi.API вы можете создавать программы, получающие данные метрик из InfluxDB для обработки согласно нужным вам алгоритмам.
Итоги
Теперь, когда появился образ Napi Linux для Repka Pi 4, вы можете собрать систему сбора данных с использованием Modbus, даже не обладая навыками системного администрирования Linux.
В этом материале показано, как подключить датчики XY-MD02, PZEM-016 и ATS-1204, при этом все действия по настройке конфигурации можно сделать через Web-интерфейс NapiConfig. Данные собираются с датчиков при помощи Telegraf, а затем сохраняются в InfluxDB, как можно настроить отображение этих данных в Grafana. Все эти настройки также выполняются при помощи NapiConfig.
Прочитав статью, вы узнали о том, как использовать программный интерфейс NaPi.API, предусмотренный в Napi Linux, для реализации собственных алгоритмов обработки данных и управления узлом из своих программ, показано, как вызывать маршруты NaPi.API при помощи программы curl, а также из программы на Python.
Хочется надеяться, что вся эта информация поможет вам при создании систем сбора и мониторинга данных на базе микрокомпьютера российской сборки Repka Pi 4.
Полезные ссылки
Программа BalenaEtcher
Программа Rufus
Ссылки на Repka Pi и на Napi Linux не приведены, так как на Хабре это может быть расценено как реклама, а статья носит характер а) обзора интересной связки Российских аппаратной и программной платформ для решения задач сбора данных Умных домов и б) подробной технической инструкции для самостоятельного повтора.
Всем успешных и интересных проектов!
Комментарии (27)
zoldaten
01.08.2025 12:37отлично, что repka развивается!
планируется ли выпуск compute module repka по типу cm4 raspberry для большей мобильности ?
nikolz
01.08.2025 12:37Это очень недорогой датчик...
Какое потребление системы описанной в статье , какая цена и какая загрузка процессора?.
AlexandreFrolov
01.08.2025 12:37Специально измерения не проводились. Что касается датчика XY-MD02, то по его даташиту Power:<0.2W, напряжение питания 12В. Датчик стоит на Озоне меньше 500 руб., возможно на Алиэкспрессе будет дешевле.
Информация о Repka Pi 4 есть на сайте разработчика: https://repka-pi.ru. Вместе с Репкой продается штатный блок питания, который обеспечит необходимую мощность. Этот блок дает ток 3А при напряжении 5 В: https://repka-pi.ru/product/70.
Цены есть в каталоге https://repka-pi.ru/products, смотрите Repka Pi 4.Загрузка процессора зависит от количества датчиков, собираемых метрик, от того, будет ли использоваться Grafana и сколько панелей там будет определено.
Если загрузка будет слишком велика, можно запустить InfluxDB и Grafana на отдельных узлах. Конфигурация из статьи дает практически нулевую загрузку процессора, но в реальных проектах будет больше датчиков, метрик и панелей Grafana.
nikolz
01.08.2025 12:37Благодарю за ответ.
датчик температуры за 500 рублей да еще и от 12 вольт - это не недорогой.
Чем это лучше датчика DS1820 за 100 рублей?
-------------------------
Спросил , потому что задачи в статье очень простые для такого железа.
Да и железо не из дешевого, если это умный дом, а не умный дворец,
AlexandreFrolov
01.08.2025 12:37Здесь дело в том, что теперь на на базе Репки и Napi Linux можно сделать промышленное решение: DIN-рейка, Modbus RTU через RS485, Modbus TCP, SNMP, Telegraf, InfluxDB, Grafana.
В то же время датчики типа DS1820 больше подходят для самодельных решений. Да, по цене решения с датчиками Modbus будут дороже, но дома тоже бывают разные, и вообще дороговизна - понятие относительное. А еще бывают заводы и дата-центры, где тоже нужен мониторинг, и там бюджеты уже другие, нежели в простейших умных домах.
nikolz
01.08.2025 12:37У Вас в заголовке статьи есть "умный дом" .
Поэтому спрашиваю про дом, а не про завод(у меня его нет).
Может быть не надо все в одну кучу ?Если Вы делаете для промышленности, то какие сертификаты,, какой уровень защиты от перенапряжения, влаги есть у железа, которое Вы упоминаете в статье? .
AlexandreFrolov
01.08.2025 12:37В этой статье главное - что на базе Репки, микрокомпьютера российской разработки и сборки можно делать промышленные решения. Репка есть в реестре Минпромторга, Napi Linux тоже разработан у нас, это открытая ОС.
endoftime
01.08.2025 12:37А что в этом компьютере российского?
Про napi linux не спрашиваю, там вообще ничего отечественного нет. Ну и к защищённости таких систем большие вопросы, открытое ПО, не равно защищённому.
AlexandreFrolov
01.08.2025 12:37Что касается Napi Linux, то там отечественные очень важные компоненты:
веб-сервис NapiConfig, с помощью которого можно конфигурировать службы, подключать датчики, просматривать метрики в виде графиков и делать много еще чего. Часть функционала я раскрыл в этой статье;
АПИ NaPi.API. С помощью этого АПИ вы можете создавать собственные программы, выполняющие функции, аналогичные NapiConfig. В статье есть пример программы на Python, получающей метрики от датчика;
Кроме того, отечественной является сборка образа Napi Linux, включающего в себя NapiCinfig, NaPi.API, Telegraf, InfluxDB, Grafana. Этот образ очень просто запустить на Репке и некоторых других микрокомпьютерах, на виртуалках и на платформе Intel.
По сути Napi Linux и NapiConfig значительно упрощают создание систем сбора данных, исключая необходимость программирования и работы в командной строке Linux. NaPi.API дает возможность создания кастомных систем сбора, контроля и отображения данных метрик.
Также отечественное ПО и сборки поддерживаются отечественной компанией и постоянно развивается. В том числе уделяется внимание и защищенности, хотя тут многое зависит от проекта, собранного на базе Napi Linux.
Про Репку ниже в комментариях от @RyabovA очень хорошо написано. Если кратко, у Репки отечественная разработка и производство, компоненты из Китая. Есть возможность получить поддержку и заказать серию кастомных вариантов.
mlnw
01.08.2025 12:37Наверное не стоит сравнивать пусть и паршивое, но устройство, у которого номинально есть цепи защиты по напряжению и току, стабилизатор, трансивер 485, МК с контроллером 485, датчик температуры/влажности, промышленный разъём и корпус, с просто датчиком-свистулькой без чего бы то ни было, который за 100р. будет еще и с вероятностью близкой к 100% клоном максимовского поделия.
nikolz
01.08.2025 12:37Кроме эмоционального комментария , есть другие доказательства?
Замечу, что все айфоны собираются в Китае, Индии и Вьетнаме.
А В железе указанном в статье сколько чипов сделано в РФ?
Или я что-то не знаю? Можете рассказать?
-------------------------
Repka Pi 4 Optimal — российский одноплатный компьютер, разработанный как производительная альтернатива Raspberry Pi 4. Оснащен четырехъядерным процессором Allwinner H6
AlexandreFrolov
01.08.2025 12:37Репка есть в реестре Минпромторга - это может быть очень важно для различных применений. Разработка платы и сборка у нас, комплектующие из Китая.
nikolz
01.08.2025 12:37А зачем сборка у Вас? Дешевле сделать в Китае? У Вас же оборудование для сборки китайское? Чем сборка у Вас лучше, чем в Китае?
AlexandreFrolov
01.08.2025 12:37Тут ведь смотря кому и что нужно. Если нужно как можно дешевле, то это одно. А если нужно использовать решения из реестра Минпромторга, чтобы была прямая связь с разработчиками и возможность получить партию заказных решений, то это совсем другое.
С трудом представляю себе промышленные решения на Ардуино или чем-то подобном. Хотя может кто и делает.
nikolz
01.08.2025 12:37Если это бизнес, то нужна прибыль. Где паяли платы Минпромторг проверять не будет, да и не сможет. А упаковать в коробку можно и у Вас. Логично паять там, где дешевле - прибыль больше.
На хабре недавно была статья о том как Минпромторг записывает в свой реестр изделия микроэлектроники.
Если правильно понял то необходима разработка и чипов.
Repka набрала 203 балла. Не смог найти как она это сделала. Можете пояснить что входит в эти 203 балла?
RyabovA Автор
01.08.2025 12:37Это точно вопрос не по теме статьи :-)
Но вообще заходим на сайт, там в информацию по реестру Минпромторга, там в документ, оттуда в запись в реестре, из записи в реестре в запись в ГИСП, там видим, что это изделие в корпусе, понимаем, что в т.ч. за корпус https://gisp.gov.ru/goods/#/product/4553603
Задаём вопрос, узнаём, что будет так же вскоре как системная плата внесено в реестр, но уже с меньшим количеством баллов, что понятно, но кому то нужно именно так.
А вообще лучше всего связаться с разработчиками и производителями на сайте есть все контакты и формы для вопросов, они очень открыты к диалогу и отвечают на все адекватные запросы и вопросы, всем серьёзно настроенным заказчикам предоставляют все необходимые запрашиваемые документы, дают пояснения и терпеливо объясняют, проводят экскурсии по производству и охотно идут на разработку и производство кастомизированных модификаций - с незначительными изменениями в комплектации делают даже от пары десятков, а с существенными доработками могут сделать от 500 штук. И всё это происходит достаточно быстро. Такое может позволить именно разработчик и производитель в одном лице, это сильное конкурентное преимущество для промышленного сегмента производителей встраиваемых решений и систем, этого не получить от западных решений, а с Китайскими производителями нужно вести сложные диалоги, которые могут не всегда увенчаться успехом, а ещё нужно решать логистические задачи, в т.ч. финансовые, а тут заказал, оплатил в рублях Саратовской компании и оперативно прислали через СДЭК на ПВЗ или прямо до двери хоть штуку, хоть партию.
Напомню - данная статья совсем про другое :-)
Coder007
01.08.2025 12:37А как вы себе представляете промышленные решения на базе одноплатника? И не важно, репка или Малинка или апельсинка. Для него нужно очень много обвеса и датчики должны висеть на шине. Каждый датчик нужно адаптировать как в софте так и в железе. У одноплатника нет интерфейса 0-20 и 4-20mA ни на вход ни на выход (а это стандартные для промышленной автоматизации интерфейсы) Городить франкенштейна? А самое печальное, что придётся много программировать этот одноплатник и это уже будет работа не автоматика-программиста ПЛК, а прикладного программиста. Как то не укладывается в голове...
AlexandreFrolov
01.08.2025 12:37Для него нужно очень много обвеса и датчики должны висеть на шине.
По сути к одноплатнику можно легко подключать промышленные датчики Modbus: Modbus RTU через RS485, Modbus TCP, а также SNMP. Конечно жаль, что пока в Репке нет интерфейса RS485, но это легко решается с помощью преобразователей USB в RS485. Есть в том числе и с гальванической развязкой.
Кроме того, есть датчики, которые можно подключить через Ethernet.
Все это собирается, например, в шкафу на DIN-рейках.Каждый датчик нужно адаптировать как в софте так и в железе. У одноплатника нет интерфейса 0-20 и 4-20mA ни на вход ни на выход (а это стандартные для промышленной автоматизации интерфейсы)
Есть датчики Modbus, которые можно просто подключать через Modbus. В статье есть примеры подключения к таким датчикам, ничего городить не нужно.
А самое печальное, что придётся много программировать этот одноплатник и это уже будет работа не автоматика-программиста ПЛК, а прикладного программиста.
При использовании Napi Linux и датчиков Modbus ничего программировать не придется, или почти ничего.
После разворачивания образа Napi Linux на Репке появятся в готовом и настроенном виде Telegraf, InfluxDB, Grafana. Для настройки через Web-интерфейс используется NapiConfig, который тоже входит в Napi Linux и готов к использованию.
То есть все можно сделать без программирования и даже без обращения к консоли Napi Linux, хотя такая возможность тоже имеется.
Кроме того, никто не мешает создавать собственные произвольные датчики на базе микрокомпьютеров или микроконтроллеров, способных работать через Modbus. Для создания таких датчиков потребуются навыки разработчика и программиста встраиваемых систем. Однако чтобы их подключить достаточно подготовить текстовый шаблон для Telegraf.
Конечно, в случае промышленных применений такие датчики должны соответствовать условиям применения, в том числе их надо размещать в корпусах для DIN-рейки или в корпусах, соответствующих областям применения, позаботиться о защите, развязках, при необходимости о сертификации.
Но можно и просто подобрать уже готовые датчики Modbus. Нужно только учитывать, что промышленные датчики Modbus могут быть весьма недешевыми. Что, впрочем, вполне оправданно для промышленного применения. Именно промышленного, а не для автоматизации IoT устройств в однокомнатной квартире. Хотя квартиры, бюджеты и причины для их автоматизации тоже бывают разные.
RyabovA Автор
01.08.2025 12:37Сборка своя и для повышения локализации и для создания рабочих мест в России и для наработки компетенций. Проект одноплатников Репка это проект инициативный, т.е. разработчику не ставили такой задачи, не финансировали решение этой задачи, сами придумали, сами сделали, сами решили и разрабатывать и производить. Почему какие то люди, да ещё чисто за свои деньги берут и делают вот так, почему им не бизнес важен, а развитие технологий и формирование компетенций, вопрос про это же? Наверное это и есть настоящий, а не показной патриотизм и ещё интерес в технологиям и инженерной работе, когда это не только и даже не столько про бизнес, а про инженерию, технологии и техпроцессы. Это интересно и это нужно. И как по другому формировать по настоящему Российскую отрасль микроэлектроники? Из прогматичного - выше уже писали про качество Китайской сборки. Конечно в Китае есть и очень не качественная и очень качественная и технологичная сборка. Но для мало и среднесерийного высокотехнологичного изделия Китайская контрактная сборка на самом деле получается дороже чем грамотно организованная сборка в России. И ещё очень важный элемент - система контроля качества - когда она своя и выстроен и постоянно совершенствуется процесс, в котором не экономят на всём, на чём только можно, то это залог стабильности показателей качества на всём интервале времени производства, а когда время нахождения на рынке какой то модели изделия составляет несколько лет, это очень важно. Возможность повышать требования к техпроцессу и контролировать их - это ключевой тезис производственной части проекта Репка пай. А это и компетенции и оборудование и стандарты - их сформировать и развивать можно только самим занимаясь производством. Соответственно наращивание таких компетенций позволяет переходить на новые техпроцессы, модернизировать оборудование, повышать плотность и сложность плат и монтажа компонентов, поддерживая высокий уровень контроля качества и 100% гарантию на готовые изделия после функционального тестирования.
Была статья про производство https://habr.com/ru/articles/878898/
Вроде это же очевидные вещи.
Но самое главное - статья то совсем не об этом. И какие будут взяты датчики и протоколы - это уже особенности каждого конкретного проекта и решения его авторов, вопрос выбора. Почему Репку собирают в России, а не в Китае - это точно не про тему статьи, но это Хорошо и пусть так делают многие. Оказывается если захотеть, то можно делать по качеству на уровне европейских и американских изделий и по цене серьёзно сопоставимой с китайскими производителями и без экономии на всём. Хорошо бы так делать больше и чаще, это будет формировать совсем другой внутренний рынок и другое к нему отношение, но это точно вопрос за рамками темы статьи, не хотелось бы от неё отклоняться.
nikolz
01.08.2025 12:37Без обид, Вы написали много, но...
В приведенной Вами статье есть фото:
Российское сборочное производство электроники с нуля. Или как делают одноплатники Repka Pi Вы серьезно считаете, что это высокотехнологичная сборка и создание рабочих мест? И качественнее, чем в Китае?
А то что стоимость репки в 2 раза дороже, чем аналоги из Китая с более мощными процессорами и памятью в два раза большей. Ничего?
Для сравнения это производство в Китае:
Вот это по-взрослому.
RyabovA Автор
01.08.2025 12:37Да, всё верно :-) Но если Вам нужны только производства космического масштаба или только с тысячами сотрудников - то это конечно не к проекту Repka Pi.
Как не крутить, это компьютеры, как не крутить они показали себя надёжными и куча людей видела этот процесс. Парни не мастера фотошёпов, ИИ иллюстраций и выдачи делаемого за действительное. Показываю что есть, сами дорабатывают оборудование, повышая его класс точности, работают в скромных и компактных условиях, вкладывают душу, талант и трудолюбие. Наверное так и выглядят настоящие техно-предприниматели, которые что то делают за свой счёт и решая технические задачи непропорциональные уровню пафоса финансовых возможностей. Наверное это и есть профессионализм вырастающий в малом технологическом бизнесе. Ну не дали простым талантливым парням кучу денег из госбюджета и не покупали у них дорогущие как мост изделия, вот они стали делать что любят как умеют и чтобы оно было по стоимости доступно на свободном рынке в первую очередь.
Наверное когда они увеличат объёмы сбыта, то и производство расширят с мелкосерийного до хотя бы средне-серийного, тогда и линии будет выглядеть иначе и оборудование будет другое. Так что не смешивайте уровень технологичности и профессионализма с масштабом мощности производства. На большом красивом производстве с красивыми пафосноми фотками могут делать дорого и некачественно, это часто приходится встречать. Так что тут дело в этапе развития, степени зрелости и в запасе производственных мощностей. И если Репка сейчас имеет очень адекватную цену и кучу преимуществ, то что же будет, когда серийность вырастет и снизится себестоимость :-)
Так что если к самому одноплатнику, его характеристикам и качеству, нет вопросов, то лучше не критиковать, а пожелать дальнейших успехов и Удачи в развитии.
nikolz
01.08.2025 12:37Ваши пафосные коментарии напомнили мне сюжеты из прошлого. Если знаете, то в Китае была "культурная революция". Из того времени помню два действия - хунвейбины активно уничтожали воробьев, а крестьян заставляли плавить руду дома, чтобы увеличить выплавку стали и создавали рабочие места.
Но потом Китай пошел другим путем.
AlexandreFrolov
01.08.2025 12:37На самом деле это очень хорошо, что в России есть такие проекты как Репка. Если все заказывать за рубежом, пусть мощнее и дешевле, но не иметь своего, то куда можно прийти?
Да, своих чипов достаточной мощности может пока и нет, но с чего-то нужно начинать.
А если основной и главный критерий - цена, то китайские дешевле, так как у них тираж огромный. Но это полностью китайские. Завтра у них выйдет новая модель, про старую забудут, и что будет с поддержкой?
RyabovA Автор
01.08.2025 12:37Ох уж эти троли и критики... :-) всё знают, всё видели, на всё смотрят с высока, всё всегда не так да не эдак... :-) Сейчас, наверное, Сатурн или Меркурий такой :-)
TimurZhoraev
01.08.2025 12:37Интересно были ли какие-либо испытания Репки, например по ГОСТ 53734 электростатика (от пробоя при работе или монтаже), ГОСТ МЭК 61000 электромагнитная совместимость (по излучению побочки), влияние мощных импульсных помех и что-то в этом роде чтобы действительно застолбить путь к миниатюрному промкомпьютеру. Ну и как вишня на торте - EEC память, например, и устойчивый патченный Линукс, готовый к перепайке проца (образно говоря) на работающей плате и прочим PnP на ходу.
mlnw
Это чудо инженерной мысли из подвальчика дядюшки Ляо показывает всё, что угодно, кроме температуры и влажности. Т.к. использует самую отвратную схемотехнику в целом, прошивку от студента-троечника, и линейник в цепи питания в частности, который ощутимо греет плату. Итого температура и влажность хоть сколь-нибудь удобоварима лишь в первые минуты после включения, после чего убегает вверх. Влажность, как функция температуры, соответственно, ведет себя не лучше.
AlexandreFrolov
Это очень недорогой датчик, и он выбран для несложного примера. Но к Репке можно подключить и другие датчики, которые будут лучше. Тут подойдут датчики, способные общаться по протоколам Modbus RTU через RS485, Modbus TCP и SNMP. Telegraf может забирать данные от разных датчиков, достаточно лишь подготовить нужные шаблоны.