Skip to content

Zabbuino in Russian (for release 1.4.x)

Grigory Prigodin edited this page Jan 9, 2021 · 7 revisions

Внимание, данное руководство относится к Zabbuino v1.4.x.

Содержание

  • Обзор
  • Системные требования
  • Компиляция и настройка
  • Пользовательские модули
  • Использование
  • Системная индикация
  • Команды Zabbuino
    • Формат команды
    • Zabbix Agent
    • Системные метрики
    • Настройки и состояние системы
    • Язык программирования Arduino (Wiring)
    • Коммуникационные шины (1-Wire, I2C)
    • Датчики окружающей среды
    • Исполнительные устройства и устройства индикации
  • Интеграция с системой мониторинга Zabbix
  • Интеграция с RRDTool
  • Советы
    • Как узнать адрес/пароль устройства

Обзор

Zabbuino - это прошивка, превращающая плату Arduino в устройство, работающее по протоколу Zabbix (v1.x, v2.x, v.3.x, v.4.x, шифрование не поддерживается). С его помощью Zabbix-сервер через сеть Ethernet может общаться с окружающим миром, используя оборудование (датчики, индикаторы, исполнительные и самостоятельные устройства), которое возможно присоединить к Arduino.

Ключевой особенностью данной разработки является практически полное отсутствие привязки внешних компонентов к выводам Arduino, что позволяет производить логическое конфигурирование работающей системы в одной точке - WEB-интерфейсе Zabbix.

Zabbuino: напряжение питания микроконтроллера Zabbuino: статистика, снимаемая с Peacefair PZEM-004

Пример подключения периферийных устройств к Zabbuino, укомплектованного Ethernet Shield.

Zabbuino: пример присоединения датчиков

Системные требования

Сразу стоит отметить, что исходный код Zabbuino написан с учетом применения на микроконтроллерах семейства AVR и под иные, встречающиеся в платах Arduino архитектуры (ARM, ARC, x86 и т.п.) не адаптировался.

Минимальным требованием является использование AVR микроконтроллера ATMega328 и одного из поддерживаемых сетевых модулей. Основная функциональность Zabbuino так же проверялась на старших представителях семейства ATmega, таких как ATmega2560.

Рекомендуемым минимумом периферийных устройств является (см. схему выше):

  • Индикатор состояния устройства (State led), подключенный к пину D9;
  • Кнопка сброса настроек, хранимых в EEPROM (Factory RST), подключенная к пину D8.

Дополнительное оборудование, поддерживаемое Zabbuino

Сетевые модули:

  • Ethernet Shield, построенный на базе Wiznet W5100 и совместимые с ним;
  • Ethernet Shield 2, построенный на базе Wiznet W5500 и совместимые с ним (см.примечание ниже);
  • Microchip ENC28J60.

Датчики:

  • Температуры - семейства DS18x20, АЦП для термопар - MAX6675, бесконтактные - MLX90614;
  • Давления - BMP085/BMP180/BMP280;
  • Влажности - BME280, SHT21, DHT11/DHT21/DHT22/DHT33/DHT44/AM2301/AM2302/AM2320 и совместимые с ними;
  • Освещенности - BH1750, MAX44009, TSL2561;
  • Цвета - ADPS-9960;
  • Ультрафиолетового излучения - VEML6070;
  • Газов - Telaire T6307 / Winsen MH-Z19 / Winsen ZE08-CH2O / Sensirion SGP-30 и совместимые с ними;
  • Уровня пыли (PM2.5) - Plantower PMS-A003 / Wuhan Cubic PM2012 / iNovaFitness SDS011 и совместимые с ними;
  • Расстояния - HC-SR04;
  • Параметров электрической цепи - INA219;
  • Вибрации/наклона - SW-520D и аналогичные;
  • Любые датчики, опрашиваемые через цифровые и аналоговые входы Arduino при помощи команд digitalRead, analogRead;
  • Иные простые датчики, подключаемые по шине I2C.

Индикаторы и исполнительные устройства:

  • Светодиодные матрицы и цифровые индикаторы, управляемые контроллером MAX7219;
  • Табло, шкалы и иные устройства, построенные на сдвиговых регистрах (например 74HC595);
  • Одно-, двух- и четырехстрочные алфавитно-цифровые индикаторы на базе контроллера HD44780 и подключенные через I2C-расширитель PCF8574;
  • Адресуемые (пиксельные) светодиодные модули, использующие чипы WS2801 и WS2812/WS2811;
  • ШИМ контроллер PCA9685;
  • Инфракрасные cветодиодные излучатели для эмуляции соответствующих пультов управления;
  • Любые индикаторы и релейные модули, управляемые напрямую через цифровые выходы Arduino при помощи команд digitalWrite, analogWrite, portWrite или через расширитель типа PCF8574, подключенный по шине I2C.

Самостоятельные устройства:

  • Блоки бесперебойного питания APC серии Smart (через UART-конвертор);
  • Блоки бесперебойного питания, поддерживающие протокол Megatec;
  • Вольт-ампер-ваттметр Peacefair PZEM-004 (ревизия v1.0).

Иное:

  • EEPROM семейства AT24CXX;
  • Часы реального времени - DS3231, PCF8563;

Заметьте, что одновременная поддержка всех устройств может быть неосуществима вследствие недостатка Flash-памяти применяемого микроконтроллера. Для решения данной проблемы предусмотрена возможность исключения на этапе сборки программного кода для поддержки устройств, которые не планируется подключать к Zabbuino. Данный вопрос будет рассмотрен дополнительно в разделе "Компиляция и настройка".

Рекомендуемыми сетевыми модулями являются модули на базе WizNet, драйвера которых являются более компактными, что позволяет увеличить количество типов одновременно подключенных устройств. Однако, чип Wiznet W5500 имеет архитектурную особенность, которая не позволяет его рекомендовать для применения в сценариях, требующих частых одновременных запросов к агенту мониторинга: самостоятельный сброс TCP соединений, открываемых одновременно сверх лимита (8 шт), что может приводить к возникновению состояния ошибки Элементов данных Zabbix и иным неприятным эффектам.

Применение сетевых модулей на базе Microchip ENC28J60 для обеспечения стабильной работы может потребовать более сложных схемотехнических решений, тонкой настройки сетевого оборудования и сетевого драйвера. Так же, это уменьшит доступную Flash-память на ~7кб (~1/4 часть объёма, доступного в микроконтроллере ATMega328), а доступное ОЗУ на ~700 байт (~1/3 часть объёма, доступного в микроконтроллере ATMega328).

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

Так же, необдуманное применение компонентов, особенно невысокого качества (включая соединительные провода Dupont и беспаечные макетные платы), не способствует быстрому вводу Zabbuino в эксплуатацию, но зачастую вводит в заблуждение по поводу корректности работы прошивки и заставляет с головой погружаться в анализ исходного кода.

Так, например:

  • Подключенные датчики могут постоянно или периодически выдавать некорректные (или неожиданные) показания;
  • Несколько работающих по отдельности I2C модулей могут перестать работать, будучи подключенными к одной I2C шине;
  • Датчик, вынесенный на несколько метров от основной платы, может произвольно и непериодически отключаться при проведении цикла измерения;
  • Индикатор может показывать мусор вместо полезной информации.

Компиляция и настройка

Компиляцию скетча следует проводить в выпусках Arduino IDE 1.5.x (до Zabbuino v1.0 включительно), 1.6.x (для Zabbuino старше, чем v1.0) и выше, под выпуски IDE 1.0.x исходный код не адаптирован. Обратите внимание на то, что размер прошивки может отличаться при компиляции в различных выпусках IDE в большую или меньшую сторону.

Все библиотеки, подключаемые к исходному коду, входят в состав IDE. Библиотеки сетевых модулей WizNet и Microchip ENC28J60 интегрированы в исходный код Zabbuino.

Настройка большинства параметров, необходимых для функционирования Zabbuino, осуществляется на этапе компиляции. Для этого необходимо произвести действия, которые могут быть вам знакомы из ранее полученного опыта работы с Arduino IDE: отключение или подключение макро-определений (#define) путем комментирования и раскомментирования соответствующих строк, изменение в них, а так же в настроечных константах, числовых и символьных значений. Основные параметры находятся в заголовочном файле cfg_basic.h. Для дополнительной, более тонкой настройки, обратитесь к заголовочному файлу src/cfg_tune.h

Минимально необходимое конфигурирование системы заключается в указании:

  • NETWORK_ETHERNET_W5100 или NETWORK_ETHERNET_ENC28J60 - типа подключенного сетевого модуля;
  • constDefaultMacAddress - MAC-адреса, который будет присвоен сетевому модулю и должен быть уникален в вашей физической Ethernet сети;
  • constNetDefaultUseDHCP - флага использования протокола DHCP для автоматического получения сетевых настроек;
  • constDefaultIPAddress - IP-адреса;
  • constDefaultNetmask - маски сети;
  • constDefaultGateway - адреса маршрутизатора;
  • constZbxAgentDefaultHostname, constZbxAgentDefaultDomain - сетевого имени и имени домена Zabbuino;
  • Параметров инициализации пинов Arduino в массивах port_protect, port_mode, port_pullup.

В момент включения микроконтроллера, его вывода (пины) будут находится в состоянии, которое, возможно, не подойдет для решения поставленной перед Zabbuino задачи. Для того, чтобы перевести их в необходимый режим (INPUT/OUTPUT) и состояние (HIGH/LOW), возможно придется изменить настройки пинов, хранящиеся в массивах port_mode, port_pullup файла src/tune.h.

Элементы массивов задают значения регистров портов ввода-вывода, а те, в свою очередь, изменяют режим и состояние соответствующего вывода. Заметьте, что для разных моделей Arduino существует свой набор портов, выбираемый на этапе компиляции и зависящий от макро-определений, автоматически создаваемых Arduino IDE.

Так, для Arduino Duemilanove или Arduino Nano средой программирования Arduino будут созданы макро-определения ARDUINO_AVR_DUEMILANOVE или ARDUINO_AVR_NANO соответственно. Эти платформы построены на одном и том же микроконтроллере, имеющем три действующих порта ввода-вывода: PORTB, PORTC, PORTD, которые определяют состояния выводов D8-D13, A0-A7, D0-D7 соответственно. Состояние порта задается однобайтовым числом, каждый бит которого связан с определенным выводом. Изменение значения какого-либо бита влечет за собой и изменение режима пина (0 - INPUT, 1 - OUTPUT) или его состояния (0 - LOW, 1 - HIGH).

В примере, приведенном ниже, задаются режимы работы выводов D8-D13, A1-A7 и D0-D7 как INPUT, а пинов D9, A0 - как OUTPUT.

 const uint8_t port_mode[PORTS_NUM] = {
    B00000000, // not a port
    B00000000, // not a port
    // Bits 6, 7 have not correspondented pins in Arduino Mini Pro / Freeduino 2009
    B00000010, /*     PORTB        
  D13 -^    ^- D8    <- pins   */
    B00000001, /*     PORTC 
     ^-A7   ^-A0   <- pins    */
    B00000000  /*     PORTD 
     ^-D7   ^-D0   <- pins    */
 }

Состояние пинов D9-D13, A0-A7 и D2-D7 определяется как LOW, а пинов D8, D0 и D1 - как HIGH. Установка состояния HIGH в режиме порта INPUT переводит соответствующий вывод в состояние INPUT_PULLUP.

 const uint8_t port_pullup[PORTS_NUM] = {
    B00000000, // not a port
    B00000000, // not a port
    // Bits 6, 7 have not correspondented pins in Arduino Mini Pro / Freeduino 2009_
    B00000001, /*     PORTB
  D13 -^    ^- D8    <- pins   */
    B00000000, /*     PORTC
     ^-A7   ^-A0   <- pins    */
    B00000011  /*     PORTD
     ^-D7   ^-D0   <- pins    */
}

Помимо этого, в Zabbuno введено понятие защиты пина, при установке которой, операции над ним не производятся. Эта функциональность может быть полезна в том случае, когда состояние порта изменяется целиком командой portWrite, а на ряд пинов изменяемого порта возложены функции системного характера - обеспечения работы шин I2C или SPI, используемой сетевым модулем и вмешательство в работу которой приведёт к "зависанию" устройства. Установка защиты пинов осуществляется по тем же правилам, что и их режимов/состояний - через связанный с портами массив - port_protect. Например, установка защиты на пины D10-D13, так как они используются под шину SPI, а также на пины D0-D1 для обеспечения непрерывной работы аппаратного UART производится следующим образом:

const uint8_t port_protect[PORTS_NUM] = {
   B00000000, // not a port
   B00000000, // not a port
   // Pins D10, D11, D12, D13 is protected by setting 2, 3, 4, 5 bits, due its used to SPI (ethernet shield)
   // Pin D9 is used by Timer1 and can't be used for PWM (analogWrite) when system metric was gathered on Timer1 interrupt
   // Bits 6, 7 have not correspondented pins in Arduino Mini Pro / Freeduino 2009
   B11111110, /*     PORTB        
 D13 -^    ^- D8    <- pins   */
   B00000000, /*     PORTC 
    ^-A7   ^-A0   <- pins    */
   // Pins D0, D1 is protected by settings bits #0 and #1, due its used to RX/TX lines of UART and make it possible to  transmit data to Serial Monitor  
   B00000011  /*     PORTD 
    ^-D7   ^-D0   <- pins    */

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

Однако, в ряде случаев (например, если плата является клоном или ее описание добавлено в IDE самостоятельно) необходимые для автоматического формирования и подключения массивов port_mode, port_pullup и port_protect макросы могут не существовать и компиляция будет завершена с ошибкой. В этом случае необходимо самостоятельно создать макрос, позволяющий сопоставить ваш экземпляр Arduino с каким-либо стандартным и повторить компиляцию. Определить его можно в самом начале скетча zabbuino.ino: #define ARDUINO_AVR_DUEMILANOVE

Как уже было упомянуто в разделе "Системные требования", Zabbuino придерживается концепции блочной компиляции для экономии ресурсов микроконтроллера (Flash-память и ОЗУ) за счет исключения из прошивки кода поддержки неиспользуемых датчиков и исполнительных устройств.

Для подключения или отключения блоков тех или иных функций достаточно раскомментировать или закомментировать в файле cfg_basic.h следующие определения:

Макроопределение Активируемые команды Описание функционала
FEATURE_NET_DHCP_ENABLE Поддержка протокола DHCP
FEATURE_NET_DHCP_FORCE Активация протокола DHCP вне зависимости от производимых при помощи команды set.network изменений в сетевых настройках или настроек по умолчанию
FEATURE_NET_USE_MCUID Генерация "уникального" имени экземпляра Zabbuino и изменение последних октетов MAC- и IP-адресов, основывающееся на ID микроконтроллера
FEATURE_USER_FUNCTION_PROCESSING Подключение механизма поддержки пользовательских функций (см. plugin.ino)
FEATURE_ARDUINO_BASIC_ENABLE analogWrite, analogRead, etc, Подключение обёрток "базовых" функций Arduino
FEATURE_TONE_ENABLE tone, noTone Подключение обертки соответствующих функций Arduino
FEATURE_RANDOM_ENABLE randomSeed, random -"-"-"-
FEATURE_SHIFTOUT_ENABLE shiftOut Подключение расширенной реализации функций Arduino shiftout()
FEATURE_EXTERNAL_INTERRUPT_ENABLE extInt.count Обслуживание датчиков, использующих внешние прерывания MCU
FEATURE_INCREMENTAL_ENCODER_ENABLE incEnc.value Обслуживание инкрементальных энкодеров, использующих внешние прерывания MCU
FEATURE_OW_ENABLE OW.scan Общие процедуры для устройств 1-Wire, например - сканирование адресов подключенных устройств
FEATURE_DS18X20_ENABLE DS18x20.Temperature Поддержка цифровых термометров семейства DS18x20
FEATURE_I2C_ENABLE I2C.scan, I2C.write, I2C.read, I2C.bitWrite, I2C.bitRread, Общие процедуры для устройств I2C: сканирование адресов, прямое чтение регистров и запись в них
FEATURE_BMP180_ENABLE BMP.pressure, BMP.temperature Поддержка I2C датчиков BMP085/180
FEATURE_BMP280_ENABLE BMP.pressure, BMP.temperature Поддержка I2C датчиков BMP280
FEATURE_BME280_ENABLE BMP.pressure, BMP.temperature, BME.humidity Поддержка I2C датчиков BME280 (BMP280 с дополнительным датчиком влажности)
FEATURE_BH1750_ENABLE BH1750.light Поддержка I2C датчика освещенности BH1750
FEATURE_MAX44009_ENABLE MAX44009.light -"-"-"-"- MAX44009
FEATURE_TSL2561_ENABLE TSL2561.light -"-"-"-"- TSL2561
FEATURE_VEML6070_ENABLE VEML6070.uva,VEML6070.uvi Поддержка I2C датчика ультрафиолетового излучения VEML6070
FEATURE_ADPS9960_ENABLE _ADPS9960.ambient, _ADPS9960.red, _ADPS9960.green, _ADPS9960.blue Поддержка I2C датчика общей освещенности и цвета (RGB) ADPS9960
FEATURE_PCF8574_LCD_ENABLE PCF8574.LCDprint Поддержка алфавитно-цифровых дисплеев, подключенных через расширитель PCF8574
FEATURE_SHT2X_ENABLE SHT2X.temperature, SHT2X.humidity Поддержка I2C датчиков семейства SHT2X
FEATURE_INA219_ENABLE INA219.busVoltage, INA219.current, INA219.power Поддержка I2C монитора питания INA219
FEATURE_PCA9685_ENABLE PCA9685.write Поддержка I2C ШИМ-контроллера PCA9685
FEATURE_AT24CXX_ENABLE AT24CXX.write, AT24CXX.read Поддержка I2C чипа EEPROM семейства AT24CXX
FEATURE_SGP30_ENABLE SGP30.CO2e, SGP30.TVOC Поддержка датчика газов Sensirion SGP-30
FEATURE_T67XX_ENABLE T67xx.I2C.CO2 Поддержка датчиков CO2 Telaire 67xx
FEATURE_MLX90614_ENABLE mlx90614.temperature Поддержка инфракрасного термометра MLX90614
FEATURE_MAX7219_ENABLE MAX7219.write Поддержка контроллера устройств индикации MAX7219
FEATURE_PZEM004_ENABLE PZEM004.voltage, PZEM004.current, PZEM004.power, PZEM004.energy, PZEM004.setaddr Поддержка устройства Peacefair PZEM-004 energy meter
FEATURE_MHZXX_PWM_ENABLE MHZxx.PWM.CO2 Поддержка датчиков CO2, совместимых с Winsen MH-Z19 и использующих PWM
FEATURE_MHZXX_UART_ENABLE MHZxx.UART.CO2 Поддержка датчиков CO2, совместимых с Winsen MH-Z19 и подключенных по шине UART
FEATURE_DFPLAYER_ENABLE DFPlayer.run Поддержка медиаплеера DFPlayer Mini
FEATURE_UPS_APCSMART_ENABLE UPS.APCSmart Поддержка блоков бесперебойного питания APC Smart
FEATURE_UPS_MEGATEC_ENABLE UPS.Megatec Поддержка блоков бесперебойного питания, работающих по протоколу Megatec
FEATURE_PLANTOWER_PMSXX_ENABLE PMSxx.all, PMSxx.epm, PMSxx.spm Поддержка датчиков PM2.5 Plantower PMS-XXXX
FEATURE_NOVA_FITNESS_SDS_ENABLE SDS.all, SDS.epm Поддержка датчика PM2.5 iNovaFitness SDS011
FEATURE_WUHAN_CUBIC_PM_UART_ENABLE WCPM.UART.All Поддержка датчика PM2.5 Wuhan Cubic PM2012 подключенного по шине UART
FEATURE_WUHAN_CUBIC_PM_I2C_ENABLE WCPM.I2C.All Поддержка датчика PM2.5 Wuhan Cubic PM2012 подключенного по шине I2C
FEATURE_ZE00_CH2O_ENABLE ZE08.CH2O Поддержка датчика ZE08-CH2O
FEATURE_DHT_ENABLE DHT.humidity, DHT.temperature Поддержка цифровых датчиков DHT11/21/22/33/44 и AM2301/2302/AM2320
FEATURE_ULTRASONIC_ENABLE ultrasonic.distance Поддержка датчика расстояния HC-SR04
FEATURE_IR_ENABLE IR.send, IR.sendRaw Симуляции пультов управления по инфракрасному каналу
FEATURE_WS2812_ENABLE WS2812.sendRaw Поддержка адресуемых светодиодных модулей WS2812
FEATURE_MAX6675_ENABLE MAX6675.Temperature Поддержка адаптера термопары K-типа MAX6675
FEATURE_SERVO_ENABLE Servo.turn Поддержка цифровых серводвигателей
FEATURE_RELAY_ENABLE relay, pulse Поддержка операций с релейными блоками
FEATURE_REMOTE_COMMANDS_ENABLE system.run Подключение команды, используемой для выполнения Zabbix Action
FEATURE_WATCHDOG_ENABLE Поддержка таймера аварийной перезагрузки. Будьте осторожны - не все загрузчики Arduino корректно работают с данным таймером. В ряде случаев вероятна потеря возможности легкой замены прошивки микроконтроллера (can't upload sketch - led13 blinking rapidly)
FEATURE_AREF_ENABLE Использования пина AREF и связанных с ним действий. Будьте внимательны - необдуманные действия с пином AREF могут привести к повреждению микроконтроллера
FEATURE_EEPROM_ENABLE set.hostname, set.network, set.password, set.sysprotect, set.localtime Хранение настроек Zabbuino в EEPROM
FEATURE_PASSWORD_PROTECTION_FORCE Контроль доступа к изменениям настроек системы вне зависимости от попыток его отключения при помощи команды set.sysprotection
FEATURE_SYSINFO_ENABLE sys.vcc*, sys.ram*, sys.cmd*, system.hw.* net.phy.* и др. Предоставление системной информации
FEATURE_SYSTEM_RTC_DS3231_ENABLE system.localtime, set.localtime Поддержка чипа DS3231 часов точного времени
FEATURE_SYSTEM_RTC_PCF8563_ENABLE system.localtime, set.localtime Поддержка чипа PCF8563 часов точного времени
FEATURE_DEBUG_MESSAGING_LEVEL Вывод отладочных сообщений заданной подробности (0..2 - none..max) в UART-порт Arduino (Serial Monitor)
FEATURE_SERIAL_LISTEN_TOO Прием команд Zabbuino через UART-порт Arduino (IDE Serial Monitor). Это позволяет проверить работу присоединенного датчика без обязательного прохождения запроса через сетевой модуль
USE_TEXT_ERROR_MESSAGES Отсылка пользователю текстовых сообщений в случае возникновении ошибки. В противном случае будут отосланы цифровые коды, которые могут быть заданы самостоятельно в файле src/tune.h
GATHER_METRIC_USING_TIMER_INTERRUPT Вызов процедуры актуализации системных метрик по прерывание таймера. По умолчанию сбор данных происходит один раз за программный цикл. В первом случае метрики собираются гораздо реже и точнее, во втором - обмен данными с датчиком/исполнительным устройством не приостанавливается на время сбора метрик, что важно для устройств, протоколы которых чувствительны к временным интервалам

Внимание! При использовании прерывания таймера для вызова процедуры сбора значений системных метрик пользоваться командой analogWrite применительно к PWM-пину, обслуживаемому таймером #1 (D9 для Arduino Duemilanove / Nano / Mini Pro и т.п.), настоятельно не рекомендуется. В случае необходимости получения функции PWM на указанном пине, следует использовать метод сбора значений метрик в программном цикле.

Пользовательские модули

Для построения полностью или частично автономных систем, начиная с выпуска Zabbuino v1.2.0, введена возможность подключения пользовательского кода. Он может оперировать практически всеми внутренними механизмами системы - получать значения сенсоров, управлять исполнительными устройствами и устройствами индикации. В связи с тем, что подобное направление развития не входило в первоначальный замысел, на данный момент концептуальные нестыковки урегулированы не лучшим образом, внутреннее API не приведено к какой-либо строгой системе. Поэтому, на данном этапе существования Zabbuino от пользователя, желающего создать автономную систему, требуются определенные знания и навыки программирования и анализа программного кода. Примеры пользовательских модулей будут размещаться в каталоге examples по мере их создания, либо предоставления.

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

  • initStageUserFunction();
  • netPrepareStageUserFunction();
  • preLoopStageUserFunction();
  • loopStageUserFunction();
  • alarmStageUserFunction();
  • executeCommandUserFunction();

Каждой из этих подпрограмм передается указатель на системный буфер, размером в constBufferSize байт (см. src/cfg_tune.h). Этот буфер может быть использован для временного хранения численных массивов, формирования строк, выводимых на подключенные дисплеи и пр. Все данные, помещенные в буфер, по окончании выполнения подпрограммы могут быть заменены иными или утеряны. _alarmStageUserFunction(), executeCommandUserFunction() получают дополнительные параметры.

Хранение пользовательских данных, таких как места (пины) подключения датчиков, их режимы работы и пр. может быть осуществлено во внешней EEPROM семейства AT24CXX. Содержимое EEPROM может быть в дальнейшем прочитано/модифицировано без замены прошивки готового устройства командами AT24CXX.write, AT24CXX.read.

initStageUserFunction()

Предназначена для осуществления однократных действий, производимых на этапе запуска Zabbuino (до анализа состояния кнопки "Заводской сброс"). В момент выполнения initStageUserFunction() недоступны некоторые системные параметры. В частности - настройки сети, считываемые из EEPROM. В этой подпрограмме рекомендуется осуществлять инициализацию сенсоров, исполнительных устройств, устройств индикации.

netPrepareStageUserFunction()

Вызывается после инициализации сетевого модуля, но до начала работы с ним (установки адресов, произведения DHCP-запроса).

netPrepareStageUserFunction()

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

loopStageUserFunction()

Предназначена для осуществления периодических действий в периоды отсутствия сетевых запросов. Обратите внимание на то, что обслуживание сетевых запросов является более приоритетной задачей и строгая периодичность вызова подпрограммы loopStageUserFunction() не гарантирована. Так же необходимо учитывать, что на время выполнения данной подпрограммы приостанавливается выполнение основной задачи. Поэтому применение программных решений, ведущих к продолжительному или избыточному исполнению функций (продолжительный delay(), длинные циклы, излишне частые опросы датчиков и пр.) категорически не рекомендовано.

alarmStageUserFunction()

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

executeCommandUserFunction()

Получает управление при поступлении команды user.run[]. Применяется для нереализованных в системе функций по работе с перифирией/внутренними данными.

Системная индикация

Текущее состояние Zabbuino возможно определить по индикатору состояния устройства, подключаемому по умолчанию к пину D9:

  • Включен на время выполнения команды;
  • Ритмично мигает с частотой 2Гц при отсутствии входящих команд на протяжении 60 сек. Это может свидетельствовать о потере связи или "зависании" сетевого модуля. Предельное время ожидания самокоррекции ошибки может быть задано в файле src/cfg_tune.h, константа constNetIdleTimeout;
  • Мигает в режиме ~150ms вкл, ~850ms выкл при обнаружении проблем с получением/обновлением адреса по DHCP;
  • Ритмично мигает с частотой 20Гц после записи в EEPROM настроек по умолчанию.

Использование

Перед использованием, к системе Zabbuino следует присоединить датчики окружающей среды, исполнительные устройства и устройства индикации, поддержка которых была включена в прошивку микроконтроллера. Схемотехнические решения по подключению периферийных устройств не являются оригинальными и полностью совпадают с теми, которые обычно применяются в Arduino. Однако, при выборе выводов подключения, стоит убедиться, что соответствующие им входы и выходы микроконтроллера будут правильно проинициализированы при подаче питания (см. раздел "Компиляция и настройка"). В противном случае результат работы устройства может разойтись с вашими ожиданиями.

При первом запуске Zabbuino системные параметры, такие как пароль или настройки сети, будут записаны в энергонезависимую память (но только в том случае если поддержка EEPROM не была отключена на этапе компиляции) и при последующих запусках будут считываться из нее. Это позволит в дальнейшем изменять данные настройки удаленно с помощью команды set.network, set.password и т.п. Если же поддержка EEPROM не была включена в прошивку, все необходимые для функционирования данные будут каждый раз считываться из неизменяемой Flash-памяти, а команды удаленного конфигурирования будут недоступны.

В процессе эксплуатации может возникнуть необходимость сброса настроек хранимых в EEPROM (сетевой адрес, пароль и пр.) к значениям по умолчанию. Для этого в Zabbuino предусмотрена возможность подключения кнопки "Заводской сброс". Достаточно нажать ее перед включением системы и удерживать в течении 5 сек (см. константу constHoldTimeToFactoryReset) - до того момента, как индикатор состояния системы начнет быстро мигать. Это будет означать, что в EEPROM скопированы настройки неизменяемой Flash-памяти. После этого необходимо отпустить кнопку для продолжения работы системы.

Если подключение кнопки затруднено или нецелесообразно - достаточно замкнуть пин D8 (см. константу constFactoryResetButtonPin) на вывод GND. Вследствие использования внутреннего подтягивающего резистора дополнительные электронные компоненты для проведения этой операции не нужны. Однако, на всякий случай (например - удаленное изменение режима работы пина, определенного в constFactoryResetButtonPin на OUTPUT и возможность последующего случайного нажатия кнопки "Заводской сброс"), рекомендуется включить последовательно с кнопкой сопротивление (для ATMega328 - 220 Ом и более), которое ограничит ток, текущий через вывод микроконтроллера, до безопасных значений.

Эксплуатация настроенной системы Zabbuino не представляет труда, но имеет некоторые особенности. Первая и самая главная - в микроконтроллере отсутствует многозадачность. В связи с этим не стоит навешивать на систему все датчики, которыми вы обладаете, задавать самый малый период опроса и ожидать от нее быстродействия, схожего с трехъядерным сервером.

Для планирования количества подключаемых датчиков необходимо принимать во внимание следующие факторы:

  • время обработки запроса варьируется в зависимости от запрашиваемой точности результата (например, цифровой термометр DS18B20 при разрешении в 9 бит затрачивает на замер (конверсию) минимум 93.75 мс, а при разрешении в 12 бит - уже минимум 750 мс);
  • во время работы с датчиком иные сетевые запросы не обрабатываются, но ожидают своей очереди в течении определенного времени. Таймаут ожидания может быть переопределен, как в операционной системе, с которой выполняется запрос, так и в настройках сервера Zabbix, поэтому прогнозируем крайне недостоверно;

Таким образом, правила работы с Zabbuino формулируются следующим образом:

  • запросы должны быть разнесены во времени насколько это возможно;
  • метрики не должны запрашиваться с избыточной частотой (например, уровень атмосферного давления, влажности в обычных условиях не имеет смысла получать каждые 10 секунд);
  • таймауты ожидания обработки сетевого соединения в настройках Zabbix-сервера и, возможно, операционной системы, должны быть увеличены при возникновении отвергнутых Zabbuino соединений (на графиках Zabbix появляются пропуски).

Так, как Zabbuino поддерживает протокол Zabbix, то для взаимодействия подходят соответствующие инструменты этой системы мониторинга, в частности утилита zabbix_get. Описание ее работы можно найти в страницах помощи Zabbix. Ключ Zabbix, указываемый в параметре командной строки -k является командой Zabbuino. Перечень поддерживаемых команд и примеры использования приведены в разделе "Команды Zabbuino".

Обратите внимание на то, что в командах не применяются мнемонические обозначения. Такие значения, как, например HIGH и LOW записываются как 1 и 0 соответственно. Номера пинов также задаются в цифровом виде: D9 - как 9, A0 как 14 и т.д.

Кроме утилиты zabbix_get возможно использование утилиты netcat или иного самостоятельно разработанного программного обеспечения, способного осуществлять обмен по протоколу TCP/IP. В силу такой особенности Zabbuino можно применять в системах мониторинга, отличных от Zabbix - Cacti, Nagios, RRDTool.

Осуществление запроса при помощи утилиты netcat ничуть не сложнее, чем с использованием zabbix_get:

  zabbix_get -s 192.168.0.1 -k "agent.hostname"                                      
  zabbuino.local.net
  echo "agent.hostname" | nc 192.168.0.1 10050
  zabbuino.local.net

Команды Zabbuino

Формат команды

В силу того, что Zabbuino создавался по образу Zabbix Agent, - команда является ключом в терминах Zabbix и их формат практически эквивалентен. За подробностями вы можете обратиться к руководству Zabbix: Ключ элемента данных. Отличия заключаются в том, что параметры команды не могут быть гибкими, а так же содержать Unicode-символы и массивы.

Zabbix Agent

agent.ping

Параметры: не требуются.

Возвращаемое значение: '1'

 zabbix_get -s 192.168.0.1 -k "agent.ping"
 1
agent.hostname

Параметры: не требуются.

Возвращаемое значение: имя узла.

Примечание: имя узла может быть изменено как в исходном коде, так и командой set.hostname.

 zabbix_get -s 192.168.0.1 -k "agent.hostname"
 zabbuino.local.net
agent.version

Параметры: не требуются.

Возвращаемое значение: версия агента.

 zabbix_get -s 192.168.0.1 -k "agent.version"
 Zabbuino 1.3.0

Системные метрики

system.uptime

Параметры: не требуются.

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

Единица измерения: секунда.

Примечание: при отсутствии подключенного к Zabbuino чипа реального времени, время работы вычисляется исходя из значения, возвращаемого функцией millis(). Это значение может быть искажено в силу ряда причин системного характера и, при продолжительной работе, отличаться от ожидаемого на часы, дни и недели. Данная метрика в таком виде поддерживается для определения факта и момента перезагрузки устройства.

 zabbix_get -s 192.168.0.1 -k "system.uptime"
 4060
sys.cmd.count

Параметры: не требуются.

Возвращаемое значение: количество команд, обработанных (не возвративших ZBX_NOTSUPPORTED) с момента включения устройства.

 zabbix_get -s 192.168.0.1 -k "sys.cmd.count"
 551
sys.cmd.timemax[resetCounter]

Параметры:

  • resetCounter - флаг сброса счетчика.

Действие: при наличии параметра resetCounter, отличного от пустой строки, производится сброс счётчика.

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

Примечание: Временные затраты на обработку сетевых соединения и разбор запроса не учитываются.

 zabbix_get -s 192.168.0.1 -k "delay[1032]"
 1
 zabbix_get -s 192.168.0.1 -k "sys.cmd.timemax"
 1034
 zabbix_get -s 192.168.0.1 -k "sys.cmd.timemax[a]"
 0
sys.ram.free

Параметры: не требуются.

Возвращаемое значение: объем свободной оперативной памяти контроллера (размер области памяти, расположенной между концом кучи/heap и началом стека/stack), полученный при периодическом сборе системных метрик.

Единица измерения: байт.

 zabbix_get -s 192.168.0.1 -k "sys.ram.free"
 1067
sys.ram.freeMin

Параметры: не требуются.

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

Единица измерения: байт.

 zabbix_get -s 192.168.0.1 -k "sys.ram.freeMin"
 1050
sys.vcc

Параметры: не требуются.

Возвращаемое значение: текущее значение напряжения на входе VCC микроконтроллера.

Единица измерения: mV.

Примечание: при подключении источника питания к пину RAW (VIn), измеряемое значение будет отличаться от подаваемого на величину падения напряжения стабилизатора питания.

 zabbix_get -s 192.168.0.1 -k "sys.vcc"
 4630
sys.vccMin

Параметры: не требуются.

Возвращаемое значение: зафиксированное в процессе периодического сбора системных метрик минимальное значение напряжения на входе VCC микроконтроллера.

Единица измерения: mV.

Примечание: при подключении источника питания к пину RAW (VIn), измеряемое значение будет отличаться от подаваемого на величину падения напряжения стабилизатора питания.

 zabbix_get -s 192.168.0.1 -k "sys.vccMin"
 4611
sys.vccMax

Параметры: не требуются.

Возвращаемое значение: зафиксированное в процессе периодического сбора системных метрик максимально значение напряжения на входе VCC микроконтроллера.

Единица измерения: mV.

Примечание: при подключении источника питания к пину RAW, измеряемое значение будет отличаться от подаваемого на величину падения напряжения стабилизатора питания.

 zabbix_get -s 192.168.0.1 -k "sys.vccMax"
 4669
system.hw.cpu[metric]

Параметры:

  • metric - требуемая метрика: id, model, name(по умолчанию).

Возвращаемое значение: уникальный идентификатор экземпляра микроконтроллера (если доступен), модель (сигнатура) или мнемоническое имя.

Примечание: мнемоническое имя определяется в заголовочном файле avr_cpunames.h

 zabbix_get -s 192.168.0.1 -k "system.hw.cpu"
 ATmega328P
 zabbix_get -s 192.168.0.1 -k "system.hw.cpu[id]"
 573439323733FF09130A
 zabbix_get -s 192.168.0.1 -k "system.hw.cpu[model]"
 1E950F
system.hw.chassis

Параметры: не требуются.

Возвращаемое значение: мнемоническое имя платы Arduino, определенное в src/platforms.h.

 zabbix_get -s 192.168.0.1 -k "system.hw.chassis"
 Duemilanove    
system.localtime

Параметры: не требуются.

Возвращаемое значение: UTC время в формате Unix Epoch (timestamp)

Примечание: хотя команда, сообразно ее названию, должна возвращать локальное время с учетом временной зоны, однако в соответствии с действием аналогичной команды Zabbix Agent, пользователю возвращается UTC.

Примечание: команда будет выполнена корректно только при активации макроопределений FEATURE_SYSTEM_RTC_DS3231_ENABLE или FEATURE_SYSTEM_RTC_PCF8563_ENABLE, а так же подключении соответствующего модуля к пинам, заданным в constSystemRtcSDAPin, constSystemRtcSCLPin (см. SYSTEM HARDWARE SECTION в src/cfg_tune.h)

 zabbix_get -s 192.168.0.1 -k "system.localtime"
 1492000439    
net.phy.name

Параметры: не требуются.

Возвращаемое значение: мнемоническое имя сетевого модуля.

Примечание: имя определяется в зависимости от заданного макро-определением типа сетевого модуля и может быть изменено самостоятельно в заголовочном файле _src/net_platforms.h

 zabbix_get -s 192.168.0.1 -k "net.phy.name"
 W5100

Настройки и состояние системы

set.hostname[password, hostname]

Параметры:

  • password - пароль, используемый для изменения свойств системы;
  • hostname - новое имя узла.

Действие: при условии совпадения параметра password с системным паролем и заполнения параметра hostname, устанавливается и сохраняется в EEPROM новое имя узла.

Возвращаемое значение: при удачном выполнении - '1', в противном случае - '0'.

Примечание: проверка пароля происходит только при установленном в значение '1' ('true') конфигурационном параметре netConfig.useProtection (см команду set.sysprotect, константу constSysDefaultProtection в cfg_basic.h).

 zabbix_get -s 192.168.0.1 -k "agent.hostname"
 zabbuino.local.net
 zabbix_get -s 192.168.0.1 -k "set.hostname[1234,my.little.agent]"
 1
 zabbix_get -s 192.168.0.1 -k "agent.hostname"
 my.little.agent
set.password[oldPassword, newPassword]

Параметры:

  • oldPassword - пароль, используемый для изменения свойств системы;
  • newPassword - вновь устанавливаемый пароль.

Действие: при условии совпадения параметра oldPassword с системным паролем и заполнения параметра newPassword, устанавливается и сохраняется в EEPROM новый пароль.

Возвращаемое значение: при удачном выполнении - '1', в противном случае - '0'.

Примечание: проверка пароля происходит только при установленном в значение '1' ('true') конфигурационном параметре netConfig.useProtection (см команду set.sysprotect, константу constSysDefaultProtection в cfg_basic.h).

 zabbix_get -s 192.168.0.1 -k "set.hostname[1234,my.little.agent]"
 1
 zabbix_get -s 192.168.0.1 -k "set.password[1234,4321]"
 1
 zabbix_get -s 192.168.0.1 -k "set.hostname[1234,zabbuino.local.net]"
 0
set.sysprotect[password, protection]

Параметры:

  • password - пароль, используемый для изменения свойств системы;
  • protection - флаг установки защиты паролем. '1' - защита включена, любое иное - защита отменена.

Действие: при условии совпадения параметра password с системным паролем и заполнения параметра protection, изменяется и сохраняется в EEPROM значение конфигурационного параметра netConfig.useProtection.

Возвращаемое значение: при удачном выполнении - '1', в противном случае - '0'.

Примечание: проверка пароля происходит только при установленном в значение '1' ('true') конфигурационном параметре netConfig.useProtection (см команду set.sysprotect, константу constSysDefaultProtection в cfg_basic.h)

 zabbix_get -s 192.168.0.1 -k "set.hostname[1234,my.little.agent]"
 1
 zabbix_get -s 192.168.0.1 -k "set.password[1234,4321]"
 1
 zabbix_get -s 192.168.0.1 -k "set.hostname[1234,zabbuino.local.net]"
 0
 zabbix_get -s 192.168.0.1 -k "set.sysprotect[4321,0]"
 1
 zabbix_get -s 192.168.0.1 -k "set.hostname[1234,zabbuino.local.net]"
 1
 zabbix_get -s 192.168.0.1 -k "agent.hostname"
 zabbuino.local.net
set.network[password, useDHCP, macAddress, ipAddress, ipNetmask, ipGateway]

Параметры:

  • password - пароль, используемый для изменения свойств системы;
  • useDHCP - флаг, задающий использование DHCP при запуске системы, 1 - разрешено, 0 - запрещено. Не учитывается при использовании прошивки, собранной без поддержки DHCP, игнорируется при компиляции с опцией FEATURE_NET_DHCP_FORCE;
  • macAddress - MAC-адрес, задается в шестнадцатеричной форме: 0xAABBCCDDEEFF;
  • ipAddress - IP-адрес, задается в шестнадцатеричной форме: http://www.miniwebtool.com/ip-address-to-hex-converter/ ;
  • ipNetmask - сетевая маска, задается в шестнадцатеричной форме: -"-"-;
  • ipGateway - адрес шлюза по умолчанию, задается в шестнадцатеричной форме: -"-"-.

Действие: при условии совпадения параметра password с системным паролем и корректности данных, изменяются сетевые настройки, производится их запись в EEPROM.

Возвращаемое значение: при удачном выполнении - '1', в противном случае - '0'.

Примечание: проверка пароля происходит только при установленном в значение '1' ('true') конфигурационном параметре netConfig.useProtection (см команду set.sysprotect, константу constSysDefaultProtection в cfg_basic.h).

Примечание: применение новых настроек происходит после нового включения или перезагрузки системы, см. команду reboot.

 zabbix_get -s 192.168.0.1 -k "set.network[1234,0,0xDEADBEEFFEED,0xC0A80001,0xFFFFFF00,0xC0A800FE]"
 1
 zabbix_get -s 192.168.0.1 -k "reboot[1234]"
 1
set.localtime[password, unixTimestamp, tzOffset]

Параметры:

  • password - пароль, используемый для установки времени;
  • unixTimestamp - устанавливаемое время в формате Unix Epoch (timestamp);
  • tzOffset - смещение в секундах локального времени относительно UTC (часовой пояс).

Действие: при условии совпадения параметра password с системным паролем и корректности данных, производится корректировка часов реального времени, производится запись в EEPROM значения tzOffset.

Возвращаемое значение: при удачном выполнении - '1', в противном случае - '0'.

Примечание: проверка пароля происходит только при установленном в значение '1' ('true') конфигурационном параметре netConfig.useProtection (см команду set.sysprotect, константу constSysDefaultProtection в cfg_basic.h).

Примечание: команда будет выполнена корректно только при активации макроопределений FEATURE_SYSTEM_RTC_DS3231_ENABLE или FEATURE_SYSTEM_RTC_PCF8563_ENABLE, а так же подключении соответствующего модуля к пинам, заданным в constSystemRtcSDAPin, constSystemRtcSCLPin (см. SYSTEM HARDWARE SECTION в src/cfg_tune.h)

 zabbix_get -s 192.168.0.1 -k "set.localtime[1234,1492000521,-3600]"
 1
 ** Установлено время 04/12/2017 @ 12:35pm (UTC) с локальным часовым поясом UTC-1.
reboot[password]

Параметры:

  • password - пароль, используемый для изменения свойств системы.

Действие: при условии совпадения параметра password с системным паролем микроконтроллер начинает выполнять программу заново с адреса 0x00 (мягкая перезагрузка).

Возвращаемое значение: при удачном выполнении - '1', в противном случае - '0'.

Примечание: проверка пароля происходит только при установленном в значение '1' ('true') конфигурационном параметре netConfig.useProtection (см команду set.sysprotect, константу constSysDefaultProtection в cfg_basic.h).

 zabbix_get -s 192.168.0.1 -k "reboot[1234]"
 1

Язык программирования Arduino (Wiring)

analogWrite[pin, value]

Параметры:

  • pin - цифровое обозначение пина (выхода);
  • value - значение скважности, которое требуется задать для данного выхода (0..255).

Действие: изменяется скважность PWM для заданного выхода.

Возвращаемое значение: при удачном выполнении - '1', в противном случае - '0'.

Примечание: команда является оберткой функции analogWrite(). Если выход не является PWM-совместимым, на нем выставляется значение HIGH. Если пин защищен (массив port_protect), изменения режима не происходит.

Внимание! Функция analogWrite() самостоятельно устанавливает выход в режим работы OUTPUT.

 zabbix_get -s 192.168.0.1 -k "analogWrite[6,127]"
 1
 **светодиод, подключенный к PWM-выводу D6, включен на половину яркости**
analogRead[pin, analogReferenceSource, mapToLow, mapToHigh]

Параметры:

  • pin - цифровое обозначение пина (входа);
  • analogReferenceSource (опционально) - источник опорного напряжения (0..N). Значения можно найти в заголовочном файле Arduino.h;
  • mapToLow, mapToHigh (опционально) - нижняя и верхняя граница диапазона масштабирования.

Возвращаемое значение: величина (0..1023), полученная от АЦП, подключенного к заданному входу.

Примечание: если параметр analogReferenceSource определен, то перед чтением устанавливается источник опорного напряжения. При указании границ диапазона масштабирования полученное от АЦП значение будет пересчитано при помощи функции Arduino map().

Примечание: команда является расширением функции analogRead(). Данная команда имеет смысл только для "аналоговых" входов.

Примечание: мнемонические имена входов не поддерживаются, следует использовать сквозную нумерацию: A0 - 14, A0 - 15 и т.д.

 zabbix_get -s 192.168.0.1 -k "analogRead[14,,0,8]"
 6 
analogReference[source]

Параметры:

  • source - источник опорного напряжения (0..N). Значения можно найти в заголовочном файле Arduino.h.

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

Возвращаемое значение: при удачном выполнении - '1', в противном случае - '0'.

Примечание: команда является оберткой функции analogReference().

 zabbix_get -s 192.168.0.1 -k "analogReference[0]"
 1
 **в качестве источника опорного напряжения задан внешний источник, подключенный к выводу AREF**

 zabbix_get -s 192.168.0.1 -k "analogReference[2]"
 1
 **для системы на базе микроконтроллера ATmega2560 в качестве источника опорного напряжения задан внутренний источник напряжения 1.1V**
delay[time]

Параметры:

  • time - время паузы.

Возвращаемое значение: при удачном выполнении - '1', в противном случае - '0'.

Действие: выполняется задержка длительностью в time миллисекунд.

Примечание: команда является оберткой функции delay().

 time zabbix_get -s 192.168.0.1 -k "delay[1001]"
 1005
digitalWrite[pin, value, testPin, testValue]

Параметры:

  • pin - цифровое обозначение пина (выхода);
  • value - значение, которое требуется выставить на заданном выходе;

Возвращаемое значение: при удачном выполнении - '1', в противном случае - '0'.

Действие: изменяется состояние выхода.

Примечание: команда является оберткой функции digitalWrite().

Примечание: перед выполнением команды выход переводится в режим OUTPUT. Возврата к предыдущему режиму не происходит. Если пин защищен, изменения режима не происходит.

 zabbix_get -s 192.168.0.1 -k "digitalWrite[7,1]"
 1
 **на выводе D7 установлено значение лог. 1**
digitalRead[pin, mode]

Параметры:

  • pin - цифровое обозначение пина (входа).
  • mode - режим работы входа: 0 или отсутствует - INPUT, 1 - INPUT_PULLUP.

Возвращаемое значение: значение, "считанное" со входа - 1 (лог.1) или 0 (лог 0).

Примечание: команда является оберткой функции digitalRead().

Примечание: перед выполнением команды выход переводится в режим INPUT. Возврата к предыдущему режиму не происходит. Если пин защищен, команда не выполняется.

 zabbix_get -s 192.168.0.1 -k "digitalRead[4]"
 0
tone[pin, frequency, duration]

Параметры:

  • pin - цифровое обозначение пина (выхода), к которому подключено устройство сигнализации;
  • frequency - частота сигнала;
  • duration - продолжительность сигнала (параметр опционален).

Действие: на указанном выходе начинается генерация сигнала "прямоугольная волна" заданной частоты продолжительностью duration миллисекунд (в том случае, если данный параметр задан).

Возвращаемое значение: при удачном выполнении - '1', в противном случае - '0'.

Примечание: команда является оберткой функции tone().

Примечание: перед выполнением команды выход переводится в режим OUTPUT. Возврата к предыдущему режиму не происходит. Если пин защищен, команда не выполняется.

 zabbix_get -s 192.168.0.1 -k "tone[6,11000]"
 1
 **устройство, подключенное к пину D6 получает сигнал "прямоугольная волна" частотой 11кГц**
noTone[pin]

Параметры:

  • pin - цифровое обозначение пина(выхода), к которому подключено устройство сигнализации.

Действие: на указанном выходе прекращается генерация сигнала "прямоугольная волна".

Возвращаемое значение: при удачном выполнении - '1', в противном случае - '0'.

Примечание: команда является оберткой функции noTone(). Если пин защищен, изменения режима не происходит.

 zabbix_get -s 192.168.0.1 -k "noTone[6]"
 1
 **устройство, подключенное к пину D9 прекращает получать сигнал "прямоугольная волна"**
randomSeed[value]

Параметры:

  • value - начальное число ряда псевдослучайных значений.

Действие: инициализируется генератор псевдослучайных чисел.

Возвращаемое значение: при удачном выполнении - '1', в противном случае - '0'.

Примечание: команда является оберткой функции randomSeed().

 zabbix_get -s 192.168.0.1 -k "randomSeed[91]"
 1
 **генератор ПСЧ инициализирован числом 91**
random[min, max]

Параметры:

  • min - нижняя граница генератора псевдослучайных значений;
  • max - верхняя граница генератора псевдослучайных значений.

Возвращаемое значение: очередной член ряда псевдослучайных чисел.

Примечание: команда является оберткой функции random().

 zabbix_get -s 192.168.0.1 -k "random[6,77]"
 38
shiftOut[dataPin, clockPin, latchPin, bitOrder, compressionType, data]

Параметры:

  • dataPin - цифровое обозначение пина (выхода) сигналов данных;
  • clockPin - цифровое обозначение пина (выхода) сигналов синхронизации;
  • latchPin - цифровые обозначения пина (выхода) сигнала защелки;
  • bitOrder - последовательность вывода бит;
  • compressionType - метод сжатия (0 - без сжатия; 1 - сжатие типа 'repeat', каждый символ удваивается, например FD3 => FFDD33);
  • data значение для вывода.

Действие: Распакованное в соответствии compressionType, значение параметра data бит за битом выводится на выход dataPin в порядке, определяемом параметром bitOrder. После вывода каждого бита происходит синхронизация при помощи выхода clockPin. Если задан выход latchPin, то он приводится в состояние LOW перед началом вывода и в состояние HIGH по его окончанию.

Возвращаемое значение: при удачном выполнении - '1', в противном случае - '0'.

Примечание: команда является расширением функции shiftOut(). Параметр data может быть задан как в десятичной и шестнадцатеричной форме (с префиксом 0x). При указании в команде shiftOut[] числа в десятичной форме практически невозможно использовать каскадируемые сдвиговые регистры, так как функция Arduino shiftOut() оперирует размерностью выводимого значения, равным byte. В этом случае управлять более, чем восемью исполнительными устройствами или устройствами индикации, невозможно. Для обхода данного ограничения в команде Zabbuino может применяться шестнадцатеричная форма записи числа. Его размер примерно ограничен размером задаваемого в скетче буфера (см constArgsPartSize в src/cfg_tune.h).

Примечание: перед выполнением команды выходы переводится в режим OUTPUT. Возврата к предыдущему режиму не происходит. Если пины защищены, вызова соответствующих функций не происходит.

 zabbix_get -s 192.168.0.1 -k "shiftOut[3,4,5,0,0,85]"
 1
 **в сдвиговый регистр с защелкой, подключенный выводами _dataPin_, _clockPin_ и _latchPin_ к D3, D4, D5 соответственно, выведено значение 85, При выводе использован порядок LSBFIRST, сжатие не использовалось**

 zabbix_get -s 192.168.0.1 -k "shiftOut[3,4,,1,0,0x6246]"
 1
 **в сдвиговый регистр без защелки, подключенный выводами _dataPin_ и _clockPin_ к D3 и D4 соответственно, выведено значение 0x6246. При выводе использован порядок MSBFIRST, сжатие не использовалось**

Коммуникационные шины (1-Wire, I2C)

OW.scan[pin]

Параметры:

  • pin - цифровое обозначение пина, к которому подключены устройства 1-Wire.

Возвращаемое значение: список устройств 1-Wire, найденных на шине, подключенной к pin.

 zabbix_get -s 192.168.0.1 -k "OW.scan[2]"
 0x2888D8D401000091
 0x284AE0D4010000DA
 0x28D1A0D40100007A
I2C.scan[sdaPin, sclPin]

Параметры:

  • sdaPin - цифровое обозначение пина SDA шины I2C;
  • sclPin - цифровое обозначение пина SCL шины I2C.

Возвращаемое значение: список устройств I2C, найденных на шине, подключенной к sdaPin и sclPin.

Примечание: взаимодействие с устройствами, работающими по шине I2C, реализовано с помощью технологии SoftwareWire, в связи с чем sdaPin / sclPin не обязательно должны быть отнесены к аппаратному I2C интерфейсу Arduino.

 zabbix_get -s 192.168.0.1 -k "I2C.Scan[18,19]"
 0x77
 0x23
I2C.BitWrite[sdaPin, sclPin, i2cAddress, register, bitNo, value]

Параметры:

  • sdaPin - цифровое обозначение пина SDA шины I2C;
  • sclPin - цифровое обозначение пина SCL шины I2C;
  • i2cAddress - I2C адрес устройства;
  • register (опционально) - регистр устройства I2C;
  • bitNo - номер записываемого бита;
  • value - значение бита.

Возвращаемое значение: при удачном выполнении - '1', в противном случае - '0'.

Действие: в считанном из заданного регистра I2C устройства значении изменяется определенный соответствующим параметром бит, итог записывается обратно в I2C устройство.

Примечание: взаимодействие с устройствами, работающими по шине I2C, реализовано с помощью технологии SoftwareWire, в связи с чем sdaPin / sclPin не обязательно должны быть отнесены к аппаратному I2C интерфейсу Arduino.

 zabbix_get -s 192.168.0.1 -k "I2C.BitWrite[18,19,0x20,,5,1]"
 1
I2C.BitRead[sdaPin, sclPin, i2cAddress, register, bitNo]

Параметры:

  • sdaPin - цифровое обозначение пина SDA шины I2C;
  • sclPin - цифровое обозначение пина SCL шины I2C;
  • i2cAddress - I2C адрес устройства;
  • register (опционально) - регистр устройства I2C;
  • bitNo - номер читаемого бита.

Возвращаемое значение: состояние заданного бита - 1 или 0.

Примечание: взаимодействие с устройствами, работающими по шине I2C, реализовано с помощью технологии SoftwareWire, в связи с чем sdaPin / sclPin не обязательно должны быть отнесены к аппаратному I2C интерфейсу Arduino.

 zabbix_get -s 192.168.0.1 -k "I2C.BitRead[18,19,0x20,,5]"
 1
I2C.Write[sdaPin, sclPin, i2cAddress, register, data, numBytes]

Параметры:

  • sdaPin - цифровое обозначение пина SDA шины I2C;
  • sclPin - цифровое обозначение пина SCL шины I2C;
  • i2cAddress - I2C адрес устройства;
  • register (опционально) - регистр устройства I2C;
  • data - данные, посылаемые в устройство I2C;
  • numBytes - размер data в байтах.

Возвращаемое значение: при удачном выполнении - '1', в противном случае - '0'.

Действие: в заданный регистр I2C устройства записывается numBytes байт данных.

Примечание: взаимодействие с устройствами, работающими по шине I2C, реализовано с помощью технологии SoftwareWire, в связи с чем sdaPin / sclPin не обязательно должны быть отнесены к аппаратному I2C интерфейсу Arduino.

 zabbix_get -s 192.168.0.1 -k "I2C.BitWrite[18,19,0x20,,38,1]"
 1
I2C.Read[sdaPin, sclPin, i2cAddress, register, numBytes, numberOfReadings]

Параметры:

  • sdaPin - цифровое обозначение пина SDA шины I2C;
  • sclPin - цифровое обозначение пина SCL шины I2C;
  • i2cAddress - I2C адрес устройства;
  • register (опционально) - регистр устройства I2C;
  • numBytes - размер считываемых с устройства I2C данных, 1..4 байта;
  • numberOfReadings - количество считываний с устройства.

Возвращаемое значение: число, полученное от устройства I2C .

Примечание: взаимодействие с устройствами, работающими по шине I2C, реализовано с помощью технологии SoftwareWire, в связи с чем sdaPin / sclPin не обязательно должны быть отнесены к аппаратному I2C интерфейсу Arduino.

Примечание: Манипулируя параметром numberOfReadings можно произвести несколько считываний, получив усредненный результат. Если значение numberOfReadings определено, то будет произведено предварительное неучитываемое считывание значения, что позволит получить актуальные данные от датчиков, которые возвращают результат предыдущего измерения (например BH1750). В противном случае осуществляется однократный запрос данных.

 zabbix_get -s 192.168.0.1 -k "I2C.Read[18,19,0x20,,1]"
 38

Датчики окружающей среды

DS18x20.temperature[pin, resolution, id]

Параметры:

  • pin - цифровое обозначение пина, к которому подключен термометр DS18x20;
  • resolution - разрешение термометра - 9..12 бит;
  • id - идентификатор (адрес) термометра. Адрес указывается в шестнадцатеричной форме с префиксом 0x.

Возвращаемое значение: значение температуры, полученное с цифрового термометра.

Единица измерения: градус Цельсия.

Примечание: Точность показаний (1/2 ... 1/16 C) зависит от параметра resolution. От него, также, зависит время выполнения команды. Максимальный временной промежуток замера температуры датчиком - 825ms (resolution = 12bit). При отсутствии в команде параметра id опрашивается первый найденный на шине термометр. Идентификатор (адрес) термометра можно получить при помощи команды OW.Scan. При возникновении какой-либо ошибки в процедуре считывания (невозможности получить данные с термометра вследствие ошибки подсоединения или ошибочно указанном ID) может быть возвращен код ошибки. Коды ошибки можно найти в файле src/cfg_tune.h (#define MSG_DEVICE_ERROR ...).

 zabbix_get -s 192.168.0.1 -k "DS18x20.Temperature[2,9,0x284bd6d4010000f5]"
 25.5000
DHT.temperature[pin, model]

Параметры:

  • pin - цифровое обозначение пина, к которому подключен цифровой датчик DHT/AM;
  • model - идентификатор модели датчика - 11 (DHT11), 21 (DHT21, AM2301), 22 (DHT22, AM2302, AM2320), 33 (DHT33), 44 (DHT44).

Возвращаемое значение: значение температуры, полученное с цифрового датчика.

Единица измерения: градус Цельсия.

Примечание: Значение -135 выдается при возникновении ошибки соединения с датчиком, а -134 - в случае приема неверных данных (ошибка контрольной суммы). Другие коды ошибок можно найти в файле src/cfg_tune.h (#define MSG_DEVICE_ERROR ...). Если модель датчика не указана или указана неверно, то расчет температуры производится по формуле, применяемой для DHT22. Команда самостоятельно устанавливает режим работы (INPUT/OUTPUT) пина.

Примечание: В силу специфики работы датчиков DHT/AM производится задержка при обнаружении уровня LOW на pin: для DHT21/AM2301 - 2 сек, для остальных - 1 сек. Избежать задержки перед первым, после включения устройства, опросом позволяет предварительная установка pin в режим OUTPUT+HIGH при помощи массивов port_mode, port_pullup (src/cfg_tune.h_).

Примечание: Не все датчики DHT/AM снабжены внутрисхемным pull-up резистором, поэтому вы можете обнаружить, что часть датчиков работает по упрощенной схеме (без резистора между VCC и DQ), а часть - нет.

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

 zabbix_get -s 192.168.0.1 -k "DHT.Temperature[4,22]"
 26.5
DHT.humidity[pin, model]

Параметры:

  • pin - цифровое обозначение пина, к которому подключен цифровой датчик DHT/AM/...;
  • model - идентификатор модели датчика - 11 (DHT11), 21 (DHT21, AM2301), 22 (DHT22, AM2302, AM2320), 33 (DHT33), 44 (DHT44).

Возвращаемое значение: величина относительной влажности, полученная с цифрового датчика.

Единица измерения: процент.

Примечание: Значение -135 выдается при возникновении ошибки соединения с датчиком, а -134 - в случае приема неверных данных (ошибка контрольной суммы). Другие коды ошибок можно найти в файле src/tune.h (#define MSG_DEVICE_ERROR ...). Если модель датчика не указана или указана неверно, то расчет температуры производится по формуле, применяемой для DHT22. Команда самостоятельно устанавливает режим работы (INPUT/OUTPUT) пина.

Примечание: В силу специфики работы датчиков DHT/AM производится задержка при обнаружении уровня LOW на pin: для DHT21/AM2301 - 2 сек, для остальных - 1 сек. Избежать задержки перед первым, после включения устройства, опросом позволяет предварительная установка pin в режим OUTPUT+HIGH при помощи массивов port_mode, port_pullup (tune.h).

Примечание: Не все датчики DHT/AM снабжены внутрисхемным pull-up резистором, поэтому вы можете обнаружить, что часть датчиков работает по упрощенной схеме (без резистора между VCC и DQ), а часть - нет.

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

 zabbix_get -s 192.168.0.1 -k "DHT.Humidity[4,22]"
 43.1
SHT2X.Humidity[sdaPin, sclPin, i2cAddress]

Параметры:

  • sdaPin - цифровое обозначение пина SDA шины I2C;
  • sclPin - цифровое обозначение пина SCL шины I2C;
  • i2cAddress - оционально. I2C адрес устройства.

Возвращаемое значение: величина относительной влажности, полученная с цифрового датчика семейства SHT2X (например, SHT21 с чипом SI7021).

Единица измерения: процент.

Примечание: взаимодействие с устройствами, работающими по шине I2C, реализовано с помощью технологии SoftwareWire, в связи с чем sdaPin / sclPin не обязательно должны быть отнесены к аппаратному I2C интерфейсу Arduino.

 zabbix_get -s 192.168.0.1 -k "SHT2X.Humidity[18,19,0x40]"
 53.10
SHT2X.Temperature[sdaPin, sclPin, i2cAddress]

Параметры:

  • sdaPin - цифровое обозначение пина SDA шины I2C;
  • sclPin - цифровое обозначение пина SCL шины I2C;
  • i2cAddress - оционально. I2C адрес устройства.

Возвращаемое значение: значение температуры, полученное с цифрового датчика семейства SHT2X (например, SHT21 с чипом SI7021).

Единица измерения: градус Цельсия.

Примечание: взаимодействие с устройствами, работающими по шине I2C, реализовано с помощью технологии SoftwareWire, в связи с чем sdaPin / sclPin не обязательно должны быть отнесены к аппаратному I2C интерфейсу Arduino.

 zabbix_get -s 192.168.0.1 -k "SHT2X.Temperature[18,19,0x40]"
 26.60
MLX90614.temperature[sdaPin, sclPin, i2cAddress, zone]

Параметры:

  • sdaPin - цифровое обозначение пина SDA шины I2C;
  • sclPin - цифровое обозначение пина SCL шины I2C;
  • i2cAddress - оционально. I2C адрес устройства.
  • zone - зона измерения: 0 - окружающая среда, 1 - зона #1, 2 - зона #2.

Возвращаемое значение: значение температуры, полученное с бесконтактного термометра.

Единица измерения: градус Цельсия.

Примечание: Зона измерения #2 доступна не во всех моделях датчиков. Обратитесь к описанию датчика для получения подробной информации.

 zabbix_get -s 192.168.0.1 -k "MLX90614.temperature[18, 19, 0x5A, 1]"
 36.60
BMP.Temperature[sdaPin, sclPin, i2cAddress, overSampling]

Параметры:

  • sdaPin - цифровое обозначение пина SDA шины I2C;
  • sclPin - цифровое обозначение пина SCL шины I2C;
  • i2cAddress - I2C адрес устройства;
  • overSampling - оционально. Значение, определяющее точность и длительность измерения. Применяется только для датчиков BMP280/BME280. Обратитесь к описанию датчика для получения подробной информации: "Datasheet BMP280 Digital Pressure Sensor", раздел "3.3.2 Temperature measurement".

Возвращаемое значение: значение температуры, полученное с цифрового датчика BMP085/BMP180.

Единица измерения: градус Цельсия.

Примечание: точность датчика - 0,1C. Взаимодействие с устройствами, работающими по шине I2C, реализовано с помощью технологии SoftwareWire, в связи с чем sdaPin / sclPin не обязательно должны быть отнесены к аппаратному I2C интерфейсу Arduino.

 zabbix_get -s 192.168.0.1 -k "BMP.Temperature[18,19,0x77]"
 24.6
BMP.Pressure[sdaPin, sclPin, i2cAddress, overSampling, filterCoef]

Параметры:

  • sdaPin - цифровое обозначение пина SDA шины I2C;
  • sclPin - цифровое обозначение пина SCL шины I2C;
  • i2cAddress - I2C адрес устройства;
  • overSampling - оционально. Значение, определяющее точность и длительность измерения. Обратитесь к описанию датчика для получения подробной информации;
  • filterCoef - оционально. Значение коэффициента IIR-фильтра, применяющегося для получения информации в быстро меняющихся условиях. Обратитесь к описанию датчика для получения подробной информации: "Datasheet BMP280 Digital Pressure Sensor", раздел "3.3.3 IIR filter".

Возвращаемое значение: значение величины атмосферного давления, полученное с цифрового датчика BMP085/BMP180.

Единица измерения: Паскаль.

Примечание: взаимодействие с устройствами, работающими по шине I2C, реализовано с помощью технологии SoftwareWire, в связи с чем sdaPin / sclPin не обязательно должны быть отнесены к аппаратному I2C интерфейсу Arduino.

 zabbix_get -s 192.168.0.1 -k "BMP.Pressure[18,19,0x77,3]"
 99478
BME.Humidity[sdaPin, sclPin, i2cAddress, overSampling, filterCoef]

Параметры:

  • sdaPin - цифровое обозначение пина SDA шины I2C;
  • sclPin - цифровое обозначение пина SCL шины I2C;
  • i2cAddress - I2C адрес устройства;
  • overSampling - оционально. Значение, определяющее точность и длительность измерения. Обратитесь к описанию датчика для получения подробной информации;
  • filterCoef - оционально. Значение коэффициента IIR-фильтра, применяющегося для получения информации в быстро меняющихся условиях. Обратитесь к описанию датчика для получения подробной информации: "Datasheet BMP280 Digital Pressure Sensor", раздел "3.3.3 IIR filter".

Возвращаемое значение: величина относительной влажности, полученная с цифрового датчика.

Единица измерения: процент.

Примечание: функция измерения влажности предусмотрена только в датчике BME280.

Примечание: взаимодействие с устройствами, работающими по шине I2C, реализовано с помощью технологии SoftwareWire, в связи с чем sdaPin / sclPin не обязательно должны быть отнесены к аппаратному I2C интерфейсу Arduino.

 zabbix_get -s 192.168.0.1 -k "BME.Humidity[18,19,0x76,3,4]"
 46.0
PMSxx.all[rxPin, txPin]
PMSxx.epm[rxPin, txPin, particleSize]
PMSxx.fpm[rxPin, txPin, particleSize]

Параметры:

  • rxPin - цифровое обозначение пина (входа) приема данных;
  • txPin - цифровое обозначение пина (выхода) передачи данных;
  • particleSize - размерность частиц (канал): 0.3um (PM0.3) - 3, 0.5um (PM0.5) - 5, 1um (PM1) - 10, 2.5um (PM2.5) - 25, 5um (PM5) - 50, 10um (PM10) - 100.

Возвращаемое значение: для команды PMSxx.all[] - JSON-объект, содержащий значения Standart PM Concentration, Environment PM Concentration и Paricles Quantity для каждого канала измерения (0.3..10um). Для команд PMSxx.epm[] и PMSxx.spm[] - концентрация частиц указанной размерности, ug/m^3. В случае возникновения ошибки приемо-передачи - ее код, заданный в макро-определении MSG_DEVICE_ERROR_TIMEOUT. При несовпадении контрольной суммы - код, заданный в MSG_DEVICE_ERROR_CHECKSUM.

Примечание: при работе в "активном режиме" датчики PMS-xxxx самостоятельно и периодически отсылают данные по UART, поэтому подключение только выхода TX датчика на rxPin является достаточным для получения значений метрик.

Примечание: взаимодействие с устройствами, работающими по шине UART, реализовано с помощью технологии SoftSerial, в связи с чем rxPin / txPin не обязательно должны быть отнесены к аппаратному UART Arduino.

 zabbix_get -s 192.168.0.1 -k "PMS.epm[2, 3, 25]"
 14
SDS.all[rxPin, txPin]
SDS.epm[rxPin, txPin, particleSize]

Параметры:

  • rxPin - цифровое обозначение пина (входа) приема данных;
  • txPin - цифровое обозначение пина (выхода) передачи данных;
  • particleSize - размерность частиц (канал): 1um (PM1) - 10, 2.5um (PM2.5) - 25.

Возвращаемое значение: для команды SDSxx.all[] - JSON-объект, содержаший значения Environment PM Concentration и Paricles Quantity для каждого канала измерения (1..2.5um). Для команды SDS.epm[] - концентрация частиц указанной размерности, ug/m^3. В случае возникновения ошибки приемо-передачи - ее код, заданный в макро-определении MSG_DEVICE_ERROR_TIMEOUT. При несовпадении контрольной суммы - код, заданный в MSG_DEVICE_ERROR_CHECKSUM.

Примечание: при работе в "активном режиме" датчик SDS011 самостоятельно и периодически отсылает данные по UART, поэтому подключение только выхода TX датчика на rxPin является достаточным для получения значений метрик.

Примечание: взаимодействие с устройствами, работающими по шине UART, реализовано с помощью технологии SoftSerial, в связи с чем rxPin / txPin не обязательно должны быть отнесены к аппаратному UART Arduino.

 zabbix_get -s 192.168.0.1 -k "SDS.epm[2, 3, 25]"
 14
WCPM.UART.All[rxPin, txPin]

Параметры:

  • rxPin - цифровое обозначение пина (входа) приема данных;
  • txPin - цифровое обозначение пина (выхода) передачи данных.

Возвращаемое значение: JSON-объект, содержаший значения Environment PM Concentration и Paricles Quantity для каждого канала измерения (0.3..10um), а так же статус датчика. В случае возникновения ошибки приемо-передачи - ее код, заданный в макро-определении MSG_DEVICE_ERROR_TIMEOUT. При несовпадении контрольной суммы - код, заданный в MSG_DEVICE_ERROR_CHECKSUM.

Примечание: при работе в "активном режиме" датчик PM2012 самостоятельно и периодически отсылает данные по UART, поэтому подключение только выхода TX датчика на rxPin является достаточным для получения значений метрик.

Примечание: взаимодействие с устройствами, работающими по шине UART, реализовано с помощью технологии SoftSerial, в связи с чем rxPin / txPin не обязательно должны быть отнесены к аппаратному UART Arduino.

 zabbix_get -s 192.168.0.1 -k "WCPM.UART.All[2, 3]"
 {"SPM10":6,"SPM25":7,"SPM100":7,"EPM10":6,"EPM25":7,"EPM100":7,"PRT03":510,"PRT05":118,"PRT10":35,"PRT25":1,"PRT50":0,"PRT100":0,"STATUS":0}
WCPM.I2C.All[sdaPin, sclPin, i2cAddress]

Параметры:

  • sdaPin - цифровое обозначение пина SDA шины I2C;
  • sclPin - цифровое обозначение пина SCL шины I2C;
  • i2cAddress - оционально. I2C адрес устройства.

Возвращаемое значение: JSON-объект, содержаший значения Environment PM Concentration и Paricles Quantity для каждого канала измерения (0.3..10um), а так же статус датчика. В случае возникновения ошибки приемо-передачи - ее код, заданный в макро-определении MSG_DEVICE_ERROR_TIMEOUT. При несовпадении контрольной суммы - код, заданный в MSG_DEVICE_ERROR_CHECKSUM.

Примечание: взаимодействие с устройствами, работающими по шине I2C, реализовано с помощью технологии SoftwareWire, в связи с чем sdaPin / sclPin не обязательно должны быть отнесены к аппаратному I2C интерфейсу Arduino.

 zabbix_get -s 192.168.0.1 -k "WCPM.I2C.All[18, 19]"
 {"SPM10":6,"SPM25":7,"SPM100":7,"EPM10":6,"EPM25":7,"EPM100":7,"PRT03":510,"PRT05":118,"PRT10":35,"PRT25":1,"PRT50":0,"PRT100":0,"STATUS":0}
SGP30.CO2e[sdaPin, sclPin, i2cAddress]

Параметры:

  • sdaPin - цифровое обозначение пина SDA шины I2C;
  • sclPin - цифровое обозначение пина SCL шины I2C;
  • i2cAddress - оционально. I2C адрес устройства.

Возвращаемое значение: величина CO2eq (carbon dioxide equivalent), рассчитанная датчиком.

Единица измерения: PPM (parts per million).

Примечание: рассчитываемая величина CO2e не всегда отражает реальную концентрацию CO2 в анализируемой смеси газов.

Примечание: для правильного расчёта значения метрики требуется поправка на актуальную температуру и влажность в точке измерения. Это может быть достигнуто через пользовательские функции реализованные в плагине (plugin.ino).

Примечание: взаимодействие с устройствами, работающими по шине I2C, реализовано с помощью технологии SoftwareWire, в связи с чем sdaPin / sclPin не обязательно должны быть отнесены к аппаратному I2C интерфейсу Arduino.

 zabbix_get -s 192.168.0.1 -k "SGP30.CO2e[18, 19]"
 670
SGP30.TVOC[sdaPin, sclPin, i2cAddress]

Параметры:

  • sdaPin - цифровое обозначение пина SDA шины I2C;
  • sclPin - цифровое обозначение пина SCL шины I2C;
  • i2cAddress - оционально. I2C адрес устройства.

Возвращаемое значение: величина TVOC (total volatile organic compounds), рассчитанная датчиком.

Единица измерения: PPB (parts per billion).

Примечание: для правильного расчёта значения метрики требуется поправка на актуальную температуру и влажность в точке измерения. Это может быть достигнуто через пользовательские функции реализованные в плагине (plugin.ino).

Примечание: взаимодействие с устройствами, работающими по шине I2C, реализовано с помощью технологии SoftwareWire, в связи с чем sdaPin / sclPin не обязательно должны быть отнесены к аппаратному I2C интерфейсу Arduino.

 zabbix_get -s 192.168.0.1 -k "SGP30.TVOC[18, 19]"
 3
T67xx.I2C.CO2[sdaPin, sclPin, i2cAddress]

Параметры:

  • sdaPin - цифровое обозначение пина SDA шины I2C;
  • sclPin - цифровое обозначение пина SCL шины I2C;
  • i2cAddress - оционально. I2C адрес устройства.

Возвращаемое значение: величина CO2 (carbon dioxide), измеренная датчиком.

Единица измерения: PPM (parts per million).

Примечание: взаимодействие с устройствами, работающими по шине I2C, реализовано с помощью технологии SoftwareWire, в связи с чем sdaPin / sclPin не обязательно должны быть отнесены к аппаратному I2C интерфейсу Arduino.

 zabbix_get -s 192.168.0.1 -k "T67xx.I2C.CO2[18, 19]"
 682
MHZxx.PWM.CO2[pwmPin, range]

Параметры:

  • pwmPin - цифровое обозначение пина, к которому подключен PWM выход датчика;
  • range - диапазон измерения, на который откалиброван датчик (2000PPM, 5000PPM, etc).

Возвращаемое значение: величина CO2 (carbon dioxide), измеренная датчиком.

Единица измерения: PPM (parts per million).

 zabbix_get -s 192.168.0.1 -k "MHZxx.PWM.CO2[2,5000]"
 695
MHZxx.UART.CO2[rxPin, txPin]

Параметры:

  • rxPin - цифровое обозначение пина (входа) приема данных;
  • txPin - цифровое обозначение пина (выхода) передачи данных.

Возвращаемое значение: величина CO2 (carbon dioxide), измеренная датчиком.

Единица измерения: PPM (parts per million).

Примечание: взаимодействие с устройствами, работающими по шине UART, реализовано с помощью технологии SoftSerial, в связи с чем rxPin / txPin не обязательно должны быть отнесены к аппаратному UART Arduino.

 zabbix_get -s 192.168.0.1 -k "MHZxx.PWM.CO2[2,3]"
 408
ZE08.CH2O[rxPin, txPin]

Параметры:

  • rxPin - цифровое обозначение пина (входа) приема данных;
  • txPin - цифровое обозначение пина (выхода) передачи данных.

Возвращаемое значение: величина CH2O (formaldehyde), измеренная датчиком. В случае возникновения ошибки приемо-передачи - ее код, заданный в макро-определении MSG_DEVICE_ERROR_TIMEOUT. При несовпадении контрольной суммы - код, заданный в MSG_DEVICE_ERROR_CHECKSUM.

Единица измерения: PPM (parts per million).

Примечание: взаимодействие с устройствами, работающими по шине UART, реализовано с помощью технологии SoftSerial, в связи с чем rxPin / txPin не обязательно должны быть отнесены к аппаратному UART Arduino.

 zabbix_get -s 192.168.0.1 -k "ZE08.CH2O[2,3]"
BH1750.light[sdaPin, sclPin, i2cAddress]

Параметры:

  • sdaPin - цифровое обозначение пина SDA шины I2C;
  • sclPin - цифровое обозначение пина SCL шины I2C;
  • i2cAddress - оционально. I2C адрес устройства;

Возвращаемое значение: величина освещенности, полученная с цифрового датчика.

Единица измерения: люкс.

Примечание: Уровень освещённости может быть так же получен считыванием RAW-значения с датчика командой i2c.read[] и использованием мультипликатора 0,8333 (lux = raw / 1.2) в элементе данных Zabbix.

Примечание: взаимодействие с устройствами, работающими по шине I2C, реализовано с помощью технологии SoftwareWire, в связи с чем sdaPin / sclPin не обязательно должны быть отнесены к аппаратному I2C интерфейсу Arduino.

 zabbix_get -s 192.168.0.1 -k "BH1750.light[18,19,0x23]"
 5932
MAX44009.light[sdaPin, sclPin, i2cAddress, mode, integrationTime]

Параметры:

  • sdaPin - цифровое обозначение пина SDA шины I2C;
  • sclPin - цифровое обозначение пина SCL шины I2C;
  • i2cAddress - оционально. I2C адрес устройства;
  • mode - опционально. Значение, определяющее режим измерения (периодичность). "Continuous mode" - 0x80, "Default Mode (every 800ms)" - 0x00. Обратитесь к описанию датчика для получения подробной информации.
  • integrationTime - опционально. Время, затрачиваемое на однократное измерение. Обратитесь к описанию датчика для получения подробной информации: "MAX44009 Industry’s Lowest-Power Ambient Light Sensor with ADC", таблица "Table 7. Integration Time".

Возвращаемое значение: величина освещенности, полученная с цифрового датчика.

Единица измерения: люкс.

Примечание: при отсутствии параметров integrationTime и mode производится автоматический аппаратный подбор необходимых параметров замера.

Примечание: взаимодействие с устройствами, работающими по шине I2C, реализовано с помощью технологии SoftwareWire, в связи с чем sdaPin / sclPin не обязательно должны быть отнесены к аппаратному I2C интерфейсу Arduino.

 zabbix_get -s 192.168.0.1 -k "MAX44009.light[18,19,0x4A]"
 398
TSL2561.light[sdaPin, sclPin, i2cAddress, integrationTime, gain]

Параметры:

  • sdaPin - цифровое обозначение пина SDA шины I2C;
  • sclPin - цифровое обозначение пина SCL шины I2C;
  • i2cAddress - - оционально. I2C адрес устройства;
  • integrationTime - время, в течении которого датчик будет собирать данные: 13, 101, 402 мс;
  • gain - коэффициент усиления: 1, 16.

Возвращаемое значение: величина освещенности, полученная с цифрового датчика.

Единица измерения: люкс.

Примечание: автоматический подбор параметров integrationTime и gain на данный момент не реализован.

Примечание: взаимодействие с устройствами, работающими по шине I2C, реализовано с помощью технологии SoftwareWire, в связи с чем sdaPin / sclPin не обязательно должны быть отнесены к аппаратному I2C интерфейсу Arduino.

 zabbix_get -s 192.168.0.1 -k "TSL2561.light[18,19,0x39,402,1]"
 457
VEML6070.uva[sdaPin, sclPin, integrationTime, rSet]

Параметры:

  • sdaPin - цифровое обозначение пина SDA шины I2C;
  • sclPin - цифровое обозначение пина SCL шины I2C;
  • integrationFactor - оционально. Условный временной интервал, в течении которого датчик будет собирать данные: 1 - 1T, 2 - 2T, 4 - 4T;
  • rSet - оционально. Сопротивление резистора в кОм, подключенного к входу #4 датчика. По-умолчанию - 270кОм (модуль от AdaFruit).

Возвращаемое значение: интенсивность ультрафиолетового излучения, фиксируемая датчиком.

Единица измерения: mW/cm^2.

Примечание: реальное время сбора данных зависит от параметра integrationFactor и подключенного к входу #4 датчика сопротивления Rset. Обратитесь к таблице #7 документации "VEML6070 - UVA Light Sensor with I2C Interface" для получения подробной информации.

Примечание: взаимодействие с устройствами, работающими по шине I2C, реализовано с помощью технологии SoftwareWire, в связи с чем sdaPin / sclPin не обязательно должны быть отнесены к аппаратному I2C интерфейсу Arduino.

 zabbix_get -s 192.168.0.1 -k "VEML6070.uva[18,19,1,360]"
 3
VEML6070.uvi[sdaPin, sclPin, integrationTime, rSet]

Параметры:

  • sdaPin - цифровое обозначение пина SDA шины I2C;
  • sclPin - цифровое обозначение пина SCL шины I2C;
  • integrationFactor - оционально. Условный временной интервал, в течении которого датчик будет собирать данные: 1 - 1T, 2 - 2T, 4 - 4T;
  • rSet - оционально. Сопротивление резистора в кОм, подключенного к входу #4 датчика. По-умолчанию - 270кОм (модуль от AdaFruit).

Возвращаемое значение: индекс ультрафиолетового излучения (UV Index)[https://en.wikipedia.org/wiki/Ultraviolet_index#Index_usage].

Примечание: реальное время сбора данных зависит от параметра integrationFactor и подключенного к входу #4 датчика сопротивления Rset. Обратитесь к таблице #7 документации "VEML6070 - UVA Light Sensor with I2C Interface" для получения подробной информации.

Примечание: взаимодействие с устройствами, работающими по шине I2C, реализовано с помощью технологии SoftwareWire, в связи с чем sdaPin / sclPin не обязательно должны быть отнесены к аппаратному I2C интерфейсу Arduino.

 zabbix_get -s 192.168.0.1 -k "VEML6070.uvi[18,19,1,360]"
 1
ADPS9960.ambient[sdaPin, sclPin, i2cAddress, integrationTime, gain]
ADPS9960.red[sdaPin, sclPin, i2cAddress, integrationTime, gain]
ADPS9960.green[sdaPin, sclPin, i2cAddress, integrationTime, gain]
ADPS9960.blue[sdaPin, sclPin, i2cAddress, integrationTime, gain]

Параметры:

  • sdaPin - цифровое обозначение пина SDA шины I2C;
  • sclPin - цифровое обозначение пина SCL шины I2C;
  • i2cAddress - оционально. I2C адрес устройства;
  • integrationTime - оционально. Время, в течении которого датчик будет собирать данные: 3..712 мс.
  • gain - оционально. Коэффициент усиления: 1, 4, 16, 64.

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

Единица измерения: люкс.

Примечание: при отсутствии опциональных параметров используются значения по-умолчанию: integrationTime = 103 мс и gain = 4.

Примечание: для получения подробной информации обратитесь к описанию датчика : "APDS-9960 Digital Proximity, Ambient Light, RGB and Gesture Sensor".

Примечание: взаимодействие с устройствами, работающими по шине I2C, реализовано с помощью технологии SoftwareWire, в связи с чем sdaPin / sclPin не обязательно должны быть отнесены к аппаратному I2C интерфейсу Arduino.

 zabbix_get -s 192.168.0.1 -k "ADPS9960.ambient[18,19,0x39]"
 781
INA219.BusVoltage[sdaPin, sclPin, i2cAddress, voltageRange, maxCurrent]
INA219.Current[sdaPin, sclPin, i2cAddress, voltageRange, maxCurrent]
INA219.Power[sdaPin, sclPin, i2cAddress, voltageRange, maxCurrent]

Параметры:

  • sdaPin - цифровое обозначение пина SDA шины I2C;
  • sclPin - цифровое обозначение пина SCL шины I2C;
  • i2cAddress - оционально. I2C адрес устройства;
  • voltageRange - оционально. Диапазон измеряемого напряжение, вольт: 16 или 32.
  • maxCurrent - оционально. Максимальная ожидаемая сила тока в цепи измерения, mA: 400 (только для maxVoltage = 16V), 1000, 2000, 3000.

Возвращаемое значение: величина напряжения/силы тока/мощности, полученная с датчика (монитора) параметров электрической цепи INA219.

Единица измерения: mV, mA, mW.

Внимание! Максимальное измеряемое напряжение - 26V, параметр "диапазон измеряемого напряжение" применяется только для корректного расчета.

Примечание: параметры voltageRange и maxCurrent не могут иметь произвольные значения, так как в целях оптимизации исходного кода используется предварительно расчитанная на основании вышеуказанных величин таблица калибровочных значений датчика. Значения по умолчанию - 32V, 3000mA.

Примечание: взаимодействие с устройствами, работающими по шине I2C, реализовано с помощью технологии SoftwareWire, в связи с чем sdaPin / sclPin не обязательно должны быть отнесены к аппаратному I2C интерфейсу Arduino.

 zabbix_get -s 192.168.0.1 -k "INA219.BusVoltage[18,19,0x40,16,1000]"
 4876
extInt.count[intPin, mode]

Параметры:

  • intPin - цифровое обозначение пина (входа), на которое назначено (или должно быть назначено) внешнее прерывание;
  • mode - режим прерывания: 0 - LOW, 1 - CHANGE, 2 - FALLING, 3 - RISING.

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

Примечание: возвращаемое значение имеет размерность в 32 бита и является беззнаковым (тип uint32_t).

Примечание: на данный момент внешние прерывания могут быть привязаны только к определенным выводам микроконтроллера (см. описание функции attachInterrupt для получения дополнительной информации).

Примечание: активация прерывания происходит при первой обработке данной команды. При получении команде с отличающимся от прежнего значения параметром mode, происходит деактивация прерывания и активация с новым режимом. При этом счетчик срабатываний обнуляется. К сожалению, на данный момент нет возможности отличить возвращаемое значение счетчика "0" от результата "0", возникающего при ошибке выполнения команды.

 zabbix_get -s 192.168.0.1 -k "extInt.count[2,3]"
 305
incEnc.count[terminalAPin, terminalBPin, initialValue]

Параметры:

  • terminalAPin - цифровое обозначение пина (входа), к которому подключен один из выходов энкодера. Этот пин должен быть связан с обработкой внешних прерываний;
  • terminalBPin - цифровое обозначение пина (входа), к которому подключен второй выход энкодера. Может быть связан с любым цифровым входом микроконтроллера;
  • initialValue - начальное число.

Возвращаемое значение: число, изменяемое инкрементальным энкодером.

Примечание: число имеет размерность в 32 бита и является знаковым (тип int32_t).

Примечание: на данный момент внешние прерывания могут быть привязаны только к определенным выводам микроконтроллера (см. описание функции attachInterrupt для получения дополнительной информации).

Примечание: активация прерывания, связанного с пином, к которому подключен вывод "A" энкодера, происходит при первой обработке данной команды. Увеличение или уменьшение числа, заданного в параметре initialValue определяется направлением вращения ручки энкодера. К сожалению, на данный момент нет возможности отличить возвращаемое число "0" от результата "0", возникающего при ошибке выполнения команды.

 zabbix_get -s 192.168.0.1 -k "incEnc.count[2, 5, 1024]"
 999
ultrasonic.distance[triggerPin, echoPin]

Параметры:

  • triggerPin - цифровое обозначение пина (выхода), к которому подключен вход Trig модуля HC-SR04;
  • echoPin - цифровое обозначение пина (входа), к которому подключен выход Echo модуля HC-SR04.

Возвращаемое значение: расстояние до объекта или 6551 в случае, если расстояние выходит за пределы разрешенного диапазона (объект слишком близко или слишком далеко).

Единица измерения: миллиметр.

Примечание: разрешающая способность датчика HC-SR04 - 3мм. Диапазон измеряемых расстояний 20..4000мм (2см - 4м).

 zabbix_get -s 192.168.0.1 -k "ultrasonic.distance[4, 5]"
 2138

Исполнительные устройства и устройства индикации

portWrite[port, value]

Параметры:

  • port - символьное обозначение порта ввода/вывода (B,C,D,...);
  • value - значение, которое требуется записать в заданный порт ввода/вывода.

Действие: изменяется состояние порта ввода/вывода (PORTB, PORTC, PORTD,...), если он подлежит изменению.

Возвращаемое значение: при удачном выполнении - '1', в противном случае - '0'.

Примечание: этот способ задания состояния выводов сработает на порядок быстрее, чем несколько команд digitalWrite[].

Примечание: количество портов для каждой модели Arduino определяется автоматически с помощью данных, находящихся в src/cfg_tune.h и на основании макросов создаваемых Arduino IDE при компиляции. Более подробно об этом написано в разделе "Компиляция и настройка".

Примечание: команда не изменяет режим порта. Вам необходимо проделать это предварительно, изменив содержимое массива port_mode, определяемого в src/cfg_tune.h.

 zabbix_get -s 192.168.0.1 -k "portWrite[c,21]"
 1
 **На пинах (выходах) A0, A3, A5, относящихся к PORTC, одновременно устанавливается состояние HIGH**
servo.turn[servoPin, targetAnglePulseWidth, turnTime, holdTime, returnAnglePulseWidth]

Параметры:

  • servoPin - цифровое обозначение пина (выхода), к которому подключен управляющий вход сервомеханизма;
  • targetAnglePulseWidth (опционально) - длительность импульса в микросекундах, подаваемого на сервомеханизм для перехода в заданную позицию;
  • turnTime - продолжительность подачи импульсов, в миллисекундах;
  • holdTime - время (в миллисекундах) нахождения в состоянии, заданном параметром targetAnglePulseWidth;
  • returnAnglePulseWidth (опционально) - длительность импульса в микросекундах, подаваемого на сервомеханизм для возврата в исходную позицию;

Действие: на servoPin в течении turnTime подаются импульсы длительностью targetAnglePulseWidth в интервале 20 мс для вывода сервомеханизма на заданную позицию и удержании на ней в течении holdTime. Затем, для возврата на исходную позицию, на servoPin в течении turnTime подаются импульсы длительностью returnAnglePulseWidth, если таковой задан. При отсутствии returnAnglePulseWidth возврата не происходит.

Возвращаемое значение: при удачном выполнении - '1', в противном случае - '0'.

Примечание: перед выполнением команды выход servoPin переводится в режим OUTPUT автоматически. После завершения операции возврата прежде установленного режима не производится.

 zabbix_get -s 192.168.0.1 -k "servo.turn[5, 1500, 500, 2000, 540]"
 1
 **Сервомеханизм, подключенный к пину #5 поворачивается на 90 градусов в течении 500мс, удерживается на позиции 2000мс и возвращается на 0 градусов**
relay[relayPin, relayState, testPin, testState, testPinMode]

Параметры:

  • relayPin - цифровое обозначение пина (выхода), к которому подключен управляющий механизм (например реле);
  • relayState - состояние, устанавливаемое на выходе relayPin: 1 - HIGH, 0 - LOW;
  • testPin - цифровое обозначение пина (входа), к которому подключен механизм, контролирующий срабатывание (например NO /normal open/ контактная группа реле);
  • testState - состояние, проверяемое на testPin: 1 - HIGH, 0 - LOW;
  • testPinMode - режим testPin, устанавливаемое перед считыванием состояния: 2 - INPUT_PULLUP, иные - INPUT

Действие: relayPin устанавливается в режим relayState , после чего testPin переводится в режим testPinMode и проверяется на соответствие testState.

Возвращаемое значение: при удачном выполнении (соответствии testPin состоянию testPinMode) - '1', в противном случае - '0'.

Примечание: перед выполнением команды выход relayPin переводится в режим OUTPUT автоматически. После завершения операции возврата прежде установленного режима не производится.

 zabbix_get -s 192.168.0.1 -k "relay[5, 1, 6, 0, 2]"
 0
 **Реле, подключенное к пину #5 не сработало - на входе #6 не зарегистрировано состояние LOW**
pulse[targetPin, targetState, holdTime, returnState]

Параметры:

  • targetPin - цифровое обозначение пина (выхода), к которому подключен управляющий механизм (например реле);
  • targetState - состояние, устанавливаемое на выходе в начале операции: 1 - HIGH, 0 - LOW;
  • holdTime - время (в миллисекундах) удержания выхода в targetState;
  • returnState - состояние, устанавливаемое на выходе в конце операции: 1 - HIGH, 0 - LOW.

Действие: targetPin переводится в режим targetState, удерживается в течении в течении holdTime и переводится в returnState.

Возвращаемое значение: '1'.

Примечание: перед выполнением команды выход targetPin переводится в режим OUTPUT автоматически. После завершения операции возврата прежде установленного режима не производится.

 zabbix_get -s 192.168.0.1 -k "pulse[5, 1, 250, 0]"
 1
 **Пин #5 переходит в состояние HIGH на 250мс и, затем, возвращается в состояние LOW**
MAX7219.write[dataPin, clockPin, loadPin, intensity, data]

Параметры:

  • dataPin - цифровое обозначение пина (выхода) вывода данных (DIN);
  • clockPin - цифровое обозначение пина (выхода) синхронизации (CLK);
  • loadPin - цифровое обозначение пина (выхода) загрузки (CS);
  • intensity - яркость свечения элементов индикатора (0..15);
  • data - значение для вывода.

Действие: устанавливается соответствующее параметру data состояние элементов индикатора, подключенного к МС MAX7219.

Возвращаемое значение: при удачном выполнении - '1', в противном случае - '0'.

Примечание: Команда не производит очистку не затронутых значением data элементов индикатора. Параметр data может быть задан как в ASCII ('0'..'9', '-', 'c', 'C', 'h', 'H', 'E', 'L', 'P', 'n', 'o', 'r', точка и пробел), так и в шестнадцатеричной форме (с префиксом 0x), его длина ограничена размером внутреннего буфера. Состояние OUTPUT для выходов управления устанавливается автоматически. Если пины защищены, выполнения команды не происходит.

Строки матрицы заполняются последовательно, используя значения из data (например: 0x6666001818817E00) следующим образом:

 Строка 1  =>  0x66  =>  B01100110  =>  - X X - - X X -
 Строка 2  =>  0x66  =>  B01100110  =>  - X X - - X X - 
 Строка 3  =>  0x00  =>  B00000000  =>  - - - - - - - -
 Строка 4  =>  0x18  =>  B00011000  =>  - - - X X - - -
 Строка 5  =>  0x18  =>  B00011000  =>  - - - X X - - -
 Строка 6  =>  0x81  =>  B10000001  =>  X - - - - - - X
 Строка 7  =>  0x7E  =>  B01111110  =>  - X X X X X X -
 Строка 8  =>  0x00  =>  B00000000  =>  - - - - - - - -

Пример:

 zabbix_get -s 192.168.0.1 -k "max7219.write[5,6,7,1,0x6666001818817E00]"
 1
PCA9685.write[sdaPin, sclPin, i2cAddress, outputIdx, onTime, offTime]

Параметры:

  • sdaPin - цифровое обозначение пина SDA шины I2C;
  • sclPin - цифровое обозначение пина SCL шины I2C;
  • i2cAddress - I2C адрес устройства;
  • outputIdx (опционально) - номер канала;
  • onTime - отсчет (тик) на котором выход указанного канала переводится в состояние HIGH;
  • offTime - отсчет (тик) на котором выход указанного канала переводится в состояние LOW.

Действие: на заданном канале ШИМ-контроллера PCA9685 устанавливается режим, определяемый значениями onTime и offTime. Для получения информации о принципе работы контроллера обратитесь к руководству "PCA9685 16-channel, 12-bit PWM Fm+ I2C-bus LED controller".

Возвращаемое значение: при удачном выполнении - '1', в противном случае - '0'.

Примечание: при отсутствии параметра outputIdx режим устанавливается для всех каналов.

Примечание: в качестве частоты PWM используется значение по-умолчанию - 200Hz

Примечание: взаимодействие с устройствами, работающими по шине I2C, реализовано с помощью технологии SoftwareWire, в связи с чем sdaPin / sclPin не обязательно должны быть отнесены к аппаратному I2C интерфейсу Arduino.

Пример:

 zabbix_get -s 192.168.0.1 -k "PCA9685.write[18,19,0x40,5,1234,3210]"
 1
 **На канале #5 ШИМ-кнтроллера устанавливается режим: переход в HIGH на тике #1234 и в LOW на тике #3210**
PCF8574.LCDPrint[sdaPin, sclPin, i2cAddress, lcdBacklight, lcdType, data]

Параметры:

  • sdaPin - цифровое обозначение пина SDA шины I2C;
  • sclPin - цифровое обозначение пина SCL шины I2C;
  • i2cAddress - I2C адрес устройства;
  • lcdBacklight - состояние подсветки индикатора, '0' - выключена, иное - включена;
  • lcdType - тип индикатора: 801, 1601, 802, 1202, 1602, 2002, 2402, 4002, 1604, 2004, 4004;
  • data - данные, содержащие коды символов, предназначенные для отображения на индикаторе и команды управления. Могут быть заданы как в ASCII так и в шестнадцатеричной (HEX) форме. Подробное описание ниже.

Действие: на символьном дисплее, построенном на базе чипа HD44780 (или совместимом с ним), который подключен через I2C экспандер PCF8574, отображаются символы, находящиеся в data. При обнаружении в data команд управления, выполняются соответствующие действия. Обнаруженные представления символов в шестнадцатеричной форме перед выводом преобразуются в ASCII-код (см. таблицу символов индикатора).

Поддерживаемые команды HD44780:

  • \x00 - отключить дисплей. Для включения необходимо послать любую другую HD44780 команду;
  • \x01 - очистить экран;
  • \x02 - переместить курсор на начальную позицию (левую верхнюю);
  • \x04 - выводить символы справа налево (анимированные примеры можно увидеть на http://www.dinceraydin.com/lcd/commands.htm);
  • \x05 - выводить символы справа налево с одновременным сдвигом экрана;
  • \x06 - выводить символы слева направо (значение по умолчанию);
  • \x07 - выводить символы слева направо с одновременным сдвигом экрана;
  • \x08 - скрыть данные на экране не очищая его;
  • \x0C - выключить видимый курсор;
  • \x0E - включить видимый курсор в форме подчеркивания;
  • \x0F - включить видимый курсор в форме мигающего черного знакоместа;
  • \x10 - сдвинуть курсор влево на одно знакоместо;
  • \x14 - сдвинуть курсор вправо на одно знакоместо;
  • \x18 - сдвинуть экран влево на одно знакоместо;
  • \x1E - сдвинуть экран вправо на одно знакоместо.

Дополнительные команды:

  • \x03 - мигнуть подсветкой дважды;
  • \\ - вывести обратный слеш '';
  • \" - вывести двойные кавычки;
  • \x09 или \t - вывести четыре пустых знакоместа (упрощенный "tab");
  • \x0A или \n - перевод строки, переход в позицию 0 следующей строки;
  • \x80..\x9F - установка курсора на позицию (N - 0x80). Т.е. 0x80 - установка на позицию 0 (первое знакоместо), \x81 - установка на позицию 1 (второе знакоместо) и т.д.;

Примечание: взаимодействие с устройствами, работающими по шине I2C, реализовано с помощью технологии SoftwareWire, в связи с чем sdaPin / sclPin не обязательно должны быть отнесены к аппаратному I2C интерфейсу Arduino.

Примечание: преобразовать символы из формата ASCII в HEX можно на http://www.asciitohex.com.

Примечание: вы должны установить значение константы constArgsPartSize в src/cfg_tune.h_ в соответствии с предполагаемой длиной параметра data. В противном случае строка будет усечена.

Пример:

zabbix_get -s 192.168.0.1 -k 'PCF8574.LCDPrint[18,19,0x20,1,2002,"\x06\x01\x0FHello\n\tJust \"testing\""]'
1
\x06                  \x01             \x0F            Hello   \n              \t         Just \" testing  \"
вывод слева направо   очистка экрана   Мигающий блок   Hello   перевод строки  табуляция  Just "  testing  "  
ws2812.sendRaw[dataPin, compressionType, data]

Параметры:

  • dataPin - цифровое обозначение пина вывода данных (DIN);
  • compressionType - метод сжатия (0 - без сжатия; 1 - сжатие типа 'repeat', каждый символ удваивается, например FD3 => FFDD33);
  • data - данные для вывода.

Действие: на адресуемый светодиодный модуль (модули) WS2812 отправляется значение(я), определяющее его(их) цвет.

Возвращаемое значение: при удачном выполнении - '1', в противном случае - '0'.

Примечание: параметр data задается в шестнадцатеричной форме (с префиксом 0x) и кодирует конечный цвет модуля в GRB порядке группой из шести (трех) HEX чисел - два (одно) числа (о) на каждый цвет. Количество групп должно быть равно количеству подключенных модулей.

 zabbix_get -s 192.168.0.1 -k "ws2812.sendraw[5,0,0x00FF00 001100 0000FF 000011 FF0000 110000 003333 330033]"
 1
 zabbix_get -s 192.168.0.1 -k "ws2812.sendraw[5,1,0x0F0 010 00F 001 F00 100 033 303]"
 1
 **Модули отображают заданные цвета - максимально красный, минимально красный, максимально синий, минимально синий и т.д.), первая команда не использует сжатие, вторая - использует**

Самостоятельные устройства

ups.apcSmart[rxPin, txPin, command]
  • rxPin - цифровое обозначение пина (входа) приема данных;
  • txPin - цифровое обозначение пина (выхода) передачи данных;
  • command - команда протокола APC SmartUPS;

Действие: на подключенный блок бесперебойного питания по протоколу APC SmartUPS отправляется запрос или команда.

Возвращаемое значение: возвращается значение метрики или выполняется соответствующее действие (например - запускается тестирование или UPS отключается). При удачном выполнении команды возвращается - '1', при неудачном - '0', в случае возникновения ошибки приемо-передачи - ее код, заданный в макро-определении MSG_DEVICE_ERROR_TIMEOUT.

Примечание: взаимодействие с устройствами, работающими по шине UART, реализовано с помощью технологии SoftSerial, в связи с чем rxPin / txPin не обязательно должны быть отнесены к аппаратному UART Arduino.

Примечание: блок бесперебойного питания должен быть подключен к Arduino через соответствующий преобразователь уровней сигналов, такой, как, например, MAX232.

Примечание: команды протокола APC SmartUPS могут быть найдены на странице networkupstools - APC’s smart protocol. Допускается использование шестнадцатеричной формы (с префиксом 0x) для параметра command.

 zabbix_get -s 192.168.0.1 -k "ups.apcsmart[2,3,0x6E]"
 AS0607112014
 **возвращается серийный номер APC SmartUPS**
ups.megatec[rxPin, txPin, command, fieldNumber]
  • rxPin - цифровое обозначение пина (входа) приема данных;
  • txPin - цифровое обозначение пина (выхода) передачи данных;
  • command - команда протокола Megatec;
  • fieldNumber - номер поля, в ответе UPS, которое должно быть возвращено пользователю;

Действие: на подключенный блок бесперебойного питания по протоколу Megatec отправляется запрос или команда.

Возвращаемое значение: возвращается значение метрики из поля fieldNumber ответа, возвращенного UPS. В случае возникновения ошибки приемо-передачи - ее код, заданный в макро-определении MSG_DEVICE_ERROR_TIMEOUT.

Примечание: взаимодействие с устройствами, работающими по шине UART, реализовано с помощью технологии SoftSerial, в связи с чем rxPin / txPin не обязательно должны быть отнесены к аппаратному UART Arduino.

Примечание: блок бесперебойного питания должен быть подключен к Arduino через соответствующий преобразователь уровней сигналов, такой, как, например, MAX232.

Примечание: команды протокола Megatec могут быть найдены на странице networkupstools - Megatec Protocol information. Допускается использование шестнадцатеричной формы (с префиксом 0x) для параметра command.

 zabbix_get -s 192.168.0.1 -k "ups.megatec[2,3,Q1,0]"
 208.4
 **возвращается значение поля I/P voltage из ответа на команду Q1**
pzem004.voltage[rxPin, txPin, address]
pzem004.current[rxPin, txPin, address]
pzem004.power[rxPin, txPin, address]
pzem004.energy[rxPin, txPin, address]
  • rxPin - цифровое обозначение пина (входа) приема данных;
  • txPin - цифровое обозначение пина (выхода) передачи данных;
  • address - адрес устройства. Задается в виде 4-байтного числа, записанного в шестнадцатеричной (HEX) форме. Адрес по умолчанию: 0xC0A80101 (192.168.1.1);

Действие: с вольт-ампер-ваттметра Peacefair PZEM-004 считывается значение метрики - напряжение (voltage), сила тока (current), потребляемая мощность (power) или накопленный итог потребленной мощности с момента обнуления (energy).

Возвращаемое значение: возвращается значение метрики. В случае возникновения ошибки - ее код.

Примечание: взаимодействие с устройствами, работающими по шине UART, реализовано с помощью технологии SoftSerial, в связи с чем rxPin / txPin не обязательно должны быть отнесены к аппаратному UART Arduino.

Примечание: TTL-уровень Peacefair PZEM-004 - 5V, поэтому при применении платформы Arduino с напряжением питания 3.3V линии премопередачи должны быть согласованы с помощью соответствующих схем.

Примечание: Обратите внимание на то, что аппаратные выводы RX/TX микроконтроллера в Arduino имеют ограничительные резисторы величиной 1кОм. Видится разумным применение таких же мер защиты для иных выводов, используемых для соединения с устройством PZEM-004.

Примечание: Допускается параллельное подключение нескольких устройств PZEM004 к одним и тем же rxPin, txPin при следующей модификации: у всех экземпляров, за исключением одного, должны быть удалены R15 в цепях оптрона вывода RX. Устройства должны иметь разные значения параметра address, которые могут быть заданы предварительно при помощи команды pzem004.setAddr[]. Без подобной модификации допустимо объединение линий RX всех экземпляров устройства на один txPin и разнесение линий TX по нескольким rxPin. В этом случае смены адресов устройств не требуется.

 zabbix_get -s 192.168.0.1 -k "PZEM004.voltage[5,6]"
 226.3
 zabbix_get -s 192.168.0.1 -k "PZEM004.voltage[7,6]"
 221.8
pzem004.setAddr[rxPin, txPin, address]
  • rxPin - цифровое обозначение пина (входа) приема данных;
  • txPin - цифровое обозначение пина (выхода) передачи данных;
  • address - новый адрес устройства. Задается в виде 4-байтного числа, записанного в шестнадцатеричной (HEX) форме. Адрес по умолчанию: 0xC0A80101 (192.168.1.1);

Действие: в EEPROM вольт-ампер-ваттметра Peacefair PZEM-004 записывается новый адрес.

Возвращаемое значение: при удачном выполнении - '1', в противном случае - '0'.

Примечание: взаимодействие с устройствами, работающими по шине UART, реализовано с помощью технологии SoftSerial, в связи с чем rxPin / txPin не обязательно должны быть отнесены к аппаратному UART Arduino.

Примечание: TTL-уровень Peacefair PZEM-004 - 5V, поэтому при применении платформы Arduino с напряжением питания 3.3V линии премопередачи должны быть согласованы с помощью соответствующих схем.

Примечание: команда установки адреса направляется всем устройствам, подключенным к одному SoftSerial-порту.

 zabbix_get -s 192.168.0.1 -k "PZEM004.setAddr[5,6,0xC0A80105]"
 1
 zabbix_get -s 192.168.0.1 -k "PZEM004.voltage[5,6,0xC0A80105]"
 219.4

Иное

AT24CXX.write[sdaPin, sclPin, i2cAddress, cellAddress, data]
  • sdaPin - цифровое обозначение пина SDA шины I2C;
  • sclPin - цифровое обозначение пина SCL шины I2C;
  • i2cAddress - I2C адрес устройства;
  • cellAddress - адрес начальной ячейки;
  • data - данные, записываемые в EEPROM, задаются в шестнадцатеричной форме.

Возвращаемое значение: при удачном выполнении - '1', в противном случае - '0'.

Действие: в EEPROM, подключенный по шине I2C, начиная с cellAddress записываются данные, полученные преобразованием из строки data, записанной в шестнадцатеричной форме (с префиксом 0x). Размер строки ограничен размером внутреннего буфера (см constArgsPartSize в src/cfg_tune.h).

Примечание: взаимодействие с устройствами, работающими по шине I2C, реализовано с помощью технологии SoftwareWire, в связи с чем sdaPin / sclPin не обязательно должны быть отнесены к аппаратному I2C интерфейсу Arduino.

 zabbix_get -s 192.168.0.1 -k "AT24CXX.write[18,19,0x56,1,0x12 13 23 10 14 02 A8]"
 1
AT24CXX.read[sdaPin, sclPin, i2cAddress, cellAddress, numCells]
  • sdaPin - цифровое обозначение пина SDA шины I2C;
  • sclPin - цифровое обозначение пина SCL шины I2C;
  • i2cAddress - I2C адрес устройства;
  • cellAddress - адрес начальной ячейки;
  • numCells - количество считываемых ячеек (байт).

Возвращаемое значение: при удачном выполнении - строка данных в шестнадцатеричной форме, в противном случае - '0'.

Действие: из EEPROM, подключенного по шине I2C, начиная с cellAddress считываются numCells байт данных, которые затем возвращаются пользователю в виде строки в шестнадцатеричной форме (с префиксом 0x).

Примечание: взаимодействие с устройствами, работающими по шине I2C, реализовано с помощью технологии SoftwareWire, в связи с чем sdaPin / sclPin не обязательно должны быть отнесены к аппаратному I2C интерфейсу Arduino.

 zabbix_get -s 192.168.0.1 -k "AT24CXX.read[18,19,0x56,1,7]"
 0x121323101402A8

Интеграция с системой мониторинга Zabbix

Zabbuino не имеет никаких отличий от стандартного агента Zabbix в вопросе интеграции с системой мониторинга при соблюдении всех оговоренных ранее принципов взаимодействия:

  • имена команд Zabbuino являются именами ключей агента Zabbix;
  • запросы должны быть разнесены во времени насколько это возможно;
  • значения метрик не должны запрашиваться с избыточной частотой;
  • таймауты ожидания обработки сетевого соединения в настройках Zabbix-сервера и, возможно, операционной системы, должны быть увеличены при возникновении отвергнутых Zabbuino соединений.

Внимание Zabbuino не поддерживает режим Zabbix agent (active).

Подробную инструкцию по настройке элементов данных, триггеров и других компонентов Zabbix можно найти в официальной документации.

Интеграция с RRDTool

Для небольших инсталляций не требующих активных действий, основанных на значениях метрик датчиков, необязательно использовать полноценную систему мониторинга. Zabbix вполне может быть заменен несколькими легковесными shell-сценариями, взаимодействующими с RRDTool и выполняющимися на одноплатном компьютере типа Raspberry Pi, Orange Pi и т.п.

Пример обновления предварительно созданной RRD для хранения параметров окружающей среды в спальной комнате. Данный сценарий необходимо периодически вызывать, например, с помощью cron.

#!/bin/bash
# Получаем температуру с датчика DHT22, подключенного к пину D6
BEDROOM_HUMIDITY = `echo "DHT.Humidity[6,22]" | nc -w 2 192.168.0.1 10050 | tr -d '\r\n'`
# Интервал между запросами к DHT не должен быть короче, чем 1-2 сек. 
# Поэтому между двумя запросами к DHT опросим сенсор освещения
BEDROOM_LIGHT = `echo "BH1750.light[4,5,0x23,0x10]" | nc -w 2 192.168.0.1 10050 | tr -d '\r\n'`
# Получаем температуру с DHT22
BEDROOM_TEMPERATURE = `echo "DHT.Temperature[6,22]" | nc -w 2 192.168.0.1 10050 | tr -d '\r\n'`
# Запись значений в базу данных
rrdtool update stat_bedroom.rrd N:${BEDROOM_HUMIDITY}:${BEDROOM_TEMPERATURE}:${BEDROOM_LIGHT}

Советы

Как узнать адрес/пароль устройства

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

Clone this wiki locally