Netduino, IoT Applikationen mit VS 2013 erstellen

imageDas Netduino Prototyping Board ist ein in der .NET community beliebtes Board, welches auf dem .NET Micro Framework aufbaut. Das Netduino ist pin-kompatibel mit dem Arduino Board und damit steht eine große Anzahl an Sensoren, Aktoren und Gadgets zur Verfügung die in eigenen IoT Applikationen eingesetzt werden können. Für viele .NET Entwickler ist jedoch der größte Vorteil, dass zur Entwicklung von Applikationen C# und Visual Studio eingesetzt werden kann. Das Lernen von neuen Sprachen und Entwicklungsumgebungen ist dadurch nicht nötig. 

Colin Miller hat auf dem .NET Micro Framework Blog angekündigt, dass Microsoft das Investment in die Plattform wieder erhöhen wird. Erste Ankündigungen zeigen Investment im Bereich der asynchronen Entwicklung und der Integration in die aktuellen Visual Studio Versionen. Aktuell wird auf der Netduino Homepage noch Visual Studio 2010 als notwendige Entwicklungsumgebung genannt. Eine Side-By-Side Installation von VS 2010 mit VS2013 oder der Beta von VS2014 ist zwar möglich, trotzdem erscheint die Installation einer “alten” Version von VS nicht komfortabel, gerade wenn die “Device-Entwicklung” Bestandteil eines größeren Projektes ist und eine gemeinsame Solution für alle Komponenten gepflegt werden soll. Aktuell existiert eine Beta Integration, die es ermöglicht, Netduino Apps mit Visual Studio 2013 zu erstellen.

Folgende Schritte sind dazu nötig:

  1. Deinstallation aller evtl. vorhandenen .NET Micro Framework und Netduino SDKs vom Computer
  2. Deinstallation aller VS Extensions (Tools –> Extension and Updates; nach .NET Micro suchen)
  3. Installation des .NET MF SDK v4.3 R2 (beta)
  4. Installation des .NET MF v4.3 R2 (beta) add-in für VS 2013
  5. Installation des Netduino SDK v4.3.1

Nach Installation aller Komponenten sollte in VS 2013 neue Projekt Templates für das Micro Framework und die Netduino Entwicklung angezeigt werden.

image

Die nächste Herausforderung stellt i. d. R. das Netduino Board selbst dar. Meist ist nicht die in der Beta Version verwendete Firmware Version 4.3.1 sondern 4.2 bzw. 4.1 installiert. Dies äußert sich in einer Fehlermeldung

Cannot deploy the base assembly ‚mscorlib‘, or any of his satellite assemblies, to device – USB:Netduino twice. Assembly ‚mscorlib‘ on the device has version 4.2.0.0, while the program is trying to deploy version 4.3.1.0

Chris Walker hat auf seinem Blog eine Update Tool zur Verfügung gestellt um die Firmware auf dem Netduino (Achtung: nur für Netduino Plus 2) zu flashen. Folgende Schritte sind nötig:

  1. Netduino vom USB Port des Computers trennen um in auszuschalten
  2. Den Button auf dem Netduino drücken und gedrückt halten während dieser via USB mit dem Computer verbunden wird.
  3. Das oben verlinkte Update Tool starten und die Firmware 4.3.1 auf das Netduino Board übertragen.

Nach erfolgreichem Flash der Firmware können die Netzwerkeinstellungen (IP oder DHCP) des Board mit MFDeploy (Target –> Configuration –> Networking) neu vergeben werden.

Azure Event Hub; automatisierte Anlage

Die Anlage eines Event Hub bei bereits existierendem Service Bus Namespace ist kein großer Aufwand. Im NuGet Package WindowsAzure.Servicebus finden sich alle Objekte um einen Event Hub bequem in managed Code anzulegen, wie das nachfolgende Code-Beispiel zeigt.

   1: public async Task<EventHubDescription> CreateEventHubAsync()

   2: {

   3:  

   4:     string serviceBusNamespace = "iotmc-ns";

   5:     string serviceBusManageKey = "32GP81C2B/eWHQ/MlZomaV8Sr4nnzeRCrJQCrYr/Wi4=";

   6:     string eventHubName = "IoTMC";

   7:     string eventHubSASKeyName = "Device01";

   8:  

   9:     Uri serviceBusUri = ServiceBusEnvironment.CreateServiceUri("sb", serviceBusNamespace, string.Empty);

  10:     TokenProvider tokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider("RootManageSharedAccessKey", serviceBusManageKey);

  11:     NamespaceManager nameSpaceManager = new NamespaceManager(string.Format("//{0}/", serviceBusUri.Host), tokenProvider);

  12:     string eventHubKey = SharedAccessAuthorizationRule.GenerateRandomKey();

  13:  

  14:     EventHubDescription eventHubDescription = new EventHubDescription(eventHubName)

  15:     {

  16:         PartitionCount = 8,

  17:         MessageRetentionInDays = 1

  18:     };

  19:     SharedAccessAuthorizationRule eventHubSendRule = new SharedAccessAuthorizationRule(eventHubSASKeyName, eventHubKey, new[] { AccessRights.Send, AccessRights.Listen });

  20:     eventHubDescription.Authorization.Add(eventHubSendRule);

  21:     eventHubDescription = await nameSpaceManager.CreateEventHubIfNotExistsAsync(eventHubDescription);

  22:  

  23:     string eventHubSASKey = ((SharedAccessAuthorizationRule)eventHubDescription.Authorization.First()).PrimaryKey;

  24:  

  25:     return eventHubDescription;

  26: }

Eine kleine Hürde gibt es jedoch, wenn auch der Service Bus Namespace via Code oder Powershell angelegt werden soll. Zum jetzigen Zeitpunkt gibt es einen Unterschied, wenn ein Service Bus Namespace via Management Portal oder via Powershell oder REST Api angelegt wird.

Bei Anlage über das Management Portal wird eine Shared Access Signature als Default Autorisierungsmechanismus angelegt. Legt man jedoch einen Service Bus Namespace via Powershell mit dem Komando:

   1: New-AzureSBNamespace -Name "CreatedUsingPowerShellDefaultValues" -Location "West Europe"

 
an, wird dieser als Default mit ACS Autorisierung erstellt. Versucht man im Nachgang in diesem Namespace einen Event Hub anzulegen, egal ob dies via Code oder Management Portal durchgeführt wird, kommt es zu einer Fehlermeldung “500 interner Server Error”.
 
Deshalb muss bei der Anlage des Service Bus Namespace via Powershell die Parameter –CreateACSNamespace und –NamespaceType mit Werten belegt werden.
 
   1: Param

   2: (

   3:         [bool]$falseValue = $false

   4: )

   5: New-AzureSBNamespace -Name "DelDel-ns" -Location "West Europe" -CreateACSNamespace $falseValue -NamespaceType Messaging

Nachtrag Technical Summit Berlin / TechEd Barcelona

Vielen Dank an alle Teilnehmer der TechEd 20143 in Barcelona die den gemeinsamen Vortrag von Mario Szpuszta und mir zum WP_20141027_010Thema “Architecting Globally Available and Scalable Solutions on Microsoft Azure” als  einen der Besten Vorträge im Architektur Track gewählt haben. Vielen Dank dafür!

Das Recording des Talks ist mittlerweile auf Channel9 publiziert worden. Für alle die dieses Jahr nicht nach Barcelona zur TechEd kommen konnten, aber Interesse an dem Vortrag haben, findet sich das Recording hier.

Auf dem diesjährigen Technical Summit in Berlin konnte ich aus meiner täglichen Arbeit berichten.  Im Detail gig es um sWP_20141111_016 “Internet  of Things und Big Data in der Praxis: ein Kundenszenario aus der Produktion”. Das Recording incl. des Decks findet sich ebenfalls mittlerweile auf Channel9. Auch hier vielen Dank an alle die den Vortrag besucht haben und in die Top 10 der Veranstaltungsvorträge gewählt haben.