Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion bundles/org.openhab.automation.jsscripting/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# JavaScript Scripting

This add-on provides support for JavaScript (ECMAScript 2024+) that can be used as a scripting language within automation rules.
This add-on provides support for JavaScript (ECMAScript 2025+) that can be used as a scripting language within automation rules.
It is based on [GraalJS](https://www.graalvm.org/javascript/) from the [GraalVM project](https://www.graalvm.org/).

Also included is [openhab-js](https://github.com/openhab/openhab-js/), a fairly high-level ES6 library to support automation in openHAB. It provides convenient access
Expand Down
10 changes: 5 additions & 5 deletions bundles/org.openhab.automation.jsscripting/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

<properties>
<!-- Remember to check if the fix https://github.com/openhab/openhab-core/pull/4437 still works when upgrading GraalJS -->
<graaljs.version>24.2.1</graaljs.version>
<node.version>v22.17.1</node.version>
<ohjs.version>openhab@5.14.0</ohjs.version>
</properties>

Expand All @@ -25,15 +25,15 @@
<dependency>
<groupId>org.openhab.osgiify</groupId>
<artifactId>org.graalvm.polyglot.polyglot</artifactId>
<version>${graaljs.version}</version>
<version>${graalvm.version}</version>
<!-- provided as OSGi bundle at runtime, available only at compile time -->
<scope>provided</scope>
</dependency>
<!-- Graal JavaScript ScriptEngine JSR 223 support -->
<dependency>
<groupId>org.openhab.osgiify</groupId>
<artifactId>org.graalvm.js.js-scriptengine</artifactId>
<version>${graaljs.version}</version>
<version>${graalvm.version}</version>
<!-- provided as OSGi bundle at runtime, available only at compile time -->
<scope>provided</scope>
</dependency>
Expand All @@ -47,7 +47,7 @@
<artifactId>frontend-maven-plugin</artifactId>
<version>1.15.4</version>
<configuration>
<nodeVersion>v22.13.1</nodeVersion>
<nodeVersion>${node.version}</nodeVersion>
<workingDirectory>target/js</workingDirectory>
</configuration>
<executions>
Expand All @@ -65,7 +65,7 @@
</goals>
<configuration>
<!--suppress UnresolvedMavenProperty -->
<arguments>install ${ohjs.version} webpack@^5.101.3 webpack-cli@^5.1.4 --prefix .</arguments>
<arguments>install ${ohjs.version} webpack@^5.101.3 webpack-cli@^6.0.1 --prefix .</arguments>
<!-- webpack & webpack-cli versions should match to the ones from openhab-js -->
</configuration>
</execution>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,19 @@

<feature name="openhab-automation-jsscripting" description="JavaScript Scripting" version="${project.version}">
<feature>openhab-runtime-base</feature>
<bundle dependency="true" start-level="78">mvn:org.openhab.osgiify/org.graalvm.js.js-language/24.2.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.js.js-scriptengine/24.2.1</bundle>
<bundle dependency="true" start-level="78">mvn:org.openhab.osgiify/org.graalvm.regex.regex/24.2.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.polyglot.polyglot/24.2.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.sdk.collections/24.2.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.sdk.jniutils/24.2.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.sdk.nativeimage/24.2.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.sdk.word/24.2.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.shadowed.icu4j/24.2.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.shadowed.xz/24.2.1</bundle>
<bundle dependency="true" start-level="79">mvn:org.openhab.osgiify/org.graalvm.truffle.truffle-api/24.2.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.truffle.truffle-compiler/24.2.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.truffle.truffle-runtime/24.2.1</bundle>
<bundle dependency="true" start-level="78">mvn:org.openhab.osgiify/org.graalvm.js.js-language/25.0.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.js.js-scriptengine/25.0.1</bundle>
<bundle dependency="true" start-level="78">mvn:org.openhab.osgiify/org.graalvm.regex.regex/25.0.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.polyglot.polyglot/25.0.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.sdk.collections/25.0.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.sdk.jniutils/25.0.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.sdk.nativeimage/25.0.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.sdk.word/25.0.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.shadowed.icu4j/25.0.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.shadowed.xz/25.0.1</bundle>
<bundle dependency="true" start-level="79">mvn:org.openhab.osgiify/org.graalvm.truffle.truffle-api/25.0.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.truffle.truffle-compiler/25.0.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.truffle.truffle-runtime/25.0.1</bundle>
<bundle start-level="80">mvn:org.openhab.addons.bundles/org.openhab.automation.jsscripting/${project.version}</bundle>
</feature>
</features>
Original file line number Diff line number Diff line change
Expand Up @@ -249,8 +249,8 @@ public Path toRealPath(Path path, LinkOption... linkOptions) throws IOException
// enable Nashorn compat mode as openhab-js relies on accessors, see
// https://github.com/oracle/graaljs/blob/master/docs/user/NashornMigrationGuide.md#accessors
.option("js.nashorn-compat", "true") //
// if Nashorn compat mode is enabled, it will enforce ES5 compatibility, we want ECMA2024
.option("js.ecmascript-version", "2024") //
// if Nashorn compat mode is enabled, it will enforce ES5 compatibility, we want ECMA2025
.option("js.ecmascript-version", "2025") //
// enable CommonJS module support
.option("js.commonjs-require", "true"));
}
Expand Down
4 changes: 4 additions & 0 deletions bundles/org.openhab.binding.mqtt.homeassistant/NOTICE
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,7 @@ Parts of this code (src/main/python/) have been forked.
* License: Apache License 2.0
* Project: https://www.home-assistant.io/
* Source: https://github.com/home-assistant/core

Parts of this code (src/main/python/voluptuous/) have been forked:
* License: BSD 3-Clause
* Source: https://github.com/alecthomas/voluptuous
11 changes: 4 additions & 7 deletions bundles/org.openhab.binding.mqtt.homeassistant/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
<name>openHAB Add-ons :: Bundles :: MQTT HomeAssistant Convention</name>

<properties>
<graalpy.version>24.2.1</graalpy.version>
<!-- define a property to overwrite it on Windows, as venv has a different structure -->
<graalpy.executable>bin/python3</graalpy.executable>
</properties>
Expand All @@ -38,7 +37,7 @@
<dependency>
<groupId>org.openhab.osgiify</groupId>
<artifactId>org.graalvm.polyglot.polyglot</artifactId>
<version>${graalpy.version}</version>
<version>${graalvm.version}</version>
<!-- provided as OSGi bundle at runtime, available only at compile time -->
<scope>provided</scope>
</dependency>
Expand All @@ -49,15 +48,15 @@
<dependency>
<groupId>org.graalvm.polyglot</groupId>
<artifactId>python-community</artifactId>
<version>${graalpy.version}</version>
<version>${graalvm.version}</version>
<type>pom</type>
<!-- provided as OSGi bundle at runtime, available only at compile time -->
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.openhab.osgiify</groupId>
<artifactId>org.graalvm.python.python-embedding</artifactId>
<version>${graalpy.version}</version>
<version>${graalvm.version}</version>
<!-- provided as OSGi bundle at runtime, available only at compile time -->
<scope>provided</scope>
</dependency>
Expand Down Expand Up @@ -131,7 +130,7 @@
<plugin>
<groupId>org.graalvm.python</groupId>
<artifactId>graalpy-maven-plugin</artifactId>
<version>${graalpy.version}</version>
<version>${graalvm.version}</version>
<executions>
<execution>
<id>install-python-packages</id>
Expand All @@ -144,7 +143,6 @@
<package>awesomeversion==24.6.0</package>
<package>Jinja2==3.1.6</package>
<package>python-slugify==8.0.4</package>
<package>voluptuous==0.15.2</package>
</packages>
</configuration>
</execution>
Expand All @@ -160,7 +158,6 @@
<package>awesomeversion==24.6.0</package>
<package>Jinja2==3.1.6</package>
<package>python-slugify==8.0.4</package>
<package>voluptuous==0.15.2</package>
</packages>
</configuration>
</execution>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,24 +7,24 @@
<feature>openhab-runtime-base</feature>
<feature>openhab-transport-mqtt</feature>
<feature dependency="true">openhab.tp-commons-net</feature>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.llvm.llvm-api/24.2.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.polyglot.polyglot/24.2.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.python.python-embedding/24.2.1</bundle>
<bundle dependency="true" start-level="78">mvn:org.openhab.osgiify/org.graalvm.python.python-language/24.2.1</bundle>
<bundle dependency="true" start-level="78">mvn:org.openhab.osgiify/org.graalvm.python.python-resources/24.2.1</bundle>
<bundle dependency="true" start-level="78">mvn:org.openhab.osgiify/org.graalvm.regex.regex/24.2.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.sdk.collections/24.2.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.sdk.jniutils/24.2.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.sdk.nativeimage/24.2.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.sdk.word/24.2.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.shadowed.icu4j/24.2.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.shadowed.json/24.2.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.shadowed.xz/24.2.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.tools.profiler-tool/24.2.1</bundle>
<bundle dependency="true" start-level="79">mvn:org.openhab.osgiify/org.graalvm.truffle.truffle-api/24.2.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.truffle.truffle-compiler/24.2.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.truffle.truffle-nfi/24.2.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.truffle.truffle-runtime/24.2.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.llvm.llvm-api/25.0.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.polyglot.polyglot/25.0.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.python.python-embedding/25.0.1</bundle>
<bundle dependency="true" start-level="78">mvn:org.openhab.osgiify/org.graalvm.python.python-language/25.0.1</bundle>
<bundle dependency="true" start-level="78">mvn:org.openhab.osgiify/org.graalvm.python.python-resources/25.0.1</bundle>
<bundle dependency="true" start-level="78">mvn:org.openhab.osgiify/org.graalvm.regex.regex/25.0.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.sdk.collections/25.0.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.sdk.jniutils/25.0.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.sdk.nativeimage/25.0.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.sdk.word/25.0.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.shadowed.icu4j/25.0.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.shadowed.json/25.0.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.shadowed.xz/25.0.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.tools.profiler-tool/25.0.1</bundle>
<bundle dependency="true" start-level="79">mvn:org.openhab.osgiify/org.graalvm.truffle.truffle-api/25.0.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.truffle.truffle-compiler/25.0.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.truffle.truffle-nfi/25.0.1</bundle>
<bundle dependency="true">mvn:org.openhab.osgiify/org.graalvm.truffle.truffle-runtime/25.0.1</bundle>
<bundle start-level="80">mvn:org.openhab.addons.bundles/org.openhab.binding.mqtt/${project.version}</bundle>
<bundle start-level="81">mvn:org.openhab.addons.bundles/org.openhab.binding.mqtt.generic/${project.version}</bundle>
<bundle start-level="82">mvn:org.openhab.addons.bundles/org.openhab.binding.mqtt.homeassistant/${project.version}</bundle>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
"""Schema validation for Python data structures.

Given eg. a nested data structure like this:

{
'exclude': ['Users', 'Uptime'],
'include': [],
'set': {
'snmp_community': 'public',
'snmp_timeout': 15,
'snmp_version': '2c',
},
'targets': {
'localhost': {
'exclude': ['Uptime'],
'features': {
'Uptime': {
'retries': 3,
},
'Users': {
'snmp_community': 'monkey',
'snmp_port': 15,
},
},
'include': ['Users'],
'set': {
'snmp_community': 'monkeys',
},
},
},
}

A schema like this:

>>> settings = {
... 'snmp_community': str,
... 'retries': int,
... 'snmp_version': All(Coerce(str), Any('3', '2c', '1')),
... }
>>> features = ['Ping', 'Uptime', 'Http']
>>> schema = Schema({
... 'exclude': features,
... 'include': features,
... 'set': settings,
... 'targets': {
... 'exclude': features,
... 'include': features,
... 'features': {
... str: settings,
... },
... },
... })

Validate like so:

>>> schema({
... 'set': {
... 'snmp_community': 'public',
... 'snmp_version': '2c',
... },
... 'targets': {
... 'exclude': ['Ping'],
... 'features': {
... 'Uptime': {'retries': 3},
... 'Users': {'snmp_community': 'monkey'},
... },
... },
... }) == {
... 'set': {'snmp_version': '2c', 'snmp_community': 'public'},
... 'targets': {
... 'exclude': ['Ping'],
... 'features': {'Uptime': {'retries': 3},
... 'Users': {'snmp_community': 'monkey'}}}}
True
"""

# flake8: noqa
# fmt: off
from voluptuous.schema_builder import *
from voluptuous.util import *
from voluptuous.validators import *

from voluptuous.error import * # isort: skip

# fmt: on

__version__ = '0.15.2'
__author__ = 'alecthomas'
Loading
Loading