19 Commits

Author SHA1 Message Date
Holger Friedrich
d8114b07a2 [networkupstools] correct i18n translations containing spaces in keys (#11828)
[bmwconnecteddrive] correct i18n translations containing spaces in keys

[omnilink] correct i18n translations containing spaces in keys

[roku] correct i18n translations containing spaces in keys

[somfytahoma] correct i18n translations containing spaces in keys

[wlanthermo] correct i18n translations containing spaces in keys

[yamahareceiver] correct i18n translations containing spaces in keys

This is a workaround for openhab/openhab-core#2636.

Signed-off-by: Holger Friedrich <mail@holger-friedrich.de>
2021-12-22 00:25:54 +01:00
Dan Cunningham
ec10dfe897 [jsscripting] Update docs and refactor path (#11827)
This adds a minor refactoring of loading local resource paths that i didn't have time to get into 3.2  and moves the docs directory to doc.

Signed-off-by: Dan Cunningham <dan@digitaldan.com>
2021-12-21 23:36:22 +01:00
Christoph Weitkamp
6420533d68 [tradfri] Fix UTF-8 characters in i18n properties file (#11840)
* [tradfri] Fix UTF-8 characters in i18n properties file

- Fix UTF-8 characters in i18n properties file

* Added colons to descriptions in config- description

Signed-off-by: Christoph Weitkamp <github@christophweitkamp.de>
2021-12-21 23:07:39 +01:00
Hilbrand Bouwkamp
d8175b010a [tplinksmarthome] KP405 channel in xml should be dimmer not switch (#11839)
Signed-off-by: Hilbrand Bouwkamp <hilbrand@h72.nl>
2021-12-21 22:39:16 +01:00
Michael Aschenborn
8ea76db693 Update README.md (#11836)
missing )
2021-12-21 18:39:32 +01:00
Stefan Triller
df7552c92b [ventaair] Add Air quality and service time channels (#11792)
* [ventaair] Add Air quality and service time channels

- also add value 4 for water level

Signed-off-by: Stefan Triller <github@stefantriller.de>
2021-12-21 08:26:32 +01:00
jlaur
817de38683 [hdpowerview] Update positions after triggering scene/scene group (#11768)
* Update positions after triggering scene/scene group.
* Compare enum values directly with ==
* Fix re-entrant calls.

Fixes #11697

Signed-off-by: Jacob Laursen <jacob-github@vindvejr.dk>
2021-12-20 20:32:48 +01:00
Marcel
b2dd13efbb [onkyo] Add channels for media info (#11813)
* [onkyo] Add channels for media info

Signed-off-by: Marcel Verpaalen <marcel@verpaalen.com>
2021-12-20 20:08:09 +01:00
GiviMAD
208885deb6 [androiddebugbridge] Add channels for record events, open urls and doc improvements (#11692)
* Add channels for record events, open urls and doc improvements

Signed-off-by: Miguel Álvarez Díez <miguelwork92@gmail.com>
2021-12-20 19:21:11 +01:00
Matthew Skinner
dd951cee02 Fix Global OFF not turning lights/segments off. (#11806)
Signed-off-by: Matthew Skinner <matt@pcmus.com>
2021-12-20 18:59:06 +01:00
Hilbrand Bouwkamp
3a913a6e6b [tplinksmarthome] Added new devices ES20, KP125, KP405 and KS230 (#11771)
Signed-off-by: Hilbrand Bouwkamp <hilbrand@h72.nl>
2021-12-20 18:58:27 +01:00
Wouter Born
eca8fbccc7 [jrubyscripting] Update version to 9.3.2 in README.md (#11823)
Related to #11775

Signed-off-by: Wouter Born <github@maindrain.net>
2021-12-20 14:51:51 +01:00
jimtng
be89829a50 [jrubyscripting] Upgrade jruby to 9.3.2.0 (#11775)
Signed-off-by: Jimmy Tanagra <jcode@tanagra.id.au>
2021-12-20 11:33:50 +01:00
Christoph Weitkamp
37088d4e8a [map] Rename transform.properties to map.properties (#11817)
Signed-off-by: Christoph Weitkamp <github@christophweitkamp.de>
2021-12-20 11:32:51 +01:00
Jerome Luckenbach
b9733eca58 [touchwand] Secure url's for the readme (#11821)
Signed-off-by: Jerome Luckenbach <github@luckenba.ch>
2021-12-20 11:20:14 +01:00
Kai Kreuzer
48746f5e3f Apply spotless
Signed-off-by: Kai Kreuzer <kai@openhab.org>
2021-12-20 09:07:55 +01:00
Christoph Weitkamp
b77a85fcc5 Update OH version in skeleton scripts (#11820)
Signed-off-by: Christoph Weitkamp <github@christophweitkamp.de>
2021-12-20 08:29:43 +01:00
Christoph Weitkamp
0f2d9367e4 Resolve itest runbundles for snapshot 3.3.0 (#11819)
Signed-off-by: Christoph Weitkamp <github@christophweitkamp.de>
2021-12-20 08:10:52 +01:00
openhab-bot
6dc031e6cf [unleash-maven-plugin] Preparation for next development cycle. 2021-12-20 00:30:46 +00:00
491 changed files with 1238 additions and 688 deletions

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bom</groupId>
<artifactId>org.openhab.addons.reactor.bom</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.addons.bom.openhab-addons</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bom</groupId>
<artifactId>org.openhab.addons.reactor.bom</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.addons.bom.openhab-core-index</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons</groupId>
<artifactId>org.openhab.addons.reactor</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<groupId>org.openhab.addons.bom</groupId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bom</groupId>
<artifactId>org.openhab.addons.reactor.bom</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.addons.bom.runtime-index</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bom</groupId>
<artifactId>org.openhab.addons.reactor.bom</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.addons.bom.test-index</artifactId>

View File

@@ -10,7 +10,7 @@ IF %ARGC% NEQ 3 (
exit /B 1
)
SET OpenhabVersion="3.2.0-SNAPSHOT"
SET OpenhabVersion="3.3.0-SNAPSHOT"
SET BindingIdInCamelCase=%~1
SET BindingIdInLowerCase=%BindingIdInCamelCase%

View File

@@ -2,7 +2,7 @@
[ $# -lt 3 ] && { echo "Usage: $0 <BindingIdInCamelCase> <Author> <GitHub Username>"; exit 1; }
openHABVersion=3.2.0-SNAPSHOT
openHABVersion=3.3.0-SNAPSHOT
camelcaseId=$1
id=`echo $camelcaseId | tr '[:upper:]' '[:lower:]'`

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.automation.groovyscripting</artifactId>

View File

@@ -1,6 +1,6 @@
# JRuby Scripting
This add-on provides [JRuby](https://www.jruby.org/) 9.3.1 that can be used as a scripting language within automation rules.
This add-on provides [JRuby](https://www.jruby.org/) 9.3.2 that can be used as a scripting language within automation rules.
## JRuby Scripting Configuration

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.automation.jrubyscripting</artifactId>
@@ -15,8 +15,8 @@
<name>openHAB Add-ons :: Bundles :: Automation :: JRuby Scripting</name>
<properties>
<bnd.importpackage>com.sun.nio.*;resolution:=optional,com.sun.security.*;resolution:=optional,org.apache.tools.ant.*;resolution:=optional,org.bouncycastle.*;resolution:=optional,org.joda.*;resolution:=optional,sun.management.*;resolution:=optional,sun.nio.*;resolution:=optional</bnd.importpackage>
<jruby.version>9.3.1.0</jruby.version>
<bnd.importpackage>com.sun.nio.*;resolution:=optional,com.sun.security.*;resolution:=optional,org.apache.tools.ant.*;resolution:=optional,org.bouncycastle.*;resolution:=optional,org.joda.*;resolution:=optional,sun.management.*;resolution:=optional,sun.nio.*;resolution:=optional,jakarta.annotation;resolution:=optional</bnd.importpackage>
<jruby.version>9.3.2.0</jruby.version>
</properties>
<dependencies>

View File

@@ -30,7 +30,7 @@ to common openHAB functionality within rules including items, things, actions, l
This add-on includes by default the [openhab-js](https://github.com/openhab/openhab-js/) NPM library and exports it's namespaces onto the global namespace. This allows the use of `items`, `actions`, `cache` and other objects without the need to explicitly import using `require()`. This functionality can be disabled for users who prefer to manage their own imports via the add-on configuration options.
![OpenHAB Rule Configuration](./docs/settings.png)
![openHAB Rule Configuration](./doc/settings.png)
## UI Based Rules
@@ -42,17 +42,17 @@ Advanced users, or users migrating scripts from existing systems may want to use
Using the openHAB UI, first create a new rule and set a trigger condition
![OpenHAB Rule Configuration](./docs/rule-config.png)
![openHAB Rule Configuration](./doc/rule-config.png)
### Adding Actions
Select "Add Action" and then select "ECMAScript 262 Edition 11". Its important this is "Edition 11" or higher, earlier versions will not work. This will bring up a empty script editor where you can enter your javascript.
![OpenHAB Rule Engines](./docs/rule-engines.png)
![openHAB Rule Engines](./doc/rule-engines.png)
You can now write rules using standard ES6 Javascript along with the included openHAB [standard library](#standard-library).
![OpenHAB Rule Script](./docs/rule-script.png)
![openHAB Rule Script](./doc/rule-script.png)
For example, turning a light on:
```javascript
@@ -579,7 +579,7 @@ Additionally all the above triggers have the following functions:
//Basic rule, when the BedroomLight1 is changed, run a custom function
rules.when().item('BedroomLight1').changed().then(e => {
console.log("BedroomLight1 state", e.newState)
}.build();
}).build();
//turn on the kitchen light at SUNSET
rules.when().timeOfDay("SUNSET").then().sendOn().toItem("KitchenLight").build("Sunset Rule","turn on the kitchen light

View File

Before

Width:  |  Height:  |  Size: 154 KiB

After

Width:  |  Height:  |  Size: 154 KiB

View File

Before

Width:  |  Height:  |  Size: 178 KiB

After

Width:  |  Height:  |  Size: 178 KiB

View File

Before

Width:  |  Height:  |  Size: 115 KiB

After

Width:  |  Height:  |  Size: 115 KiB

View File

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 122 KiB

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.automation.jsscripting</artifactId>

View File

@@ -223,11 +223,12 @@ public class OpenhabGraalJSScriptEngine extends InvocationInterceptingScriptEngi
/**
* Converts a root node path to a class resource path for loading local modules
* Ex: C:\node_modules\foo.js -> /node_modules/foo.js
*
* @param path
* @return
*/
private String nodeFileToResource(Path path) {
return "/" + NODE_DIR + "/" + path.getFileName();
return "/" + path.subpath(0, path.getNameCount()).toString().replace('\\', '/');
}
}

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.automation.jythonscripting</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.automation.pidcontroller</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.automation.pwm</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.adorne</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.ahawastecollection</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.airq</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.airquality</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.airvisualnode</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.alarmdecoder</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.allplay</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.amazondashbutton</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.amazonechocontrol</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.ambientweather</artifactId>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.amplipi</artifactId>

View File

@@ -1,7 +1,9 @@
# Android Debug Bridge Binding
This binding allows to connect to android devices through the adb protocol.
The device needs to have **usb debugging enabled** and **allow debugging over tcp**, some devices allow to enable this in the device options but others need a previous connection through adb or even be rooted.
If you are not familiar with adb I suggest you to search "How to enable adb over wifi on \<device name\>" or something like that.
## Supported Things
@@ -10,7 +12,11 @@ This binding was tested on the Fire TV Stick (android version 7.1.2, volume cont
## Discovery
As I can not find a way to identify android devices in the network the discovery will try to connect through adb to all the reachable ip in the defined range, you could customize the discovery process through the binding options. **Your device will prop a message requesting you to authorize the connection, you should check the option "Always allow connections from this device" (or something similar) and accept**.
As I can not find a way to identify android devices in the network the discovery will try to connect through adb to all the reachable ip in the defined range.
You could customize the discovery process through the binding options.
**Your device will prompt a message requesting you to authorize the connection, you should check the option "Always allow connections from this device" (or something similar) and accept**.
## Binding Configuration
@@ -33,6 +39,7 @@ As I can not find a way to identify android devices in the network the discovery
| port | int | Device port listening to adb connections (default: 5555) |
| refreshTime | int | Seconds between device status refreshes (default: 30) |
| timeout | int | Command timeout in seconds (default: 5) |
| recordDuration | int | Record input duration in seconds |
| mediaStateJSONConfig | String | Expects a JSON array. Allow to configure the media state detection method per app. Described in the following section |
## Media State Detection
@@ -52,6 +59,18 @@ This is a sample of the mediaStateJSONConfig thing configuration:
`[{"name": "com.amazon.tv.launcher", "mode": "idle"},{"name": "org.jellyfin.androidtv", "mode": "wake_lock", "wakeLockPlayStates": [2,3]},{"name": "com.amazon.firetv.youtube", "mode": "wake_lock", "wakeLockPlayStates": [2]}]`
## Record/Send input events
As the execution of key events takes a while, you can use input events as an alternative way to control your device.
They are pretty device specific, so you should use the record-input and recorded-input channels to store/send those events.
An example of what you can do:
* You can send the command `UP` to the `record-input` channel the binding will then capture the events you send through your remote for the defined recordDuration config for the thing, so press once the UP key on your remote and wait a while.
* Now that you have recorded your input, you can send the `UP` command to the `recorded-input` event and it will send the recorded event to the android device.
Please note that events could fail if the input method is removed, for example it could fail if you clone the events of a bluetooth controller and the remote goes offline. This is happening for me when recording the Fire TV remote events but not for my Xiaomi TV which also has a bt remote controller.
## Channels
| channel | type | description |
@@ -59,12 +78,17 @@ This is a sample of the mediaStateJSONConfig thing configuration:
| key-event | String | Send key event to android device. Possible values listed below |
| text | String | Send text to android device |
| tap | String | Send tap event to android device (format x,y) |
| url | String | Open url in browser |
| media-volume | Dimmer | Set or get media volume level on android device |
| media-control | Player | Control media on android device |
| start-package | String | Run application by package name |
| stop-package | String | Stop application by package name |
| stop-current-package | String | Stop current application |
| current-package | String | Package name of the top application in screen |
| record-input | String | Capture events, generate the equivalent command and store it under the provided name |
| recorded-input | String | Emulates previously captured input events by name |
| shutdown | String | Power off/reboot device (allowed values POWER_OFF, REBOOT) |
| awake-state | OnOff | Awake state value. |
| wake-lock | Number | Power wake lock value |
| screen-state | Switch | Screen power state |

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.androiddebugbridge</artifactId>

View File

@@ -37,6 +37,7 @@ public class AndroidDebugBridgeBindingConstants {
public static final String KEY_EVENT_CHANNEL = "key-event";
public static final String TEXT_CHANNEL = "text";
public static final String TAP_CHANNEL = "tap";
public static final String URL_CHANNEL = "url";
public static final String MEDIA_VOLUME_CHANNEL = "media-volume";
public static final String MEDIA_CONTROL_CHANNEL = "media-control";
public static final String START_PACKAGE_CHANNEL = "start-package";
@@ -47,7 +48,8 @@ public class AndroidDebugBridgeBindingConstants {
public static final String WAKE_LOCK_CHANNEL = "wake-lock";
public static final String SCREEN_STATE_CHANNEL = "screen-state";
public static final String SHUTDOWN_CHANNEL = "shutdown";
public static final String RECORD_INPUT_CHANNEL = "record-input";
public static final String RECORDED_INPUT_CHANNEL = "recorded-input";
// List of all Parameters
public static final String PARAMETER_IP = "ip";
public static final String PARAMETER_PORT = "port";

View File

@@ -38,6 +38,10 @@ public class AndroidDebugBridgeConfiguration {
* Command timeout seconds.
*/
public int timeout = 5;
/**
* Record input duration in seconds.
*/
public int recordDuration = 5;
/**
* Configure media state detection behavior by package
*/

View File

@@ -22,6 +22,7 @@ import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Base64;
import java.util.concurrent.*;
@@ -55,6 +56,10 @@ public class AndroidDebugBridgeDevice {
private static final Pattern TAP_EVENT_PATTERN = Pattern.compile("(?<x>\\d+),(?<y>\\d+)");
private static final Pattern PACKAGE_NAME_PATTERN = Pattern
.compile("^([A-Za-z]{1}[A-Za-z\\d_]*\\.)+[A-Za-z][A-Za-z\\d_]*$");
private static final Pattern URL_PATTERN = Pattern.compile(
"https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.[a-z]{2,4}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)$");
private static final Pattern INPUT_EVENT_PATTERN = Pattern
.compile("/(?<input>\\S+): (?<n1>\\S+) (?<n2>\\S+) (?<n3>\\S+)$", Pattern.MULTILINE);
private static @Nullable AdbCrypto adbCrypto;
@@ -78,6 +83,7 @@ public class AndroidDebugBridgeDevice {
private String ip = "127.0.0.1";
private int port = 5555;
private int timeoutSec = 5;
private int recordDuration;
private @Nullable Socket socket;
private @Nullable AdbConnection connection;
private @Nullable Future<String> commandFuture;
@@ -86,10 +92,11 @@ public class AndroidDebugBridgeDevice {
this.scheduler = scheduler;
}
public void configure(String ip, int port, int timeout) {
public void configure(String ip, int port, int timeout, int recordDuration) {
this.ip = ip;
this.port = port;
this.timeoutSec = timeout;
this.recordDuration = recordDuration;
}
public void sendKeyEvent(String eventCode)
@@ -111,18 +118,68 @@ public class AndroidDebugBridgeDevice {
runAdbShell("input", "mouse", "tap", match.group("x"), match.group("y"));
}
public void openUrl(String url)
throws InterruptedException, AndroidDebugBridgeDeviceException, TimeoutException, ExecutionException {
var match = URL_PATTERN.matcher(url);
if (!match.matches()) {
throw new AndroidDebugBridgeDeviceException("Unable to parse url");
}
runAdbShell("am", "start", "-a", url);
}
public void startPackage(String packageName)
throws InterruptedException, AndroidDebugBridgeDeviceException, TimeoutException, ExecutionException {
if (packageName.contains("/")) {
startPackageWithActivity(packageName);
return;
}
if (!PACKAGE_NAME_PATTERN.matcher(packageName).matches()) {
logger.warn("{} is not a valid package name", packageName);
return;
}
var out = runAdbShell("monkey", "--pct-syskeys", "0", "-p", packageName, "-v", "1");
if (out.contains("monkey aborted")) {
startTVPackage(packageName);
}
}
private void startTVPackage(String packageName)
throws InterruptedException, AndroidDebugBridgeDeviceException, TimeoutException, ExecutionException {
// https://developer.android.com/training/tv/start/start
String result = runAdbShell("monkey", "--pct-syskeys", "0", "-c", "android.intent.category.LEANBACK_LAUNCHER",
"-p", packageName, "1");
if (result.contains("monkey aborted")) {
throw new AndroidDebugBridgeDeviceException("Unable to open package");
}
}
public void startPackageWithActivity(String packageWithActivity)
throws InterruptedException, AndroidDebugBridgeDeviceException, TimeoutException, ExecutionException {
var parts = packageWithActivity.split("/");
if (parts.length != 2) {
logger.warn("{} is not a valid package", packageWithActivity);
return;
}
var packageName = parts[0];
var activityName = parts[1];
if (!PACKAGE_NAME_PATTERN.matcher(packageName).matches()) {
logger.warn("{} is not a valid package name", packageName);
return;
}
if (!PACKAGE_NAME_PATTERN.matcher(activityName).matches()) {
logger.warn("{} is not a valid activity name", activityName);
return;
}
var out = runAdbShell("am", "start", "-n", packageWithActivity);
if (out.contains("usage: am")) {
out = runAdbShell("am", "start", packageWithActivity);
}
if (out.contains("usage: am") || out.contains("Exception")) {
logger.warn("open {} fail; retrying to open without activity info", packageWithActivity);
startPackage(packageName);
}
}
public void stopPackage(String packageName)
throws AndroidDebugBridgeDeviceException, InterruptedException, TimeoutException, ExecutionException {
if (!PACKAGE_NAME_PATTERN.matcher(packageName).matches()) {
@@ -160,7 +217,7 @@ public class AndroidDebugBridgeDevice {
var state = devicesResp.split("=")[1].trim();
return state.equals("ON");
} catch (NumberFormatException e) {
logger.debug("Unable to parse device wake lock: {}", e.getMessage());
logger.debug("Unable to parse device screen state: {}", e.getMessage());
}
}
throw new AndroidDebugBridgeDeviceReadException("Unable to read screen state");
@@ -258,6 +315,36 @@ public class AndroidDebugBridgeDevice {
return volumeInfo;
}
public String recordInputEvents()
throws AndroidDebugBridgeDeviceException, InterruptedException, TimeoutException, ExecutionException {
String out = runAdbShell(recordDuration * 2, "getevent", "&", "sleep", Integer.toString(recordDuration), "&&",
"exit");
var matcher = INPUT_EVENT_PATTERN.matcher(out);
var commandList = new ArrayList<String>();
try {
while (matcher.find()) {
String inputPath = matcher.group("input");
int n1 = Integer.parseInt(matcher.group("n1"), 16);
int n2 = Integer.parseInt(matcher.group("n2"), 16);
int n3 = Integer.parseInt(matcher.group("n3"), 16);
commandList.add(String.format("sendevent /%s %d %d %d", inputPath, n1, n2, n3));
}
} catch (NumberFormatException e) {
logger.warn("NumberFormatException while parsing events, aborting");
return "";
}
return String.join(" && ", commandList);
}
public void sendInputEvents(String command)
throws AndroidDebugBridgeDeviceException, InterruptedException, TimeoutException, ExecutionException {
String out = runAdbShell(command.split(" "));
if (out.length() != 0) {
logger.warn("Device event unexpected output: {}", out);
throw new AndroidDebugBridgeDeviceException("Device event execution fail");
}
}
public void rebootDevice()
throws AndroidDebugBridgeDeviceException, InterruptedException, TimeoutException, ExecutionException {
try {
@@ -313,6 +400,11 @@ public class AndroidDebugBridgeDevice {
private String runAdbShell(String... args)
throws InterruptedException, AndroidDebugBridgeDeviceException, TimeoutException, ExecutionException {
return runAdbShell(timeoutSec, args);
}
private String runAdbShell(int commandTimeout, String... args)
throws InterruptedException, AndroidDebugBridgeDeviceException, TimeoutException, ExecutionException {
var adb = connection;
if (adb == null) {
throw new AndroidDebugBridgeDeviceException("Device not connected");
@@ -337,7 +429,7 @@ public class AndroidDebugBridgeDevice {
return byteArrayOutputStream.toString(StandardCharsets.US_ASCII);
});
this.commandFuture = commandFuture;
return commandFuture.get(timeoutSec, TimeUnit.SECONDS);
return commandFuture.get(commandTimeout, TimeUnit.SECONDS);
} finally {
var commandFuture = this.commandFuture;
if (commandFuture != null) {

View File

@@ -129,7 +129,7 @@ public class AndroidDebugBridgeDiscoveryService extends AbstractDiscoveryService
private void discoverWithADB(String ip, int port) throws InterruptedException, AndroidDebugBridgeDeviceException,
AndroidDebugBridgeDeviceReadException, TimeoutException, ExecutionException {
var device = new AndroidDebugBridgeDevice(scheduler);
device.configure(ip, port, 10);
device.configure(ip, port, 10, 0);
try {
device.connect();
logger.debug("connected adb at {}:{}", ip, port);

View File

@@ -20,6 +20,7 @@ import java.util.concurrent.ExecutionException;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.regex.Pattern;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
@@ -61,6 +62,7 @@ public class AndroidDebugBridgeHandler extends BaseThingHandler {
private static final String SHUTDOWN_POWER_OFF = "POWER_OFF";
private static final String SHUTDOWN_REBOOT = "REBOOT";
private static final Gson GSON = new Gson();
private static final Pattern RECORD_NAME_PATTERN = Pattern.compile("^[A-Za-z0-9_]*$");
private final Logger logger = LoggerFactory.getLogger(AndroidDebugBridgeHandler.class);
private final AndroidDebugBridgeDevice adbConnection;
private int maxMediaVolume = 0;
@@ -116,6 +118,9 @@ public class AndroidDebugBridgeHandler extends BaseThingHandler {
case TAP_CHANNEL:
adbConnection.sendTap(command.toFullString());
break;
case URL_CHANNEL:
adbConnection.openUrl(command.toFullString());
break;
case MEDIA_VOLUME_CHANNEL:
handleMediaVolume(channelUID, command);
break;
@@ -170,9 +175,51 @@ public class AndroidDebugBridgeHandler extends BaseThingHandler {
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.GONE, "Rebooting");
break;
}
break;
case RECORD_INPUT_CHANNEL:
recordDeviceInput(command);
break;
case RECORDED_INPUT_CHANNEL:
String recordName = getRecordPropertyName(command);
var inputCommand = this.getThing().getProperties().get(recordName);
if (inputCommand != null) {
adbConnection.sendInputEvents(inputCommand);
}
break;
}
}
private void recordDeviceInput(Command recordNameCommand)
throws AndroidDebugBridgeDeviceException, InterruptedException, TimeoutException, ExecutionException {
var recordName = recordNameCommand.toFullString();
if (!RECORD_NAME_PATTERN.matcher(recordName).matches()) {
logger.warn("Invalid record name, accepts alphanumeric values with '_'.");
return;
}
String recordPropertyName = getRecordPropertyName(recordName);
logger.debug("RECORD: {}", recordPropertyName);
var eventCommand = adbConnection.recordInputEvents();
if (eventCommand.isEmpty()) {
logger.debug("No events recorded");
if (this.getThing().getProperties().containsKey(recordPropertyName)) {
this.getThing().setProperty(recordPropertyName, null);
updateProperties(editProperties());
logger.debug("Record {} deleted", recordName);
}
} else {
updateProperty(recordPropertyName, eventCommand);
logger.debug("New record {}: {}", recordName, eventCommand);
}
}
private String getRecordPropertyName(String recordName) {
return String.format("input-record:%s", recordName);
}
private String getRecordPropertyName(Command recordNameCommand) {
return getRecordPropertyName(recordNameCommand.toFullString());
}
private void handleMediaVolume(ChannelUID channelUID, Command command)
throws InterruptedException, AndroidDebugBridgeDeviceReadException, AndroidDebugBridgeDeviceException,
TimeoutException, ExecutionException {
@@ -264,7 +311,8 @@ public class AndroidDebugBridgeHandler extends BaseThingHandler {
if (mediaStateJSONConfig != null && !mediaStateJSONConfig.isEmpty()) {
loadMediaStateConfig(mediaStateJSONConfig);
}
adbConnection.configure(currentConfig.ip, currentConfig.port, currentConfig.timeout);
adbConnection.configure(currentConfig.ip, currentConfig.port, currentConfig.timeout,
currentConfig.recordDuration);
updateStatus(ThingStatus.UNKNOWN);
connectionCheckerSchedule = scheduler.scheduleWithFixedDelay(this::checkConnection, 0,
currentConfig.refreshTime, TimeUnit.SECONDS);
@@ -331,7 +379,8 @@ public class AndroidDebugBridgeHandler extends BaseThingHandler {
awakeState = adbConnection.isAwake();
deviceAwake = awakeState;
} catch (TimeoutException e) {
logger.warn("Unable to refresh awake state: Timeout");
// happen a lot when device is sleeping; abort refresh other channels
logger.debug("Unable to refresh awake state: Timeout; aborting channels refresh");
return;
}
var awakeStateChannelUID = new ChannelUID(this.thing.getUID(), AWAKE_STATE_CHANNEL);
@@ -339,6 +388,7 @@ public class AndroidDebugBridgeHandler extends BaseThingHandler {
updateState(awakeStateChannelUID, OnOffType.from(awakeState));
}
if (!awakeState && !prevDeviceAwake) {
// abort refresh channels while device is sleeping, throws many timeouts
logger.debug("device {} is sleeping", config.ip);
return;
}

View File

@@ -11,6 +11,9 @@
<channel id="key-event" typeId="key-event-channel"/>
<channel id="text" typeId="text-channel"/>
<channel id="tap" typeId="tap-channel"/>
<channel id="url" typeId="url-channel"/>
<channel id="record-input" typeId="record-input-channel"/>
<channel id="recorded-input" typeId="recorded-input-channel"/>
<channel id="media-volume" typeId="system.volume"/>
<channel id="media-control" typeId="system.media-control"/>
<channel id="start-package" typeId="start-package-channel"/>
@@ -44,6 +47,11 @@
<description>Command timeout seconds.</description>
<default>5</default>
</parameter>
<parameter name="recordDuration" type="integer" required="true" min="3" max="20">
<label>Record Duration</label>
<description>How much time the record-input channel wait for events to record.</description>
<default>5</default>
</parameter>
<parameter name="mediaStateJSONConfig" type="text">
<label>Media State Config</label>
<description>JSON config that allows to modify the media state detection strategy for each app. Refer to the binding
@@ -363,6 +371,24 @@
<description>Send tap event to android device</description>
</channel-type>
<channel-type id="url-channel">
<item-type>String</item-type>
<label>Open Url</label>
<description>Open url in the browser</description>
</channel-type>
<channel-type id="record-input-channel">
<item-type>String</item-type>
<label>Record Input</label>
<description>Record input events under provided name</description>
</channel-type>
<channel-type id="recorded-input-channel">
<item-type>String</item-type>
<label>Recorded Input</label>
<description>Send previous recorded input events by name</description>
</channel-type>
<channel-type id="start-package-channel">
<item-type>String</item-type>
<label>Start Package</label>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.anel</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.astro</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.atlona</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.autelis</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.automower</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.avmfritz</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.benqprojector</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.bigassfan</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.bluetooth.airthings</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.bluetooth.am43</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.bluetooth.bluegiga</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.bluetooth.bluez</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.bluetooth.blukii</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.bluetooth.daikinmadoka</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.bluetooth.enoceanble</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.bluetooth.generic</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.bluetooth.govee</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.bluetooth.roaming</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.bluetooth.ruuvitag</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.bluetooth</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.bmwconnecteddrive</artifactId>

View File

@@ -196,7 +196,7 @@ channel-type.bmwconnecteddrive.profile-mode-channel.option.IMMEDIATE_CHARGING =
channel-type.bmwconnecteddrive.profile-mode-channel.option.DELAYED_CHARGING = Laden im Zeitfenster
channel-type.bmwconnecteddrive.profile-prefs-channel.label = Ladeprofil Präferenz
channel-type.bmwconnecteddrive.profile-prefs-channel.option.NO_PRESELECTION = Keine Präferenz
channel-type.bmwconnecteddrive.profile-prefs-channel.option.Charging Window = Zeitfenster
channel-type.bmwconnecteddrive.profile-prefs-channel.option.Charging\ Window = Zeitfenster
channel-type.bmwconnecteddrive.window-start-channel.label = Ladefenster Startzeit
channel-type.bmwconnecteddrive.window-start-hour-channel.label = Ladefenster Startzeit Stunde
channel-type.bmwconnecteddrive.window-start-minute-channel.label = Ladefenster Startzeit Minute

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.boschindego</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.boschshc</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.bosesoundtouch</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.broadlinkthermostat</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.bsblan</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.bticinosmarther</artifactId>

View File

@@ -5,7 +5,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.buienradar</artifactId>
<name>openHAB Add-ons :: Bundles :: Buienradar Binding</name>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.caddx</artifactId>

View File

@@ -8,7 +8,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.cbus</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.chromecast</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.cm11a</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.comfoair</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.coolmasternet</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.coronastats</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.daikin</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.dali</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.danfossairunit</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.darksky</artifactId>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.dbquery</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.deconz</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.denonmarantz</artifactId>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.deutschebahn</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.digiplex</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.digitalstrom</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.dlinksmarthome</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.dmx</artifactId>

View File

@@ -6,7 +6,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.dominoswiss</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.doorbird</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.draytonwiser</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.dscalarm</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.dsmr</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.dwdpollenflug</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.dwdunwetter</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.ecobee</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.ecotouch</artifactId>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.ekey</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.elerotransmitterstick</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.energenie</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.2.0-SNAPSHOT</version>
<version>3.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.enigma2</artifactId>

Some files were not shown because too many files have changed in this diff Show More