2017-04-09 1 views
0

Ich versuche, eine einfache App für meine Raspberry Pi, die eine Nachricht an die IOThub senden und dann versuchen, eine Antwort zu erhalten, aber nichts passiert ist.IOT Hub nicht empfangen oder Nachrichten senden

Ich habe die Connectionstring von der Gerätesteuerung kopiert. Ofcource Ich versteckte es für diese Frage.

Ich sehe es ausdrucken, dass die Nachricht erfolgreich zum iothub gesendet wurde, aber wenn ich den iothub überprüfe, sehe ich 0 empfangene Nachrichten.

Iam mit der freien Tier der Iothub ist dies eine Einschränkung?

public sealed partial class MainPage : Page 
{ 
    private const string DeviceConnectionString = "Hidden"; 

    private readonly DeviceClient _deviceClient; 

    public MainPage() 
    { 
     this.InitializeComponent(); 
     _deviceClient = DeviceClient.CreateFromConnectionString(DeviceConnectionString, TransportType.Amqp); //Already tried using different transport types but no succes. 
    } 

    public async Task SendEvent() 
    { 
     Debug.WriteLine("\t{0}> Sending message", DateTime.Now.ToLocalTime()); 
     var commandMessage = new Message(Encoding.ASCII.GetBytes("Cloud to device message.")); 
     await _deviceClient.SendEventAsync(commandMessage); 
     Debug.WriteLine("Succesfully sended message to IotHub"); 
    } 

    public async Task ReceiveCommands() 
    { 
     Debug.WriteLine("\nDevice waiting for commands from IoTHub...\n"); 

     while (true) 
     { 
      var receivedMessage = await _deviceClient.ReceiveAsync(); 

      if (receivedMessage != null) 
      { 
       var messageData = Encoding.ASCII.GetString(receivedMessage.GetBytes()); 
       Debug.WriteLine("\t{0}> Received message: {1}", DateTime.Now.ToLocalTime(), messageData); 

       var propCount = 0; 
       foreach (var prop in receivedMessage.Properties) 
       { 
        Debug.WriteLine("\t\tProperty[{0}> Key={1} : Value={2}", propCount++, prop.Key, prop.Value); 
       } 

       await _deviceClient.CompleteAsync(receivedMessage); 
       Debug.WriteLine("Finishing recieving message"); 
      } 
      await Task.Delay(TimeSpan.FromSeconds(1)); 
     } 
    } 

    private async void Button_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e) 
    { 
     Debug.WriteLine("Sending event"); 
     await SendEvent(); 
     await ReceiveCommands(); 
     Debug.WriteLine("Received commands"); 
    } 
} 
+0

Können Sie die D2C-Nachricht sehen, die Sie im [Geräte-Explorer] gesendet haben (https://github.com/Azure/azure-iot-sdk-csharp/tree/master/tools/DeviceExplorer#run-the-sample- Anwendung)? –

+1

Ja iam bekomme dies: Empfangen von Ereignissen ... 2017-04-10 20:08:53> Gerät: [RaspberryPI], Daten: [Wolke zu Gerät Nachricht.] – Barsonax

+1

Nun, was meinst du "Ich überprüfe die Iothub Ich sehe 0 empfangene Nachrichten. "? Sie meinen, Sie verwenden 'ReceiveCommands()', um diese D2C-Nachrichten zu empfangen? –

Antwort

3

Es hat nichts mit freier Stufe des iothub zu tun. Es gibt keine solche Beschränkung.

Sie können Device-To-Cloud(D2C) messages nicht mit DeviceClient empfangen, das Sie in ReceiveCommands() verwendet haben. Es ist entworfen. Sie haben anscheinend ein gewisses Missverständnis zwischen Azure IoT Hub-Nachrichtentypen und SDKs. Es gibt zwei Arten von Nachrichtentypen: Device-To-Cloud(D2C) message und Cloud-To-Device(C2D) message.

Und zwei Arten von SDKs: device SDK und service SDK.

Das Geräte-SDK wird zum Herstellen einer Verbindung mit D2C-Nachrichten und zum Senden von D2C-Nachrichten an Azure IoT Hub verwendet. Während Service SDK verwendet wird, um C2D messages an Geräte zu verwalten und zu senden.

Wenn Sie also C2D-Nachrichten an das Gerät in Device Explorer senden, erhalten Sie diese Nachrichten in Ihrer ReceiveCommands-Methode.

Wenn Sie eine D2C-Nachricht empfangen möchten, können Sie Event Hub-kompatible Endpunkte (Nachrichten/Ereignisse) verwenden. Hier ist a console sample Sie können verweisen. Aber das ist in UWP aufgrund service bus not supported in UWP nicht möglich.

Verwandte Themen