This repository contains java projects to setup a simple SmartHome. The java-based application runs for example on a rasperry pi and controlls the music-player (mplayer) or controlls switches by sending codes by the gpios of the raspi to a 433 MHz sender. The SmartHome is configured by a xml-file that contains all controllable units.
The java application requires a xml-file. The xml defines the SmartHome and contains all controllable units. The following listing shows an example xml-configuration.
<?xml version="1.0"?>
<SmartHome>
<!-- Define the port of the web-interface -->
<ControlCenter port="5061">
<!-- The optionally ground plot is used by the android-client -->
<!-- The client visualizes the SmartHome in an opengl-scene-->
<GroundPlot>
<Wall>
<Point x="0" y="0" z="0"/>
<Point x="0" y="0" z="5"/>
<Point x="5" y="0" z="5"/>
<Point x="5" y="0" z="0"/>
</Wall>
<Wall>
<Point x="0" y="0" z="0"/>
<Point x="0" y="0" z="5"/>
<Point x="0" y="5" z="5"/>
<Point x="0" y="5" z="0"/>
</Wall>
</GroundPlot>
<!-- Scripts are used to define events for any trigger -->
<Script trigger="trigger.light">
<Event unitID="switch.light1">
<Parameter key="state" value="on"/>
</Event>
<Event unitID="switch.light2">
<Parameter key="state" value="on"/>
</Event>
</Script>
<!-- Define jobs by the cron syntax. They can call any trigger -->
<TimeTrigger cronjob="30 6 * * *">
<Trigger triggerID="trigger.light"/>
</TimeTrigger>
</ControlCenter>
<!-- List of internet switches -->
<!-- The family-code and switch-number indicates a 433MHz rc switch -->
<!-- Setting the switch requires a 433MHz sender connected to the raspi gpios -->
<InternetSwitch id="switch.light1"
familyCode="11111"
switchNumber="3"
name="Livingroom"
x="1.5" y="0.5" z="0"
type="floorlamp"
readonly="false"/>
<InternetSwitch id="switch.light2"
familyCode="11111"
switchNumber="2"
name="Bedroom"
x="0.5" y="3.5" z="0"
type="floorlamp"
readonly="false"/>
<!-- Define a media-server that supports file-browsing and playlists -->
<!-- Requires mplayer or omxplayer to play any music or video file -->
<MediaServer id="media.living"
location="/media/hdd/"
playlistLocation="/media/hdd/.pls/"
type="remote"
name="Wohnzimmer"
x="2.5" y="0.5" z="1.5"
thumbnailWorker="false"/>
<!-- Define any command-line action -->
<!-- This example starts the kodi media-server -->
<!-- The client-action is used for the android-client to start the kodi remote control -->
<CommandAction id="action.kodi"
name="Kodi"
type="Execute Kodi media server"
command="/usr/bin/kodi-standalone"
clientAction="yatse://command/show/remote"
thumbnail="/home/pi/kodi.png"
logFile="/home/pi/Logs/kodi.log"
x="0.5" y="0.5" z="1.5"/>
<!-- Define access by managed users-->
<!-- A user can be admin witch allows access to everything -->
<User avatar=""
id="1333524613105917070"
name="admin"
password="secure"
role="ADMIN"/>
<!-- The normal user has the role USER and has no access by default -->
<User avatar=""
id="2601749788507583561"
name="Anonymous"
password="anon"
role="USER"/>
<!-- A UnitAccess allows the given user to access the defined unit -->
<UnitAccess unit="switch.light1" user="2601749788507583561"/>
<UnitAccess unit="media.living" user="2601749788507583561"/>
<!-- The web-api requires a session-token for each call -->
<!-- The following two sessions define a token for the admin and one for the user -->
<Session id="2265740024538433441" token="admin_token" user="1333524613105917070"/>
<Session id="1351990467740299448" token="user_token" user="2601749788507583561"/>
</SmartHome>
The android client visualizes and controlls the SmartHome application. The example-configuration looks like the following screenshot.