Beispiel #1
0
        /// <summary>
        /// Publish MQTT message
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void Client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)
        {
            // Get id of device

            var deviceId = e.Topic.Split('/')[2];

            if (e.Message.Length < 200)
            {
                // ignore rogue messages

                return;
            }

            WriteLine("MQTT handling uplink");

            // Create or get device

            var device = await AddDeviceAsync(deviceId);

            if (!_whiteList.Accept(deviceId))
            {
                WriteLine($"Device {deviceId} is not whitelisted");

                return;
            }

            if (device.Status != DeviceStatus.Enabled)
            {
                WriteLine($"Device {deviceId} disabled");

                return;
            }

            // Convert message to json

            var jsonText = Encoding.UTF8.GetString(e.Message);

            dynamic jsonObject = JsonConvert.DeserializeObject(jsonText);

            var counter       = jsonObject.counter?.ToString();
            var deviceMessage = jsonObject.payload_fields?.ToString();

            if (string.IsNullOrEmpty(deviceMessage))
            {
                WriteLine($"Device {deviceId} seen");

                return;
            }

            var metadata   = jsonObject.metadata;
            var frequency  = metadata?.frequency?.ToString();
            var gateway    = metadata?.gateways?[0];
            var gatewayEui = gateway?.gtw_id?.ToString();
            var latitude   = gateway?.latitude?.ToString();
            var longitude  = gateway?.longitude?.ToString();
            var rssi       = gateway?.rssi?.ToString();

            // construct message for IoT Hub

            dynamic iotHubMessage = JsonConvert.DeserializeObject(deviceMessage);

            if (_addGatewayInfo)
            {
                iotHubMessage.ttnCounter     = jsonObject.counter ?? -1;
                iotHubMessage.ttnGatewayEui  = gateway?.gtw_id?.ToString();
                iotHubMessage.ttnGatewayLat  = gateway?.latitude ?? 0.0;
                iotHubMessage.ttnGatewayLon  = gateway?.longitude ?? 0.0;
                iotHubMessage.ttnGatewayFreq = metadata?.frequency ?? 0.0;
                iotHubMessage.ttnGatewayRssi = gateway?.rssi ?? 0;
            }

            var iotHubMessageString = JsonConvert.SerializeObject(iotHubMessage);

            Write($"{DateTime.Now:HH:mm:ss} Message received ({counter}/{deviceId}/{gatewayEui}/{latitude}/{longitude}/{frequency}/{rssi}): {iotHubMessageString}");

            // create device client

            var key = (_deviceKeyKind == "Primary")
                ? device.Authentication.SymmetricKey.PrimaryKey
                : device.Authentication.SymmetricKey.SecondaryKey;

            var deviceClient = _deviceClientList.GetDeviceClient(deviceId, key);

            // send message

            var message = new Microsoft.Azure.Devices.Client.Message(Encoding.UTF8.GetBytes(iotHubMessageString));

            await deviceClient.SendEventAsync(message);

            WriteLine("-IoT Hub message sent");
        }
Beispiel #2
0
        /// <summary>
        /// Publish MQTT message
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private static async void Client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)
        {
            Console.WriteLine("MQTT handling uplink");

            // Convert message to json

            var jsonText = Encoding.ASCII.GetString(e.Message);

            dynamic jsonMessage = JsonConvert.DeserializeObject(jsonText);

            // Get id of device

            var deviceId = (string)jsonMessage.dev_eui;

            // Create or get device

            var device = (Device) await AddDeviceAsync(deviceId);

            if (device.Status != DeviceStatus.Enabled)
            {
                Console.WriteLine($"Device {deviceId} disabled");

                return;
            }

            // extract data from json

            var deviceMessage = jsonMessage.fields.ToString();

            var metaText = jsonMessage.metadata.ToString();

            var jsonMeta = JsonConvert.DeserializeObject(metaText);

            var time = jsonMeta[0].server_time.ToString();

            // construct message for IoT Hub

            dynamic iotHubMessage = JsonConvert.DeserializeObject(deviceMessage);

            iotHubMessage.deviceId = deviceId;

            iotHubMessage.time = time;

            string iotHubMessageString = JsonConvert.SerializeObject(iotHubMessage);

            Console.WriteLine($"IoT Hub message {iotHubMessageString}");

            // create device client

            var key = string.Empty;

            if (ConfigurationManager.AppSettings["DeviceKeyKind"] == "Primary")
            {
                key = device.Authentication.SymmetricKey.PrimaryKey;
            }
            else
            {
                key = device.Authentication.SymmetricKey.SecondaryKey;
            }

            var deviceClient = _deviceClientList.GetDeviceClient(deviceId, key);

            // send message

            var message = new Message(Encoding.UTF8.GetBytes(iotHubMessageString));

            await deviceClient.SendEventAsync(message);

            Console.WriteLine("IoT Hub message sent");
        }