Für mein Smart Home Projekt stellte sich mir die Aufgabe meine Somfy Markise in die Steuerung einzubeziehen. Wie ich das mit VisualStudio.net gelöst habe möchte ich hier genau erklären.

Zunächst widme ich mal der benötigten Hardware. Wie kann mein Haussteuerungsprogramm, welches auf einem Windows 10 Tablett läuft und mit Visual Studio programmiert ist, Steuersignale zu meiner Markise senden welche mit einem Somfy Funkempfänger (im Normalfall der Somfy Fernbedienung) gesteuert wird.
Ich verwende als Hardwarebasis mein universelles Funkgateway der Marke mediola AiO Gateway V4. Dieses ist per LAN-Kabel mit meinem Netzwerk verbunden und in der Lage eine ganze Reihe von verschiedenen Funksystemen zu bedienen. Man ist daher bei der Auswahl von Funksensoren und Aktoren nicht mehr auf die Auswahl eines Herstellers gebunden, sondern kann auch einer breiten Palette von Geräten wählen und diese untereinander kombinieren. Zusätzlich kann man das Gateway mit sgn. HTTP Kommandosets steuern.

Im konkreten Fall schickt nun meine Software einen speziellen HTTP Befehl an das AiO Gateway und dieses fährt dann die Markise ein oder aus.

Zunächst habe ich mir eine kleine Klasse geschrieben welche sich von der WebClient Klasse im .NET Framework ableitet die Möglichkeit eines beliebigen TimeOuts bietet:

Imports System.Runtime.InteropServices
Imports System.Net
Public Class MyWebClient
    Inherits WebClient
    Private _timeout As Integer
    Public Property timeout As Integer
        Get
            timeout = _timeout
        End Get
        Set(ByVal value As Integer)
            _timeout = value
        End Set
    End Property
    Public Sub MyWebClient()
        Me.timeout = 60000
    End Sub
    Protected Overrides Function GetWebRequest(ByVal address As System.Uri) As System.Net.WebRequest
        Dim result = MyBase.GetWebRequest(address)
        result.Timeout = Me._timeout
        Return result
    End Function
End Class
Diese Klasse verwenden ich nun um eine Funktion zu schreiben welche die drei Steuerungsbefehle der Markise (einfahren, ausfahren, My-Position) absenden kann:
Public Sub MarkiseSteuerung(ByVal Befehl As String)
        'Befehl AUS,EIN,MY
        Dim strin, AIO As String
        Dim client As New MyWebClient
        client.timeout = 5000
        If Befehl = "EIN" Then
            AIO = "http://192.168.1.122/command?XC_FNC=SendSC&type=RT&data=20D44818"
        ElseIf Befehl = "AUS" Then
            AIO = "http://192.168.1.122/command?XC_FNC=SendSC&type=RT&data=40D44818"
        ElseIf Befehl = "MY" Then
            AIO = "http://192.168.1.122/command?XC_FNC=SendSC&type=RT&data=10D44818"
        End If
        If AIO <> "" Then
            Try
                strin = client.DownloadString(AIO)
            Catch ex As Exception
                EmailVersenden("Fehler in MarkiseSteuerung " & vbCrLf & ex.Message)
                Exit Sub
            End Try
        End If
    End Sub
Der HTTP-Befehl welcher den eigentlichen Befehl enthält ist hier in der String-Variable AIO enthalten und hat einen relativ einfache Aufbau. Zunächst kommt die IP-Adresse des Gateway. Dann der command-Befehl im Format command?XC_FNC=SendSC&type=RT&data=YYXXXXXX.
YY stellt hierbei den Befehl dar welchen die Markise ausführen soll (20 = Einfahren, 40 = Ausfahren, 10 = Stop/My).
Etwas komplizierte wird es mit XXXXXX. Diese stellt die Codierung der Markise dar. Da man aber in jeden Somfy Empfänger mehrere Sender einlernen kann habe ich einfach eine beliebige Adresse gewählt und dann meinen Somfy-Empfänger über die Original-Fernbedienung in den Lernmodus gebracht. Dann reicht es einen Befehl zu senden und die Markise auf diese Adresse  programmiert.
Nun reicht es die Klasse und die Funktion in das Haussteuerungs-Projekt einzufügen und die Funktionen in die Bedienoberfläche und Automatik-Steuerung zu integrieren. Schon kann man mit wie z.B. in meinem Fall die Markise über eine Visual Studio Web-App per iPhone ein und ausfahren.