From 1d5b1719a9add1f57ecce99854b6d5c2a7b59f83 Mon Sep 17 00:00:00 2001 From: Florian Hotze Date: Fri, 29 Jul 2022 22:23:45 +0200 Subject: [PATCH] New SIP client component & widget (#1453) Update components docs. Signed-off-by: Florian Hotze Also-by: Dan Cunningham --- .../org.openhab.ui/doc/components/index.md | 2 + .../doc/components/oh-aggregate-series.md | 149 ++++++++++ .../doc/components/oh-button.md | 149 ++++++++++ .../doc/components/oh-calendar-axis.md | 149 ++++++++++ .../doc/components/oh-calendar-series.md | 149 ++++++++++ .../doc/components/oh-data-series.md | 149 ++++++++++ .../doc/components/oh-input-card.md | 5 + .../doc/components/oh-input-item.md | 5 + .../org.openhab.ui/doc/components/oh-input.md | 5 + .../doc/components/oh-label-card.md | 149 ++++++++++ .../doc/components/oh-plan-marker.md | 34 +++ .../doc/components/oh-plan-page.md | 10 + .../doc/components/oh-sipclient-card.md | 180 ++++++++++++ .../doc/components/oh-sipclient.md | 148 ++++++++++ .../doc/components/oh-time-series.md | 149 ++++++++++ .../doc/components/oh-video-card.md | 21 +- .../org.openhab.ui/doc/components/oh-video.md | 21 +- bundles/org.openhab.ui/web/package-lock.json | 130 +++++++-- bundles/org.openhab.ui/web/package.json | 1 + .../assets/definitions/widgets/chart/index.js | 2 +- .../definitions/widgets/standard/cards.js | 6 + .../definitions/widgets/system/index.js | 4 + .../definitions/widgets/system/sipclient.js | 17 ++ .../src/components/widgets/standard/index.js | 1 + .../widgets/standard/oh-sipclient-card.vue | 27 ++ .../src/components/widgets/system/index.js | 1 + .../widgets/system/oh-sipclient-ringback.mp3 | Bin 0 -> 15528 bytes .../widgets/system/oh-sipclient-ringtone.mp3 | Bin 0 -> 20728 bytes .../widgets/system/oh-sipclient.vue | 276 ++++++++++++++++++ 29 files changed, 1910 insertions(+), 29 deletions(-) create mode 100644 bundles/org.openhab.ui/doc/components/oh-sipclient-card.md create mode 100644 bundles/org.openhab.ui/doc/components/oh-sipclient.md create mode 100644 bundles/org.openhab.ui/web/src/assets/definitions/widgets/system/sipclient.js create mode 100644 bundles/org.openhab.ui/web/src/components/widgets/standard/oh-sipclient-card.vue create mode 100644 bundles/org.openhab.ui/web/src/components/widgets/system/oh-sipclient-ringback.mp3 create mode 100644 bundles/org.openhab.ui/web/src/components/widgets/system/oh-sipclient-ringtone.mp3 create mode 100644 bundles/org.openhab.ui/web/src/components/widgets/system/oh-sipclient.vue diff --git a/bundles/org.openhab.ui/doc/components/index.md b/bundles/org.openhab.ui/doc/components/index.md index ec6733b53..907417af0 100644 --- a/bundles/org.openhab.ui/doc/components/index.md +++ b/bundles/org.openhab.ui/doc/components/index.md @@ -24,6 +24,7 @@ source: https://github.com/openhab/openhab-webui/edit/main/bundles/org.openhab.u | [`oh-player`](./oh-player.html) | [Media player](./oh-player.html) | Media player controls, with previous track/pause/play/next buttons | | [`oh-repeater`](./oh-repeater.html) | [Repeater](./oh-repeater.html) | Iterate over an array and repeat the children components in the default slot | | [`oh-rollershutter`](./oh-rollershutter.html) | [Rollershutter](./oh-rollershutter.html) | Rollershutter control, with up/down/stop buttons | +| [`oh-sipclient`](./oh-sipclient.html) | [SIP Client](./oh-sipclient.html) | SIP Client to call and answer SIP calls | | [`oh-slider`](./oh-slider.html) | [Slider](./oh-slider.html) | Slider control, allows to pick a number value on a scale | | [`oh-stepper`](./oh-stepper.html) | [Stepper](./oh-stepper.html) | Stepper control, allows to input a number or decrement/increment it using buttons | | [`oh-swiper`](./oh-swiper.html) | [Swiper](./oh-swiper.html) | Swiper control, allows to display multiple swipeable slides | @@ -47,6 +48,7 @@ source: https://github.com/openhab/openhab-webui/edit/main/bundles/org.openhab.u | [`oh-list-card`](./oh-list-card.html) | [List Card](./oh-list-card.html) | Display a list in a card | | [`oh-player-card`](./oh-player-card.html) | [Player Card](./oh-player-card.html) | Display player controls in a card | | [`oh-rollershutter-card`](./oh-rollershutter-card.html) | [Rollershutter Card](./oh-rollershutter-card.html) | Display rollershutter controls in a card | +| [`oh-sipclient-card`](./oh-sipclient-card.html) | [SIP Client Card](./oh-sipclient-card.html) | Client to start and answer SIP calls | | [`oh-slider-card`](./oh-slider-card.html) | [Slider Card](./oh-slider-card.html) | Display a slider in a card to control an item | | [`oh-stepper-card`](./oh-stepper-card.html) | [Stepper Card](./oh-stepper-card.html) | Display a stepper in a card to control an item | | [`oh-swiper-card`](./oh-swiper-card.html) | [Swiper Card](./oh-swiper-card.html) | Display a swiper allowing to browse slides, in a card | diff --git a/bundles/org.openhab.ui/doc/components/oh-aggregate-series.md b/bundles/org.openhab.ui/doc/components/oh-aggregate-series.md index 65ae601bc..dd4850361 100644 --- a/bundles/org.openhab.ui/doc/components/oh-aggregate-series.md +++ b/bundles/org.openhab.ui/doc/components/oh-aggregate-series.md @@ -137,6 +137,155 @@ prev: /docs/ui/components/ +### Action +
+ + Action to perform when the element is clicked + + + Type of action to perform + + + + + + + + + + + + + + + + + + + + URL to navigate to + + + + + Open the URL in the same tab/window instead of a new one. This will exit the app. + + + + + Item to perform the action on + + + + + Command to send to the item. If "toggle item" is selected as the action, only send the command when the state is different + + + + + Command to send to the item when "toggle item" is selected as the action, and the item's state is equal to the command above + + + + + Comma-separated list of options; if omitted, retrieve the command options from the item dynamically. Use value=label format to provide a label different than the option. + + + + + Rule to run + + + + + Page to navigate to + + + + + Use a specific page transition animation + + + + + + + + + + + + + + + Page or widget to display in the modal + + + + + Configuration (prop values) for the target modal page or widget + + + + + Array of URLs or objects representing the images. Auto-refresh is not supported.
Edit in YAML or provide a JSON array, e.g.
[ "url1", { "item": "ImageItem1", "caption": "Camera" } ]
Objects are in the photos array format with an additional item property to specify an item to view. +
+
+ + + Configuration for the photo browser.
Edit in YAML or provide a JSON object, e.g.
{ "exposition": false, "type": "popup", "theme": "dark" }
See photo browser parameters (not all are supported). +
+
+ + + Group item whose members to show in a popup + + + + + Start analyzing with the specified (set of) item(s) + + + + + The initial analyzing period - dynamic or a predefined fixed period: day, week, month or year + + + + + + + + + + + + The initial coordinate system of the analyzer - time, aggregate or calendar (only time is supported for dynamic periods) + + + + + + + + + + Shows a toast popup when the action has been executed. Can either be a text to show or a JSON object including some of the supported parameters + + + + + The variable name to set + + + + + The value to set the variable to + + +
+
+ diff --git a/bundles/org.openhab.ui/doc/components/oh-button.md b/bundles/org.openhab.ui/doc/components/oh-button.md index 4ebd48d9a..1aff46883 100644 --- a/bundles/org.openhab.ui/doc/components/oh-button.md +++ b/bundles/org.openhab.ui/doc/components/oh-button.md @@ -256,6 +256,155 @@ Button performing an action +### Tap Hold +
+ + Action performed when tapping and holding card (or calling contextual menu on desktop) + + + Type of action to perform + + + + + + + + + + + + + + + + + + + + URL to navigate to + + + + + Open the URL in the same tab/window instead of a new one. This will exit the app. + + + + + Item to perform the action on + + + + + Command to send to the item. If "toggle item" is selected as the action, only send the command when the state is different + + + + + Command to send to the item when "toggle item" is selected as the action, and the item's state is equal to the command above + + + + + Comma-separated list of options; if omitted, retrieve the command options from the item dynamically. Use value=label format to provide a label different than the option. + + + + + Rule to run + + + + + Page to navigate to + + + + + Use a specific page transition animation + + + + + + + + + + + + + + + Page or widget to display in the modal + + + + + Configuration (prop values) for the target modal page or widget + + + + + Array of URLs or objects representing the images. Auto-refresh is not supported.
Edit in YAML or provide a JSON array, e.g.
[ "url1", { "item": "ImageItem1", "caption": "Camera" } ]
Objects are in the photos array format with an additional item property to specify an item to view. +
+
+ + + Configuration for the photo browser.
Edit in YAML or provide a JSON object, e.g.
{ "exposition": false, "type": "popup", "theme": "dark" }
See photo browser parameters (not all are supported). +
+
+ + + Group item whose members to show in a popup + + + + + Start analyzing with the specified (set of) item(s) + + + + + The initial analyzing period - dynamic or a predefined fixed period: day, week, month or year + + + + + + + + + + + + The initial coordinate system of the analyzer - time, aggregate or calendar (only time is supported for dynamic periods) + + + + + + + + + + Shows a toast popup when the action has been executed. Can either be a text to show or a JSON object including some of the supported parameters + + + + + The variable name to set + + + + + The value to set the variable to + + +
+
+ diff --git a/bundles/org.openhab.ui/doc/components/oh-calendar-axis.md b/bundles/org.openhab.ui/doc/components/oh-calendar-axis.md index caf7906a6..02adb8d83 100644 --- a/bundles/org.openhab.ui/doc/components/oh-calendar-axis.md +++ b/bundles/org.openhab.ui/doc/components/oh-calendar-axis.md @@ -54,6 +54,155 @@ prev: /docs/ui/components/ +### Action +
+ + Action to perform when the element is clicked + + + Type of action to perform + + + + + + + + + + + + + + + + + + + + URL to navigate to + + + + + Open the URL in the same tab/window instead of a new one. This will exit the app. + + + + + Item to perform the action on + + + + + Command to send to the item. If "toggle item" is selected as the action, only send the command when the state is different + + + + + Command to send to the item when "toggle item" is selected as the action, and the item's state is equal to the command above + + + + + Comma-separated list of options; if omitted, retrieve the command options from the item dynamically. Use value=label format to provide a label different than the option. + + + + + Rule to run + + + + + Page to navigate to + + + + + Use a specific page transition animation + + + + + + + + + + + + + + + Page or widget to display in the modal + + + + + Configuration (prop values) for the target modal page or widget + + + + + Array of URLs or objects representing the images. Auto-refresh is not supported.
Edit in YAML or provide a JSON array, e.g.
[ "url1", { "item": "ImageItem1", "caption": "Camera" } ]
Objects are in the photos array format with an additional item property to specify an item to view. +
+
+ + + Configuration for the photo browser.
Edit in YAML or provide a JSON object, e.g.
{ "exposition": false, "type": "popup", "theme": "dark" }
See photo browser parameters (not all are supported). +
+
+ + + Group item whose members to show in a popup + + + + + Start analyzing with the specified (set of) item(s) + + + + + The initial analyzing period - dynamic or a predefined fixed period: day, week, month or year + + + + + + + + + + + + The initial coordinate system of the analyzer - time, aggregate or calendar (only time is supported for dynamic periods) + + + + + + + + + + Shows a toast popup when the action has been executed. Can either be a text to show or a JSON object including some of the supported parameters + + + + + The variable name to set + + + + + The value to set the variable to + + +
+
+ diff --git a/bundles/org.openhab.ui/doc/components/oh-calendar-series.md b/bundles/org.openhab.ui/doc/components/oh-calendar-series.md index bc90fec9d..9619282d5 100644 --- a/bundles/org.openhab.ui/doc/components/oh-calendar-series.md +++ b/bundles/org.openhab.ui/doc/components/oh-calendar-series.md @@ -99,6 +99,155 @@ prev: /docs/ui/components/ +### Action +
+ + Action to perform when the element is clicked + + + Type of action to perform + + + + + + + + + + + + + + + + + + + + URL to navigate to + + + + + Open the URL in the same tab/window instead of a new one. This will exit the app. + + + + + Item to perform the action on + + + + + Command to send to the item. If "toggle item" is selected as the action, only send the command when the state is different + + + + + Command to send to the item when "toggle item" is selected as the action, and the item's state is equal to the command above + + + + + Comma-separated list of options; if omitted, retrieve the command options from the item dynamically. Use value=label format to provide a label different than the option. + + + + + Rule to run + + + + + Page to navigate to + + + + + Use a specific page transition animation + + + + + + + + + + + + + + + Page or widget to display in the modal + + + + + Configuration (prop values) for the target modal page or widget + + + + + Array of URLs or objects representing the images. Auto-refresh is not supported.
Edit in YAML or provide a JSON array, e.g.
[ "url1", { "item": "ImageItem1", "caption": "Camera" } ]
Objects are in the photos array format with an additional item property to specify an item to view. +
+
+ + + Configuration for the photo browser.
Edit in YAML or provide a JSON object, e.g.
{ "exposition": false, "type": "popup", "theme": "dark" }
See photo browser parameters (not all are supported). +
+
+ + + Group item whose members to show in a popup + + + + + Start analyzing with the specified (set of) item(s) + + + + + The initial analyzing period - dynamic or a predefined fixed period: day, week, month or year + + + + + + + + + + + + The initial coordinate system of the analyzer - time, aggregate or calendar (only time is supported for dynamic periods) + + + + + + + + + + Shows a toast popup when the action has been executed. Can either be a text to show or a JSON object including some of the supported parameters + + + + + The variable name to set + + + + + The value to set the variable to + + +
+
+ diff --git a/bundles/org.openhab.ui/doc/components/oh-data-series.md b/bundles/org.openhab.ui/doc/components/oh-data-series.md index d9bff2d08..127e2b685 100644 --- a/bundles/org.openhab.ui/doc/components/oh-data-series.md +++ b/bundles/org.openhab.ui/doc/components/oh-data-series.md @@ -40,6 +40,155 @@ prev: /docs/ui/components/ +### Action +
+ + Action to perform when the element is clicked + + + Type of action to perform + + + + + + + + + + + + + + + + + + + + URL to navigate to + + + + + Open the URL in the same tab/window instead of a new one. This will exit the app. + + + + + Item to perform the action on + + + + + Command to send to the item. If "toggle item" is selected as the action, only send the command when the state is different + + + + + Command to send to the item when "toggle item" is selected as the action, and the item's state is equal to the command above + + + + + Comma-separated list of options; if omitted, retrieve the command options from the item dynamically. Use value=label format to provide a label different than the option. + + + + + Rule to run + + + + + Page to navigate to + + + + + Use a specific page transition animation + + + + + + + + + + + + + + + Page or widget to display in the modal + + + + + Configuration (prop values) for the target modal page or widget + + + + + Array of URLs or objects representing the images. Auto-refresh is not supported.
Edit in YAML or provide a JSON array, e.g.
[ "url1", { "item": "ImageItem1", "caption": "Camera" } ]
Objects are in the photos array format with an additional item property to specify an item to view. +
+
+ + + Configuration for the photo browser.
Edit in YAML or provide a JSON object, e.g.
{ "exposition": false, "type": "popup", "theme": "dark" }
See photo browser parameters (not all are supported). +
+
+ + + Group item whose members to show in a popup + + + + + Start analyzing with the specified (set of) item(s) + + + + + The initial analyzing period - dynamic or a predefined fixed period: day, week, month or year + + + + + + + + + + + + The initial coordinate system of the analyzer - time, aggregate or calendar (only time is supported for dynamic periods) + + + + + + + + + + Shows a toast popup when the action has been executed. Can either be a text to show or a JSON object including some of the supported parameters + + + + + The variable name to set + + + + + The value to set the variable to + + +
+
+ diff --git a/bundles/org.openhab.ui/doc/components/oh-input-card.md b/bundles/org.openhab.ui/doc/components/oh-input-card.md index d358cfe01..2a0094faf 100644 --- a/bundles/org.openhab.ui/doc/components/oh-input-card.md +++ b/bundles/org.openhab.ui/doc/components/oh-input-card.md @@ -115,6 +115,11 @@ Display an input in a card Link the input value to the state of this item + + + Use the formatted state as the value for the input control + + Default value when not found in item state or variable diff --git a/bundles/org.openhab.ui/doc/components/oh-input-item.md b/bundles/org.openhab.ui/doc/components/oh-input-item.md index e6b00b77c..8247a1d58 100644 --- a/bundles/org.openhab.ui/doc/components/oh-input-item.md +++ b/bundles/org.openhab.ui/doc/components/oh-input-item.md @@ -120,6 +120,11 @@ Display an input field in a list Link the input value to the state of this item + + + Use the formatted state as the value for the input control + + Default value when not found in item state or variable diff --git a/bundles/org.openhab.ui/doc/components/oh-input.md b/bundles/org.openhab.ui/doc/components/oh-input.md index eaaad4a55..e43dca0ee 100644 --- a/bundles/org.openhab.ui/doc/components/oh-input.md +++ b/bundles/org.openhab.ui/doc/components/oh-input.md @@ -83,6 +83,11 @@ Displays an input field, used to set a variable Link the input value to the state of this item + + + Use the formatted state as the value for the input control + + Default value when not found in item state or variable diff --git a/bundles/org.openhab.ui/doc/components/oh-label-card.md b/bundles/org.openhab.ui/doc/components/oh-label-card.md index a4104af82..03025b8c5 100644 --- a/bundles/org.openhab.ui/doc/components/oh-label-card.md +++ b/bundles/org.openhab.ui/doc/components/oh-label-card.md @@ -206,6 +206,155 @@ Display the state of an item in a card +### Tap Hold +
+ + Action performed when tapping and holding card (or calling contextual menu on desktop) + + + Type of action to perform + + + + + + + + + + + + + + + + + + + + URL to navigate to + + + + + Open the URL in the same tab/window instead of a new one. This will exit the app. + + + + + Item to perform the action on + + + + + Command to send to the item. If "toggle item" is selected as the action, only send the command when the state is different + + + + + Command to send to the item when "toggle item" is selected as the action, and the item's state is equal to the command above + + + + + Comma-separated list of options; if omitted, retrieve the command options from the item dynamically. Use value=label format to provide a label different than the option. + + + + + Rule to run + + + + + Page to navigate to + + + + + Use a specific page transition animation + + + + + + + + + + + + + + + Page or widget to display in the modal + + + + + Configuration (prop values) for the target modal page or widget + + + + + Array of URLs or objects representing the images. Auto-refresh is not supported.
Edit in YAML or provide a JSON array, e.g.
[ "url1", { "item": "ImageItem1", "caption": "Camera" } ]
Objects are in the photos array format with an additional item property to specify an item to view. +
+
+ + + Configuration for the photo browser.
Edit in YAML or provide a JSON object, e.g.
{ "exposition": false, "type": "popup", "theme": "dark" }
See photo browser parameters (not all are supported). +
+
+ + + Group item whose members to show in a popup + + + + + Start analyzing with the specified (set of) item(s) + + + + + The initial analyzing period - dynamic or a predefined fixed period: day, week, month or year + + + + + + + + + + + + The initial coordinate system of the analyzer - time, aggregate or calendar (only time is supported for dynamic periods) + + + + + + + + + + Shows a toast popup when the action has been executed. Can either be a text to show or a JSON object including some of the supported parameters + + + + + The variable name to set + + + + + The value to set the variable to + + +
+
+ ### Label
diff --git a/bundles/org.openhab.ui/doc/components/oh-plan-marker.md b/bundles/org.openhab.ui/doc/components/oh-plan-marker.md index 6a07cbc03..69bce0afd 100644 --- a/bundles/org.openhab.ui/doc/components/oh-plan-marker.md +++ b/bundles/org.openhab.ui/doc/components/oh-plan-marker.md @@ -49,6 +49,7 @@ A marker on a floor plan ### Icon
+ You can customize the styles further with CSS attributes in the iconStyle parameter (in YAML only) Use oh:iconName (openHAB icon), f7:iconName (Framework7 icon), material:iconName (Material icon) or iconify:iconSet:iconName (Iconify icon, requires being online if not in cache) @@ -79,6 +80,11 @@ A marker on a floor plan Color of the icon (for Framework7/Material/certain Iconify icons); use expression for dynamic colors + + + Rotation of the icon in degrees + +
@@ -108,6 +114,34 @@ A marker on a floor plan Color of the tooltip + + + The direction of the tooltip + + + + + + + + + + + + + The X offset of the tooltip from the marker in pixels + + + + + The Y offset of the tooltip from the marker in pixels + + + + + The opacity of the tooltip (0-1) + +
diff --git a/bundles/org.openhab.ui/doc/components/oh-plan-page.md b/bundles/org.openhab.ui/doc/components/oh-plan-page.md index db07857ea..4f36dcad4 100644 --- a/bundles/org.openhab.ui/doc/components/oh-plan-page.md +++ b/bundles/org.openhab.ui/doc/components/oh-plan-page.md @@ -71,6 +71,16 @@ Displays markers on an image overlay Apply an invert filter to the image in dark mode - use with images in black & white or grayscale for best results
+ + + Color of the tooltip. "Black or White" means it will be black in dark mode and white in light mode + + + + + + + diff --git a/bundles/org.openhab.ui/doc/components/oh-sipclient-card.md b/bundles/org.openhab.ui/doc/components/oh-sipclient-card.md new file mode 100644 index 000000000..b0d71c27a --- /dev/null +++ b/bundles/org.openhab.ui/doc/components/oh-sipclient-card.md @@ -0,0 +1,180 @@ +--- +title: oh-sipclient-card - SIP Client Card +component: oh-sipclient-card +label: SIP Client Card +description: SIP Client +source: https://github.com/openhab/openhab-webui/edit/main/bundles/org.openhab.ui/doc/components/oh-sipclient-card.md +prev: /docs/ui/components/ +--- + +# oh-sipclient-card - SIP Client Card + + + +[[toc]] + + + + +Client to start and answer SIP calls + + +## Configuration + + + +### Card +
+ + Parameters of the card + + + Title of the card + + + + + Footer of the card + + + + + Do not render the card border + + + + + Do not render a shadow effect to the card + + + + + Show the card outline + + + +
+ +### SIP Settings +
+ + + + Size of the icon(s) in px + + + + + Full URL of the WebRTC SIP websocket, e.g. 'wss://siphost:8089/ws' or relative path, e.g. '/ws', for Android & iOS, you need wss (WebSocket secured) + + + + + SIP Domain + + + + + SIP Username + + + + + SIP Password + + + + + Enable ringback and ring tone, might cause issues with your browser, so that your call fails + + + + + Hides the username of the remote party on incoming call + + + + + Single SIP Address (phone number) for a single call target or a comma-separated list of 'phoneNumber=name' for multiple call targets + + + + + Enable video calling + + + + + Display the local camera on video calls + + + + + Default video aspect ratio used to size the widget before video is loaded. Defaults to 4/3, 16/9 and 1 are common alternatives. + + + + + Display a button to send a preset DTMF string while in calls for remote doors, gates, etc... + + + + + +
+ + + + + + + + + + + diff --git a/bundles/org.openhab.ui/doc/components/oh-sipclient.md b/bundles/org.openhab.ui/doc/components/oh-sipclient.md new file mode 100644 index 000000000..5da9d187a --- /dev/null +++ b/bundles/org.openhab.ui/doc/components/oh-sipclient.md @@ -0,0 +1,148 @@ +--- +title: oh-sipclient - SIP Client +component: oh-sipclient +label: SIP Client +description: Use SIP over WebSocket to perform calls +source: https://github.com/openhab/openhab-webui/edit/main/bundles/org.openhab.ui/doc/components/oh-sipclient.md +prev: /docs/ui/components/ +--- + +# oh-sipclient - SIP Client + + + +[[toc]] + + + + +SIP Client to call and answer SIP calls + + +## Configuration + + + +### General +
+ + + + Size of the icon(s) in px + + + + + Full URL of the WebRTC SIP websocket, e.g. 'wss://siphost:8089/ws' or relative path, e.g. '/ws', for Android & iOS, you need wss (WebSocket secured) + + + + + SIP Domain + + + + + SIP Username + + + + + SIP Password + + + + + Enable ringback and ring tone, might cause issues with your browser, so that your call fails + + + + + Hides the username of the remote party on incoming call + + + + + Single SIP Address (phone number) for a single call target or a comma-separated list of 'phoneNumber=name' for multiple call targets + + + + + Enable video calling + + + + + Display the local camera on video calls + + + + + Default video aspect ratio used to size the widget before video is loaded. Defaults to 4/3, 16/9 and 1 are common alternatives. + + + + + Display a button to send a preset DTMF string while in calls for remote doors, gates, etc... + + + + + +
+ + + + + + + + + + + diff --git a/bundles/org.openhab.ui/doc/components/oh-time-series.md b/bundles/org.openhab.ui/doc/components/oh-time-series.md index 4aa74476e..f9f710a8b 100644 --- a/bundles/org.openhab.ui/doc/components/oh-time-series.md +++ b/bundles/org.openhab.ui/doc/components/oh-time-series.md @@ -91,6 +91,155 @@ prev: /docs/ui/components/ +### Action +
+ + Action to perform when the element is clicked + + + Type of action to perform + + + + + + + + + + + + + + + + + + + + URL to navigate to + + + + + Open the URL in the same tab/window instead of a new one. This will exit the app. + + + + + Item to perform the action on + + + + + Command to send to the item. If "toggle item" is selected as the action, only send the command when the state is different + + + + + Command to send to the item when "toggle item" is selected as the action, and the item's state is equal to the command above + + + + + Comma-separated list of options; if omitted, retrieve the command options from the item dynamically. Use value=label format to provide a label different than the option. + + + + + Rule to run + + + + + Page to navigate to + + + + + Use a specific page transition animation + + + + + + + + + + + + + + + Page or widget to display in the modal + + + + + Configuration (prop values) for the target modal page or widget + + + + + Array of URLs or objects representing the images. Auto-refresh is not supported.
Edit in YAML or provide a JSON array, e.g.
[ "url1", { "item": "ImageItem1", "caption": "Camera" } ]
Objects are in the photos array format with an additional item property to specify an item to view. +
+
+ + + Configuration for the photo browser.
Edit in YAML or provide a JSON object, e.g.
{ "exposition": false, "type": "popup", "theme": "dark" }
See photo browser parameters (not all are supported). +
+
+ + + Group item whose members to show in a popup + + + + + Start analyzing with the specified (set of) item(s) + + + + + The initial analyzing period - dynamic or a predefined fixed period: day, week, month or year + + + + + + + + + + + + The initial coordinate system of the analyzer - time, aggregate or calendar (only time is supported for dynamic periods) + + + + + + + + + + Shows a toast popup when the action has been executed. Can either be a text to show or a JSON object including some of the supported parameters + + + + + The variable name to set + + + + + The value to set the variable to + + +
+
+ diff --git a/bundles/org.openhab.ui/doc/components/oh-video-card.md b/bundles/org.openhab.ui/doc/components/oh-video-card.md index 180bb2611..2ab64a640 100644 --- a/bundles/org.openhab.ui/doc/components/oh-video-card.md +++ b/bundles/org.openhab.ui/doc/components/oh-video-card.md @@ -80,11 +80,30 @@ Display a video (URL or URL from String item) in a card Hide the control buttons of the video - + Does not start playing the video automatically + + + Select the player type (optional), defualts to Video.js + + + + + + + + + WebRTC stun server (optional), defaults to 'stun:stun.l.google.com:19302' + + + + + WebRTC ICE candidates discovery timeout length in milliseconds (optional), defaults to '2000', '0' to disable + + diff --git a/bundles/org.openhab.ui/doc/components/oh-video.md b/bundles/org.openhab.ui/doc/components/oh-video.md index fffa18e29..aec5012b2 100644 --- a/bundles/org.openhab.ui/doc/components/oh-video.md +++ b/bundles/org.openhab.ui/doc/components/oh-video.md @@ -48,11 +48,30 @@ Displays a video player from a URL or an item Hide the control buttons of the video - + Does not start playing the video automatically + + + Select the player type (optional), defualts to Video.js + + + + + + + + + WebRTC stun server (optional), defaults to 'stun:stun.l.google.com:19302' + + + + + WebRTC ICE candidates discovery timeout length in milliseconds (optional), defaults to '2000', '0' to disable + + diff --git a/bundles/org.openhab.ui/web/package-lock.json b/bundles/org.openhab.ui/web/package-lock.json index 4a7ff4a33..53d51ce00 100644 --- a/bundles/org.openhab.ui/web/package-lock.json +++ b/bundles/org.openhab.ui/web/package-lock.json @@ -22,6 +22,7 @@ "framework7": "^5.7.12", "framework7-icons": "^3.0.1", "framework7-vue": "^5.7.12", + "jssip": "^3.9.1", "leaflet": "^1.7.1", "leaflet-providers": "^1.11.0", "lodash": "^4.17.20", @@ -3696,6 +3697,14 @@ "@babel/types": "^7.3.0" } }, + "node_modules/@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "dependencies": { + "@types/ms": "*" + } + }, "node_modules/@types/eslint": { "version": "7.2.6", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.6.tgz", @@ -3774,11 +3783,15 @@ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", "dev": true }, + "node_modules/@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" + }, "node_modules/@types/node": { - "version": "14.6.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.6.4.tgz", - "integrity": "sha512-Wk7nG1JSaMfMpoMJDKUsWYugliB2Vy55pdjLpmLixeyMi7HizW2I/9QoxsPCkXl3dO+ZOVqPumKaDUv5zJu2uQ==", - "dev": true + "version": "14.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==" }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -7493,12 +7506,19 @@ "dev": true }, "node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dependencies": { - "ms": "^2.1.1" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/debug-log": { @@ -7510,6 +7530,11 @@ "node": ">=0.10.0" } }, + "node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, "node_modules/decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", @@ -9692,10 +9717,9 @@ "dev": true }, "node_modules/events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", - "dev": true, + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "engines": { "node": ">=0.8.x" } @@ -13036,6 +13060,18 @@ "verror": "1.10.0" } }, + "node_modules/jssip": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/jssip/-/jssip-3.9.1.tgz", + "integrity": "sha512-hl8jxkte4p0zHl9Nen03rdwP8lbBwMy3SnrmzVf7f+Jhvnz7gF/WXdFi35zpEpxAmxFLczxD4U8ATK/CHEwhqw==", + "dependencies": { + "@types/debug": "^4.1.5", + "@types/node": "^14.14.34", + "debug": "^4.3.1", + "events": "^3.3.0", + "sdp-transform": "^2.14.1" + } + }, "node_modules/jsx-ast-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", @@ -17970,6 +18006,14 @@ "strip-css-comments": "^3.0.0" } }, + "node_modules/sdp-transform": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/sdp-transform/-/sdp-transform-2.14.1.tgz", + "integrity": "sha512-RjZyX3nVwJyCuTo5tGPx+PZWkDMCg7oOLpSlhjDdZfwUoNqG1mM8nyj31IGHyaPWXhjbP7cdK3qZ2bmkJ1GzRw==", + "bin": { + "sdp-verify": "checker.js" + } + }, "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -26097,6 +26141,14 @@ "@babel/types": "^7.3.0" } }, + "@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "requires": { + "@types/ms": "*" + } + }, "@types/eslint": { "version": "7.2.6", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.6.tgz", @@ -26175,11 +26227,15 @@ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", "dev": true }, + "@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" + }, "@types/node": { - "version": "14.6.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.6.4.tgz", - "integrity": "sha512-Wk7nG1JSaMfMpoMJDKUsWYugliB2Vy55pdjLpmLixeyMi7HizW2I/9QoxsPCkXl3dO+ZOVqPumKaDUv5zJu2uQ==", - "dev": true + "version": "14.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==" }, "@types/parse-json": { "version": "4.0.0", @@ -29371,12 +29427,18 @@ "dev": true }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } } }, "debug-log": { @@ -31180,10 +31242,9 @@ "dev": true }, "events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", - "dev": true + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" }, "eventsource": { "version": "1.1.2", @@ -33928,6 +33989,18 @@ "verror": "1.10.0" } }, + "jssip": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/jssip/-/jssip-3.9.1.tgz", + "integrity": "sha512-hl8jxkte4p0zHl9Nen03rdwP8lbBwMy3SnrmzVf7f+Jhvnz7gF/WXdFi35zpEpxAmxFLczxD4U8ATK/CHEwhqw==", + "requires": { + "@types/debug": "^4.1.5", + "@types/node": "^14.14.34", + "debug": "^4.3.1", + "events": "^3.3.0", + "sdp-transform": "^2.14.1" + } + }, "jsx-ast-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", @@ -37999,6 +38072,11 @@ "strip-css-comments": "^3.0.0" } }, + "sdp-transform": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/sdp-transform/-/sdp-transform-2.14.1.tgz", + "integrity": "sha512-RjZyX3nVwJyCuTo5tGPx+PZWkDMCg7oOLpSlhjDdZfwUoNqG1mM8nyj31IGHyaPWXhjbP7cdK3qZ2bmkJ1GzRw==" + }, "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", diff --git a/bundles/org.openhab.ui/web/package.json b/bundles/org.openhab.ui/web/package.json index 2ef3fcaa0..c9e6078fa 100644 --- a/bundles/org.openhab.ui/web/package.json +++ b/bundles/org.openhab.ui/web/package.json @@ -74,6 +74,7 @@ "framework7": "^5.7.12", "framework7-icons": "^3.0.1", "framework7-vue": "^5.7.12", + "jssip": "^3.9.1", "leaflet": "^1.7.1", "leaflet-providers": "^1.11.0", "lodash": "^4.17.20", diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/widgets/chart/index.js b/bundles/org.openhab.ui/web/src/assets/definitions/widgets/chart/index.js index 01d7fd7d9..2fad8a4ab 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/widgets/chart/index.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/widgets/chart/index.js @@ -1,7 +1,7 @@ // definitions for the chart widgets // TODO: migrate to WidgetDefinition & use helpers -import { actionGroup, actionParams } from '../actions' +import { actionGroup, actionParams } from '../actions.js' const positionGroup = { name: 'position', diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/widgets/standard/cards.js b/bundles/org.openhab.ui/web/src/assets/definitions/widgets/standard/cards.js index 2bc1925bd..d22059604 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/widgets/standard/cards.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/widgets/standard/cards.js @@ -164,3 +164,9 @@ export const OhClockCardDefinition = () => new WidgetDefinition('oh-clock-card', }) ]) .paramGroup(actionGroup(null, 'Action to perform when the clock is clicked'), actionParams()) + +// OhSIPClientCard +import SIPClientParameters from '../system/sipclient.js' +export const OhSIPClientCardDefinition = () => new WidgetDefinition('oh-sipclient-card', 'SIP Client Card', 'Client to start and answer SIP calls') + .paramGroup(CardParameterGroup(), CardParameters()) + .paramGroup(pg('sip', 'SIP Settings'), SIPClientParameters()) diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/widgets/system/index.js b/bundles/org.openhab.ui/web/src/assets/definitions/widgets/system/index.js index 1331fdaef..c811fcb62 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/widgets/system/index.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/widgets/system/index.js @@ -93,3 +93,7 @@ export const OhRepeaterDefinition = () => new WidgetDefinition('oh-repeater', 'R import ClockParameters from './clock.js' export const OhClockDefinition = () => new WidgetDefinition('oh-clock', 'Digital Clock', 'Display a digital clock') .params(ClockParameters()) + +import SIPClientParameters from './sipclient.js' +export const OhSIPClientDefinition = () => new WidgetDefinition('oh-sipclient', 'SIP Client', 'SIP Client to call and answer SIP calls') + .params(SIPClientParameters()) diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/widgets/system/sipclient.js b/bundles/org.openhab.ui/web/src/assets/definitions/widgets/system/sipclient.js new file mode 100644 index 000000000..c0c27be80 --- /dev/null +++ b/bundles/org.openhab.ui/web/src/assets/definitions/widgets/system/sipclient.js @@ -0,0 +1,17 @@ +import { pt, pn, pb } from '../helpers.js' + +export default () => [ + pn('iconSize', 'Icon Size', 'Size of the icon(s) in px'), + pt('websocketUrl', 'Websocket URL', 'Full URL of the WebRTC SIP websocket, e.g. \'wss://siphost:8089/ws\' or relative path, e.g. \'/ws\', for Android & iOS, you need wss (WebSocket secured)').r(), + pt('domain', 'Domain', 'SIP Domain').r(), + pt('username', 'Username', 'SIP Username').r(), + pt('password', 'Password', 'SIP Password').r(), + pb('enableTones', 'Enable tones', 'Enable ringback and ring tone, might cause issues with your browser, so that your call fails'), + pb('hideCallerId', 'Hide caller id', 'Hides the username of the remote party on incoming call'), + pt('phonebook', 'Phonebook', 'Single SIP Address (phone number) for a single call target or a comma-separated list of \'phoneNumber=name\' for multiple call targets').r(), + pb('enableVideo', 'Enable Video', 'Enable video calling'), + pb('enableLocalVideo', 'Enable Local Video View', 'Display the local camera on video calls'), + pt('defaultVideoAspectRatio', 'Default Aspect Ratio', 'Default video aspect ratio used to size the widget before video is loaded. Defaults to 4/3, 16/9 and 1 are common alternatives.').a(), + pt('dtmfString', 'DTMF String', 'Display a button to send a preset DTMF string while in calls for remote doors, gates, etc...').a(), + pb('enableSIPDebug', 'Enable SIP debugging to the console').a() +] diff --git a/bundles/org.openhab.ui/web/src/components/widgets/standard/index.js b/bundles/org.openhab.ui/web/src/components/widgets/standard/index.js index d64c7860c..c1697f7d0 100644 --- a/bundles/org.openhab.ui/web/src/components/widgets/standard/index.js +++ b/bundles/org.openhab.ui/web/src/components/widgets/standard/index.js @@ -16,3 +16,4 @@ export { default as OhSwiperCard } from './oh-swiper-card.vue' export { default as OhListCard } from './oh-list-card.vue' export { default as OhWebframeCard } from './oh-webframe-card.vue' export { default as OhClockCard } from './oh-clock-card.vue' +export { default as OhSipclientCard } from './oh-sipclient-card.vue' diff --git a/bundles/org.openhab.ui/web/src/components/widgets/standard/oh-sipclient-card.vue b/bundles/org.openhab.ui/web/src/components/widgets/standard/oh-sipclient-card.vue new file mode 100644 index 000000000..1511dc65c --- /dev/null +++ b/bundles/org.openhab.ui/web/src/components/widgets/standard/oh-sipclient-card.vue @@ -0,0 +1,27 @@ + + + diff --git a/bundles/org.openhab.ui/web/src/components/widgets/system/index.js b/bundles/org.openhab.ui/web/src/components/widgets/system/index.js index de1065dbb..10145440f 100644 --- a/bundles/org.openhab.ui/web/src/components/widgets/system/index.js +++ b/bundles/org.openhab.ui/web/src/components/widgets/system/index.js @@ -21,3 +21,4 @@ export { default as OhWebframe } from './oh-webframe.vue' export { default as OhRepeater } from './oh-repeater.vue' export { default as OhChart } from './oh-chart.vue' export { default as OhClock } from './oh-clock.vue' +export { default as OhSipclient } from './oh-sipclient.vue' diff --git a/bundles/org.openhab.ui/web/src/components/widgets/system/oh-sipclient-ringback.mp3 b/bundles/org.openhab.ui/web/src/components/widgets/system/oh-sipclient-ringback.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..c6c09c214803d396eee31db4f7c009889f95bdf7 GIT binary patch literal 15528 zcmeI13rtg27{?D>UIGG6n9d0lsGv%W!$y207q%*!@k`-u(x^J96}R-j9Vvr_Y=_f8k=8 zwBqvBn(H^~e!qS9p8Wp9M~|O0x4igA)z(RVmP4S=e7`B~lX*O&LvTrU9Io+H5ilsC z)^YH#C?B}6CkiOBPciof9KfNm>7RI&m*fO z`JvGUpLlM17{H6pts#PwQtRyM4jab=rB=7NbNR&&QZJXz9jR`*>3g|!>5SIzISBzO zvjQ0<<9^A?@zc?JoElZ3TRcui26uE2x9WjGmUno@AAYgRpNr!6Mc8YN3)5ao(~~9C z{qZAAn@*)=j?b(n5^lIST^AfE0D#MprLVQ~FW%Gf!Xk5DVn7o@K&wQ)P+2^aQDPI1 zZ96M*s}+A4=#_XSm%qU%DFJ|Cz{SQkE(1ijjFeNF0z z&uW}>K?p2boL2JYag!TDc8v6l$$6}m>Ss}}%o=V`T86U?V+;f3{+2oXA+=YcIz{)6Q>x_7f(W8W+0G3F{+w|&wxFUhcyx~4bX_R&^U)6d zMma?3D}bcYUQ~6_S+I~OR#uhxLfcfEr5~jw>C(Tgu`S_5SwVehn!MAN>s7X2?X=-8 z08x~FGmxZym{xV1%LyZjlS%z;7OOWecByR55?ngUZPumVpOrpwc>rkEUvDq2oarnG z5tmGRc`R_XNkHuq@9>sV{?k+DsAB5bbF5Z6a=Q353nhQrZ>pTRnG;Cv2W5%xAl4e% z-@z+D4IdfJ-$ATOO8=P<`nyov-~HRb{Uy)qcdS3ZZGRd4 zd2r5OZT%wqv$lTO`;XGJfHBrq7{z@2#5zm}ERC(Y`j7Vf)%54=2E)8tim|Ikxbo_= z+53a8S(nmh@6WF{0BiaieZHdgXI=f1eJZB(8UE7xGdq9syzH+(`^1qCs~Z0F^SAeW zWyQ{)wSJNF)f=hb_U`#PoG4PIb5jTSfb+KN_ci9{e!P{H4UI1|%$BBi%|GP)KtF#g zw+1bl^limol}(DMF948Pg-E=|81c@!8Bq@^l@-#A`0XJcmLWeR%5#U?5Ifx8U*?{g zcUAgeILI^(d9>9=;-55XaqW6n6QO4RXy&VV-SbtN!sjOKh~qa>wuv28TE@gNSHa@;^aM)K4ZROYN0ZE>oe*X zrN+$Ztk7_j3nF{}|Rsd7$Nw`JnLh>`%-G^Fb0|PvZK*eBghF z*h!$@#rp@%1!gfHNCF)(A2b)3#e5(Mbi{nnTwoUSfh5oo^FecgS`yL zA4mcnF&{J+n8kb`33SAK&|F{^^MNGL5%WQFfmzH4l0Zky2h9a$F&{_*9Wfs?7nsF- zAPIEDe9&BA7W085&=K=NbAegR2a-TX%m>W{W-%W~0v$0QG#8k~d>{#Q)PoQDMm@7w KpB>bHozK4+ob6r! literal 0 HcmV?d00001 diff --git a/bundles/org.openhab.ui/web/src/components/widgets/system/oh-sipclient-ringtone.mp3 b/bundles/org.openhab.ui/web/src/components/widgets/system/oh-sipclient-ringtone.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..1b7a3b98195a6218d19403ba7d00ac17cd32b812 GIT binary patch literal 20728 zcmeI3XHZmKx93ljb4EaNjtU4!&KX2u_g1}Ar62CRGaqI=Rb5@D|5a!2_1k;xwf5Sl!Hd*h;D5a=Ts@sJzma1; z@c>|O1`v`^(p+I=Vdv(%CVWFuMow8x>(*^!GYcDA2WM9=AOAFpmF8X23I`ZzoH>Fc-eKNeS3*EhF!c7Gil9iJi2 zQD{tCEVq>P)WxogiiqI6_|GoUvTp-0|Y_S003KH zByST30AK;#YybfP8wP?LS!z36LHU;>mN#~rHzTr5iQ{3Masb_ZKOV=|+IdAH0FdA( z%u#xtoOo?0yyZtBL|8T6crv}>&I=Z~1o0*_=6Q#bM7kE8&yMXq&l9LLm`JMSRMP#~ zOEs=PxtIhWaAy*z=bLhbDem1Eg)Hx_U5N9Jd`MM}zC zja=FZcDQL|?>>2C#`q_=I|&F9HI)wJ-mn+vE|{cMK|Z)ZH*PR#D~^LaZ-a)TxkL4k zGaz^eZS~S360aycHGUikj^4Rhnk8LA1vmQmr{~ zd9gLc;wpG1H~@9)U}e1ltDuxG&}fL&p9~{HDtn}kikrsIiFy>JHiUEYR}V=)_G&bL zLAU5k;HoWQTt}71dn(G%{iq7qNZb?+del3x>EHfzI_@oaVb{A2qqaNLL)5|`vaGf6 z>nfy}K|%itkqIy+=i%1+|^g znaJ=+3Y_dh3V)v&8RIXj&oWB1x$Kn;txs>TAw(b=*L?WFj9pR)4_W!+rLWsiv%WR+ z#BzsOtQJx+s^lHY8G-t!%5Y}i$5V|II;^c1LQQ@)!?h4RxZ)&Pm^_+HW%Yts=M@$0(BU7-wq=PCnZ!-@{()bPks+?$ zW;L9Rtg$YYzN@g=tpokPesUwkTC4U6ZKE`>VCnGb!81TrU(@fG+6(c`jlI zJwMp7lG#3lobil+gUcXTO(J(H*6nl{oG?@_IOdKuV+1^1=LcFwc06r#ZLRYHZ-&s zdbmVa>c^&IHQ*g0T{<=2P;&U0=F7HVcAz!oY0**bql1i+;YBSMX2qjxJYq3o&)D2N z!B3u{%6tVE!t|;ns&eem^G*XQ7+yWrjZQ5rIw(?`H7CKPO7#_TL~-(gPL$pDx}M(E zn9MhU6jzh1EJuf%)JW)2jmxeNu(1ed!C!`#_M8AjFTUEY*S%&p&K3%dVea7IiWSJ; zz2=A4)e?pHbsTRloO@R1!!=$*isypj0G8w1DiXJx%p&^aHZ*8eVqv2{D^Ap%Jo|%I|-8= z6_119+j-i-r+%W9FN-p*>%*TW5@fb%dvk;tPnA z4?WuP+>y(w^(T@S*#lPv38A10$gpA>7J=UqE_!Xhn>w`3oMgTIC&B8sLp%Tnu!~Fd ze#!tnKP>3{)qM~h3nm%G?t*us7-a<> zu`aH!7-hrgzXR;ccKB}vNGIOj&|&o6q~aEm5V70PG7J9TGWDt|*<cJn-Ub>z4!$^WlZv1yEeHDJU|4(FD`}*L!zc)3TmV|AMO-(xJ6ueSAf=O3 z3xN1>=*?Ltf%Y8uLAsRLOX|GN!c~&CCQx?P^HIk0-lQ6IlRknB1P`GVQ%~`Lz1!F+ z&w(p%60JK|R*k*@zA#Es7pBm_+xOmyv51AM2wxQL+!(rEUz-m(@IJS{v}X?>vL`p+ zxxu$6&A!ud@~re=ZNB6k@&WWv@swza5o)N3aAop zuXXv4+dgmXCP{GCDX&@h`uT}AW#59{hlqwG5*)OEZKXVk&=m&5H$DO2@Y^{ghjzd( zfLAn}dzV7#oDD0Y`U`Y1jwe)o%IzraL&%bsM`d+$ui^LXiuWd_O13AL_FTY-20+*K z+ID-`i|x?ZqK?f7?u2envDGU#2-6@px0Tec*X&)8c;CvuXH(XxaYs~tPE-&|y)x{API zm|1-L==~C@p(UjluB$>&ql6?4-p*CJ! z(q!jm+Cm<+SS#0;;-5Sw#2UyAFM>99@sM3_F}J){jOQq+hHr&Fp}MqZ14iia)oQ)y6+7i~ zkC5Y*X`V-^`=)L4_i0B86<8U+R?&U`f(@ZNrv~3lf^#4%I3%A~4#pf>eI;ITulh&8P`moK*a-OM0m+C4Z=b8kk$o6KiOkQ4=z93d_sMXZHs|{0@a|q+M z?Z=_AGa`+H^;Ya(y5LP|iU9q&o23s6Myd?mjcw$~ejhzZ!H9yzpeGB_+yB)c%-C4WQT5DzT6p;13!NuX6#BP>76* zW!^Y-ntGN;Zv6m!HugXa1m)Ke+{x2~eMLpNJB0)_d_@%$KE!8BMfT1fB`Lh5f|){I zORttarghu}$UEaa9q_bIdv7&FI^)PO7=(W$PX*H)L*8DUPS_edY z|CLA6GC5_bd0U8SKbwQRBI`9vSa9z>r?@uP($cr!e?$yIeroge_*(nW(k=Pe>gmeX zC>tg?xGyVw%UA8O)jX|2m>0ooyiODTg3S%Qnjli_j~ib5yePR=%e+;Io^YjnQv=!> z{qNYX{bfffd@5n?E>%mR8H%|5OXC%Y$ScA%#E@q(mG{AQv)3TFx)oq4H~+KMY(CV- zQbF~}1yt(MEv@goqzO1HtR-mI@lA9MO3&dzQP~JqW-1;l51=E9u*y`f-yRlv5{_$7 zq+5PD3g<9Nds3^Pa(C^`ShwYnEg4vaPQCn{{az^zGn!MI)2~8ivxDQX}&wI*EQIiFxDbZ3Zl$cNVRW%GP9F=teKRw_chU>Z~rKyntxv>cq+wl+2rhN ze-zOIYEeMVRmevFv;j{I%s3XXd1&;&u0-?a zw^#|P$c_S>=9V$t#n?!APhLD39&3T^nex0YHFvb-x9XOPG0A{%U%B1M~j{FwLwf3~rt{HF+!yW<4fUOthPIfpRC z*qc~MM9}P`NCskV4)+hk+(EAu+u2}vnob(vmd+0i4t3)H9{td^NyU{#To+kE?`cSR5_4T-cF}uzj>pu7r4!(4rEljDn)lMC*1eSP%Dr}$JQOY1Uw*`IvA_pK4%wb@uDNR21F{7m2~ z+_yd{tXAPro2V*XT)hJjNg5nxJ`lKe6z3vHR6k>!R5OseOo@Jn(H;s*qCR9UssPw^G{^tHOnoj5Y33&v**d+O5|lKlqMAgm_LKWmcp=1 z+*{h383s0Jp6>C;3}yxx-)wtNmk4{2CI1G-D7gu|*5+l#b@p^EIU!%GM+c)hGeJdA zSP}$9z!x4L0qIQ$&Z*MXf`PIcG9W{w?g^Jd*=vsUwqK2;8Y@c&?La|X(m_gLf+*nb_ydn1D)3!tL)Vo zAIQg6HHQt$M@9~`u33n9e=8F68{u*sO67ZLjna?G>x8Z`2v$?93xj&IrEn)Xb5ICeibL%K=fZSp*iNEt&CleC(Gb3>@`beu3)k8UxWm2J$ zwIlk@=y9uqk6ZeyCg{qFqETqGreF2N+jE|V_d>PwT{q?JWdGzsds`FkIvbBeTUWd z8Psna0j?=dKg`?coF$#@X<3+5f}EHqIrC^kp89GyINbcD&y+R&dQ1qnve`aK?u#9P z&Q;ucy1sRUlrb8tw8w1<^+L8HC?d`7@7t7c`ak!&m1pK{B;@aT?!7-8au0cLP(>(}&Jd9|ZKf$z(I30%T`4{bp=@zY?O ztQy`*XroN2GUl7P09ac4=){Yuq^21^d zO9q6xOod1v^1b`JG8921BB={3O)=(-_awCM93;|rM`$>l-5<+TpI z$1j@Z_Q-6TIPr0mPCULfCLUv%=4ZUqw{c@HPZ`M>HSvRpyWZlvI z15DZ1SFbpL`1oHm+CCWb00&QY2jlqROCz@_{pD>d^{}T}UO7wD;q^Oja}CoWz-mPh zEI33ao)k(ng-3Nf0ZxC;#fckS79o#dm^f#;b38-vaGxY*Jre;Afz%Am7p&q!Ye%!=bZhrCCU26Mi9z~>nhTn0>uh(K$?Lm8i++RU3CnRDz8@om6 zi9!<4x8LaHn>#v2R!PZ%Exkm=V)AR^H%TuP}I=hc-1#YW3 zQ+j+wENqElzxh(X%@1wE1^-DQ4*{YFnC-5fzCAhP1G&D}B#8P!0ck&g-5=;5g)xG| z1S{;ze#>KTjw^U2_4U0Bkhb36Wp`0s&&29qgbEZle232-2iltTgWy(rdsWRavx!@3 z_dy~FD~tjXKkV23h_UtJAt)R$_F(U@W*NfWmNRFte4DQef(a_D+ZGuBt{L!tm4Z?* zpuJi}Of#OiSc0)nF#Ut=i#uAP>wW}DW(-hsKK95JCf{-Xn6Rj)my6XYjBpyXUoWe& zhjMsy#^!afB@`sn^0{}9vA?NDwT9lbo}KnPa(y|w2-y#t zsIlm3w@sNG(gr}CQ=Xgn_pcGz+-dL6L#@MzI=ceeY?m9UGTckO351m>7f?{bdK~Ll<6;a>2wdQ^p zFh+Wt8^qbu2Y^yVjFVwen6i>Gvffe!z-AHwWYl2OEl(bI-#)E1Piiyljj$eRH0$NJ3&kfQc2c#P>3hhvde;Xa%1(oky<;>p zvqwx!yn5!=wJPmF&E>MM>kjsfpUc}{P-F2NLB}r0;pd9Tw~x79BLM$r5d1=b2tQ~> z(W;|tJNg%wcm!v^_m%fUl*?+tA|nmF!J| zi8WvWm<UCTA~5iAy56zu?khRTCHN_WF*rqO zShzpJD7?mO<0*r84i567Jvk>6g3qVG=dDP1UD7llcMefMn4n4s%)*>Y1kQ23nVrA2 zM5$ZcpLJP}Km&wqn5o!Uxk&xIw&O&6#RmYElG(6IQh4eTzPNnwtM~H|rC^I8SVxt< z3XUfS7qKJg`;PQq8=vTMeR~)Y{M>^r&QbL_1J6oZ z!56n|y8H?wM^dB-h=wV`v%V-{2{c-K)#7`d%z=+<;8IOJW}uW4hB|T)qnI>2fHsc3 zG{OD^y>ydv7|{{RcD=CO{wXGtkIkPZp{qRLo;1A~mimgitvX|4VN*y?#rl|*Q!80x zO(KQ7Zk%Q_1l)MCcC2_l+W9RZ?}TKgI5P962(HaWy$;El27^NpA=H(@Tc1<3a~^)H ztYGa<)f?=Xf(FnLG8(GhU2uZtz~Y$Su+nD)=@qxY0Vr7IX;ry3aaHd3<3X(IvKP3S;e^Q~13;VyulKME#w4 zYavdAk`Rr>BTs|KOm9wDu|4y3iD=x@ucX33sv?B;8V_ud%6ZGObs&1_MQ;*x(D|hg z_iG=E+O0kd+GFE5f5!<6!-pJ%v8ubtRbgp#VHJn(jx(t6C6oyKDIh}ofhC9Jhh>bH ztPcUQPD=Zo+NP?9tlLQBYm!i2?2iz>t3*8w>0gHf&`r1yFv1xdP5q#0vwab6wt$#s zVO#9Hu35%U=jDEdiBG6Sa~TUfuszd*zKmWgD&Km)27)WByqnT63YAPqe;mMsTG%yt z8_8zTfLK{h8H*j2RM_RPWwU#tP%)M}E2}L4l1Pj1e-TJ2Zn-Tp9a}C*3SR?fi|$kD zp`mDJ5L^$_{P@rb`ibU|5`+&9kAfNqB|s#x7+5!nD6%CL8M`_A7AkgBh=o7kdJ&%aHtZE)q=gOkU=vSS&Rgk-uW@T&4T|lhIB1Ku2El_< z*Btk)1sEP|{7&I7W zwB{0U`_)|6e+tw4*7DUOwkSOR?r{o=?1&*$NQ7U`%9+*dgLfj%Ta87X>X5EhA|XD( z*dq8m;t6=5D_~HizLRSet(K$kuKHdTlf?p+Nk~oBAv#CrGGrV9gn5|kg@^k9`!A}=FWxE|p6XYq+SGmq-@-m0gq}>h zgO4kJ(x|w6=2~3O%l3_pXN$1aKT;}M-71S!{tEi$fapy0fY8=$>nQH*Zo?k{FmG|w z(yU0jD}^vW$6N59TFD8F@*1Vp&ra$h?Sk46q(p|Em{x_@^#!ThyWzh~;?h#8+}LBr zQtE)go}CPpVpm7NE5wV+L&%9&jW zogMwnmzjJ!mT3t?;$*}D z^wAu+xFY(GmjHwrmF(GNlCl}_5E&w!Q|XXeia3f>phO;@ozUD)o$W$!i12O6_vU0*h# zt$Frp5N-d?P}#+@y*gu;cJZxOyZB3k3Gyor<{;s(X;p))hD@u2x!KplAA5P=(S%w0 zd5(`GjvbVRU9Q@EmJrBoEbrlZ`yHBLJMA~X)g3X|Mq%d*;MQF^&*5dq#%fl1z3exBj|WVdW7G-#g+w-5%=q%U#usdLGZriiLmn z0xLrZwcw2(L|E>YPfH+S;|B}xPLDx`Lu9NlqMX~t5{C?|?$BC# zSp(UJ%yX?;_W5$>{;aTWIy?&(M4?KlVrcC=7s=0tZ*1r2)OPV!A zS`Ksiq11~62m>&?^rG6L6ei3n*3xlvG=|-EnvMxqQf_2%&l}`7Int+u~S8Ery2PZKj~M$ z0=+FZx5t?1rNzXgdLp%YTwd(r=7n6^^9vwo_vDV&&^(Usn6XJ`Fe|y;LOMNnT z=HBSSaaM$YarwQb7RPriprX-jZ@ga%8!BNc6!_FL7AgSkJ&JD3(X8{&z_$@|mTV4U zhyJFE^SbYFl|J`-8QYWz6yAQ>_H60;Ed%X*uXWvWSY6VyEiGAm#@rl!a912Bu7xX2 z`##6H`f_FNQj1r#_QL9g8>1IEky5a^`C^uM4Hizj-++5}y~!P!Ud&pmon9-<_mgTZ znhL}WN~+ND=XYc0^Vt#4QTJ5fm|DqYx=yT4ZL{8dVsBcyg;~Xz!ip3q$>y8D{_)lK zv*+U=C)5z_R~FJk_`bM^aix&x!E31o_Ks6-rWv`+8?T&>hfk%lkd;cco3|pY+v3F)CgL=VpN@j1VK7VmIPJ<|i2TK{*vZ4|8Gp}oA!62xY^k!1(SqOUSp!sFrP1}nP zFZt2xZj4pIe9ykLycN&lyrWkBrqJ5)!un*|^XaiWt>O8x%T(aXb0~O_k_k1um5oEg zM>lyhoPI=W-NIU?c!& zzSDeysqlDo9JNfJ)u}6euM%zFteIdehab3~FF$f7_bH^%s#R^1j~JXjE4bu~#fLRxNsA;V+GS^@Y11UcK6O-h z^BsBtt+W+Hd0{G|;99|9G+80Uq?>>VhF#EqVD=5GggY0Y&9>kN2Vb;RLlUU!G|$uw-!T}7xh*FvZ67vT z<+hi0XbT!XC=a5q7@3|4W?qNhIVIlv@yhOj(v6te%&h=^yR+e=gIYUTTK@|^^7Jg8 z_BTrFqtX?TUyeoj_Ms?65TTe}ciM~KPK?Hli#1%?XT$aM5sDowme%gq;maIa?>XZ& z5)^hb&{P|C9=auQzNe1KVz+dy=1#&%*e zewjDy`A#a1F4--jOM4J7k`_wCoogNJ%EfM>QQ8^48}nK?b5374YeO^Q13!=EP}4p) zeB3!}f?W#+Mft+9H~B_SP>xL8RxiCv>IX&q=EqBWFcIS?_vKqZ#cD-c@*USbB*A5o01&;y=jQ*sZ)i0k=;N2hY&-UM z>z{6WHK~@+1q6twF^!7jDp{N!vrPYbf5#s1bAWv8pY2@h}Du!}~Q;gpqk6{am>aoMmesJ))w(Ix+6~{rbR5LbB}YA4HGfTy_%6)2PeKyDpyp8%A zjt57vK(njn2ht}$s`B5&V}H)5{r0A$Fp9I(;tf^NkF7&sC}r=QlZoHt%dY0lkDHMxZfZk!IVV@0#p1pbhlI@ z2uwae2JjDqQiZby_a;2JG^V^64DzForQbur!f&lYD4+o4Zed%nGMz4qPg1H*p5})72jdl3Ug1h;{cO*$1~cx9fj4r4)0G_NhlLX z5_>1Y(IxC-a&WC!!m1n@r(#`6Gviy3cLnW|?S&SPev;WU(XYl@!4H0>^E%QQIz~+; z0Yn=c8wY)DFrAG`XOKC@@t+I@(DfmATyJi&*XF>yxsmUbXXKqu51FRm7@#H{iUm4P z2DEM0A)-WZFjpYUYaDsdkDM~Lt-rgb!C(hqJ+&4j{lI*?o6&;P8#mD$`gHa|{wKYF zikxih*n7dTft$&ZhafonUoW~>|Lb${^j;3I=|Qc za{E1-KPi8?{fW-+wZGhc&*o3cUv7V*^Lyky?Ju|Av-y+q{~EV{vGxDpx#r(? O{)NDQ@8 +
+ + + Local settings + +
+
+ + + + + + + + {{ (!config.hideCallerId) ? this.remoteParty : '' }} + + + + + + + + + + + +
+ + + + +