Вместо Ethernet -> GPRS ... Как быть?

Deniska407
Offline
Зарегистрирован: 03.11.2014

Коллеги, приветствую!

Есть примитивнейший девайс: в зависимости от результата чтения аналогового входа 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 каналу?

Спасибо!

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

Завернуть в HTTP и сделать на сервере программу которая ловит HTTP и посылает SNMP, очевидно же. Цена вопроса - компьютер на который встанет какая-то система и вебсервер с скриптхостом (пхп, node.js, путхон и т п). Ящитаю, разбитого ноута на Win XP с авито, за три тысячи рублей достаточно.

Алсо, если физический сервер уже есть и там работает скриптхост, ничто не мешает сделать эту прокладку прямо на нём. Но если это какой-то станок, то да, положение меняется - нужен некто посередине.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Переход с Ethernet на GSM
обычно делается с помощью коробочки
которая зовётся GSM router.....