2017-02-23 4 views
0

Azure IoTハブを使い始めています。エンドポイントとサービスハブをルートから学習するように設定しました。 https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-csharp-csharp-process-d2cクエリをフィルタリングした後、Azureルートがenpointに転送されない

違いは、私はプログラムを私の温度センサのための私自身のコードを使用することです:私は、メッセージは以下のリンクで説明したように、それは私のエンドポイントにメッセージを転送することをレベル=重要言うときことを指定するには、このルートで DTOと私は一つの大きなJSONメッセージとして送信すること(コードを参照してください)

DTOクラス:

[DataContract] 
class Bmp280DTO 
{ 
    [DataMember] 
    public Guid guid { get; set; } 
    [DataMember] 
    public string deviceName { get; set; } 
    [DataMember] 
    public float tempSensorValue { get; set; } 
    [DataMember] 
    public float pressureSensorValue { get; set; } 
    [DataMember] 
    public float altitudeSensorValue { get; set; } 
    [DataMember] 
    public DateTime measurementTime { get; set; } 
    [DataMember] 
    public string measurename { get; set; } 
    [DataMember] 
    public string level { get; set; } 

    public Bmp280DTO() { } 

    public Bmp280DTO(Guid id, String Device, float TmpSensorValue, float PrSensorValue, float AlSensorValue) 
    { 
     this.guid = id; 
     this.deviceName = Device; 
     this.tempSensorValue = TmpSensorValue; 
     this.pressureSensorValue = PrSensorValue; 
     this.altitudeSensorValue = AlSensorValue; 

     this.measurementTime = DateTime.Now; 
     this.measurename = "LightSensor"; 
     this.level = DetermineMessageLevel(TmpSensorValue); 
    } 

    public string ToJson() 
    { 
     DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Bmp280DTO)); 
     MemoryStream ms = new MemoryStream(); 
     ser.WriteObject(ms, this); 
     string json = Encoding.UTF8.GetString(ms.ToArray(), 0, (int)ms.Length); 

     return json; 

    } 

    public string DetermineMessageLevel(float temperaturesensorvalue) 
    { 
     if(temperaturesensorvalue > 22) 
     { 
      return "critical"; 
     } 
     return "normal"; 
    } 

} 

メッセージ送信:

private void SendBmp280Data(Bmp280DTO AzureBmp280Data) 
    { 
     System.Text.StringBuilder Bmp280JsonMessage = new System.Text.StringBuilder(); 
     Bmp280JsonMessage.Append(AzureBmp280Data.ToJson()); 

     MessageCommands.SendMessage(Bmp280JsonMessage.ToString()); 

    } 
0123メッセージのの

例: { "GUID": "XXXX"、 "DEVICENAME": "Bmp280Sensor"、 "tempSensorValue":23.59763、 "pressureSensorValue":98792.11、 "altitudeSensorValue":213.046539、 "measurementTime": "2017から02

メッセージはIOTハブで受信されましたが、エンドポイントに転送されませんでした。 私は何が間違っていますか? jsonオブジェクトメッセージを照会できませんか?そして、それがどういう場合にあなたはそれをしますか?私は不要なメッセージを送信したくありません。

ありがとうございました。

+0

紺碧は異なり、JSONを処理しているようですか? "あなたのプロパティバッグは有効なJSONではありません" うまくいけば私はすぐに見つけて解決策を投稿します。 – Tvt

答えて

0

これは、メッセージの送信中にエンコードに問題があるようです。

UTF8でメッセージをエンコードしましたが、ASCII値で行う必要がありました。 メッセージプロパティを追加して、より明白にすることもできます。

したがって、次のよう:

 var messageString = JsonConvert.SerializeObject(AzureBmp280Data); 
     Debug.WriteLine("Message Sent: {0}", messageString, null); 
     var message = new Message(Encoding.ASCII.GetBytes(messageString)); 
     message.Properties.Add("level", "critical"); 
関連する問題