Пример #1
0
            public override INode Factory(IFrame frame, int formerId)
            {
                var dc    = new AbsolutDeviceCommand(frame.Payload);
                var parse = System.Text.Encoding.Default.GetString(frame.Payload).Split(',');
                var dev   = DataProvider.FindByIMEI(parse[1], this);

                return(dev);
            }
Пример #2
0
            public override IMessage Decode(IFrame frame)
            {
                var dc    = new AbsolutDeviceCommand(frame.Payload);
                var parse = System.Text.Encoding.Default.GetString(frame.Payload).Split(',');
                var inode = DataProvider.FindByIMEI(parse[1], this);

                if (inode == null)
                {
                    inode      = new Parser();
                    inode.Imei = parse[1];
                }
                var dispositivo = DataProvider.GetDispositivo(inode.Id);

                if (dispositivo == null)
                {
                    dispositivo = new Dispositivo();
                }
                //T1 Temperatura 25ºC
                var message =
                    M2mMessageSender.Create(dispositivo, new M2mMessageSaver(new DAOFactory())).AddCommand("2850");

                //0   Encabezado del paquete
                //1   IMEI del equipo
                //2   Número de paquete            string[] parse = _command.Split(new[] { "<", ">" }, StringSplitOptions.RemoveEmptyEntries);
                //3   Evento que generó el paquete            var eventoLength = (_command.Length == 48 || _command.Length == 46 ? 3 : 2);
                //4   Nivel de señal GSM. (Entre 0 y 31)            var evento = (byte)0;
                //5   U1 en voltios            var hdop = (byte)0;
                //6   I1 en Ampere por 10. (10 equivale a 1.0 Amp)            var entradas = Convert.ToByte("0", 16);
                //7   U2 en voltios            var time = DateTimeUtils.SafeParseFormat(parse[10] + parse[2].Split('.')[0], "ddMMyyHHmmss");
                //8   I2 en Ampere por 10. (27 equivale a 2.7 Amp)
                //9   D1 Entrada DIN1 inactiva            /*
                //10  D2 Entrada D2 activa                Latitude: DD MM.MMMM
                //11  T1 Temperatura 25ºC               T1:valor,T2:valor
                //12  T2 Temperatura 23ºC
                //13  T3 Sensor NTC3 abierto
                //14  T4 Sensor NTC4 en cortocircuito
                //15  Latitud
                //16  Longitud
                //17  Modelo y versión de firmware del equipo             096*42.858868
                //18  Fecha y hora de la generación del evento GMT0             */
                //19  Fin de paquete

                //  T1:valor,T2:valor

                //11  T1 Temperatura 25ºC               T1:valor,T2:valor
                //12  T2 Temperatura 23ºC
                //13  T3 Sensor NTC3 abierto
                //14  T4 Sensor NTC4 en cortocircuito

                message.AddParameter("T1", parse[11]);
                message.AddParameter("T2", parse[12]);
                message.AddParameter("U1", parse[5]);
                message.AddParameter("I1", parse[6]);
                // message.Send();
                // IMessage mensaje = (M2mMessageSender)message;
                // return new UserMessage(dev.Id, dev.IdNum);



                //Tn;msgid;idmovil;Temperatura;aa/dd/mm,hh:mm:ss; número de sensor @checksum
                //??;parse[3];parse[1];parse[11];parse[18];

                var lowCmd  = parse[11];
                var subcode = MessageIdentifier.TemperatureInfo;
                //switch (lowCmd)
                //{
                //    case '0': //login
                //        // return ParseTLogin(partes, node);
                //    case '1': //Evento de medición.
                //        subcode = MessageIdentifier.TemperatureInfo;
                //        break;
                //    case '2': //Evento de desconexión del sensor.
                //        subcode = MessageIdentifier.TemperatureDisconected;
                //        break;
                //    case '3': //Evento de desconexión de la alimentación principal del sensor
                //        subcode = MessageIdentifier.TemperaturePowerDisconected;
                //        break;
                //    case '4': //Evento de reconexión de la alimentación principal del sensor
                //        subcode = MessageIdentifier.TemperaturePowerReconected;
                //        break;
                //    case '5': //Evento descongelamiento de heladera (Botón oprimido)
                //        subcode = MessageIdentifier.TemperatureThawingButtonPressed;
                //        break;
                //    case '6': //Evento de fin de descongelamiento de heladera (Botón liberado)
                //        subcode = MessageIdentifier.TemperatureThawingButtonUnpressed;
                //        break;
                //        //apertura de puerta 2851
                //        //
                //    case '7': //Evento de puerta abierta
                //        subcode = MessageIdentifier.DoorOpenned;
                //        break;
                //    case '8': //Evento de puerta cerrada
                //        subcode = MessageIdentifier.DoorClosed;
                //        break;
                //}

                IMessage msg;
                var      mid = Convert.ToUInt64(parse[2]);

                var dt = DateTimeUtils.SafeParseFormat(parse[18], "yyyy-MM-dd HH:mm:ss");
                MessageIdentifier code;

                switch (subcode)
                {
                case MessageIdentifier.TemperatureInfo:
                    code = MessageIdentifier.TelemetricData;
                    break;
                //debe enviarlos como M2M sino se descartan por dispositivo no asignado!
                //case MessageIdentifier.DoorClosed:
                //case MessageIdentifier.DoorOpenned:
                //code = MessageIdentifier.GenericMessage;
                //break;
                //                        trama
                //2850
                //TelemetricData = 2850,
                //apertura de puerta
                //2851
                //TelemetricEvent = 2851,

                default:
                    code = MessageIdentifier.TelemetricEvent;
                    break;
                }
                var msg_ = subcode.FactoryEvent(code, inode.Id, mid, null, dt, null, null);

                //5   U1 en voltios            var hdop = (byte)0;
                //6   I1 en Ampere por 10. (10 equivale a 1.0 Amp)            var entradas = Convert.ToByte("0", 16);
                //7   U2 en voltios            var time = DateTimeUtils.SafeParseFormat(parse[10] + parse[2].Split('.')[0], "ddMMyyHHmmss");
                //8   I2 en Ampere por 10. (27 equivale a 2.7 Amp)

                msg_.SensorsDataString = "U1:" + parse[5] + ",I1:" + parse[6] + ",T1:" + parse[11] + ",T2:" + parse[12] + ",T3:" + parse[13] + ",T4:" + parse[14];
                msg = msg_;
                var ackStr = dc.BuildAck().ToString(true);

                /*$B,353234020014377,ACK=12,$E*/
                return(msg.AddStringToSend(parse[0] + "," + parse[1] + ",ACK=" + parse[2] + "," + parse[19]));

                /*return
                 *  msg.AddStringToSend(String.Format(@"RT{0};{1:D3};{2:D5};{3:yy/MM/dd,HH:mm:ss}", lowCmd, mid,
                 *      inode.Id, DateTime.UtcNow));*/
            }