Вместо Ethernet -> GPRS ... Как быть?
- Войдите на сайт для отправки комментариев
Втр, 12/05/2020 - 03:13
Коллеги, приветствую!
Есть примитивнейший девайс: в зависимости от результата чтения аналогового входа 2 и 3
он отправлял на сервер SNMP трапы. Причем очень хорошо отправлял. Но! Случилась беда -
Ethernet'а теперь нет. Совсем. И в ближайшее время не предвидится... Скетч ОЧЕНЬ простой:
// usage BER encoding /* TRAP PDU The example TRAP above MIB file. Community String is "public" Agent's IPAddress is 192.168.1.128 Timestamp is 123456 The operMasterControl OID is in TRAP that has value is 1 +---------+-----------+-------------------------------------------------------------------------------------------------------+-------------------+ | SNMP | Type | 0x30 |Sequence | | message +-----------+-------------------------------------------------------------------------------------------------------+-------------------+ | | Length | 0x82 0x00 0x44 |Length: 68 | | +-----------+-------------------------------------------------------------------------------------------------------+-------------------+ | | Version | 0x02 |Integer | | | | 0x01 |Length: 1 | | | | 0x00 |Value: 0 | | +-----------+-------------------------------------------------------------------------------------------------------+-------------------+ | | Community | 0x04 |Octet String | | | | 0x06 |Length: 6 | | | | 0x70 0x75 0x62 0x6C 0x69 0x63 |Value: public | | +-----------+ -------+------------+---------------------------------------------------------------------------------+-------------------+ | | Data | SNMPv1 | PDU type | 0xA4 |TRAP PDU | | | | PDU +------------+---------------------------------------------------------------------------------+-------------------+ | | | | PDU length | 0x82 0x00 0x35 |Length: 53 | | | | + -----------+---------------------------------------------------------------------------------+-------------------+ | | | | Enterprise | 0x06 |Object identifier | | | | | OID | 0x09 |Length: 9 | | | | | | 0x2B 0x06 0x01 0x04 0x01 0x82 0x99 0x5D 0x00 |Value: | | | | + -----------+---------------------------------------------------------------------------------+-------------------+ | | | | Agent | 0x40 |IpAddress | | | | | Address | 0x04 |Length: 4 | | | | | | 0xC0 0xA8 0x01 0x80 |Value:192.168.1.128| | | | + -----------+---------------------------------------------------------------------------------+-------------------+ | | | | Generic | 0x02 |Integer | | | | | Trap Type | 0x01 |Length: 1 | | | | | | 0x06 |Value: 6 | | | | + -----------+---------------------------------------------------------------------------------+-------------------+ | | | | Specific | 0x02 |Integer | | | | | Trap | 0x01 |Length: 1 | | | | | Number | 0x01 |Value: 1 | | | | + -----------+---------------------------------------------------------------------------------+-------------------+ | | | | Time | 0x43 |TimeTicks | | | | | Stamp | 0x03 |Length: 3 | | | | | | 0x01 0xE2 0x40 |Value: 123456 | | | | + -----------+---------------------------------------------------------------------------------+-------------------+ | | | | VarBind | 0x30 |Sequence | | | | | List +-----------+---------------------------------------------------------------------+-------------------+ | | | | | Length | 0x82 0x00 0x15 |Length: 21 | | | | | +-----------+---------------------------------------------------------------------+ ------------------+ | | | | | VarBind 1 | 0x30 |Sequence | | | | | | +-------+-------------------------------------------------------------+-------------------+ | | | | | | Len 1 | 0x82 0x00 0x11 |Length: 17 | | | | | | +-------+-------------------------------------------------------------+-------------------+ | | | | | | OID 1 | 0x06 |Object identifier | | | | | | | | 0x0C |Length: 12 | | | | | | | | 0x2B 0x06 0x01 0x04 0x01 0x82 0x99 0x5D 0x03 0x01 0x01 0x01 |Value: | | | | | | +-------+-------------------------------------------------------------+-------------------+ | | | | | | Value | 0x02 |Integer | | | | | | | 1 | 0x01 |Length: 1 | | | | | | | | 0x01 |Length: 1 | +---------+-----------+--------+------------+-----------+-------+-------------------------------------------------------------+-------------------+ Data type identifier in SNMP Data type Identifier Note Integer 0x02 Primitive ASN.1 types Octet String 0x04 Primitive ASN.1 types Null 0x05 Primitive ASN.1 types Object identifier 0x06 Primitive ASN.1 types Sequence 0x30 Constructed ASN.1 types IpAddress 0x40 Primitive SNMP application types Counter 0x41 Primitive SNMP application types Gauge 0x42 Primitive SNMP application types TimeTicks 0x43 Primitive SNMP application types Opaque 0x44 Primitive SNMP application types NsapAddress 0x45 Primitive SNMP application types GetRequest PDU 0xA0 Context-specific Constructed SNMP types GetNextRequest PDU 0xA1 Context-specific Constructed SNMP types GetResponse PDU 0xA2 Context-specific Constructed SNMP types SetRequest PDU 0xA3 Context-specific Constructed SNMP types Trap PDU 0xA4 Context-specific Constructed SNMP types http://www.rane.com/note161.html http://www.opencircuits.com/SNMP_MIB_Implementation#Binary_File_Format_.... http://wiki.tcl.tk/16631 */ #include <Ethernet.h> #include <EthernetUdp.h> EthernetUDP Udp; static byte mac[] = {0xCC, 0x1E, 0xCC, 0x1E, 0x00, 0x01}; static byte ip[] = { 192, 168, 1, 34 }; static byte ip_server[4] = {192, 168, 1, 49}; unsigned int port_server=162; char str_value[15]; uint32_t int_value = 0; uint32_t read_value = 0; uint32_t myTimer; uint32_t getA2 = 0; uint32_t getA3 = 0; uint32_t Temp_getA2 = 0; uint32_t Temp_getA3 = 0; uint32_t countA = 0; bool Change75 = 1; bool Change50 = 1; bool Change25 = 1; byte data[64]; void TrapSend(char SendData[], byte RemIP[4], uint32_t vremja) { byte TrapLength[2] = {48, 68+strlen(SendData)}; byte Version[3] = {2, 1, 0}; byte TrapComm[8] = {4, 6, 112, 117, 98, 108, 105, 99}; byte PDUtype[4] = {164, 130, 0, 53+strlen(SendData)}; byte EnterpriseOID[11] = {6, 9, 43, 6, 1, 4, 1, 1, 55, 1, 0}; byte IPdefinida[2] = {64, 4}; byte TrapIP[4] = {192, 168, 1, 34}; // это мой адрес! byte TrapType[3] = {2, 1, 6}; byte extraOID[3] = {2, 1, 1}; byte TimeStamp[2] = {67, 4}; byte VarBind[4] = {48, 130, 0, 20+strlen(SendData)}; byte VarBind1[4] = {48, 130, 0 , 16+strlen(SendData)}; byte OID1[14] = {6, 12, 43, 6, 1, 4, 1, 1, 55, 1, 3, 1, 1, 1}; byte Value1[2] = {4, strlen(SendData)}; int i=0,k=1,temp; byte summ = 0; uint32_t my_vremja; my_vremja = vremja; byte hexadecimalNumber[4] ={0, 0, 0, 0}; while (my_vremja!=0) { temp = my_vremja % 16; if (k == 1) { summ = temp; k = 2; } else { summ = summ + temp*16; hexadecimalNumber[3-i] = summ; i = i + 1; k = 1; } my_vremja = my_vremja / 16; } if (k == 2) { hexadecimalNumber[3-i] = summ; } // отправка трапа Udp.beginPacket(RemIP, 162); Udp.write(TrapLength,2); Udp.write(Version,3); Udp.write(TrapComm,8); Udp.write(PDUtype,4); Udp.write(EnterpriseOID,11); Udp.write(IPdefinida,2); Udp.write(TrapIP,4); Udp.write(TrapType,3); Udp.write(extraOID,3); Udp.write(TimeStamp,2); Udp.write(hexadecimalNumber,4); Udp.write(VarBind,4); Udp.write(VarBind1,4); Udp.write(OID1,14); Udp.write(Value1,2); Udp.write(SendData,strlen(SendData)); Udp.endPacket(); } void setup() { pinMode(A2, INPUT); pinMode(A3, INPUT); Ethernet.begin(mac, ip); Udp.begin(162); getA2 = analogRead(A2); getA3 = analogRead(A3); } void loop() { int_value = millis(); if ((getA2 > 900) && (getA3 > 900) && (Change75 == 1)) { TrapSend("75", ip_server, int_value); Change75 = 0 ; Change50 = 1; Change25 = 1; } if ((getA2 < 900) && (getA3 > 900) && (Change50 == 1)) { TrapSend("50", ip_server, int_value); Change75 = 1 ; Change50 = 0; Change25 = 1; } if ((getA2 < 900) && (getA3 < 900) && (Change25 == 1)) { TrapSend("25", ip_server, int_value); Change75 = 1 ; Change50 = 1; Change25 = 0; } if (millis() - myTimer >= 500) // раз в 0,5 секунд опрашиваем A2 и A3 { myTimer = millis(); Temp_getA2 = Temp_getA2 + analogRead(A2); Temp_getA3 = Temp_getA3 + analogRead(A3); countA++; if (countA == 10) // как опросили 10 раз, считаем среднее занчение ... { getA2 = Temp_getA2 / countA; getA3 = Temp_getA3 / countA; Temp_getA2 = 0; Temp_getA3 = 0; countA = 0; //String stringVar = String(analogRead(A2), DEC); //char charVar[sizeof(stringVar)]; //stringVar.toCharArray(charVar, sizeof(charVar)); //TrapSend(charVar, ip_server, int_value); } } }
собственно вопрос: я хочу перейти с Ethernet на GSM. а как быть с кодом? Как код, который просто отправляет простенькие телеграммы переписать на отправку этих же телеграмм, но по GSM каналу?
Спасибо!
Завернуть в HTTP и сделать на сервере программу которая ловит HTTP и посылает SNMP, очевидно же. Цена вопроса - компьютер на который встанет какая-то система и вебсервер с скриптхостом (пхп, node.js, путхон и т п). Ящитаю, разбитого ноута на Win XP с авито, за три тысячи рублей достаточно.
Алсо, если физический сервер уже есть и там работает скриптхост, ничто не мешает сделать эту прокладку прямо на нём. Но если это какой-то станок, то да, положение меняется - нужен некто посередине.
Переход с Ethernet на GSM
обычно делается с помощью коробочки
которая зовётся GSM router.....