ConnAir über C# ansteuern

Vor ein paar Tagen habe ich euch mein neuestes Spielzeug vorgestellt: Das ConnAir von Simple Solutions. Falls Ihr den Beitrag verpasst habt, könnt ihr das hier nachholen. Mit dem ConnAir ist es ja möglich Funksteckdosen ein- und auszuschalten. Das geht auch mittels C# / .NET.

ConnAir 433 - Home Automation Gateway

Dazu habe ich einfach mal eine kleine C#-Klasse geschrieben, welche Ihr in euer eigenes Projekt übernehmen könnt. Nachdem Ihr die Klasse eurem Projekt hinzugefügt habt, könnt ihr direkt ein Objekt erzeugen und die zugehörigen Methoden on() und off() aufrufen. Das funktioniert so:

//Objekt erzeugen
ELRO device = new ELRO("10101", "10000", "192.168.2.112", 49880);

//Einschalten
device.on();

//Ausschalten
device.off();

Mehr ist es eigentlich auch gar nicht. Die Frage ist nun, wie kommt man an die Parameter des Konstruktors?

/// <summary>
/// Die Schalter 1 bis 5 sind der masterdip
/// und die Schalter A bis E sind der slavedip.
/// </summary>
/// <param name="masterdip">Der Masterdip</param>
/// <param name="slavedip">Der Slavedip</param>
/// <param name="ip">IP Adresse des Connair</param>
/// <param name="port">Der Port des Connair</param>
public ELRO(String masterdip, String slavedip, String ip, int port)
: base(masterdip, slavedip, ip, port)
{

}

Jetzt gibt es bestimmt noch ein paar Fragen, welche im Raum stehen, oder? Diese werden nun beantwortet:

  1. Die IP-Adresse eures ConnAir sollte klar sein, ansonsten schaut mal in eurem Router nach, welche IP Adresse dem ConnAir zugewiesen wurde (bei DHCP).
  2. Der Port des ConnAir ist standardmäßig 49880. Ihr könnt diesen im Webinterface ändern. Falls Ihr den Standardport verwendet, dann kann der vierte Parameter auch weggelassen werden.
  3. Die Klasse heißt ELRO, weil meine Steckdosen kompatibel mit den Steckdosen von ELRO sind. Für andere Steckdosen müsste man meine Klasse noch entsprechend erweitern. Sollte aber recht schnell gehen, da nur von meiner Basisklasse geerbt werden und eine Methode implementiert werden muss 😉

Wie komme ich an den Masterdip und den Slavedip?

Eigentlich ganz einfach: Im meinem obigen Beispiel habe ich als Masterdip 10101 verwendet und als Slavedip 10000. Wenn wir uns die zugehörige Funksteckdose anschauen, wird das sehr schnell klar. Schalter oben bedeutet gesetzt (bzw. 1) und Schalter unten bedeutet nicht gesetzt (bzw. 0).

Master-/Slavedip an Funksteckdose

Der Masterdip ist übrigens auch an der Fernbedienung auffindbar.
(Hier mit einem anderen Masterdip – also nicht wundern).

Fernbedienung für Funktsteckdose

Ich habe mir diesmal kein cooles Tool aus meiner Klasse gebaut, um alle Steckdosen komfortabel zu schalten. Ich wollte lieber eine kleine Sammlung von Progrämmchen haben, damit ich jede Steckdose als eigenes Icon auf dem Desktop platzieren kann. Für meine Lavalampe im Arbeitszimmer sieht das beispielsweise so aus:

Lavalampe Programme

Falls ihr wissen möchtet, wie das komplette Programm aufgebaut ist. Für Lavalampe Einschalten sieht der komplette Quellcode so aus (Windows Form-Anwendung, ohne Form):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using Connair;

namespace lavalampe
{
 static class Program
 {
  /// <summary>
  /// Der Haupteinstiegspunkt für die Anwendung.
  /// </summary>
  [STAThread]
  static void Main()
  {
   //Objekt erzeugen
   ELRO device = new ELRO("10101", "10000", "192.168.2.112");

   //Einschalten
   device.on();
  }
 }
}

Also einfacher geht es glaube ich echt nicht mehr 😉

Download: Klasse + Beispielprogramm

Das nächste mal gibt es dann dasselbe in PHP – wahrscheinlich…

10 comments

  1. Über welche Schnittstelle geht das dann an ConnAir? Oder anders gefragt, lässt sich das auch auf Java „portieren“ bzw. ähnlich umsetzen? Klingt ja so als würde auf dem Teil ein Webserver laufen, den du über …… (bitte einsetzen 😉 ) ansprichst?

  2. Hi Matthias,

    mein Programm und das ConnAir kommunizieren ganz normal über das Netzwerk. Das Tolle am ConnAir ist ja, dass du es mit jeder beliebigen Programmiersprache ansteuern kannst. Es geht auch mit PHP, Java, Android, IOS, .NET, … also jede Sprache welches es erlaubt Netzwerkfunktionalität zu verwenden. Ich denke sogar, dass du es relativ schnell auf Java portiert hast.

    In der Tat läuft auf dem ConnAir ein kleiner Webserver (fürs Webinterface), die Ansteuerung läuft aber mittels Socket Verbindung über UDP. Und diese Socket Verbindung kannst du praktisch mit jeder Programmiersprache verwenden 😉

  3. Hi,
    danke für die Antwort! Den anderen Artikel hätte ich vielleicht vorher lesen sollen..:/
    So lässt sich das Teil ja echt extrem flexibel ansteuern.. 🙂 Ich fürchte ich „brauch“ auch einen 😀

  4. Genau so ging es mir auch, als ich das ConnAir im Internet gefunden habe. Ich hatte sofort das Gefühl „brauch“ ich 😉

    Wenn du mich fragst, dann empfehle ich das Gerät wirklich uneingeschränkt weiter. Top Produkt und der Preis stimmt auch.

  5. Erst einmal vielen Dank an Christoph für sein tolles Projekt!
    Wenn auch schon etwas älter, habe ich so etwas als Programmierlaie lange gesucht für meine Brematic!
    Wie würde man denn in C# andere Steckdosen, z.B. von Intertechno mit „Dreheinsteller“ oder gar selbstlernende Dosen ansprechen? Wichtig wäre für mich auch die Implementierung eines Dimmers.

    Wäre für jede Hilfe sehr dankbar!

    lg
    Mario

  6. Hallo Mario,

    man müsste den Code für andere Hersteller im eigenen Programm „erstellen“ und dann einfach an die ConnAir oder die Brematic schicken. Genau dieses erstellen des Codes macht meine Klasse im Hintergrund, man kann dann einfach ganz gewohnt den Masterdip / Slavedip angeben und muss sich um nichts weiter kümmern.

    Ich habe nur die ELRO eingebaut, da meine Steckdosen damit kompatibel sind. Hätte ich andere gehabt oder zusätzlich welche von Intertechno, dann hätte ich auch den Support dafür gleich mit aufgenommen. Ich kann aber nichts implementieren ohne Geräte wo ich das auch testen kann. Es soll ja auch funktionieren 😉

    Gruß

    Christoph

  7. Danke Christoph für die schnelle Antwort!

    Das ist natürlich schade (zumindest für mich 😉 ), dass Du „nur“ ELRO kompatible Dosen hast. Ich habe nämlich bei mir im Haus die „Daycom“ Funk-Unterputzlichtschalter von Pollin verbaut, welche aber leider selbstlernend sind und daher keine DIP-Schalter haben 🙁
    Ferner versuche ich gerade über Kodi (xbmc) mit Hilfe des Cinema Experience Addons und EventGhost „Deine“ Programme zu starten. Ziel ist es bei Filmstart automatisch die Lampen zu dimmen und evtl. Passivbeleuchtung zu starten und bei Filmende wieder alles anzuschalten 🙂

    Ich bastel mal weiter 🙂

    lg
    Mario

  8. Hi Mario,

    das klingt auf jeden Fall sehr spannend.
    Naja dimmen wirst du mit meinem Programmen nicht hinbekommen. Da ich keine dimmbaren Steckdosen besitze, habe ich den Code dafür auch nicht einbauen können. Und wie gesagt, Daycom wirst du damit wohl auch nicht steuern können, solange der Support dafür nicht implementiert wurde (und diese nicht ELRO kompatibel sind).

    Was du mal probieren kannst:
    Probiere mal das aus Conn-Air Mobile WebApp. Wenn du damit deine Schalter schalten kannst, dann bekommst du es auch automatisiert hin und deinem Kino-Vergnügen steht nichts mehr im Weg 😉

  9. Danke Christoph für Deine Antwort,
    ich hoffe ich darf Dich nochmal nerven mit einer Programmierungsfrage?

    Also, das Medienserver Addon „Cinema Experience“ hat ein Python Skript, welches bei entsprechendem Trigger (z.B. Film startet, oder Pause etc.) einen Code aussenden kann. Die sieht dann wie hier aus:

    # Script Start
    if trigger == „Script Start“ and ha_settings[ „ha_script_start“ ]:
    # place code below this line

    Ich würde nun gern EventGhost umgehen und „einfach“ an der „# place code below this line“ Stelle Deine entsprechenden, in C# geschriebenen, Programme starten.
    Hast Du ne Ahnung wie dazu der Phyton Befehl aussieht? (wahrscheinlich ganz einfach ;))
    Danke, ich nerve auch nicht mehr weiter 😉

    lg
    Mario

  10. Kein Problem, ich helfe gerne weiter, wenn ich kann.
    In diesem Fall kann ich es leider nicht, da ich von Python keinen blassen Schimmer habe.

    Kannst mich aber gerne etwas in PHP, C#, JavaScript, C++, JAVA, … fragen 😉

    Wahrscheinlich ist es aber das: os.system ?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.