Servus zusammen!
Ich hab's schon im openhab Forum versucht, aber ohne Antwort. Vielleicht kann ja hier jemand helfen oder hat eine Idee.
Installiert ist laut dpkg --list | grep
openhab2: openhab2 2.0.0-1 all openhab2
Solange ich den Dienst bzw. den rpi nicht neustarte klappt alles erst einmal soweit ganz ok.
Sobald ich aber den openhab Dienst neustarte kommen zufällige Schreibbefehle auf dem Bus.
Im Klartext bedeutet es, dass irgendwo im Haus Licht angeht oder ähnliches.
Das ist wirklich ärgerlich, weil ich so nix an der Konfig ändern kann ohne hinterher wieder alles ausschalten zu müssen.
Kommt besonders schlecht an, wenn Kids und Frau nachts vom Licht geweckt werden.
1) Soetwas schon einmal gehört?
2) Grundlagenfrage: Wenn ich die Konfig ändere, müss ich überhaupt neustarten oder wird das automatisch übernommen?
Hier mal ein paar wichtige Konfig-Files:
knx.cfg
items
sitemap
rules
Ich hab's schon im openhab Forum versucht, aber ohne Antwort. Vielleicht kann ja hier jemand helfen oder hat eine Idee.
Installiert ist laut dpkg --list | grep
openhab2: openhab2 2.0.0-1 all openhab2
Solange ich den Dienst bzw. den rpi nicht neustarte klappt alles erst einmal soweit ganz ok.
Sobald ich aber den openhab Dienst neustarte kommen zufällige Schreibbefehle auf dem Bus.
Im Klartext bedeutet es, dass irgendwo im Haus Licht angeht oder ähnliches.
Das ist wirklich ärgerlich, weil ich so nix an der Konfig ändern kann ohne hinterher wieder alles ausschalten zu müssen.
Kommt besonders schlecht an, wenn Kids und Frau nachts vom Licht geweckt werden.

1) Soetwas schon einmal gehört?
2) Grundlagenfrage: Wenn ich die Konfig ändere, müss ich überhaupt neustarten oder wird das automatisch übernommen?
Hier mal ein paar wichtige Konfig-Files:
knx.cfg
Code:
# KNX gateway IP address # (optional, if serialPort or connection type 'ROUTER' is specified) ip=192.168.177.9 # Local KNX Binding bus address. # Use it, when two or more openHAB Instances are connected to the same KNX bus. # (optional, defaults to 0.0.0) busaddr=1.1.254 # Ignore local KNX Events, prevents internal events coming from # 'openHAB event bus' a second time to be sent back to the 'openHAB event bus'. # Note: To send back events second time is a Bug, but for backward compatibility, the behavior is not changed. # For new installations, its recommend to set "ignorelocalevents=true" # (optional, defaults to false) ignorelocalevents=true # KNX IP connection type. Could be either TUNNEL or ROUTER (optional, defaults to TUNNEL) # Note: If you cannot get the ROUTER mode working (even if it claims it is connected), # use TUNNEL mode instead with setting both the ip of the KNX gateway and the localIp. type=TUNNEL # KNX gateway port (optional, defaults to 3671) # Note: If you use eibd, setting to 6720 port=3671 # Local endpoint to specify the multicast interface, no port is used (optional) localIp=192.168.177.88 # Serial port of FT1.2 KNX interface (ignored, if ip is specified) # Valid values are e.g. COM1 for Windows and /dev/ttyS0 or /dev/ttyUSB0 for Linux #serialPort= # Pause in milliseconds between two read requests on the KNX bus during # initialization (optional, defaults to 50) #pause= # Timeout in milliseconds to wait for a response from the KNX bus (optional, # defaults to 10000) #timeout # Number of read retries while initialization items from the KNX bus (optional, # defaults to 3) #readRetries # Seconds between connect retries when KNX link has been lost # 0 means never retry, it will only reconnect on next write or read request # Note: without periodic retries all events will be lost up to the next read/write # request # (optional, default is 0) #autoReconnectPeriod=30 ### Auto refresh feature # Number of entries permissible in the item refresher queue. # (optional, defaults to 10000) #maxRefreshQueueEntries= # Number of parallel threads for refreshing items. (optional, defaults to 5) #numberOfThreads= # Seconds to wait for an orderly shutdown of the auto refresher's # ScheduledExecutorService. (optional, defaults to 5) #scheduledExecutorServiceShutdownTimeoutString= # Use NAT (Network Address Translation) # (optional; defaults to false) #useNAT=true
items
Code:
Group gKG "Keller" <cellar> Group gEG "EG" <groundfloor> Group gOG "OG" <firstfloor> Group gDG "DG" <secondfloor> Group Garden "Garten" <garden> Group gTemps "Temperaturen" <temperature> Group Weather "Weather" <sun> Group Status Group Shutters Group KG_HWR "HWR" <video> (gKG) Group KG_Vorrat "Vorrat" <kitchen> (gKG) Group KG_Hobby "Hobby" <kitchen> (gKG) Group KG_Flur "Flur" <corridor> (gKG) Group EG_Wohn "Wohnzimmer" <video> (gEG) Group EG_Kueche "Küche" <kitchen> (gEG) Group EG_Essen "Essbereich" <kitchen> (gEG) Group EG_Toilette "Gäste WC" <bath> (gEG) Group EG_Flur "Flur" <corridor> (gEG) Group OG_Bath "Bedezimmer" <bath> (gOG) Group OG_Kind "Lina" <boy_1> (gOG) Group OG_Bed "Schlafzimmer" <bedroom> (gOG) Group OG_Allgemein "Allgemein" <corridor> (gOG) Group DG_Bad "Bedezimmer" <bath> (gDG) Group DG_Studio "Studio groß" <boy_1> (gDG) Group DG_Buero "Büro" <bedroom> (gDG) Group DG_Flur "Flur" <corridor> (gDG) /* active groups */ Group:Switch:OR(ON, OFF) Lights "All Lights [(%d)]" Group:Switch:OR(ON, OFF) Heating "No. of Active Heatings [(%d)]" <heating> Group:Number:AVG Temperature "Avg. Room Temperature [%.1f °C]" <temperature> (Status) Group:Contact:OR(OPEN, CLOSED) Windows "Open windows [(%d)]" <contact> /* Lights */ Switch Licht_KG_Flur "Flur" (KG_Flur, Lights) {knx="1.001:1/1/2"} Switch Licht_KG_Treppe "Treppe" (gKG, Lights) {knx="1.001:1/1/4"} Switch Licht_KG_HWR "HWR" (KG_HWR, Lights) {knx="1.001:1/1/10"} Switch Licht_KG_Vorrat "Vorrat" (KG_Vorrat, Lights) {knx="1.001:1/1/1"} Switch Licht_KG_Hobby "Hobby" (KG_Hobby, Lights) {knx="1.001:1/1/3"} Switch Licht_EG_Kueche "Küche" (EG_Kueche, Lights) {knx="1.001:2/1/13"} Switch Licht_EG_Esstisch_Decke "Esstisch Decke" (EG_Essen, Lights) {knx="1.001:2/1/3"} Switch Licht_EG_Esstisch_Wand "Esstisch Wand" (EG_Essen, Lights) {knx="1.001:2/1/6"} Switch Licht_EG_CouchVoute "Couch voute" (EG_Wohn, Lights) {knx="1.001:2/1/5"} Switch Licht_EG_CouchDecke "Couch Decke" (EG_Wohn, Lights) {knx="1.001:2/1/10"} Switch Licht_EG_Kellerwand "Kellerwand" (EG_Wohn, Lights) {knx="1.001:2/1/4"} Switch Licht_EG_Flur "Flur" (EG_Flur, Lights) {knx="1.001:2/1/2"} Switch Licht_EG_GaesteWC "GästeWC" (EG_Toilette, Lights) {knx="1.001:2/1/0"} Switch Licht_EG_Treppe "Treppe" (EG_Flur, Lights) {knx="1.001:2/1/7"} Switch Licht_OG_BadDecke "Bad Decke" (OG_Bath, Lights) Switch Licht_OG_BadSpiegel "Bad Spiegle" (OG_Bath, Lights) Switch Licht_OG_BadWand "Bad Wand" (OG_Bath, Lights) Switch Licht_OG_Flur "Flur" (OG_Allgemein, Lights) Switch Licht_OG_Lina "Lina" (OG_Kind, Lights) Switch Licht_OG_Schlafzimmer "Schlafzimmer" (OG_Bed, Lights) Switch Licht_DG_Spiegelschrank "Spiegelschrank" (DG_Bad, Lights) {knx="1.001:4/1/4"} Switch Licht_DG_BadWand "Bad Wand" (DG_Bad, Lights) {knx="1.001:4/1/4"} Switch Licht_DG_Flur "Flur" (DG_Flur, Lights) {knx="1.001:4/1/2"} Switch Licht_DG_Studio "Decke" (DG_Studio, Lights) {knx="1.001:4/1/0"} Switch Licht_DG_Buero "Deckenlampe" (DG_Buero, Lights) {knx="1.001:4/1/3"} Switch Licht_DG_Testtimer "Test" (DG_Office, Lights) Switch Light_Garden_Garage "Garage" (Garden, Lights) Switch Light_Garden_Terrace "Terrace" (Garden, Lights) /* Rollershutters */ Rollershutter Shutter_GF_Toilet "Toilet" (GF_Toilet, Shutters) Rollershutter Shutter_GF_Kitchen "Kitchen" (GF_Kitchen, Shutters) Rollershutter Shutter_GF_Living "Livingroom" (GF_Living, Shutters) Rollershutter Shutter_FF_Bed "Bedroom" (FF_Bed, Shutters) Rollershutter Shutter_FF_Bath "Bath" (FF_Bath, Shutters) Rollershutter Shutter_FF_Office_Window "Office Window" (FF_Office, Shutters) Rollershutter Shutter_FF_Office_Door "Office Door" (FF_Office, Shutters) Switch Shutter_all /* Temperaturen soll */ Number Temperatur_SOLL_KG_Treppe "KG Soll Treppe [%.1f °C]" <temperature> (gTemps) {knx="9.001:1/3/51"} Number Temperatur_SOLL_KG_Hobby "KG Soll Hobbyraum [%.1f °C]" <temperature> (gTemps) {knx="9.001:1/3/50"} Number Temperatur_SOLL_EG_Wohnzimmer "EG Soll Wohnzimmer [%.1f °C]" <temperature> (gTemps) {knx="9.001:2/3/50"} Number Temperatur_SOLL_EG_Kueche "EG Soll Küche [%.1f °C]" <temperature> (gTemps) {knx="9.001:2/3/51"} Number Temperatur_SOLL_EG_GeasteWC "EG Soll GästeWC [%.1f °C]" <temperature> (gTemps) {knx="9.001:2/3/52"} Number Temperatur_SOLL_OG_Bad "OG Soll Bad [%.1f °C]" <temperature> (gTemps) {knx="9.001:3/3/50"} Number Temperatur_SOLL_OG_Schlafzimmer "OG Soll Schlafzimmer [%.1f °C]" <temperature> (gTemps) {knx="9.001:3/3/51"} Number Temperatur_SOLL_OG_Lina "OG Soll Lina [%.1f °C]" <temperature> (gTemps) {knx="9.001:3/3/52"} Number Temperatur_SOLL_DG_Bad "DG Soll Bad [%.1f °C]" <temperature> (gTemps) {knx="9.001:4/3/50"} Number Temperatur_SOLL_DG_Buero "DG Soll Büro [%.1f °C]" <temperature> (gTemps) {knx="9.001:4/3/51"} Number Temperatur_SOLL_DG_Studio "DG Soll Studio [%.1f °C]" <temperature> (gTemps) {knx="9.001:4/3/52"} /* Temperaturen ist */ Number Temperature_IST_KG_Hobby "KG IST Hobbyraum [%.1f °C]" <temperature> (gTemps) {knx="9.001:1/3/0"} Number Temperature_IST_KG_Vorrat "KG IST Vorrat [%.1f °C]" <temperature> (gTemps) {knx="9.001:1/3/1"} Number Temperature_IST_KG_HWR "KG IST HWR [%.1f °C]" <temperature> (gTemps) {knx="9.001:1/3/2"} Number Temperature_IST_EG_Wohnzimmer "EG IST Wohnzimmer [%.1f °C]" <temperature> (gTemps) {knx="9.001:2/3/0"} Number Temperature_IST_EG_Kueche "EG IST Küche [%.1f °C]" <temperature> (gTemps) {knx="9.001:2/3/1"} Number Temperature_IST_EG_GaesteWC "EG IST GästeWC [%.1f °C]" <temperature> (gTemps) {knx="9.001:2/3/2"} Number Temperature_IST_OG_Bad "OG IST Bad [%.1f °C]" <temperature> (gTemps) {knx="9.001:3/3/0"} Number Temperature_IST_OG_Schlafzimmer "OG IST Schlafzimmer [%.1f °C]" <temperature> (gTemps) {knx="9.001:3/3/1"} Number Temperature_IST_OG_Lina "OG IST Lina [%.1f °C]" <temperature> (gTemps) {knx="9.001:3/3/2"} Number Temperature_IST_DG_Bad "DG IST Bad [%.1f °C]" <temperature> (gTemps) {knx="9.001:4/3/0"} Number Temperature_IST_DG_Buero "DG IST Büro [%.1f °C]" <temperature> (gTemps) {knx="9.001:4/3/1"} Number Temperature_IST_DG_Studio "DG IST Studio [%.1f °C]" <temperature> (gTemps) {knx="9.001:4/3/2"} /* Windows Contact Window_EG_Frontdoor "Frontdoor [MAP(en.map):%s]" (GF_Corridor, Windows) Contact Window_GF_Kitchen "Kitchen [MAP(en.map):%s]" (GF_Kitchen, Windows) Contact Window_GF_Living "Terrace door [MAP(en.map):%s]" (GF_Living, Windows) Contact Window_GF_Toilet "Toilet [MAP(en.map):%s]" (GF_Toilet, Windows) Contact Window_FF_Bath "Bath [MAP(en.map):%s]" (FF_Bath, Windows) Contact Window_FF_Bed "Bedroom [MAP(en.map):%s]" (FF_Bed, Windows) Contact Window_FF_Office_Window "Office Window [MAP(en.map):%s]" (FF_Office, Windows) Contact Window_FF_Office_Door "Balcony Door [MAP(en.map):%s]" (FF_Office, Windows) Contact Garage_Door "Garage Door [MAP(en.map):%s]" (Garden, Windows) */ Group Weather_Chart Number Weather_Temperature "Outside Temperature [%.1f °C]" <temperature> (Weather, Weather_Chart) { channel="yahooweather:weather:berlin:temperature" } Number Weather_Temp_Max "Todays Maximum [%.1f °C]" <temperature> (Weather, Weather_Chart) Number Weather_Temp_Min "Todays Minimum [%.1f °C]" <temperature> (Weather, Weather_Chart) Number Weather_Chart_Period "Chart Period" DateTime Weather_LastUpdate "Last Update [%1$ta %1$tR]" <clock> Number Sun_Elevation "Sun Elevation" <sun> { channel = "astro:sun:home:position#elevation" } Number Sun_Azimuth "Sun Azimuth" <sun> { channel = "astro:sun:home:position#azimuth" } DateTime Sunrise_Time "Sunrise [%1$tH:%1$tM]" <sunrise> { channel = "astro:sun:home:rise#start" } DateTime Sunset_Time "Sunset [%1$tH:%1$tM]" <sunset> { channel = "astro:sun:home:set#start" } Number Moon_Elevation "Moon Elevation" <moon> { channel = "astro:moon:home:position#elevation" } Number Moon_Azimuth "Moon Azimuth" <moon> { channel = "astro:moon:home:position#azimuth" } String Moon_Phase "Moon Phase" <moon> { channel = "astro:moon:home:phase#name" } /* Demo items */ DateTime CurrentDate "Date [%1$tA, %1$td.%1$tm.%1$tY]" <calendar> { channel="ntp:ntp:demo:dateTime" } Switch DemoSwitch "Switch" Dimmer DimmedLight "Dimmer [%d %%]" <slider> Color RGBLight "RGB Light" <slider> Rollershutter DemoShutter "Roller Shutter" Dimmer DemoBlinds "Blinds [%d %%]" <rollershutter> Number Scene_General "Scene" <sofa> Number Radio_Station "Radio" <network> Dimmer Volume "Volume [%.1f %%]" Location DemoLocation "Brandenburg Gate Berlin" Number Wifi_Level "Wifi Level [%d/4]" <signal> (FF_Office) String ImageURL "Image URL [%s]" Group Thermostat "Thermostat" <temperature> ["Thermostat"] Number Temperature_Setpoint "Temperature [%.1f °C]" <temperature> (Thermostat) ["TargetTemperature"] String Thermostat_Mode "Thermostat Mode [%s]" <temperature> (Thermostat) ["homekit:HeatingCoolingMode"] // vim: syntax=Xtend
Code:
sitemap demo label="Main Menu" { Frame { Group item=gKG label="Keller" icon="cellar" Group item=gEG label="Erdgeschoss" icon="groundfloor" Group item=gOG label="Obergeschoss" icon="firstfloor" Group item=gDG label="Dachgeschoss" icon="firstfloor" Group item=Garden icon="garden" } Frame label="Temperaturen" { Text label="Soll/ist" icon="temperature" { Frame label="Temperatur soll" { Setpoint item=Temperatur_SOLL_KG_Treppe label="KG Treppe [%.1f °C]" step=0.2 minValue=16 maxValue=28 Setpoint item=Temperatur_SOLL_KG_Hobby label="KG Hobby [%.1f °C]" step=0.2 minValue=16 maxValue=28 Setpoint item=Temperatur_SOLL_EG_Wohnzimmer label="EG Wohnzimmer [%.1f °C]" step=0.2 minValue=18 maxValue=28 Setpoint item=Temperatur_SOLL_EG_Kueche label="EG Küche [%.1f °C]" step=0.2 minValue=18 maxValue=28 Setpoint item=Temperatur_SOLL_EG_GeasteWC label="EG Gäste WC [%.1f °C]" step=0.2 minValue=18 maxValue=28 Setpoint item=Temperatur_SOLL_OG_Bad label="OG Bad [%.1f °C]" step=0.2 minValue=18 maxValue=28 Setpoint item=Temperatur_SOLL_OG_Schlafzimmer label="OG Schlafzimmer [%.1f °C]" step=0.2 minValue=18 maxValue=28 Setpoint item=Temperatur_SOLL_OG_Lina label="OG Lina [%.1f °C]" step=0.2 minValue=16 maxValue=28 Setpoint item=Temperatur_SOLL_DG_Bad label="DG Bad [%.1f °C]" step=0.2 minValue=16 maxValue=28 Setpoint item=Temperatur_SOLL_DG_Buero label="DG Büro [%.1f °C]" step=0.2 minValue=16 maxValue=28 Setpoint item=Temperatur_SOLL_DG_Studio label="DG Studio [%.1f °C]" step=0.2 minValue=16 maxValue=28 } Frame label="Temperatur ist" { Text item=Temperature_IST_KG_Hobby label="KG Hobby" Text item=Temperature_IST_KG_Vorrat label="KG Vorrat" Text item=Temperature_IST_KG_HWR label="KG HWR" Text item=Temperature_IST_EG_Wohnzimmer label="EG Wohnzimmer" Text item=Temperature_IST_EG_Kueche label="EG Küche" Text item=Temperature_IST_EG_GaesteWC label="EG GästeWC" Text item=Temperature_IST_OG_Bad label="OG Bad" Text item=Temperature_IST_OG_Schlafzimmer label="OG Schlafzimmer" Text item=Temperature_IST_OG_Lina label="OG Lina" Text item=Temperature_IST_DG_Bad label="DG Bad" Text item=Temperature_IST_DG_Buero label="DG Büro" Text item=Temperature_IST_DG_Studio label="DG Studio" } } } Frame label="Wetter" { Text item=Weather_Temperature valuecolor=[Weather_LastUpdate=="NULL"="lightgray",Weather_Las tUpdate>90="lightgray",>25="orange",>15="green",>5 ="orange",<=5="blue"] { Frame { Text item=Weather_Temp_Max valuecolor=[>25="orange",>15="green",>5="orange",<=5="blue"] Text item=Weather_Temp_Min valuecolor=[>25="orange",>15="green",>5="orange",<=5="blue"] Text item=Weather_LastUpdate visibility=[Weather_LastUpdate>30] valuecolor=[Weather_LastUpdate>120="orange", Weather_LastUpdate>300="red"] } Frame { Switch item=Weather_Chart_Period label="Chart Period" icon="chart" mappings=[0="Hour", 1="Day", 2="Week"] Chart item=Weather_Chart period=h refresh=600 visibility=[Weather_Chart_Period==0, Weather_Chart_Period=="NULL"] Chart item=Weather_Chart period=D refresh=3600 visibility=[Weather_Chart_Period==1] Chart item=Weather_Chart period=W refresh=3600 visibility=[Weather_Chart_Period==2] } } Text label="Astronomical Data" icon="sun" { Text item=Sun_Elevation Text item=Sun_Azimuth Text item=Sunrise_Time Text item=Sunset_Time Text item=Moon_Elevation Text item=Moon_Azimuth Text item=Moon_Phase } } // Frame label="Demo" { // Text item=CurrentDate // Text label="Group Demo" icon="firstfloor" { // Switch item=Lights mappings=[OFF="All Off"] // Group item=Heating // Group item=Windows // Text item=Temperature // } // Text label="Widget Overview" icon="chart" { // Frame label="Binary Widgets" { // Switch item=DemoSwitch label="Toggle Switch" // Switch item=DemoSwitch label="Button Switch" mappings=[ON="On"] // } // Frame label="Discrete Widgets" { // Selection item=Scene_General label="Scene Selection" mappings=[0=off, 1=TV, 2=Dinner, 3=Reading] // Switch item=Scene_General label="Scene" mappings=[1=TV, 2=Dinner, 3=Reading] // Setpoint item=Temperature_Setpoint minValue=16 maxValue=28 step=0.5 // } // Frame label="Percent-based Widgets" { // Slider item=DimmedLight switchSupport // Colorpicker item=RGBLight icon="slider" // Switch item=DemoShutter // Slider item=DemoBlinds // } // Frame label="Map/Location" { // Mapview item=DemoLocation height=10 // } // } // Text label="Multimedia" icon="video" { // Frame label="Radio Control" { // Selection item=Radio_Station mappings=[0=off, 1=HR3, 2=SWR3, 3=FFH] // Slider item=Volume icon="soundvolume" // } // Frame label="Multimedia Widgets" { // Image url="https://raw.github.com/wiki/openhab/openhab/images/features.png" label="openHAB" { // Text label="http://www.openHAB.org" icon="icon" // } // Video url="http://www.openhab.org/assets/smarthome.mp4" // Webview url="http://heise-online.mobi/" height=8 // Image url="http://fpoimg.com/320x240?text=openHAB" item=ImageURL // } // } // } } // vim: syntax=Xtend
Code:
import java.util.Random var Timer timer = null val resList = newArrayList("640/480", "320/240", "480/360") val urlList = newArrayList("http://www.fillmurray.com", "http://www.fillmurray.com/g", "http://www.placecage.com", "http://www.placecage.com/c", "http://www.placecage.com/g") val Random random = new Random() /** * This is a demo rule which simulates a real dimmer by reacting to increase/decrease commands * and posting an updated state on the bus */ rule "Dimmed Light" when Item DimmedLight received command then if ((receivedCommand==INCREASE) || (receivedCommand==DECREASE)) { var Number percent = 0 if(DimmedLight.state instanceof DecimalType) percent = DimmedLight.state as DecimalType if(receivedCommand==INCREASE) percent = percent + 5 if(receivedCommand==DECREASE) percent = percent - 5 if(percent<0) percent = 0 if(percent>100) percent = 100 postUpdate(DimmedLight, percent); } end /** * The following rules help initializing the demo items with some helpful states. */ rule "Initialize light states" when System started then Lights?.members.forEach(light| postUpdate(light, if(Math::random > 0.7) ON else OFF) ) end rule "Initialize heating states" when System started then Heating?.members.forEach(heating| postUpdate(heating, if(Math::random > 0.8) ON else OFF) ) postUpdate(Temperature_Setpoint, 22) end rule "Initialize contact states" when System started then Windows?.members.forEach(window| postUpdate(window, if(Math::random > 0.5) OPEN else CLOSED) ) end rule "Initialize Location" when System started then DemoLocation.postUpdate(new PointType("52.5200066,13.4049540")) end rule "Set random room temperatures" when System started or Time cron "0 0/5 * * * ?" then Temperature?.members.forEach(temperature| postUpdate(temperature, 20.0 + (25.0 - (Math::random * 50.0).intValue) / 10.0) ) end rule "Set daily max and min temperature" when Item Weather_Temperature changed or Time cron "0 0 0 * * ?" or System started then val max = Weather_Temperature.maximumSince(now.withTimeAtSta rtOfDay) val min = Weather_Temperature.minimumSince(now.withTimeAtSta rtOfDay) if( max != null && min != null) { postUpdate(Weather_Temp_Max, max.state) postUpdate(Weather_Temp_Min, min.state) } end // Creates an item that stores the last update time of this item rule "Records last weather update time" when Item Weather_Temperature received update then postUpdate(Weather_LastUpdate, new DateTimeType()) end //rule "Set random wifi variations" // when // System started or // Time cron "/20 * * * * ?" // then // postUpdate(Wifi_Level, (Math::random * 4.0).intValue) //end // //rule "Set random image URLs" // when // Time cron "/10 * * * * ?" // then // val url = urlList.get(random.nextInt(urlList.length)) // val res = resList.get(random.nextInt(resList.length)) // // postUpdate(ImageURL, url + "/" + res) //end // //rule "Volume" // when // Item Volume received command // then // if(receivedCommand instanceof PercentType) { // setMasterVolume(receivedCommand as PercentType) // } else { // if(receivedCommand==INCREASE) increaseMasterVolume(20) // if(receivedCommand==DECREASE) decreaseMasterVolume(20) // } //end // //rule "Select Radio Station" // when // Item Radio_Station received command // then // switch(receivedCommand) { // case 0 : playStream(null) // case 1 : playStream("http://metafiles.gl-systemhaus.de/hr/hr3_2.m3u") // case 2 : playStream("http://mp3-live.swr3.de/swr3_m.m3u") // case 3 : playStream("http://edge.live.mp3.mdn.newmedia.nacamar.net/radioffh/livestream.mp3.m3u") // case 4 : playStream("http://stream.laut.fm/club93") // } //end // //rule "Timer Test" //when // Item Light_DG_Testtimer changed from OFF to ON //then // if(Light_DG_Testtimer.state==ON) { // sendCommand(Light_DG_Office_Ceiling, ON) // if(timer==null) { // // first ON command, so create a timer to turn the light off again // timer = createTimer(now.plusSeconds(10)) [| sendCommand(Light_DG_Office_Ceiling, OFF) ] // } else { // // subsequent ON command, so reschedule the existing timer // timer.reschedule(now.plusSeconds(10)) // } // } else if(receivedCommand==OFF) { // // remove any previously scheduled timer // if(timer!=null) { // timer.cancel // timer = null // } // } //end rule "Timer Test" when Item Light_DG_Testtimer changed from OFF to ON then sendCommand(Light_DG_Office_Ceiling, ON) if(timer==null) { // first ON command, so create a timer to turn the light off again timer = createTimer(now.plusSeconds(3)) [| sendCommand(Light_DG_Office_Ceiling, OFF) sendCommand(Light_DG_Testtimer, OFF) timer = null ] } end rule "Init virtual Items" when System started then if (Temperatur_SOLL_KG_Treppe.state == NULL) { Temperatur_SOLL_KG_Treppe.postUpdate(18) } if (Temperatur_SOLL_KG_Hobby.state == NULL) { Temperatur_SOLL_KG_Hobby.postUpdate(18) } if (Temperatur_SOLL_EG_Wohnzimmer.state == NULL) { Temperatur_SOLL_EG_Wohnzimmer.postUpdate(23) } if (Temperatur_SOLL_EG_Kueche.state == NULL) { Temperatur_SOLL_EG_Kueche.postUpdate(22) } if (Temperatur_SOLL_EG_GeasteWC.state == NULL) { Temperatur_SOLL_EG_GeasteWC.postUpdate(22) } if (Temperatur_SOLL_OG_Bad.state == NULL) { Temperatur_SOLL_OG_Bad.postUpdate(23) } if (Temperatur_SOLL_OG_Schlafzimmer.state == NULL) { Temperatur_SOLL_OG_Schlafzimmer.postUpdate(20) } if (Temperatur_SOLL_OG_Lina.state == NULL) { Temperatur_SOLL_OG_Lina.postUpdate(20) } if (Temperatur_SOLL_DG_Bad.state == NULL) { Temperatur_SOLL_DG_Bad.postUpdate(23) } if (Temperatur_SOLL_DG_Buero.state == NULL) { Temperatur_SOLL_DG_Buero.postUpdate(18) } if (Temperatur_SOLL_DG_Studio.state == NULL) { Temperatur_SOLL_DG_Studio.postUpdate(18) } end // vim: syntax=Xtend
Kommentar