Управление на PicoIP с помощта на SNMP и Shell скриптове

PicoIP Shell lib(библиотека)

Въведение

Управлението на микроелектроника и IoT устройства като PicoIP става все по-важно в съвременните системи за автоматизация и мониторинг. Използването на протоколите за управление на мрежи като SNMP (Simple Network Management Protocol) предлага лесен и стандартизиран начин за достъп и контрол на такива устройства. В тази статия ще разгледаме две библиотеки, написани на Bash скрипт, които използват SNMP за управление на входове и изходи на PicoIP. Ще обсъдим как да инсталирате SNMP на Linux, както и как да използвате тези библиотеки с Orange Pi и Raspberry Pi за управление на вашите устройства. Понеше сме фенове на Arduino средата, ние сме написали библиотеките така, че да прочитате и изпращате данни към PicoIP като на Arduino: 

  1. digitalWrite
  2. digitalRead
  3. analogRead

Инсталиране на SNMP на Linux

За да използвате SNMP на вашия Orange Pi или Raspberry Pi, първо трябва да инсталирате необходимите пакети. Може да прочетете повече за това тук. Следвайте стъпките по-долу:

Актуализирайте списъка с пакети:

sudo apt-get update

Инсталиране на SNMP върху Linux:

sudo apt-get install snmp

Основни SNMP команди

Преди да разгледаме предоставените от нас библиотеки за управление на PicoIP с Bash скриптове, нека разгледаме основните SNMP команди, които можете да използвате за директен достъп до цифровите и аналоговите входоизходи на устройството. Тези команди ви позволяват да четете и записвате стойности към различните пинове на JP3, JP4, както и да извличате аналогови данни от ADC входовете. Например, чрез използване на snmpset команда можете да зададете висока или ниска стойност на конкретен пин на JP3 или JP4, а с snmpget да прочетете стойността на аналоговия вход. Ето някои примери за тези команди, които могат да бъдат изпълнени директно в терминала с предварително зададен IP адрес на PicoIP устройството.

ip=192.168.100.9 # Може да замените "$ip" в командите отдолу с IP на вашето PicoIP

                         -----------       JP3       -----------------

snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.1.1.0 i 1 # digitalWrite(HIGH) JP3 - pin 1 
snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.1.1.0 i 0 # digitalWrite(LOW)  JP3 - pin 1

snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.1.2.0 i 1 # digitalWrite(HIGH) JP3 - pin 2
snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.1.2.0 i 0 # digitalWrite(LOW)  JP3 - pin 2

snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.1.3.0 i 1 # digitalWrite(HIGH) JP3 - pin 3
snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.1.3.0 i 0 # digitalWrite(LOW)  JP3 - pin 3

snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.1.4.0 i 1 # digitalWrite(HIGH) JP3 - pin 4
snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.1.4.0 i 0 # digitalWrite(LOW)  JP3 - pin 4

snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.1.5.0 i 1 # digitalWrite(HIGH) JP3 - pin 5
snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.1.5.0 i 0 # digitalWrite(LOW)  JP3 - pin 5

snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.1.6.0 i 1 # digitalWrite(HIGH) JP3 - pin 6
snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.1.6.0 i 0 # digitalWrite(LOW)  JP3 - pin 6

snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.1.7.0 i 1 # digitalWrite(HIGH) JP3 - pin 7
snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.1.7.0 i 0 # digitalWrite(LOW)  JP3 - pin 7

snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.1.8.0 i 1 # digitalWrite(HIGH) JP3 - pin 8
snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.1.8.0 i 0 # digitalWrite(LOW)  JP3 - pin 8

                        -------------      JP 4        ---------------- 
												
snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.2.1.0 i 1 # digitalWrite(HIGH)  JP4 - pin 1
snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.2.1.0 i 0 # digitalWrite(LOW)   JP4 - pin 1

snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.2.2.0 i 1 # digitalWrite(HIGH)  JP4 - pin 2
snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.2.2.0 i 0 # digitalWrite(LOW)   JP4 - pin 2

snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.2.3.0 i 1 # digitalWrite(HIGH)  JP4 - pin 3
snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.2.3.0 i 0 # digitalWrite(LOW)   JP4 - pin 3

snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.2.4.0 i 1 # digitalWrite(HIGH)  JP4 - pin 4
snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.2.4.0 i 0 # digitalWrite(LOW)   JP4 - pin 4

snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.2.5.0 i 1 # digitalWrite(HIGH)  JP4 - pin 5
snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.2.5.0 i 0 # digitalWrite(LOW)   JP4 - pin 5

snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.2.6.0 i 1 # digitalWrite(HIGH)  JP4 - pin 6
snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.2.6.0 i 0 # digitalWrite(LOW)   JP4 - pin 6

snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.2.7.0 i 1 # digitalWrite(HIGH)  JP4 - pin 7
snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.2.7.0 i 0 # digitalWrite(LOW)   JP4 - pin 7

snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.2.8.0 i 1 # digitalWrite(HIGH)  JP4 - pin 8
snmpset -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.2.8.0 i 0 # digitalWrite(LOW)   JP4 - pin 8

                     ----------------      ADC    ----------------------
					 
snmpget -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.3.1.0    # ADC 1    връща integer 0-1023
snmpget -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.3.2.0    # ADC 2    връща integer 0-1023
snmpget -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.3.3.0    # ADC 3    връща integer 0-1023
snmpget -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.3.4.0    # ADC 4    връща integer 0-1023
snmpget -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.3.5.0    # ADC 5    връща integer 0-1023
snmpget -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.3.6.0    # ADC 6    връща integer 0-1023
snmpget -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.3.7.0    # ADC 7    връща integer 0-1023
snmpget -v1 -c private $ip 1.3.6.1.4.1.19865.1.2.3.8.0    # ADC 8    връща integer 0-1023

Ако не знаете какви са портовете на PicoIP или какви входоизгоди (pinout) има, може да прочетете нашите ревюта за PicoIP v1.2 или PicoIP v2. Там ще се запознаете по-обстойно с тези две платформи, както и ще наметите техните “pinout-и”.

PicoIP SNMP Shell библиотеки

Предлагаме две версии на библиотека за управление на PicoIP. Първата версия използва статично зададен IP адрес, докато втората версия позволява задаване на IP адрес като параметър на библиотеката.

PicoIP Shell библиотека с фиксиран IP адрес

#!/bin/bash

# PicoIP SNMP Shell library

# "port" is 1(JP3) or 2(JP4) // "pin" 1-8   --->   example: digitalWrite 1 8 1
# digitalWrite(port , pin , value) 

# "port" is 1(JP3) or 2(JP4) // "pin" 1-8    --->   example: digitalRead 1 8
# digitalRead(port, pin) 

# "pin" is from 1-8(JP5)    --->    example: analogRead 2
# analogRead(pin) 

# Може да се извика в Shell скрипт и в Terminal с командата "source".
# source PicoIP_Shell_Lib.sh

# След извикването в терминала може директно да се използват командите "digitalRead , digitalWrite или analogRead"

# Configuration
ip_address="192.168.100.9"
community="private"

# digitalWrite function
digitalWrite() {
    local header=$1
    local pin=$2
    local value=$3
    local oid="1.3.6.1.4.1.19865.1.2.${header}.${pin}.0"
    local command="snmpset -v1 -Oqv -c ${community} ${ip_address} ${oid} i ${value}"
    $command
}

# digitalRead function
digitalRead() {
    local header=$1
    local pin=$2
    local oid="1.3.6.1.4.1.19865.1.2.${header}.${pin}.0"
    local command="snmpget -v1 -Oqv -c ${community} ${ip_address} ${oid}"
    local result=$(eval $command)
    echo $result
}

# analogRead function
analogRead() {
    local pin=$1
    local oid="1.3.6.1.4.1.19865.1.2.3.${pin}.0"
    local command="snmpget -v1 -Oqv -c ${community} ${ip_address} ${oid}"
    local result=$(eval $command)
    echo $result
}

PicoIP SNMP Shell библиотека с параметър за IP адрес

#!/bin/bash

# PicoIP SNMP Shell library with IP address parameter

# "port" is 1(JP3) or 2(JP4) // "pin" 1-8   --->   example: digitalWrite 192.168.100.9 1 8 1
# digitalWrite(ip , port , pin , value) 

# "port" is 1(JP3) or 2(JP4) // "pin" 1-8    --->   example: digitalRead 192.168.100.9 1 8
# digitalRead(ip , port, pin) 

# "pin" is from 1-8(JP5)    --->    example: analogRead 192.168.100.9 2
# analogRead(ip , pin)
 
# Може да се извика в Shell скрипт и в Terminal с командата "source".
# source PicoIP_Shell_Lib.sh

# След извикването в терминала може директно да се използват командите "digitalRead , digitalWrite или analogRead"

# Configuration
community="private"

# digitalWrite function
digitalWrite() {
    local ip_address=$1
    local header=$2
    local pin=$3
    local value=$4
    local oid="1.3.6.1.4.1.19865.1.2.${header}.${pin}.0"
    local command="snmpset -v1 -Oqv -c ${community} ${ip_address} ${oid} i ${value}"
    $command
}

# digitalRead function
digitalRead() {
    local ip_address=$1
    local header=$2
    local pin=$3
    local oid="1.3.6.1.4.1.19865.1.2.${header}.${pin}.0"
    local command="snmpget -v1 -Oqv -c ${community} ${ip_address} ${oid}"
    local result=$(eval $command)
    echo $result
}

# analogRead function
analogRead() {
    local ip_address=$1
    local pin=$2
    local oid="1.3.6.1.4.1.19865.1.2.3.${pin}.0"
    local command="snmpget -v1 -Oqv -c ${community} ${ip_address} ${oid}"
    local result=$(eval $command)
    echo $result
}

Тези две библиотеки ще ви помогнат да управлявате по-лесно устройствата базирани на PicoIP, като двете разработики предоставени от нас:

Примери за използване на библиотеките на PicoIP SNMP Shell

След като сте инсталирали SNMP на вашия Linux базиран компютър, можете да използвате тези библиотеки за управление на PicoIP. Преди да използвате Shell скриптовете, трябва да ги направите изпълними и да им делигирате определени права. Ето няколко примера:

Делегиране на права и изпълнимост на PicoIP SNMP Shell скриптове

# Изпълнимост на скрипта
chmod +x PicoIP_SNMP_lib.sh # Прави скрипта/библиотеката изпълнима

# Делигиране на права
chmod 777 PicoIP_SNMP_lib.sh # Задава пълни права на скрипта/библиотеката

Добавяне на библиотеката в Shell терминал чрез командата source

Можем да комуникираме с PicoIP директно от Shell терминалът, като заредим библиотеките в текущата среда(обвивка) на Shell. Това става с командата “source”.

source PicoIP_SNMP_lib.sh  # добавяне на библиотеката в текущия терминал

Вече можем да използваме примерите показани по-долу директно в терминал на Linux, без да имаме нужда от написването и запаметяването на Shell скриптове.

Запомнете: След излизането от текущата сесия и влизането в нова, вие ще трябва да заредите библиотеката отново за да може да я използвате в Shell terminal.

Управление на дигитален изход на PicoIP:

# Пример за използване на библиотеката с фиксиран IP адрес
# 1 - Порт на дигиталните входоизходи 1 или 2
# 8 - Пин на PicoIP 1-8
# 1 or 0 - 1=on / 0=off
digitalWrite 1 8 1
digitalWrite 1 8 0

# Пример за използване на библиотеката с IP като параметър на функцията
# 192.168.100.9 - IP адреса на PicoIP
# 1 - Порт на дигиталните входоизходи 1 или 2
# 8 - Пин на PicoIP 1-8
# 1 or 0 - 1=on / 0=off
digitalWrite 192.168.100.9 1 8 1
digitalWrite 192.168.100.9 1 8 0

Тази команда ще зададе стойността на пин 8 на порт 1 = Port P3(JP3)” (включено (1) /изключено (0)).

Четене на стойността на дигитален вход на PicoIP:

# Пример за използване на библиотеката с фиксиран IP адрес
# 1 - Порт на дигиталните входоизходи 1 или 2
# 8 - Пин на PicoIP 1-8
digitalRead 1 8

# Пример за използване на библиотеката с IP като параметър на функцията 
# 192.168.100.9 - IP адреса на PicoIP
# 1 - Порт на дигиталните входоизходи 1 или 2
# 8 - Пин на PicoIP 1-8
digitalRead 192.168.100.9 1 8

Тази команда ще прочете текущото състояние на пин 8 на порт 1 = Port P3(JP3).

Четене на аналогова стойност на PicoIP:

# Пример за използване на библиотеката с фиксиран IP адрес
analogRead 2

# Пример за използване на библиотеката с IP като параметър на функцията 
analogRead 192.168.100.9 2

Тази команда ще прочете аналоговата стойност от пин 2 на Port P6(JP5).

Заключение

Тези Bash библиотеки, използващи SNMP протокол, предлагат мощен и лесен начин за управление на входове и изходи на PicoIP. Те са особено полезни за интеграция с IoT решения, като предоставят възможност за контрол на хардуера през мрежата. С помощта на Orange Pi или Raspberry Pi тези PicoIP SNMP Shell библиотеки, можете лесно да автоматизирате и управлявате различни системи, използвайки добре установени и стабилни инструменти като SNMP.