コード例 #1
0
ファイル: EventProcessor.cs プロジェクト: danvy/sigfox
 private DecodedMessage DecodeMessage(RawMessage raw)
 {
     var decoded = new DecodedMessage();
     decoded.AvgSignal = raw.AvgSignal;
     decoded.Data = raw.Data;
     decoded.Device = raw.Device;
     decoded.Duplicate = raw.Duplicate;
     decoded.Latitude = raw.Latitude;
     decoded.Longitude = raw.Longitude;
     decoded.Rssi = raw.Rssi;
     decoded.SeqNumber = raw.SeqNumber;
     decoded.Signal = raw.Signal;
     decoded.Station = raw.Station;
     decoded.Time = raw.Time;
     var d = StringToByteArray(raw.Data);
     decoded.Mode = (Mode)(d[0] & 0x7);
     decoded.Periode = (Periode)((d[0] & 0x18) >> 3);
     decoded.Type = (FrameType)((d[0] >> 4) & 0x3);
     decoded.Battery = (((d[0] >> 7) * 16) + (d[1] >> 4) + 54) / 20.0;
     decoded.Temperature = ((d[1] & 0xF) * 64 - 200) / 10.0;
     if ((decoded.Type == FrameType.Regular) && (decoded.Mode == Mode.Light))
     {
         var valeur = (d[2] << 2) >> 2;
         var multi = d[2] >> 6;
         switch (multi)
         {
             case 0:
                 multi = 1;
                 break;
             case 1:
                 multi = 8;
                 break;
             case 2:
                 multi = 64;
                 break;
             case 3:
                 multi = 2014;
                 break;
         }
         decoded.Light = Convert.ToSingle(multi * valeur * 0.01);
     }
     //Door
     else if ((decoded.Type == FrameType.Regular) && (decoded.Mode == Mode.Door))
     {
         //
     }
     else
     {
         decoded.Temperature = (((d[1] >> 4) << 6) + (d[2] & 0x3F) - 200) / 8.0;
         decoded.ILS = (d[2] & 0x20) != 0;
     }
     //Button
     if (decoded.Mode == Mode.Button)
     {
         decoded.Version = new Version(string.Format("{0}.{1}", d[3] >> 4, d[3] & 0xF));
     }
     //Temperature
     else if (decoded.Mode == Mode.TemperatureHumidity)
     {
         decoded.Humidity = d[3] * 0.5;
     }
     else
     {
         decoded.AlertCount = Convert.ToInt32(d[3]);
     }
     return decoded;
 }
コード例 #2
0
ファイル: EventProcessor.cs プロジェクト: danvy/sigfox
 private async Task StoreInDatabaseAsync(DecodedMessage message)
 {
     if (sqlCommand == null)
         return;
     sqlCommand.Parameters["@Device"].Value = message.Device;
     sqlCommand.Parameters["@Data"].Value = message.Data;
     sqlCommand.Parameters["@Mode"].Value = message.Mode;
     sqlCommand.Parameters["@Periode"].Value = message.Periode;
     sqlCommand.Parameters["@FrameType"].Value = message.Type;
     sqlCommand.Parameters["@Battery"].Value = message.Battery;
     sqlCommand.Parameters["@Temperature"].Value = message.Temperature;
     sqlCommand.Parameters["@Humidity"].Value = message.Humidity;
     sqlCommand.Parameters["@ILS"].Value = message.ILS;
     sqlCommand.Parameters["@Light"].Value = message.Light;
     sqlCommand.Parameters["@Version"].Value = message.Version.ToString();
     sqlCommand.Parameters["@AlertCount"].Value = message.AlertCount;
     sqlCommand.Parameters["@TimeStamp"].Value = message.Time;
     sqlCommand.Parameters["@Duplicate"].Value = message.Duplicate;
     sqlCommand.Parameters["@Signal"].Value = message.Signal;
     sqlCommand.Parameters["@Station"].Value = message.Station;
     sqlCommand.Parameters["@AvgSignal"].Value = message.AvgSignal;
     sqlCommand.Parameters["@Latitude"].Value = message.Latitude;
     sqlCommand.Parameters["@Longitude"].Value = message.Longitude;
     sqlCommand.Parameters["@Rssi"].Value = message.Rssi;
     sqlCommand.Parameters["@SeqNumber"].Value = message.SeqNumber;
     await sqlCommand.ExecuteNonQueryAsync();
 }
コード例 #3
0
ファイル: EventProcessor.cs プロジェクト: danvy/sigfox
        private async Task CheckAlertAsync(DecodedMessage message)
        {
            if (cacheDatabase == null)
                return;
            string json = await cacheDatabase.StringGetAsync("message-" + message.Device);
            if (json == null)
                return;
            DecodedMessage cached = null;
            try
            {
                cached = JsonConvert.DeserializeObject<DecodedMessage>(json);
            }
            catch
            {

            }
            if (cached == null)
                return;
            if ((message.Type == FrameType.Alert) || (message.Mode == Mode.Button) || (Math.Abs(message.Temperature - cached.Temperature) > 10))
            {
                var alert = new AlertMessage();
                alert.Device = message.Device;
                var alertMessage = JsonConvert.SerializeObject(alert);
                await hubClient.SendAsync(new EventData(Encoding.UTF8.GetBytes(alertMessage)));
            }
        }