Updated external content (Jenkins build 94)

pull/1325/head
openHAB Build Server 2020-11-28 20:35:59 +00:00
parent 773750875b
commit 020aaa962c
21 changed files with 839 additions and 157 deletions

File diff suppressed because one or more lines are too long

View File

@ -599,7 +599,7 @@ Expert:
You can use a json formatted string to control title, sound and volume:
```php
{ "sound": true, "speak":"<Speak>" "title": "<Title>", "body": "<Body Text>", "volume": 20}
{ "sound": true, "speak":"<Speak>", "title": "<Title>", "body": "<Body Text>", "volume": 20}
```
The combination of `sound=true` and `speak` in SSML syntax is not allowed.

View File

@ -260,6 +260,7 @@ The channels are kept consistent as much as possible from brand to brand to make
| `pan` | Dimmer | Works with ONVIF cameras that can be moved. |
| `parkingAlarm` | Switch (read only) | When an API camera detects a car, this will turn ON. |
| `pirAlarm` | Switch (read only) | When a camera with PIR ability detects motion, this turns ON. |
| `privacyMode` | Switch | Enable or disable the Privacy Mode of newer Amcrest/Dahua cameras. The camera will move the lens way down and stop the stream. |
| `recordingGif` | Number (read only) | How many seconds recording to GIF for. 0 when file ready. |
| `recordingMp4` | Number (read only) | How many seconds recording to MP4 for. 0 when file ready. |
| `rtspUrl` | String | The URL for the cameras auto detected RTSP stream. |

View File

@ -145,7 +145,7 @@ If a special command is needed, the [Hit Key](#hit-key) action (German: "Sende T
|---------------------------------|----------------------------------|------------------------|------|--------------------------------|-------------------------------------------------------------------------------------------------------------------------------|
| Dimmer Output Control Single | Ausgang | output | 1-4 | Dimmer, Switch | Sets the dimming value of an output with a given ramp. |
| Relay | Relais | relay | 1-8 | Switch | Controls a relay and visualizes its state. |
| Visualize Binary Sensor | Binärsensor anzeigen | binarysensor | 1-8 | Contact | Visualizes the state of a binary sensor. |
| Visualize Binary Sensor | Binärsensor anzeigen | binarysensor | 1-8 | Contact | Visualizes the state of a binary sensor (special channel mapping for some devices). |
| LED Control | LED-Steuerung | led | 1-12 | Text (ON, OFF, BLINK, FLICKER) | Controls an LED and visualizes its current state. |
| Visualize Logic Operations | Logik Funktion anzeigen | logic | 1-4 | Text (NOT, OR, AND) | Visualizes the result of the logic operation. |
| Motor/Shutter on Dimmer Outputs | Motor/Rollladen an Ausgängen | rollershutteroutput | 1-4 | Rollershutter | Control roller shutters on dimmer outputs |
@ -492,7 +492,7 @@ String M10_Logic2 {channel="lcn:module:b827ebfea4bb:S000M010:logic#2"[profile="t
// OR=Some windows are open
// AND=All windows are open
// Binary Sensors
// Binary Sensors (Channels 1-3 of LCN-B3I are mapped to BinarySensor6, BinarySensor7, BinarySensor8)
Contact M10_BinarySensor1 {channel="lcn:module:b827ebfea4bb:S000M010:binarysensor#1"}
// Variables
@ -564,7 +564,7 @@ sitemap lcn label="My home automation" {
Default item=M10_Logic1 label="Logic Operation 1"
Default item=M10_Logic2 label="Logic Operation 2"
// Binary Sensors
// Binary Sensors (Channels 1-3 of LCN-B3I are mapped to BinarySensor6, BinarySensor7, BinarySensor8)
Default item=M10_BinarySensor1 label="Binary Sensor 1"
// Variables

View File

@ -112,6 +112,7 @@ Currently the miio binding supports more than 210 different models.
| Mi Air Quality Monitor S1 | miio:basic | [cgllc.airmonitor.s1](#cgllc-airmonitor-s1) | Yes | |
| Mi Air Humidifier | miio:basic | [zhimi.humidifier.v1](#zhimi-humidifier-v1) | Yes | |
| Mi Air Humidifier | miio:basic | [zhimi.humidifier.ca1](#zhimi-humidifier-ca1) | Yes | |
| Mi Air Evaporative Humidifier 2 | miio:basic | [zhimi.humidifier.ca4](#zhimi-humidifier-ca4) | Yes | |
| Mi Air Humidifier 2 | miio:basic | [zhimi.humidifier.cb1](#zhimi-humidifier-cb1) | Yes | |
| Mija Smart humidifier | miio:basic | [deerma.humidifier.mjjsq](#deerma-humidifier-mjjsq) | Yes | |
| Mi Air Purifier v1 | miio:basic | [zhimi.airpurifier.v1](#zhimi-airpurifier-v1) | Yes | |
@ -171,7 +172,7 @@ Currently the miio binding supports more than 210 different models.
| Mr Bond M1 Pro Smart Clothes Dryer | miio:basic | [mrbond.airer.m1pro](#mrbond-airer-m1pro) | Yes | Experimental support. Please report back if all channels are functional. Preferably share the debug log of property refresh and command responses |
| Mr Bond M1 Smart Clothes Dryer | miio:basic | [mrbond.airer.m1s](#mrbond-airer-m1s) | Yes | Experimental support. Please report back if all channels are functional. Preferably share the debug log of property refresh and command responses |
| Mr Bond M1 Super Smart Clothes Dryer | miio:basic | [mrbond.airer.m1super](#mrbond-airer-m1super) | Yes | Experimental support. Please report back if all channels are functional. Preferably share the debug log of property refresh and command responses |
| Xiaomi Mi Robot Vacuum MOP Essential | miio:basic | [mijia.vacuum.v2](#mijia-vacuum-v2) | Yes | Action commands are unknown at this time. According to spec identified actions for execution are:<br />`action{"did":"vacuum-start-sweep","siid":2,"aiid":1,"in":[]}`<br />`action{"did":"vacuum-stop-sweeping","siid":2,"aiid":2,"in":[]}`<br />`action{"did":"vacuum-start-charge","siid":2,"aiid":3,"in":[]}`<br />`action{"did":"filter-reset-filter-life","siid":11,"aiid":1,"in":[]}`<br />`action{"did":"brush-cleaner-reset-brush-life","siid":14,"aiid":1,"in":[]}`<br />`action{"did":"brush-cleaner-reset-brush-life","siid":15,"aiid":1,"in":[]}`<br />Please test and feedback if they are working to they can be linked to a channel. |
| Xiaomi Mi Robot Vacuum MOP Essential | miio:basic | [mijia.vacuum.v2](#mijia-vacuum-v2) | Yes | This device may be overwhelmed if refresh is too frequent, slowing down the responses. Suggest to increase refresh time to 120 seconds |
| Xiaomi Scishare smart capsule coffee machine | miio:basic | [scishare.coffee.s1102](#scishare-coffee-s1102) | Yes | This device does not allow for regular querying for the status. Hence the status is not updated for the action channels.<br />Experimental support. Please report back if all channels are functional. Preferably share the debug log of property refresh and command responses |
| Xiaomi Scishare smart capsule coffee machine | miio:basic | [scishare.coffee.s1301](#scishare-coffee-s1301) | Yes | This device does not allow for regular querying for the status. Hence the status is not updated for the action channels.<br />Experimental support. Please report back if all channels are functional. Preferably share the debug log of property refresh and command responses |
| Xiaomi Philips Eyecare Smart Lamp 2 | miio:basic | [philips.light.sread1](#philips-light-sread1) | Yes | |
@ -513,6 +514,29 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
| temperature | Number | Temperature | |
| childlock | Switch | Child Lock | |
### Mi Air Evaporative Humidifier 2 (<a name="zhimi-humidifier-ca4">zhimi.humidifier.ca4</a>) Channels
| Channel | Type | Description | Comment |
|------------------|---------|-------------------------------------|------------|
| power | Switch | Power | |
| mode | Number | Mode | |
| Fault | Number | Humidifier Device Fault | |
| humidity | Number | Humidity | |
| targetHumidity | Number | Target Humidity | |
| waterlevel | Number | Water Level | |
| bright | Number | LED Brightness | |
| buzzer | Switch | Buzzer Status | |
| dry | Switch | Dry | |
| usedhours | Number:Time | Run Time | |
| powerhours | Number:Time | Power Time | |
| targetmotorspeed | Number | Target Motor Speed | |
| actualmotorspeed | Number | Actual Motor Speed | |
| temperature | Number:Temperature | Temperature | |
| childlock | Switch | Child Lock | |
| ButtonPressed | Number | Button Pressed | |
| clean | Switch | Clean Mode | |
| countryCode | Number | Country Code | |
### Mi Air Humidifier 2 (<a name="zhimi-humidifier-cb1">zhimi.humidifier.cb1</a>) Channels
| Channel | Type | Description | Comment |
@ -1355,7 +1379,7 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
| Channel | Type | Description | Comment |
|------------------|---------|-------------------------------------|------------|
| vacuumaction | String | Vacuum Action | This channel accepts `start`, `stop` and `dock`. The commands have not been confirmed working yet. Please feedback |
| vacuumaction | String | Vacuum Action | This channel accepts `start`, `stop`, `findme` and `dock`. |
| status | Number | Robot Cleaner - Status | Value mapping [1="Idle",2="Sweeping",3="Paused",4="Error",5="Charging",6="Go Charging"] |
| fault | Number | Robot Cleaner - Device Fault | Value mapping [0="No Faults",1="Left-wheel-error",2="Right-whelel-error",3="Cliff-error",4="Low-battery-error",5="Bump-error",6="Main-brush-error",7="Side-brush-error",8="Fan-motor-error",9="Dustbin-error",10="Charging-error",11="No-wate-error",12="Pick-up-error"] |
| mode | Number | Robot Cleaner - Mode | Value mapping [1="Auto-clean",2="Spot-clean",3="Wallflow-clean"] |
@ -3419,6 +3443,32 @@ Number temperature "Temperature" (G_humidifier) {channel="miio:basic:humidifier:
Switch childlock "Child Lock" (G_humidifier) {channel="miio:basic:humidifier:childlock"}
```
### Mi Air Evaporative Humidifier 2 (zhimi.humidifier.ca4) item file lines
note: Autogenerated example. Replace the id (humidifier) in the channel with your own. Replace `basic` with `generic` in the thing UID depending on how your thing was discovered.
```java
Group G_humidifier "Mi Air Evaporative Humidifier 2" <status>
Switch power "Power" (G_humidifier) {channel="miio:basic:humidifier:power"}
Number mode "Mode" (G_humidifier) {channel="miio:basic:humidifier:mode"}
Number Fault "Humidifier Device Fault" (G_humidifier) {channel="miio:basic:humidifier:Fault"}
Number humidity "Humidity" (G_humidifier) {channel="miio:basic:humidifier:humidity"}
Number targetHumidity "Target Humidity" (G_humidifier) {channel="miio:basic:humidifier:targetHumidity"}
Number waterlevel "Water Level" (G_humidifier) {channel="miio:basic:humidifier:waterlevel"}
Number bright "LED Brightness" (G_humidifier) {channel="miio:basic:humidifier:bright"}
Switch buzzer "Buzzer Status" (G_humidifier) {channel="miio:basic:humidifier:buzzer"}
Switch dry "Dry" (G_humidifier) {channel="miio:basic:humidifier:dry"}
Number:Time usedhours "Run Time" (G_humidifier) {channel="miio:basic:humidifier:usedhours"}
Number:Time powerhours "Power Time" (G_humidifier) {channel="miio:basic:humidifier:powerhours"}
Number targetmotorspeed "Target Motor Speed" (G_humidifier) {channel="miio:basic:humidifier:targetmotorspeed"}
Number actualmotorspeed "Actual Motor Speed" (G_humidifier) {channel="miio:basic:humidifier:actualmotorspeed"}
Number:Temperature temperature "Temperature" (G_humidifier) {channel="miio:basic:humidifier:temperature"}
Switch childlock "Child Lock" (G_humidifier) {channel="miio:basic:humidifier:childlock"}
Number ButtonPressed "Button Pressed" (G_humidifier) {channel="miio:basic:humidifier:ButtonPressed"}
Switch clean "Clean Mode" (G_humidifier) {channel="miio:basic:humidifier:clean"}
Number countryCode "Country Code" (G_humidifier) {channel="miio:basic:humidifier:countryCode"}
```
### Mi Air Humidifier 2 (zhimi.humidifier.cb1) item file lines
note: Autogenerated example. Replace the id (humidifier) in the channel with your own. Replace `basic` with `generic` in the thing UID depending on how your thing was discovered.

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

View File

@ -47,10 +47,6 @@ The bridge enables communication with other Nikobus components:
* `rollershutter-module` - Nikobus roller shutter module,
* `push-button` - Nikobus physical push button.
## Discovery
The binding does not support any automatic discovery of Things.
## Bridge Configuration
The binding can connect to the PC-Link via serial interface.
@ -188,6 +184,84 @@ Thing push-button pb1 [ address = "28092A", impactedModules = "switch-module:s1:
In addition to the status requests triggered by button presses, there is also a scheduled status update interval defined by the `refreshInterval` parameter and explained above.
## Discovery
Pressing a physical Nikobus push-button will generate a new inbox entry with an exception of buttons already discovered or setup.
Nikobus push buttons have the following format in inbox:
```
Nikobus Push Button 14E7F4:3
4BF9CA
nikobus:push-button
```
where first line contains name of the discovered button and second one contains button's bus address.
Each discovered button has a Nikobus address appended to its name, same as can be seen in Nikobus's PC application, `14E7F4:3` in above example.
* `14E7F4` - address of the Nikobus switch, as can be seen in Nikobus PC software and
* `3` - represents a button on Nikobus switch.
### Button mappings
##### 2 buttons switch
![Nikobus Switch with 2 buttons](doc/s2.png)
```
1 = A
2 = B
```
##### 4 buttons switch
![Nikobus Switch with 4 buttons](doc/s4.png)
maps as
```
3 1
4 2
```
so
```
1 = C
2 = D
3 = A
4 = B
```
##### 8 buttons switch
![Nikobus Switch with 8 buttons](doc/s8.png)
maps as
```
7 5 3 1
8 6 4 2
```
so
```
1 = 2C
2 = 2D
3 = 2A
4 = 2B
5 = 1C
6 = 1D
7 = 1A
8 = 1B
```
Above example `14E7F4:3` would give:
* for 4 buttons switch - push button A,
* for 8 buttons switch - push button 2A.
## Full Example
### nikobus.things

View File

@ -46,6 +46,7 @@ home automation systems.
- electricity sensors (get energy consumption)
- door locks (LOCK/UNLOCK, OPEN/CLOSE commands)
- heating systems (control temperature, set heating level)
- valve heating systems (control temperature, derogation mode and temperature)
- exterior heating systems (set heating level)
- alarms (both interior/external)
- pods
@ -77,63 +78,67 @@ Please see the example below.
## Channels
| Thing | Channel | Note |
|-------------------------------------------------------------------------------|:---------------------:|-------------------------------------------------------------------------------------------------------------------------------|
| bridge | N.A | bridge does not expose any channel |
| gateway | status | status of your Tahoma gateway |
| gate | gate_command | used for controlling your gate (open, close, stop, pedestrian) |
| gate | gate_state | get state of your gate |
| roller shutter, screen, venetian blind, garage door, awning, pergola, curtain | control | device controller which reacts to commands UP/DOWN/ON/OFF/OPEN/CLOSE/MY/STOP + closure 0-100 |
| window | control | device controller which reacts to commands UP/DOWN/ON/OFF/OPEN/CLOSE/STOP + closure 0-100 |
| silent roller shutter | silent_control | similar to control channel but in silent mode |
| venetian blind, adjustable slats roller shutter | orientation | percentual orientation of the blind's slats, it can have value 0-100. For IO Homecontrol devices only (non RTS) |
| venetian blind, adjustable slats roller shutter | closure_orientation | percentual closure and orientation of the blind's slats, it can have value 0-100. For IO Homecontrol devices only (non RTS) |
| adjustable slats roller shutter | rocker | used for setting the rocker position of the roller shutter, the only position allowing the slats control |
| action group | execute_action | switch which reacts to ON command and triggers the predefined Tahoma action |
| onoff, light | switch | reacts to standard ON/OFF commands |
| dimmer light | light_intensity | sets/gets intensity of the dimmer light or ON/OFF |
| smoke sensor, occupancy sensor, contact sensor & water sensor | contact | normal value is CLOSE, changes to OPEN when detection triggered |
| smoke sensor, occupancy sensor, contact sensor & water sensor | sensor_defect | indicates the health of the sensor (dead, lowBatter, maintenanceRequired, noDefect) |
| smoke sensor | radio_battery | maintenance radio part battery state (low, normal) |
| smoke sensor | sensor_battery | maintenance sensor part battery state (absence, low, normal) |
| smoke sensor | short_check | triggering the smoke sensor's short check |
| smoke sensor | long_check | triggering the smoke sensor's long check |
| light sensor | luminance | light luminance value in luxes |
| electricity sensor | energy_consumption | energy consumption value in watts |
| humidity sensor | humidity | current relative humidity |
| dock | battery_status | indicates running on battery (yes/no) |
| dock | battery_level | remaining battery percentage |
| dock | siren_status | used for controlling and getting siren state (on, off, cyclic) |
| dock | short_beep | testing of dock's siren - short beep |
| dock | long_beep | testing of dock's siren - long beep |
| siren | battery | battery level full/low/normal/verylow |
| siren | onoff | controlling siren status ON/OFF |
| siren | memorized_volume | setting memorized volume (normal/highest) |
| pod | cyclic_button | pod cyclic button state |
| pod | battery_status | pod battery status state |
| pod | lighting_led_pod_mode | lighting LED pod mod state |
| interior alarm | alarm_command | used for sending commands to Somfy alarm device |
| interior alarm | intrusion_control | used for alarm external intrusion controlling |
| interior alarm, myfox alarm | alarm_state | state of the Somfy alarm |
| interior alarm | target_alarm_state | target state of the Somfy alarm |
| interior alarm, myfox alarm | intrusion_state | intrusion state of the Somfy alarm |
| external alarm | active_zones_state | state of external alarm active zones |
| door lock | lock | switch representing unlocked/locked state |
| door lock | open | switch representing open/close state |
| on/off heating system | target_heating_level | target heating level (off, eco, comfort, frostprotection) |
| heating system | current_temperature | current temperature of the heating system |
| heating system | current_state | current state of the heating system |
| heating system, thermostat | target_temperature | target temperature of the heating system |
| heating system, thermostat | battery_level | battery level of the heating system |
| exterior heating system | heating_level | heating level of the exterior heating system or ON/OFF |
| thermostat | heating_mode | standard heating mode of the thermostat (away, freeze, manual, ...) |
| thermostat | derogation_heating_mode | derogation heating mode of the thermostat (away, freeze, manual, ...) |
| thermostat | derogation_activation | derogation activation state (inactive, active) |
| temperature sensor | temperature | temperature reported by the sensor |
| myfox camera, myfox alarm | cloud_status | cloud connection status |
| myfox camera | shutter | controlling of the camera shutter |
| myfox alarm | myfox_alarm_command | used for sending commands to Somfy Myfox alarm device |
| Thing | Channel | Note |
|-------------------------------------------------------------------------------|------------------------------|-----------------------------------------------------------------------------------------------------------------------------|
| bridge | N.A | bridge does not expose any channel |
| gateway | status | status of your Tahoma gateway |
| gate | gate_command | used for controlling your gate (open, close, stop, pedestrian) |
| gate | gate_state | get state of your gate (open, closed, pedestrian) |
| gate | gate_position | get position (0-100%) of your gate (where supported) |
| roller shutter, screen, venetian blind, garage door, awning, pergola, curtain | control | device controller which reacts to commands UP/DOWN/ON/OFF/OPEN/CLOSE/MY/STOP + closure 0-100 |
| window | control | device controller which reacts to commands UP/DOWN/ON/OFF/OPEN/CLOSE/STOP + closure 0-100 |
| silent roller shutter | silent_control | similar to control channel but in silent mode |
| venetian blind, adjustable slats roller shutter | orientation | percentual orientation of the blind's slats, it can have value 0-100. For IO Homecontrol devices only (non RTS) |
| venetian blind, adjustable slats roller shutter | closure_orientation | percentual closure and orientation of the blind's slats, it can have value 0-100. For IO Homecontrol devices only (non RTS) |
| adjustable slats roller shutter | rocker | used for setting the rocker position of the roller shutter, the only position allowing the slats control |
| action group | execute_action | switch which reacts to ON command and triggers the predefined Tahoma action |
| onoff, light | switch | reacts to standard ON/OFF commands |
| dimmer light | light_intensity | sets/gets intensity of the dimmer light or ON/OFF |
| smoke sensor, occupancy sensor, contact sensor & water sensor | contact | normal value is CLOSE, changes to OPEN when detection triggered |
| smoke sensor, occupancy sensor, contact sensor & water sensor | sensor_defect | indicates the health of the sensor (dead, lowBatter, maintenanceRequired, noDefect) |
| smoke sensor | radio_battery | maintenance radio part battery state (low, normal) |
| smoke sensor | sensor_battery | maintenance sensor part battery state (absence, low, normal) |
| smoke sensor | short_check | triggering the smoke sensor's short check |
| smoke sensor | long_check | triggering the smoke sensor's long check |
| light sensor | luminance | light luminance value in luxes |
| electricity sensor | energy_consumption | energy consumption value in watts |
| humidity sensor | humidity | current relative humidity |
| dock | battery_status | indicates running on battery (yes/no) |
| dock | battery_level | remaining battery percentage |
| dock | siren_status | used for controlling and getting siren state (on, off, cyclic) |
| dock | short_beep | testing of dock's siren - short beep |
| dock | long_beep | testing of dock's siren - long beep |
| siren | battery | battery level full/low/normal/verylow |
| siren | onoff | controlling siren status ON/OFF |
| siren | memorized_volume | setting memorized volume (normal/highest) |
| pod | cyclic_button | pod cyclic button state |
| pod | battery_status | pod battery status state |
| pod | lighting_led_pod_mode | lighting LED pod mod state |
| interior alarm | alarm_command | used for sending commands to Somfy alarm device |
| interior alarm | intrusion_control | used for alarm external intrusion controlling |
| interior alarm, myfox alarm | alarm_state | state of the Somfy alarm |
| interior alarm | target_alarm_state | target state of the Somfy alarm |
| interior alarm, myfox alarm | intrusion_state | intrusion state of the Somfy alarm |
| external alarm | active_zones_state | state of external alarm active zones |
| door lock | lock | switch representing unlocked/locked state |
| door lock | open | switch representing open/close state |
| on/off heating system | target_heating_level | target heating level (off, eco, comfort, frostprotection) |
| heating system | current_temperature | current temperature of the heating system |
| heating system | current_state | current state of the heating system |
| heating system, valve heating system, thermostat | target_temperature | target temperature of the heating system |
| heating system, valve heating system, thermostat | battery_level | battery level of the heating system |
| valve heating system, thermostat | derogation_heating_mode | derogation heating mode of the thermostat (away, freeze, manual, ...) |
| valve heating system, thermostat | derogated_target_temperature | target temperature of the heating system |
| valve heating system | current_heating_mode | current heating mode of the thermostatic valve |
| valve heating system | open_closed_valve | current open/closed state of the thermostatic valve |
| valve heating system | operating mode | operating mode of the thermostatic valve |
| thermostat | heating_mode | standard heating mode of the thermostat (away, freeze, manual, ...) |
| thermostat | derogation_activation | derogation activation state (inactive, active) |
| exterior heating system | heating_level | heating level of the exterior heating system or ON/OFF |
| temperature sensor | temperature | temperature reported by the sensor |
| myfox camera, myfox alarm | cloud_status | cloud connection status |
| myfox camera | shutter | controlling of the camera shutter |
| myfox alarm | myfox_alarm_command | used for sending commands to Somfy Myfox alarm device |
### Remarks

View File

@ -63,7 +63,7 @@ This is an optional parameter and multiple values are allowed.
Most devices support call lists.
The binding can analyze these call lists and provide channels for the number of missed calls, inbound calls, outbound calls and rejected (blocked) calls.
The days for which this analysis takes place can be controlled with the `missedCallDays`, `rejectedCallDays`, `inboundCallDays` and `outboundCallDays`
The days for which this analysis takes place can be controlled with the `missedCallDays`, `rejectedCallDays`, `inboundCallDays`, `outboundCallDays` and `callListDays`.
This is an optional parameter and multiple values are allowed.
Since FritzOS! 7.20 WAN access of local devices can be controlled by their IPs.
@ -89,7 +89,8 @@ This is an optional parameter and multiple values are allowed.
| channel | item-type | advanced | description |
|----------------------------|---------------------------|:--------:|----------------------------------------------------------------|
| `callDeflectionEnable` | `Switch` | | Enable/Disable the call deflection setup with the given index. |
| `deviceLog` | `String` | x | A string containing the last log messages. |
| `callList` | `String` | x | A string containing the call list as JSON (see below) |
| `deviceLog` | `String` | x | A string containing the last log messages |
| `dslCRCErrors` | `Number:Dimensionless` | x | DSL CRC Errors |
| `dslDownstreamNoiseMargin` | `Number:Dimensionless` | x | DSL Downstream Noise Margin |
| `dslDownstreamNoiseMargin` | `Number:Dimensionless` | x | DSL Downstream Attenuation |
@ -121,6 +122,12 @@ This is an optional parameter and multiple values are allowed.
| `wifi5GHzEnable` | `Switch` | | Enable/Disable the 5.0 GHz WiFi device. |
| `wifiGuestEnable` | `Switch` | | Enable/Disable the guest WiFi. |
### Channel `callList`
Call lists are provided for one or more days (as configured) as JSON.
The JSON consists of an array of individual calls with the fields `date`, `type`, `localNumber`, `remoteNumber`, `duration`.
The call-types are the same as provided by the FritzBox, i.e. `1` (inbound), `2` (missed), `3` (outbound), `10` (rejected).
## `PHONEBOOK` Profile
The binding provides a profile for using the FritzBox phonebooks for resolving numbers to names.
@ -131,3 +138,4 @@ If only a specific phonebook from the device should be used, this can be specifi
The default is to use all available phonebooks from the specified thing.
In case the format of the number in the phonebook and the format of the number from the channel are different (e.g. regarding country prefixes), the `matchCount` parameter can be used.
The configured `matchCount` is counted from the right end and denotes the number of matching characters needed to consider this number as matching.

View File

@ -22,10 +22,13 @@ UPnP AV media renderers take care of playback of the content.
You can select a renderer to play the media served from a server.
The full content hierarchy of the media on the server can be browsed hierarchically.
Searching the media library is also supported using UPnP search syntax.
Playlists can be created and maintained.
Controls are available to control the playback of the media on the renderer.
Currently playing media can be stored as a favorite.
Each discovered renderer will also be registered as an openHAB audio sink.
## Supported Things
Two thing types are supported, a server thing, `upnpserver`, and a renderer thing, `upnprenderer`.
@ -36,6 +39,13 @@ It complies with part of the UPnP AV Media standard, but has not been verified t
Tests have focused on the playback of audio, but if the server and renderer support it, other media types should play as well.
## Binding Configuration
The binding has one configuration parameter, `path`.
This is used as the disk location for storing and retrieving playlists and favorites.
The default location is `$OPENHAB_USERDATA/upnpcontrol`.
## Discovery
UPnP media servers and media renderers in the network will be discovered automatically.
@ -47,79 +57,288 @@ Both the `upnprenderer` and `upnpserver` thing require a configuration paramete
This `udn` uniquely defines the UPnP device.
It can be retrieved from the thing ID when using auto discovery.
Both also have `refresh` configuration parameter. This parameter defines a polling interval for polling the state of the `upnprenderer` or `upnpserver`.
The default polling interval is 60s.
0 turns off polling.
An advanced configuration parameter `responseTimeout` permits tweaking how long the `upnprenderer` and `upnpserver` will wait for GENA events from the UPnP device.
This timeout is checked when there is a dependency between an action invocation and an event with expected result.
The default is 2500ms.
It should not be changed in normal circumstances.
Additionally, a `upnpserver` device has the following optional configuration parameters:
* `filter`: when true, only list content that is playable on the renderer, default is `false`.
* `sortcriteria`: Sort criteria for the titles in the selection list and when sending for playing to a renderer.
The criteria are defined in UPnP sort criteria format, examples: `+dc:title`, `-dc:creator`, `+upnp:album`.
Support for sort criteria will depend on the media server.
The default is to sort ascending on title, `+dc:title`.
* `sortCriteria`: sort criteria for the titles in the selection list and when sending for playing to a renderer.
The criteria are defined in UPnP sort criteria format, examples: `+dc:title`, `-dc:creator`, `+upnp:album`.
Support for sort criteria will depend on the media server.
The default is to sort ascending on title, `+dc:title`.
* `browseDown`: when browse or search results in exactly one container entry, iteratively browse down until the result contains multiple container entries or at least one media entry, default is `true`.
* `searchFromRoot`: always start search from root instead of the current id, default is `false`.
A `upnprenderer` has the following optional configuration parameters:
* `seekStep`: step in seconds when sending fast forward or rewind command on the player control, default 5s.
* `notificationVolumeAdjustment`: volume adjustment from current volume in percent (range -100 to +100) for notifications when no volume is set in `playSound` command, default 10.
* `maxNotificationDuration`: maximum duration for notifications (default 15s), no maximum duration when set to 0s.
The full syntax for manual configuration is:
```
Thing upnpcontrol:upnpserver:<serverId> [udn="<udn of media server>"]
Thing upnpcontrol:upnprenderer:<rendererId> [udn="<udn of media renderer>", filter=<true/false>, sortcriteria="<sort criteria string>"]
Thing upnpcontrol:upnpserver:<serverId> [udn="<udn of media server>", refresh=<polling interval>, seekStep=<step>]
Thing upnpcontrol:upnprenderer:<rendererId> [udn="<udn of media renderer>", refresh=<polling interval>, filter=<true/false>, sortCriteria="<sort criteria string>", browseDown=<true/false>, searchfromroot=<true/false>]
```
## Channels
The `upnpserver` has the following channels:
### `upnpserver`
* `upnprenderer`: The renderer to send the media content to for playback.
The channel allows selecting from all discovered media renderers.
This list is dynamically adjusted as media renderers are being added/removed.
* `currentid`: Current ID of media container or entry ready for playback.
This channel can be used to skip to a specific container or entry in the content directory.
This is especially useful in rules.
* `browse`: Browse and serve media content.
The browsing will start at the top of the content directory tree and allows you to go down and up (represented by ..) in the tree.
The list of containers (directories) and media entries for selection in the content hierarchy is updated dynamically when selecting a container or entry.
All media in the selection list, playable on the currently selected `upnprenderer` channel, are automatically queued to the renderer as next media for playback.
* `search`: Search for media content on the server.
Search criteria are defined in UPnP search criteria format.
Examples: `dc:title contains "song"`, `dc:creator contains "SpringSteen"`, `unp:class = "object.item.audioItem"`, `upnp:album contains "Born in"`.
The search starts at the value of the `currentid` channel and searches down from there.
When no `currentid` is selected, the search starts at the top.
All media in the search result list, playable on the current selected `upnprenderer` channel, are automatically queued to the renderer as next media for playback.
The `upnpserver` has the following channels (item type and access mode indicated in brackets):
The `upnprenderer` has the following channels:
* `upnprenderer` (String, RW): The renderer to receive media content for playback.
The channel allows selecting from all discovered media renderers.
This list is dynamically adjusted as media renderers are being added/removed.
* `currenttitle` (String, R): Current title of media container or entry ready for playback.
* `browse` (String, RW): Browse and serve media content, current ID of media container or entry ready for playback.
The browsing will start at the top of the content directory tree and allows you to go down and up (represented by ..) in the tree.
The list of containers (directories) and media entries for selection in the content hierarchy is updated dynamically when selecting a container or entry.
This channel can also be used to skip to a specific container or entry in the content directory.
Setting it to 0 will reposition to the top of the content hierarchy.
All media in the selection list, playable on the currently selected `upnprenderer` channel, are automatically queued to the renderer as next media for playback.
The `browseDown` configuration parameter influences the result in such a way that, for `browseDown = true`, if the result only contains exactly one container entry, the result will be the content of the container and not the container itself.
* `search` (String, W): Search for media content on the server.
Search criteria are defined in UPnP search criteria format.
Examples: `dc:title contains "song"`, `dc:creator contains "SpringSteen"`, `unp:class = "object.item.audioItem"`, `upnp:album contains "Born in"`.
The search, by default, starts at the value of the `currentid` and searches down from there unless the `searchfromroot` thing configuration parameter is set to `true`.
The result (media and containers) will be available in the `browse` command option list.
The `currentid` channel will be put to the id of the top container where the search started.
All media in the search result list, playable on the current selected `upnprenderer` channel, are automatically queued to the renderer as next media for playback.
The `browseDown` configuration parameter influences the result in such a way that, for `browseDown = true`, if the result only contains exactly one container entry, the result will be the content of the container and not the container itself.
* `playlistselect` (String, W): Select a playlist from the available playlists currently saved on disk.
This will also update `playlist` with the selected value.
* `playlist` (String, RW): Name of existing or new playlist.
* `playlistaction` (String, W): action to perform with `playlist`.
Possible command options are:
* `RESTORE`: restore the playlist from `playlist`.
If the restored playlist contains content from the current server, this content will update the `browse` command option list.
Note that playlists can contain a mix of media entries and container references.
All media in the result list, playable on the current selected `upnprenderer` channel, are automatically queued to the renderer as next media for playback.
* `SAVE`: save the current `browse` command option list into `playlist`.
If `playlist` already exists, it will be overwritten.
* `APPEND`: append the current `browse` command option list to `playlist`.
If `playlist` does not exist yet, a new playlist will be created.
* `DELETE`: delete `playlist` from disk and remove from `playlistselect` command option list.
A number of convenience channels replicate the basic control channels from the `upnprenderer` thing for the currently selected renderer on the `upnprenderer` channel.
These channels are `volume`, `mute` and `control`.
### `upnprenderer`
The `upnprenderer` has the following default channels:
| Channel Type ID | Item Type | Access Mode | Description |
|--------------------|-------------|-------------|----------------------------------------------------|
| `volume` | Dimmer | RW | playback master volume |
| `mute` | Switch | RW | playback master mute |
| `control` | Player | RW | play, pause, next, previous, fast forward, rewind |
| `stop` | Switch | W | stop media playback |
| `repeat` | Switch | RW | continuous play of media queue, restart at end |
| `shuffle` | Switch | RW | continuous random play of media queue |
| `onlyplayone` | Switch | RW | only play one media entry from the queue at a time |
| `uri` | String | RW | URI of currently playing media |
| `favoriteselect` | String | W | play favorite from list of saved favorites |
| `favorite` | String | RW | set name for existing of new favorite |
| `favoriteaction` | String | W | `SAVE` or `DELETE` `favorite` |
| `playlistselect` | String | W | play playlist from list of saved playlists |
| `title` | String | R | media title |
| `album` | String | R | media album |
| `albumart` | Image | R | image for media album |
| `creator` | String | R | media creator |
| `artist` | String | R | media artist |
| `publisher` | String | R | media publisher |
| `genre` | String | R | media genre |
| `tracknumber` | Number | R | track number of current track in album |
| `trackduration` | Number:Time | R | track duration of current track in album |
| `trackposition` | Number:Time | RW | current position in track during playback or pause |
| `reltrackposition` | Dimmer | RW | current position relative to track duration |
A numer of `upnprenderer` audio control channels may be dynamically created depending on the specific renderer capabilities.
Examples of these are:
| Channel Type ID | Item Type | Access Mode | Description |
|--------------------|-------------|-------------|----------------------------------------------------|
| `loudness` | Switch | RW | playback master loudness |
| `lfvolume` | Dimmer | RW | playback front left volume |
| `lfmute` | Switch | RW | playback front left mute |
| `rfvolume` | Dimmer | RW | playback front right volume |
| `rfmute` | Switch | RW | playback front right mute |
| Channel Type ID | Item Type | Access Mode | Description |
|-----------------|-----------|-------------|----------------------------------------------------|
| `volume` | Dimmer | RW | playback volume |
| `control` | Player | RW | play, pause, next, previous control |
| `stop` | Switch | RW | stop media playback |
| `title` | String | R | media title |
| `album` | String | R | media album |
| `albumart` | Image | R | image for media album |
| `creator` | String | R | media creator |
| `artist` | String | R | media artist |
| `publisher` | String | R | media publisher |
| `genre` | String | R | media genre |
| `tracknumber` | Number | R | track number of current track in album |
| `trackduration` | Number:Time | R | track duration of current track in album |
| `trackposition` | Number:Time | R | current position in track during playback or pause |
## Audio Support
All configured media renderers are registered as an audio sink.
`playSound`and `playStream`commands can be used in rules to play back audio fragments or audio streams to a renderer.
Two audio sinks are registered for each media renderer.
`playSound` and `playStream` commands can be used in rules to play back audio fragments or audio streams to a renderer.
The first audio sink has the renderer id as a name.
It is used for normal playback of a sound or stream.
The second audio sink has `-notify` appended to the renderer id for its name, and has a special behavior.
This audio sink is used to play notifications.
When setting the volume parameter in the `playSound` command, the volume of the renderer will only change for the duration of playing the notification.
The `maxNotificationDuration` configuration parameter of the renderer will limit the notification duration the value of the parameter in seconds.
Normal playing will resume after the notification has played or when the maximum notification duration has been reached, whichever happens first.
Longer sounds or streams will be cut off.
## Managing a Playback Queue
There are multiple ways to serve content to a renderer for playback.
* Directly provide a URI on the `URI` channel or through `playSound` or `playStream` actions:
Playing will start immediately, interrupting currently playing media.
No metadata for the media is available, therefore will be provided in the media channels for metadata (e.g. `title`, `album`, ...).
* Content served from one or multiple `upnpserver` servers:
This is done on the `upnpserver` thing with the `upnprenderer` set the the renderer for playback.
The media at any point in time in the `upnpserver browse` option list (result from browse, search or restoring a playlist), will be queued to the `upnprenderer` for playback.
Playback does not start automatically if not yet playing.
When already playing a queue, the first entry of the new queue will be playing as the next entry.
When playing an URI or media provided through an action, playback will immediately switch to the new queue.
The `upnprenderer` will use that queue until it is replaced by another queue from the same or another `upnpserver`.
Note that querying the content hierarchy on the `upnpserver` will update the `upnpserver browse` option list each time, and therefore the queue on the `upnprenderer` will be updated each time as long as `upnprenderer` is selected on `upnpserver`.
* Selecting a favorite or playlist on the renderer.
Playback of the favorite or playlist will start immediately.
When playing from a directly provided URI, at the end of the media, the renderer will try to move to the next entry in a queue previously provided by a server.
Playing will stop when no such entry is available.
Multiple renderers can be sent the same or different playback queue from the same server sequentially.
Select content on the server and select the first renderer for playback.
The content queue will be served to the renderer, a play command on the renderer will start playing the queue.
Select another renderer on the server.
The same or new (after another content selection) queue will be served to the second renderer.
Both renderers will keep on playing the full queue they received.
When serving a queue from a server, the renderer can be put in "only play one" mode by putting the `onlyplayone` channel to true.
A subsequent play command will only play one media entry from the queue while respecting `shuffle` and `repeat`.
To play the next media from the queue, a new play command will be required after the player stopped.
An example of usage could be playing a single random sound from a playlist when you are away from home and an intrusion is detected.
A script could put the player in `shuffle` and `onlyplayone` mode and serve a playlist.
Only one random sound from the playlist would be played.
### Favorites
Currently playing media can be saved as favorites on the renderer.
This is especially useful when playing streams, such as online radio, but is valid for any media.
If the currently playing media has metadata, it will be saved with the favorite.
A favorite only contains one media item.
Selecting the favorite will only play that one item.
The favorite will start playing immediately.
Playing the server queue will resume after playing the favorite.
### Playlists
Playlists provide a way to define lists of server content for playback.
A new playlist can be created on a server thing from the selection in the `upnpserver browse` selection list.
When restoring a playlist on the server, the media in the playlist from the `upnpserver` thing used for restoring, will be put in the `upnpserver browse` selection list.
The current selection of media playable on the currently selected renderer will automatically be stored as a playlist with name `current`.
A playlist can contain media from different servers.
Only the media from the current server will be visible in the server when restoring.
It is possible to append content to a playlist that already contains content from a different server.
That way, it is possible to combine multiple sources for playback.
When selecting a playlist on a renderer, the playlist will be queued for playback, replacing the current queue.
Playback will start immediately.
## Using Search
Searching content on a media server may take a lot of time, depending on the functionality and the performance of the media server.
Therefore, it may very well be that media server searches time out.
Rather than searching for individual items, it is therefore often better to search for containers or playlists.
For example:
* `upnp:class derivedfrom "object.item.audioItem.musicTrack" and dc:title contains "Fight For Your Right"` would search for all music tracks with "Fight For Your Right" in the title.
This search is potentially slow.
* `dc:title contains "Evening" and upnp:class = "object.container.playlistContainer"` would search for all playlists with "Evening" in the name.
* `dc:title = "Donnie Darko" and upnp:class = "object.container.playlistContainer"` would search for a playlist with a specific name.
With the last example, if the `browseDown` configuration parameter is `true`, the result will not be the playlist, but the content of the playlist.
This allows immediately starting a play command without having to browse down to the first result of the list (the unique container).
This is especially useful when doing searches and starting to play in scripts, as the play command can immediately follow the search for a unique container, without a need to browse down to a media ID that is hidden in the browse option list.
For interactive use through a UI, you may opt to switch the `browseDown` configuration parameter to `false` to see all levels in the browsing hierarchy.
The `searchfromroot` configuration parameter always forces searching to start from the directory root.
This will also always reset the `browse` channel to the root.
This option is helpful if you do not want to limit search to a selected container in the directory.
## Limitations
The current version of BasicUI does not support dynamic refreshing of the selection list in the `upnpserver` channels `renderer` and `browse`.
A refresh of the browser will be required to show the adjusted selection list.
The `upnpserver search` channel requires input of a string to trigger a search.
This cannot be done with BasicUI, but can be achieved with rules.
BasicUI has a number of limitations that impact the way some of the channels can be used from it:
* BasicUI does not support dynamic refreshing of the selection list in the `upnpserver` channels `renderer`, `browse`, `playlistselect` and in the `upnprenderer` channel `favoriteselect`.
A refresh of the browser will be required to show the adjusted selection list.
* The `upnpserver search` channel requires input of a string to trigger a search.
The `upnpserver playlist` channel and `upnprenderer favorite` channel require input of a string to set a playlist or favorite.
This cannot be done with BasicUI, but can be achieved with rules.
* The player control in BasicUI does not support fast forward or rewind.
None of these are limitations when using the main UI.
## Full Example
.things:
```
Thing upnpcontrol:upnpserver:mymediaserver [udn="538cf6e8-d188-4aed-8545-73a1b905466e"]
Thing upnpcontrol:upnprenderer:mymediarenderer [udn="0ec457ae-6c50-4e6e-9012-dee7bb25be2d", filter=true, sortcriteria="+dc:title"]
Thing upnpcontrol:upnpserver:mymediaserver [udn="0ec457ae-6c50-4e6e-9012-dee7bb25be2d", refresh=120, filter=true, sortCriteria="+dc:title"]
Thing upnpcontrol:upnprenderer:mymediarenderer [udn="538cf6e8-d188-4aed-8545-73a1b905466e", refresh=600, seekStep=1]
```
.items:
@ -130,8 +349,18 @@ Group MediaRenderer <player>
Dimmer Volume "Volume [%.1f %%]" <soundvolume> (MediaRenderer) {channel="upnpcontrol:upnprenderer:mymediarenderer:volume"}
Switch Mute "Mute" <soundvolume_mute> (MediaRenderer) {channel="upnpcontrol:upnprenderer:mymediarenderer:mute"}
Switch Loudness "Loudness" (MediaRenderer) {channel="upnpcontrol:upnprenderer:mymediarenderer:loudness"}
Dimmer LeftVolume "Volume [%.1f %%]" <soundvolume> (MediaRenderer) {channel="upnpcontrol:upnprenderer:mymediarenderer:lfvolume"}
Dimmer RightVolume "Volume [%.1f %%]" <soundvolume> (MediaRenderer) {channel="upnpcontrol:upnprenderer:mymediarenderer:rfvolume"}
Player Controls "Controller" (MediaRenderer) {channel="upnpcontrol:upnprenderer:mymediarenderer:control"}
Switch Stop "Stop" (MediaRenderer) {channel="upnpcontrol:upnprenderer:mymediarenderer:stop"}
Switch Repeat "Repeat" (MediaRenderer) {channel="upnpcontrol:upnprenderer:mymediarenderer:repeat"}
Switch Shuffle "Shuffle" (MediaRenderer) {channel="upnpcontrol:upnprenderer:mymediarenderer:shuffle"}
String URI "URI" (MediaRenderer) {channel="upnpcontrol:upnprenderer:mymediarenderer:uri"}
String FavoriteSelect "Favorite" (MediaRenderer) {channel="upnpcontrol:upnprenderer:mymediarenderer:favoriteselect"}
String Favorite "Favorite" (MediaRenderer) {channel="upnpcontrol:upnprenderer:mymediarenderer:favorite"}
String FavoriteAction "Favorite Action" (MediaRenderer) {channel="upnpcontrol:upnprenderer:mymediarenderer:favoriteaction"}
String PlaylistPlay "Playlist" (MediaRenderer) {channel="upnpcontrol:upnprenderer:mymediarenderer:playlistselect"}
String Title "Now playing [%s]" <text> (MediaRenderer) {channel="upnpcontrol:upnprenderer:mymediarenderer:title"}
String Album "Album" <text> (MediaRenderer) {channel="upnpcontrol:upnprenderer:mymediarenderer:album"}
Image AlbumArt "Album Art" (MediaRenderer) {channel="upnpcontrol:upnprenderer:mymediarenderer:albumart"}
@ -142,33 +371,53 @@ String Genre "Genre" <text> (MediaRenderer) {channel=
Number TrackNumber "Track Number" (MediaRenderer) {channel="upnpcontrol:upnprenderer:mymediarenderer:tracknumber"}
Number:Time TrackDuration "Track Duration [%d %unit%]" (MediaRenderer) {channel="upnpcontrol:upnprenderer:mymediarenderer:trackduration"}
Number:Time TrackPosition "Track Position [%d %unit%]" (MediaRenderer) {channel="upnpcontrol:upnprenderer:mymediarenderer:trackposition"}
Dimmer RelTrackPosition "Relative Track Position ´[%d %%]" (MediaRenderer) {channel="upnpcontrol:upnprenderer:mymediarenderer:reltrackposition"}
String Renderer "Renderer [%s]" <text> (MediaServer) {channel="upnpcontrol:upnpserver:mymediaserver:title"}
String CurrentId "Current Entry [%s]" <text> (MediaServer) {channel="upnpcontrol:upnpserver:mymediaserver:currentid"}
String Browse "Browse" (MediaServer) {channel="upnpcontrol:upnpserver:mymediaserver:browse"}
String CurrentTitle "Current Entry [%s]" <text> (MediaServer) {channel="upnpcontrol:upnpserver:mymediaserver:currenttitle"}
String Browse "Browse" (MediaServer) {channel="upnpcontrol:upnpserver:mymediaserver:browse"}
String Search "Search" (MediaServer) {channel="upnpcontrol:upnpserver:mymediaserver:search"}
String PlaylistSelect "Playlist" (MediaServer) {channel="upnpcontrol:upnpserver:mymediaserver:playlistselect"}
String Playlist "Playlist" (MediaServer) {channel="upnpcontrol:upnpserver:mymediaserver:playlist"}
String PlaylistAction "Playlist Action" (MediaServer) {channel="upnpcontrol:upnpserver:mymediaserver:playlistaction"}
```
.sitemap:
```
Slider item=Volume
Switch item=Mute
Default item=Controls
Switch item=Stop mappings=[ON="STOP"]
Text item=Title
Text item=Album
Default item=AlbumArt
Text item=Creator
Text item=Artist
Text item=Publisher
Text item=Genre
Text item=TrackNumber
Text item=TrackDuration
Text item=TrackPosition
Slider item=Volume
Switch item=Mute
Switch item=Loudness
Slider item=LeftVolume
Slider item=RightVolume
Default item=Controls
Switch item=Stop mappings=[ON="STOP"]
Switch item=Repeat
Switch item=Shuffle
Text item=URI
Selection item=FavoriteSelect
Text item=Favorite
Switch item=FavoriteAction
Selection item=PlaylistPlay
Text item=Title
Text item=Album
Default item=AlbumArt
Text item=Creator
Text item=Artist
Text item=Publisher
Text item=Genre
Text item=TrackNumber
Text item=TrackDuration
Text item=TrackPosition
Slider item=RelTrackPosition
Text item=Renderer
Text item=CurrentId
Text item=Browse
Selection item=Renderer
Text item=CurrentTitle
Selection item=Browse
Text item=Search
Selection item=PlaylistSelect
Text item=Playlist
Switch item=PlaylistAction
```
Audio sink usage examples in rules:
@ -176,4 +425,6 @@ Audio sink usage examples in rules:
```
playSound(“doorbell.mp3”)
playStream("upnpcontrol:upnprenderer:mymediarenderer", "http://icecast.vrtcdn.be/stubru_tijdloze-high.mp3”)
playSound("upnpcontrol:upnprenderer:mymediarenderer-notify", "doorbell.mp3", new PercentType(80))
```

View File

@ -642,6 +642,7 @@
<channel id="rtspUrl" typeId="rtspUrl"/>
<channel id="imageUrl" typeId="imageUrl"/>
<channel id="hlsUrl" typeId="hlsUrl"/>
<channel id="enablePrivacyMode" typeId="enablePrivacyMode"/>
</channels>
<config-description>
@ -934,6 +935,7 @@
<channel id="rtspUrl" typeId="rtspUrl"/>
<channel id="imageUrl" typeId="imageUrl"/>
<channel id="hlsUrl" typeId="hlsUrl"/>
<channel id="enablePrivacyMode" typeId="enablePrivacyMode"/>
</channels>
<config-description>
@ -2663,6 +2665,12 @@
<category>Light</category>
</channel-type>
<channel-type id="enablePrivacyMode">
<item-type>Switch</item-type>
<label>Enable Privacy Mode</label>
<description>Turn the Privacy Mode on and off.</description>
</channel-type>
<channel-type id="autoLED" advanced="true">
<item-type>Switch</item-type>
<label>Auto LED</label>

View File

@ -111,6 +111,10 @@
<item-type>Switch</item-type>
<label>Eyecare Mode On/Off</label>
</channel-type>
<channel-type id="clean">
<item-type>Switch</item-type>
<label>Cleaning On/Off</label>
</channel-type>
<channel-type id="mode">
<item-type>String</item-type>
<label>Mode</label>
@ -220,7 +224,7 @@
<channel-type id="humidity">
<item-type>Number</item-type>
<label>Humidity</label>
<state pattern="%.1f" readOnly="true"/>
<state pattern="%.1f %%" readOnly="true"/>
</channel-type>
<channel-type id="pm25">
<item-type>Number</item-type>
@ -266,14 +270,19 @@
<state pattern="%.0f" readOnly="true"/>
</channel-type>
<channel-type id="usedhours">
<item-type>Number</item-type>
<item-type>Number:Time</item-type>
<label>Run Time</label>
<state pattern="%.0f" readOnly="true"/>
<state pattern="%.0f %unit%" readOnly="true"/>
</channel-type>
<channel-type id="powerhours">
<item-type>Number:Time</item-type>
<label>Powered On Time</label>
<state pattern="%.0f %unit%" readOnly="true"/>
</channel-type>
<channel-type id="motorspeed">
<item-type>Number</item-type>
<label>Motor Speed</label>
<state pattern="%.0f" readOnly="true"/>
<state pattern="%.0f rpm" readOnly="true"/>
</channel-type>
<channel-type id="filterlive">
<item-type>Number</item-type>
@ -304,6 +313,11 @@
<item-type>Number</item-type>
<label>Trans Level</label>
</channel-type>
<channel-type id="waterlevel">
<item-type>Number</item-type>
<label>Water Level</label>
<state pattern="%.0f %%"/>
</channel-type>
<channel-type id="dry">
<item-type>Switch</item-type>
<label>Dry</label>
@ -748,4 +762,57 @@
</options>
</state>
</channel-type>
<channel-type id="humidifierOperationMode">
<item-type>Number</item-type>
<label>Operation Mode</label>
<state>
<options>
<option value="0">Auto</option>
<option value="1">Low</option>
<option value="2">Medium</option>
<option value="3">High</option>
</options>
</state>
</channel-type>
<channel-type id="humidifierLedBrightness">
<item-type>Number</item-type>
<label>LED Brightness</label>
<state>
<options>
<option value="0">Off</option>
<option value="1">Dim</option>
<option value="2">Bright</option>
</options>
</state>
</channel-type>
<channel-type id="humidifierLastPressedButton">
<item-type>Number</item-type>
<label>Last Pressed Button</label>
<state>
<options>
<option value="0">No</option>
<option value="1">LED</option>
<option value="2">Power</option>
</options>
</state>
</channel-type>
<channel-type id="countryCode">
<item-type>Number</item-type>
<label>Country</label>
<state>
<options>
<option value="0">Unlocked</option>
<option value="1">US</option>
<option value="82">KR</option>
<option value="44">EU</option>
<option value="81">JP</option>
<option value="7">RU</option>
<option value="86">CN</option>
<option value="852">HK</option>
<option value="886">TW</option>
<option value="33">FR</option>
</options>
</state>
</channel-type>
</thing:thing-descriptions>

View File

@ -190,6 +190,13 @@
<state readOnly="true"/>
</channel-type>
<channel-type id="gate_position">
<item-type>Dimmer</item-type>
<label>Position</label>
<description>Position of the gate</description>
<state max="100" min="0" step="1" pattern="%d %%" readOnly="false"/>
</channel-type>
<channel-type id="open">
<item-type>Switch</item-type>
<label>Open/Close</label>
@ -301,8 +308,17 @@
<channel-type id="derogation_heating_mode">
<item-type>String</item-type>
<label>Derogation Heating Mode</label>
<description>Derogation heating mode of the Somfy thermostat</description>
<state readOnly="true"/>
<description>Derogation heating mode of the Somfy thermostat/valve</description>
<command>
<options>
<option value="auto">Program</option>
<option value="away">Away</option>
<option value="comfort">Home</option>
<option value="frost protection">Frost protection</option>
<option value="manual">Manual</option>
<option value="eco">Night</option>
</options>
</command>
</channel-type>
<channel-type id="derogation_activation">
@ -352,4 +368,25 @@
<description>The level of the heating</description>
<state max="100" min="0" step="1" pattern="%d %%"/>
</channel-type>
<channel-type id="current_heating_mode">
<item-type>String</item-type>
<label>Current Heating Mode</label>
<description>Current heating mode of the Somfy thermostatic valve</description>
<state readOnly="true"/>
</channel-type>
<channel-type id="open_closed_valve">
<item-type>Contact</item-type>
<label>Valve Open/Closed state</label>
<description>Current open/closed state of the Somfy thermostatic valve</description>
<state readOnly="true"/>
</channel-type>
<channel-type id="operating_mode">
<item-type>String</item-type>
<label>Operating mode</label>
<description>Operating mode of the Somfy thermostatic valve</description>
<state readOnly="true"/>
</channel-type>
</thing:thing-descriptions>

View File

@ -12,6 +12,7 @@
<channels>
<channel id="gate_state" typeId="gate_state"></channel>
<channel id="gate_command" typeId="gate_command"></channel>
<channel id="gate_position" typeId="gate_position"></channel>
</channels>
<config-description-ref uri="thing-type:somfytahoma:device"/>
</thing-type>

View File

@ -8,7 +8,7 @@
<supported-bridge-type-refs>
<bridge-type-ref id="bridge"/>
</supported-bridge-type-refs>
<label>Somfy Heating System</label>
<label>Z-Wave Heating System</label>
<channels>
<channel id="current_temperature" typeId="current_temperature"></channel>
<channel id="current_state" typeId="current_state"></channel>

View File

@ -10,11 +10,12 @@
</supported-bridge-type-refs>
<label>Somfy Thermostat</label>
<channels>
<channel id="target_temperature" typeId="target_temperature"></channel>
<channel id="target_temperature" typeId="temperature"></channel>
<channel id="battery_level" typeId="system.battery-level"></channel>
<channel id="heating_mode" typeId="heating_mode"></channel>
<channel id="derogation_heating_mode" typeId="derogation_heating_mode"></channel>
<channel id="derogation_activation" typeId="derogation_activation"></channel>
<channel id="derogated_target_temperature" typeId="target_temperature"></channel>
</channels>
<config-description-ref uri="thing-type:somfytahoma:device"/>
</thing-type>

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="somfytahoma"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
<thing-type id="valveheatingsystem">
<supported-bridge-type-refs>
<bridge-type-ref id="bridge"/>
</supported-bridge-type-refs>
<label>Somfy Thermostatic Valve</label>
<channels>
<channel id="target_temperature" typeId="temperature"></channel>
<channel id="battery_level" typeId="system.battery-level"></channel>
<channel id="derogation_heating_mode" typeId="derogation_heating_mode"></channel>
<channel id="derogated_target_temperature" typeId="target_temperature"></channel>
<channel id="current_heating_mode" typeId="current_heating_mode"></channel>
<channel id="open_closed_valve" typeId="open_closed_valve"></channel>
<channel id="operating_mode" typeId="operating_mode"></channel>
</channels>
<config-description-ref uri="thing-type:somfytahoma:device"/>
</thing-type>
</thing:thing-descriptions>

View File

@ -82,6 +82,11 @@
<description>List of days for which outbound calls should be calculated.</description>
<advanced>true</advanced>
</parameter>
<parameter name="callListDays" type="text" multiple="true">
<label>Call List Days</label>
<description>List of days for which JSON call list should be generated.</description>
<advanced>true</advanced>
</parameter>
<parameter name="wanBlockIPs" type="text" multiple="true">
<label>WAN Block IPs</label>
<description>List of IPs that can be blocked for WAN access.</description>

View File

@ -11,8 +11,21 @@
<channels>
<channel id="volume" typeId="system.volume"/>
<channel id="mute" typeId="system.mute"/>
<channel id="control" typeId="system.media-control"/>
<channel id="stop" typeId="stop"/>
<channel id="repeat" typeId="repeat"/>
<channel id="shuffle" typeId="shuffle"/>
<channel id="onlyplayone" typeId="onlyplayone"/>
<channel id="uri" typeId="uri"/>
<channel id="favoriteselect" typeId="favoriteselect"/>
<channel id="favorite" typeId="favorite"/>
<channel id="favoriteaction" typeId="favoriteaction"/>
<channel id="playlistselect" typeId="playlistselect"/>
<channel id="title" typeId="system.media-title"/>
<channel id="album" typeId="album"/>
<channel id="albumart" typeId="albumart"/>
@ -23,52 +36,163 @@
<channel id="tracknumber" typeId="tracknumber"/>
<channel id="trackduration" typeId="trackduration"/>
<channel id="trackposition" typeId="trackposition"/>
<channel id="reltrackposition" typeId="reltrackposition"/>
</channels>
<representation-property>udn</representation-property>
<config-description>
<parameter name="udn" type="text" required="true">
<label>Unique Device Name</label>
<description>The UDN identifies the UPnP Renderer</description>
</parameter>
<parameter name="refresh" type="integer" unit="s">
<label>Refresh Interval</label>
<description>Specifies the refresh interval in seconds</description>
<default>60</default>
</parameter>
<parameter name="notificationVolumeAdjustment" type="integer" min="-100" max="100" step="1" unit="%">
<label>Notification Sound Volume Adjustment</label>
<description>Specifies the percentage adjustment to the current sound volume when playing notifications</description>
<default>10</default>
</parameter>
<parameter name="maxNotificationDuration" type="integer" unit="s">
<label>Maximum Notification Duration</label>
<description>Specifies the maximum duration for notifications, longer notification sounds will be interrupted. O
represents no maximum duration</description>
<default>15</default>
</parameter>
<parameter name="seekStep" type="integer" min="1">
<label>Fast Forward/Rewind Step</label>
<description>Step in seconds for fast forward rewind</description>
<default>5</default>
</parameter>
<parameter name="responseTimeout" type="integer" unit="ms">
<label>UPnP Response Timeout</label>
<description>Specifies the timeout in milliseconds when waiting for responses on UPnP actions</description>
<default>2500</default>
<advanced>true</advanced>
</parameter>
</config-description>
</thing-type>
<thing-type id="upnpserver">
<label>UPnPServer</label>
<description>UPnP AV Server</description>
<channels>
<channel id="upnprenderer" typeId="upnprenderer"/>
<channel id="currentid" typeId="currentid"/>
<channel id="currenttitle" typeId="system.media-title"/>
<channel id="browse" typeId="browse"/>
<channel id="search" typeId="search"/>
<channel id="playlistselect" typeId="playlistselect"/>
<channel id="playlist" typeId="playlist"/>
<channel id="playlistaction" typeId="playlistaction"/>
<channel id="volume" typeId="system.volume"/>
<channel id="mute" typeId="system.mute"/>
<channel id="control" typeId="system.media-control"/>
<channel id="stop" typeId="stop"/>
</channels>
<representation-property>udn</representation-property>
<config-description>
<parameter name="udn" type="text" required="true">
<label>Unique Device Name</label>
<description>The UDN identifies the UPnP Media Server</description>
</parameter>
<parameter name="filter" type="boolean" required="false">
<parameter name="refresh" type="integer" unit="s">
<label>Refresh Interval</label>
<description>Specifies the refresh interval in seconds</description>
<default>60</default>
</parameter>
<parameter name="filter" type="boolean">
<label>Filter Content</label>
<description>Only list content which is playable on the selected renderer</description>
<default>false</default>
<advanced>false</advanced>
</parameter>
<parameter name="sortcriteria" type="text" required="false">
<parameter name="sortCriteria" type="text">
<label>Sort Criteria</label>
<description>Sort criteria for the titles in the selection list and when sending for playing to a renderer. The
criteria are defined in UPnP sort criteria format. Examples: +dc:title, -dc:creator, +upnp:album. Supported sort
criteria will depend on the media server</description>
<default>+dc:title</default>
</parameter>
<parameter name="browseDown" type="boolean">
<label>Auto Browse Down</label>
<description>When browse or search results in exactly one container entry, iteratively browse down until the
result
contains multiple container entries or at least one media entry</description>
<default>true</default>
</parameter>
<parameter name="searchFromRoot" type="boolean">
<label>Search From Root</label>
<description>Always search from the root directory</description>
<default>false</default>
</parameter>
<parameter name="responseTimeout" type="integer" unit="ms">
<label>UPnP Response Timeout</label>
<description>Specifies the timeout in milliseconds when waiting for responses on UPnP actions</description>
<default>2500</default>
<advanced>true</advanced>
</parameter>
</config-description>
</thing-type>
<!-- Channel Types -->
<channel-type id="loudness">
<item-type>Switch</item-type>
<label>Loudness</label>
<description>Loudness</description>
<category>SoundVolume</category>
</channel-type>
<channel-type id="stop">
<item-type>Switch</item-type>
<label>Stop</label>
<description>Stop the player</description>
<autoUpdatePolicy>veto</autoUpdatePolicy>
</channel-type>
<channel-type id="repeat">
<item-type>Switch</item-type>
<label>Repeat</label>
<description>Repeat the selection</description>
</channel-type>
<channel-type id="shuffle">
<item-type>Switch</item-type>
<label>Shuffle</label>
<description>Random shuffle the selection</description>
</channel-type>
<channel-type id="onlyplayone">
<item-type>Switch</item-type>
<label>Only Play One</label>
<description>Stop playback after playing one media entry from queue</description>
</channel-type>
<channel-type id="uri">
<item-type>String</item-type>
<label>URI</label>
<description>Now playing URI</description>
</channel-type>
<channel-type id="favoriteselect">
<item-type>String</item-type>
<label>Select Favorite</label>
<description>Select favorite to play</description>
<autoUpdatePolicy>veto</autoUpdatePolicy>
</channel-type>
<channel-type id="favorite">
<item-type>String</item-type>
<label>Favorite</label>
<description>Favorite name</description>
</channel-type>
<channel-type id="favoriteaction">
<item-type>String</item-type>
<label>Favorite Action</label>
<description>Favorite action</description>
<command>
<options>
<option value="SAVE">Save</option>
<option value="DELETE">Delete</option>
</options>
</command>
<autoUpdatePolicy>veto</autoUpdatePolicy>
</channel-type>
<channel-type id="album">
<item-type>String</item-type>
<label>Album</label>
@ -115,7 +239,13 @@
<item-type>Number:Time</item-type>
<label>Track Position</label>
<description>Now playing track position</description>
<state readOnly="true" pattern="%d %unit%"/>
<state pattern="%d %unit%"/>
</channel-type>
<channel-type id="reltrackposition">
<item-type>Dimmer</item-type>
<label>Relative Track Position</label>
<description>Track position as percentage of track duration</description>
<category>MediaControl</category>
</channel-type>
<channel-type id="upnprenderer">
@ -123,15 +253,10 @@
<label>Renderer</label>
<description>Select AV renderer</description>
</channel-type>
<channel-type id="currentid">
<item-type>String</item-type>
<label>Current Media Id</label>
<description>Current id of media entry or container</description>
</channel-type>
<channel-type id="browse">
<item-type>String</item-type>
<label>Browse Selection</label>
<description>Browse selection for playing</description>
<label>Current Media Id</label>
<description>Current id of media entry or container, option list to browse hierarchy</description>
</channel-type>
<channel-type id="search">
<item-type>String</item-type>
@ -140,4 +265,29 @@
Examples: dc:title contains "song", dc:creator contains "SpringSteen", unp:class = "object.item.audioItem",
upnp:album contains "Born in"</description>
</channel-type>
<channel-type id="playlistselect">
<item-type>String</item-type>
<label>Select Playlist</label>
<description>Playlist for selection</description>
<autoUpdatePolicy>veto</autoUpdatePolicy>
</channel-type>
<channel-type id="playlist">
<item-type>String</item-type>
<label>Playlist</label>
<description>Playlist name</description>
</channel-type>
<channel-type id="playlistaction">
<item-type>String</item-type>
<label>Playlist Action</label>
<description>Playlist action</description>
<command>
<options>
<option value="RESTORE">Restore</option>
<option value="SAVE">Save</option>
<option value="APPEND">Append</option>
<option value="DELETE">Delete</option>
</options>
</command>
<autoUpdatePolicy>veto</autoUpdatePolicy>
</channel-type>
</thing:thing-descriptions>