From f14516b68de5ea14c02b685f5981d186492c982c Mon Sep 17 00:00:00 2001 From: Kai Kreuzer Date: Mon, 9 Jan 2017 18:40:08 +0100 Subject: [PATCH] updated generated content Signed-off-by: Kai Kreuzer --- _data/bindings.csv | 4 +- addons/bindings/russound/readme.md | 463 ++++++++++++++++++ .../bindings/silvercrestwifisocket/readme.md | 49 ++ .../bindings/tellstick/doc/tellstick_duo.jpg | Bin 0 -> 53480 bytes addons/bindings/tellstick/readme.md | 183 ++++--- addons/bindings/vitotronic/readme.md | 8 +- addons/uis/basic/readme.md | 4 +- 7 files changed, 645 insertions(+), 66 deletions(-) create mode 100644 addons/bindings/russound/readme.md create mode 100644 addons/bindings/silvercrestwifisocket/readme.md create mode 100644 addons/bindings/tellstick/doc/tellstick_duo.jpg diff --git a/_data/bindings.csv b/_data/bindings.csv index e6de3e156c..f8e73371af 100644 --- a/_data/bindings.csv +++ b/_data/bindings.csv @@ -42,7 +42,9 @@ pioneeravr,PioneerAVR Configuration,"The binding can auto-discover the Pioneer A pulseaudio,Pulseaudio,"This binding integrates pulseaudio devices." rfxcom,RFXCOM,"This binding integrates large number of sensors and actuators from several different manufactures through [RFXCOM transceivers](http://www.rfxcom.com)." rme,RME,"This binding integrates the RME RainManager rain water pump and management system" +russound,Russound,"This binding provides integration with any Russound system that support the RIO protocol (all MCA systems, all X systems). This binding provides compatibility with RIO Protocol v1.7 (everything but the Media Managment functionality). The protocol document can be found in the Russound Portal ('RIO Protocol for 3rd Party Integrators.pdf'). Please update to the latest firmware to provide full compatibility with this binding. This binding does provide full feedback from the Russound system if events occur outside of openHAB (such as keypad usage)." samsungtv,Samsung TV,"This binding integrates the [Samsung TV's](http://www.samsung.com)." +silvercrestwifisocket,Silvercrest Wifi Plug,"This binding integrates the Silvercrest Wifi Socket SWS-A1 sold by Lidl." smaenergymeter,SMA Energy Meter,"This Binding is used to display the measured values of a SMA Energy Meter device. It shows purchased and grid feed-in power and energy." squeezebox,Logitech Squeezebox,"This binding integrates the [Logitech Media Server](http://www.mysqueezebox.com) and compatible Squeeze players." systeminfo,Systeminfo,"System information Binding provides operating system and hardware information including:" @@ -50,6 +52,6 @@ tellstick,Tellstick,"This is an openHAB binding for Tellstick devices produced b tesla,Tesla,"This binding integrates the [Tesla Electrical Vehicle](http://www.teslamotors.com)." toon,Toon,"The Toon bindings shows among others current room temperature, setpoint, energy and gas usage information." urtsi,Somfy URTSI II,"The addressable Universal RTS Interface II (URTSI II) can be used to communicate between home automation or other third party systems and SOMFY’s RTS Motors and controls. It is capable of individual or group control, and can be operated via infrared remote, RS232 and RS485 serial communication. Once an input is activated, an RTS radio command is sent to the automated window treatment." -vitotronic,vitotronic,"Viessmann heating systems with vitotronic has a optolink Interface for maintenance." +vitotronic,Vitotronic,"Viessmann heating systems with Vitotronic has a optolink Interface for maintenance." yamahareceiver,Yamahareceiver,"This binding connects openHAB with Yamaha Receivers of product line CX-A5000, RX-A30xx, RX-A20xx, RX-A10xx, RX-Vxxx, RX-Z7, DSP-Z7, RX-S600, HTR-xxxx." zwave,ZWave,"The ZWave binding supports an interface to a wireless Z-Wave home automation network." diff --git a/addons/bindings/russound/readme.md b/addons/bindings/russound/readme.md new file mode 100644 index 0000000000..d03e17f993 --- /dev/null +++ b/addons/bindings/russound/readme.md @@ -0,0 +1,463 @@ +--- +layout: documentation +--- + +{% include base.html %} + +# Russound Binding + +This binding provides integration with any Russound system that support the RIO protocol (all MCA systems, all X systems). This binding provides compatibility with RIO Protocol v1.7 (everything but the Media Managment functionality). The protocol document can be found in the Russound Portal ("RIO Protocol for 3rd Party Integrators.pdf"). Please update to the latest firmware to provide full compatibility with this binding. This binding does provide full feedback from the Russound system if events occur outside of openHAB (such as keypad usage). + +## Supported Bridges/Things + +* Bridge: Russound System (usually the main controller) +* Bridge: Russound Controller (1-6 controllers supported) +* Bridge: Russound Source (1-12 sources supported) +* Bridge: Russound Bank (1-6 banks supported for any tuner source) +* Thing: Russound Bank Preset (1-6 presets supported for each bank) +* Thing: Russound System Favorite (1-32 favorites supported) +* Bridge: Russound Zone (1-6 zones supported for each controller) +* Thing: Russound Zone Favorite (1-2 zone favorites for each zone) +* Thing: Russound Zone Presets (1-36 presets for each zone [corresponds to banks 1-6, presets 1-6 for each bank]) + +## Thing Configuration + +The following configurations occur for each of the bridges/things: + +### Russound System + +| Name | Type | Description | +|--------------|---------------|--------------------------------------------------------------------------| +| ipAddress | string | IP Address or host name of the russound system (usually main controller) | +| ping | int | Interval, in seconds, to ping the system to keep connection alive | +| retryPolling | int | Interval, in seconds, to retry a failed connection attempt | + +### Russound System Favorite + +| Name | Type | Description | +|--------------|---------------|--------------------------------------------------------------------------| +| favorite | int | The favorite # (1-32) | + +### Russound Source + +| Name | Type | Description | +|--------------|---------------|--------------------------------------------------------------------------| +| source | int | The source # (1-12) | + +### Russound Bank + +| Name | Type | Description | +|--------------|---------------|--------------------------------------------------------------------------| +| bank | int | The bank # (1-6) | + +### Russound Bank Preset + +| Name | Type | Description | +|--------------|---------------|--------------------------------------------------------------------------| +| preset | int | The preset # (1-6) | + +### Russound Controller + +| Name | Type | Description | +|--------------|---------------|--------------------------------------------------------------------------| +| controller | int | The controller address # (1-6) | + +### Russound Zone + +| Name | Type | Description | +|--------------|---------------|--------------------------------------------------------------------------| +| zone | int | The zone # (1-6) | + +### Russound Zone Favorite + +| Name | Type | Description | +|--------------|---------------|--------------------------------------------------------------------------| +| favorite | int | The zone favorite # (1-2) | + +### Russound Zone Preset Commands + +| Name | Type | Description | +|--------------|---------------|--------------------------------------------------------------------------| +| preset | int | The zone preset # (1-36 - corresponds to bank 1-6, preset 1-6) | + + +## Channels + +The following channels are supported for each bridge/thing + +### Russound System + +| Channel Type ID | Read/Write | Item Type | Description | +|--------------------|------------|--------------|--------------------------------------------------------------------- | +| version | R | String | The firmware version of the system | +| status | R | Switch | Whether any controller/zone is on (or if all are off) | +| language | RW | String | System language (english, chinese and russian are supported) | + +### Russound System Favorite + +| Channel Type ID | Read/Write | Item Type | Description | +|--------------------|------------|--------------|--------------------------------------------------------------------- | +| name | R | String | The name of the system favorite (changed by zone favorites) | +| valid | R | Switch | If system favorite is valid or not (changed by zone favorites) | + +### Russound Source (please see source cross-reference below for what is supported by which sources) + +| Channel Type ID | Read/Write | Item Type | Description | +|--------------------|------------|--------------|--------------------------------------------------------------------- | +| name | R | String | The name of the source | +| type | R | String | The type of source | +| ipaddress | R | String | The IP Address of the source | +| composername | R | String | The currently playing composer name | +| channel | R | String | The currently playing channel (usually tuner frequency) | +| channelname | R | String | The currently playing channel name | +| genre | R | String | The currently playing genre | +| artistname | R | String | The currently playing artist name | +| albumname | R | String | The currently playing album name | +| coverarturl | R | String | The currently playing URL to the cover art | +| coverart | R | Image | The currently playing cover art image | +| playlistname | R | String | The currently playing play list name | +| songname | R | String | The currently playing song name | +| mode | R | String | The provider mode or streaming service | +| shufflemode | R | String | The current shuffle mode | +| repeatmode | R | String | The current repeat mode | +| rating | R | String | The rating for the currently played song (can be changed via zone) | +| programservicename | R | String | The program service name (PSN) | +| radiotext | R | String | The radio text | +| radiotext2 | R | String | The radio text (line 2) | +| radiotext3 | R | String | The radio text (line 3) | +| radiotext4 | R | String | The radio text (line 4) | +| volume | R | String | The source's volume level (undocumented) | + +### Russound Bank + +| Channel Type ID | Read/Write | Item Type | Description | +|--------------------|------------|--------------|--------------------------------------------------------------------- | +| name | R | String | The name of the bank (changed by SCS-C5 software) | + +### Russound Preset + +| Channel Type ID | Read/Write | Item Type | Description | +|--------------------|------------|--------------|--------------------------------------------------------------------- | +| name | R | String | The name of the Preset (changed by zone preset commands) | +| valid | R | Switch | If preset is valid or not (changed by zone preset commands) | + +### Russound Controller + +| Channel Type ID | Read/Write | Item Type | Description | +|--------------------|------------|--------------|--------------------------------------------------------------------- | +| type | R | String | The model type of the controller (i.e. "MCA-C5") | +| ipaddress | R | String | The IPAddress of the controller (only if it's the main controller) | +| macaddress | R | String | The MAC Address of the controller (only if it's the main controller) | + +### Russound Zone + +| Channel Type ID | Read/Write | Item Type | Description | +|--------------------|------------|--------------|--------------------------------------------------------------------- | +| status | RW | Switch | Whether the zone is on or off | +| name | R | String | The name of the zone (changed by SCS-C5 software) | +| source | RW | Number | The (physical) number for the current source | +| volume | RW | Number | The current volume of the zone (0 to 50) | +| mute | RW | Switch | Whether the zone is muted or not | +| bass | RW | Number | The bass setting (-10 to 10) | +| treble | RW | Number | The treble setting (-10 to 10) | +| balance | RW | Number | The balance setting (-10 [full left] to 10 [full right]) | +| loudness | RW | Switch | Set's the loudness on/off | +| turnonvolume | RW | Number | The initial volume when turned on (0 to 50) | +| donotdisturb | RW | String | The do not disturb setting (on/off/slave) | +| partymode | RW | String | The party mode (on/off/master) | +| page | R | Switch | Whether the zone is in paging mode or not | +| sharedsource | R | Switch | Whether the zone's source is being shared or not | +| sleeptimeremaining | RW | Number | Sleep time, in minutes, remaining (0 to 60 in 5 step increments) | +| lasterror | R | String | The last error that occurred in the zone | +| enabled | R | Switch | Whether the zone is enabled or not | +| repeat | W | Switch | Toggle the repeat mode for the current source | +| shuffle | W | Switch | Toggle the shuffle mode for the current source | +| rating | W | Switch | Signal a like (ON) or dislike (OFF) to the current source | +| keypress | W | String | (Advanced) Send a keypress from the zone | +| keyrelease | W | String | (Advanced) Send a keyrelease from the zone | +| keyhold | W | String | (Advanced) Send a keyhold from the zone | +| keycode | W | String | (Advanced) Send a keycode from the zone | +| event | W | String | (Advanced) Send an event from the zone | + +* As of the time of this document, rating ON (like) produced an error in the firmware from the related command. This has been reported to Russound. +* keypress/keyrelease/keyhold/keycode/event are advanced commands that will pass the related event string to Russound (i.e. "EVENT C[x].Z[y]!KeyPress [stringtype]"). Please see the "RIO Protocol for 3rd Party Integrators.pdf" (found at the Russound Portal) for proper string forms. +* If you send a OnOffType to the volume will have the same affect as turning the zone on/off (ie sending OnOffType to "status") +* The volume PercentType will be scaled to Russound's volume of 0-50 (ie 50% = volume of 25, 100% = volume of 50) + + +### Russound Zone Favorite + +| Channel Type ID | Read/Write | Item Type | Description | +|--------------------|------------|--------------|----------------------------------------------------------------------------- | +| name | RW | String | The name of the zone favorite (only saved when the 'savexxx' cmd is issued) | +| valid | R | Switch | If favorite is valid or not ('on' when favorite is saved, 'off' when deleted | +| cmd | W | String | The favorite command (see note below) | + +The favorite command channel ("cmd") supports the following + +| Command Text | Description | +|--------------|-----------------------------------------------------| +| savesys | Save the associated zone as the a system favorite | +| restoresys | Restores the system favorite to the associated zone | +| deletesys | Deletes the system favorite | +| savezone | Save the associated zone as the a zone favorite | +| restorezone | Restores the zone favorite to the associated zone | +| deletezone | Deletes the zone favorite | + +### Russound Zone Preset Commands + +| Channel Type ID | Read/Write | Item Type | Description | +|--------------------|------------|--------------|-----------------------------------------------------------------------------------------| +| name | RW | String | The name of the preset (only saved when the 'save' preset cmd is issued) | +| valid | R | Switch | If favorite is valid or not ('on' when a preset is saved, 'off' when preset is deleted) | +| cmd | W | String | The preset command (see note below) | + +The preset command channel ("cmd") supports the following + +| Command Text | Description | +|--------------|--------------------------------------------| +| save | Save the associated zone as the preset | +| restore | Restores the preset to the associated zone | +| delete | Deletes the preset | + +### Source channel support cross reference + +| Channel Type ID | Sirius | XM | SMS3 | DMS 3.1 Media | DMS 3.1 AM/FM | iBridge | Internal AM/FM | Arcam T32 | Others | +|--------------------|--------|----|------|---------------|---------------|---------|----------------|-----------|--------| +| name | X | X | X | X | X | X | X | X | X | +| type | X | X | X | X | X | X | X | X | X | +| ipaddress | | | X | X | X | | | | | +| composername | X | | | | | | | | | +| channel | | | | | X | | X | | | +| channelname | X | X | | X | | | | X | | +| genre | X | X | | | | | | X | | +| artistname | X | X | X | X | | X | | | | +| albumname | | | X | X | | X | | | | +| coverarturl | 1 | | | X | | | | | | +| playlistname | | | X | X | | X | | | | +| songname | X | X | X | X | | X | | | | +| mode | | | | X | | | | | | +| shufflemode | | | | X | | X | | | | +| repeatmode | | | | X | | | | | | +| rating | | | | X | | | | | | +| programservicename | | | | | X | | X | | | +| radiotext | | | | | X | | X | X | | +| radiotext2 | | | | | | | | X | | +| radiotext3 | | | | | | | | X | | +| radiotext4 | | | | | | | | X | | + +1. Sirius Internal Radio Only + +## Full Example + +The following is an example of + +1. Main controller (#1) at ipaddress 192.168.1.24 +2. Two Sources connected to it (#1 is the internal AM/FM and #2 is a DMS 3.1) +3. Two System favorites (#1 FM 102.9, #2 Pandora on DMS) +4. One bank (called "FM-1") +5. Two presets within the bank (#1 FM 100.7, #2 FM 105.1) +6. Four zones on the controller (1-4 in various rooms) +7. Zone 1 has two favorites (#1 Spotify on DMS, #2 Airplay on DMS) +8. Zone 2 has two presets (#1 corresponds to bank 1/preset 1 [102.9], #2 corresponds to bank1/preset 2 [Pandora]) + +.things + +``` +russound:rio:home [ ipAddress="192.168.1.24", ping=30, retryPolling=10 ] +russound:sysfavorite:1 (russound:rio:home) [ favorite=1 ] +russound:sysfavorite:2 (russound:rio:home) [ favorite=2 ] +russound:controller:1 (russound:rio:home) [ controller=1 ] +russound:source:1 (russound:rio:home) [ source=1 ] +russound:source:2 (russound:rio:home) [ source=2 ] +russound:bank:1 (russound:source:1) [ bank=1 ] +russound:bankpreset:1 (russound:bank:1) [ preset=1 ] +russound:bankpreset:2 (russound:bank:1) [ preset=2 ] +russound:zone:1 (russound:controller:1) [ zone=1 ] +russound:zone:2 (russound:controller:1) [ zone=2 ] +russound:zone:3 (russound:controller:1) [ zone=3 ] +russound:zone:4 (russound:controller:1) [ zone=4 ] +russound:zonefavorite:1 (russound:zone:1) [ favorite=1 ] +russound:zonefavorite:2 (russound:zone:1) [ favorite=2 ] +russound:zonepreset:1 (russound:zone:2) [ preset=1 ] +russound:zonepreset:2 (russound:zone:2) [ preset=2 ] +``` + +This is an example of all the items that can be included (regardless of the above setup) +.items + +``` +String Rio_Version "Version [%s]" { channel="russound:rio:home:version" } +String Rio_Lang "Language [%s]" { channel="russound:rio:home:lang" } +Switch Rio_Status "Status [%s]" { channel="russound:rio:home:status" } +Switch Rio_AllOn "All Zones" { channel="russound:rio:home:allon" } + +String Rio_Ctl_Type "Model [%s]" { channel="russound:controller:1:type" } +String Rio_Ctl_IPAddress "IP Address [%s]" { channel="russound:controller:1:ipaddress" } +String Rio_Ctl_MacAddress "MAC [%s]" { channel="russound:controller:1:macaddress" } + +String Rio_Zone_Name "Name [%s]" { channel="russound:zone:1:name" } +Switch Rio_Zone_Status "Status" { channel="russound:zone:1:status" } +Number Rio_Zone_Source "Source [%s]" { channel="russound:zone:1:source" } +Number Rio_Zone_Bass "Bass [%s]" { channel="russound:zone:1:bass" } +Number Rio_Zone_Treble "Treble [%s]" { channel="russound:zone:1:treble" } +Number Rio_Zone_Balance "Balance [%s]" { channel="russound:zone:1:balance" } +Switch Rio_Zone_Loudness "Loudness [%s]" { channel="russound:zone:1:loudness" } +Number Rio_Zone_TurnOnVolume "Turn on Volume [%s]" { channel="russound:zone:1:turnonvolume" } +String Rio_Zone_DoNotDisturb "Do not Disturb [%s]" { channel="russound:zone:1:donotdisturb" } +String Rio_Zone_PartyMode "Party Mode [%s]" { channel="russound:zone:1:partymode" } +Dimmer Rio_Zone_Volume "Volume [%s %%]" { channel="russound:zone:1:volume" } +Switch Rio_Zone_Mute "Mute [%s]" { channel="russound:zone:1:mute" } +Switch Rio_Zone_Page "Page [%s]" { channel="russound:zone:1:page" } +Switch Rio_Zone_SharedSource "Shared Source [%s]" { channel="russound:zone:1:sharedsource" } +Number Rio_Zone_SleepTime "Sleep Time Remaining [%s]" { channel="russound:zone:1:sleeptimeremaining" } +String Rio_Zone_LastError "Last Error [%s]" { channel="russound:zone:1:lasterror" } +Switch Rio_Zone_Enabled "Enabled [%s]" { channel="russound:zone:1:enabled" } +Switch Rio_Zone_Repeat "Toggle Repeat" { channel="russound:zone:1:repeat", autoupdate="false" } +Switch Rio_Zone_Shuffle "Toggle Shuffle" { channel="russound:zone:1:shuffle", autoupdate="false" } +Switch Rio_Zone_Rating "Rating" { channel="russound:zone:1:rating", autoupdate="false" } + +String Rio_Src_Name "Name [%s]" { channel="russound:source:1:name" } +String Rio_Src_Type "Type [%s]" { channel="russound:source:1:type" } +String Rio_Src_IP "IPAddress [%s]" { channel="russound:source:1:ipaddress" } +String Rio_Src_Composer "Composer [%s]" { channel="russound:source:1:composername" } +String Rio_Src_Channel "Channel [%s]" { channel="russound:source:1:channel" } +String Rio_Src_ChannelName "Channel Name [%s]" { channel="russound:source:1:channelname" } +String Rio_Src_Genre "Genre [%s]" { channel="russound:source:1:genre" } +String Rio_Src_ArtistName "Artist [%s]" { channel="russound:source:1:artistname" } +String Rio_Src_AlbumName "Album [%s]" { channel="russound:source:1:albumname" } +String Rio_Src_Cover "Cover Art [%s]" { channel="russound:source:1:coverarturl" } +String Rio_Src_PlaylistName "PlayList [%s]" { channel="russound:source:1:playlistname" } +String Rio_Src_SongName "Song [%s]" { channel="russound:source:1:songname" } +String Rio_Src_Mode "Mode [%s]" { channel="russound:source:1:mode" } +String Rio_Src_Shuffle "Shuffle [%s]" { channel="russound:source:1:shufflemode" } +String Rio_Src_Repeat "Repeat [%s]" { channel="russound:source:1:repeatmode" } +String Rio_Src_Rating "Rating [%s]" { channel="russound:source:1:rating" } +String Rio_Src_ProgramServiceName "PSN [%s]" { channel="russound:source:1:programservicename" } +String Rio_Src_RadioText "Radio Text [%s]" { channel="russound:source:1:radiotext" } +String Rio_Src_RadioText2 "Radio Text #2 [%s]" { channel="russound:source:1:radiotext2" } +String Rio_Src_RadioText3 "Radio Text #3 [%s]" { channel="russound:source:1:radiotext3" } +String Rio_Src_RadioText4 "Radio Text #4 [%s]" { channel="russound:source:1:radiotext4" } + +String Rio_Sys_Favorite_Name "Name1 [%s]" { channel="russound:sysfavorite:1:name" } +Switch Rio_Sys_Favorite_Valid "Valid1 [%s]" { channel="russound:sysfavorite:1:valid" } +String Rio_Sys_Favorite_Name2 "Name2 [%s]" { channel="russound:sysfavorite:2:name" } +Switch Rio_Sys_Favorite_Valid2 "Valid2 [%s]" { channel="russound:sysfavorite:2:valid" } + +String Rio_Zone_Favorite_Name "Name [%s]" { channel="russound:zonefavorite:1:name" } +Switch Rio_Zone_Favorite_Valid "Valid [%s]" { channel="russound:zonefavorite:1:valid", autoupdate="false" } +String Rio_Zone_Favorite_Cmd "Command" { channel="russound:zonefavorite:1:cmd" } +String Rio_Zone_Favorite_Name2 "Name2 [%s]" { channel="russound:zonefavorite:2:name" } +Switch Rio_Zone_Favorite_Valid2 "Valid2 [%s]" { channel="russound:zonefavorite:2:valid", autoupdate="false" } +String Rio_Zone_Favorite_Cmd2 "Command2" { channel="russound:zonefavorite:2:cmd" } + +String Rio_Src_Bank_Name "Name [%s]" { channel="russound:bank:1:name" } + +String Rio_Bank_Preset_Name "Name [%s]" { channel="russound:bankpreset:1:name" } +Switch Rio_Bank_Preset_Valid "Valid [%s]" { channel="russound:bankpreset:1:valid" } +String Rio_Bank_Preset_Name2 "Name2 [%s]" { channel="russound:bankpreset:2:name" } +Switch Rio_Bank_Preset_Valid2 "Valid2 [%s]" { channel="russound:bankpreset:2:valid" } + +String Rio_Zone_Preset_Cmd "Command" { channel="russound:zonepreset:1:cmd" } +String Rio_Zone_Preset_Cmd2 "Command2" { channel="russound:zonepreset:2:cmd" } +``` + +.sitemap + +``` +Frame label="Russound" { + Text label="System" { + Text item=Rio_Version + Text item=Rio_Status + Selection item=Rio_Lang mappings=[ENGLISH="English", RUSSIAN="Russian", CHINESE="Chinese"] + Switch item=Rio_AllOn + Text label="Favorites" { + Text item=Rio_Sys_Favorite_Name + Text item=Rio_Sys_Favorite_Valid + Text item=Rio_Sys_Favorite_Name2 + Text item=Rio_Sys_Favorite_Valid2 + } + } + Text label="Source 1" { + Text label="Bank 1" { + Text item=Rio_Src_Bank_Name + Text label="Presets" { + Text item=Rio_Bank_Preset_Name + Text item=Rio_Bank_Preset_Valid + Text item=Rio_Bank_Preset_Name2 + Text item=Rio_Bank_Preset_Valid2 + } + } + } + + Text label="Controller 1" { + Text item=Rio_Ctl_Type + Text item=Rio_Ctl_IPAddress + Text item=Rio_Ctl_MacAddress + + Text label="Zone 1" { + Text item=Rio_Zone_Name + Switch item=Rio_Zone_Status + Selection item=Rio_Zone_Source mappings=[1="Room1", 2="Room2", 3="Room3", 4="Room4"] + Setpoint item=Rio_Zone_Bass + Setpoint item=Rio_Zone_Treble + Setpoint item=Rio_Zone_Balance + Switch item=Rio_Zone_Loudness + Setpoint item=Rio_Zone_TurnOnVolume + Selection item=Rio_Zone_DoNotDisturb mappings=[ON="On", OFF="Off", SLAVE="Slave"] + Selection item=Rio_Zone_PartyMode mappings=[ON="On", OFF="Off", MASTER="Master"] + Slider item=Rio_Zone_Volume + Switch item=Rio_Zone_Mute + Text item=Rio_Zone_Page + Text item=Rio_Zone_SharedSource + Setpoint item=Rio_Zone_SleepTime minValue="0" maxValue="60" step="5" + Text item=Rio_Zone_LastError + Text item=Rio_Zone_Enabled + Switch item=Rio_Zone_Shuffle mappings=[ON="Toggle"] + Switch item=Rio_Zone_Repeat mappings=[ON="Toggle"] + Switch item=Rio_Zone_Rating mappings=[ON="Like"] + Switch item=Rio_Zone_Rating mappings=[OFF="Dislike"] + + Text label="Source" { + Text item= Rio_Src_Type + Text item= Rio_Src_IP + Text item= Rio_Src_Composer + Text item= Rio_Src_Channel + Text item= Rio_Src_ChannelName + Text item= Rio_Src_Genre + Text item= Rio_Src_ArtistName + Text item= Rio_Src_AlbumName + Text item= Rio_Src_Cover + Image item= Rio_Src_Cover + Text item= Rio_Src_PlaylistName + Text item= Rio_Src_SongName + Text item= Rio_Src_Mode + Text item= Rio_Src_Shuffle + Text item= Rio_Src_Repeat + Text item= Rio_Src_Rating + Text item= Rio_Src_ProgramServiceName + Text item= Rio_Src_RadioText + Text item= Rio_Src_RadioText2 + Text item= Rio_Src_RadioText3 + Text item= Rio_Src_RadioText4 + } + + Text label="Favorite" { + Text item=Rio_Zone_Favorite_Name + Text item=Rio_Zone_Favorite_Valid + Selection item=Rio_Zone_Favorite_Cmd mappings=[savezone="Save Zone", restorezone="Restore Zone", deletezone="Delete Zone", savesys="Save System", restoresys="Restore System", deletesys="Delete System"] + Text item=Rio_Zone_Favorite_Name2 + Text item=Rio_Zone_Favorite_Valid2 + Selection item=Rio_Zone_Favorite_Cmd2 mappings=[savezone="Save Zone", restorezone="Restore Zone", deletezone="Delete Zone", savesys="Save System", restoresys="Restore System", deletesys="Delete System"] + } + + Text label="Preset" { + Selection item=Rio_Zone_Preset_Cmd mappings=[save="Save", restore="Restore", delete="Delete"] + Selection item=Rio_Zone_Preset_Cmd2 mappings=[save="Save", restore="Restore", delete="Delete"] + } + } + } +} +``` + + diff --git a/addons/bindings/silvercrestwifisocket/readme.md b/addons/bindings/silvercrestwifisocket/readme.md new file mode 100644 index 0000000000..6f2d05cbd1 --- /dev/null +++ b/addons/bindings/silvercrestwifisocket/readme.md @@ -0,0 +1,49 @@ +--- +layout: documentation +--- + +{% include base.html %} + +# Silvercrest Wifi Plug Binding + +This binding integrates the Silvercrest Wifi Socket SWS-A1 sold by Lidl. + +## Supported Things + +- Silvercrest Wifi Socket SWS-A1 - [(Owner Manual)](http://www.lidl-service.com/static/118127777/103043_FI.pdf) -- Tested with firmware version: 1.41, 1.60, 1.70 + + +## Discovery + +The Discovery of Wifi Sockets is always running in the background. If a command is sent to wifi socket using the android/ios app or if the physical button in the device is pressed, the device will be recognized and will be placed in the Inbox. + +## Binding Configuration + +The binding does not require any special configuration. The Wifi Socket should be connected to the same wifi network. + +## Thing Configuration + +To configure a Wifi Socket manually only the mac address is required. You can check the Wifi Socket mac address in your router or using some mobile app. + +Wifi Socket thing parameters: + +| Parameter ID | Parameter Type | Mandatory | Description | Default | +|--------------|----------------|------|------------------|-----| +| macAddress | text | true | The socket MAC address | | +| hostAddress | text | false | The socket Host address. The binding is capable to discover the host address. | | +| updateInterval | integer | false | Update time interval in seconds to request the status of the socket. | 60 | + + +E.g. + +``` +Thing silvercrestwifisocket:wifiSocket:lamp [ macAddress="ACCF23343C50" ] +``` + +## Channels + +The Silvercrest Wifi Socket support the following channel: + +| Channel Type ID | Item Type | Description | +|-----------------|------------------------|--------------| +| switch | Switch | Wifi Socket Switch. | \ No newline at end of file diff --git a/addons/bindings/tellstick/doc/tellstick_duo.jpg b/addons/bindings/tellstick/doc/tellstick_duo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..39e2f9d142893e6bd1c8999cfbe9e2713ac87774 GIT binary patch literal 53480 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%0DTE3 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 Many of the supported devices are cheaper and "low-end" and support have been made by reverse engineer the transmission protocols.
-All of these 433 MHz devices is one-way, so some versions of the Tellstick monitoring the air to keep the state of all devices. - -The latest versions have also implemented Z-Wave as transmission protocol which open up for more robust transmission due two-ways communication. - +All of these 433 MHz devices is one-way, so some versions of the Tellstick monitoring the air to keep the state of all devices. + +The latest versions have also implemented Z-Wave as transmission protocol which open up for more robust transmission due two-ways communication. + +

+Tellstick Duo with device +

+ ## Supported Things -This binding implements two different API: -**1)** *Telldus Core* which is a local only interface supported by USB based device.
-**2)** *Telldus Live* which is a REST based cloud service maintained by Telldus.
-3) (According to [Telldus](http://developer.telldus.com/blog/2016/01/21/local-api-for-tellstick-znet-lite-beta) are they working with a local REST based API for the new Z-Wave devices. This is currently **NOT** supported by this binding.) +This binding supports the following thing types: -Depending on your Tellstick model different API methods is available: +* *Dimmable Device* - Usually for controlling lamps. `dimmer` +* *Switchable Device* - On/Off only could be lamps or other electronic equipment. `switch` +* *Sensors* - Often temperature-, barometic- and humidity-sensors. `sensor` - - - - - - - -
Model Telldus Core Telldus Live Verified working with openHAB
Tellstick BasicXX
Tellstick DuoXXX
Tellstick NetX
Tellstick ZNet LiteX
Tellstick ZNet ProXX
+Additionally the binding have two types of bridge things which correspond to available API types: +* *Telldus Core Bridge* - Oldest API, used by USB devices. `telldus-core` +* *Telldus Live Bridge* - Telldus Cloud service, all devices with online access. `telldus-live` +***Switchbased sensors workaround***
+*Some 433MHz magnetic & PIR sensors for example magnetic door sensors are detected as a regular `switch` things instead of a separate type. There is technically no way of distinguish them apart from regulur `switch` things. For using them as sensors only (not paired to a lamp) please consult the workaround in the channel section.* -This binding supports the following thing types: +## Discovery -* Telldus Core Bridge -* Telldus Live Bridge -* Dimmable Device -* Switchable Device -* Sensors +Devices which is added to *Telldus Core* and *Telldus Live* can be discovered by openHAB. +When you add this binding it will try to discover the *Telldus Core Bridge*. If it's installed correct its devices will show up. +If you want to use the *Telldus Live* its bridge, *Telldus Live bridge* need to be added manually. ## Binding Configuration ---- +***For USB connected tellsticks only, eg. Basic and DUO***
+*First of all you need to make sure that your JVM is matching your installed Telldus Center. This normally means openHab must run on a 32bit JVM for windows and a 64bit JVM for linux. For windows the binding is hardcoded to look for Telldus Center in Programs Files ("C:/Program Files/Telldus/;C:/Program Files (x86)/Telldus/"). If you have trouble getting the telldus core library to work you can modify the library path using* -#####For Telldus Core only##### +## Thing Configuration -*First of all you need to make sure that your JVM is matching your installed Telldus Center. This normally means openHab must run on a 32bit JVM for windows and a 64bit JVM for linux. For windows the binding is hardcoded to look for Telldus Center in Programs Files ("C:/Program Files/Telldus/;C:/Program Files (x86)/Telldus/"). If you have trouble getting the telldus core library to work you can modify the library path using* +Only the bridges require manual configuration. The devices and sensors should not be added by hand, let the discovery/inbox initially configure these. -## Discovery +### Dimmers & switches -Both Telldus Core and Live devices will be discovered once the bridges are configured. +There is an option to override the resend count of the commands. Use the option `repeat` for that. Default resend count is 2. -## Thing Configuration +### Bridges -```xtend -Bridge tellstick:telldus-core:1 "Tellstick Duo" [] +Depending on your tellstick device type there is different ways of using this binding. The binding implements two different API: +**1)** *Telldus Core* which is a local only interface supported by USB based device.
+**2)** *Telldus Live* which is a REST based cloud service maintained by Telldus.
-Bridge tellstick:telldus-live:2 "Tellstick ZWave" [publicKey="XXX", privateKey="YYYY", token= "ZZZZ", tokenSecret="UUUU"] -``` +> Not implemented yet but supported by some new devices:
+> **3)** *Local Rest API* is a local API which would work similar to Telldus Live but local. -## Channels +Depending on your Tellstick model different API methods is available: + + + + + + + + + + +
Model Telldus Core Telldus Live Local REST API Verified working with openHAB
Tellstick BasicXX
Tellstick DuoXXX
Tellstick Net v.1X
Tellstick Net v.2XX
Tellstick ZNet Lite v.1XXX
Tellstick ZNet Lite v.2XX
Tellstick ZNet Pro (Not released)XX
-There are two levels of discovery. When you add this binding it will try to discover the Telldus Core Bridge (this only works if you have Telldus installed and right 32/64 bit version of java). -If you want to use the Telldus Live bridge, then you manually need to add this thing. -When you add either of those all devices and sensors will be discovered and reported in the inbox. +#### Telldus Core Bridge -## Thing Configuration +``` +Bridge tellstick:telldus-core:1 "Tellstick Duo" [resendInterval="200"] +``` -#####Telldus Core Bridge##### +Optional: -- **libraryPath:** The path to tellduscore.dll/so, +- **libraryPath:** The path to tellduscore.dll/so, - **resendInterval:** The interval between each transmission of command, default 100ms. -#####Telldus Live Bridge##### +#### Telldus Live Bridge To configure Telldus Live you have request OAuth tokens from Telldus. Goto this page http://api.telldus.com/keys/index and request your keys and update the config. + +``` +Bridge tellstick:telldus-live:2 "Tellstick ZWave" [publicKey="XXX", privateKey="YYYY", token= "ZZZZ", tokenSecret="UUUU"] +``` + +Required: + - **privateKey:** Private key - **publicKey:** Public key - **token:** Token - **tokenSecret:** Token secret -- **refreshInterval:** How often we should contact Telldus.Live to check for updates -The devices and sensors should not be configured by hand, let the discovery/inbox configure these. +Optional: + +- **refreshInterval:** How often we should contact *Telldus Live* to check for updates ## Channels -Actuators (dimmer/switch) support the following channels: -| Channel Type ID | Item Type | Description | -|-----------------|--------------|----------------------------------------------- | -| dimmer | Number | This channel indicates the current dim level | -| state | Switch | This channel indicates whether a device is turned on or off. | -| timestamp | DateTime | This channel reports the last time this device state changed. | + + + + + + +
Actuators ([dimmer]/[switch]) support the following channels:
Channel Type ID Item Type Description
dimmerNumberThis channel indicates the current dim level
stateSwitchThis channel indicates whether a device is turned on or off.
timestampDateTimeThis channel reports the last time this device state changed.
+ + + + + + + +
Sensors ([sensor]) support the following channels:
Channel Type ID Item Type Description
humidityNumberThis channel reports the current humidity in percentage.
temperatureNumberThis channel reports the current temperature in celsius.
timestampDateTime This channel reports the last time this sensor was updates.
+ +### Switchbased sensor workaround + +All switchbased sensors are binary and the goal is to represent them as a `contact` item in openhab. Eg. a door is open or closed and can't be altered by sending a radio signal. To achive that we will create a proxy item which is updated by a rule. + + +First create another proxy item for every sensor: -Sensors support the following channels: -| Channel Type ID | Item Type | Description | -|-----------------|--------------|----------------------------------------------- | -| humidity | Number | This channel reports the current humidity in percentage | -| temperature | Number | This channel reports the current temperature in celsius | -| timestamp | DateTime | This channel reports the last time this sensor was updates. | +``` +Switch front_door_sensor "Front door" {channel="tellstick:switch:1:7:state"} +Contact front_door_proxy "Front door" +``` + +Then create a rule which updates the proxy item: + +``` +rule "proxy_front_door_on" +when + Item front_door_sensor changed to ON +then + postUpdate(front_door_proxy, OPEN); +end + +rule "proxy_front_door_off" +when + Item front_door_sensor changed to OFF +then + postUpdate(front_door_proxy, CLOSED); +end +``` ## Full Example -```xtend -Bridge tellstick:telldus-core:1 "Tellstick Duo" [] +### tellstick.things + +``` +Bridge tellstick:telldus-core:1 "Tellstick Duo" [resendInterval="200"] Bridge tellstick:telldus-live:2 "Tellstick ZWave" [refresh="10000", publicKey="XXXXXXXX", privateKey="YYYYYY", token= "ZZZZZZZZ", tokenSecret="UUUUUUUUUU"] ``` + +Devices are preferable discovered automatically. +Add them either with karaf: `inbox approve ` or in paperUI. The bridges can also be added with PaperUI. + +### tellstick.items + +List available devices in karaf with `things` or get the channels in paperUI. + +``` +Slider living_room_ceiling "Living room ceiling" {channel="tellstick:dimmer:1:3:state"} +Switch living_room_table "Living room table" {channel="tellstick:switch:1:3:state"} +Number inside_temperature "Inside temperature [%.1f °C]" {channel="tellstick:sensor:1:47_temperaturehumidity_fineoffset:temperature"} +Number inside_humidity "Inside humidity [%.1f RH]" {channel="tellstick:sensor:1:47_temperaturehumidity_fineoffset:humidity"} +``` diff --git a/addons/bindings/vitotronic/readme.md b/addons/bindings/vitotronic/readme.md index 2e65365cd1..3d3fb2da02 100644 --- a/addons/bindings/vitotronic/readme.md +++ b/addons/bindings/vitotronic/readme.md @@ -4,17 +4,17 @@ layout: documentation {% include base.html %} -# vitotronic Binding +# Vitotronic Binding -Viessmann heating systems with vitotronic has a optolink Interface for maintenance. +Viessmann heating systems with Vitotronic has a optolink Interface for maintenance. This interface can use for get/set data in the heating system. [see on openv](http://openv.wikispaces.com) -The vitotronic binding is a solution to bind this interface into openHAB2. +The Vitotronic binding is a solution to bind this interface into openHAB2. It supports the separation of the heating adaption from the integration in [openHAB2](http://www.openhab.org/). ![Architectur](doc/architecture_vitotronic.jpg) -The adapter transform the address oriented raw interface of the vitotronic to a abstract format. +The adapter transform the address oriented raw interface of the Vitotronic to a abstract format. The adapter itself is not a part of the openhab2 binding. [A alpha version is available here](https://github.com/steand/optolink) [More Information about the adapter](https://github.com/steand/optolink/wiki) diff --git a/addons/uis/basic/readme.md b/addons/uis/basic/readme.md index 2367bdd5e7..d8c0da9307 100644 --- a/addons/uis/basic/readme.md +++ b/addons/uis/basic/readme.md @@ -12,9 +12,7 @@ Features: * Responsive layout suitable for various screen sizes * AJAX navigation -* Live update1 - -1: as for now, only control states and icons are updated. Visibility changes require a page reload. +* Live update Configuration: