private async Task SendTelemetryAsync(PayloadModel payload) { if (!_whiteList.ContainsKey(payload.device)) return; var device = _whiteList[payload.device]; var connectionString = string.Format("HostName={0}.azure-devices.net;DeviceId={1};SharedAccessKey={2}", _serviceSettings.Host, device.DeviceId, device.Key); _client = DeviceClient.CreateFromConnectionString(connectionString, TransportType.Http1); var MSB = Math.Floor(payload.byte2 / Math.Pow(2, 4)); var LSB = payload.byte3 % 64; var temperature = (((MSB * Math.Pow(2, 6)) + LSB) - 200) / 8; var humidity = payload.byte4 * 0.5; var data = new DeviceMonitoringData(); data.DeviceId = payload.device; data.Temperature = temperature; data.Humidity = humidity; var content = JsonConvert.SerializeObject(data); AddLog("Device=" + payload.device + " Telemetry=" + content); await _client.SendEventAsync(new Message(Encoding.UTF8.GetBytes(content))); }
static void Main(string[] args) { UInt32 p = 1457128028; //01010110 11011010 00000010 01011100 var p0 = p & 0xFF; //01011100 var t2 = Math.Floor(Math.Floor(p0 / Math.Pow(2, 5)) * Math.Pow(2, 5)); var t = Math.Floor(Math.Floor(p / Math.Pow(2, 28)) * Math.Pow(2, 28)); var m = Math.Floor(p / Math.Pow(2, 29)); p = 0xF0; Debug.WriteLine(Convert.ToString(p, (int)2)); var pe = Convert.ToInt32(Math.Floor(p / Math.Pow(2, 2))); Debug.WriteLine(Convert.ToString(pe, (int)2)); pe = Convert.ToInt32(Math.Floor(pe * Math.Pow(2, 2))); Debug.WriteLine(Convert.ToString(pe, (int)2)); pe = Convert.ToInt32(Math.Floor(pe * Math.Pow(2, 2))); Debug.WriteLine(Convert.ToString(pe, 2)); return; var payload = new PayloadModel(); payload.device = "Sigfox-FAE83"; payload.byte1 = 137; payload.byte2 = 93; payload.byte3 = 48; payload.byte4 = 95; // Temp & humidity payload if ((payload.byte1 % 8) == 1) { CheckDeviceAsync(payload.device).Wait(); SendTelemetryAsync(payload).Wait(); } return; #region Work in progress var payloads = new uint[] { 0x895d305f, 0xa95d3e18, 0xaa5d3c18, 0xab5d3818, 0xac5d3418, 0xa96d3318 }; // ? //vert //a95d3e18 mode: 169 temperatureMSB: 93 temperatureLSB: 62 //humidity: 24 temp: 6206 temp2: 15896 //jaune //aa5d3c18 mode: 170 temperatureMSB: 93 temperatureLSB: 60 //humidity: 24 temp: 6204 temp2: 15384 //bleu //ab5d3818 mode: 171 temperatureMSB: 93 temperatureLSB: 56 //humidity: 24 temp: 6200 temp2: 14360 //bleu foncé //ac5d3418 mode: 172 temperatureMSB: 93 temperatureLSB: 52 //humidity: 24 temp: 6196 temp2: 13336 //foreach (var p in payloads) //{ // var bytes = BitConverter.GetBytes(p); // Array.Reverse(bytes); // if ((bytes[0] % 8) == 1) // { // //MSB : Les 4 premiers bits de l'octet temperatureMSB // var MSB = Math.Floor(bytes[1] / Math.Pow(2, 4)); // var LSB = bytes[2] % 64; // //On concatene les deux : MSB+LSB, on retranche 200 puis on divise par 8 // //On obtient la temperature en °C // var temperature = (((MSB * Math.Pow(2, 6)) + LSB) - 200) / 8; // var humidity = bytes[3] * 0.5; // Console.WriteLine(string.Format("Payload={0} temperature={1} humidity={2}", p, temperature, humidity)); // } // //var mode = (p1 << 29) >> 29; // //var timeframe = (p1 << 27) >> 30; // //var type = (p1 << 25) >> 30; // //var battery = (((p1 << 24) >> 27)) * 0.05 * 2.7; // //var temp1 = 0; // ((Convert.ToInt16(new byte[] { (byte)(bytes[1] % 64), (byte)((bytes[2] << 2) >> 6)}))); // ////temp1 = 5.0 / 9.0 * (temp1 - 32); // //double hum = 0; // //double temp = 0; // //switch (type) // //{ // // case 0: //Button // // break; // // case 1: //Temp-Humidity // // hum = ((p1 << 0) >> 24) * 2; // // temp = (((p1 << 20) >> 28) * 0.01) + 20; // // temp = ((p1 << 12) >> 28) << 5; // // temp += ((p << 20) >> 28); // // temp = (temp - 200) / 8; // // break; // // case 2: //Light // // break; // // case 3: //Door // // break; // // case 4: //Move // // break; // // case 5: //Reed switch // // break; // // default: // // break; // //} // //Console.WriteLine(string.Format("mode={0} time={1} type={2} battery={3} temp1={4} temp={5} hum={6}", mode, timeframe, type, battery, temp1, temp, hum)); // //Console.WriteLine(); //} #endregion Console.Read(); }