diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..88530cf
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+openhab/openhab_userdata/cache
+openhab/openhab_userdata/logs
+openhab/openhab_userdata/tmp
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..29ece41
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,7 @@
+.PHONY: all test clean build
+
+ID := $(shell id -u)
+GID := $(shell id -g)
+
+all:
+ ID=$(ID) GID=$(GID) docker compose up -d
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..8af036c
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,23 @@
+services:
+ mqtt:
+ image: "bytebeamio/rumqttd:0.18.0"
+ ports:
+ - 1883:1883
+ - 1884:1884
+
+ openhab:
+ image: "openhab/openhab:4.0.3"
+ restart: always
+ network_mode: host
+ user: "${UID}:${GID}"
+ volumes:
+ - "/etc/localtime:/etc/localtime:ro"
+ - "./openhab/openhab_addons:/openhab/addons"
+ - "./openhab/openhab_conf:/openhab/conf"
+ - "./openhab/openhab_userdata:/openhab/userdata"
+ environment:
+ CRYPTO_POLICY: "unlimited"
+ EXTRA_JAVA_OPTS: "-Duser.timezone=Canada/Eastern"
+ OPENHAB_HTTP_PORT: "8080"
+ OPENHAB_HTTPS_PORT: "8043"
+
diff --git a/mqtt/rumqttd.toml b/mqtt/rumqttd.toml
new file mode 100644
index 0000000..ecc741e
--- /dev/null
+++ b/mqtt/rumqttd.toml
@@ -0,0 +1,118 @@
+id = 0
+
+# A commitlog read will pull full segment. Make sure that a segment isn't
+# too big as async tcp writes readiness of one connection might affect tail
+# latencies of other connection. Not a problem with preempting runtimes
+[router]
+id = 0
+max_connections = 10010
+max_outgoing_packet_count = 200
+max_segment_size = 104857600
+max_segment_count = 10
+# shared_subscriptions_strategy = "random" # "sticky" | "roundrobin" ( default ) | "random"
+# Any filters that match to configured filter will have custom segment size.
+ # [router.custom_segment.'/office/+/devices/status']
+ # max_segment_size = 102400
+ # max_segment_count = 2
+ # [router.custom_segment.'/home/+/devices/status']
+ # max_segment_size = 51200
+ # max_segment_count = 2
+
+# [bridge]
+# name = "bridge-1"
+# addr = "localhost:1883"
+# qos = 0
+# sub_path = "#"
+# reconnection_delay = 5
+# ping_delay = 5
+# timeout_delay = 5
+# [bridge.connections]
+# connection_timeout_ms = 60000
+# max_payload_size = 20480
+# max_inflight_count = 500
+# dynamic_filters = true
+# [bridge.transport.tls]
+# ca = "ca.cert.pem"
+# client_auth = { certs = "test-1.cert.pem", key = "test-1.key.pem" }
+
+# Configuration of server and connections that it accepts
+[v4.1]
+name = "v4-1"
+listen = "0.0.0.0:1883"
+next_connection_delay_ms = 1
+ [v4.1.connections]
+ connection_timeout_ms = 60000
+ max_payload_size = 20480
+ max_inflight_count = 100
+ dynamic_filters = true
+ # auth = { user1 = "p@ssw0rd", user2 = "password" }
+ # [v4.1.connections.auth]
+ # user1 = "p@ssw0rd"
+ # user2 = "password"
+
+# [v4.2]
+# name = "v4-2"
+# listen = "0.0.0.0:8883"
+# next_connection_delay_ms = 10
+# # tls config for rustls
+# [v4.2.tls]
+# capath = "/etc/tls/ca.cert.pem"
+# certpath = "/etc/tls/server.cert.pem"
+# keypath = "/etc/tls/server.key.pem"
+# # settings for all the connections on this server
+# [v4.2.connections]
+# connection_timeout_ms = 60000
+# throttle_delay_ms = 0
+# max_payload_size = 20480
+# max_inflight_count = 100
+# max_inflight_size = 1024
+
+[v5.1]
+name = "v5-1"
+listen = "0.0.0.0:1884"
+next_connection_delay_ms = 1
+ [v5.1.connections]
+ connection_timeout_ms = 60000
+ max_payload_size = 20480
+ max_inflight_count = 100
+
+[prometheus]
+listen = "127.0.0.1:9042"
+interval = 1
+
+[ws.1]
+name = "ws-1"
+listen = "0.0.0.0:8083"
+next_connection_delay_ms = 1
+ [ws.1.connections]
+ connection_timeout_ms = 60000
+ max_client_id_len = 256
+ throttle_delay_ms = 0
+ max_payload_size = 20480
+ max_inflight_count = 500
+ max_inflight_size = 1024
+
+# [ws.2]
+# name = "ws-2"
+# listen = "0.0.0.0:8081"
+# next_connection_delay_ms = 1
+# [ws.2.tls]
+# capath = "/etc/tls/ca.cert.pem"
+# certpath = "/etc/tls/server.cert.pem"
+# keypath = "/etc/tls/server.key.pem"
+# [ws.2.connections]
+# connection_timeout_ms = 60000
+# max_client_id_len = 256
+# throttle_delay_ms = 0
+# max_payload_size = 20480
+# max_inflight_count = 500
+# max_inflight_size = 1024
+
+[console]
+listen = "0.0.0.0:3030"
+
+# [metrics]
+# [metrics.alerts]
+# push_interval = 1
+# [metrics.meters]
+# push_interval = 1
diff --git a/openhab/openhab_conf/html/index.html b/openhab/openhab_conf/html/index.html
new file mode 100644
index 0000000..58ba0e9
--- /dev/null
+++ b/openhab/openhab_conf/html/index.html
@@ -0,0 +1,5 @@
+
+
openHAB user provided static content
+Serve your own static html pages or resources from here. Files stored in the openHAB configuration subfolder html will be available through the HTTP server of openHAB, e.g. http://device-address:8080/static/image.png.
+Resources for sitemap elements (image, video,...) can also be provided though this folder.
+
diff --git a/openhab/openhab_conf/html/readme.txt b/openhab/openhab_conf/html/readme.txt
new file mode 100644
index 0000000..5eeeb99
--- /dev/null
+++ b/openhab/openhab_conf/html/readme.txt
@@ -0,0 +1,3 @@
+Serve your own static html pages or resources from here.
+Files stored in this folder will be available through the HTTP server of openHAB, e.g. "http://device-address:8080/static/image.png".
+Resources for sitemap elements (image, video,...) can also be provided though this folder.
diff --git a/openhab/openhab_conf/icons/classic/readme.txt b/openhab/openhab_conf/icons/classic/readme.txt
new file mode 100644
index 0000000..7fc793f
--- /dev/null
+++ b/openhab/openhab_conf/icons/classic/readme.txt
@@ -0,0 +1,6 @@
+Your additional icons go here.
+Icons can be provided as png (32x32) or preferably as svg files.
+ClassicUI and BasicUI can be configured to accept svg (default) or png icons.
+
+Check out the openHAB documentation for more details:
+https://www.openhab.org/docs/configuration/items.html#icons
diff --git a/openhab/openhab_conf/items/IFT605_SmartClothes.items b/openhab/openhab_conf/items/IFT605_SmartClothes.items
new file mode 100644
index 0000000..c939242
--- /dev/null
+++ b/openhab/openhab_conf/items/IFT605_SmartClothes.items
@@ -0,0 +1,38 @@
+
+Group Room
+Group SmartClothes
+
+Group Sensors
+Group:Number:AVG Luminance "average luminosity" (Sensors)
+Group:Number:AVG Noise "average noise" (Sensors)
+
+Group Actuators
+Group Lights (Actuators)
+
+Group Batteries
+
+Contact room1 "room 1"
+
+// Room fixed devices
+Number rfidReader "RFID reader" (Sensors, Room) {channel="rfidReader:device:reader1"}
+
+// smart clothes, mobile devices
+Color stripColor "el-wire" (Lights, SmartClothes) {channel="elwire:0210:ewbridge:strip1"}
+Dimmer stripIntensity "el-wire" (Lights, SmartClothes) {channel="elwire:0210:ewbridge:strip1"}
+
+Color stripColor2 "el-wire" (Lights, SmartClothes) {channel="elwire:0210:ewbridge:strip2"}
+Dimmer stripIntensity2 "el-wire" (Lights, SmartClothes) {channel="elwire:0210:ewbridge:strip2"}
+
+Switch vibrationPatch "vibration patch" (Actuators, SmartClothes) {channel="vibrationPatch:device:vibration"}
+
+Number luminance "luminance level" (Luminance, Sensors, SmartClothes) {channel=zwave:device:luxmeter:node2:sensor_luminance"}
+Number luxmeterBattery "luxmeter battery level" (Batteries, SmartClothes) {channel="zwave:device:luxmeter:node2:battery-level"}
+
+Number noise "noise level" (Noise, Sensors, SmartClothes) {channel="Channel=“zwave:device:noisemeter:node3:sensor_noise”"}
+Number noiseSensorBattery "noise sensor battery level" (Batteries, SmartClothes) {channel="zwave:device:noisemeter:node3:battery-level"}
+
+// optionnel
+Number luminanceWristBand "luminance level" (Sensors, SmartClothes) {channel="zwave:device:wristband:node4:luminance"}
+Number noiseWristBand "noise level" (Sensors, SmartClothes) {channel="zwave:device:wristband:node4:luminance"}
+Contact gsrWristBand "galvanic skin response level" (Sensors, SmartClothes) {channel=“zwave:device:wristband:node4:galvanicSkinResponse"}
+Switch vibrationWristBand "noise level" (Actuators, SmartClothes) {channel="zwave:device:wristband:node4:vibration"}
diff --git a/openhab/openhab_conf/items/readme.txt b/openhab/openhab_conf/items/readme.txt
new file mode 100644
index 0000000..b214510
--- /dev/null
+++ b/openhab/openhab_conf/items/readme.txt
@@ -0,0 +1,5 @@
+Your item definitions go here.
+All items files have to have the ".items" file extension and must follow a special syntax.
+
+Check out the openHAB documentation for more details:
+https://www.openhab.org/docs/configuration/items.html
diff --git a/openhab/openhab_conf/persistence/readme.txt b/openhab/openhab_conf/persistence/readme.txt
new file mode 100644
index 0000000..b1df35b
--- /dev/null
+++ b/openhab/openhab_conf/persistence/readme.txt
@@ -0,0 +1,5 @@
+Your persistence configuration goes here.
+All persistence files have to have the ".persist" file extension and must follow a special syntax.
+
+Check out the openHAB documentation for more details:
+https://www.openhab.org/docs/configuration/persistence.html
diff --git a/openhab/openhab_conf/rules/IFT605_SmartClothes.rules b/openhab/openhab_conf/rules/IFT605_SmartClothes.rules
new file mode 100644
index 0000000..26abcc6
--- /dev/null
+++ b/openhab/openhab_conf/rules/IFT605_SmartClothes.rules
@@ -0,0 +1,175 @@
+import org.eclipse.smarthome.model.script.ScriptServiceUtil
+// import org.eclipse.smarthome.core.library.items.StringItem
+import java.util.HashMap
+import java.util.HashSet
+
+val TAG_FileName = "IFT605SmartClothes.rules"
+val smartClothesID = "12345678"
+
+var Contact currentRoom
+var MQTTBroker currentMQTTBroker
+
+// managing context
+var boolean goodConditions = true // of course, only one of good/bad conditions is required
+var boolean badConditions = false
+var badConditionsStartTime = 0 // in milliseconds
+val URGE_TO_CHANGE_ROOM_TIME_TRIGGER = 300000 // 5 minutes
+
+// managing people in the room
+var people = new HashSet()
+var luminanceMeasures = new HashMap()
+var noiseMeasures = new HashMap()
+
+// j'entre dans une pièce
+val iEnter = [ ContactItem room, String smartClothesID, MQTTBroker broker |
+ broker.sendCommand(CONNECT);
+ broker.sendCommand(SUBSCRIBE, "room/1/#");
+ broker.sendCommand(SUBSCRIBE, "smartclothes/#");
+ broker.sendCommand(SUBSCRIBE, "room/1/tag/+");
+ broker.sendCommand(SUBSCRIBE, "smartclothes/+/sensor/luminance");
+ broker.sendCommand(SUBSCRIBE, "smartclothes/+/sensor/noise");
+ // informer que l'on vient d'entrer dans la pièce
+ broker.sendCommand(PUBLISH, smartClothesID+"/status", "Online")
+ vibrationPatch.sendCommand(OFF)
+]
+
+// je sors de une pièce
+val iQuit = [ ContactItem room, String smartClothesID, MQTTBroker broker |
+ broker.sendCommand(UNSUBSCRIBE, "room/1/#");
+ broker.sendCommand(UNSUBSCRIBE, "smartclothes/#");
+ broker.sendCommand(UNSUBSCRIBE, "room/1/tag/+");
+ broker.sendCommand(UNSUBSCRIBE, "smartclothes/+/sensor/luminance");
+ broker.sendCommand(UNSUBSCRIBE, "smartclothes/+/sensor/noise");
+ // informer que l'on vient d'entrer dans la pièce
+ broker.sendCommand(PUBLISH, smartClothesID+"/status", "Offline")
+]
+// le vêtement entre dans une pièce
+val someoneEnterInRoom = [ String smartClothesID |
+ people.add(smartClothesID)
+]
+
+val someoneQuitRoom = [ String smartClothesID |
+ people.remove(smartClothesID)
+ noiseMeasures.remove(smartClothesID)
+ luminanceMeasures.remove(smartClothesID)
+]
+
+// fonctions utilitaires pour la gestion du contexte
+// autre solutions pour calculer les moyennes, utiliser les HashMap luminanceMeasures et noiseMeasures
+val Integer averageLuminance = [ | Luminance.state
+]
+
+val Integer averagenoise = [ | Noise.state
+]
+
+val boolean checkGoodConditions = [ Integer roomLuminance, Integer roomNoise |
+ return (LUMINOSITE_MIN < roomLuminance || roomLuminance < LUMINOSITE_MAX)
+ && (NIVEAU_SONORE_MIN < roomNoise || roomNoise < NIVEAU_SONORE_MAX)
+]
+
+val reactToNewConditions = [ |
+ goodConditions = checkGoodConditions(averageLuminance(), averageNoise())
+ badConditions = !goodConditions
+ if (goodConditions) {
+ badConditionsStartTime = 0
+ vibrationPatch.sendCommand(OFF)
+ // rapprocher l'éclairage de la valeur optimale
+ if (Luminance.state < LUMOINOSITE_OPTIMALE) {
+ stripIntensity.sendCommand(INCREASE)
+ } else {
+ stripIntensity.sendCommand(DECREASE)
+ }
+ } else {
+ // Éviter de rester trop longtemps dans des conditions défavorables
+ vibrationPatch.sendCommand(ON)
+ if (badConditionsStartTime == 0){
+ badConditionsStartTime = now.getMillis();
+ }
+ if (now.getMillis() - badConditionsStartTime > URGE_TO_CHANGE_ROOM_TIME_TRIGGER) {
+ vibrationPatch.sendCommand(ON)
+ }
+ }
+]
+
+
+
+rule "Démarrage de openHAB"
+when
+ System started
+then
+ logInfo(TAG_FileName, "Rule : Démarrage de openHAB")
+ currentRoom = room1
+ currentMQTTBroker = room1MQTT
+ iEnter(currentRoom, smartClothesID, currentMQTTBroker)
+end
+
+// Diffuser les mesures de ses capteurs aux autres vêtements intelligents
+rule "lecture d'une mesure de luminosité par le capteur du vêtement"
+when
+ // Item luminance received update
+ Member of Luminance received update
+then
+ var sensorName = triggeringItem.name
+ var value = triggeringItem.state
+ currentMQTTBroker.sendCommand(PUBLISH, "smartclothes/"+smartClothesID+"/sensor/luminance", value)
+
+end
+
+rule "lecture d'une mesure de bruit par le capteur du vêtement"
+when
+ // Item noise received update
+ Member of Noise received update
+then
+ var sensorName = triggeringItem.name
+ var value = triggeringItem.state
+ currentMQTTBroker.sendCommand(PUBLISH, "smartclothes/"+smartClothesID+"/sensor/noise", value)
+end
+
+// Gérer son contexte ambiant
+
+rule "nouvelle mesure de bruit publiée par le courtier MQTT"
+when currentMQTTBroker "smartclothes/+/sensor/noise" changed
+then
+ noiseMeasures.put(extractID(triggeringItem.newState.topic), trigerringItem.newState.value)
+ reactToNewConditions()
+end
+
+rule "nouvelle mesure de bruit publiée par le courtier MQTT"
+when currentMQTTBroker "smartclothes/+/sensor/luminance" changed
+then
+ luminanceMeasures.put(extractID(triggeringItem.newState.topic), trigerringItem.newState.value)
+ reactToNewConditions()
+end
+
+// Tenir compte des arrivées et départs de personnes dans la salle
+rule "arrivée d'une personne"
+when
+ // si on n'utilise pas le mécanisme des dernières volontés de MQTT,
+ // il faut surveiller les éléments pertinents à la main
+ // currentMQTTBroker "room/+/tag" changed //lecture d'un tag RFID
+ // or currentMQTTBroker "smartclothes/+/sensor/luminance" changed // member of Luminance changed
+ // or currentMQTTBroker "smartclothes/+/sensor/noise" changed
+ currentMQTTBroker "+/status " changed to "Online" //lecture d'un tag RFID
+
+then
+ String triggeringSmartClothesID = extractID(triggeringItem.newState.topic)
+ someoneEnterInRoom(triggeringSmartClothesID)
+end
+
+// Tenir compte des arrivées et départs de personnes dans la salle
+rule "départ d'une personne"
+when
+ currentMQTTBroker "+/status " changed to "Offline" //lecture d'un tag RFID
+then
+ String triggeringSmartClothesID = extractID(triggeringItem.newState.topic)
+ someoneQuitRoom(triggeringSmartClothesID)
+end
+
+rule "Arrêt de openHAB"
+when
+ System shuts down
+then
+ logInfo(TAG_FileName, " Rule : Arrêt de openHAB")
+ // sauvegarder les états des items et le contexte
+ iQuit(currentRoom, smartClothesID, currentMQTTBroker)
+end
diff --git a/openhab/openhab_conf/rules/readme.txt b/openhab/openhab_conf/rules/readme.txt
new file mode 100644
index 0000000..f7952e1
--- /dev/null
+++ b/openhab/openhab_conf/rules/readme.txt
@@ -0,0 +1,5 @@
+Your rules go here.
+All rule files have to have the ".rules" file extension and must follow a special syntax.
+
+Check out the openHAB documentation for more details:
+https://www.openhab.org/docs/configuration/rules-dsl.html
diff --git a/openhab/openhab_conf/scripts/readme.txt b/openhab/openhab_conf/scripts/readme.txt
new file mode 100644
index 0000000..0faff68
--- /dev/null
+++ b/openhab/openhab_conf/scripts/readme.txt
@@ -0,0 +1,5 @@
+Your scripts go here.
+All script files have to have the ".script" file extension and must follow a special syntax.
+
+Check out the openHAB documentation for more details:
+https://www.openhab.org/docs/configuration/rules-dsl.html#scripts
diff --git a/openhab/openhab_conf/services/addons.cfg b/openhab/openhab_conf/services/addons.cfg
new file mode 100644
index 0000000..87e8dbb
--- /dev/null
+++ b/openhab/openhab_conf/services/addons.cfg
@@ -0,0 +1,36 @@
+# Access Remote Add-on Repository
+# Defines whether the remote openHAB add-on repository should be used for browsing and installing add-ons. (default is true)
+#
+#remote = true
+
+# Some add-on services may provide add-ons where compatibility with the currently running system is not expected.
+# Enabling this option will include these entries in the list of available add-ons.
+#
+#includeIncompatible = false
+
+# The add-on configuration in the lists below is applied EVERY TIME openHAB is started.
+# Add-ons installed using the UI that do not occur in the lists will be uninstalled each startup.
+# When lists are commented again any add-ons in the list remain installed and are not removed.
+# So if you want to uninstall all add-ons part of a list, first remove all add-ons from it, restart
+# openHAB and then comment the list.
+
+# A comma-separated list of automation services to install (e.g. "automation = groovyscripting")
+#automation =
+
+# A comma-separated list of bindings to install (e.g. "binding = knx,sonos,zwave")
+#binding =
+
+# A comma-separated list of miscellaneous services to install (e.g. "misc = openhabcloud")
+#misc =
+
+# A comma-separated list of persistence services to install (e.g. "persistence = jpa,rrd4j")
+#persistence =
+
+# A comma-separated list of transformation services to install (e.g. "transformation = jsonpath,map")
+#transformation =
+
+# A comma-separated list of UIs to install (e.g. "ui = basic,habpanel")
+#ui =
+
+# A comma-separated list of voice services to install (e.g. "voice = googletts,marytts")
+#voice =
diff --git a/openhab/openhab_conf/services/basicui.cfg b/openhab/openhab_conf/services/basicui.cfg
new file mode 100644
index 0000000..6c91e62
--- /dev/null
+++ b/openhab/openhab_conf/services/basicui.cfg
@@ -0,0 +1,23 @@
+# Defines the UI theme.
+#
+#theme=default
+
+# Defines whether UI renders icons for the widgets or not.
+#
+#enableIcons=true
+
+# When enabled, changes the layout so that more widgets can fit on the screen.
+#
+#condensedLayout=false
+
+# Displays all widget states in uppercase.
+#
+#capitalizeValues=false
+
+# Play audio sent to the web audio sink.
+#
+#webAudio=false
+
+# The sitemap to show if no parameter is passed.
+#
+#defaultSitemap=
diff --git a/openhab/openhab_conf/services/readme.txt b/openhab/openhab_conf/services/readme.txt
new file mode 100644
index 0000000..62ba811
--- /dev/null
+++ b/openhab/openhab_conf/services/readme.txt
@@ -0,0 +1,6 @@
+Your service configurations will reside here.
+All configuration files have to have the ".cfg" file extension.
+Service configuration files are automatically created as soon as you install an add-on that can be configured.
+
+Check out the openHAB documentation for more details:
+https://www.openhab.org/docs/configuration/services.html
diff --git a/openhab/openhab_conf/services/rrd4j.cfg b/openhab/openhab_conf/services/rrd4j.cfg
new file mode 100644
index 0000000..cd8d75b
--- /dev/null
+++ b/openhab/openhab_conf/services/rrd4j.cfg
@@ -0,0 +1,10 @@
+# configure specific rrd properties for given items in this file.
+# please refer to the documentation available at
+# https://www.openhab.org/addons/persistence/rrd4j/
+#
+# default_numeric and default_other are internally defined defnames and are used as
+# defaults when no other defname applies
+
+#.def=[ABSOLUTE|COUNTER|DERIVE|GAUGE],,[|U],[|U],
+#.archives=[AVERAGE|MIN|MAX|LAST|FIRST|TOTAL],,,
+#.items=
diff --git a/openhab/openhab_conf/services/runtime.cfg b/openhab/openhab_conf/services/runtime.cfg
new file mode 100644
index 0000000..dcabe47
--- /dev/null
+++ b/openhab/openhab_conf/services/runtime.cfg
@@ -0,0 +1,277 @@
+#################################### LOCALE ####################################
+
+# The default language that should be used. If not specified, the system default locale is used.
+# The ISO 639 alpha-2 or alpha-3 language code (if there is no alpha-2 one).
+# Example: "en" (English), "de" (German), "ja" (Japanese), "kok" (Konkani)
+#
+#org.openhab.i18n:language=
+
+# The region that should be used.
+# ISO 3166 alpha-2 country code or UN M.49 numeric-3 area code.
+# Example: "US" (United States), "DE" (Germany), "FR" (France), "029" (Caribbean)
+#
+#org.openhab.i18n:region=
+
+# A time zone can be set from the user interface. The underlying system's time zone is the default.
+#
+#org.openhab.i18n:timezone=
+
+# The location of this installation.
+# Coordinates as ,[]
+# Example: "52.5200066,13.4049540" (Berlin)
+#
+#org.openhab.i18n:location=
+
+# The measurement system is used for unit conversion.
+# 2 values are accepted:
+# - SI: Metric
+# - US: Imperial (US)
+#
+#org.openhab.i18n:measurementSystem=
+
+
+################################# PERSISTENCE ##################################
+
+# The persistence service to use if no other is specified.
+#
+#org.openhab.persistence:default=
+
+
+#################################### AUDIO #####################################
+
+# This parameter defines the default audio source to use (if not set, the first available one will be used.
+#
+#org.openhab.audio:defaultSource=
+
+# This parameter defines the default audio sink to use (if not set, the first available one will be used.
+#
+#org.openhab.audio:defaultSink=
+
+
+#################################### VOICE #####################################
+
+# This parameter defines the default text-to-speech service to use (if not set, the first available one will be used.
+#
+#org.openhab.voice:defaultTTS=
+
+# This parameter defines the default speech-to-text service to use (if not set, the first available one will be used.
+#
+#org.openhab.voice:defaultSTT=
+
+# The default voice to use if no specific TTS service or voice is specified.
+#
+#org.openhab.voice:defaultVoice=
+
+# The default human language interpreter to use if no other is specified.
+#
+#org.openhab.voice:defaultHLI=
+
+# The default keyword spotting service to use if no other is specified.
+#
+#org.openhab.voice:defaultKS=
+
+# The magic word to spot before initiating a dialog.
+#
+#org.openhab.voice:keyword=
+
+# If provided, the item will be switched on during the period when the dialog processor has spotted the keyword and is listening for commands.
+#
+#org.openhab.voice:listeningItem=
+
+# Listening Melody: A melody to be played to advertise the user the dialog processing is going to start.
+# This is a spaced separated list of notes. Example: "A O:100 A':50"
+# Leave empty to disable it.
+#
+#org.openhab.voice:listeningMelody=
+
+# Enable TTS caching: true to allow TTS services to cache audio files on disk.
+#
+#org.openhab.voice:enableCacheTTS=true
+
+# TTS Cache Size: the limit size of the TTS cache (in kB).
+#
+#org.openhab.voice:cacheSizeTTS=10240
+
+
+################################### SITEMAP ####################################
+
+# Defines how the members of a group are sorted in UI.
+# 3 values are accepted:
+# - NONE: No sorting
+# - LABEL: Sorted by label
+# - NAME: Sorted by name
+#
+#org.openhab.sitemap:groupMembersSorting=NONE
+
+
+#################################### CHART #####################################
+
+# Defines the default height in pixels for the chart to build.
+#
+#org.openhab.chart:defaultHeight=240
+
+# Defines the default width in pixels for the chart to build.
+#
+#org.openhab.chart:defaultWidth=480
+
+# Defines the scale to apply to the requested chart height (0.5 to divide by 2 for example).
+#
+#org.openhab.chart:scale=1
+
+# Defines the maximum width in pixels for the chart to build.
+#
+#org.openhab.chart:maxWidth=
+
+
+################################### NETWORK ####################################
+
+# Primary address subnet (e.g. 192.168.1.0/24).
+#
+#org.openhab.network:primaryAddress=
+
+# A broadcast address (e.g. 192.168.1.255).
+#
+#org.openhab.network:broadcastAddress=
+
+# Use only one IP address per interface and family.
+#
+#org.openhab.network:useOnlyOneAddress=false
+
+# Use IPv6 Addresses if available.
+#
+#org.openhab.network:useIPv6=true
+
+################################## EPHEMERIS ###################################
+
+# This parameter defines the default list of usual non workable days for the Ephemeris service.
+# The value has to be surrounded by square brackets ('[' and ']') and optionally contain value delimiters - a comma ',' to be interpreted as a list of values.
+# Example: [SATURDAY,SUNDAY]
+#
+#org.openhab.ephemeris:dayset-weekend=[SATURDAY,SUNDAY]
+
+# See https://jollyday.sourceforge.net/data.html for help with the following parameters.
+# This parameter defines the specific country to get the holidays for.
+# Examples: Germany = "de", United States of America = "us"
+#
+#org.openhab.ephemeris:country=
+
+# This parameter defines the specific region/state to get the holidays for.
+# Examples: New York = "ny", Baden-Wuerttemberg = "bw"
+#
+#org.openhab.ephemeris:region=
+
+# This parameter defines the specific city to get the holidays for.
+# Examples: München = "mu"
+#
+#org.openhab.ephemeris:city=
+
+################################# MISCELLANOUS #################################
+
+# The karaf sshHost parameter configures the bind address for the ssh login to karaf.
+# Default is 127.0.0.1 (localhost), so it is only possible to login from the local machine.
+#
+# Setting this to the address of another network interfaces will allow login from this network.
+# Setting this to 0.0.0.0 will allow login from all network interfaces.
+#
+# !!! Security warning !!!
+# Remember to change default login/password, if you allow external login.
+# See https://www.openhab.org/docs/administration/console.html for details.
+#
+#org.apache.karaf.shell:sshHost = 0.0.0.0
+
+# Cross-origin resource sharing (CORS) is a browser security feature that restricts cross-origin
+# HTTP requests that are initiated from scripts running in the browser. Setting this option to 'true'
+# will disable the browser cross-origin check. This is required if you want to use a web UI that is not
+# hosted on the openHAB server domain.
+#org.openhab.cors:enable=true
+
+
+################################### REST API ###################################
+
+# Allow the use of Basic authentication to access protected API resources, in addition to access tokens and API tokens
+#
+#org.openhab.restauth:allowBasicAuth=true
+
+# When basic authentication is activated, credentials are put in a cache in order to speed up request
+# authorization. The entries in the cache expire after a while in order to not keep credentials in memory indefinitely.
+# This value defines the expiration time in hours. Set it to 0 for disabling the cache.
+#
+#org.openhab.restauth:cacheExpiration=6
+
+# By default, operations requiring the "user" role are available when unauthenticated.
+# Disabling this option will enforce authorization for these operations.
+# Warning: This causes clients that do not support authentication to break.
+#
+#org.openhab.restauth:implicitUserRole=false
+
+# Grant implicit user role to requests originating from these networks.
+# Comma separated list of CIDR.
+# This value is ignored if "org.openhab.restauth:implicitUserRole" is enabled.
+#
+#org.openhab.restauth:trustedNetworks=127.0.0.1/32, 192.168.1.1/24
+
+
+############################### LANGUAGE SERVER ################################
+
+# The port the language server listens to.
+#
+#org.openhab.lsp:port=5007
+
+
+################################# JSON STORAGE #################################
+
+# Sets the number of backup files to keep.
+#
+#org.openhab.storage.json:backup_files=5
+
+# Sets the time to wait before writing changes to disk. This can reduce the number of writes when many changes are being introduced within a short period.
+# The value is specified in milliseconds
+#
+#org.openhab.storage.json:write_delay=500
+
+# Sets the maximum period the service will wait to write data to disk in the event that many changes are happening continually.
+# The value is specified in milliseconds
+#
+#org.openhab.storage.json:max_defer_delay=30000
+
+
+################################# MARKETPLACE ##################################
+
+# If set to false no add-ons from the community marketplace will be shown. Already installed add-ons will still be available.
+#
+#org.openhab.marketplace:enable=true
+
+# Include entries which have not been tagged as published. Warning: this may include entries that are not ready and might not work or harm your installation.
+# Enable at your own risk, for testing purposes only.
+#
+#org.openhab.marketplace:showUnpublished=false
+
+# Specify the API key to use on the community forum (for staff and curators - this allows for instance to see content which is not yet reviewed or otherwise hidden from the general public).
+# Leave blank if you don't have one.
+#
+#org.openhab.marketplace:apiKey=
+
+
+############################# JSON ADD-ON SERVICE ##############################
+
+# Pipe (|) separated list of URLS that provide 3rd party add-on services via Json files.
+# Warning: Bundles distributed over 3rd party add-on services may lack proper review and can potentially contain malicious code and thus harm your system.
+#
+#org.openhab.jsonaddonservice:urls=
+
+# Include entries which have not been tagged as "stable". These add-ons should be used for testing purposes only and are not considered production-system ready.
+#
+#org.openhab.jsonaddonservice:showUnstable=false
+
+
+#################################### INBOX #####################################
+
+# If enabled, an Inbox result matching an existing thing is automatically ignored.
+# If set to false, the Inbox may contain results although identical things already exist.
+#
+#org.openhab.inbox:autoIgnore=true
+
+# If enabled, Inbox results are automatically approved, unless they were marked as ignored.
+#
+#org.openhab.inbox:autoApprove=false
+
diff --git a/openhab/openhab_conf/sitemaps/readme.txt b/openhab/openhab_conf/sitemaps/readme.txt
new file mode 100644
index 0000000..0e78121
--- /dev/null
+++ b/openhab/openhab_conf/sitemaps/readme.txt
@@ -0,0 +1,5 @@
+Your sitemap definitions go here.
+All sitemap files have to have the ".sitemap" file extension and must follow a special syntax.
+
+Check out the openHAB documentation for more details:
+https://www.openhab.org/docs/ui/sitemaps.html
diff --git a/openhab/openhab_conf/sounds/barking.mp3 b/openhab/openhab_conf/sounds/barking.mp3
new file mode 100644
index 0000000..5a3c41d
Binary files /dev/null and b/openhab/openhab_conf/sounds/barking.mp3 differ
diff --git a/openhab/openhab_conf/sounds/doorbell.mp3 b/openhab/openhab_conf/sounds/doorbell.mp3
new file mode 100644
index 0000000..7a8a5a3
Binary files /dev/null and b/openhab/openhab_conf/sounds/doorbell.mp3 differ
diff --git a/openhab/openhab_conf/things/IFT605_SmartClothes.things b/openhab/openhab_conf/things/IFT605_SmartClothes.things
new file mode 100644
index 0000000..ca258ca
--- /dev/null
+++ b/openhab/openhab_conf/things/IFT605_SmartClothes.things
@@ -0,0 +1,62 @@
+/**
+ Vêtement intelligent
+**/
+
+Bridge elwire:bridge:ewbridge [ ipAddress="192.168.3.123" ] {
+ // gateway el-wire
+ Thing 0210 strip1 [stripId="1"] //référer par elwire:0210:ewbridge:strip1
+ Thing 0220 strip2 [stripId="2"] // référer par elwire:0220:ewbridge:strip2
+}
+//vibration patch
+Thing vibrationPatch:device:vibration "vibration patch" @ "smart clothes"
+
+
+// voir description à https://www.openhab.org/addons/bindings/zwave/doc/things.html
+Bridge zwave:serial_zstick:8c582004 "ZWave Controller" [ port="/dev/ttyACM0", controller_softreset="false", controller_master="true", heal_enable="true", security_networkkey="???" ] {
+ // ampèremètres placés sur les interrupteurs du plafonnier
+ Thing luxMeter node2 "luxmeter " @ "smart clothes" [ node_id=2 ] {
+ Channels:
+ // sensors
+ Type number : luminance [ updateInterval=10 ]
+ Type number : battery-level [ updateInterval=10 ]
+ }
+ Thing noiseMeter node3 "noise meter" @ "smart clothes" [ node_id=3 ]
+ Channels:
+ // sensors
+ Type number : noise [ updateInterval=10 ]
+ Type number : battery-level [ updateInterval=10 ]
+ Thing wristband node4 "wristBand" @ "smart clothes" [ node_id=4 ] {
+ Channels:
+ // sensors
+ Type number : luminance [ updateInterval=10 ]
+ Type number : noise [ updateInterval=10 ]
+ Type string : accelerometer [ updateInterval=10 ]
+ Type number : speed [ updateInterval=10 ]
+ Type number : galvanicSkinResponse [ updateInterval=10 ]
+ // effectors
+ Type switch : vibration
+ Type switch : enable
+ }
+}
+
+/**
+ Pièce
+**/
+
+// https://www.smarthomeblog.net/mqtt-openhab/
+// https://gist.github.com/davidgraeff/6c00d2ad5e4bc553f5f209118307d8fd
+// https://community.openhab.org/t/solved-oh-2-4-mqtt-binding-generic-thing-statetopic-working-commandtopic-not-working/63619
+
+Bridge mqtt:systemBroker:embedded-mqtt-broker [ host="127.0.0.1", secure=false ]
+{
+ Thing mqtt:topic:room1MQTT {
+ Channels:
+ Type string : room1 "all MQTT room events" @ "room 1"[ stateTopic="room/1/#" ]
+ Type string : smartclothes "all MQTT smart clothes events" @ "room 1"[ stateTopic="smartclothes/#" ]
+ Type switch : tag "RFID MQTT event" @ "room 1" [ stateTopic="room/+/tag"]
+ Type string : noise "noise MQTT event" @ "room 1" [ stateTopic="smartclothes/+/sensor/noise" ]
+ Type string : luminance "luminosity MQTT event" @ "room 1" [ stateTopic="smartclothes/+/sensor/luminance" ]
+ }
+}
+
+Thing rfidReader:device:reader1 "rfidReader " @ "room 1"
diff --git a/openhab/openhab_conf/things/readme.txt b/openhab/openhab_conf/things/readme.txt
new file mode 100644
index 0000000..27b6689
--- /dev/null
+++ b/openhab/openhab_conf/things/readme.txt
@@ -0,0 +1,5 @@
+Your thing definitions go here.
+All thing files have to have the ".things" file extension and must follow a special syntax.
+
+Check out the openHAB documentation for more details:
+https://www.openhab.org/docs/configuration/things.html
diff --git a/openhab/openhab_conf/transform/de.map b/openhab/openhab_conf/transform/de.map
new file mode 100644
index 0000000..8cc1579
--- /dev/null
+++ b/openhab/openhab_conf/transform/de.map
@@ -0,0 +1,3 @@
+CLOSED=zu
+OPEN=offen
+NULL=undefiniert
diff --git a/openhab/openhab_conf/transform/en.map b/openhab/openhab_conf/transform/en.map
new file mode 100644
index 0000000..bd08f17
--- /dev/null
+++ b/openhab/openhab_conf/transform/en.map
@@ -0,0 +1,4 @@
+CLOSED=closed
+OPEN=open
+NULL=unknown
+
\ No newline at end of file
diff --git a/openhab/openhab_conf/transform/readme.txt b/openhab/openhab_conf/transform/readme.txt
new file mode 100644
index 0000000..6933c16
--- /dev/null
+++ b/openhab/openhab_conf/transform/readme.txt
@@ -0,0 +1,5 @@
+Transformations like map or jsonpath can utilize configuration files with data definitions.
+These files have their specific file extensions and syntax definition.
+
+Check out the openHAB documentation for more details:
+https://www.openhab.org/docs/configuration/transformations.html
diff --git a/openhab/openhab_userdata/config/jmx/acl/org/apache/karaf/bundle.config b/openhab/openhab_userdata/config/jmx/acl/org/apache/karaf/bundle.config
new file mode 100644
index 0000000..66fc88b
--- /dev/null
+++ b/openhab/openhab_userdata/config/jmx/acl/org/apache/karaf/bundle.config
@@ -0,0 +1,19 @@
+:org.apache.felix.configadmin.revision:=L"1"
+felix.fileinstall.filename="file:/openhab/userdata/etc/jmx.acl.org.apache.karaf.bundle.cfg"
+install="manager"
+refresh="manager"
+resolve="manager"
+restart="manager"
+service.bundleLocation="?"
+service.pid="jmx.acl.org.apache.karaf.bundle"
+setStartLevel="manager"
+setStartLevel(java.lang.String,="int)[/([1-4])?[0-9]/,/.*/]\ \=\ admin"
+start="manager"
+start(java.lang.String)[/([1-4])?[0-9]/]="admin"
+stop="manager"
+stop(java.lang.String)[/([1-4])?[0-9]/]="admin"
+uninstall="admin"
+uninstall(java.lang.String)[\"0\"]="#this\ is\ a\ comment,\ no\ roles\ can\ perform\ this\ operation"
+update="manager"
+update(java.lang.String)[/([1-4])?[0-9]/]="admin"
+update(java.lang.String,java.lang.String)[/([1-4])?[0-9]/,/.*/]="admin"
diff --git a/openhab/openhab_userdata/config/jmx/acl/org/apache/karaf/config.config b/openhab/openhab_userdata/config/jmx/acl/org/apache/karaf/config.config
new file mode 100644
index 0000000..0e0e434
--- /dev/null
+++ b/openhab/openhab_userdata/config/jmx/acl/org/apache/karaf/config.config
@@ -0,0 +1,28 @@
+:org.apache.felix.configadmin.revision:=L"1"
+appendProperty(java.lang.String,java.lang.String,java.lang.String)="manager"
+appendProperty(java.lang.String,java.lang.String,java.lang.String)[/jmx[.]acl.*/,/.*/,/.*/]="admin"
+appendProperty(java.lang.String,java.lang.String,java.lang.String)[/org[.]apache[.]karaf[.]command[.]acl.+/,/.*/,/.*/]="admin"
+appendProperty(java.lang.String,java.lang.String,java.lang.String)[/org[.]apache[.]karaf[.]service[.]acl.+/,/.*/,/.*/]="admin"
+create(java.lang.String)="manager"
+create(java.lang.String)[/jmx[.]acl.*/]="admin"
+create(java.lang.String)[/org[.]apache[.]karaf[.]command[.]acl.+/]="admin"
+create(java.lang.String)[/org[.]apache[.]karaf[.]service[.]acl.+/]="admin"
+delete(java.lang.String)="manager"
+delete(java.lang.String)[/jmx[.]acl.*/]="admin"
+delete(java.lang.String)[/org[.]apache[.]karaf[.]command[.]acl.+/]="admin"
+delete(java.lang.String)[/org[.]apache[.]karaf[.]service[.]acl.+/]="admin"
+deleteProperty(java.lang.String,java.lang.String)="manager"
+deleteProperty(java.lang.String,java.lang.String)[/jmx[.]acl.*/,/.*/]="admin"
+deleteProperty(java.lang.String,java.lang.String)[/org[.]apache[.]karaf[.]command[.]acl.+/,/.*/]="admin"
+deleteProperty(java.lang.String,java.lang.String)[/org[.]apache[.]karaf[.]service[.]acl.+/,/.*/]="admin"
+felix.fileinstall.filename="file:/openhab/userdata/etc/jmx.acl.org.apache.karaf.config.cfg"
+service.bundleLocation="?"
+service.pid="jmx.acl.org.apache.karaf.config"
+setProperty(java.lang.String,java.lang.String,java.lang.String)="manager"
+setProperty(java.lang.String,java.lang.String,java.lang.String)[/jmx[.]acl.*/,/.*/,/.*/]="admin"
+setProperty(java.lang.String,java.lang.String,java.lang.String)[/org[.]apache[.]karaf[.]command[.]acl.+/,/.*/,/.*/]="admin"
+setProperty(java.lang.String,java.lang.String,java.lang.String)[/org[.]apache[.]karaf[.]service[.]acl.+/,/.*/,/.*/]="admin"
+update(java.lang.String,java.util.Map)="manager"
+update(java.lang.String,java.util.Map)[/jmx[.]acl.*/,/.*/]="admin"
+update(java.lang.String,java.util.Map)[/org[.]apache[.]karaf[.]command[.]acl.+/,/.*/]="admin"
+update(java.lang.String,java.util.Map)[/org[.]apache[.]karaf[.]service[.]acl.+/,/.*/]="admin"
diff --git a/openhab/openhab_userdata/config/org/apache/felix/eventadmin/impl/EventAdmin.config b/openhab/openhab_userdata/config/org/apache/felix/eventadmin/impl/EventAdmin.config
new file mode 100644
index 0000000..d72aefe
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/apache/felix/eventadmin/impl/EventAdmin.config
@@ -0,0 +1,9 @@
+:org.apache.felix.configadmin.revision:=L"1"
+felix.fileinstall.filename="file:/openhab/userdata/etc/org.apache.felix.eventadmin.impl.EventAdmin.cfg"
+org.apache.felix.eventadmin.AddSubject="true"
+org.apache.felix.eventadmin.AddTimestamp="true"
+org.apache.felix.eventadmin.AsyncToSyncThreadRatio="1"
+org.apache.felix.eventadmin.ThreadPoolSize="3"
+org.apache.felix.eventadmin.Timeout="0"
+service.bundleLocation="?"
+service.pid="org.apache.felix.eventadmin.impl.EventAdmin"
diff --git a/openhab/openhab_userdata/config/org/apache/felix/fileinstall%007edeploy.config b/openhab/openhab_userdata/config/org/apache/felix/fileinstall%007edeploy.config
new file mode 100644
index 0000000..d1a0b1b
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/apache/felix/fileinstall%007edeploy.config
@@ -0,0 +1,13 @@
+:org.apache.felix.configadmin.revision:=L"1"
+felix.fileinstall.active.level="90"
+felix.fileinstall.dir="/openhab/addons"
+felix.fileinstall.filename="file:/openhab/userdata/etc/org.apache.felix.fileinstall-deploy.cfg"
+felix.fileinstall.filter=".*\\.(jar|kar)"
+felix.fileinstall.log.level="3"
+felix.fileinstall.poll="10000"
+felix.fileinstall.start.level="80"
+felix.fileinstall.subdir.mode="skip"
+felix.fileinstall.tmpdir="/openhab/userdata/tmp/bundles"
+service.bundleLocation="?"
+service.factoryPid="org.apache.felix.fileinstall"
+service.pid="org.apache.felix.fileinstall~deploy"
diff --git a/openhab/openhab_userdata/config/org/apache/karaf/command/acl/bundle.config b/openhab/openhab_userdata/config/org/apache/karaf/command/acl/bundle.config
new file mode 100644
index 0000000..d474fd2
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/apache/karaf/command/acl/bundle.config
@@ -0,0 +1,18 @@
+:org.apache.felix.configadmin.revision:=L"1"
+felix.fileinstall.filename="file:/openhab/userdata/etc/org.apache.karaf.command.acl.bundle.cfg"
+install="admin"
+refresh="manager"
+refresh[/.*[-][f].*/]="admin"
+restart="manager"
+restart[/.*[-][f].*/]="admin"
+service.bundleLocation="?"
+service.pid="org.apache.karaf.command.acl.bundle"
+start="manager"
+start[/.*[-][f].*/]="admin"
+stop="manager"
+stop[/.*[-][f].*/]="admin"
+uninstall="manager"
+uninstall[/.*[-][f].*/]="admin"
+update="manager"
+update[/.*[-][f].*/]="admin"
+watch="admin"
diff --git a/openhab/openhab_userdata/config/org/apache/karaf/command/acl/config.config b/openhab/openhab_userdata/config/org/apache/karaf/command/acl/config.config
new file mode 100644
index 0000000..849f5b4
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/apache/karaf/command/acl/config.config
@@ -0,0 +1,23 @@
+:org.apache.felix.configadmin.revision:=L"1"
+cancel="manager"
+delete="admin"
+edit="manager"
+edit[/.*jmx[.]acl.*/]="admin"
+edit[/.*org[.]apache[.]karaf[.]command[.]acl[.].+/]="admin"
+edit[/.*org[.]apache[.]karaf[.]service[.]acl[.].+/]="admin"
+felix.fileinstall.filename="file:/openhab/userdata/etc/org.apache.karaf.command.acl.config.cfg"
+property-append="manager"
+property-append[/.*jmx[.]acl.*/]="admin"
+property-append[/.*org[.]apache[.]karaf[.]command[.]acl[.].+/]="admin"
+property-append[/.*org[.]apache[.]karaf[.]service[.]acl[.].+/]="admin"
+property-delete="manager"
+property-delete[/.*jmx[.]acl.*/]="admin"
+property-delete[/.*org[.]apache[.]karaf[.]command[.]acl[.].+/]="admin"
+property-delete[/.*org[.]apache[.]karaf[.]service[.]acl[.].+/]="admin"
+property-set="manager"
+property-set[/.*jmx[.]acl.*/]="admin"
+property-set[/.*org[.]apache[.]karaf[.]command[.]acl[.].+/]="admin"
+property-set[/.*org[.]apache[.]karaf[.]service[.]acl[.].+/]="admin"
+service.bundleLocation="?"
+service.pid="org.apache.karaf.command.acl.config"
+update="manager"
diff --git a/openhab/openhab_userdata/config/org/apache/karaf/command/acl/feature.config b/openhab/openhab_userdata/config/org/apache/karaf/command/acl/feature.config
new file mode 100644
index 0000000..81c1460
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/apache/karaf/command/acl/feature.config
@@ -0,0 +1,8 @@
+:org.apache.felix.configadmin.revision:=L"1"
+felix.fileinstall.filename="file:/openhab/userdata/etc/org.apache.karaf.command.acl.feature.cfg"
+install="admin"
+service.bundleLocation="?"
+service.pid="org.apache.karaf.command.acl.feature"
+start="admin"
+stop="admin"
+uninstall="admin"
diff --git a/openhab/openhab_userdata/config/org/apache/karaf/command/acl/jaas.config b/openhab/openhab_userdata/config/org/apache/karaf/command/acl/jaas.config
new file mode 100644
index 0000000..517fe01
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/apache/karaf/command/acl/jaas.config
@@ -0,0 +1,5 @@
+:org.apache.felix.configadmin.revision:=L"1"
+felix.fileinstall.filename="file:/openhab/userdata/etc/org.apache.karaf.command.acl.jaas.cfg"
+service.bundleLocation="?"
+service.pid="org.apache.karaf.command.acl.jaas"
+update="admin"
diff --git a/openhab/openhab_userdata/config/org/apache/karaf/command/acl/kar.config b/openhab/openhab_userdata/config/org/apache/karaf/command/acl/kar.config
new file mode 100644
index 0000000..ba08d87
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/apache/karaf/command/acl/kar.config
@@ -0,0 +1,6 @@
+:org.apache.felix.configadmin.revision:=L"1"
+felix.fileinstall.filename="file:/openhab/userdata/etc/org.apache.karaf.command.acl.kar.cfg"
+install="admin"
+service.bundleLocation="?"
+service.pid="org.apache.karaf.command.acl.kar"
+uninstall="admin"
diff --git a/openhab/openhab_userdata/config/org/apache/karaf/command/acl/scope_bundle.config b/openhab/openhab_userdata/config/org/apache/karaf/command/acl/scope_bundle.config
new file mode 100644
index 0000000..cce6495
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/apache/karaf/command/acl/scope_bundle.config
@@ -0,0 +1,13 @@
+:org.apache.felix.configadmin.revision:=L"1"
+admin="org.apache.karaf.admin.command"
+config="org.apache.karaf.shell.config"
+features="org.apache.karaf.features.command"
+felix.fileinstall.filename="file:/openhab/userdata/etc/org.apache.karaf.command.acl.scope_bundle.cfg"
+jaas="org.apache.karaf.jaas.command"
+log="org.apache.karaf.shell.log"
+osgi="org.apache.karaf.shell.osgi"
+packages="org.apache.karaf.shell.packages"
+service.bundleLocation="?"
+service.pid="org.apache.karaf.command.acl.scope_bundle"
+shell="org.apache.karaf.shell.commands"
+ssh="org.apache.karaf.shell.ssh"
diff --git a/openhab/openhab_userdata/config/org/apache/karaf/command/acl/shell.config b/openhab/openhab_userdata/config/org/apache/karaf/command/acl/shell.config
new file mode 100644
index 0000000..7bfe320
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/apache/karaf/command/acl/shell.config
@@ -0,0 +1,8 @@
+:org.apache.felix.configadmin.revision:=L"1"
+exec="admin"
+felix.fileinstall.filename="file:/openhab/userdata/etc/org.apache.karaf.command.acl.shell.cfg"
+java="admin"
+nano="admin"
+new="admin"
+service.bundleLocation="?"
+service.pid="org.apache.karaf.command.acl.shell"
diff --git a/openhab/openhab_userdata/config/org/apache/karaf/command/acl/system.config b/openhab/openhab_userdata/config/org/apache/karaf/command/acl/system.config
new file mode 100644
index 0000000..54c2146
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/apache/karaf/command/acl/system.config
@@ -0,0 +1,9 @@
+:org.apache.felix.configadmin.revision:=L"1"
+felix.fileinstall.filename="file:/openhab/userdata/etc/org.apache.karaf.command.acl.system.cfg"
+property="admin"
+service.bundleLocation="?"
+service.pid="org.apache.karaf.command.acl.system"
+shutdown="admin"
+start-level="admin\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ admin\ can\ set\ any\ start\ level,\ including\ <\ 100"
+start-level[/.*[1-9][0-9][0-9]+.*/]="manager\ #\ manager\ can\ set\ startlevels\ above\ 100"
+start-level[/[^0-9]*/]="viewer\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ viewer\ can\ obtain\ the\ current\ start\ level"
diff --git a/openhab/openhab_userdata/config/org/apache/karaf/features.config b/openhab/openhab_userdata/config/org/apache/karaf/features.config
new file mode 100644
index 0000000..1f6e214
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/apache/karaf/features.config
@@ -0,0 +1,9 @@
+:org.apache.felix.configadmin.revision:=L"1"
+autoRefresh="true"
+configCfgStore="false"
+featuresBoot="instance/4.4.3,\ package/4.4.3,\ log/4.4.3,\ ssh/4.4.3,\ framework/4.4.3,\ system/4.4.3,\ eventadmin/4.4.3,\ feature/4.4.3,\ shell/4.4.3,\ service/4.4.3,\ jaas/4.4.3,\ openhab-runtime-base,\ openhab-runtime-ui,\ deployer/4.4.3,\ diagnostic/4.4.3,\ bundle/4.4.3,\ config/4.4.3,\ kar/4.4.3"
+featuresBootAsynchronous="false"
+featuresRepositories="mvn:org.openhab.distro/distro/4.0.3/xml/features,\ mvn:org.openhab.distro/openhab-addons/4.0.3/xml/features,\ mvn:org.apache.karaf.features/framework/4.4.3/xml/features,\ mvn:org.apache.karaf.features/standard/4.4.3/xml/features"
+felix.fileinstall.filename="file:/openhab/userdata/etc/org.apache.karaf.features.cfg"
+service.bundleLocation="?"
+service.pid="org.apache.karaf.features"
diff --git a/openhab/openhab_userdata/config/org/apache/karaf/features/repos.config b/openhab/openhab_userdata/config/org/apache/karaf/features/repos.config
new file mode 100644
index 0000000..72d9d6b
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/apache/karaf/features/repos.config
@@ -0,0 +1,41 @@
+:org.apache.felix.configadmin.revision:=L"1"
+activemq="mvn:org.apache.activemq/activemq-karaf/RELEASE/xml/features"
+aries-cdi="mvn:org.apache.aries.cdi/aries-cdi-feature/RELEASE/xml/features"
+aries-jpa="mvn:org.apache.aries.jpa/jpa-features/RELEASE/xml/features"
+aries-rsa="mvn:org.apache.aries.rsa/rsa-features/RELEASE/xml/features"
+aries.jax.rs.whiteboard="mvn:org.apache.aries.jax.rs/org.apache.aries.jax.rs.features/RELEASE/xml"
+artemis="mvn:org.apache.activemq/artemis-features/RELEASE/xml/features"
+brave="mvn:io.zipkin.brave.karaf/brave-features/RELEASE/xml/features"
+camel="mvn:org.apache.camel.karaf/apache-camel/RELEASE/xml/features"
+camel-extras="mvn:org.apache-extras.camel-extra.karaf/camel-extra/RELEASE/xml/features"
+cave="mvn:org.apache.karaf.cave/apache-karaf-cave/RELEASE/xml/features"
+cellar="mvn:org.apache.karaf.cellar/apache-karaf-cellar/RELEASE/xml/features"
+cxf="mvn:org.apache.cxf.karaf/apache-cxf/RELEASE/xml/features"
+cxf-dosgi="mvn:org.apache.cxf.dosgi/cxf-dosgi/RELEASE/xml/features"
+cxf-dosgi-samples="mvn:org.apache.cxf.dosgi/cxf-dosgi-samples/RELEASE/xml/features"
+cxf-xkms="mvn:org.apache.cxf.services.xkms/cxf-services-xkms-features/RELEASE/xml"
+decanter="mvn:org.apache.karaf.decanter/apache-karaf-decanter/RELEASE/xml/features"
+ecf="http://download.eclipse.org/rt/ecf/RELEASE/site.p2/karaf-features.xml"
+eclipsesource-jaxrs="mvn:com.eclipsesource.jaxrs/features/RELEASE/xml/features"
+enterprise="mvn:org.apache.karaf.features/enterprise/4.4.3/xml/features"
+felix.fileinstall.filename="file:/openhab/userdata/etc/org.apache.karaf.features.repos.cfg"
+hawtio="mvn:io.hawt/hawtio-karaf/RELEASE/xml/features"
+hibernate="mvn:org.hibernate/hibernate-osgi/RELEASE/xml/karaf"
+ignite="mvn:org.apache.ignite/ignite-osgi-karaf/RELEASE/xml/features"
+jclouds="mvn:org.apache.jclouds.karaf/jclouds-karaf/RELEASE/xml/features"
+openejb="mvn:org.apache.openejb/openejb-feature/RELEASE/xml/features"
+openjpa="mvn:org.apache.openjpa/openjpa-features/RELEASE/xml/features"
+pax-cdi="mvn:org.ops4j.pax.cdi/pax-cdi-features/RELEASE/xml/features"
+pax-jdbc="mvn:org.ops4j.pax.jdbc/pax-jdbc-features/RELEASE/xml/features"
+pax-jms="mvn:org.ops4j.pax.jms/pax-jms-features/RELEASE/xml/features"
+pax-jpa="mvn:org.ops4j.pax.jpa/pax-jpa-features/RELEASE/xml/features"
+pax-keycloak="mvn:org.ops4j.pax.keycloak/pax-keycloak-features/RELEASE/xml/features"
+pax-transx="mvn:org.ops4j.pax.transx/pax-transx-features/RELEASE/xml/features"
+pax-web="mvn:org.ops4j.pax.web/pax-web-features/RELEASE/xml/features"
+pax-wicket="mvn:org.ops4j.pax.wicket/pax-wicket-features/RELEASE/xml/features"
+service.bundleLocation="?"
+service.pid="org.apache.karaf.features.repos"
+sling="mvn:org.apache.sling/org.apache.sling.karaf-features/RELEASE/xml/features"
+spring="mvn:org.apache.karaf.features/spring/4.4.3/xml/features"
+spring-legacy="mvn:org.apache.karaf.features/spring-legacy/4.4.3/xml/features"
+wicket="mvn:org.ops4j.pax.wicket/features/RELEASE/xml/features"
diff --git a/openhab/openhab_userdata/config/org/apache/karaf/http.config b/openhab/openhab_userdata/config/org/apache/karaf/http.config
new file mode 100644
index 0000000..eaae903
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/apache/karaf/http.config
@@ -0,0 +1,3 @@
+:org.apache.felix.configadmin.revision:=L"1"
+_felix_.cm.newConfiguration=B"true"
+service.pid="org.apache.karaf.http"
diff --git a/openhab/openhab_userdata/config/org/apache/karaf/jaas.config b/openhab/openhab_userdata/config/org/apache/karaf/jaas.config
new file mode 100644
index 0000000..f527887
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/apache/karaf/jaas.config
@@ -0,0 +1,10 @@
+:org.apache.felix.configadmin.revision:=L"1"
+encryption.algorithm="SHA-256"
+encryption.enabled="true"
+encryption.encoding="hexadecimal"
+encryption.name="basic"
+encryption.prefix="{CRYPT}"
+encryption.suffix="{CRYPT}"
+felix.fileinstall.filename="file:/openhab/userdata/etc/org.apache.karaf.jaas.cfg"
+service.bundleLocation="?"
+service.pid="org.apache.karaf.jaas"
diff --git a/openhab/openhab_userdata/config/org/apache/karaf/kar.config b/openhab/openhab_userdata/config/org/apache/karaf/kar.config
new file mode 100644
index 0000000..2b7bcdd
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/apache/karaf/kar.config
@@ -0,0 +1,7 @@
+:org.apache.felix.configadmin.revision:=L"1"
+felix.fileinstall.filename="file:/openhab/userdata/etc/org.apache.karaf.kar.cfg"
+karStorage="/openhab/userdata/tmp/kar"
+noAutoRefreshBundles="false"
+noAutoStartBundles="false"
+service.bundleLocation="?"
+service.pid="org.apache.karaf.kar"
diff --git a/openhab/openhab_userdata/config/org/apache/karaf/log.config b/openhab/openhab_userdata/config/org/apache/karaf/log.config
new file mode 100644
index 0000000..36f7554
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/apache/karaf/log.config
@@ -0,0 +1,6 @@
+:org.apache.felix.configadmin.revision:=L"1"
+felix.fileinstall.filename="file:/openhab/userdata/etc/org.apache.karaf.log.cfg"
+pattern="%d{HH:mm:ss.SSS}\ [%-5.5p]\ [%-37.37c]\ -\ %h{%m}%n"
+service.bundleLocation="?"
+service.pid="org.apache.karaf.log"
+size="500"
diff --git a/openhab/openhab_userdata/config/org/apache/karaf/shell.config b/openhab/openhab_userdata/config/org/apache/karaf/shell.config
new file mode 100644
index 0000000..636e6c9
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/apache/karaf/shell.config
@@ -0,0 +1,13 @@
+:org.apache.felix.configadmin.revision:=L"1"
+completionMode="GLOBAL"
+disableEofExit="false"
+disableLogout="false"
+felix.fileinstall.filename="file:/openhab/userdata/etc/org.apache.karaf.shell.cfg"
+hostKey="/openhab/userdata/etc/host.key"
+service.bundleLocation="?"
+service.pid="org.apache.karaf.shell"
+sftpEnabled="true"
+sshHost="127.0.0.1"
+sshIdleTimeout="1800000"
+sshPort="8101"
+sshRealm="karaf"
diff --git a/openhab/openhab_userdata/config/org/jupnp.config b/openhab/openhab_userdata/config/org/jupnp.config
new file mode 100644
index 0000000..6969160
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/jupnp.config
@@ -0,0 +1,7 @@
+:org.apache.felix.configadmin.revision:=L"1"
+asyncThreadPoolSize="30"
+felix.fileinstall.filename="file:/openhab/userdata/etc/org.jupnp.cfg"
+multicastResponsePort="0"
+service.bundleLocation="?"
+service.pid="org.jupnp"
+threadPoolSize="15"
diff --git a/openhab/openhab_userdata/config/org/openhab/addons.config b/openhab/openhab_userdata/config/org/openhab/addons.config
new file mode 100644
index 0000000..74bb0fe
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/openhab/addons.config
@@ -0,0 +1,3 @@
+:org.apache.felix.configadmin.revision:=L"1"
+_felix_.cm.newConfiguration=B"true"
+service.pid="org.openhab.addons"
diff --git a/openhab/openhab_userdata/config/org/openhab/audio.config b/openhab/openhab_userdata/config/org/openhab/audio.config
new file mode 100644
index 0000000..01153d2
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/openhab/audio.config
@@ -0,0 +1,5 @@
+:org.apache.felix.configadmin.revision:=L"1"
+defaultSink="enhancedjavasound"
+felix.fileinstall.filename="file:/openhab/userdata/etc/org.openhab.audio.cfg"
+service.bundleLocation="?"
+service.pid="org.openhab.audio"
diff --git a/openhab/openhab_userdata/config/org/openhab/autoupdate.config b/openhab/openhab_userdata/config/org/openhab/autoupdate.config
new file mode 100644
index 0000000..c2731e9
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/openhab/autoupdate.config
@@ -0,0 +1,3 @@
+:org.apache.felix.configadmin.revision:=L"1"
+sendOptimisticUpdates="true"
+service.pid="org.openhab.autoupdate"
diff --git a/openhab/openhab_userdata/config/org/openhab/basicui.config b/openhab/openhab_userdata/config/org/openhab/basicui.config
new file mode 100644
index 0000000..2ce4ad3
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/openhab/basicui.config
@@ -0,0 +1,3 @@
+:org.apache.felix.configadmin.revision:=L"1"
+_felix_.cm.newConfiguration=B"true"
+service.pid="org.openhab.basicui"
diff --git a/openhab/openhab_userdata/config/org/openhab/core/service/WatchService/4c0ca031-fc00-41d8-8c46-4474cc442330.config b/openhab/openhab_userdata/config/org/openhab/core/service/WatchService/4c0ca031-fc00-41d8-8c46-4474cc442330.config
new file mode 100644
index 0000000..44fe25e
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/openhab/core/service/WatchService/4c0ca031-fc00-41d8-8c46-4474cc442330.config
@@ -0,0 +1,6 @@
+:org.apache.felix.configadmin.revision:=L"1"
+name="configWatcher"
+path="/openhab/conf"
+service.bundleLocation="?"
+service.factoryPid="org.openhab.core.service.WatchService"
+service.pid="org.openhab.core.service.WatchService.4c0ca031-fc00-41d8-8c46-4474cc442330"
diff --git a/openhab/openhab_userdata/config/org/openhab/folder.config b/openhab/openhab_userdata/config/org/openhab/folder.config
new file mode 100644
index 0000000..4eec7da
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/openhab/folder.config
@@ -0,0 +1,8 @@
+:org.apache.felix.configadmin.revision:=L"1"
+items="items"
+persistence="persist"
+rules="rules"
+scripts="script"
+service.pid="org.openhab.folder"
+sitemaps="sitemap"
+things="things"
diff --git a/openhab/openhab_userdata/config/org/openhab/rrd4j.config b/openhab/openhab_userdata/config/org/openhab/rrd4j.config
new file mode 100644
index 0000000..9f8418f
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/openhab/rrd4j.config
@@ -0,0 +1,3 @@
+:org.apache.felix.configadmin.revision:=L"1"
+_felix_.cm.newConfiguration=B"true"
+service.pid="org.openhab.rrd4j"
diff --git a/openhab/openhab_userdata/config/org/openhab/runtime.config b/openhab/openhab_userdata/config/org/openhab/runtime.config
new file mode 100644
index 0000000..699b0cd
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/openhab/runtime.config
@@ -0,0 +1,3 @@
+:org.apache.felix.configadmin.revision:=L"1"
+_felix_.cm.newConfiguration=B"true"
+service.pid="org.openhab.runtime"
diff --git a/openhab/openhab_userdata/config/org/openhab/services.config b/openhab/openhab_userdata/config/org/openhab/services.config
new file mode 100644
index 0000000..17cc80a
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/openhab/services.config
@@ -0,0 +1,3 @@
+:org.apache.felix.configadmin.revision:=L"1"
+_felix_.cm.newConfiguration=B"true"
+service.pid="org.openhab.services"
diff --git a/openhab/openhab_userdata/config/org/openhab/startlevel.config b/openhab/openhab_userdata/config/org/openhab/startlevel.config
new file mode 100644
index 0000000..d90ce9f
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/openhab/startlevel.config
@@ -0,0 +1,8 @@
+20="dsl:items,managed:item,dsl:things,managed:thing,managed:itemchannellink,dsl:persist,managed:metadata"
+30="persistence:restore,automation:scriptEngineFactories"
+40="dsl:rules,managed:rule,rules:refresh,rules:dslprovider"
+50="ruleengine:start"
+70="dsl:sitemap"
+80="things:handler"
+:org.apache.felix.configadmin.revision:=L"1"
+service.pid="org.openhab.startlevel"
diff --git a/openhab/openhab_userdata/config/org/openhab/threadpool.config b/openhab/openhab_userdata/config/org/openhab/threadpool.config
new file mode 100644
index 0000000..ed1a881
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/openhab/threadpool.config
@@ -0,0 +1,5 @@
+:org.apache.felix.configadmin.revision:=L"1"
+discovery="5"
+safeCall="10"
+service.pid="org.openhab.threadpool"
+thingHandler="5"
diff --git a/openhab/openhab_userdata/config/org/openhab/voice.config b/openhab/openhab_userdata/config/org/openhab/voice.config
new file mode 100644
index 0000000..f1f1e95
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/openhab/voice.config
@@ -0,0 +1,5 @@
+:org.apache.felix.configadmin.revision:=L"1"
+defaultHLI="rulehli"
+felix.fileinstall.filename="file:/openhab/userdata/etc/org.openhab.voice.cfg"
+service.bundleLocation="?"
+service.pid="org.openhab.voice"
diff --git a/openhab/openhab_userdata/config/org/ops4j/pax/logging.config b/openhab/openhab_userdata/config/org/ops4j/pax/logging.config
new file mode 100644
index 0000000..40914c4
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/ops4j/pax/logging.config
@@ -0,0 +1,5 @@
+:org.apache.felix.configadmin.revision:=L"1"
+felix.fileinstall.filename="file:/openhab/userdata/etc/org.ops4j.pax.logging.cfg"
+org.ops4j.pax.logging.log4j2.config.file="/openhab/userdata/etc/log4j2.xml"
+service.bundleLocation="?"
+service.pid="org.ops4j.pax.logging"
diff --git a/openhab/openhab_userdata/config/org/ops4j/pax/url/mvn.config b/openhab/openhab_userdata/config/org/ops4j/pax/url/mvn.config
new file mode 100644
index 0000000..8da6e79
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/ops4j/pax/url/mvn.config
@@ -0,0 +1,17 @@
+:org.apache.felix.configadmin.revision:=L"1"
+felix.fileinstall.filename="file:/openhab/userdata/etc/org.ops4j.pax.url.mvn.cfg"
+org.ops4j.pax.url.mvn.connection.bufferSize="8192"
+org.ops4j.pax.url.mvn.connection.retryCount="3"
+org.ops4j.pax.url.mvn.defaultRepositories="file:/openhab/runtime/system@id\=system.repository@snapshots,\ file:/openhab/userdata/tmp/kar@id\=kar.repository@multi@snapshots,\ file:/openhab/userdata/system@id\=child.system.repository@snapshots"
+org.ops4j.pax.url.mvn.localRepository="/openhab/userdata/tmp/mvn"
+org.ops4j.pax.url.mvn.repositories="https://openhab.jfrog.io/openhab/libs-release@id\=openhab"
+org.ops4j.pax.url.mvn.socket.connectionTimeout="5000"
+org.ops4j.pax.url.mvn.socket.keepAlive="false"
+org.ops4j.pax.url.mvn.socket.linger="-1"
+org.ops4j.pax.url.mvn.socket.readTimeout="30000"
+org.ops4j.pax.url.mvn.socket.reuseAddress="false"
+org.ops4j.pax.url.mvn.socket.tcpNoDelay="true"
+org.ops4j.pax.url.mvn.timeout="5000"
+org.ops4j.pax.url.mvn.useFallbackRepositories="false"
+service.bundleLocation="?"
+service.pid="org.ops4j.pax.url.mvn"
diff --git a/openhab/openhab_userdata/config/org/ops4j/pax/web.config b/openhab/openhab_userdata/config/org/ops4j/pax/web.config
new file mode 100644
index 0000000..70b1c11
--- /dev/null
+++ b/openhab/openhab_userdata/config/org/ops4j/pax/web.config
@@ -0,0 +1,13 @@
+:org.apache.felix.configadmin.revision:=L"1"
+felix.fileinstall.filename="file:/openhab/userdata/etc/org.ops4j.pax.web.cfg"
+org.ops4j.pax.web.config.file="/openhab/runtime/etc/jetty.xml"
+org.ops4j.pax.web.server.idleTimeout="300000"
+org.ops4j.pax.web.server.maxThreads="50"
+org.ops4j.pax.web.server.minThreads="2"
+org.ops4j.pax.web.session.timeout="10"
+org.ops4j.pax.web.ssl.clientauthneeded="false"
+org.ops4j.pax.web.ssl.clientauthwanted="false"
+org.osgi.service.http.secure.enabled="true"
+org.osgi.service.http.useNIO="true"
+service.bundleLocation="?"
+service.pid="org.ops4j.pax.web"
diff --git a/openhab/openhab_userdata/config/org_apache_felix_cm_impl_DynamicBindings.config b/openhab/openhab_userdata/config/org_apache_felix_cm_impl_DynamicBindings.config
new file mode 100644
index 0000000..e0d0c22
--- /dev/null
+++ b/openhab/openhab_userdata/config/org_apache_felix_cm_impl_DynamicBindings.config
@@ -0,0 +1 @@
+org.openhab.addons="mvn:org.openhab.core.bundles/org.openhab.core.karaf/4.0.3"
diff --git a/openhab/openhab_userdata/config/profile.config b/openhab/openhab_userdata/config/profile.config
new file mode 100644
index 0000000..89a3f91
--- /dev/null
+++ b/openhab/openhab_userdata/config/profile.config
@@ -0,0 +1,112 @@
+:org.apache.felix.configadmin.revision:=L"1"
+attribute.overlay="true"
+attribute.parents="generated-startup\ generated-boot\ generated-installed"
+feature.bundle="bundle"
+feature.config="config"
+feature.deployer="deployer"
+feature.diagnostic="diagnostic"
+feature.distro-kar/4.0.3="distro-kar/4.0.3"
+feature.distro/4.0.3="distro/4.0.3"
+feature.eventadmin="eventadmin"
+feature.feature="feature"
+feature.framework="framework"
+feature.instance="instance"
+feature.jaas="jaas"
+feature.kar="kar"
+feature.log="log"
+feature.openhab-core-addon-marketplace/4.0.3="openhab-core-addon-marketplace/4.0.3"
+feature.openhab-core-auth-jaas/4.0.3="openhab-core-auth-jaas/4.0.3"
+feature.openhab-core-auth-oauth2client/4.0.3="openhab-core-auth-oauth2client/4.0.3"
+feature.openhab-core-automation-module-media/4.0.3="openhab-core-automation-module-media/4.0.3"
+feature.openhab-core-automation-module-script-rulesupport/4.0.3="openhab-core-automation-module-script-rulesupport/4.0.3"
+feature.openhab-core-automation-module-script/4.0.3="openhab-core-automation-module-script/4.0.3"
+feature.openhab-core-automation-rest/4.0.3="openhab-core-automation-rest/4.0.3"
+feature.openhab-core-base/4.0.3="openhab-core-base/4.0.3"
+feature.openhab-core-io-bin2json/4.0.3="openhab-core-io-bin2json/4.0.3"
+feature.openhab-core-io-console-karaf/4.0.3="openhab-core-io-console-karaf/4.0.3"
+feature.openhab-core-io-http-auth/4.0.3="openhab-core-io-http-auth/4.0.3"
+feature.openhab-core-io-rest-audio/4.0.3="openhab-core-io-rest-audio/4.0.3"
+feature.openhab-core-io-rest-auth/4.0.3="openhab-core-io-rest-auth/4.0.3"
+feature.openhab-core-io-rest-log/4.0.3="openhab-core-io-rest-log/4.0.3"
+feature.openhab-core-io-rest-mdns/4.0.3="openhab-core-io-rest-mdns/4.0.3"
+feature.openhab-core-io-rest-sitemap/4.0.3="openhab-core-io-rest-sitemap/4.0.3"
+feature.openhab-core-io-rest-swagger/4.0.3="openhab-core-io-rest-swagger/4.0.3"
+feature.openhab-core-io-rest-transform/4.0.3="openhab-core-io-rest-transform/4.0.3"
+feature.openhab-core-io-rest-voice/4.0.3="openhab-core-io-rest-voice/4.0.3"
+feature.openhab-core-io-transport-coap/4.0.3="openhab-core-io-transport-coap/4.0.3"
+feature.openhab-core-io-transport-http/4.0.3="openhab-core-io-transport-http/4.0.3"
+feature.openhab-core-io-transport-mdns/4.0.3="openhab-core-io-transport-mdns/4.0.3"
+feature.openhab-core-io-transport-modbus/4.0.3="openhab-core-io-transport-modbus/4.0.3"
+feature.openhab-core-io-transport-mqtt/4.0.3="openhab-core-io-transport-mqtt/4.0.3"
+feature.openhab-core-io-transport-serial-javacomm/4.0.3="openhab-core-io-transport-serial-javacomm/4.0.3"
+feature.openhab-core-io-transport-upnp/4.0.3="openhab-core-io-transport-upnp/4.0.3"
+feature.openhab-core-io-websocket/4.0.3="openhab-core-io-websocket/4.0.3"
+feature.openhab-core-model-item-ide/4.0.3="openhab-core-model-item-ide/4.0.3"
+feature.openhab-core-model-item/4.0.3="openhab-core-model-item/4.0.3"
+feature.openhab-core-model-lsp/4.0.3="openhab-core-model-lsp/4.0.3"
+feature.openhab-core-model-persistence-ide/4.0.3="openhab-core-model-persistence-ide/4.0.3"
+feature.openhab-core-model-persistence/4.0.3="openhab-core-model-persistence/4.0.3"
+feature.openhab-core-model-rule-ide/4.0.3="openhab-core-model-rule-ide/4.0.3"
+feature.openhab-core-model-rule/4.0.3="openhab-core-model-rule/4.0.3"
+feature.openhab-core-model-script-ide/4.0.3="openhab-core-model-script-ide/4.0.3"
+feature.openhab-core-model-script/4.0.3="openhab-core-model-script/4.0.3"
+feature.openhab-core-model-sitemap-ide/4.0.3="openhab-core-model-sitemap-ide/4.0.3"
+feature.openhab-core-model-sitemap/4.0.3="openhab-core-model-sitemap/4.0.3"
+feature.openhab-core-model-thing-ide/4.0.3="openhab-core-model-thing-ide/4.0.3"
+feature.openhab-core-model-thing/4.0.3="openhab-core-model-thing/4.0.3"
+feature.openhab-core-storage-json/4.0.3="openhab-core-storage-json/4.0.3"
+feature.openhab-core-ui-icon/4.0.3="openhab-core-ui-icon/4.0.3"
+feature.openhab-core-ui/4.0.3="openhab-core-ui/4.0.3"
+feature.openhab-runtime-base="openhab-runtime-base"
+feature.openhab-runtime-base/4.0.3="openhab-runtime-base/4.0.3"
+feature.openhab-runtime-certificate/4.0.3="openhab-runtime-certificate/4.0.3"
+feature.openhab-runtime-ui="openhab-runtime-ui"
+feature.openhab-runtime-ui/4.0.3="openhab-runtime-ui/4.0.3"
+feature.openhab-transport-coap/4.0.3="openhab-transport-coap/4.0.3"
+feature.openhab-transport-http/4.0.3="openhab-transport-http/4.0.3"
+feature.openhab-transport-mdns/4.0.3="openhab-transport-mdns/4.0.3"
+feature.openhab-transport-modbus/4.0.3="openhab-transport-modbus/4.0.3"
+feature.openhab-transport-mqtt/4.0.3="openhab-transport-mqtt/4.0.3"
+feature.openhab-transport-serial/4.0.3="openhab-transport-serial/4.0.3"
+feature.openhab-transport-upnp/4.0.3="openhab-transport-upnp/4.0.3"
+feature.openhab.inc-model-core/4.0.3="openhab.inc-model-core/4.0.3"
+feature.openhab.tp-asm/4.0.3="openhab.tp-asm/4.0.3"
+feature.openhab.tp-base/4.0.3="openhab.tp-base/4.0.3"
+feature.openhab.tp-coap/4.0.3="openhab.tp-coap/4.0.3"
+feature.openhab.tp-commons-net/4.0.3="openhab.tp-commons-net/4.0.3"
+feature.openhab.tp-cxf/4.0.3="openhab.tp-cxf/4.0.3"
+feature.openhab.tp-gson/4.0.3="openhab.tp-gson/4.0.3"
+feature.openhab.tp-hivemqclient/4.0.3="openhab.tp-hivemqclient/4.0.3"
+feature.openhab.tp-httpclient/4.0.3="openhab.tp-httpclient/4.0.3"
+feature.openhab.tp-jackson/4.0.3="openhab.tp-jackson/4.0.3"
+feature.openhab.tp-jax-rs-whiteboard/4.0.3="openhab.tp-jax-rs-whiteboard/4.0.3"
+feature.openhab.tp-jaxb/4.0.3="openhab.tp-jaxb/4.0.3"
+feature.openhab.tp-jaxws/4.0.3="openhab.tp-jaxws/4.0.3"
+feature.openhab.tp-jbbp/4.0.3="openhab.tp-jbbp/4.0.3"
+feature.openhab.tp-jmdns/4.0.3="openhab.tp-jmdns/4.0.3"
+feature.openhab.tp-jna/4.0.3="openhab.tp-jna/4.0.3"
+feature.openhab.tp-jollyday/4.0.3="openhab.tp-jollyday/4.0.3"
+feature.openhab.tp-jose4j/4.0.3="openhab.tp-jose4j/4.0.3"
+feature.openhab.tp-jupnp/4.0.3="openhab.tp-jupnp/4.0.3"
+feature.openhab.tp-lsp4j/4.0.3="openhab.tp-lsp4j/4.0.3"
+feature.openhab.tp-netty/4.0.3="openhab.tp-netty/4.0.3"
+feature.openhab.tp-serial-javacomm/4.0.3="openhab.tp-serial-javacomm/4.0.3"
+feature.openhab.tp-serial-rxtx/4.0.3="openhab.tp-serial-rxtx/4.0.3"
+feature.openhab.tp-swagger-jaxrs/4.0.3="openhab.tp-swagger-jaxrs/4.0.3"
+feature.openhab.tp-xtext-ide/4.0.3="openhab.tp-xtext-ide/4.0.3"
+feature.openhab.tp-xtext/4.0.3="openhab.tp-xtext/4.0.3"
+feature.package="package"
+feature.service="service"
+feature.shell="shell"
+feature.ssh="ssh"
+feature.system="system"
+feature.wrap="wrap"
+feature.wrapper="wrapper"
+felix.fileinstall.filename="file:/openhab/userdata/etc/profile.cfg"
+repository.mvn:org.apache.karaf.features/framework/4.4.3/xml/features="mvn:org.apache.karaf.features/framework/4.4.3/xml/features"
+repository.mvn:org.apache.karaf.features/standard/4.4.3/xml/features="mvn:org.apache.karaf.features/standard/4.4.3/xml/features"
+repository.mvn:org.openhab.distro/distro-kar/4.0.3/xml/features="mvn:org.openhab.distro/distro-kar/4.0.3/xml/features"
+repository.mvn:org.openhab.distro/distro/4.0.3/xml/features="mvn:org.openhab.distro/distro/4.0.3/xml/features"
+repository.mvn:org.openhab.distro/openhab-addons/4.0.3/xml/features="mvn:org.openhab.distro/openhab-addons/4.0.3/xml/features"
+service.bundleLocation="?"
+service.pid="profile"
diff --git a/openhab/openhab_userdata/etc/all.policy b/openhab/openhab_userdata/etc/all.policy
new file mode 100644
index 0000000..7585f22
--- /dev/null
+++ b/openhab/openhab_userdata/etc/all.policy
@@ -0,0 +1,22 @@
+//===========================================================================
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//===========================================================================
+
+grant {
+ permission java.security.AllPermission;
+};
diff --git a/openhab/openhab_userdata/etc/branding-ssh.properties b/openhab/openhab_userdata/etc/branding-ssh.properties
new file mode 100644
index 0000000..df03670
--- /dev/null
+++ b/openhab/openhab_userdata/etc/branding-ssh.properties
@@ -0,0 +1,12 @@
+welcome = \r\n\
+\u001B[91m \u001B[97m _ _ _ ____ \u001B[0m\r\n\
+\u001B[91m ___ ___ ___ ___ \u001B[97m| | | | / \\ | __ ) \u001B[0m\r\n\
+\u001B[91m / _ \\ / _ \\ / _ \\ / _ \\ \u001B[97m| |_| | / _ \\ | _ \\ \u001B[0m\r\n\
+\u001B[91m | (_) | (_) | __/| | | |\u001B[97m| _ | / ___ \\ | |_) )\u001B[0m\r\n\
+\u001B[91m \\___/| __/ \\___/|_| |_|\u001B[97m|_| |_|/_/ \\_\\|____/ \u001B[0m\r\n\
+\u001B[91m |_| \u001B[0m 4.0.3 - Release Build\u001B[0m\r\n\
+\r\n\
+Use '\u001B[1m\u001B[0m' for a list of available commands\r\n\
+ and '\u001B[1m[cmd] --help\u001B[0m' for help on a specific command.\r\n\
+To exit, use '\u001B[1m\u001B[0m' or '\u001B[1mlogout\u001B[0m'.\r\n
+prompt = \u001B[36mopenhab>\u001B[0m
diff --git a/openhab/openhab_userdata/etc/branding.properties b/openhab/openhab_userdata/etc/branding.properties
new file mode 100644
index 0000000..df03670
--- /dev/null
+++ b/openhab/openhab_userdata/etc/branding.properties
@@ -0,0 +1,12 @@
+welcome = \r\n\
+\u001B[91m \u001B[97m _ _ _ ____ \u001B[0m\r\n\
+\u001B[91m ___ ___ ___ ___ \u001B[97m| | | | / \\ | __ ) \u001B[0m\r\n\
+\u001B[91m / _ \\ / _ \\ / _ \\ / _ \\ \u001B[97m| |_| | / _ \\ | _ \\ \u001B[0m\r\n\
+\u001B[91m | (_) | (_) | __/| | | |\u001B[97m| _ | / ___ \\ | |_) )\u001B[0m\r\n\
+\u001B[91m \\___/| __/ \\___/|_| |_|\u001B[97m|_| |_|/_/ \\_\\|____/ \u001B[0m\r\n\
+\u001B[91m |_| \u001B[0m 4.0.3 - Release Build\u001B[0m\r\n\
+\r\n\
+Use '\u001B[1m\u001B[0m' for a list of available commands\r\n\
+ and '\u001B[1m[cmd] --help\u001B[0m' for help on a specific command.\r\n\
+To exit, use '\u001B[1m\u001B[0m' or '\u001B[1mlogout\u001B[0m'.\r\n
+prompt = \u001B[36mopenhab>\u001B[0m
diff --git a/openhab/openhab_userdata/etc/config.properties b/openhab/openhab_userdata/etc/config.properties
new file mode 100644
index 0000000..c46ef60
--- /dev/null
+++ b/openhab/openhab_userdata/etc/config.properties
@@ -0,0 +1,322 @@
+################################################################################
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+################################################################################
+
+#
+# This file lists Karaf default settings for this particular version of Karaf.
+# For easier maintenance when upgrading Karaf and to better document which
+# default values have changed, it is recommended to place any changes to
+# these values in a custom.properties file in the same folder as this file.
+# Each value specified in custom.properties will override the default value
+# here.
+#
+
+#
+# Properties file inclusions (as a space separated list of relative paths)
+# Included files will override the values specified in this file
+# NB: ${includes} properties files are mandatory, it means that Karaf will not start
+# if the include file is not found
+#
+${includes} = jre.properties custom.properties
+
+#
+# Properties file inclusions (as a space separated list of relative paths)
+# Included files will override the values specified in this file
+# NB: ${optionals} properties files are optionals, it means that Karaf will just
+# display a warning message but the bootstrap will be performed
+#
+# ${optionals} = my.properties
+
+#
+# Framework selection properties
+#
+karaf.framework=felix
+
+#
+# Location of the OSGi frameworks
+#
+karaf.framework.equinox=mvn\:org.eclipse.platform/org.eclipse.osgi/3.18.0
+karaf.framework.felix=mvn\:org.apache.felix/org.apache.felix.framework/7.0.5
+
+#
+# Framework config properties.
+#
+org.osgi.framework.system.packages= \
+ org.osgi.dto;version="1.1",\
+ org.osgi.resource;version="1.0",\
+ org.osgi.resource.dto;version="1.0";uses:="org.osgi.dto",\
+ org.osgi.framework;version="1.10",\
+ org.osgi.framework.dto;version="1.10";uses:="org.osgi.dto",\
+ org.osgi.framework.hooks.bundle;version="1.1";uses:="org.osgi.framework",\
+ org.osgi.framework.hooks.resolver;version="1.0";uses:="org.osgi.framework.wiring",\
+ org.osgi.framework.hooks.service;version="1.1";uses:="org.osgi.framework",\
+ org.osgi.framework.hooks.weaving;version="1.1";uses:="org.osgi.framework.wiring",\
+ org.osgi.framework.launch;version="1.2";uses:="org.osgi.framework",\
+ org.osgi.framework.namespace;version="1.1";uses:="org.osgi.resource",\
+ org.osgi.framework.startlevel;version="1.0";uses:="org.osgi.framework",\
+ org.osgi.framework.startlevel.dto;version="1.0";uses:="org.osgi.dto",\
+ org.osgi.framework.wiring;version="1.2";uses:="org.osgi.framework,org.osgi.resource",\
+ org.osgi.framework.wiring.dto;version="1.3";uses:="org.osgi.dto,org.osgi.resource.dto",\
+ org.osgi.service.condpermadmin;version="1.1.1";uses:="org.osgi.framework,org.osgi.service.permissionadmin",\
+ org.osgi.service.packageadmin;version="1.2";uses:="org.osgi.framework",org.osgi.service.permissionadmin;version="1.2",\
+ org.osgi.service.resolver;version="1.1";uses:="org.osgi.resource",\
+ org.osgi.service.startlevel;version="1.1";uses:="org.osgi.framework",\
+ org.osgi.service.url;version="1.0",\
+ org.osgi.util.tracker;version="1.5.2";uses:="org.osgi.framework",\
+ org.apache.karaf.version;version="4.4.3",\
+ org.apache.karaf.jaas.boot.principal;uses:=javax.security.auth;version="4.4.3",\
+ org.apache.karaf.jaas.boot;uses:="javax.security.auth,javax.security.auth.callback,javax.security.auth.login,javax.security.auth.spi,org.osgi.framework";version="4.4.3",\
+ org.apache.karaf.info;version="4.4.3",\
+ ${jre-${java.specification.version}}
+
+#
+# Extra packages appended after standard packages
+#
+org.osgi.framework.system.packages.extra = \
+ org.apache.karaf.branding, \
+ sun.misc, \
+ com.sun.jmx.remote.protocol, \
+ com.sun.jmx.remote.protocol.jmxmp, \
+ org.apache.karaf.jaas.boot.principal;uses:=javax.security.auth;version=4.4.3, \
+ org.apache.karaf.jaas.boot;uses:=\"javax.security.auth,javax.security.auth.callback,javax.security.auth.login,javax.security.auth.spi,org.osgi.framework\";version=4.4.3, \
+ org.apache.karaf.diagnostic.core;uses:=org.osgi.framework;version=4.4.3, \
+ org.apache.karaf.diagnostic.core.common;uses:=org.apache.karaf.diagnostic.core;version=4.4.3
+
+org.osgi.framework.system.capabilities= \
+ ${eecap-${java.specification.version}}, \
+ ${${karaf.framework}-capabilities}, \
+ ${karaf-capabilities}
+
+karaf-capabilities= \
+ osgi.service;objectClass:List=org.apache.karaf.info.ServerInfo
+
+felix-capabilities= \
+ osgi.service;objectClass:List=org.osgi.service.packageadmin.PackageAdmin, \
+ osgi.service;objectClass:List=org.osgi.service.resolver.Resolver, \
+ osgi.service;objectClass:List=org.osgi.service.startlevel.StartLevel
+
+equinox-capabilities= \
+ osgi.service;objectClass:List=java.lang.ClassLoader;equinox.classloader.type=contextClassLoader, \
+ osgi.service;objectClass:List=javax.xml.parsers.DocumentBuilderFactory, \
+ osgi.service;objectClass:List=javax.xml.parsers.SAXParserFactory, \
+ osgi.service;objectClass:List=org.eclipse.osgi.framework.log.FrameworkLog, \
+ osgi.service;objectClass:List=org.eclipse.osgi.framework.log.FrameworkLog;performance=true, \
+ osgi.service;objectClass:List=org.eclipse.osgi.service.datalocation.Location;type=eclipse.home.location, \
+ osgi.service;objectClass:List=org.eclipse.osgi.service.datalocation.Location;type=osgi.configuration.area, \
+ osgi.service;objectClass:List=org.eclipse.osgi.service.datalocation.Location;type=osgi.install.area, \
+ osgi.service;objectClass:List=org.eclipse.osgi.service.datalocation.Location;type=osgi.instance.area, \
+ osgi.service;objectClass:List=org.eclipse.osgi.service.datalocation.Location;type=osgi.user.area, \
+ osgi.service;objectClass:List=org.eclipse.osgi.service.debug.DebugOptions, \
+ osgi.service;objectClass:List=org.eclipse.osgi.service.environment.EnvironmentInfo, \
+ osgi.service;objectClass:List=org.eclipse.osgi.service.localization.BundleLocalization, \
+ osgi.service;objectClass:List="org.osgi.service.log.LogReaderService,org.eclipse.equinox.log.ExtendedLogReaderService", \
+ osgi.service;objectClass:List="org.osgi.service.log.LogService,org.eclipse.equinox.log.ExtendedLogService", \
+ osgi.service;objectClass:List=org.eclipse.osgi.service.security.TrustEngine;osgi.signedcontent.trust.engine=org.eclipse.osgi, \
+ osgi.service;objectClass:List=org.eclipse.osgi.service.urlconversion.URLConverter;protocol:List="bundleentry,bundleresource"
+
+eecap-18 = osgi.ee; osgi.ee="OSGi/Minimum"; version:List="1.0,1.1,1.2", \
+ osgi.ee; osgi.ee="JavaSE"; version:List="1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,9.0,10.0,11.0,13.0,14.0,15.0,16.0,17.0,18.0", \
+ osgi.ee; osgi.ee="JRE"; version:List="1.0,1.1", \
+ osgi.ee; osgi.ee="JavaSE/compact1"; version:List="1.8,9.0,10.0,11.0,13.0,14.0,15.0,16.0,17.0,18.0", \
+ osgi.ee; osgi.ee="JavaSE/compact2"; version:List="1.8,9.0,10.0,11.0,13.0,14.0,15.0,16.0,17.0,18.0", \
+ osgi.ee; osgi.ee="JavaSE/compact3"; version:List="1.8,9.0,10.0,11.0,13.0,14.0,15.0,16.0,17.0,18.0"
+eecap-17 = osgi.ee; osgi.ee="OSGi/Minimum"; version:List="1.0,1.1,1.2", \
+ osgi.ee; osgi.ee="JavaSE"; version:List="1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,9.0,10.0,11.0,13.0,14.0,15.0,16.0,17.0", \
+ osgi.ee; osgi.ee="JRE"; version:List="1.0,1.1", \
+ osgi.ee; osgi.ee="JavaSE/compact1"; version:List="1.8,9.0,10.0,11.0,13.0,14.0,15.0,16.0,17.0", \
+ osgi.ee; osgi.ee="JavaSE/compact2"; version:List="1.8,9.0,10.0,11.0,13.0,14.0,15.0,16.0,17.0", \
+ osgi.ee; osgi.ee="JavaSE/compact3"; version:List="1.8,9.0,10.0,11.0,13.0,14.0,15.0,16.0,17.0"
+eecap-16 = osgi.ee; osgi.ee="OSGi/Minimum"; version:List="1.0,1.1,1.2", \
+ osgi.ee; osgi.ee="JavaSE"; version:List="1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,9.0,10.0,11.0,13.0,14.0,15.0,16.0", \
+ osgi.ee; osgi.ee="JRE"; version:List="1.0,1.1", \
+ osgi.ee; osgi.ee="JavaSE/compact1"; version:List="1.8,9.0,10.0,11.0,13.0,14.0,15.0,16.0", \
+ osgi.ee; osgi.ee="JavaSE/compact2"; version:List="1.8,9.0,10.0,11.0,13.0,14.0,15.0,16.0", \
+ osgi.ee; osgi.ee="JavaSE/compact3"; version:List="1.8,9.0,10.0,11.0,13.0,14.0,15.0,16.0"
+eecap-15 = osgi.ee; osgi.ee="OSGi/Minimum"; version:List="1.0,1.1,1.2", \
+ osgi.ee; osgi.ee="JavaSE"; version:List="1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,9.0,10.0,11.0,13.0,14.0,15.0", \
+ osgi.ee; osgi.ee="JRE"; version:List="1.0,1.1", \
+ osgi.ee; osgi.ee="JavaSE/compact1"; version:List="1.8,9.0,10.0,11.0,13.0,14.0,15.0", \
+ osgi.ee; osgi.ee="JavaSE/compact2"; version:List="1.8,9.0,10.0,11.0,13.0,14.0,15.0", \
+ osgi.ee; osgi.ee="JavaSE/compact3"; version:List="1.8,9.0,10.0,11.0,13.0,14.0,15.0"
+eecap-14 = osgi.ee; osgi.ee="OSGi/Minimum"; version:List="1.0,1.1,1.2", \
+ osgi.ee; osgi.ee="JavaSE"; version:List="1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,9.0,10.0,11.0,13.0,14.0", \
+ osgi.ee; osgi.ee="JRE"; version:List="1.0,1.1", \
+ osgi.ee; osgi.ee="JavaSE/compact1"; version:List="1.8,9.0,10.0,11.0,13.0,14.0", \
+ osgi.ee; osgi.ee="JavaSE/compact2"; version:List="1.8,9.0,10.0,11.0,13.0,14.0", \
+ osgi.ee; osgi.ee="JavaSE/compact3"; version:List="1.8,9.0,10.0,11.0,13.0,14.0"
+eecap-13 = osgi.ee; osgi.ee="OSGi/Minimum"; version:List="1.0,1.1,1.2", \
+ osgi.ee; osgi.ee="JavaSE"; version:List="1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,9.0,10.0,11.0,13.0", \
+ osgi.ee; osgi.ee="JRE"; version:List="1.0,1.1", \
+ osgi.ee; osgi.ee="JavaSE/compact1"; version:List="1.8,9.0,10.0,11.0,13.0", \
+ osgi.ee; osgi.ee="JavaSE/compact2"; version:List="1.8,9.0,10.0,11.0,13.0", \
+ osgi.ee; osgi.ee="JavaSE/compact3"; version:List="1.8,9.0,10.0,11.0,13.0"
+eecap-11= osgi.ee; osgi.ee="OSGi/Minimum"; version:List="1.0,1.1,1.2", \
+ osgi.ee; osgi.ee="JavaSE"; version:List="1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,9.0,10.0,11.0", \
+ osgi.ee; osgi.ee="JRE"; version:List="1.0,1.1", \
+ osgi.ee; osgi.ee="JavaSE/compact1"; version:List="1.8,9.0,10.0,11.0", \
+ osgi.ee; osgi.ee="JavaSE/compact2"; version:List="1.8,9.0,10.0,11.0", \
+ osgi.ee; osgi.ee="JavaSE/compact3"; version:List="1.8,9.0,10.0,11.0"
+eecap-10= osgi.ee; osgi.ee="OSGi/Minimum"; version:List="1.0,1.1,1.2", \
+ osgi.ee; osgi.ee="JavaSE"; version:List="1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,9.0,10.0", \
+ osgi.ee; osgi.ee="JRE"; version:List="1.0,1.1", \
+ osgi.ee; osgi.ee="JavaSE/compact1"; version:List="1.8,9.0,10.0", \
+ osgi.ee; osgi.ee="JavaSE/compact2"; version:List="1.8,9.0,10.0", \
+ osgi.ee; osgi.ee="JavaSE/compact3"; version:List="1.8,9.0,10.0"
+eecap-9= osgi.ee; osgi.ee="OSGi/Minimum"; version:List="1.0,1.1,1.2", \
+ osgi.ee; osgi.ee="JavaSE"; version:List="1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,9.0", \
+ osgi.ee; osgi.ee="JRE"; version:List="1.0,1.1", \
+ osgi.ee; osgi.ee="JavaSE/compact1"; version:List="1.8,9.0", \
+ osgi.ee; osgi.ee="JavaSE/compact2"; version:List="1.8,9.0", \
+ osgi.ee; osgi.ee="JavaSE/compact3"; version:List="1.8,9.0"
+eecap-1.8= osgi.ee; osgi.ee="OSGi/Minimum"; version:List="1.0,1.1,1.2", \
+ osgi.ee; osgi.ee="JavaSE"; version:List="1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8", \
+ osgi.ee; osgi.ee="JRE"; version:List="1.0,1.1", \
+ osgi.ee; osgi.ee="JavaSE/compact1"; version:List="1.8", \
+ osgi.ee; osgi.ee="JavaSE/compact2"; version:List="1.8", \
+ osgi.ee; osgi.ee="JavaSE/compact3"; version:List="1.8"
+
+#
+# javax.transaction is needed ONLY for com.sun.corba.se.impl.javax.rmi.CORBA.Util.mapSystemException().
+# JDK8 and earlier provide only 3 exception classes in this package, so full JTA API bundles should always try the
+# bootdelegation first - even if they also package (and export) javax.transaction package
+#
+# boot delegation of javax.transaction.xa is needed to avoid class loader constraint violation when using javax.sql
+# and this package is always complete in all JDKs
+#
+# javax.security.cert is needed by pax-transx-tm-narayana as it uses URLClassLoader and otherwise is unable to create
+# object store.
+#
+org.osgi.framework.bootdelegation = \
+ com.sun.*, \
+ javax.transaction, \
+ javax.transaction.xa, \
+ javax.xml.crypto, \
+ javax.xml.crypto.*, \
+ javax.security.cert, \
+ jdk.nashorn.*, \
+ sun.*, \
+ jdk.internal.reflect, \
+ jdk.internal.reflect.*, \
+ org.apache.karaf.jaas.boot.principal, \
+ org.apache.karaf.jaas.boot
+
+# jVisualVM support
+# in order to use Karaf with jvisualvm, the org.osgi.framework.bootdelegation property has to contain the org.netbeans.lib.profiler.server package
+# and, so, it should look like:
+#
+# org.osgi.framework.bootdelegation=org.apache.karaf.jaas.boot,org.apache.karaf.jaas.boot.principal,sun.*,com.sun.*,javax.transaction,javax.transaction.*,javax.xml.crypto,javax.xml.crypto.*,org.apache.xerces.jaxp.datatype,org.apache.xerces.stax,org.apache.xerces.parsers,org.apache.xerces.jaxp,org.apache.xerces.jaxp.validation,org.apache.xerces.dom,org.netbeans.lib.profiler.server
+#
+# YourKit support
+# in order to use Karaf with YourKit, the org.osgi.framework.bootdelegation property has to contain the com.yourkit.* packages
+# and, so, it should look like:
+#
+# org.osgi.framework.bootdelegation=org.apache.karaf.jaas.boot,org.apache.karaf.jaas.boot.principal,sun.*,com.sun.*,javax.transaction,javax.transaction.*,javax.xml.crypto,javax.xml.crypto.*,org.apache.xerces.jaxp.datatype,org.apache.xerces.stax,org.apache.xerces.parsers,org.apache.xerces.jaxp,org.apache.xerces.jaxp.validation,org.apache.xerces.dom,com.yourkit.*
+#
+
+#
+# Set the parent classloader for the bundle to the classloader that loads the Framework (i.e. everything in lib/*.jar)
+#
+org.osgi.framework.bundle.parent=framework
+
+#
+# Definition of the default bundle start level
+#
+org.osgi.framework.startlevel.beginning=100
+karaf.startlevel.bundle=80
+
+#
+# The location of the Karaf shutdown port file used to stop instance
+#
+karaf.shutdown.port.file=${karaf.data}/port
+
+#
+# The location of the Karaf pid file
+#
+karaf.pid.file=${karaf.base}/karaf.pid
+
+#
+# Configuration secrets file location
+#
+org.apache.felix.configadmin.plugin.interpolation.secretsdir=${karaf.etc}
+
+#
+# Configuration FileMonitor properties
+#
+felix.fileinstall.enableConfigSave = true
+felix.fileinstall.dir = ${karaf.etc}
+felix.fileinstall.filter = .*\\.(cfg|config|json)
+felix.fileinstall.poll = 1000
+felix.fileinstall.noInitialDelay = true
+felix.fileinstall.log.level = 3
+felix.fileinstall.log.default = jul
+
+# Use cached urls for bundle CodeSource to avoid
+# problems with JCE cached informations, see KARAF-3974
+felix.bundlecodesource.usecachedurls = true
+
+#
+# Delay for writing the framework state to disk in equinox
+# must be >= 1000 and <= 1800000
+#
+eclipse.stateSaveDelayInterval = 1000
+
+#
+# OBR Repository list
+# This property will be modified by the obr:addUrl and obr:removeUrl commands.
+#
+obr.repository.url =
+
+#
+# Start blueprint bundles synchronously when possible
+#
+org.apache.aries.blueprint.synchronous=true
+
+#
+# Do not weave all any classes by default
+#
+org.apache.aries.proxy.weaving.enabled=
+
+#
+# mvn url handler requires config instance configuration
+#
+org.ops4j.pax.url.mvn.requireConfigAdminConfig=true
+
+#
+# Don't delay the console startup. Set to true if you want the console to start after all other bundles
+#
+karaf.delay.console=false
+
+#
+# Generated command shutdown
+#
+karaf.shutdown.command = 3671966a-c132-484c-b14d-9dfe27d34b1b
+
+#
+# Enable native Karaf support for systemd's watchdog.
+#
+# In addition to setting the flag to true, the JNA library needs to be made
+# available to the main classloader by adding the two following libraries
+# to the lib/boot directory
+# mvn:net.java.dev.jna/jna/${jna.version}
+# mvn:net.java.dev.jna/jna-platform/${jna.version}
+# or by building a custom distribution and adding the following lines for the
+# karaf maven plugin configuration:
+# mvn:net.java.dev.jna/jna/${jna.version};type:=boot;export:=false
+# mvn:net.java.dev.jna/jna-platform/${jna.version};type:=boot;export:=false
+#
+#karaf.systemd.enabled=true
diff --git a/openhab/openhab_userdata/etc/custom.properties b/openhab/openhab_userdata/etc/custom.properties
new file mode 100644
index 0000000..3705c92
--- /dev/null
+++ b/openhab/openhab_userdata/etc/custom.properties
@@ -0,0 +1,10 @@
+karaf.bootstrap.log = ${karaf.log}/openhab.log
+karaf.systemBundlesStartLevel = 50
+karaf.framework = equinox
+karaf.lock.dir=${karaf.data}/tmp
+karaf.shutdown.port.file=${karaf.data}/tmp/port
+karaf.pid.file=${karaf.data}/tmp/karaf.pid
+
+osgi.compatibility.bootdelegation = true
+
+felix.fileinstall.dir = ${karaf.data}/etc
diff --git a/openhab/openhab_userdata/etc/custom.system.properties b/openhab/openhab_userdata/etc/custom.system.properties
new file mode 100644
index 0000000..35333ad
--- /dev/null
+++ b/openhab/openhab_userdata/etc/custom.system.properties
@@ -0,0 +1,7 @@
+karaf.name=openhab
+karaf.local.user=openhab
+openhab.servicecfg=${openhab.runtime}/services.cfg
+jetty.keystore.path=${openhab.userdata}/etc/keystore
+jetty.truststore.path=${openhab.userdata}/etc/keystore
+equinox.ds.block_timeout=240000
+equinox.scr.waitTimeOnBlock=60000
diff --git a/openhab/openhab_userdata/etc/distribution.info b/openhab/openhab_userdata/etc/distribution.info
new file mode 100644
index 0000000..a5d8fb3
--- /dev/null
+++ b/openhab/openhab_userdata/etc/distribution.info
@@ -0,0 +1,26 @@
+################################################################################
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+################################################################################
+
+#
+# This file contains the general platform information required by the itests to find out
+# about the current versions.
+#
+karafVersion=4.4.3
+name=Apache Karaf
+
diff --git a/openhab/openhab_userdata/etc/equinox-debug.properties b/openhab/openhab_userdata/etc/equinox-debug.properties
new file mode 100644
index 0000000..01be178
--- /dev/null
+++ b/openhab/openhab_userdata/etc/equinox-debug.properties
@@ -0,0 +1,111 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+
+# http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+#### Debugging options for org.eclipse.bundles
+
+# Turn on general debugging for org.eclipse.bundles
+org.eclipse.osgi/debug = false
+# Prints out class loading debug information
+org.eclipse.osgi/debug/loader = false
+# Prints out event (FrameworkEvent/BundleEvent/ServiceEvent) and listener debug information
+org.eclipse.osgi/debug/events = false
+# Prints out OSGi service debug information (registration/getting/ungetting etc.)
+org.eclipse.osgi/debug/services = false
+# Prints out bundle manifest parsing debug information
+org.eclipse.osgi/debug/manifest = false
+# Prints out LDAP filter debug information
+org.eclipse.osgi/debug/filter = false
+# Prints out security (PermissionAdmin service) debug information
+org.eclipse.osgi/debug/security = false
+# Prints out start level service debug information
+org.eclipse.osgi/debug/startlevel = false
+# Prints out package instance service debug information
+org.eclipse.osgi/debug/packageadmin = false
+# Prints out timing information for bundle activation
+org.eclipse.osgi/debug/bundleTime = false
+# Debug the loading of message bundles
+org.eclipse.osgi/debug/messageBundles = false
+
+# Eclipse adaptor options
+org.eclipse.osgi/eclipseadaptor/debug = false
+org.eclipse.osgi/eclipseadaptor/debug/location = false
+org.eclipse.osgi/eclipseadaptor/debug/platformadmin = false
+org.eclipse.osgi/eclipseadaptor/debug/platformadmin/resolver = false
+org.eclipse.osgi/eclipseadaptor/converter/debug = false
+
+### OSGi resolver options
+# Turns on debugging for the resolver
+org.eclipse.osgi/resolver/debug = false
+# Prints out wiring information after the resolver has completed the resolve process
+org.eclipse.osgi/resolver/wiring = false
+# Prints out Import-Package information
+org.eclipse.osgi/resolver/imports = false
+# Prints out Require-Bundle information
+org.eclipse.osgi/resolver/requires = false
+# Prints out package grouping information form the "uses" clause
+org.eclipse.osgi/resolver/grouping = false
+# Prints out cycle information
+org.eclipse.osgi/resolver/cycles = false
+# Prints out Eclipse-GenericRequire information
+org.eclipse.osgi/resolver/generics = false
+
+#### Profile settings
+org.eclipse.osgi/profile/startup = false
+org.eclipse.osgi/profile/benchmark = false
+org.eclipse.osgi/profile/debug = false
+
+# Override the default implemenation
+org.eclipse.osgi/profile/impl = org.eclipse.osgi.internal.profile.DefaultProfileLogger
+
+# Append all profile messages to the filename specified
+org.eclipse.osgi/defaultprofile/logfilename =
+
+# Output all profile log messages synchronously to the jvm console.
+# By default, all log messages are cached until the log buffer is
+# requested.
+org.eclipse.osgi/defaultprofile/logsynchronously = false
+
+# Specify the size of the default profile implementation log buffer.
+org.eclipse.osgi/defaultprofile/buffersize = 256
+
+#### Monitoring settings
+# monitor class loading
+org.eclipse.osgi/monitor/classes = false
+
+# monitor bundle activation
+org.eclipse.osgi/monitor/activation = false
+
+# monitor resource bundle (*.properties) loading
+org.eclipse.osgi/monitor/resources = false
+
+
+#### Trace settings
+# trace class loading - snapshot the execution stack when a class is loaded
+org.eclipse.osgi/trace/classLoading = false
+
+# trace location - file in which execution traces are written
+org.eclipse.osgi/trace/filename = runtime.traces
+
+# trace filters - Java properties file defining which classes should
+# be traced (if trace/classLoading is true)
+# File format:
+# plugins=
+# packages=
+# Note that there may be many 'plugins' and 'packages' lines in one file.
+org.eclipse.osgi/trace/filters = trace.properties
+
+# trace bundle activation - snapshot the execution stack when a bundle is activated
+org.eclipse.osgi/trace/activation = false
diff --git a/openhab/openhab_userdata/etc/java.util.logging.properties b/openhab/openhab_userdata/etc/java.util.logging.properties
new file mode 100644
index 0000000..f2d56da
--- /dev/null
+++ b/openhab/openhab_userdata/etc/java.util.logging.properties
@@ -0,0 +1,6 @@
+# set default format layout
+java.util.logging.SimpleFormatter.format = %1$tF %1$tT.%1$tL [%4$s] [%3$s] - %5$s%6$s%n
+
+# disable lock messages at startup
+org.apache.karaf.main.Main.level = WARNING
+org.apache.karaf.main.lock.SimpleFileLock.level = WARNING
\ No newline at end of file
diff --git a/openhab/openhab_userdata/etc/jetty-web.xml b/openhab/openhab_userdata/etc/jetty-web.xml
new file mode 100644
index 0000000..b37e3e0
--- /dev/null
+++ b/openhab/openhab_userdata/etc/jetty-web.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
diff --git a/openhab/openhab_userdata/etc/jetty.xml b/openhab/openhab_userdata/etc/jetty.xml
new file mode 100644
index 0000000..196f59d
--- /dev/null
+++ b/openhab/openhab_userdata/etc/jetty.xml
@@ -0,0 +1,135 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/openhab/openhab_userdata/etc/jmx.acl.org.apache.karaf.bundle.cfg b/openhab/openhab_userdata/etc/jmx.acl.org.apache.karaf.bundle.cfg
new file mode 100644
index 0000000..e1c9b1c
--- /dev/null
+++ b/openhab/openhab_userdata/etc/jmx.acl.org.apache.karaf.bundle.cfg
@@ -0,0 +1,40 @@
+
+################################################################################
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+################################################################################
+
+#
+# JMX ACL specific to the org.apache.karaf:type=bundle,name=* MBean which maps to the Karaf MBean
+# to control OSGi bundles.
+#
+install = manager
+refresh = manager
+resolve = manager
+restart = manager
+setStartLevel(java.lang.String, int)[/([1-4])?[0-9]/,/.*/] = admin
+setStartLevel = manager
+start(java.lang.String)[/([1-4])?[0-9]/] = admin
+start = manager
+stop(java.lang.String)[/([1-4])?[0-9]/] = admin
+stop = manager
+uninstall(java.lang.String)["0"] = #this is a comment, no roles can perform this operation
+uninstall = admin
+update(java.lang.String)[/([1-4])?[0-9]/] = admin
+update(java.lang.String,java.lang.String)[/([1-4])?[0-9]/,/.*/] = admin
+update = manager
+
diff --git a/openhab/openhab_userdata/etc/jmx.acl.org.apache.karaf.config.cfg b/openhab/openhab_userdata/etc/jmx.acl.org.apache.karaf.config.cfg
new file mode 100644
index 0000000..39fb1a4
--- /dev/null
+++ b/openhab/openhab_userdata/etc/jmx.acl.org.apache.karaf.config.cfg
@@ -0,0 +1,54 @@
+
+################################################################################
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+################################################################################
+
+#
+# JMX ACL specific to the org.apache.karaf:type=config,name=* MBean which maps to the Karaf MBean to interact with the
+# OSGi Config Admin service.
+#
+# For a description of the format of this file, see jmx.acl.cfg
+#
+# By default, only an admin can make changes to the JMX ACL and shell command rules, but managers can make
+# changes to other PIDs.
+#
+appendProperty(java.lang.String,java.lang.String,java.lang.String)[/jmx[.]acl.*/,/.*/,/.*/] = admin
+appendProperty(java.lang.String,java.lang.String,java.lang.String)[/org[.]apache[.]karaf[.]command[.]acl.+/,/.*/,/.*/] = admin
+appendProperty(java.lang.String,java.lang.String,java.lang.String)[/org[.]apache[.]karaf[.]service[.]acl.+/,/.*/,/.*/] = admin
+appendProperty(java.lang.String,java.lang.String,java.lang.String) = manager
+create(java.lang.String)[/jmx[.]acl.*/] = admin
+create(java.lang.String)[/org[.]apache[.]karaf[.]command[.]acl.+/] = admin
+create(java.lang.String)[/org[.]apache[.]karaf[.]service[.]acl.+/] = admin
+create(java.lang.String) = manager
+delete(java.lang.String)[/jmx[.]acl.*/] = admin
+delete(java.lang.String)[/org[.]apache[.]karaf[.]command[.]acl.+/] = admin
+delete(java.lang.String)[/org[.]apache[.]karaf[.]service[.]acl.+/] = admin
+delete(java.lang.String) = manager
+deleteProperty(java.lang.String,java.lang.String)[/jmx[.]acl.*/,/.*/] = admin
+deleteProperty(java.lang.String,java.lang.String)[/org[.]apache[.]karaf[.]command[.]acl.+/,/.*/] = admin
+deleteProperty(java.lang.String,java.lang.String)[/org[.]apache[.]karaf[.]service[.]acl.+/,/.*/] = admin
+deleteProperty(java.lang.String,java.lang.String) = manager
+setProperty(java.lang.String,java.lang.String,java.lang.String)[/jmx[.]acl.*/,/.*/,/.*/] = admin
+setProperty(java.lang.String,java.lang.String,java.lang.String)[/org[.]apache[.]karaf[.]command[.]acl.+/,/.*/,/.*/] = admin
+setProperty(java.lang.String,java.lang.String,java.lang.String)[/org[.]apache[.]karaf[.]service[.]acl.+/,/.*/,/.*/] = admin
+setProperty(java.lang.String,java.lang.String,java.lang.String) = manager
+update(java.lang.String,java.util.Map)[/jmx[.]acl.*/,/.*/] = admin
+update(java.lang.String,java.util.Map)[/org[.]apache[.]karaf[.]command[.]acl.+/,/.*/] = admin
+update(java.lang.String,java.util.Map)[/org[.]apache[.]karaf[.]service[.]acl.+/,/.*/] = admin
+update(java.lang.String,java.util.Map) = manager
+
diff --git a/openhab/openhab_userdata/etc/jre.properties b/openhab/openhab_userdata/etc/jre.properties
new file mode 100644
index 0000000..871e77b
--- /dev/null
+++ b/openhab/openhab_userdata/etc/jre.properties
@@ -0,0 +1,503 @@
+################################################################################
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+################################################################################
+
+#
+# Java platform package export properties.
+#
+
+# Contains java.* packages provided by the JDK (and so system packages)
+jre-base= \
+ java.applet, \
+ java.awt, \
+ java.awt.color, \
+ java.awt.datatransfer, \
+ java.awt.dnd, \
+ java.awt.event, \
+ java.awt.font, \
+ java.awt.geom, \
+ java.awt.im, \
+ java.awt.im.spi, \
+ java.awt.image, \
+ java.awt.image.renderable, \
+ java.awt.print, \
+ java.beans, \
+ java.beans.beancontext, \
+ java.io, \
+ java.lang, \
+ java.lang.annotation, \
+ java.lang.constant, \
+ java.lang.instrument, \
+ java.lang.invoke, \
+ java.lang.management, \
+ java.lang.ref, \
+ java.lang.reflect, \
+ java.lang.runtime, \
+ java.math, \
+ java.net, \
+ java.net.http, \
+ java.nio, \
+ java.nio.channels, \
+ java.nio.channels.spi, \
+ java.nio.charset, \
+ java.nio.charset.spi, \
+ java.nio.file, \
+ java.nio.file.attribute, \
+ java.rmi, \
+ java.rmi.activation, \
+ java.rmi.dgc, \
+ java.rmi.registry, \
+ java.rmi.server, \
+ java.security, \
+ java.security.acl, \
+ java.security.cert, \
+ java.security.interfaces, \
+ java.security.spec, \
+ java.sql, \
+ java.text, \
+ java.text.spi, \
+ java.time, \
+ java.time.chrono, \
+ java.time.format, \
+ java.time.temporal, \
+ java.time.zone, \
+ java.util, \
+ java.util.concurrent, \
+ java.util.concurrent.atomic, \
+ java.util.concurrent.locks, \
+ java.util.function, \
+ java.util.random, \
+ java.util.jar, \
+ java.util.logging, \
+ java.util.prefs, \
+ java.util.regex, \
+ java.util.spi, \
+ java.util.stream, \
+ java.util.zip
+
+#
+# A note about javax.transaction and javax.transaction.xa packages in JDK8 and JDK9+
+# - javax.transaction package is not provided at all in JDK9+ because of the removal of Corba
+# - javax.transaction package in JDK8 and earlier contains only 3 exception classes required to translate 3 Corba/OMG
+# exception: org.omg.CORBA.TRANSACTION_REQUIRED, org.omg.CORBA.TRANSACTION_ROLLEDBACK, org.omg.CORBA.INVALID_TRANSACTION
+# - javax.transaction.xa package should always be provided by JDK itself (thus exported from system bundle and bootdelegated)
+# because of javax.sql.XAConnection interface relying on javax.sql.xa.XAResource interface
+# - I decided to export javax.transaction.xa package with all the versions: 1.1, 1.2 and 1.3 just to satisfy all potential
+# import version ranges (and emphasize the fact that JavaEE doesn't version packages at all)
+# - javax.transaction package should be exported by JDK8 (but not JDK9+) with mandatory attribute ("partial" is an
+# arbirtary name mentioned in "https://docs.osgi.org/specification/osgi.core/7.0.0/framework.module.html#framework.module.requirebundle"
+# - javax.transaction exported with "partial=true;mandatory:=partial" prevents system bundle to be a wire candidate for
+# bundles with just "Import-Package: javax.transaction" - actual JTA API bundle is needed to provide all the classes
+# from this package (like javax.transaction.UserTransaction)
+# - thus javax.transaction package is exported without a version - because each bundle with "Import-Package: javax.transaction"
+# should always wire to full JTA API bundle. The fact that the JDK8 provided exception classes from this package
+# are always loaded using boot class loader is an obvious, but internal consequence
+# - the full trick mentioned in "3.13.1 Require-Bundle" requires another bundle that exports javax.transaction package
+# without mandatory attribute and that has Require-Bundle requirement to a bundle that exports the package with mandatory
+# attribute - and that's what javax.transaction/javax.transaction-api/1.2 does - it contains "Require-Bundle: system.bundle"
+# - Require-Bundle in JTA API bundle is not needed if javax.transaction is boot-delegated - because failure to search
+# boot-delegated javax.* packages doesn't stop the class loading process - local content is checked
+# - jakarta.transaction/jakarta.transaction-api/1.3.x doesn't have (by mistake, see https://github.com/eclipse-ee4j/jta-api/issues/186)
+# "Require-Bundle: system.bundle", but it still works thanks to boot-delegation
+# And last, but important thing - DBCP2 (see DBCP-571) has "Import-Package: javax.transaction.xa;partial=true;mandatory:=partial"
+# which is simply wrong (if anything, javax.transaction package should be imported this way, not javax.transaction.xa),
+# but to allow DBCP2 to be resolved on Karaf, special export package is added just for DBCP2:
+# Export-Package: javax.transaction.xa;partial=true;mandatory:=partial;version="1.1"
+# - mandatory "partial" attribute is added to javax.transaction export (JDK8) to prevent wiring to this package without
+# full JTA API bundle
+# - mandatory "partial" attribute is added to javax.transaction.xa export (all JDKs) to satisfy DBCP2
+#
+
+jre-1.8= \
+ ${jre-base}, \
+ javax.accessibility, \
+ javax.activity, \
+ javax.annotation;version="1.0", \
+ javax.annotation.processing;version="1.0", \
+ javax.crypto, \
+ javax.crypto.interfaces, \
+ javax.crypto.spec, \
+ javax.imageio, \
+ javax.imageio.event, \
+ javax.imageio.metadata, \
+ javax.imageio.plugins.bmp, \
+ javax.imageio.plugins.jpeg, \
+ javax.imageio.spi, \
+ javax.imageio.stream, \
+ javax.jws, \
+ javax.jws.soap, \
+ javax.lang.model, \
+ javax.lang.model.element, \
+ javax.lang.model.type, \
+ javax.lang.model.util, \
+ javax.management, \
+ javax.management.loading, \
+ javax.management.modelmbean, \
+ javax.management.monitor, \
+ javax.management.openmbean, \
+ javax.management.relation, \
+ javax.management.remote, \
+ javax.management.remote.rmi, \
+ javax.management.timer, \
+ javax.naming, \
+ javax.naming.directory, \
+ javax.naming.event, \
+ javax.naming.ldap, \
+ javax.naming.spi, \
+ javax.net, \
+ javax.net.ssl, \
+ javax.print, \
+ javax.print.attribute, \
+ javax.print.attribute.standard, \
+ javax.print.event, \
+ javax.rmi, \
+ javax.rmi.CORBA, \
+ javax.rmi.ssl, \
+ javax.script, \
+ javax.security.auth, \
+ javax.security.auth.callback, \
+ javax.security.auth.kerberos, \
+ javax.security.auth.login, \
+ javax.security.auth.spi, \
+ javax.security.auth.x500, \
+ javax.security.cert, \
+ javax.security.sasl, \
+ javax.sound.midi, \
+ javax.sound.midi.spi, \
+ javax.sound.sampled, \
+ javax.sound.sampled.spi, \
+ javax.sql, \
+ javax.sql.rowset, \
+ javax.sql.rowset.serial, \
+ javax.sql.rowset.spi, \
+ javax.swing, \
+ javax.swing.border, \
+ javax.swing.colorchooser, \
+ javax.swing.event, \
+ javax.swing.filechooser, \
+ javax.swing.plaf, \
+ javax.swing.plaf.basic, \
+ javax.swing.plaf.metal, \
+ javax.swing.plaf.multi, \
+ javax.swing.plaf.synth, \
+ javax.swing.table, \
+ javax.swing.text, \
+ javax.swing.text.html, \
+ javax.swing.text.html.parser, \
+ javax.swing.text.rtf, \
+ javax.swing.tree, \
+ javax.swing.undo, \
+ javax.tools, \
+ javax.transaction;partial=true;mandatory:=partial, \
+ javax.transaction.xa;version="1.1";partial=true;mandatory:=partial, \
+ javax.transaction.xa;version="1.1", \
+ javax.transaction.xa;version="1.2", \
+ javax.transaction.xa;version="1.3", \
+ javax.xml, \
+ javax.xml.bind;version="2.2.8", \
+ javax.xml.bind.annotation;version="2.2.8", \
+ javax.xml.bind.annotation.adapters;version="2.2.8", \
+ javax.xml.bind.attachment;version="2.2.8", \
+ javax.xml.bind.helpers;version="2.2.8", \
+ javax.xml.bind.util;version="2.2.8", \
+ javax.xml.crypto, \
+ javax.xml.crypto.dom, \
+ javax.xml.crypto.dsig, \
+ javax.xml.crypto.dsig.dom, \
+ javax.xml.crypto.dsig.keyinfo, \
+ javax.xml.crypto.dsig.spec, \
+ javax.xml.datatype, \
+ javax.xml.namespace, \
+ javax.xml.parsers, \
+ javax.xml.stream;version="1.2", \
+ javax.xml.stream.events;version="1.2", \
+ javax.xml.stream.util;version="1.2", \
+ javax.xml.transform, \
+ javax.xml.transform.dom, \
+ javax.xml.transform.sax, \
+ javax.xml.transform.stax, \
+ javax.xml.transform.stream, \
+ javax.xml.validation, \
+ javax.xml.ws;version="2.2", \
+ javax.xml.ws.handler;version="2.2", \
+ javax.xml.ws.handler.soap;version="2.2", \
+ javax.xml.ws.http;version="2.2", \
+ javax.xml.ws.soap;version="2.2", \
+ javax.xml.ws.spi;version="2.2", \
+ javax.xml.ws.wsaddressing;version="2.2", \
+ javax.xml.ws.spi.http;version="2.2", \
+ javax.xml.xpath, \
+ javafx.animation, \
+ javafx.application, \
+ javafx.beans, \
+ javafx.beans.binding, \
+ javafx.beans.property, \
+ javafx.beans.property.adapter, \
+ javafx.beans.value, \
+ javafx.collections, \
+ javafx.collections.transform, \
+ javafx.concurrent, \
+ javafx.css, \
+ javafx.embed.swing, \
+ javafx.embed.swt, \
+ javafx.event, \
+ javafx.fxml, \
+ javafx.geometry, \
+ javafx.print, \
+ javafx.scene, \
+ javafx.scene.canvas, \
+ javafx.scene.chart, \
+ javafx.scene.control, \
+ javafx.scene.control.cell, \
+ javafx.scene.effect, \
+ javafx.scene.image, \
+ javafx.scene.input, \
+ javafx.scene.layout, \
+ javafx.scene.media, \
+ javafx.scene.paint, \
+ javafx.scene.shape, \
+ javafx.scene.text, \
+ javafx.scene.transform, \
+ javafx.scene.web, \
+ javafx.stage, \
+ javafx.util, \
+ javafx.util.converter, \
+ netscape.javascript, \
+ org.ietf.jgss, \
+ org.omg.CORBA, \
+ org.omg.CORBA_2_3, \
+ org.omg.CORBA_2_3.portable, \
+ org.omg.CORBA.DynAnyPackage, \
+ org.omg.CORBA.ORBPackage, \
+ org.omg.CORBA.portable, \
+ org.omg.CORBA.TypeCodePackage, \
+ org.omg.CosNaming, \
+ org.omg.CosNaming.NamingContextExtPackage, \
+ org.omg.CosNaming.NamingContextPackage, \
+ org.omg.Dynamic, \
+ org.omg.DynamicAny, \
+ org.omg.DynamicAny.DynAnyFactoryPackage, \
+ org.omg.DynamicAny.DynAnyPackage, \
+ org.omg.IOP, \
+ org.omg.IOP.CodecFactoryPackage, \
+ org.omg.IOP.CodecPackage, \
+ org.omg.Messaging, \
+ org.omg.PortableInterceptor, \
+ org.omg.PortableInterceptor.ORBInitInfoPackage, \
+ org.omg.PortableServer, \
+ org.omg.PortableServer.CurrentPackage, \
+ org.omg.PortableServer.POAManagerPackage, \
+ org.omg.PortableServer.POAPackage, \
+ org.omg.PortableServer.portable, \
+ org.omg.PortableServer.ServantLocatorPackage, \
+ org.omg.SendingContext, \
+ org.omg.stub.java.rmi, \
+ org.omg.stub.javax.management.remote.rmi, \
+ org.w3c.dom, \
+ org.w3c.dom.bootstrap, \
+ org.w3c.dom.css, \
+ org.w3c.dom.events, \
+ org.w3c.dom.html, \
+ org.w3c.dom.ls, \
+ org.w3c.dom.ranges, \
+ org.w3c.dom.stylesheets, \
+ org.w3c.dom.traversal, \
+ org.w3c.dom.views, \
+ org.w3c.dom.xpath, \
+ org.xml.sax, \
+ org.xml.sax.ext, \
+ org.xml.sax.helpers, \
+ com.sun.nio.sctp
+
+jre-9= \
+ ${jre-base}, \
+ java.lang.module, \
+ java.net.spi, \
+ javax.accessibility, \
+ javax.activity, \
+ javax.annotation;version="1.3", \
+ javax.annotation.processing;version="1.0", \
+ javax.activation;version="1.2.1", \
+ javax.crypto, \
+ javax.crypto.interfaces, \
+ javax.crypto.spec, \
+ javax.imageio, \
+ javax.imageio.event, \
+ javax.imageio.metadata, \
+ javax.imageio.plugins.bmp, \
+ javax.imageio.plugins.jpeg, \
+ javax.imageio.spi, \
+ javax.imageio.stream, \
+ javax.lang.model, \
+ javax.lang.model.element, \
+ javax.lang.model.type, \
+ javax.lang.model.util, \
+ javax.management, \
+ javax.management.loading, \
+ javax.management.modelmbean, \
+ javax.management.monitor, \
+ javax.management.openmbean, \
+ javax.management.relation, \
+ javax.management.remote, \
+ javax.management.remote.rmi, \
+ javax.management.timer, \
+ javax.naming, \
+ javax.naming.directory, \
+ javax.naming.event, \
+ javax.naming.ldap, \
+ javax.naming.spi, \
+ javax.net, \
+ javax.net.ssl, \
+ javax.print, \
+ javax.print.attribute, \
+ javax.print.attribute.standard, \
+ javax.print.event, \
+ javax.rmi, \
+ javax.rmi.ssl, \
+ javax.script, \
+ javax.security.auth, \
+ javax.security.auth.callback, \
+ javax.security.auth.kerberos, \
+ javax.security.auth.login, \
+ javax.security.auth.spi, \
+ javax.security.auth.x500, \
+ javax.security.cert, \
+ javax.security.sasl, \
+ javax.sound.midi, \
+ javax.sound.midi.spi, \
+ javax.sound.sampled, \
+ javax.sound.sampled.spi, \
+ javax.sql, \
+ javax.sql.rowset, \
+ javax.sql.rowset.serial, \
+ javax.sql.rowset.spi, \
+ javax.swing, \
+ javax.swing.border, \
+ javax.swing.colorchooser, \
+ javax.swing.event, \
+ javax.swing.filechooser, \
+ javax.swing.plaf, \
+ javax.swing.plaf.basic, \
+ javax.swing.plaf.metal, \
+ javax.swing.plaf.multi, \
+ javax.swing.plaf.synth, \
+ javax.swing.table, \
+ javax.swing.text, \
+ javax.swing.text.html, \
+ javax.swing.text.html.parser, \
+ javax.swing.text.rtf, \
+ javax.swing.tree, \
+ javax.swing.undo, \
+ javax.tools, \
+ javax.transaction.xa;version="1.1";partial=true;mandatory:=partial, \
+ javax.transaction.xa;version="1.1", \
+ javax.transaction.xa;version="1.2", \
+ javax.transaction.xa;version="1.3", \
+ javax.xml, \
+ javax.xml.bind;version="2.3.0", \
+ javax.xml.bind.annotation;version="2.3.0", \
+ javax.xml.bind.annotation.adapters;version="2.3.0", \
+ javax.xml.bind.attachment;version="2.3.0", \
+ javax.xml.bind.helpers;version="2.3.0", \
+ javax.xml.bind.util;version="2.3.0", \
+ javax.xml.catalog, \
+ javax.xml.crypto, \
+ javax.xml.crypto.dom, \
+ javax.xml.crypto.dsig, \
+ javax.xml.crypto.dsig.dom, \
+ javax.xml.crypto.dsig.keyinfo, \
+ javax.xml.crypto.dsig.spec, \
+ javax.xml.datatype, \
+ javax.xml.namespace, \
+ javax.xml.parsers, \
+ javax.xml.stream;version="1.2", \
+ javax.xml.stream.events;version="1.2", \
+ javax.xml.stream.util;version="1.2", \
+ javax.xml.transform, \
+ javax.xml.transform.dom, \
+ javax.xml.transform.sax, \
+ javax.xml.transform.stax, \
+ javax.xml.transform.stream, \
+ javax.xml.validation, \
+ javax.xml.xpath, \
+ javafx.animation, \
+ javafx.application, \
+ javafx.beans, \
+ javafx.beans.binding, \
+ javafx.beans.property, \
+ javafx.beans.property.adapter, \
+ javafx.beans.value, \
+ javafx.collections, \
+ javafx.collections.transformation, \
+ javafx.concurrent, \
+ javafx.css, \
+ javafx.embed.swing, \
+ javafx.embed.swt, \
+ javafx.event, \
+ javafx.fxml, \
+ javafx.geometry, \
+ javafx.print, \
+ javafx.scene, \
+ javafx.scene.canvas, \
+ javafx.scene.chart, \
+ javafx.scene.control, \
+ javafx.scene.control.cell, \
+ javafx.scene.effect, \
+ javafx.scene.image, \
+ javafx.scene.input, \
+ javafx.scene.layout, \
+ javafx.scene.media, \
+ javafx.scene.paint, \
+ javafx.scene.shape, \
+ javafx.scene.text, \
+ javafx.scene.transform, \
+ javafx.scene.web, \
+ javafx.stage, \
+ javafx.util, \
+ javafx.util.converter, \
+ netscape.javascript, \
+ org.ietf.jgss, \
+ org.w3c.dom, \
+ org.w3c.dom.bootstrap, \
+ org.w3c.dom.css, \
+ org.w3c.dom.events, \
+ org.w3c.dom.html, \
+ org.w3c.dom.ls, \
+ org.w3c.dom.ranges, \
+ org.w3c.dom.stylesheets, \
+ org.w3c.dom.traversal, \
+ org.w3c.dom.views, \
+ org.w3c.dom.xpath, \
+ org.xml.sax, \
+ org.xml.sax.ext, \
+ org.xml.sax.helpers, \
+ com.sun.security.sasl, \
+ com.sun.security.sasl.digest, \
+ com.sun.security.sasl.ntlm, \
+ com.sun.security.sasl.util
+
+jre-10 = ${jre-9}
+jre-11 = ${jre-10}
+jre-12 = ${jre-11}
+jre-13 = ${jre-12}
+jre-14 = ${jre-13}
+jre-15 = ${jre-14}
+jre-16 = ${jre-15}
+jre-17 = ${jre-16}
+jre-18 = ${jre-17}
+jre-19 = ${jre-18}
diff --git a/openhab/openhab_userdata/etc/keys.properties b/openhab/openhab_userdata/etc/keys.properties
new file mode 100644
index 0000000..e0538ff
--- /dev/null
+++ b/openhab/openhab_userdata/etc/keys.properties
@@ -0,0 +1,36 @@
+################################################################################
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+################################################################################
+
+#
+# This file contains the valid users who can log into Karaf. Each line have to be of
+# the format:
+#
+# USER=KEY,ROLE1,ROLE2,...
+#
+# All users and roles entered in this file are available after Karaf startup
+# and modifiable via the JAAS command group. These users reside in a JAAS domain
+# with the name "karaf"..
+#
+
+#
+# This is an example of how to associate a public key with a user.
+# The user guide describes how to generate/update the key.
+#
+#karaf=AAAAB3NzaC1kc3MAAACBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnxqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAAAAFQCXYFCPFSMLzLKSuYKi64QL8Fgc9QAAAIEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotUfI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoAAACBAKKSU2PFl/qOLxIwmBZPPIcJshVe7bVUpFvyl3BbJDow8rXfskl8wO63OzP/qLmcJM0+JbcRU/53JjTuyk31drV2qxhIOsLDC9dGCWj47Y7TyhPdXh/0dthTRBy6bqGtRPxGa7gJov1xm/UuYYXPIUR/3x9MAZvZ5xvE0kYXO+rx,_g_:admingroup
+_g_\:admingroup = group,admin,manager,viewer,systembundles,ssh
diff --git a/openhab/openhab_userdata/etc/keystore b/openhab/openhab_userdata/etc/keystore
new file mode 100644
index 0000000..88ff11e
Binary files /dev/null and b/openhab/openhab_userdata/etc/keystore differ
diff --git a/openhab/openhab_userdata/etc/log4j2.xml b/openhab/openhab_userdata/etc/log4j2.xml
new file mode 100644
index 0000000..5e7838b
--- /dev/null
+++ b/openhab/openhab_userdata/etc/log4j2.xml
@@ -0,0 +1,135 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/openhab/openhab_userdata/etc/org.apache.felix.eventadmin.impl.EventAdmin.cfg b/openhab/openhab_userdata/etc/org.apache.felix.eventadmin.impl.EventAdmin.cfg
new file mode 100644
index 0000000..7dc0168
--- /dev/null
+++ b/openhab/openhab_userdata/etc/org.apache.felix.eventadmin.impl.EventAdmin.cfg
@@ -0,0 +1,15 @@
+## Standard settings of Karaf
+
+org.apache.felix.eventadmin.AddTimestamp=true
+org.apache.felix.eventadmin.AddSubject=true
+
+## Custom openHAB configuration
+
+# Configure thread pool size for EventAdmin sync event delivery.
+org.apache.felix.eventadmin.ThreadPoolSize=3
+
+# Use as many threads for async as for sync.
+org.apache.felix.eventadmin.AsyncToSyncThreadRatio=1
+
+# Do not timeout event handlers, see https://github.com/openhab/openhab-distro/issues/600
+org.apache.felix.eventadmin.Timeout=0
diff --git a/openhab/openhab_userdata/etc/org.apache.felix.fileinstall-deploy.cfg b/openhab/openhab_userdata/etc/org.apache.felix.fileinstall-deploy.cfg
new file mode 100644
index 0000000..c8a28c8
--- /dev/null
+++ b/openhab/openhab_userdata/etc/org.apache.felix.fileinstall-deploy.cfg
@@ -0,0 +1,13 @@
+## Standard settings of Karaf
+
+felix.fileinstall.start.level = 80
+felix.fileinstall.log.level = 3
+
+## Custom openHAB configuration
+
+felix.fileinstall.dir = ${openhab.home}/addons
+felix.fileinstall.tmpdir = ${karaf.data}/tmp/bundles
+felix.fileinstall.filter = .*\\.(jar|kar)
+felix.fileinstall.poll = 10000
+felix.fileinstall.active.level = 90
+felix.fileinstall.subdir.mode = skip
diff --git a/openhab/openhab_userdata/etc/org.apache.karaf.command.acl.bundle.cfg b/openhab/openhab_userdata/etc/org.apache.karaf.command.acl.bundle.cfg
new file mode 100644
index 0000000..688c289
--- /dev/null
+++ b/openhab/openhab_userdata/etc/org.apache.karaf.command.acl.bundle.cfg
@@ -0,0 +1,46 @@
+
+################################################################################
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+################################################################################
+
+#
+# This configuration file defines the ACLs for commands in the bundle subshell
+#
+# For an explanation of the syntax of this file, see the file:
+# org.apache.karaf.command.acl.system.cfg
+#
+# This configuration relies on the fact that 'system' bundles need to be managed
+# with the
+# -f (--force)
+# flag. Operations with -f need admin permission. Most of these operations without
+# the 'force' option can be done by a manager.
+install = admin
+refresh[/.*[-][f].*/] = admin
+refresh = manager
+restart[/.*[-][f].*/] = admin
+restart = manager
+start[/.*[-][f].*/] = admin
+start = manager
+stop[/.*[-][f].*/] = admin
+stop = manager
+uninstall[/.*[-][f].*/] = admin
+uninstall = manager
+update[/.*[-][f].*/] = admin
+update = manager
+watch = admin
+
diff --git a/openhab/openhab_userdata/etc/org.apache.karaf.command.acl.config.cfg b/openhab/openhab_userdata/etc/org.apache.karaf.command.acl.config.cfg
new file mode 100644
index 0000000..b802587
--- /dev/null
+++ b/openhab/openhab_userdata/etc/org.apache.karaf.command.acl.config.cfg
@@ -0,0 +1,46 @@
+
+################################################################################
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+################################################################################
+
+#
+# This configuration file defines the ACLs for various commands in the config subshell
+#
+# For an explanation of the syntax of this file, see the file:
+# org.apache.karaf.command.acl.system.cfg
+#
+cancel = manager
+delete = admin
+edit = manager
+edit[/.*jmx[.]acl.*/] = admin
+edit[/.*org[.]apache[.]karaf[.]command[.]acl[.].+/] = admin
+edit[/.*org[.]apache[.]karaf[.]service[.]acl[.].+/] = admin
+property-append = manager
+property-append[/.*jmx[.]acl.*/] = admin
+property-append[/.*org[.]apache[.]karaf[.]command[.]acl[.].+/] = admin
+property-append[/.*org[.]apache[.]karaf[.]service[.]acl[.].+/] = admin
+property-delete = manager
+property-delete[/.*jmx[.]acl.*/] = admin
+property-delete[/.*org[.]apache[.]karaf[.]command[.]acl[.].+/] = admin
+property-delete[/.*org[.]apache[.]karaf[.]service[.]acl[.].+/] = admin
+property-set = manager
+property-set[/.*jmx[.]acl.*/] = admin
+property-set[/.*org[.]apache[.]karaf[.]command[.]acl[.].+/] = admin
+property-set[/.*org[.]apache[.]karaf[.]service[.]acl[.].+/] = admin
+update = manager
+
diff --git a/openhab/openhab_userdata/etc/org.apache.karaf.command.acl.feature.cfg b/openhab/openhab_userdata/etc/org.apache.karaf.command.acl.feature.cfg
new file mode 100644
index 0000000..b511ef5
--- /dev/null
+++ b/openhab/openhab_userdata/etc/org.apache.karaf.command.acl.feature.cfg
@@ -0,0 +1,28 @@
+
+################################################################################
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+################################################################################
+
+#
+# This configuration file defines the ACLs for commands in the feature subshell
+#
+install = admin
+uninstall = admin
+start = admin
+stop = admin
+
diff --git a/openhab/openhab_userdata/etc/org.apache.karaf.command.acl.jaas.cfg b/openhab/openhab_userdata/etc/org.apache.karaf.command.acl.jaas.cfg
new file mode 100644
index 0000000..9563625
--- /dev/null
+++ b/openhab/openhab_userdata/etc/org.apache.karaf.command.acl.jaas.cfg
@@ -0,0 +1,25 @@
+
+################################################################################
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+################################################################################
+
+#
+# This configuration file defines the ACLs for commands in the jaas subshell
+# Jaas commands commands have no effect until update is called.
+update = admin
+
diff --git a/openhab/openhab_userdata/etc/org.apache.karaf.command.acl.kar.cfg b/openhab/openhab_userdata/etc/org.apache.karaf.command.acl.kar.cfg
new file mode 100644
index 0000000..d073038
--- /dev/null
+++ b/openhab/openhab_userdata/etc/org.apache.karaf.command.acl.kar.cfg
@@ -0,0 +1,29 @@
+
+################################################################################
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+################################################################################
+
+#
+# This configuration file defines the ACLs for commands in the kar subshell
+#
+# For an explanation of the syntax of this file, see the file:
+# org.apache.karaf.command.acl.system.cfg
+#
+install = admin
+uninstall = admin
+
diff --git a/openhab/openhab_userdata/etc/org.apache.karaf.command.acl.scope_bundle.cfg b/openhab/openhab_userdata/etc/org.apache.karaf.command.acl.scope_bundle.cfg
new file mode 100644
index 0000000..ff316fa
--- /dev/null
+++ b/openhab/openhab_userdata/etc/org.apache.karaf.command.acl.scope_bundle.cfg
@@ -0,0 +1,33 @@
+
+################################################################################
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+################################################################################
+
+#
+# This configuration file defines the ACLs for scope bundles
+#
+features=org.apache.karaf.features.command
+jaas=org.apache.karaf.jaas.command
+admin=org.apache.karaf.admin.command
+osgi=org.apache.karaf.shell.osgi
+log=org.apache.karaf.shell.log
+packages=org.apache.karaf.shell.packages
+config=org.apache.karaf.shell.config
+ssh=org.apache.karaf.shell.ssh
+shell=org.apache.karaf.shell.commands
+
diff --git a/openhab/openhab_userdata/etc/org.apache.karaf.command.acl.shell.cfg b/openhab/openhab_userdata/etc/org.apache.karaf.command.acl.shell.cfg
new file mode 100644
index 0000000..4e5844d
--- /dev/null
+++ b/openhab/openhab_userdata/etc/org.apache.karaf.command.acl.shell.cfg
@@ -0,0 +1,28 @@
+
+################################################################################
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+################################################################################
+
+#
+# This configuration file defines the ACLs for commands in the shell subshell
+#
+nano = admin
+exec = admin
+new = admin
+java = admin
+
diff --git a/openhab/openhab_userdata/etc/org.apache.karaf.command.acl.system.cfg b/openhab/openhab_userdata/etc/org.apache.karaf.command.acl.system.cfg
new file mode 100644
index 0000000..7ff0336
--- /dev/null
+++ b/openhab/openhab_userdata/etc/org.apache.karaf.command.acl.system.cfg
@@ -0,0 +1,29 @@
+
+################################################################################
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+################################################################################
+
+#
+# This configuration file defines the ACLs for commands in the system subshell
+#
+property = admin
+shutdown = admin
+start-level[/.*[1-9][0-9][0-9]+.*/] = manager # manager can set startlevels above 100
+start-level[/[^0-9]*/] = viewer # viewer can obtain the current start level
+start-level = admin # admin can set any start level, including < 100
+
diff --git a/openhab/openhab_userdata/etc/org.apache.karaf.features.cfg b/openhab/openhab_userdata/etc/org.apache.karaf.features.cfg
new file mode 100644
index 0000000..4b06cd9
--- /dev/null
+++ b/openhab/openhab_userdata/etc/org.apache.karaf.features.cfg
@@ -0,0 +1,100 @@
+################################################################################
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+################################################################################
+
+#
+# Comma separated list of features repositories to register by default
+#
+featuresRepositories = \
+ mvn:org.openhab.distro/distro/4.0.3/xml/features, \
+ mvn:org.openhab.distro/openhab-addons/4.0.3/xml/features, \
+ mvn:org.apache.karaf.features/framework/4.4.3/xml/features, \
+ mvn:org.apache.karaf.features/standard/4.4.3/xml/features
+
+#
+# Comma separated list of features to install at startup
+#
+featuresBoot = \
+ instance/4.4.3, \
+ package/4.4.3, \
+ log/4.4.3, \
+ ssh/4.4.3, \
+ framework/4.4.3, \
+ system/4.4.3, \
+ eventadmin/4.4.3, \
+ feature/4.4.3, \
+ shell/4.4.3, \
+ service/4.4.3, \
+ jaas/4.4.3, \
+ openhab-runtime-base, \
+ openhab-runtime-ui, \
+ deployer/4.4.3, \
+ diagnostic/4.4.3, \
+ bundle/4.4.3, \
+ config/4.4.3, \
+ kar/4.4.3
+
+#
+# Resource repositories (OBR) that the features resolver can use
+# to resolve requirements/capabilities
+#
+# The format of the resourceRepositories is
+# resourceRepositories=[xml:url|json:url],...
+# for Instance:
+#
+#resourceRepositories=xml:http://host/path/to/index.xml
+# or
+#resourceRepositories=json:http://host/path/to/index.json
+#
+
+#
+# Defines if the boot features are started in asynchronous mode (in a dedicated thread)
+#
+featuresBootAsynchronous=false
+
+#
+# Service requirements enforcement
+#
+# By default, the feature resolver checks the service requirements/capabilities of
+# bundles for new features (xml schema >= 1.3.0) in order to automatically installs
+# the required bundles.
+# The following flag can have those values:
+# - disable: service requirements are completely ignored
+# - default: service requirements are ignored for old features
+# - enforce: service requirements are always verified
+#
+#serviceRequirements=default
+
+#
+# Store cfg file for config element in feature
+#
+configCfgStore=false
+
+#
+# Define if the feature service automatically refresh bundles
+#
+autoRefresh=true
+
+#
+# Configuration of features processing mechanism (overrides, blacklisting, modification of features)
+# XML file defines instructions related to features processing
+# versions.properties may declare properties to resolve placeholders in XML file
+# both files are relative to ${karaf.etc}
+#
+#featureProcessing=org.apache.karaf.features.xml
+#featureProcessingVersions=versions.properties
diff --git a/openhab/openhab_userdata/etc/org.apache.karaf.features.repos.cfg b/openhab/openhab_userdata/etc/org.apache.karaf.features.repos.cfg
new file mode 100644
index 0000000..bd456a5
--- /dev/null
+++ b/openhab/openhab_userdata/etc/org.apache.karaf.features.repos.cfg
@@ -0,0 +1,62 @@
+
+################################################################################
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+################################################################################
+
+#
+# This file describes the features repository URL
+# It could be directly installed using feature:repo-add command
+#
+enterprise=mvn:org.apache.karaf.features/enterprise/${karaf.version}/xml/features
+spring=mvn:org.apache.karaf.features/spring/${karaf.version}/xml/features
+spring-legacy=mvn:org.apache.karaf.features/spring-legacy/${karaf.version}/xml/features
+cellar=mvn:org.apache.karaf.cellar/apache-karaf-cellar/RELEASE/xml/features
+cave=mvn:org.apache.karaf.cave/apache-karaf-cave/RELEASE/xml/features
+camel=mvn:org.apache.camel.karaf/apache-camel/RELEASE/xml/features
+camel-extras=mvn:org.apache-extras.camel-extra.karaf/camel-extra/RELEASE/xml/features
+cxf=mvn:org.apache.cxf.karaf/apache-cxf/RELEASE/xml/features
+cxf-dosgi=mvn:org.apache.cxf.dosgi/cxf-dosgi/RELEASE/xml/features
+cxf-dosgi-samples=mvn:org.apache.cxf.dosgi/cxf-dosgi-samples/RELEASE/xml/features
+cxf-xkms=mvn:org.apache.cxf.services.xkms/cxf-services-xkms-features/RELEASE/xml
+activemq=mvn:org.apache.activemq/activemq-karaf/RELEASE/xml/features
+aries.jax.rs.whiteboard=mvn:org.apache.aries.jax.rs/org.apache.aries.jax.rs.features/RELEASE/xml
+jclouds=mvn:org.apache.jclouds.karaf/jclouds-karaf/RELEASE/xml/features
+openejb=mvn:org.apache.openejb/openejb-feature/RELEASE/xml/features
+wicket=mvn:org.ops4j.pax.wicket/features/RELEASE/xml/features
+hawtio=mvn:io.hawt/hawtio-karaf/RELEASE/xml/features
+pax-cdi=mvn:org.ops4j.pax.cdi/pax-cdi-features/RELEASE/xml/features
+pax-jdbc=mvn:org.ops4j.pax.jdbc/pax-jdbc-features/RELEASE/xml/features
+pax-jms=mvn:org.ops4j.pax.jms/pax-jms-features/RELEASE/xml/features
+pax-jpa=mvn:org.ops4j.pax.jpa/pax-jpa-features/RELEASE/xml/features
+pax-transx=mvn:org.ops4j.pax.transx/pax-transx-features/RELEASE/xml/features
+pax-keycloak=mvn:org.ops4j.pax.keycloak/pax-keycloak-features/RELEASE/xml/features
+pax-web=mvn:org.ops4j.pax.web/pax-web-features/RELEASE/xml/features
+pax-wicket=mvn:org.ops4j.pax.wicket/pax-wicket-features/RELEASE/xml/features
+ecf=http://download.eclipse.org/rt/ecf/RELEASE/site.p2/karaf-features.xml
+decanter=mvn:org.apache.karaf.decanter/apache-karaf-decanter/RELEASE/xml/features
+eclipsesource-jaxrs=mvn:com.eclipsesource.jaxrs/features/RELEASE/xml/features
+aries-cdi=mvn:org.apache.aries.cdi/aries-cdi-feature/RELEASE/xml/features
+aries-jpa=mvn:org.apache.aries.jpa/jpa-features/RELEASE/xml/features
+aries-rsa=mvn:org.apache.aries.rsa/rsa-features/RELEASE/xml/features
+hibernate=mvn:org.hibernate/hibernate-osgi/RELEASE/xml/karaf
+ignite=mvn:org.apache.ignite/ignite-osgi-karaf/RELEASE/xml/features
+openjpa=mvn:org.apache.openjpa/openjpa-features/RELEASE/xml/features
+artemis=mvn:org.apache.activemq/artemis-features/RELEASE/xml/features
+brave=mvn:io.zipkin.brave.karaf/brave-features/RELEASE/xml/features
+sling=mvn:org.apache.sling/org.apache.sling.karaf-features/RELEASE/xml/features
+
diff --git a/openhab/openhab_userdata/etc/org.apache.karaf.features.xml b/openhab/openhab_userdata/etc/org.apache.karaf.features.xml
new file mode 100644
index 0000000..3fb4f50
--- /dev/null
+++ b/openhab/openhab_userdata/etc/org.apache.karaf.features.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/openhab/openhab_userdata/etc/org.apache.karaf.jaas.cfg b/openhab/openhab_userdata/etc/org.apache.karaf.jaas.cfg
new file mode 100644
index 0000000..4bf8d61
--- /dev/null
+++ b/openhab/openhab_userdata/etc/org.apache.karaf.jaas.cfg
@@ -0,0 +1,48 @@
+## Standard settings of Karaf
+
+#
+# Encryption prefix
+#
+encryption.prefix = {CRYPT}
+
+#
+# Encryption suffix
+#
+encryption.suffix = {CRYPT}
+
+#
+# Set the encryption algorithm to use in Karaf JAAS login module
+# Supported encryption algorithms follow:
+# basic/jasypt: MD2, MD5, SHA-1, SHA-256, SHA-384, SHA-512
+# spring-security-crypto: argon2, bcrypt, pbkdf2, scrypt
+#
+encryption.algorithm = SHA-256
+
+#
+# Encoding of the encrypted password.
+# Can be:
+# hexadecimal
+# base64
+#
+encryption.encoding = hexadecimal
+
+##########################################################################
+##
+## Custom openHAB configuration
+
+#
+# Boolean enabling / disabling encrypted passwords
+#
+encryption.enabled = true
+
+#
+# Encryption Service name
+# basic: the default encryption service which digests passwords without
+# salting them
+# jasypt: a more powerful alternative which supports salting
+# spring-security-crypto: Supports bcrypt, argon2, pbkdf2, scrypt. Requires
+# the "spring-security-crypto-encryption" feature
+# to be installed.
+#
+encryption.name = basic
+
diff --git a/openhab/openhab_userdata/etc/org.apache.karaf.kar.cfg b/openhab/openhab_userdata/etc/org.apache.karaf.kar.cfg
new file mode 100644
index 0000000..e6b1493
--- /dev/null
+++ b/openhab/openhab_userdata/etc/org.apache.karaf.kar.cfg
@@ -0,0 +1,22 @@
+## Standard settings of Karaf
+
+#
+# Enable or disable the refresh of the bundles when installing
+# the features contained in a KAR file
+#
+noAutoRefreshBundles=false
+
+#
+# Enable or disable the automatic start of the bundles when installing
+# the features contained in a KAR file
+#
+noAutoStartBundles=false
+
+##########################################################################
+##
+## Custom openHAB configuration
+
+#
+# Directory where the kar are stored (when downloaded from Maven for instance)
+#
+karStorage=${karaf.data}/tmp/kar
diff --git a/openhab/openhab_userdata/etc/org.apache.karaf.log.cfg b/openhab/openhab_userdata/etc/org.apache.karaf.log.cfg
new file mode 100644
index 0000000..c401b91
--- /dev/null
+++ b/openhab/openhab_userdata/etc/org.apache.karaf.log.cfg
@@ -0,0 +1,23 @@
+## Standard settings of Karaf
+
+#
+# This configuration file is used to configure the default values for the log:display
+# and log:exception-display commands.
+#
+
+#
+# The number of log statements to be displayed using log:display. It also defines the number
+# of lines searched for exceptions using log:exception-display. You can override this value
+# at runtime using -n in log:display.
+#
+size = 500
+
+##########################################################################
+##
+## Custom openHAB configuration
+
+#
+# The pattern used to format the log statement when using log:display. This pattern is according
+# to the log4j layout. You can override this parameter at runtime using log:display with -p.
+#
+pattern = %d{HH:mm:ss.SSS} [%-5.5p] [%-37.37c] - %h{%m}%n
diff --git a/openhab/openhab_userdata/etc/org.apache.karaf.shell.cfg b/openhab/openhab_userdata/etc/org.apache.karaf.shell.cfg
new file mode 100644
index 0000000..d5189a5
--- /dev/null
+++ b/openhab/openhab_userdata/etc/org.apache.karaf.shell.cfg
@@ -0,0 +1,152 @@
+
+################################################################################
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+################################################################################
+
+#
+# These properties are used to configure Karaf's ssh shell.
+#
+
+#
+# Via sshPort and sshHost you define the address you can login into Karaf.
+#
+sshPort = 8101
+sshHost = 127.0.0.1
+
+#
+# The sshIdleTimeout defines the inactivity timeout to logout the SSH session.
+# The sshIdleTimeout is in milliseconds, and the default is set to 30 minutes.
+#
+sshIdleTimeout = 1800000
+
+#
+# Define the number of the NIO workers for the sshd server. Default is 2.
+#
+#nio-workers = 2
+
+#
+# Define the maximum number of SSH sessions. Default is unlimited.
+#
+#max-concurrent-sessions = -1
+
+#
+# sshRealm defines which JAAS domain to use for password authentication.
+#
+sshRealm = karaf
+
+#
+# Role name used for SSH access authorization
+# If not set, this defaults to the ${karaf.admin.role} configured in etc/system.properties
+#
+# sshRole = admin
+
+#
+# Defines if the SFTP system is enabled or not in the SSH server
+#
+sftpEnabled=true
+
+#
+# The location of the hostKey file defines where the private key of the server
+# is located. If no file is at the defined location it will be ignored.
+#
+hostKey = ${karaf.etc}/host.key
+
+#
+# The password required to decrypt the private key of the server stored in
+# 'hostKey'. This is not required if the private key stored in 'hostKey' is
+# not encrypted
+#
+#hostKeyPassword =
+
+#
+# The location of the hostKeyPub file defines where the public key of the server
+# is located. If no file is at the defined location it will be ignored.
+#
+#hostKeyPub = ${karaf.etc}/host.key.pub
+
+#
+# Self defined key size in 1024, 2048, 3072, or 4096
+# If not set, this defaults to 2048.
+#
+# keySize = 2048
+
+#
+# Specify host key algorithm, defaults to RSA
+#
+# algorithm = RSA
+
+#
+# Specify the client log level (default is WARN)
+# 0: ERROR
+# 1: WARN
+# 2: INFO
+# 3: DEBUG
+# 4: TRACE
+#
+#logLevel = 1
+
+#
+# Specify an additional welcome banner to be displayed when a user logs into the server.
+#
+# welcomeBanner =
+
+#
+# Defines the completion mode on the Karaf shell console. The possible values are:
+# - GLOBAL: it's the same behavior as in previous Karaf releases. The completion displays all commands and all aliases
+# ignoring if you are in a subshell or not.
+# - FIRST: the completion displays all commands and all aliases only when you are not in a subshell. When you are
+# in a subshell, the completion displays only the commands local to the subshell.
+# - SUBSHELL: the completion displays only the subshells on the root level. When you are in a subshell, the completion
+# displays only the commands local to the subshell.
+# This property define the default value when you use the Karaf shell console.
+# You can change the completion mode directly in the shell console, using shell:completion command.
+#
+completionMode = GLOBAL
+
+# If set to true, shell:logout command will not exit Karaf. This can be useful to avoid accidental exits.
+# You will be able to exit via 'shutdown' or 'halt' instead.
+disableLogout = false
+# If set to true, it will stop CTRL-D from exiting Karaf. This can be useful to avoid accidental exits.
+# You will be able to exit via 'shutdown' or 'halt' instead.
+disableEofExit = false
+
+#
+# Override allowed SSH cipher algorithms.
+# Default: aes256-ctr,aes192-ctr,aes128-ctr
+#
+# ciphers = aes256-ctr,aes192-ctr,aes128-ctr
+
+#
+# Override allowed SSH HMAC algorithms.
+# Default: hmac-sha2-512,hmac-sha2-256
+#
+# macs = hmac-sha2-512,hmac-sha2-256
+
+#
+# Override allowed SSH key exchange algorithms.
+# Default: ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256
+#
+# kexAlgorithms = ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256
+
+#
+# Override moduli-url.
+# Default: moduli-url not specified to use the internal one from SSHD
+#
+# moduli-url = external moduli-url users wanna use
+
+
diff --git a/openhab/openhab_userdata/etc/org.jupnp.cfg b/openhab/openhab_userdata/etc/org.jupnp.cfg
new file mode 100644
index 0000000..dae0b9e
--- /dev/null
+++ b/openhab/openhab_userdata/etc/org.jupnp.cfg
@@ -0,0 +1,3 @@
+multicastResponsePort=0
+asyncThreadPoolSize=30
+threadPoolSize=15
diff --git a/openhab/openhab_userdata/etc/org.openhab.audio.cfg b/openhab/openhab_userdata/etc/org.openhab.audio.cfg
new file mode 100644
index 0000000..4f88d13
--- /dev/null
+++ b/openhab/openhab_userdata/etc/org.openhab.audio.cfg
@@ -0,0 +1,2 @@
+
+defaultSink = enhancedjavasound
diff --git a/openhab/openhab_userdata/etc/org.openhab.voice.cfg b/openhab/openhab_userdata/etc/org.openhab.voice.cfg
new file mode 100644
index 0000000..164d745
--- /dev/null
+++ b/openhab/openhab_userdata/etc/org.openhab.voice.cfg
@@ -0,0 +1,2 @@
+
+defaultHLI = rulehli
diff --git a/openhab/openhab_userdata/etc/org.ops4j.pax.logging.cfg b/openhab/openhab_userdata/etc/org.ops4j.pax.logging.cfg
new file mode 100644
index 0000000..e8a48ea
--- /dev/null
+++ b/openhab/openhab_userdata/etc/org.ops4j.pax.logging.cfg
@@ -0,0 +1 @@
+org.ops4j.pax.logging.log4j2.config.file=${karaf.etc}/log4j2.xml
diff --git a/openhab/openhab_userdata/etc/org.ops4j.pax.url.mvn.cfg b/openhab/openhab_userdata/etc/org.ops4j.pax.url.mvn.cfg
new file mode 100644
index 0000000..c6a93d9
--- /dev/null
+++ b/openhab/openhab_userdata/etc/org.ops4j.pax.url.mvn.cfg
@@ -0,0 +1,120 @@
+#
+# If set to true, the following property will not allow any certificate to be used
+# when accessing Maven repositories through SSL
+#
+#org.ops4j.pax.url.mvn.certificateCheck=
+
+#
+# Path to the local Maven settings file.
+# The repositories defined in this file will be automatically added to the list
+# of default repositories if the 'org.ops4j.pax.url.mvn.repositories' property
+# below is not set.
+# The following locations are checked for the existence of the settings.xml file
+# * 1. looks for the specified url
+# * 2. if not found looks for /var/jenkins_home/.m2/settings.xml
+# * 3. if not found looks for /var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/maven_latest_/conf/settings.xml
+# * 4. if not found looks for ${M2_HOME}/conf/settings.xml
+#
+# Properties prefixed with "org.ops4j.pax.url.mvn." have
+# higher priority except element. HTTP proxies should be configured in
+# settings file
+#org.ops4j.pax.url.mvn.settings=
+
+#
+# Path to the local Maven repository which is used to avoid downloading
+# artifacts when they already exist locally.
+# The value of this property will be extracted from the settings.xml file
+# above, or defaulted to:
+# System.getProperty( "user.home" ) + "/.m2/repository"
+#
+org.ops4j.pax.url.mvn.localRepository=${openhab.userdata}/tmp/mvn
+
+#
+# Default this to false. It's just weird to use undocumented repos
+# "false" means that https://repo1.maven.org/maven2@id=central won't be
+# implicitly used as remote repository
+#
+org.ops4j.pax.url.mvn.useFallbackRepositories=false
+
+#
+# Comma separated list of repositories scanned when resolving an artifact.
+# list of repositories searched in the first place, should contain
+# ${runtime.home}/${karaf.default.repository}.
+# if "org.ops4j.pax.url.mvn.localRepository" is defined and it's not
+# ~/.m2/repository, it's recommended (at least for dev purposes) to add
+# ~/.m2/repository to defaultRepositories
+# each of these repositories is checked by aether as "local repository". if
+# artifact isn't found, "repositories" are searched next
+#
+# Those repositories will be checked before iterating through the
+# below list of repositories and even before the local repository
+# A repository url can be appended with zero or more of the following flags:
+# @snapshots : the repository contains snapshots
+# @noreleases : the repository does not contain any released artifacts
+#
+# The following property value will add the system folder as a repo.
+#
+org.ops4j.pax.url.mvn.defaultRepositories=\
+ ${karaf.home.uri}${karaf.default.repository}@id=system.repository@snapshots, \
+ ${karaf.data.uri}tmp/kar@id=kar.repository@multi@snapshots, \
+ ${karaf.base.uri}${karaf.default.repository}@id=child.system.repository@snapshots
+
+#
+# if "defaultLocalRepoAsRemote" is set to *any* value, localRepository will be
+# added to the list of remote repositories being searched for artifacts
+#
+#org.ops4j.pax.url.mvn.defaultLocalRepoAsRemote = true
+
+#
+# Comma separated list of repositories scanned when resolving an artifact.
+# list of repositories searched after resolution fails for "defaultRepositories"
+# These are true remote repositories accessed using maven/aether/wagon
+# mechanisms. If any repository contains required artifact, it is then written
+# to "localRepository"
+#
+# if this list is _prepended_ with '+' sign, all repositories from active
+# profiles defined in effective settings.xml file will be _appended_ to this
+# list
+# The default list includes the following repositories:
+# https://repo1.maven.org/maven2@id=central
+# https://repository.apache.org/content/groups/snapshots-group@id=apache@snapshots@noreleases
+# https://oss.sonatype.org/content/repositories/ops4j-snapshots@id=ops4j.sonatype.snapshots.deploy@snapshots@noreleases
+# A repository url can be appended with zero or more of the following flags:
+# @snapshots : the repository contains snapshots
+# @noreleases : the repository does not contain any released artifacts
+# @id=repository.id : the id for the repository, just like in the
+# settings.xml this is optional but recommended
+#
+# This contains the openHAB and default repositories.
+#
+org.ops4j.pax.url.mvn.repositories= \
+ https://openhab.jfrog.io/openhab/libs-release@id=openhab
+
+#
+# Global policies override repository-specific settings (@checksum=..., @update=..., @releasesUpdate=..., ...)
+#
+#org.ops4j.pax.url.mvn.globalUpdatePolicy = daily
+#org.ops4j.pax.url.mvn.globalChecksumPolicy = warn
+
+#
+# socket and connection configuration (pax-url-aether 2.5.0)
+#
+# default value for connection and read timeouts, when socket.readTimeout and socket.connectionTimeout
+# are not specified
+org.ops4j.pax.url.mvn.timeout = 5000
+# timeout in ms when establishing http connection during artifact resolution
+org.ops4j.pax.url.mvn.socket.connectionTimeout = 5000
+# timeout in ms when reading data after connecting to remote repository
+org.ops4j.pax.url.mvn.socket.readTimeout = 30000
+# SO_KEEPALIVE option for sockets, defaults to false
+org.ops4j.pax.url.mvn.socket.keepAlive = false
+# SO_LINGER option for sockets, defaults to -1
+org.ops4j.pax.url.mvn.socket.linger = -1
+# SO_REUSEADDR option for sockets, defaults to false
+org.ops4j.pax.url.mvn.socket.reuseAddress = false
+# TCP_NODELAY option for sockets, defaults to true
+org.ops4j.pax.url.mvn.socket.tcpNoDelay = true
+# Configure buffer size for HTTP connections (output and input buffers), defaults to 8192 bytes
+org.ops4j.pax.url.mvn.connection.bufferSize = 8192
+# Number of connection retries after failure is detected in http client. httpclient uses default value "3"
+org.ops4j.pax.url.mvn.connection.retryCount = 3
diff --git a/openhab/openhab_userdata/etc/org.ops4j.pax.web.cfg b/openhab/openhab_userdata/etc/org.ops4j.pax.web.cfg
new file mode 100644
index 0000000..5eedb13
--- /dev/null
+++ b/openhab/openhab_userdata/etc/org.ops4j.pax.web.cfg
@@ -0,0 +1,62 @@
+#
+# min server threads
+#
+org.ops4j.pax.web.server.minThreads = 2
+
+#
+# max server threads
+#
+org.ops4j.pax.web.server.maxThreads = 50
+
+#
+# location of jetty config
+#
+org.ops4j.pax.web.config.file = ${openhab.runtime}/etc/jetty.xml
+
+#
+# enable https
+#
+org.osgi.service.http.secure.enabled = true
+
+#
+# http port.
+# This is currently also in the setenv
+# org.osgi.service.http.port = 8080
+
+#
+# https port, default is 8443.
+# This is currently also in the setenv
+#
+#org.osgi.service.http.port.secure = 8443
+
+#
+# The number of minutes after which an inactive session will timeout.
+#
+org.ops4j.pax.web.session.timeout = 10
+
+#
+# Specifies if the connections established use the nio classes from java.
+#
+org.osgi.service.http.useNIO = true
+
+#
+# Set to true if certificate-based client authentication at the server is "wanted".
+#
+org.ops4j.pax.web.ssl.clientauthwanted = false
+
+#
+# Set to true if certificate-based client authentication at the server is "required".
+#
+org.ops4j.pax.web.ssl.clientauthneeded = false
+
+#
+# The time in milliseconds that the connection can be idle before it is closed.
+#
+org.ops4j.pax.web.server.idleTimeout = 300000
+
+#
+# Listening addresses. This should match host in the sslconnector/name attribute in jetty.xml
+# Default is 0.0.0.0
+# This is currently also in the setenv
+#
+#org.ops4j.pax.web.listening.addresses = 0.0.0.0
diff --git a/openhab/openhab_userdata/etc/overrides.properties b/openhab/openhab_userdata/etc/overrides.properties
new file mode 100644
index 0000000..e69de29
diff --git a/openhab/openhab_userdata/etc/profile.cfg b/openhab/openhab_userdata/etc/profile.cfg
new file mode 100644
index 0000000..ee4b584
--- /dev/null
+++ b/openhab/openhab_userdata/etc/profile.cfg
@@ -0,0 +1,119 @@
+#
+# Profile generated by Karaf Assembly Builder
+#
+
+# Parent profiles
+attribute.parents = generated-startup generated-boot generated-installed
+
+# Attributes
+attribute.overlay = true
+
+# Feature XML repositories
+repository.mvn\:org.apache.karaf.features/standard/4.4.3/xml/features = mvn:org.apache.karaf.features/standard/4.4.3/xml/features
+repository.mvn\:org.apache.karaf.features/framework/4.4.3/xml/features = mvn:org.apache.karaf.features/framework/4.4.3/xml/features
+repository.mvn\:org.openhab.distro/distro/4.0.3/xml/features = mvn:org.openhab.distro/distro/4.0.3/xml/features
+repository.mvn\:org.openhab.distro/openhab-addons/4.0.3/xml/features = mvn:org.openhab.distro/openhab-addons/4.0.3/xml/features
+repository.mvn\:org.openhab.distro/distro-kar/4.0.3/xml/features = mvn:org.openhab.distro/distro-kar/4.0.3/xml/features
+
+# Features
+feature.framework = framework
+feature.eventadmin = eventadmin
+feature.jaas = jaas
+feature.shell = shell
+feature.ssh = ssh
+feature.bundle = bundle
+feature.config = config
+feature.deployer = deployer
+feature.diagnostic = diagnostic
+feature.feature = feature
+feature.instance = instance
+feature.kar = kar
+feature.log = log
+feature.package = package
+feature.service = service
+feature.system = system
+feature.openhab-runtime-base = openhab-runtime-base
+feature.openhab-runtime-ui = openhab-runtime-ui
+feature.wrapper = wrapper
+feature.wrap = wrap
+feature.openhab-runtime-ui/4.0.3 = openhab-runtime-ui/4.0.3
+feature.openhab-core-base/4.0.3 = openhab-core-base/4.0.3
+feature.openhab-core-addon-marketplace/4.0.3 = openhab-core-addon-marketplace/4.0.3
+feature.openhab-core-auth-jaas/4.0.3 = openhab-core-auth-jaas/4.0.3
+feature.openhab-core-auth-oauth2client/4.0.3 = openhab-core-auth-oauth2client/4.0.3
+feature.openhab-core-automation-module-script/4.0.3 = openhab-core-automation-module-script/4.0.3
+feature.openhab-core-automation-module-script-rulesupport/4.0.3 = openhab-core-automation-module-script-rulesupport/4.0.3
+feature.openhab-core-automation-module-media/4.0.3 = openhab-core-automation-module-media/4.0.3
+feature.openhab-core-automation-rest/4.0.3 = openhab-core-automation-rest/4.0.3
+feature.openhab-core-io-bin2json/4.0.3 = openhab-core-io-bin2json/4.0.3
+feature.openhab-core-io-console-karaf/4.0.3 = openhab-core-io-console-karaf/4.0.3
+feature.openhab-core-io-http-auth/4.0.3 = openhab-core-io-http-auth/4.0.3
+feature.openhab-core-io-rest-auth/4.0.3 = openhab-core-io-rest-auth/4.0.3
+feature.openhab-core-io-rest-log/4.0.3 = openhab-core-io-rest-log/4.0.3
+feature.openhab-core-io-rest-sitemap/4.0.3 = openhab-core-io-rest-sitemap/4.0.3
+feature.openhab-core-io-rest-swagger/4.0.3 = openhab-core-io-rest-swagger/4.0.3
+feature.openhab-core-io-rest-audio/4.0.3 = openhab-core-io-rest-audio/4.0.3
+feature.openhab-core-io-rest-transform/4.0.3 = openhab-core-io-rest-transform/4.0.3
+feature.openhab-core-io-rest-voice/4.0.3 = openhab-core-io-rest-voice/4.0.3
+feature.openhab-core-io-rest-mdns/4.0.3 = openhab-core-io-rest-mdns/4.0.3
+feature.openhab-core-io-websocket/4.0.3 = openhab-core-io-websocket/4.0.3
+feature.openhab-core-io-transport-coap/4.0.3 = openhab-core-io-transport-coap/4.0.3
+feature.openhab-core-io-transport-http/4.0.3 = openhab-core-io-transport-http/4.0.3
+feature.openhab-core-io-transport-mdns/4.0.3 = openhab-core-io-transport-mdns/4.0.3
+feature.openhab-core-io-transport-modbus/4.0.3 = openhab-core-io-transport-modbus/4.0.3
+feature.openhab-core-io-transport-mqtt/4.0.3 = openhab-core-io-transport-mqtt/4.0.3
+feature.openhab-core-io-transport-serial-javacomm/4.0.3 = openhab-core-io-transport-serial-javacomm/4.0.3
+feature.openhab-core-io-transport-upnp/4.0.3 = openhab-core-io-transport-upnp/4.0.3
+feature.openhab.inc-model-core/4.0.3 = openhab.inc-model-core/4.0.3
+feature.openhab-core-model-item/4.0.3 = openhab-core-model-item/4.0.3
+feature.openhab-core-model-item-ide/4.0.3 = openhab-core-model-item-ide/4.0.3
+feature.openhab-core-model-persistence/4.0.3 = openhab-core-model-persistence/4.0.3
+feature.openhab-core-model-persistence-ide/4.0.3 = openhab-core-model-persistence-ide/4.0.3
+feature.openhab-core-model-rule/4.0.3 = openhab-core-model-rule/4.0.3
+feature.openhab-core-model-rule-ide/4.0.3 = openhab-core-model-rule-ide/4.0.3
+feature.openhab-core-model-script/4.0.3 = openhab-core-model-script/4.0.3
+feature.openhab-core-model-script-ide/4.0.3 = openhab-core-model-script-ide/4.0.3
+feature.openhab-core-model-sitemap/4.0.3 = openhab-core-model-sitemap/4.0.3
+feature.openhab-core-model-sitemap-ide/4.0.3 = openhab-core-model-sitemap-ide/4.0.3
+feature.openhab-core-model-thing/4.0.3 = openhab-core-model-thing/4.0.3
+feature.openhab-core-model-thing-ide/4.0.3 = openhab-core-model-thing-ide/4.0.3
+feature.openhab-core-model-lsp/4.0.3 = openhab-core-model-lsp/4.0.3
+feature.openhab-core-storage-json/4.0.3 = openhab-core-storage-json/4.0.3
+feature.openhab-core-ui/4.0.3 = openhab-core-ui/4.0.3
+feature.openhab-core-ui-icon/4.0.3 = openhab-core-ui-icon/4.0.3
+feature.openhab-runtime-base/4.0.3 = openhab-runtime-base/4.0.3
+feature.openhab-runtime-certificate/4.0.3 = openhab-runtime-certificate/4.0.3
+feature.openhab-transport-coap/4.0.3 = openhab-transport-coap/4.0.3
+feature.openhab-transport-http/4.0.3 = openhab-transport-http/4.0.3
+feature.openhab-transport-mdns/4.0.3 = openhab-transport-mdns/4.0.3
+feature.openhab-transport-modbus/4.0.3 = openhab-transport-modbus/4.0.3
+feature.openhab-transport-mqtt/4.0.3 = openhab-transport-mqtt/4.0.3
+feature.openhab-transport-serial/4.0.3 = openhab-transport-serial/4.0.3
+feature.openhab-transport-upnp/4.0.3 = openhab-transport-upnp/4.0.3
+feature.openhab.tp-base/4.0.3 = openhab.tp-base/4.0.3
+feature.openhab.tp-coap/4.0.3 = openhab.tp-coap/4.0.3
+feature.openhab.tp-commons-net/4.0.3 = openhab.tp-commons-net/4.0.3
+feature.openhab.tp-gson/4.0.3 = openhab.tp-gson/4.0.3
+feature.openhab.tp-hivemqclient/4.0.3 = openhab.tp-hivemqclient/4.0.3
+feature.openhab.tp-httpclient/4.0.3 = openhab.tp-httpclient/4.0.3
+feature.openhab.tp-jackson/4.0.3 = openhab.tp-jackson/4.0.3
+feature.openhab.tp-asm/4.0.3 = openhab.tp-asm/4.0.3
+feature.openhab.tp-jax-rs-whiteboard/4.0.3 = openhab.tp-jax-rs-whiteboard/4.0.3
+feature.openhab.tp-jna/4.0.3 = openhab.tp-jna/4.0.3
+feature.openhab.tp-cxf/4.0.3 = openhab.tp-cxf/4.0.3
+feature.openhab.tp-jbbp/4.0.3 = openhab.tp-jbbp/4.0.3
+feature.openhab.tp-netty/4.0.3 = openhab.tp-netty/4.0.3
+feature.openhab.tp-jaxb/4.0.3 = openhab.tp-jaxb/4.0.3
+feature.openhab.tp-jaxws/4.0.3 = openhab.tp-jaxws/4.0.3
+feature.openhab.tp-jollyday/4.0.3 = openhab.tp-jollyday/4.0.3
+feature.openhab.tp-jmdns/4.0.3 = openhab.tp-jmdns/4.0.3
+feature.openhab.tp-jose4j/4.0.3 = openhab.tp-jose4j/4.0.3
+feature.openhab.tp-jupnp/4.0.3 = openhab.tp-jupnp/4.0.3
+feature.openhab.tp-lsp4j/4.0.3 = openhab.tp-lsp4j/4.0.3
+feature.openhab.tp-serial-javacomm/4.0.3 = openhab.tp-serial-javacomm/4.0.3
+feature.openhab.tp-serial-rxtx/4.0.3 = openhab.tp-serial-rxtx/4.0.3
+feature.openhab.tp-xtext/4.0.3 = openhab.tp-xtext/4.0.3
+feature.openhab.tp-xtext-ide/4.0.3 = openhab.tp-xtext-ide/4.0.3
+feature.openhab.tp-swagger-jaxrs/4.0.3 = openhab.tp-swagger-jaxrs/4.0.3
+feature.distro/4.0.3 = distro/4.0.3
+feature.distro-kar/4.0.3 = distro-kar/4.0.3
diff --git a/openhab/openhab_userdata/etc/scripts/shell.colors.script b/openhab/openhab_userdata/etc/scripts/shell.colors.script
new file mode 100644
index 0000000..a90bceb
--- /dev/null
+++ b/openhab/openhab_userdata/etc/scripts/shell.colors.script
@@ -0,0 +1,40 @@
+// This script overrides the default colors for the Karaf console.
+// All colors are set using the original ANSI escape code specification.
+
+// HIGHLIGHTER_COLORS overrides the colors related to console input.
+// From the Apache Felix documentation:
+// rs : Reserved words
+// st : Strings
+// nu : Numbers
+// co : Constants
+// va : Variable
+// vn : Variable name
+// fu : Function
+// bf : Bad function
+// un : Unknown
+// re : Repair
+
+HIGHLIGHTER_COLORS = "rs=93:st=92:nu=37:co=90:va=97:vn=37:fu=96:bf=91:re=32"
+
+// LS_COLORS overrides the colors used in the ls command output.
+// From the Apache Felix documentation:
+// dr : Directory
+// ex : Executable
+// sl : Symbolic Link
+// ot : Other
+
+//LS_COLORS = "dr=1;91:ex=1;92:sl=1;96:ot=34;43"
+
+// GREP_COLORS overrides the colors used in the grep command output.
+// From the Apache Felix documentation:
+// mt : Hits in the text (sets both ms and mc)
+// ms : Matching text in selected line
+// mc : Matching text in context line
+// fn : File names
+// ln : Line numbers
+// se : Selected lines
+// sl : Whole selected line
+// cx : Context lines
+// rv : If set and match is inverted, the meaning of sl and cx is inverted
+
+//GREP_COLORS = "mt=1;31:fn=35:ln=32:se=36"
diff --git a/openhab/openhab_userdata/etc/scripts/shell.completion.script b/openhab/openhab_userdata/etc/scripts/shell.completion.script
new file mode 100644
index 0000000..7785633
--- /dev/null
+++ b/openhab/openhab_userdata/etc/scripts/shell.completion.script
@@ -0,0 +1,271 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+// This script is run each time a shell is created.
+// You can define here closures or variables that will be available
+// in each session.
+//
+
+__option_not_present = {
+ res = true
+ opts = $argv
+ each $opts {
+ arg = $it
+ each ($.commandLine words) {
+ if { ($it toString) equals ($arg toString) } {
+ res = false
+ }
+ }
+ }
+ $res
+}
+
+__set_unset_arguments = {
+ is_setopt = (($.commandLine words) get 0) equals "setopt"
+ enums = ((__load_class 'org.jline.reader.LineReader$Option') enumConstants)
+ candidates = new ArrayList
+ each $enums {
+ name = ${(GL)it/_/-}
+ is_set = ($.reader isSet $it)
+ neg = %(( if(is_setopt, is_set, not(is_set)) ))
+ if { $neg } {
+ name = "no-${name}"
+ }
+ if { not { (($.commandLine words) subList 1 ($.commandLine wordIndex)) contains $name } } {
+ $candidates add (new org.jline.reader.Candidate $name $name (if { $neg } { "unset" } { "set" }) null null null true)
+ }
+ }
+ $candidates
+}
+
+jlineReader = $.reader
+if { %(jlineReader != null) } {
+
+ complete -c shell:complete -e
+ complete -c shell:complete -d "Edit command specific completions"
+ complete -c shell:complete -s c -l command --description "Command to add completion to" -n '__option_not_present -c --command' -a '$.commands'
+ complete -c shell:complete -s s -l short-option --description "Posix-style option to complete" -n '__option_not_present -s --short-option'
+ complete -c shell:complete -s l -l long-option --description "GNU-style option to complete" -n '__option_not_present -l --long-option'
+ complete -c shell:complete -s a -l arguments --description "A list of possible arguments" -n '__option_not_present -a --argument'
+ complete -c shell:complete -s d -l description --description "Description of this completions" -n '__option_not_present -d --description'
+ complete -c shell:complete -s h -l help --description "Display help and exit" -n '__option_not_present -h --help'
+ complete -c shell:complete -s n -l condition --description "The completion should only be used if the specified command has a zero exit status" -n '__option_not_present -n --condition'
+ complete -c shell:complete -s e -l erase --description "Remove completion" -n '__option_not_present -e --erase'
+
+ complete -c shell:history -e
+ complete -c shell:history -d "Show and manipulate command history"
+ complete -c shell:history -l clear --description "Clear history" -n '__option_not_present --clear'
+ complete -c shell:history -l save --description "Save history" -n '__option_not_present --save'
+
+ complete -c shell:setopt -e
+ complete -c shell:setopt -d "Set or view set shell options"
+ complete -c shell:setopt -a '__set_unset_arguments'
+
+ complete -c shell:unsetopt -e
+ complete -c shell:unsetopt -d "Unset or view unset shell options"
+ complete -c shell:unsetopt -a '__set_unset_arguments'
+
+ complete -c shell:cat -e
+ complete -c shell:cat -d "Concatenate and print files"
+ complete -c shell:cat -s n "Number the output lines, starting at 1"
+ complete -c shell:cat -a '__files'
+
+ complete -c shell:pwd -e
+ complete -c shell:pwd -d "Get current directory"
+
+ complete -c shell:ls -e
+ complete -c shell:ls -d "List files"
+
+ complete -c shell:cd -e
+ complete -c shell:cd -d "Change current directory"
+ complete -c shell:cd -a 'wi = ($.commandLine wordIndex); if { %(wi==1) } { __directories } { [ ] }'
+
+ complete -c shell:sleep -e
+ complete -c shell:sleep -d "Pause execution for the specified amount of time"
+
+ complete -c shell:echo -e
+ complete -c shell:echo -d "Write arguments to the standard output"
+ complete -c shell:echo -s n -d "No trailing new line"
+
+ complete -c shell:grep -e
+ complete -c shell:grep -d "File pattern searcher"
+ # TODO
+
+ complete -c shell:sort -e
+ complete -c shell:sort -d "Sort lines of text files"
+ # TODO
+
+ complete -c shell:gosh -e
+ complete -c shell:gosh -d "Execute script with arguments in a new session"
+ # TODO
+
+ complete -c shell:sh -e
+ complete -c shell:sh -d "Execute script with arguments in a new session"
+ # TODO
+
+ complete -c shell:source -e
+ complete -c shell:source -d "Execute script with arguments"
+ # TODO
+
+ # TODO: format getopt new set tac type addcommand removeCommand eval
+
+ complete -c shell:break -e
+ complete -c shell:break -d "Break from a loop"
+
+ complete -c shell:continue -e
+ complete -c shell:continue -d "Continue to next iteration in a loop"
+
+ complete -c shell:each -e
+ complete -c shell:each -d "Loop and execute script on the specified elements"
+
+ complete -c shell:if -e
+ complete -c shell:if -d "Conditionaly execute a script"
+
+ complete -c shell:new -e
+ complete -c shell:new -d "Creates new instance of the given java class"
+
+ complete -c shell:not -e
+ complete -c shell:not -d "Negates the result of a script"
+
+ complete -c shell:throw -e
+ complete -c shell:throw -d "Throws an exception"
+
+ complete -c shell:try -e
+ complete -c shell:try -d "Try executing a script and catch any exception"
+
+ complete -c shell:until -e
+ complete -c shell:until -d "Loop and execute script until a condition is satisfied"
+
+ complete -c shell:while -e
+ complete -c shell:while -d "Loop and execute script while a condition is satisfied"
+
+ complete -c shell:less -e
+ complete -c shell:less -d "File pager"
+ complete -c shell:less -s e -l quit-at-eof --description "Exit on second EOF"
+ complete -c shell:less -s E -l QUIT-AT-EOF --description "Exit on EOF"
+ complete -c shell:less -s q -l quiet -l silent --description "Silent mode"
+ complete -c shell:less -s Q -l QUIET -l SILENT --description "Completely silent"
+ complete -c shell:less -s S -l chop-long-lines --description "Do not fold long lines"
+ complete -c shell:less -s i -l ignore-case --description "Search ignores lowercase case"
+ complete -c shell:less -s I -l IGNORE-CASE --description "Search ignores all case"
+ complete -c shell:less -s x -l tabs --description "Set tab stops"
+ complete -c shell:less -s N -l LINE-NUMBERS --description "Display line number for each line"
+ complete -c shell:less -a '__files'
+
+ complete -c shell:nano -e
+ complete -c shell:nano -d "File editor"
+ complete -c shell:nano -a '__files'
+
+ complete -c shell:keymap -e
+ complete -c shell:keymap -d "Manipulate keymaps"
+ complete -c shell:keymap -s N --description "Create a new keymap" -n '__option_not_present -N -d -D -l -r -s -A'
+ complete -c shell:keymap -s d --description "Delete existing keymaps and reset to default state" -n '__option_not_present -N -d -D -l -r -s -A'
+ complete -c shell:keymap -s D --description "Delete named keymaps" -n '__option_not_present -N -d -D -l -r -s -A'
+ complete -c shell:keymap -s l --description "List existing keymap names" -n '__option_not_present -N -d -D -l -r -s -A'
+ complete -c shell:keymap -s r --description "Unbind specified in-strings" -n '__option_not_present -N -d -D -l -r -s -A'
+ complete -c shell:keymap -s s --description "Bind each in-string to each out-string" -n '__option_not_present -N -d -D -l -r -s -A'
+ complete -c shell:keymap -s A --description "Create alias to keymap" -n '__option_not_present -N -d -D -l -r -s -A'
+ complete -c shell:keymap -s e --description "Select emacs keymap and bind it to main" -n '__option_not_present -e -a -v -M'
+ complete -c shell:keymap -s v --description "Select viins keymap and bind it to main" -n '__option_not_present -e -a -v -M'
+ complete -c shell:keymap -s a --description "Select vicmd keymap" -n '__option_not_present -e -a -v -M'
+ complete -c shell:keymap -s M --description "Specify keymap to select" -n '__option_not_present -e -a -v -M' -a '(keymap -l | tac) split " "'
+ complete -c shell:keymap -s R --description "Interpret in-strings as ranges"
+ complete -c shell:keymap -s p --description "List bindings which have given key sequence as a a prefix"
+ complete -c shell:keymap -s L --description "Output in form of keymap commands"
+
+ complete -c shell:widget -e
+ complete -c shell:widget -d "Manipulate widgets"
+ complete -c shell:widget -s N --description "Create a new widget" -n '__option_not_present -N -A -D -U -l'
+ complete -c shell:widget -s A --description "Create alias to widget" -n '__option_not_present -N -A -D -U -l'
+ complete -c shell:widget -s D --description "Delete widgets" -n '__option_not_present -N -A -D -U -l'
+ complete -c shell:widget -s U --description "Push characters to the stack" -n '__option_not_present -N -A -D -U -l'
+ complete -c shell:widget -s l --description "List user-defined widgets" -n '__option_not_present -N -A -D -U -l'
+ complete -c shell:widget -s a --description "With -l, list all widgets" -n '__option_not_present -l'
+
+ complete -c shell:bg -e
+ complete -c shell:bg -d "Put job in background"
+
+ complete -c shell:fg -e
+ complete -c shell:fg -d "Put job in foreground"
+
+ complete -c shell:jobs -e
+ complete -c shell:jobs -d "List jobs"
+
+ complete -c shell:clear -e
+ complete -c shell:clear -d "Clear screen"
+
+ complete -c shell:head -e
+ complete -c shell:head -d "Displays first lines of file"
+ complete -c shell:head -s n -l lines --description "Print line counts"
+ complete -c shell:head -s c -l bytes --description "Print byte counts"
+ complete -c shell:head -a '__files'
+
+ complete -c shell:tail -e
+ complete -c shell:tail -d "Displays last lines of file"
+ complete -c shell:tail -s q -l quiet --description "Suppress headers when printing multiple sources"
+ complete -c shell:tail -s f -l follow --description "Do not stop at end of file"
+ complete -c shell:tail -s F -l FOLLOW --description "Follow and check for file renaming or rotation"
+ complete -c shell:tail -s n -l lines --description "Number of lines to print"
+ complete -c shell:tail -s c -l bytes --description "Number of bytes to print"
+ complete -c shell:tail -a '__files'
+
+ complete -c shell:date -e
+ complete -c shell:date -d "Display date and time"
+ complete -c shell:date -s u --description "Use UTC"
+ complete -c shell:date -s r --description "Print the date represented by 'seconds' since January 1, 1970"
+ complete -c shell:date -s v --description "Adjust date"
+ complete -c shell:date -s f --description "Use 'input_fmt' to parse 'new_date'"
+
+ complete -c shell:wc -e
+ complete -c shell:wc -d "Word, line, character, and byte count"
+ complete -c shell:wc -s n -l lines --description "Print line count"
+ complete -c shell:wc -s c -l bytes --description "Print byte count"
+ complete -c shell:wc -s m -l chars --description "Print character count"
+ complete -c shell:wc -s w -l words --description "Print word count"
+ complete -c shell:wc -a '__files'
+
+ __get_scr_components = {
+ list = [ ]
+ scrref = ($.context getServiceReference org.osgi.service.component.runtime.ServiceComponentRuntime)
+ scr = ($.context getService $scrref)
+ each ($scr getComponentDescriptionDTOs ($.context bundles)) {
+ $list add ((($it getClass) getField "name") get $it)
+ }
+ $.context ungetService $scrref
+ $list
+ }
+
+ complete -c scr:config -e
+ complete -c scr:config -d "Show the current SCR configuration"
+
+ complete -c scr:disable -e
+ complete -c scr:disable -d "Disable an enabled component"
+ complete -c scr:disable -a '__get_scr_components'
+
+ complete -c scr:enable -e
+ complete -c scr:enable -d "Enable an disabled component"
+ complete -c scr:enable -a '__get_scr_components'
+
+ complete -c scr:info -e
+ complete -c scr:info -d "Dump information of a component or component configuration"
+ complete -c scr:info -a '__get_scr_components'
+
+ complete -c scr:list -e
+ complete -c scr:list -d "List component configurations of a specific bundle"
+
+}
diff --git a/openhab/openhab_userdata/etc/shell.init.script b/openhab/openhab_userdata/etc/shell.init.script
new file mode 100644
index 0000000..1d2f8ec
--- /dev/null
+++ b/openhab/openhab_userdata/etc/shell.init.script
@@ -0,0 +1,55 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+// This script is run each time a shell is created.
+// You can define here closures or variables that will be available
+// in each session.
+//
+ld = { log:display $args } ;
+lde = { log:exception-display $args } ;
+la = { bundle:list -t 0 $args } ;
+ls = { service:list $args } ;
+cl = { config:list "(service.pid=$args)" } ;
+halt = { system:shutdown -h -f $args } ;
+help = { *:help $args | more } ;
+man = { help $args } ;
+log:list = { log:get ALL } ;
+service:get = { $.context getService ($.context getServiceReference $args) };
+feature:upgrade = { feature:install -u $args } ;
+
+env = { shell:set $args }
+edit = { shell:nano $args }
+more = { shell:less -F $args }
+
+__load_class = {
+ (($.reader class) classLoader) loadClass $1
+}
+
+// make sure that we catch exceptions
+// as they do occur if the session is headless / non-interactive
+jlineReader = $.reader
+if { %(jlineReader != null) } {
+ setopt group
+ setopt auto-fresh-line
+ unsetopt insert-tab
+ keymap "^[OA" up-line-or-search
+ keymap "^[[A" up-line-or-search
+ keymap "^[OB" down-line-or-search
+ keymap "^[[B" down-line-or-search
+
+}
diff --git a/openhab/openhab_userdata/etc/startup.properties b/openhab/openhab_userdata/etc/startup.properties
new file mode 100644
index 0000000..2217321
--- /dev/null
+++ b/openhab/openhab_userdata/etc/startup.properties
@@ -0,0 +1,20 @@
+# Bundles to be started on startup, with startlevel
+mvn\:org.apache.karaf.features/org.apache.karaf.features.extension/4.4.3 = 1
+mvn\:org.ops4j.pax.url/pax-url-aether/2.6.12 = 5
+mvn\:org.apache.felix/org.apache.felix.metatype/1.2.4 = 5
+mvn\:org.apache.karaf.services/org.apache.karaf.services.eventadmin/4.4.3 = 5
+mvn\:org.ops4j.pax.logging/pax-logging-api/2.2.0 = 8
+mvn\:org.fusesource.jansi/jansi/2.4.0 = 8
+mvn\:org.ops4j.pax.logging/pax-logging-log4j2/2.2.0 = 8
+mvn\:org.osgi/org.osgi.util.function/1.2.0 = 9
+mvn\:org.osgi/org.osgi.util.promise/1.2.0 = 9
+mvn\:org.apache.felix/org.apache.felix.coordinator/1.0.2 = 9
+mvn\:org.apache.felix/org.apache.felix.converter/1.0.14 = 9
+mvn\:org.apache.felix/org.apache.felix.configadmin/1.9.26 = 10
+mvn\:org.apache.karaf.config/org.apache.karaf.config.core/4.4.3 = 11
+mvn\:org.apache.felix/org.apache.felix.configurator/1.0.16 = 11
+mvn\:org.apache.felix/org.apache.felix.configadmin.plugin.interpolation/1.2.6 = 11
+mvn\:org.apache.sling/org.apache.sling.commons.johnzon/1.2.14 = 11
+mvn\:org.apache.felix/org.apache.felix.cm.json/1.0.6 = 11
+mvn\:org.apache.felix/org.apache.felix.fileinstall/3.7.4 = 12
+mvn\:org.apache.karaf.features/org.apache.karaf.features.core/4.4.3 = 15
diff --git a/openhab/openhab_userdata/etc/system.properties b/openhab/openhab_userdata/etc/system.properties
new file mode 100644
index 0000000..20e5450
--- /dev/null
+++ b/openhab/openhab_userdata/etc/system.properties
@@ -0,0 +1,162 @@
+################################################################################
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+################################################################################
+
+#
+# The properties defined in this file will be made available through system
+# properties at the very beginning of the Karaf's boot process.
+#
+
+# Properties file inclusions (as a space separated list of relative paths)
+# Included files will override the values specified in this file
+${optionals} = custom.system.properties
+
+# Log level when the pax-logging service is not available
+# This level will only be used while the pax-logging service bundle
+# is not fully available.
+# To change log levels, please refer to the org.ops4j.pax.logging.cfg file
+# instead.
+org.ops4j.pax.logging.DefaultServiceLog.level = ERROR
+
+#
+# Name of this Karaf instance.
+#
+karaf.name = root
+
+#
+# Default repository where bundles will be loaded from before using
+# other Maven repositories. For the full Maven configuration, see
+# the org.ops4j.pax.url.mvn.cfg file.
+#
+karaf.default.repository = system
+
+#
+# Location of a shell script that will be run when starting a shell
+# session. This script can be used to create aliases and define
+# additional commands.
+#
+# NB: ${karaf.etc} is implicitly added to the path, don't use absolute path here
+#
+karaf.shell.init.script = shell.init.script,scripts/*.script
+
+#
+# Sets the maximum size of the shell command history. If not set,
+# defaults to 500 entries. Setting to 0 will disable history.
+#
+# karaf.shell.history.maxSize = 0
+
+#
+# Sets the maximum size of the local shell command history file. If not set,
+# defaults to 10000 entries.
+#
+# karaf.shell.history.file.maxSize = 10000
+
+#
+# Deletes the entire karaf.data directory at every start
+#
+karaf.clean.all = false
+
+#
+# Deletes the karaf.data/cache directory at every start
+#
+karaf.clean.cache = false
+
+#
+# User name for the Karaf local console
+#
+karaf.local.user = karaf
+
+#
+# Roles to use when for the default user in the local Karaf console.
+#
+# The syntax is the following:
+# [classname:]principal
+# where classname is the class name of the principal object
+# (defaults to org.apache.karaf.jaas.modules.RolePrincipal)
+# and principal is the name of the principal of that class
+# (defaults to instance).
+#
+karaf.local.roles = admin,manager,viewer,systembundles
+
+#
+# Set this empty property to avoid errors when validating xml documents.
+#
+xml.catalog.files =
+
+#
+# Specs options
+#
+org.apache.servicemix.specs.debug = false
+org.apache.servicemix.specs.timeout = 0
+org.apache.karaf.specs.debug = false
+org.apache.karaf.specs.timeout = 0
+
+#
+# Settings for the OSGi 4.3 Weaving
+# By default, we will not weave any classes. Change this setting to include classes
+# that you application needs to have woven.
+#
+org.apache.aries.proxy.weaving.enabled = none
+# Classes not to weave - Aries default + Xerces which is known to have issues.
+org.apache.aries.proxy.weaving.disabled = org.objectweb.asm.*,org.slf4j.*,org.apache.log4j.*,javax.*,org.apache.xerces.*
+
+#
+# By default, only Karaf shell commands are secured, but additional services can be
+# secured by expanding this filter
+#
+karaf.secured.services = (&(osgi.command.scope=*)(osgi.command.function=*))
+
+#
+# If set to true, Karaf will exit if either the resolving of feature repositories, or
+# the installation of boot features (as configured in org.apache.karaf.features.cfg) fails.
+#
+karaf.require.successful.features.boot = false
+
+#
+# By default, if there's no ACL policy for a certain karaf command, this command is allowed to access
+# without the RBAC. We can change this behavior by enable the following property, which means
+# if a karaf command has no corresponding ACL then access it must have one of the karaf.secured.command.compulsory.roles
+#
+#karaf.secured.command.compulsory.roles=admin
+
+#
+# Security properties
+#
+# To enable OSGi security, uncomment the properties below,
+# install the framework-security feature and restart.
+#
+#java.security.policy=${karaf.etc}/all.policy
+#org.osgi.framework.security=osgi
+#org.osgi.framework.trust.repositories=${karaf.etc}/trustStore.ks
+
+#
+# HA/Lock configuration
+#
+# Karaf uses a lock mechanism to know which instance is the master (HA)
+# The lock can be on the filesystem (default) or on a database.
+#
+# See http://karaf.apache.org/manual/latest/users-guide/failover.html for details.
+#
+# Even using a single instance, Karaf creates the lock file
+# You can specify the location of the lock file using the
+# karaf.lock.dir=/path/to/the/directory/containing/the/lock
+#
+# By default, the slave instances start but are passive.
+# If you want to prevent the slave instances startup, you can use
+# the karaf.lock.slave.block property (false by default):
+# karaf.lock.slave.block=true
diff --git a/openhab/openhab_userdata/etc/users.properties b/openhab/openhab_userdata/etc/users.properties
new file mode 100644
index 0000000..b566ad4
--- /dev/null
+++ b/openhab/openhab_userdata/etc/users.properties
@@ -0,0 +1,33 @@
+################################################################################
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+################################################################################
+
+#
+# This file contains the users, groups, and roles.
+# Each line has to be of the format:
+#
+# USER=PASSWORD,ROLE1,ROLE2,...
+# USER=PASSWORD,_g_:GROUP,...
+# _g_\:GROUP=ROLE1,ROLE2,...
+#
+# All users, groups, and roles entered in this file are available after Karaf startup
+# and modifiable via the JAAS command group. These users reside in a JAAS domain
+# with the name "karaf".
+#
+openhab = {CRYPT}4F61A0FD056BC0FD8231899EC4D9F9CA06AF0DEC895B2A3B0773F6FBC1C99776{CRYPT},_g_:admingroup
+_g_\:admingroup = group,admin,manager,viewer,systembundles
diff --git a/openhab/openhab_userdata/etc/version.properties b/openhab/openhab_userdata/etc/version.properties
new file mode 100644
index 0000000..e6b47cc
--- /dev/null
+++ b/openhab/openhab_userdata/etc/version.properties
@@ -0,0 +1,11 @@
+openHAB Distribution Version Information
+----------------------------------------
+build-no : Release Build
+online-repo : https://openhab.jfrog.io/openhab/libs-release
+
+Repository Version
+----------------------------------------
+openhab-distro : 4.0.3
+openhab-core : 4.0.3
+openhab-addons : 4.0.3
+karaf : 4.4.3
diff --git a/openhab/openhab_userdata/secrets/rsa_json_web_key.json b/openhab/openhab_userdata/secrets/rsa_json_web_key.json
new file mode 100644
index 0000000..546a292
--- /dev/null
+++ b/openhab/openhab_userdata/secrets/rsa_json_web_key.json
@@ -0,0 +1 @@
+{"kty":"RSA","n":"xtlnpVyPt_L4tCCOovuFn6qNrorwSZ6RVmrMzSCZ4E7-9W6YcgRGWf8Rr2Qghv8wYlMtAc5f7xr0-CVSfM12oHyhxenWU6FcitJGFIYmnpuiwCEUphmIg3OtmsL1LnR3VFAJxLlhWYGBOhaGnz97w7zm1igF8YnxrEpuij9cR_QrSSoBd-bHVhMRJtEov0zNrxR45c0-VSGfucfSr-X-vyzd49ZPkMCeuc8BrVwsN8BfqRdX2MtyiCrulFNp8Q8gSFyUFTk67c20qHdgtJPyazT-lNc9K0TaJD5wEFCZcj5Fh-CVqav9Q1BxMLVaKmg3h78-sMgNYDzRferCCmFkCQ","e":"AQAB","d":"UQ6wVFUN9MMjpHGdE00KZFKm3J6gYrIztpFkmL2QXEJ3Zd7GX7vkXa0_LUrYg48kzv_u2cyhiJtpfnngTSWIFNWZME8o4gBl8-TRUm548bCpwD3759WCs2sFOo_8WAp71i-mO74Bs_W5ks8541KChgDL7EJ2YcaEcGIK-2nmmSFy7HZ0KypXdfqSTYbn2ZbEFJjjSYxmqSKTegvvXAUfIMwPfsdGfsy5S3H99QxX3-0K2XgduDi0d1dPxcuHMkftSG_oB0lAQrY9K9l_wisJvZNuqE0J4kucSbuvtEovHYceD0zRcGAQxFEaYa_oYSA5yJI2byr1pKVfBIpucCrYnQ","p":"x5-EO91jPK1rs__8T4orVJ_Q1T8sS7z9ny67hDhV8avbpLMpji1MwGmfNhnmSbJfm648EIvTZwxJj_-C09UaL7cZtEcmkHFJ26c9Rz0eecF_fKQbyfudr12NG0gm_immNXBBSSiRi_3KwnriUEEegfnXSXXeI6VrXHA9YDYiqAc","q":"_wHwNCcHVcxFqBsoZVRiJjRoI_8ZOhDmEE9pUjvDMTFz7cuoLBwKbggrpF-CmguENr8F3xsAQppOrW0Z-tWF9TYl0ydwF2SyiQ5ZRol0_jq2NHK7rZu2KvvRrY48kRSxNi3iRjxEM8Q-gWy8IEH1tW6Db6KQtck9axuFFl6k728","dp":"R1uTRl8OMUuAu5hfFgO7F4YFfaUWbYCCXNu0tj_5IOmhG0_cI_G3hPR8sDcz5dY4bQssd3G0QRrYVPwuRRDhSns2WgYxF-MXVsiClCuZ8EYmD2UOdfZW2LAlV8JEBgjXXDTjcYZp-NPhHgIVUkDk6etodN8IaE-igCmzFuhjHRM","dq":"6KJRCpLMS0Y2CZz05jPr8iR_GM-gqOs_poN7doyUji0qMDZJbiwKi8SiY6rKD1QQQo1Tguwz-Y6h1e6g88aVFVVXfmENDhpMEWJoqUO-2iqfjAtbEY7qyh2-dBE9SbFR1TZYpXBXW85co1-Z4-eoiuKNv2rTjzNN94c8i2K-Hrs","qi":"Q-LuIxo9bC76PubTswus3u4H9SHk-T95ASfaRHNKCqUG8rvBTC25zXB1KJlnX9KMn8cDwFb7UnuY-bqDWUpXpe4IcZJRv3MnZEKkRk0bgfTlNoX3pVOEfMiNXM1qb-3zyt4DBh1Z-1V49R8P9z_82H_gGZStBCfYQw9gZAcqfTA"}
\ No newline at end of file