SmartHome

Einführung

/media/uploads/marcel1691/openhab.png

openHAB (open Home Automation Bus) ist eine in Java entwickelte Softwarelösung, die Komponenten zur Gebäudeautomatisierung, Hersteller- und Protokollneutral in einer Plattform miteinander verbindet. Dadurch läuft openHAB Betriebssystemunabhängig und ist durch Hinzufügen weiterer Bindings um zusätzliche Technologien/Protokolle erweiterbar.

Entwickelt wird openHAB unter der Eclipse Public License und ist Open Source. Als Userinterfaces werden Webbrowser, Android- oder Apple iOS-Systeme unterstützt.

OpenHAB 2 stellt einen parallelen Entwicklungszweig dar, der vorwiegend den Fokus auf den Benutzerkomfort der openHAB-Konfiguration richtet. Ein weiterer Aspekt ist die Optimierung von openHAB auf Embedded Systems.

Weitere Merkmale

  • Sitemap - openHAB hat ein generisch konfigurierbares User Interface (UI), die sogenannte Sitemap. Die Sitemap ist eine Baumstruktur von Widgets, die die verschiedenen Seiten und den Inhalt des UI definieren. Widgets können Items sein, die den aktuellen Status darstellen oder auch Schalter oder Grafiken.
  • Persistence - Der Persistence Service ermöglicht das Speichern von Status der einzelnen Items. Somit können Verläufe visualisiert, historische Daten abgefragt oder bei einem Systemneustart der Status wiederhergestellt werden.
  • Regeln - Zum Erstellen von Automatisierungslogiken kommen Regeln zum Einsatz.
  • Bindings - Vorbereitete Schnittstellen zu IoT Geräten u.a. auch der IoTKit SMD Shield.











Bindings

Bridge - Verbindungsdetails mit IP-Adresse für alle Geräte auf dem IotKit SMD Shield aus ESH-INF/bridge.xml

	<bridge-type id="bridge">
	
		<label>IoTKit SMD Shield Ethernet gateway</label>
		<description>This bridge represents the IoTKit SMD Shield Ethernet
			gateway.
		</description>

		<config-description>
			<parameter name="address" type="text" required="true">
				<label>IP address</label>
				<description>IP address IoTKit SMD Shield
				</description>
			</parameter>
		</config-description>

	</bridge-type>

Definition von Geräten, sogenannten Channels aus ESH-INF/thing-types.xml

    <thing-type id="actors">
        <supported-bridge-type-refs>
            <bridge-type-ref id="bridge" />
        </supported-bridge-type-refs>
            
        <label>IoTKit SMD Shield Actors</label>
        <description>Actors on IoTKit Shield</description>

        <channels>
            <channel id="motor1" typeId="motor" />
            <channel id="servo1" typeId="servo" />
            <channel id="stepper1" typeId="stepper" />
        </channels>
    </thing-type>
         	
    <channel-type id="motor">
        <item-type>Rollershutter</item-type>
        <label>Motor</label>
        <description>Motor Speed</description>
        <category>Blinds</category>
        <state readOnly="false" pattern="%.2f">
        </state>
    </channel-type>	

Implementierung Handler (in Java) aus IoTKitActorsHandler

    public void handleCommand(ChannelUID channelUID, Command command)
    {
        // Up / Down Button
        if  ( command instanceof UpDownType )
            getIoTKitBridge().func( channelUID.getId(), command.toString().toLowerCase() );
        // Stop Button (bei Up/Down)
        else if ( command instanceof StopMoveType )
            getIoTKitBridge().func( channelUID.getId(), command.toString().toLowerCase() );
        else
            logger.debug( "Command {} is not supported for channel: {}", command, channelUID.getId() );
    }

Die eigentlichen HTTP Aufruf, werden an die Bridge (IoTKitBridgeHandler.java) weitergeleitet:

    public void func( String thing, String func )
    {
        String urlString = "http://" + addr + "/rpc/" + thing + "/" + func;
        try
        {
            URL url = new URL( urlString );
            URLConnection connection = url.openConnection();
            // braucht explizit das lesen des RC Wertes, connect alleine genuegt nicht!
            IOUtils.toString( connection.getInputStream() );
        }
        catch (MalformedURLException e)
        {
            logger.debug( "Constructed url '{}' is not valid: {}", urlString, e.getMessage() );
        }
        catch (IOException e)
        {
            logger.error( "Error accessing url '{}' : {} ", urlString, e.getMessage() );
        }
    }











Weitere Informationen

Import programRPCHTTPServerSmartHome

mbed RPC Server - Eclipse SmartHome Variante


All wikipages