]> git.basschouten.com Git - openhab-addons.git/commitdiff
Multiple binding markdown fixes (#17422)
authorlsiepel <leosiepel@gmail.com>
Sat, 28 Sep 2024 15:46:53 +0000 (17:46 +0200)
committerGitHub <noreply@github.com>
Sat, 28 Sep 2024 15:46:53 +0000 (17:46 +0200)
Signed-off-by: Leo Siepel <leosiepel@gmail.com>
209 files changed:
bundles/org.openhab.automation.groovyscripting/README.md
bundles/org.openhab.automation.jrubyscripting/README.md
bundles/org.openhab.binding.ahawastecollection/README.md
bundles/org.openhab.binding.amberelectric/README.md
bundles/org.openhab.binding.androidtv/README.md
bundles/org.openhab.binding.argoclima/README.md
bundles/org.openhab.binding.atlona/README.md
bundles/org.openhab.binding.avmfritz/README.md
bundles/org.openhab.binding.benqprojector/README.md
bundles/org.openhab.binding.bluetooth.airthings/README.md
bundles/org.openhab.binding.bluetooth.daikinmadoka/README.md
bundles/org.openhab.binding.bluetooth.enoceanble/README.md
bundles/org.openhab.binding.bluetooth.radoneye/README.md
bundles/org.openhab.binding.boschshc/README.md
bundles/org.openhab.binding.caddx/README.md
bundles/org.openhab.binding.chatgpt/README.md
bundles/org.openhab.binding.cm11a/README.md
bundles/org.openhab.binding.dbquery/README.md
bundles/org.openhab.binding.deconz/README.md
bundles/org.openhab.binding.digitalstrom/README.md
bundles/org.openhab.binding.dlinksmarthome/README.md
bundles/org.openhab.binding.dmx/README.md
bundles/org.openhab.binding.dolbycp/README.md
bundles/org.openhab.binding.dominoswiss/README.md
bundles/org.openhab.binding.doorbird/README.md
bundles/org.openhab.binding.dscalarm/README.md
bundles/org.openhab.binding.dwdpollenflug/README.md
bundles/org.openhab.binding.dwdunwetter/README.md
bundles/org.openhab.binding.ekey/README.md
bundles/org.openhab.binding.elerotransmitterstick/README.md
bundles/org.openhab.binding.emotiva/README.md
bundles/org.openhab.binding.energenie/README.md
bundles/org.openhab.binding.energidataservice/README.md
bundles/org.openhab.binding.enigma2/README.md
bundles/org.openhab.binding.enocean/README.md
bundles/org.openhab.binding.ephemeris/README.md
bundles/org.openhab.binding.etherrain/README.md
bundles/org.openhab.binding.evcc/README.md
bundles/org.openhab.binding.evohome/README.md
bundles/org.openhab.binding.exec/README.md
bundles/org.openhab.binding.fenecon/README.md
bundles/org.openhab.binding.fineoffsetweatherstation/README.md
bundles/org.openhab.binding.flume/README.md
bundles/org.openhab.binding.fmiweather/README.md
bundles/org.openhab.binding.fronius/README.md
bundles/org.openhab.binding.ftpupload/README.md
bundles/org.openhab.binding.gce/README.md
bundles/org.openhab.binding.generacmobilelink/README.md
bundles/org.openhab.binding.globalcache/README.md
bundles/org.openhab.binding.goecharger/README.md
bundles/org.openhab.binding.govee/README.md
bundles/org.openhab.binding.gpio/README.md
bundles/org.openhab.binding.gree/README.md
bundles/org.openhab.binding.gridbox/README.md
bundles/org.openhab.binding.growatt/README.md
bundles/org.openhab.binding.haywardomnilogic/README.md
bundles/org.openhab.binding.hccrubbishcollection/README.md
bundles/org.openhab.binding.helios/README.md
bundles/org.openhab.binding.homeconnect/README.md
bundles/org.openhab.binding.homematic/README.md
bundles/org.openhab.binding.hpprinter/README.md
bundles/org.openhab.binding.hue/README.md
bundles/org.openhab.binding.hydrawise/README.md
bundles/org.openhab.binding.hyperion/README.md
bundles/org.openhab.binding.ihc/README.md
bundles/org.openhab.binding.insteon/README.md
bundles/org.openhab.binding.intesis/README.md
bundles/org.openhab.binding.iotawatt/README.md
bundles/org.openhab.binding.ipcamera/README.md
bundles/org.openhab.binding.irtrans/README.md
bundles/org.openhab.binding.ism8/README.md
bundles/org.openhab.binding.jablotron/README.md
bundles/org.openhab.binding.kaleidescape/README.md
bundles/org.openhab.binding.keba/README.md
bundles/org.openhab.binding.knx/README.md
bundles/org.openhab.binding.konnected/README.md
bundles/org.openhab.binding.kostalinverter/README.md
bundles/org.openhab.binding.lametrictime/README.md
bundles/org.openhab.binding.leapmotion/README.md
bundles/org.openhab.binding.lgwebos/README.md
bundles/org.openhab.binding.luxom/README.md
bundles/org.openhab.binding.mecmeter/README.md
bundles/org.openhab.binding.mercedesme/README.md
bundles/org.openhab.binding.mercedesme/proto/README.md
bundles/org.openhab.binding.mffan/README.md
bundles/org.openhab.binding.mihome/README.md
bundles/org.openhab.binding.miio/README.md
bundles/org.openhab.binding.millheat/README.md
bundles/org.openhab.binding.modbus.e3dc/README.md
bundles/org.openhab.binding.modbus.stiebeleltron/README.md
bundles/org.openhab.binding.modbus.studer/README.md
bundles/org.openhab.binding.modbus/README.md
bundles/org.openhab.binding.monopriceaudio/README.md
bundles/org.openhab.binding.mqtt.ruuvigateway/README.md
bundles/org.openhab.binding.mybmw/README.md
bundles/org.openhab.binding.mycroft/README.md
bundles/org.openhab.binding.mynice/README.md
bundles/org.openhab.binding.mystrom/README.md
bundles/org.openhab.binding.nanoleaf/README.md
bundles/org.openhab.binding.neato/README.md
bundles/org.openhab.binding.neeo/README.md
bundles/org.openhab.binding.neohub/README.md
bundles/org.openhab.binding.netatmo/README.md
bundles/org.openhab.binding.network/README.md
bundles/org.openhab.binding.nibeheatpump/contrib/NibeGW/Arduino/README.md
bundles/org.openhab.binding.nikobus/README.md
bundles/org.openhab.binding.nobohub/README.md
bundles/org.openhab.binding.nuki/README.md
bundles/org.openhab.binding.nuvo/README.md
bundles/org.openhab.binding.oceanic/README.md
bundles/org.openhab.binding.onewire/README.md
bundles/org.openhab.binding.opengarage/README.md
bundles/org.openhab.binding.openuv/README.md
bundles/org.openhab.binding.openuv/doc/icon/ozone.svg [new file with mode: 0644]
bundles/org.openhab.binding.openuv/doc/icon/uv-alarm.svg [new file with mode: 0644]
bundles/org.openhab.binding.openuv/doc/icon/uv-index.svg [new file with mode: 0644]
bundles/org.openhab.binding.openwebnet/README.md
bundles/org.openhab.binding.orbitbhyve/README.md
bundles/org.openhab.binding.panasonicbdp/README.md
bundles/org.openhab.binding.paradoxalarm/README.md
bundles/org.openhab.binding.pegelonline/README.md
bundles/org.openhab.binding.pentair/README.md
bundles/org.openhab.binding.phc/README.md
bundles/org.openhab.binding.pihole/README.md
bundles/org.openhab.binding.plex/README.md
bundles/org.openhab.binding.prowl/README.md
bundles/org.openhab.binding.publictransportswitzerland/README.md
bundles/org.openhab.binding.pulseaudio/README.md
bundles/org.openhab.binding.pushover/README.md
bundles/org.openhab.binding.qolsysiq/README.md
bundles/org.openhab.binding.radiobrowser/README.md
bundles/org.openhab.binding.regoheatpump/README.md
bundles/org.openhab.binding.renault/README.md
bundles/org.openhab.binding.rfxcom/README.md
bundles/org.openhab.binding.roku/README.md
bundles/org.openhab.binding.sagercaster/README.md
bundles/org.openhab.binding.saicismart/README.md
bundles/org.openhab.binding.samsungtv/README.md
bundles/org.openhab.binding.satel/README.md
bundles/org.openhab.binding.sensibo/README.md
bundles/org.openhab.binding.sensorcommunity/README.md
bundles/org.openhab.binding.shelly/README.md
bundles/org.openhab.binding.siemenshvac/README.md
bundles/org.openhab.binding.sinope/README.md
bundles/org.openhab.binding.snmp/README.md
bundles/org.openhab.binding.solaredge/README.md
bundles/org.openhab.binding.solarforecast/README.md
bundles/org.openhab.binding.solarman/README.md
bundles/org.openhab.binding.solarwatt/README.md
bundles/org.openhab.binding.solax/README.md
bundles/org.openhab.binding.somneo/README.md
bundles/org.openhab.binding.souliss/README.md
bundles/org.openhab.binding.surepetcare/README.md
bundles/org.openhab.binding.tapocontrol/README.md
bundles/org.openhab.binding.tasmotaplug/README.md
bundles/org.openhab.binding.tesla/README.md
bundles/org.openhab.binding.teslapowerwall/README.md
bundles/org.openhab.binding.teslascope/README.md
bundles/org.openhab.binding.tibber/README.md
bundles/org.openhab.binding.tivo/README.md
bundles/org.openhab.binding.tr064/README.md
bundles/org.openhab.binding.tradfri/README.md
bundles/org.openhab.binding.upnpcontrol/README.md
bundles/org.openhab.binding.velbus/README.md
bundles/org.openhab.binding.venstarthermostat/README.md
bundles/org.openhab.binding.vesync/README.md
bundles/org.openhab.binding.visualcrossing/README.md
bundles/org.openhab.binding.vizio/README.md
bundles/org.openhab.binding.volumio/README.md
bundles/org.openhab.binding.volvooncall/README.md
bundles/org.openhab.binding.warmup/README.md
bundles/org.openhab.binding.webexteams/README.md
bundles/org.openhab.binding.webthing/README.md
bundles/org.openhab.binding.wemo/README.md
bundles/org.openhab.binding.wifiled/README.md
bundles/org.openhab.binding.wlanthermo/README.md
bundles/org.openhab.binding.wled/README.md
bundles/org.openhab.binding.wundergroundupdatereceiver/README.md
bundles/org.openhab.binding.yamahareceiver/README.md
bundles/org.openhab.binding.yamahareceiver/docs/README.md
bundles/org.openhab.binding.zoneminder/README.md
bundles/org.openhab.io.homekit/README.md
bundles/org.openhab.io.hueemulation/README.md
bundles/org.openhab.io.metrics/README.md
bundles/org.openhab.io.neeo/README.md
bundles/org.openhab.io.openhabcloud/README.md
bundles/org.openhab.persistence.dynamodb/README.md
bundles/org.openhab.persistence.jdbc/README.md
bundles/org.openhab.persistence.rrd4j/README.md
bundles/org.openhab.transform.bin2json/README.md
bundles/org.openhab.transform.exec/README.md
bundles/org.openhab.transform.jinja/README.md
bundles/org.openhab.transform.jsonpath/README.md
bundles/org.openhab.transform.scale/README.md
bundles/org.openhab.transform.xpath/README.md
bundles/org.openhab.transform.xslt/README.md
bundles/org.openhab.voice.googlestt/README.md
bundles/org.openhab.voice.googletts/README.md
bundles/org.openhab.voice.mactts/README.md
bundles/org.openhab.voice.marytts/README.md
bundles/org.openhab.voice.mimictts/README.md
bundles/org.openhab.voice.picotts/README.md
bundles/org.openhab.voice.pipertts/README.md
bundles/org.openhab.voice.pollytts/README.md
bundles/org.openhab.voice.rustpotterks/README.md
bundles/org.openhab.voice.voicerss/README.md
bundles/org.openhab.voice.voskstt/README.md
bundles/org.openhab.voice.watsonstt/README.md
bundles/org.openhab.voice.whisperstt/README.md

index f25ff112e6dbfdecbac31319f1b6526b0950e939..39fa2fd5a097cbe6f825ffe6c2059be26e28ed0a 100644 (file)
@@ -23,7 +23,7 @@ For more information on the available APIs in scripts see the [JSR223 Scripting]
 
 ## Code reuse
 
-One can place *.groovy files with Groovy classes under `automation/groovy` configuration directory.  
+One can place *.groovy files with Groovy classes under `automation/groovy` configuration directory.
 Those classes can be imported in JSR-223 scripts or the UI rules action with the usual Groovy `import` statement.
 
 To apply shared code changes, one has to restart the `openHAB Core :: Bundles :: Automation` bundle on the Console or an openHAB instance altogether.
index cc81982ea5ec46e19c21f116dc8df11799aa10a7..5ef835edddead2c6684a099214638081ff923af8 100644 (file)
@@ -670,7 +670,7 @@ items.build do
 
   # dimension Temperature inferred
   number_item OutdoorTemp, format: "%.1f %unit%", unit: "°F"
-    
+
   # unit lx, dimension Illuminance, format "%s %unit%" inferred
   number_item OutdoorBrightness, state: 10_000 | "lx"
 end
index 89f44ff38728265211008a1a2e98ed005b8e4e73..13da5bcf6b54fd69fba5d11d0e6deed6a51002bf 100644 (file)
@@ -55,7 +55,7 @@ The thing **aha Waste Collection Schedule** provides four channels for the upcom
 wasteCollection.things
 
 ```java
-Thing ahawastecollection:collectionSchedule:wasteCollectionSchedule "aha Abfuhrkalender" [ commune="Isernhagen", street="67269@Rosmarinweg+/+Kirchhorst@Kirchhorst", houseNumber="10", houseNumberAddon="", collectionPlace="67269-0010+" ] 
+Thing ahawastecollection:collectionSchedule:wasteCollectionSchedule "aha Abfuhrkalender" [ commune="Isernhagen", street="67269@Rosmarinweg+/+Kirchhorst@Kirchhorst", houseNumber="10", houseNumberAddon="", collectionPlace="67269-0010+" ]
 ```
 
 wasteCollection.items
index f856eddbd425ca5fe443c1e3fd752b7a9d0d2297..0a41152294340cbf3188d27b8b6bf6315c5b039e 100644 (file)
@@ -4,7 +4,7 @@ A binding that supports the Australian energy retailer Amber's API (<https://www
 
 ## Supported Things
 
-- `service` Amber Electric API 
+- `service` Amber Electric API
 
 ## Discovery
 
@@ -25,7 +25,7 @@ As a minimum, the IP address is needed:
 | electricity-price      | Number:EnergyPrice   | Current price to import power from the grid
 | controlled-load-price  | Number:EnergyPrice   | Current price to import power for Controlled Load
 | feed-in-price          | Number:EnergyPrice   | Current price to export power to the grid
-| electricity-status     | String               | Current price status of grid import 
+| electricity-status     | String               | Current price status of grid import
 | controlled-load-status | String               | Current price status of controlled load import
 | feed-in-status         | String               | Current price status of Feed-In
 | nem-time               | String               | NEM time of last pricing update
@@ -53,7 +53,7 @@ String AmberElectric_nemtime { channel="amberelectric:service:AmberElectric:nem-
 Number AmberElectric_Renewables { channel="amberelectric:service:AmberElectric:renewables" }
 Switch AmberElectric_Spike { channel="amberelectric:service:AmberElectric:spike" }
 ```
-    
+
 ### `amberelectric.sitemap`:
 
 ```perl
index 30c6660dc55eecdf2cc2084235687e4099df77bf..e315579e4f95fb4d57dca755fe70c4cd8ccfbb2f 100644 (file)
@@ -15,7 +15,7 @@ This binding supports two thing types:
 
 ## Discovery
 
-All relevant thing types should be added automatically to the inbox through the mDNS discovery process.  
+All relevant thing types should be added automatically to the inbox through the mDNS discovery process.
 
 In the case of the ShieldTV or PhilipsTV, openHAB will likely create an inbox entry for both a GoogleTV and a ShieldTV or PhilipsTV device.
 Only the ShieldTV or PhilipsTV device should be configured, the GoogleTV can be ignored.
@@ -24,7 +24,7 @@ This could cause undesired effects.
 
 ## Binding Configuration
 
-This binding does not require any special configuration files.  
+This binding does not require any special configuration files.
 
 This binding does require a PIN login process (documented below) upon first connection.
 
@@ -161,7 +161,7 @@ KEYPRESS will accept the following commands as strings (case sensitive):
 - KEY_MUTE
 - KEY_SUBMIT
 
-The list above causes an instantanious "press and release" of each button.  
+The list above causes an instantanious "press and release" of each button.
 If you would like to manually control the press and release of each you may append _PRESS and _RELEASE to the end of each.
 (e.g. KEY_FORWARD_PRESS or KEY_FORWARD_RELEASE)
 
@@ -169,7 +169,7 @@ You may also send an ASCII character as a single letter to simulate a key entry
 Use KEY_SUBMIT when full text entry is complete to tell the shield to process the line.
 KEY_SUBMIT is automatically sent by KEYBOARD when a command is sent to the channel.
 
-APP will display the currently active app as presented by the AndroidTV.  
+APP will display the currently active app as presented by the AndroidTV.
 You may also send it a command of the app package name (e.g. com.google.android.youtube.tv) to start/change-to that app.
 
 KEYCODE values are listed at the bottom of this README.
@@ -195,11 +195,11 @@ openhab> openhab:androidtv androidtv:googletv:theater keypress KEY_POWER
 
 ## Pin Code Process
 
-For the AndroidTV to be successfully accessed an on-screen PIN authentication is required on the first connection.  
+For the AndroidTV to be successfully accessed an on-screen PIN authentication is required on the first connection.
 
 To begin the PIN process, send the text "REQUEST" to the pincode channel while watching your AndroidTV.
 
-CLI Example Usage: 
+CLI Example Usage:
 
 ```shell
 openhab> openhab:androidtv androidtv:googletv:theater pincode REQUEST
index 3215dc6965e461342c2eb77812f4cb42c567f6ec..590de6b86bce9bd280b35436b873c3d0654f7072 100644 (file)
@@ -123,23 +123,23 @@ Thing argoclima:local:argoHvacLocalDirect "Argo HVAC (connected locally)" @ "Liv
 Thing argoclima:local:argoHvacLocalDirectEx "Argo HVAC (connected locally) - extended example (with explicit options)" [
     hostname="192.168.0.3",
     connectionMode="LOCAL_CONNECTION",
-    refreshInterval=30,    
+    refreshInterval=30,
     hvacListenPort=1001,
 
     // Schedule options (these are valid for all thing types)
-    schedule1DayOfWeek="[FRI, SAT, SUN, MON]", 
-    schedule1OnTime="7:35", 
+    schedule1DayOfWeek="[FRI, SAT, SUN, MON]",
+    schedule1OnTime="7:35",
     schedule1OffTime="18:00",
-    schedule2DayOfWeek="[MON, TUE, WED, THU, FRI]", 
+    schedule2DayOfWeek="[MON, TUE, WED, THU, FRI]",
     schedule2OnTime="15:00",
     schedule2OffTime="22:00",
     schedule3DayOfWeek="SUN","SAT", //Alternative syntax for the weekdays list
-    schedule3OnTime="11:00", 
-    schedule3OffTime="22:00"   
+    schedule3OnTime="11:00",
+    schedule3OffTime="22:00"
     //,resetToFactoryDefaults=true  //This triggers a one-shot command each time the thing
-                                    //  definition is (re)loaded from file.  
+                                    //  definition is (re)loaded from file.
                                     // Use only intermittently - it is not designed with prolonged
-                                    //  usage via Things text file in mind (mostly a MainUI feature!) 
+                                    //  usage via Things text file in mind (mostly a MainUI feature!)
 ]
 
 //ADVANCED MODES examples
@@ -153,19 +153,19 @@ Thing argoclima:local:argoHvacLocalWithPassthroughIndirect "Argo HVAC (accessibl
 Thing argoclima:local:argoHvacLocalWithPassthroughPlusDirectEx "Argo HVAC (accessible both indirectly and directly, via pass-through mode, with explicit options)" [
     hostname="192.168.0.3",             // Direct address of the device (reachable from openHAB)
     connectionMode="REMOTE_API_PROXY",
-        
+
     hvacListenPort=1001,
     refreshInterval=30,
     useLocalConnection=true,
-    
+
     // Stub server-specific
-    stubServerPort=8240, 
-    stubServerListenAddresses="7d47:86bd:0bfe:0413:4688:4523:4284:5936","192.168.0.195",    
-    includeDeviceSidePasswordsInProperties="MASKED", 
-    matchAnyIncomingDeviceIp=false, 
+    stubServerPort=8240,
+    stubServerListenAddresses="7d47:86bd:0bfe:0413:4688:4523:4284:5936","192.168.0.195",
+    includeDeviceSidePasswordsInProperties="MASKED",
+    matchAnyIncomingDeviceIp=false,
     deviceCpuId="deadbeefdeadbeef",     // For direct match to a concrete device (optional)
     localDeviceIP="192.168.4.2",        // Address in local subnet (used for indirect request matching)
-    
+
     // Pass-through-specific
     oemServerAddress="uisetup.ddns.net",
     oemServerPort=80
@@ -174,7 +174,7 @@ Thing argoclima:local:argoHvacLocalWithPassthroughPlusDirectEx "Argo HVAC (acces
 
 Thing argoclima:local:argoHvacLocalWithStub "Argo HVAC (accessible both indirectly and directly with a stub) - **RECOMMENDED MODE**" [
     hostname="192.168.0.3",           // Has to be reachable, since useLocalConnection is true (default)
-    connectionMode="REMOTE_API_STUB",    
+    connectionMode="REMOTE_API_STUB",
     localDeviceIP="192.168.4.2"       // Or use matchAnyIncomingDeviceIp=true
 ]
 ```
@@ -185,11 +185,11 @@ Thing argoclima:local:argoHvacLocalWithStub "Argo HVAC (accessible both indirect
 Group GArgoClimaHVACRemote "Ulisse 13 DCI ECO - remote mode" ["HVAC"]
 
 Switch  ArgoClimaHVACRemote_Power   "Power" <switch>   (GArgoClimaHVACRemote)  {
-    channel="argoclima:remote:argoHvacRemote:ac-controls#power"    
+    channel="argoclima:remote:argoHvacRemote:ac-controls#power"
 }
 
 String  ArgoClimaHVACRemote_Mode    "Mode"  <climate>  (GArgoClimaHVACRemote)  ["Control"] {
-    channel="argoclima:remote:argoHvacRemote:ac-controls#mode"    
+    channel="argoclima:remote:argoHvacRemote:ac-controls#mode"
 }
 
 Number:Temperature  ArgoClimaHVACRemote_SetTemperature  "Set Temperature"  <temperature> (GArgoClimaHVACRemote)  ["Temperature", "Setpoint"] {
@@ -201,27 +201,27 @@ Number:Temperature  ArgoClimaHVACRemote_SetTemperature  "Set Temperature"  <temp
 }
 
 Number:Temperature  ArgoClimaHVACRemote_CurrentTemperature  "Current Temperature" <temperature>   (GArgoClimaHVACRemote) ["Temperature", "Measurement"] {
-    channel="argoclima:remote:argoHvacRemote:ac-controls#current-temperature"    
+    channel="argoclima:remote:argoHvacRemote:ac-controls#current-temperature"
 }
 
 String  ArgoClimaHVACRemote_FanSpeed    "Fan Speed" <fan> (GArgoClimaHVACRemote) {
-    channel="argoclima:remote:argoHvacRemote:ac-controls#fan-speed"    
+    channel="argoclima:remote:argoHvacRemote:ac-controls#fan-speed"
 }
 
 Switch  ArgoClimaHVACRemote_EcoMode "Eco Mode"   <vacation> (GArgoClimaHVACRemote) {
-    channel="argoclima:remote:argoHvacRemote:modes#eco-mode"    
+    channel="argoclima:remote:argoHvacRemote:modes#eco-mode"
 }
 
 Switch  ArgoClimaHVACRemote_TurboMode   "Turbo Mode"  <party> (GArgoClimaHVACRemote) {
-    channel="argoclima:remote:argoHvacRemote:modes#turbo-mode"    
+    channel="argoclima:remote:argoHvacRemote:modes#turbo-mode"
 }
 
 Switch  ArgoClimaHVACRemote_NightMode       "Night Mode"  <moon> (GArgoClimaHVACRemote) {
-    channel="argoclima:remote:argoHvacRemote:modes#night-mode"    
+    channel="argoclima:remote:argoHvacRemote:modes#night-mode"
 }
 
 String  ArgoClimaHVACRemote_ActiveTimer "Active timer"  <calendar> (GArgoClimaHVACRemote) {
-    channel="argoclima:remote:argoHvacRemote:timers#active-timer"    
+    channel="argoclima:remote:argoHvacRemote:timers#active-timer"
 }
 
 Number:Time ArgoClimaHVACRemote_DelayTimer  "Delay timer value"  <time> (GArgoClimaHVACRemote) ["Setpoint"] {
@@ -233,17 +233,17 @@ Number:Time ArgoClimaHVACRemote_DelayTimer  "Delay timer value"  <time> (GArgoCl
 }
 
 Switch  ArgoClimaHVACRemote_IFeelEnabled    "Use iFeel Temperature"  <network>  (GArgoClimaHVACRemote) {
-    channel="argoclima:remote:argoHvacRemote:settings#ifeel-enabled"    
+    channel="argoclima:remote:argoHvacRemote:settings#ifeel-enabled"
 }
 
 Switch  ArgoClimaHVACRemote_DeviceLights    "Device Lights" <light> (GArgoClimaHVACRemote) {
-    channel="argoclima:remote:argoHvacRemote:settings#device-lights"    
+    channel="argoclima:remote:argoHvacRemote:settings#device-lights"
 }
 
 String  ArgoClimaHVACRemote_TemperatureDisplayUnit  "Temperature Display Unit []"   <settings>  (GArgoClimaHVACRemote) {
     stateDescription="" [ options="SCALE_CELSIUS=°C,SCALE_FAHRENHEIT=°F" ],
     commandDescription="" [ options="SCALE_CELSIUS=°C,SCALE_FAHRENHEIT=°F" ],
-    channel="argoclima:remote:argoHvacRemote:settings#temperature-display-unit"    
+    channel="argoclima:remote:argoHvacRemote:settings#temperature-display-unit"
 }
 
 Number:Dimensionless    ArgoClimaHVACRemote_EcoPowerLimit    "Power limit in eco mode"  <price>   (GArgoClimaHVACRemote) ["Setpoint"] {
@@ -255,15 +255,15 @@ Number:Dimensionless    ArgoClimaHVACRemote_EcoPowerLimit    "Power limit in eco
 }
 
 String  ArgoClimaHVACRemote_ModeEx  "Extended Mode"   <heating>  (GArgoClimaHVACRemote) {
-    channel="argoclima:remote:argoHvacRemote:unsupported#mode-ex"    
+    channel="argoclima:remote:argoHvacRemote:unsupported#mode-ex"
 }
 
 String  ArgoClimaHVACRemote_SwingMode   "Airflow Direction"   <flow>  (GArgoClimaHVACRemote) {
-    channel="argoclima:remote:argoHvacRemote:unsupported#swing-mode"    
+    channel="argoclima:remote:argoHvacRemote:unsupported#swing-mode"
 }
 
 Switch  ArgoClimaHVACRemote_FilterMode  "Filter Mode"    <switch> (GArgoClimaHVACRemote) {
-    channel="argoclima:remote:argoHvacRemote:unsupported#filter-mode"    
+    channel="argoclima:remote:argoHvacRemote:unsupported#filter-mode"
 }
 ```
 
@@ -284,7 +284,7 @@ Frame label="âť„ HVAC Control" {
     Default item=GArgoClimaHVACRemote label="All settings"
 }
 Frame label="⛄ HVAC Modes"
-{        
+{
     Switch item=ArgoClimaHVACRemote_TurboMode
     Switch item=ArgoClimaHVACRemote_NightMode
     Switch item=ArgoClimaHVACRemote_EcoMode
@@ -294,7 +294,7 @@ Frame label="⛄ HVAC Modes"
 }
 Frame label="⏲ HVAC timers" {
     Selection item=ArgoClimaHVACRemote_ActiveTimer mappings=[
-        NO_TIMER="No Timer", DELAY_TIMER="Delay Timer", 
+        NO_TIMER="No Timer", DELAY_TIMER="Delay Timer",
         SCHEDULE_TIMER_1="Schedule 1", SCHEDULE_TIMER_2="Schedule 2", SCHEDULE_TIMER_3="Schedule 3"
     ]
     Setpoint item=ArgoClimaHVACRemote_DelayTimer minValue=10 maxValue=1190 step=10
index 9330fbb3e4e6dc90a1d506478d385512386df49a..f41605c322befe6e2a7e39c42675dc6142d6b10f 100644 (file)
@@ -17,7 +17,7 @@ This binding supports the following thing types:
 
 ## Discovery
 
-Supported things should be discovered automatically upon receipt of periodic SDDP announcements from the switch. 
+Supported things should be discovered automatically upon receipt of periodic SDDP announcements from the switch.
 If the thing is not discovered automatically, login to the switch configuration UI and press the "SDDP" button on the "Network" tab to force the switch to send the SDDP announcement.
 If "Telnet Login" is enabled in the switch configuration, you will need to set the username and password in the newly discovered thing before a connection can be made.
 
index af5670fa78e85693d941601d3cd4edbc38f78143..af2ef941f36241dacc14923eecc532a44fbacbb4 100644 (file)
@@ -226,7 +226,7 @@ You will find entries like the attached one.
 The `identifyer 'tmpFC0F2C-3960B7EE6'` contains the templates AINs you need for using them in rules.
 
 ```text
-Name 'Demo Template', identifyer 'tmpFC0F2C-3960B7EE6', firmware version '0.1' 
+Name 'Demo Template', identifyer 'tmpFC0F2C-3960B7EE6', firmware version '0.1'
     [aktive] ID 60013, emc 0x0, model 0x0, grouphash=0x0, devicetype 'avm_home_device_type_template', functionbitmask 0x4000, sortid 0, batt perc 255 low 255, pollinterval 0, polltimeout 0, validchangetime: 0
     --------------------
 ```
@@ -276,7 +276,7 @@ demo.items:
 
 ```java
 String CallState     "Call State [%s]"               { channel="avmfritz:fritzbox:1:call_state" }
-Call   IncomingCall  "Incoming call: [%1$s to %2$s]" { channel="avmfritz:fritzbox:1:incoming_call" } 
+Call   IncomingCall  "Incoming call: [%1$s to %2$s]" { channel="avmfritz:fritzbox:1:incoming_call" }
 Call   OutgoingCall  "Outgoing call: [%1$s to %2$s]" { channel="avmfritz:fritzbox:1:outgoing_call" }
 Call   ActiveCall    "Call established [%1$s]"       { channel="avmfritz:fritzbox:1:active_call" }
 String ApplyTemplate "Apply template"                { channel="avmfritz:fritzbox:1:apply_template" }
@@ -346,7 +346,7 @@ sitemap demo label="Main Menu" {
         Text item=COMETDECTBattery icon="battery"
         Switch item=COMETDECTBatteryLow icon="lowbattery"
     }
+
     Frame label="HAN-FUN Contact" {
         Text item=HANFUNContactState
     }
index 8d29ff15e57e14346d56fae1afc392ce3a981aa1..03d0219aba3a3aebd2bff127f686c89286b5fea7 100644 (file)
@@ -1,7 +1,7 @@
 # BenQ Projector Binding
 
 This binding is compatible with BenQ projectors that support the control protocol via the built-in Ethernet port, serial port or USB to serial adapter.
-If your projector does not have built-in networking, you can connect to your projector's serial port via a TCP connection using a serial over IP device or by using`ser2net`.  
+If your projector does not have built-in networking, you can connect to your projector's serial port via a TCP connection using a serial over IP device or by using`ser2net`.
 
 The manufacturer's guide for connecting to the projector and the control protocol can be found in this document: [LX9215_RS232 Control Guide_0_Windows7_Windows8_WinXP.pdf](https://esupportdownload.benq.com/esupport/Projector/Control%20Protocols/LX9215/LX9215_RS232%20Control%20Guide_0_Windows7_Windows8_WinXP.pdf)
 
index 97b326903e101674c2f636bf973126c999d1343d..ce9d65e7b97411c863bc9c31ad789e7c03a94ab5 100644 (file)
@@ -54,7 +54,7 @@ The `Airthings Wave Gen 1` and `Airthings Wave Radon / Wave 2` thing has the fol
 | temperature        | Number:Temperature               | The measured temperature                    |
 | humidity           | Number:Dimensionless             | The measured humidity                       |
 
-Note: For the `Airthings Wave Gen 1`, only one channel can be updated at each refreshInterval, so it will take refreshInterval x 4 cycles to sequentially update all 4 channels  
+Note: For the `Airthings Wave Gen 1`, only one channel can be updated at each refreshInterval, so it will take refreshInterval x 4 cycles to sequentially update all 4 channels
 
 ## Example
 
index 4937eeca38f5c69c9d2122b011471eccc8c1ae8d..873947a3d6190b9db95b94ab2ba4ccbf31ff81c0 100644 (file)
@@ -42,7 +42,7 @@ _Note that it is planned to generate some part of this based on the XML files wi
 | outdoorTemperature  | Number:Temperature | R | Outdoor temperature from the external unit. Not always supported/reported.
 | commCtrlVersion  | String | R | Communication Controller Firmware Version
 | remoteCtrlVersion  | String | R | Remote Controller Firmware Version
-| operationMode  | String | R/W | The operation mode of the AC unit. Currently supported values: HEAT, COOL.  
+| operationMode  | String | R/W | The operation mode of the AC unit. Currently supported values: HEAT, COOL.
 | fanSpeed  | Number | R/W | This is a "virtual channel" : its value is calculated depending on current operation mode. It is the channel to be used to change the fan speed, whatever the current mode is. Fan speed are from 1 to 5. On BRC1H, the device supports 3 speeds: LOW (1), MEDIUM (2-4), MAX (5). Some BRC1H also support an AUTO (0) mode - but not all of them support it (depending on internal unit).
 | setpoint  | Number:Temperature | R/W | This is a "virtual channel" : its value is calculated depending on current operation mode. It is the channel to be used to change the setpoint, whatever the current mode is.
 | homekitCurrentHeatingCoolingMode  | String | R | This channel is a "virtual channel" to be used with the HomeKit add-on to implement Thermostat thing. Values supported are the HomeKit addon ones: Off, CoolOn, HeatOn, Auto.
index 08c8717c0112876f4b674fe88ef452634913f07d..fa4ff90413ac44733bd0ad8bc656528cc1a73d80 100644 (file)
@@ -55,5 +55,5 @@ demo.items:
 
 ```java
 Dimmer Light_LivingRoom  { channel="milight:rgbLed:milight2:4:ledbrightness", channel="bluetooth:ptm215b:bluegiga0:rocker_livingroom:rocker1" [profile="rawrocker-to-on-off"], channel="bluetooth:ptm215b:bluegiga0:rocker_kitchen:rocker1" [profile="rawrocker-to-on-off"] }  // We have a combined kitchen / livingroom, so we control the living room lights with switches from the living room and from the kitchen
-Switch Light_Kitchen    { channel="hue:group:1:kitchen-bulbs:switch", channel="bluetooth:ptm215b:bluegiga0:rocker_kitchen:rocker2" [profile="rawrocker-to-on-off"] } 
+Switch Light_Kitchen    { channel="hue:group:1:kitchen-bulbs:switch", channel="bluetooth:ptm215b:bluegiga0:rocker_kitchen:rocker2" [profile="rawrocker-to-on-off"] }
 ```
index 90828c6e5c5fcbbe4375cd7c455c305b4235f693..da5e430e831b4fe0b3766b08b3af61f4258b3878 100644 (file)
@@ -1,6 +1,6 @@
 # radoneye
 
-This extension adds support for [RadonEye](http://radonftlab.com/radon-sensor-product/radon-detector/rd200/) radon bluetooth detector. 
+This extension adds support for [RadonEye](http://radonftlab.com/radon-sensor-product/radon-detector/rd200/) radon bluetooth detector.
 
 ## Supported Things
 
@@ -12,7 +12,7 @@ Following thing types are supported by this extension:
 
 ## Discovery
 
-As any other Bluetooth device, RadonEye devices are discovered automatically by the corresponding bridge. 
+As any other Bluetooth device, RadonEye devices are discovered automatically by the corresponding bridge.
 
 ## Thing Configuration
 
index 5671cb98e2b015abec3c5b27af6a702ac3d3733a..7734a89f31a01525275b68e8977f82056abae838 100644 (file)
@@ -45,7 +45,7 @@ The Smart Home Controller is the central hub that allows you to monitor and cont
 
 | Channel Type ID    | Item Type | Writable | Description                                                             |
 |--------------------|-----------|:--------:|-------------------------------------------------------------------------|
-| scenario-triggered | String    | &#9744;  | Name of the triggered scenario (e.g. by the Universal Switch Flex)      | 
+| scenario-triggered | String    | &#9744;  | Name of the triggered scenario (e.g. by the Universal Switch Flex)      |
 | trigger-scenario   | String    | &#9745;  | Name of a scenario to be triggered on the Bosch Smart Home Controller.  |
 
 ### In-Wall Switch
@@ -316,7 +316,7 @@ The smoke detector warns you in case of fire.
 
 ### User-defined States
 
-User-defined states enable automations to be better adapted to specific needs and everyday situations. 
+User-defined states enable automations to be better adapted to specific needs and everyday situations.
 Individual states can be activated/deactivated and can be used as triggers, conditions and actions in automations.
 
 **Thing Type ID**: `user-defined-state`
@@ -356,7 +356,7 @@ A universally configurable switch with four buttons.
 
 Smart water leakage detector.
 
-**Thing Type ID**: `water-detector` 
+**Thing Type ID**: `water-detector`
 
 | Channel Type ID            | Item Type | Writable | Description                                       |
 | -------------------------- | --------- | :------: | ------------------------------------------------- |
@@ -372,7 +372,7 @@ Smart water leakage detector.
 ## Limitations
 
 No major limitation known.
-Check list of [openhab issues with "boshshc"](https://github.com/openhab/openhab-addons/issues?q=is%3Aissue+boschshc+) 
+Check list of [openhab issues with "boshshc"](https://github.com/openhab/openhab-addons/issues?q=is%3Aissue+boschshc+)
 
 ## Discovery
 
index 5476d5a6d2e2f316de458c09b89cbc00f7b84909..cfca4c5d14a9eb3442bec966f313d70785c63daf 100644 (file)
@@ -348,7 +348,7 @@ then
         logWarn("actions", "Actions not found, check thing ID for the Zone")
         return
     }
-    
+
     actions.bypass()
 end
 ```
index d48a0735208c7fe9b66f36c13c651cccc70be7e8..3479d12c27c3e928548d223121b0ab2b921297a4 100644 (file)
@@ -2,7 +2,7 @@
 
 The openHAB ChatGPT Binding allows openHAB to communicate with the ChatGPT language model provided by OpenAI.
 
-ChatGPT is a powerful natural language processing (NLP) tool that can be used to understand and respond to a wide range of text-based commands and questions. 
+ChatGPT is a powerful natural language processing (NLP) tool that can be used to understand and respond to a wide range of text-based commands and questions.
 With this binding, you can use ChatGPT to formulate proper sentences for any kind of information that you would like to output.
 
 ## Supported Things
@@ -77,7 +77,7 @@ Number Temperature_Forecast_High
 ```java
 rule "Weather forecast update"
 when
-  Item Temperature_Forecast_High changed 
+  Item Temperature_Forecast_High changed
 then
     Weather_Announcement.sendCommand("High: " + Temperature_Forecast_High.state + "°C, Low: " + Temperature_Forecast_Low.state + "°C")
 end
index 55ad9f054ff6f8573decaf9e873583dc3b5f864c..7d066742a39f8d8ad2f8e693224b0f1b1d83636f 100644 (file)
@@ -5,7 +5,7 @@ The cm11a is a serial computer interface that allows a computer to control attac
 ## Hardware - cm11a
 
 The cm11a is an older device that communicates over a serial interface.
-Most people connect it to a computer using a serial to USB adapter.  
+Most people connect it to a computer using a serial to USB adapter.
 This binding has been tested with serial port and a serial to USB adapter.
 
 X10 (and thus the cm11a) supports two types of modules.
@@ -17,7 +17,7 @@ In addition to controlling X10 modules the cm11a listens on the powerline and re
 ### Use of serial port
 
 The binding opens the serial port when it starts and keeps it open until the binding is terminated.
-If the serial port is disconnected a reconnect will be attempted the next time it is needed.  
+If the serial port is disconnected a reconnect will be attempted the next time it is needed.
 Therefore, other applications should not attempt to use the port when OpneHAB is running.
 However, another program could load macros into the cm11a before openHAB starts.
 
index 1c9c21d651530d827a860bf6eac9315c49d699ce..1078859d04f338a96a021cada4eca3b8176aca95 100644 (file)
@@ -52,7 +52,7 @@ The query items support the following parameters:
 
 These are described further in the following subsections.
 
-##### query  
+##### query
 
 The query the items represents in the native language of your database:
 
@@ -104,7 +104,7 @@ The `resultString` channel is the only valid one if `scalarResult=false`, and in
 {
     correct : true,
     data : [
-        { 
+        {
             column1 : value,
             column2 : value
         },
@@ -141,14 +141,14 @@ To execute the action you need to pass the following parameters:
 And it returns an `ActionQueryResult` that has the following properties:
 
 - correct (boolean) : True if the query was executed correctly, false otherwise
-- data (List<Map<String,Object>>): A list where each element is a row that is stored in a map with (columnName,value) entries  
+- data (List<Map<String,Object>>): A list where each element is a row that is stored in a map with (columnName,value) entries
 - isScalarResult: It returns if the result is scalar one (only one row with one column)
 - resultAsScalar: It returns the result as a scalar if possible, if not returns null
 
 Example (using Jython script):
 
 ```python
-from core.log import logging, LOG_PREFIX 
+from core.log import logging, LOG_PREFIX
 log = logging.getLogger("{}.action_example".format(LOG_PREFIX))
 map = {"time" : "-2h"}
 influxdb = actions.get("dbquery","dbquery:influxdb2:sampleQuery") //Get bridge thing
@@ -213,7 +213,7 @@ Create a rule that is fired
 - **Then** executes the following script action (in that example Jython):
 
 ```text
-map = {"time" : "-2h"}   
-dbquery = actions.get("dbquery","dbquery:query:myquery")   
+map = {"time" : "-2h"}
+dbquery = actions.get("dbquery","dbquery:query:myquery")
 dbquery.setQueryParameters(map)
 ```
index 7213f1f01c8ac85f952a187d4885b3f568343c3e..4103a35f07091e3aa6e866c2363a9bc3b948e3ee 100644 (file)
@@ -288,7 +288,7 @@ Number:Dimensionless    Livingroom_Thermostat_ValvePosition      "Thermostat Val
 Contact                 Livingroom_Thermostat_WindowOpen         "Thermostat Window Open [%s]"                        { channel="deconz:thermostat:homeserver:livingroom-thermostat:windowopen" }
 Switch                  Livingroom_Thermostat_Locked             "Thermostat Locked [%s]"                             { channel="deconz:thermostat:homeserver:livingroom-thermostat:locked" }
 String                  Livingroom_Thermostat_Mode               "Thermostat Mode [%s]"                               { channel="deconz:thermostat:homeserver:livingroom-thermostat:mode" }
-Dimmer                  Livingroom_Ceiling                       "Livingroom Ceiling [%d]"            <light>         { channel="deconz:dimmablelight:homeserver:livingroom-ceiling:brightness" }                 
+Dimmer                  Livingroom_Ceiling                       "Livingroom Ceiling [%d]"            <light>         { channel="deconz:dimmablelight:homeserver:livingroom-ceiling:brightness" }
 Color                   Livingroom                               "Livingroom Light Control"                           { channel="deconz:lightgroup:homeserver:livingroom:color" }
 Switch                  Entrance_Door                            "Doorlock"                                           { channel="deconz:doorlock:homeserver:entrance-door:lock" }
 String                  Entrance_Siren                           "Siren [%s]"                         <alarm>         { channel="deconz:warningdevice:homeserver:entrance-siren:alert" }
index 22266ebdef2f333896143999b02ca2fd685f8ee5..712d12c1e9bce36c23d222311b5937c139e44e59 100644 (file)
@@ -398,13 +398,13 @@ _Blinds:_
 
 ```java
 Bridge digitalstrom:dssBridge:dSS [ dSSAddress="urlOfMyDss",  userName="dssadmin", password="mySecretPassword", sensorDataUpdateInterval=180] {
-  GE GE-KM-200 [ dSID="3504175fe000000000010db9",  activePowerRefreshPriority="low", electricMeterRefreshPriority="medium", outputCurrentRefreshPriority="high"] 
-  SW SW-ZWS-200 [ dSID="3504175fe0000000000651c0"] 
-  SW SW-UMR-200 [ dSID="302ed89f43f00ec0000a1034"] 
-  dSiSens200 dS-iSens200 [ dSID="302ed89f43f026800003543d"] 
+  GE GE-KM-200 [ dSID="3504175fe000000000010db9",  activePowerRefreshPriority="low", electricMeterRefreshPriority="medium", outputCurrentRefreshPriority="high"]
+  SW SW-ZWS-200 [ dSID="3504175fe0000000000651c0"]
+  SW SW-UMR-200 [ dSID="302ed89f43f00ec0000a1034"]
+  dSiSens200 dS-iSens200 [ dSID="302ed89f43f026800003543d"]
   zoneTemperatureControl zoneTemperatureControl [ zoneID="livingroom"]
-  GR GR-KL220 [ dSID="3504175fe0000000000651c1" ] 
-  namedScene Scene1 [ zoneID="5", groupID="1", sceneID="5"] 
+  GR GR-KL220 [ dSID="3504175fe0000000000651c1" ]
+  namedScene Scene1 [ zoneID="5", groupID="1", sceneID="5"]
   circuit circuit1 [ dSID="3504175fe0000010000004e4" ]
   GR GR-KL200 [ dSID="3504175fe0000000000651c1" ]
 }
@@ -458,59 +458,59 @@ sitemap demo label="Main Menu"
 {
   Frame label="System" {
    Frame label="digitalSTROM-Server"{
-      Text item=TotalActivePower 
-      Text item=TotalElectricMeter 
+      Text item=TotalActivePower
+      Text item=TotalElectricMeter
     }
-  
+
    Frame label="digitalSTROM-Meter"{
       Text item=TotalActivePowerDsm
       Text item=TotalElectricMeterDsm
     }
   }
-  
+
   Frame label="Climate" {
    Frame label="heating/cooling"{
-      Switch item=SensorSwitch 
+      Switch item=SensorSwitch
     }
-    
+
    Frame label="iSens200"{
       Text item=TempIndoor
       Text item=HumidityIndoor
     }
-    
+
    Frame label="Target temperature"{
       Slider item=Temperature
       Text item=Temperature
     }
   }
-  
+
   Frame label="Shade"{
    Frame label="Rollerschutter"{
-      Slider item=Shade 
+      Slider item=Shade
       Text item=Shade
     }
-    
+
    Frame label="Blind"{
-      Slider item=BlindPosition 
+      Slider item=BlindPosition
       Slider item=BlindAngle
     }
   }
-  
+
   Frame label="Scenes"{
     Frame label="TV scene"{
-      Switch item=Scene 
+      Switch item=Scene
     }
   }
-  
+
   Frame label="HiFi" {
     Frame label="TV light"{
-      Slider item=Brightness 
+      Slider item=Brightness
       Switch item=Brightness
-      Text item=ActivePower 
-      Text item=OutputCurrent 
-      Text item=ElectricMeter 
+      Text item=ActivePower
+      Text item=OutputCurrent
+      Text item=ElectricMeter
     }
-    
+
    Frame label="TV"{
       Switch item=DeviceSwitch
     }
index 5f3755c0af5ed232b2cfb2ac164a73f2a2f74a78..f5fa2bffc24f4a5fc9aff28b0190f065d1b143a3 100644 (file)
@@ -6,7 +6,7 @@ A binding for D-Link Smart Home devices.
 
 ### DCH-S150 (WiFi motion sensor)
 
-The binding has been tested with hardware revisions A1 and A2 running firmware version 1.22. 
+The binding has been tested with hardware revisions A1 and A2 running firmware version 1.22.
 The mydlink Home service is now end of life and the device requires a daily reboot (performed by the binding) to keep it responsive.
 
 ## Discovery
index 65841d293c96a474958572ce65ed1def3f7fb762..c0c3b3e9f9f2d0c030f5ff34c3db522be4c69d7e 100644 (file)
@@ -268,7 +268,7 @@ This example defines a sACN/E1.31 bridge in unicast mode which transmits univers
 Bridge dmx:sacn-bridge:mybridge [ mode="unicast", address="192.168.0.60", universe=2 ] {
  color  rgb    [dmxid="5/3", fadetime=1000, dimtime=10000 ]
  dimmer single [dmxid="50", fadetime=1000, turnonvalue="230", turnoffvalue="25" ]
- chaser ampel  [dmxid="10,12,13", steps="100:255,0,0:1000|100:255,255,0:500|100:0,0,255:1000|100:0,255,0:500" ] 
+ chaser ampel  [dmxid="10,12,13", steps="100:255,0,0:1000|100:255,255,0:500|100:0,0,255:1000|100:0,255,0:500" ]
 }
 ```
 
@@ -288,11 +288,11 @@ sitemap demo label="Main Menu"
     Frame {
         // Color
         Colorpicker item=MyColorItem
-        
+
         // Dimmer
         Switch item=MyDimmerItem
         Slider item=MyDimmerItem
-        
+
         // Chaser
         Switch item=MyChaserItem
     }
index 9b4c4eaa608912901cb941cc9039c04055cc7937..d74a2d93d478d035abb4c860deee9deceea065ed 100644 (file)
@@ -38,11 +38,11 @@ Normally, only the hostname or IP address must be configured.
 
 These channels can be used to retrieve the current device state and change the controls.
 
-The input mode can be either be controlled by the "input" string channel, or by writing an ON value to the dedicated switch channels, which represents the physical buttons on the CP750 device. 
+The input mode can be either be controlled by the "input" string channel, or by writing an ON value to the dedicated switch channels, which represents the physical buttons on the CP750 device.
 
 | Channel    | Type   | Read/Write | Description                                                                                                     |
 |------------|--------|------------|-----------------------------------------------------------------------------------------------------------------|
-| fader      | Dimmer | RW         | Fader value (0 to 100)                                                                                          | 
+| fader      | Dimmer | RW         | Fader value (0 to 100)                                                                                          |
 | mute       | Switch | RW         | Mute (ON or OFF)                                                                                                |
 | input      | String | RW         | Input channel as string (one of "analog", "dig_1", "dig_2", "dig_3", "dig_4", "non-sync" or "mic")              |
 | analog     | Switch | RW         | Is ON if input mode is 'analog'. When an ON command is retrieved, input mode will be changed to this channel.   |
@@ -55,7 +55,7 @@ The input mode can be either be controlled by the "input" string channel, or by
 
 ## Full Example
 
-The following example is for a device connected at IP 192.168.1.135 on port 61408 with all channels linked to items. 
+The following example is for a device connected at IP 192.168.1.135 on port 61408 with all channels linked to items.
 
 demo.things:
 
index 46a5d135faee12454139e5215bae258d1af36837..97f03a59093a5c5a04bc2d9b672fedbf6f9d9140 100644 (file)
@@ -29,7 +29,7 @@ Bridge dominoswiss:egate:myeGate "My eGate Server" @ "Home" [ ipAddres="localhos
 ```
 
 The thing blind represents one blind on the eGate. Each blind is represented by an id set on your eGate.
-  
+
 ```java
 Thing blind officeBlind "Office" @ "1stFloor" [ id="1"]
 ```
@@ -83,9 +83,9 @@ This example moves the blind of the office up as the sun passed 110 azimuth (so
 
 ```java
 rule "OneSide up"
-when 
-    Item Azimuth changed 
-then 
+when
+    Item Azimuth changed
+then
     val azimuth = Math::round((Azimuth.state as DecimalType).intValue)
     if (azimuth == 110)
     {
index 6dee55a7aa9f5a8ff494fedd028b5cfea92057e9..98cd7675752ce2c780b5f4ee37e9c725d00ab2e3 100644 (file)
@@ -126,7 +126,7 @@ if(actions === null) {
     return
  }
  actions.sipHangup()
+
  var String ringTimeLimit = actions.getRingTimeLimit()
  ```
 
index 4ec81cae6c1ee315143740f2ac27ad5a982e3153..b0cfec6afd1b2e3a4ed5c7af75d99ceb9fb18adc 100644 (file)
@@ -415,7 +415,7 @@ Here is an example sitemap:
                     Text item=PANEL_ZONE_FAULT label="Zone Fault"
                     Text item=PANEL_ZONE_TAMPER label="Zone Tamper"
                     Text item=PANEL_ZONE_LOW_BATTERY label="Zone Low Battery"
-                    Text item=PANEL_TIME_LOSS label="Panel Time Loss"                   
+                    Text item=PANEL_TIME_LOSS label="Panel Time Loss"
                 }
             }
 
@@ -602,16 +602,16 @@ Sample Rules for Sending a DSC Alarm Command
 
 ```javascript
 rule "SendKeystrokeStringCommand"
-when   
+when
     Item SwitchItemName received command ON
-then   
+then
     SEND_DSC_ALARM_COMMAND.sendCommand("071,1*101#")
 end
 
 rule "SendPollingCommand"
-when   
+when
     Item SwitchItemName received command ON
-then   
+then
     SEND_DSC_ALARM_COMMAND.sendCommand("000")
 end
 ```
index 24f53b745e565a140a1d3644a68e22373c30c79b..0e1c333e4a7693ce05d3a73c0880b4358b199c6b 100644 (file)
@@ -177,7 +177,7 @@ Text label="Pollenflugindex" {
                                 =="2"="#ff9900",
                                 =="1-2"="#ff9900",
                                 =="1"="#ffff00",
-                                =="0-1"="#00c83c"] 
+                                =="0-1"="#00c83c"]
 
                 Text item=pollenTomorrowEsche
                     valuecolor=[=="3"="#f00014",
index 542108f32acf2ffd050afaac2794672321485882..0f37840f3bec2531bb823698690a0fa3147d2871 100644 (file)
@@ -132,7 +132,7 @@ when
      Channel 'dwdunwetter:dwdwarnings:cologne:updated1' triggered NEW
 then
    // New Warning send a push notification to everyone
-end 
+end
 
 ```
 
index ec3e5601d67562c82c03987dd4eed11db15873fd..dd312d6db5a1204d6cf19eed12cd8e609439679f 100644 (file)
@@ -99,6 +99,7 @@ R=RFID
 ```\r
 \r
 transform/ekey_names.map [NO spaces allowed]\r
+\r
 ```text\r
 -1=Unspecified\r
 1=JohnDoe\r
index f1d2dcdbb3a9f126119aa23e95775b329f480f83..38dc9c23be36fc0d2dc2a2830f084d4174354ede 100644 (file)
@@ -86,7 +86,7 @@ A typical item configuration for a rollershutter looks like this:
 
 ```java
 Rollershutter Rollershutter1 {channel="elerotransmitterstick:elerochannel:0a0a0a0a:1:control",autoupdate="false" }
-String Rollershutter1State  {channel="elerotransmitterstick:elerochannel:0a0a0a0a:1:status" } 
+String Rollershutter1State  {channel="elerotransmitterstick:elerochannel:0a0a0a0a:1:status" }
 ```
 
 A sitemap entry looks like this:
index 1008c660ec4aa85aad37fff4fccb71dd198ab346..62f7ab3d2ccfd6af1c7edc50ddc06735afd1d31b 100644 (file)
@@ -38,15 +38,15 @@ The Emotiva Processor supports the following channels (some channels are model s
 | Channel Type ID                    | Item Type          | Description                                                |
 |------------------------------------|--------------------|------------------------------------------------------------|
 | _Main zone_                        |                    |                                                            |
-| main-zone#power                    | Switch (RW)        | Main zone power on/off                                     |      
-| main-zone#volume                   | Dimmer (RW)        | Main zone volume in percentage (0 to 100)                  |             
-| main-zone#volume-db                | Number (RW)        | Main zone volume in dB (-96 to 15)                         | 
-| main-zone#mute                     | Switch (RW)        | Main zone mute                                             | 
-| main-zone#source                   | String (RW)        | Main zone input (HDMI1, TUNER, ARC, ...)                   | 
+| main-zone#power                    | Switch (RW)        | Main zone power on/off                                     |
+| main-zone#volume                   | Dimmer (RW)        | Main zone volume in percentage (0 to 100)                  |
+| main-zone#volume-db                | Number (RW)        | Main zone volume in dB (-96 to 15)                         |
+| main-zone#mute                     | Switch (RW)        | Main zone mute                                             |
+| main-zone#source                   | String (RW)        | Main zone input (HDMI1, TUNER, ARC, ...)                   |
 | _Zone 2_                           |                    |                                                            |
-| zone2#power                        | Switch (RW)        | Zone 2 power on/off                                        | 
-| zone2#volume                       | Dimmer (RW)        | Zone 2 volume in percentage (0 to 100)                     | 
-| zone2#volume-db                    | Number (RW)        | Zone 2 volume in dB (-80 offset)                           | 
+| zone2#power                        | Switch (RW)        | Zone 2 power on/off                                        |
+| zone2#volume                       | Dimmer (RW)        | Zone 2 volume in percentage (0 to 100)                     |
+| zone2#volume-db                    | Number (RW)        | Zone 2 volume in dB (-80 offset)                           |
 | zone2#mute                         | Switch (RW)        | Zone 2 mute                                                |
 | zone2#input                        | String (RW)        | Zone 2 input                                               |
 | _General_                          |                    |                                                            |
@@ -153,11 +153,11 @@ String                  emotiva-menu-tottom-end     ""                      <non
 ```perl
 Group item=emotiva-input label="Processor" icon="receiver" {
     Default   item=emotiva-power
-    Default   item=emotiva-mute             
-    Setpoint  item=emotiva-volume           
-    Default   item=emotiva-volume-db        step=2 minValue=-96.0 maxValue=15.0 
-    Selection item=emotiva-source           
-    Text      item=emotiva-mode-surround    
+    Default   item=emotiva-mute
+    Setpoint  item=emotiva-volume
+    Default   item=emotiva-volume-db        step=2 minValue=-96.0 maxValue=15.0
+    Selection item=emotiva-source
+    Text      item=emotiva-mode-surround
     Setpoint  item=emotiva-speakers-center  step=0.5 minValue=-12.0 maxValue=12.0
     Default   item=emotiva-zone2power
 }
index 15591c1991dc77738dd6558b1e4ce77c62988f97..b7f638818a13b9e887c3d627b376a56f10425909 100644 (file)
@@ -82,7 +82,7 @@ sitemap energenie label="Energenie Devices"
        Switch item=Socket2\r
        Switch item=Socket3\r
        Switch item=Socket4\r
-       \r
+\r
        // Power measurement\r
        Number item=Voltage\r
        Number item=Current\r
index 84b9d699f726a4f157d68fc26acd9473598757cc..11e0a42fcc2b1733dd891021b1908ef3c79df6e7 100644 (file)
@@ -844,7 +844,7 @@ logger.info "Total price for using 150 W for the next hour: #{price}" if price
 duration_phases = [
   37.minutes,
   8.minutes,
-  4.minutes, 
+  4.minutes,
   2.minutes,
   4.minutes,
   36.minutes,
@@ -863,7 +863,7 @@ consumption_phases = [
   0 | "W"
 ],
 
-result = eds.calculate_cheapest_period(ZonedDateTime.now.to_instant, 
+result = eds.calculate_cheapest_period(ZonedDateTime.now.to_instant,
                                           24.hours.from_now.to_instant,
                                           duration_phases,
                                           consumption_phases)
@@ -877,7 +877,7 @@ logger.info "Most expensive start #{result["MostExpensiveStart"]}"
 # In this example we have to provide the total duration to make sure we fit the latest end. This is because there is no
 # registered consumption in the last phase.
 # Here we are using an alternative way of constructing an array of Durations.
-# The `#minutes` method on an Integer object returns a corresponding Duration object. 
+# The `#minutes` method on an Integer object returns a corresponding Duration object.
 duration_phases = [37, 8, 4, 2, 4, 36, 41].map { |i| i.minutes }
 
 result = eds.calculate_cheapest_period(ZonedDateTime.now.to_instant,
index 2992c67e739b32479afc44cc914934c6d630da74..f2265628cf8e8ace91916aeb85c71979360a105c 100644 (file)
@@ -83,8 +83,8 @@ demo.sitemap:
 ```perl
 sitemap demo label="Enigma2 Demo"
 {
-  Frame label="Enigma2" { 
-     Switch    item=Enigma2_Power        
+  Frame label="Enigma2" {
+     Switch    item=Enigma2_Power
      Slider    item=Enigma2_Volume step=5 minValue=0 maxValue=100
      Setpoint  item=Enigma2_Volume step=5 minValue=0 maxValue=100
      Switch    item=Enigma2_Mute
@@ -111,8 +111,8 @@ sitemap demo label="Enigma2 Demo"
      Switch    item=Enigma2_RemoteKeys mappings=[FAST_BACKWARD="<<", PLAY=">", PAUSE="||", FAST_FORWARD=">>"]
      Switch    item=Enigma2_RemoteKeys mappings=[TV="TV", RECORD="O", STOP="[]", RADIO="Radio"]
      Switch    item=Enigma2_RemoteKeys mappings=[INFO="INFO"]
-  }   
-  Frame label="Enigma2 Messages" {   
+  }
+  Frame label="Enigma2 Messages" {
      Switch    item=Enigma2_SendError mappings=[SEND="SEND"]
      Switch    item=Enigma2_SendWarning mappings=[SEND="SEND"]
      Switch    item=Enigma2_SendInfo mappings=[SEND="SEND"]
index 4454cfcffa5ee34eef71c9e159c7af18db2020ae..395c9de06b85cf8648c9fecde9e98105d1b43de5 100644 (file)
@@ -107,7 +107,7 @@ Hence if your device supports one of the following EEPs the chances are good tha
 Âł Note that the soda handles potentially contain a wide range of different sensors and buttons.
 However the amount of built-in sensors and buttons may vary between different models.
 In case your particular device does not contain one of the potentially supported features the corresponding channel will never trigger an update.
-Please see the manual of your particular model to check which channels should be supported before opening an issue.  
+Please see the manual of your particular model to check which channels should be supported before opening an issue.
 
 Furthermore following supporting EEP family is available too: A5-11, types 0x03 (rollershutter position status), 0x04 (extended light status) and D0-06 (battery level indication).
 
@@ -416,12 +416,12 @@ Bridge enocean:bridge:gtwy "EnOcean Gateway" [ path="/dev/ttyAMA0" ] {
    Thing centralCommand cc02 "Dimmer" @ "Living room" [ enoceanId="aabbcc05", senderIdOffset=2, sendingEEPId="A5_38_08_02", receivingEEPId="A5_38_08_02", broadcastMessages=true, suppressRepeating=false ]
    Thing rollershutter r01 "Rollershutter" @ "Kitchen" [ enoceanId="aabbcc06", senderIdOffset=3, sendingEEPId="A5_3F_7F_EltakoFSB", receivingEEPId="A5_3F_7F_EltakoFSB", broadcastMessages=true, suppressRepeating=false ] {Channels: Type rollershutter:rollershutter [shutTime=25]}
    Thing measurementSwitch ms01 "TV Smart Plug" @ "Living room" [ enoceanId="aabbcc07", senderIdOffset=4, sendingEEPId="D2_01_09", broadcastMessages=false, receivingEEPId="D2_01_09","A5_12_01", suppressRepeating=false, pollingInterval=300]
-   Thing classicDevice cd01 "Garage_Light" @ "Garage" [ 
-        senderIdOffset=5, 
-        sendingEEPId="F6_02_01", 
-        broadcastMessages=true, 
+   Thing classicDevice cd01 "Garage_Light" @ "Garage" [
+        senderIdOffset=5,
+        sendingEEPId="F6_02_01",
+        broadcastMessages=true,
         receivingEEPId="F6_02_01",
-        suppressRepeating=false 
+        suppressRepeating=false
    ] {
         Type virtualSwitchA             : virtualSwitchA              [duration=300, switchMode="rockerSwitch"]
         Type rockerswitchListenerSwitch : Listener1 "Schalter links"  [enoceanId="aabbcc08", channel="channelA", switchMode="toggleButtonDir1"]
@@ -436,8 +436,8 @@ Switch Light_Switch { channel="enocean:rockerSwitch:gtwy:rs01:rockerSwitchAction
 Dimmer Kitchen_Hue "Hue" <light> {channel="enocean:rockerSwitch:gtwy:rs01:rockerswitchB" [profile="system:rawrocker-to-dimmer"], channel="hue:0220:0017884f6626:9:brightness"}
 Rollershutter Kitchen_Rollershutter "Roller shutter" <blinds> (Kitchen) {channel="enocean:rollershutter:gtwy:r01:rollershutter", autoupdate="false"}
 Switch Garage_Light "Switch" {
-        channel="enocean:classicDevice:gtwy:cd01:virtualRockerswitchA", 
-        channel="enocean:classicDevice:gtwy:cd01:Listener1", 
+        channel="enocean:classicDevice:gtwy:cd01:virtualRockerswitchA",
+        channel="enocean:classicDevice:gtwy:cd01:Listener1",
         channel="enocean:classicDevice:gtwy:cd01:Listener2"
 }
 ```
index 238e9056f17ec86780b4c77bc22dee4667f972d6..6b12fe0ff2822cc6bd8bdfc3cecfbd1fff0b9bbf 100644 (file)
@@ -9,10 +9,10 @@ The binding will search your Jollyday event definition files in the sub folder `
 
 The binding handles the following Things:
 
-* default holiday data (`holiday`)
-* custom holiday file (`custom`)
-* daysets (`dayset`)
-* weekend (`weekend`)
+- default holiday data (`holiday`)
+- custom holiday file (`custom`)
+- daysets (`dayset`)
+- weekend (`weekend`)
 
 ## Discovery
 
@@ -24,7 +24,6 @@ There is no configuration at binding level.
 
 ## Thing Configuration
 
-
 ### `custom` Thing Configuration
 
 | Name            | Type    | Description                                       | Default | Required | Advanced |
@@ -39,7 +38,6 @@ The file has to use the syntax described here : https://www.openhab.org/docs/con
 |-----------------|---------|---------------------------|---------|----------|----------|
 | name            | text    | Name of the dayset used   | N/A     | yes      | no       |
 
-
 ## Channels
 
 ### `weekend` Channels
@@ -80,7 +78,7 @@ The file has to use the syntax described here : https://www.openhab.org/docs/con
 
 ## Full Example
 
-### Thing Configuration
+### Thing Example
 
 ```java
 Thing ephemeris:holiday:local "Holidays"
@@ -88,7 +86,7 @@ Thing ephemeris:weekend:local "Week-end"
 Thing ephemeris:custom:events "Event" [fileName="events.xml"]
 ```
 
-### Item Configuration
+### Item Example
 
 ```java
 String         ToD_Event_Current          "Event Today"       <calendar>    (gEvents)                           {channel="ephemeris:custom:events:title-today"}
index 731ef016431894d2b898411e302df4c6033173c6..fed28d9595026988e0a0844609ff75b093add66f 100644 (file)
@@ -50,10 +50,10 @@ items:
 String SprinklerCommandStatus       "Command Status [%s]"  (gMain) { channel="etherrain:etherrain:sprinkler0:commandstatus" }
 String SprinklerOperatingStatus     "Operating Status [%s]"  (gMain) { channel="etherrain:etherrain:sprinkler0:operatingstatus" }
 String SprinklerOperatingResult     "Operating Result [%s]"  (gMain) { channel="etherrain:etherrain:sprinkler0:operatingresult" }
-            
-String SprinklerActiveZone         "Active Zone [%s]"  (gMain) { channel="etherrain:etherrain:sprinkler0:relayindex" }                  
+
+String SprinklerActiveZone         "Active Zone [%s]"  (gMain) { channel="etherrain:etherrain:sprinkler0:relayindex" }
 Switch SprinklerRainSensor        (gMain) { channel="etherrain:etherrain:sprinkler0:rainsensor" }
-            
+
 Switch SprinklerExecute            (gMain) { channel="etherrain:etherrain:sprinkler0:execute" }
 Switch SprinklerClear              (gMain) { channel="etherrain:etherrain:sprinkler0:clear" }
 ```
index aabeb32f3437e3799ffdf16fbf21b81ecef3298c..54b2dd8cbacc42dff876a7b4c178b27200538152 100644 (file)
@@ -106,11 +106,11 @@ Please note that you have to replace _\<N\>_ with your loadpoint id/number.
 
 Those channels exist:
 
-* 1 per configured loadpoint with `chargerFeatureHeating = false`:
-  * These channels point to the heating device that is currently active/connected at/to the loadpoint
-  * Please note that you have to replace _\<N\>_ with your loadpoint id/number
-* 1 per configured vehicle:
-  * Please note that you have to replace _\<ID\>_ with your vehicle id/name
+- 1 per configured loadpoint with `chargerFeatureHeating = false`:
+  - These channels point to the heating device that is currently active/connected at/to the loadpoint
+  - Please note that you have to replace _\<N\>_ with your loadpoint id/number
+- 1 per configured vehicle:
+  - Please note that you have to replace _\<ID\>_ with your vehicle id/name
 
 | Channel                                            | Type                 | Read/Write | Description                                                              |
 |----------------------------------------------------|----------------------|------------|--------------------------------------------------------------------------|
@@ -126,11 +126,11 @@ Those channels exist:
 
 Those channels exist:
 
-* 1 per configured loadpoint with `chargerFeatureHeating = true`:
-  * These channels point to the heating device that is currently active/connected at/to the loadpoint
-  * Please note that you have to replace _\<N\>_ with your loadpoint id/number
-* 1 per configured heating device:
-  * Please note that you have to replace _\<ID\>_ with your heating device id/name
+- 1 per configured loadpoint with `chargerFeatureHeating = true`:
+  - These channels point to the heating device that is currently active/connected at/to the loadpoint
+  - Please note that you have to replace _\<N\>_ with your loadpoint id/number
+- 1 per configured heating device:
+  - Please note that you have to replace _\<ID\>_ with your heating device id/name
 
 | Channel                                                 | Type               | Read/Write | Description                                                           |
 |---------------------------------------------------------|--------------------|------------|-----------------------------------------------------------------------|
index 65744fd22298089b08c68f83783da28dc637c337..f9f2d8203af9a690a3649b4eeddaf7380f7975f1 100644 (file)
@@ -83,7 +83,7 @@ Bridge evohome:account:your_account_alias [ username="your_user_name", password=
 }
 ```
 
-### demo.items  
+### demo.items
 
 ```java
 // evohome Display
@@ -112,8 +112,8 @@ sitemap evohome label="evohome Menu"
     }
 
     Frame label="evohome heating zone" {
-        Text     label="Temperature"      item=DemoZoneTemperature      
-        Text     label="Status"           item=DemoZoneSetPointStatus   
+        Text     label="Temperature"      item=DemoZoneTemperature
+        Text     label="Status"           item=DemoZoneSetPointStatus
         Setpoint label="Zone set point"   item=DemoZoneSetPoint minValue=5 maxValue=35 step=0.5
     }
 }
index 4ba708c8270a4db1a9e1babe8dc5cc4772d4840c..5d3ba38c69e25278b9e29cc67eea9121f8e2da65 100644 (file)
@@ -118,7 +118,7 @@ Number YourNumber "Your Number [%.1f Â°C]"
 Switch yourcommand_Run {channel="exec:command:yourcommand:run", autoupdate="false"}
 // Arguments to be placed for '%2$s' in command line
 String yourcommand_Args {channel="exec:command:yourcommand:input"}
-// Output of command line execution 
+// Output of command line execution
 String yourcommand_Out {channel="exec:command:yourcommand:output"}
 ```
 
index a2369af576917e58b7275627afe349638dcbd626..36fbb06a4defb728ed64d9af732fb94aad367c25 100644 (file)
@@ -29,7 +29,7 @@ The FENECON Thing only needs to be configured with the `hostname`, all other par
 
 ## Channels
 
-The FENECON binding currently only provides access to read out the values from the energy storage system. 
+The FENECON binding currently only provides access to read out the values from the energy storage system.
 
 | Channel                       | Type                 | Read/Write | Description                                                                 |
 |-------------------------------|----------------------|------------|-----------------------------------------------------------------------------|
@@ -117,7 +117,7 @@ rule "Blackout detection"
 when
   Item EmergencyPowerMode changed to ON
 then
-    val msg = "🚨 Power blackout detected, emergency power mode running." 
+    val msg = "🚨 Power blackout detected, emergency power mode running."
     logInfo("PowerBlackout", msg)
     sendBroadcastNotification(msg)
 end
index 7cc93307a58bee0c09150dc3538715b3eee18252..0eab1589061a4f5ce0f1d8b718e9ea8cbc43b70f 100644 (file)
@@ -265,7 +265,7 @@ Valid sensors:
 | sensor-co2-pm25-24-hour-average       | Number:Density       | R          | PM2.5 Air Quality 24 Hour Average (CO2-Sensor) |
 | sensor-co2-co2                        | Number:Dimensionless | R          | CO2                                            |
 | sensor-co2-co2-24-hour-average        | Number:Dimensionless | R          | CO2 24 Hour Average                            |
-| leaf-wetness-channel-1                | Number:Dimensionless | R          | Leaf Moisture Channel 1                        |  
+| leaf-wetness-channel-1                | Number:Dimensionless | R          | Leaf Moisture Channel 1                        |
 | leaf-wetness-channel-2                | Number:Dimensionless | R          | Leaf Moisture Channel 2                        |
 | leaf-wetness-channel-3                | Number:Dimensionless | R          | Leaf Moisture Channel 3                        |
 | leaf-wetness-channel-4                | Number:Dimensionless | R          | Leaf Moisture Channel 4                        |
@@ -303,7 +303,7 @@ _weatherstation.things_:
 ```java
 Bridge fineoffsetweatherstation:gateway:3906700515 "Weather station" [
      ip="192.168.1.42",
-     port="45000", 
+     port="45000",
      discoverInterval="900",
      pollingInterval="16",
      protocol="DEFAULT"
index 2ba4f87004f4e49736ce12396f24c1bf37edaaa1..6b7d90eb6ba0e7ec9980713eb0fb1d247df9de8b 100644 (file)
@@ -53,7 +53,7 @@ Note, there is a rate limit of 120 queries per hour imposed by Flume so use caut
 | Battery Level         | battery-level     | Number:Dimensionless      | R          | Estimate of percent of remaining battery level                   |
 | Low Battery           | low-battery       | Switch                    | R          | Indicator of low battery level                                   |
 | Last Seen             | last-seen         | DateTime                  | R          | Date/Time when meter was last seen on the network                |
-| Usage Alert           | usage-alert       | Trigger                   | n/a        | Trigger channel for usage alert notification                     | 
+| Usage Alert           | usage-alert       | Trigger                   | n/a        | Trigger channel for usage alert notification                     |
 
 ## Full Example
 
@@ -64,7 +64,7 @@ When the Bridge device is first created, there will be a log message with the ID
 
 ```
 Bridge flume:cloud:cloudconnector [ username="xxx", password="xxx", clientId="xxx", clientSecret="xxx" ] {
-    
+
     meter-device meter [ id="xxx" ]
 }
 ```
@@ -74,9 +74,9 @@ Bridge flume:cloud:cloudconnector [ username="xxx", password="xxx", clientId="xx
 ```
 Number:VolumetricFlowRate     InstantUsage     "Instant Usage"         { channel = "flume:meter-device:1:meter:instant-usage" }
 Number:Volume                 CumulativeUsed   "Cumulative Used"       { channel = "flume:meter-device:1:meter:cumulative-usage" }
-Number:Dimensionless          BatteryLevel     "Battery Level"         { channel = "flume:meter-device:1:meter:battery-level" }   
+Number:Dimensionless          BatteryLevel     "Battery Level"         { channel = "flume:meter-device:1:meter:battery-level" }
 DateTime                      LastSeen         "Last Seen"             { channel = "flume:meter-device:1:meter:last-seen" }
-Switch                        LowPower         "Battery Low Power"     { channel = "flume:meter-device:1:meter:low-battery" }  
+Switch                        LowPower         "Battery Low Power"     { channel = "flume:meter-device:1:meter:low-battery" }
 
 ```
 
index 0d2414770e9e7de5383d25982f7ae96f3acae689..a9184c61984f89204e628bfcd47e5639ed5117e1 100644 (file)
@@ -115,7 +115,7 @@ Thing fmiweather:forecast:forecast_Helsinki "Helsinki Forecast" [location="60.19
 
 `observation.items`:
 
-<!-- 
+<!--
 # Generated mostly with following ugly python snippet.
 # fmiweather:observation:station_Helsinki_Kumpula here is thing with all channels linked
 
@@ -125,7 +125,7 @@ with open(fname) as f: j = json.load(f)
 observation = j['fmiweather:observation:station_Helsinki_Kumpula']
 for channel in observation['value']['channels']:
     channel_id = ':'.join(channel['uid']['segments'])
-    label = channel['label']    
+    label = channel['label']
     item_type = channel['acceptedItemType']
     if 'clouds' in channel_id:
         unit = '%.0f %unit%'
@@ -138,9 +138,9 @@ for channel in observation['value']['channels']:
     for item_name_part in channel_name.split('-'):
         item_name += item_name_part[0].upper()
         item_name += item_name_part[1:]
-    
+
     print(('{item_type} {item_name} ' +
-     '"{label} [{unit}]" {{ channel="{channel_id}" }}').format(**locals()))    
+     '"{label} [{unit}]" {{ channel="{channel_id}" }}').format(**locals()))
 -->
 
 ```java
@@ -160,7 +160,7 @@ Number HelsinkiPresentWeatherCode "Prevailing weather [%d]" <sun_clouds> { chann
 
 `forecast.items`:
 
-<!-- 
+<!--
 # Generated mostly with following ugly python snippet.
 # fmiweather:forecast:forecast_Helsinki here is thing with channels linked in 'simple mode'
 # on OH3, authentication can be disabled by running "bundle:stop org.openhab.core.io.rest.auth" in the Karaf console
@@ -177,13 +177,13 @@ for forecast in j:
         break
 else:
     raise ValueError('thing not found!')
-    
+
 prev_group = 'None'
 for channel in forecast['channels']:
-    group_name, channel_name = channel['uid'].rsplit(':', 1)[-1].split('#')    
+    group_name, channel_name = channel['uid'].rsplit(':', 1)[-1].split('#')
     channel_id = channel['uid']
     label = channel['label'] + group_name.replace('forecast', ' ').replace('Hours', 'hour ')
-    
+
     item_type = channel['itemType']
     if 'cloud' in channel_id:
         unit = '%.0f %unit%'
@@ -191,13 +191,13 @@ for channel in forecast['channels']:
         unit = '%1$tY-%1$tm-%1$tdT%1$tH:%1$tM:%1$tS'
     else:
         unit = '%.1f %unit%'
-    
+
     item_name = 'Helsinki'
     item_name += group_name[0].upper() + group_name[1:]
     for item_name_part in channel_name.split('-'):
         item_name += item_name_part[0].upper()
-        item_name += item_name_part[1:]        
-    
+        item_name += item_name_part[1:]
+
     icon = ''
     if icon == '': icon = '<wind>' if 'wind' in item_name.lower() else ''
     if icon == '': icon = '<humidity>' if 'humidity' in item_name.lower() else ''
@@ -206,14 +206,14 @@ for channel in forecast['channels']:
     if icon == '': icon = '<time>' if 'time' in item_name.lower() else ''
     if icon == '': icon = '<temperature>' if 'tempe' in item_name.lower() else ''
     if icon == '': icon = '<rain>' if 'precipi' in item_name.lower() else ''
-    
+
     if prev_group != group_name:
         print('')
     prev_group = group_name
-        
-    
+
+
     print(('{item_type} {item_name} ' +
-     '"{label} [{unit}]" {icon} {{ channel="{channel_id}" }}').format(**locals()))       
+     '"{label} [{unit}]" {icon} {{ channel="{channel_id}" }}').format(**locals()))
 -->
 
 ```java
@@ -811,7 +811,7 @@ sitemap fmi_weather label="FMI Weather" {
         Text item=HelsinkiForecastNowTotalCloudCover
         Text item=HelsinkiForecastNowWeatherId
     }
-    
+
     Frame label="Forecast 01 hours" {
         Text item=HelsinkiForecastHours01Time
         Text item=HelsinkiForecastHours01Temperature
index c47dde7979c07f8241e54d298be09849e142c301..929d7d4578c6af00929001814b717725a80e1fe4 100644 (file)
@@ -145,7 +145,7 @@ The binding has no configuration options, all configuration is done at `bridge`,
 
 :::warning
 Battery control uses the battery management's time-dependent battery control settings of the inverter settings and therefore overrides user-specified time of use settings.
-Please note that user-specified time of use plans cannot be used together with battery control, as battery control will override the user-specified time of use settings. 
+Please note that user-specified time of use plans cannot be used together with battery control, as battery control will override the user-specified time of use settings.
 :::
 
 The `powerinverter` Thing provides actions to control the battery charging and discharging behaviour of hybrid inverters, such as Symo Gen24 Plus, if username and password are provided in the bridge configuration.
@@ -159,6 +159,7 @@ You can retrieve the actions as follows:
 ```java
 val froniusInverterActions = getActions("fronius", "fronius:powerinverter:mybridge:myinverter")
 ```
+
 :::
 
 ::: tab JS
@@ -208,7 +209,7 @@ demo.things:
 Bridge fronius:bridge:mybridge [hostname="192.168.66.148", refreshInterval=5] {
     Thing powerinverter myinverter [deviceId=1]
     Thing meter mymeter [deviceId=0]
-    Thing ohmpilot myohmpilot [deviceId=0]    
+    Thing ohmpilot myohmpilot [deviceId=0]
 }
 ```
 
index f3f3653946b679695461d8da61c516cd28ef5da4..0b915badcdf274179eebcb8d2a2e7daa605fe7b8 100644 (file)
@@ -91,7 +91,7 @@ Thing ftpupload:imagereceiver:images2 [ userName="test2", password="12345" ] {
         Trigger String : my_image_trigger2 [
             filename="test.jpg"
         ]
-}    
+}
 ```
 
 Items:
@@ -106,14 +106,14 @@ Rules:
 ```java
 rule "example trigger rule 1"
 when
-    Channel 'ftpupload:imagereceiver:images1:image-received' triggered IMAGE_RECEIVED 
+    Channel 'ftpupload:imagereceiver:images1:image-received' triggered IMAGE_RECEIVED
 then
     logInfo("Test","Image received")
 end
 
 rule "example trigger rule 2"
 when
-    Channel 'ftpupload:imagereceiver:images2:my_image_trigger1' triggered IMAGE_RECEIVED 
+    Channel 'ftpupload:imagereceiver:images2:my_image_trigger1' triggered IMAGE_RECEIVED
 then
     logInfo("Test","Image received")
 end
@@ -150,7 +150,7 @@ Rules:
 ```java
 rule "example trigger rule"
 when
-    Channel 'ftpupload:imagereceiver:garagecamera:image-received' triggered IMAGE_RECEIVED 
+    Channel 'ftpupload:imagereceiver:garagecamera:image-received' triggered IMAGE_RECEIVED
 then
     logInfo("Test","Garage motion detected")
 end
index 42479fbe27ab259a59af3ca8add937694f7a7b55..e70cc7bb93b8d3080b9195817d9c2e67ae6bd712 100644 (file)
@@ -168,7 +168,7 @@ Thing gce:ipx800v3:ipx "IPX800" @ "diningroom" [hostname="192.168.0.144", portNu
             debouncePeriod=2500
         ]
         Type relay : relay#8 [       // Actionneur porte de garage
-            pulse=true    
+            pulse=true
         ]
 }
 ```
@@ -181,7 +181,7 @@ Group gIPXInputs "Inputs" <input>
 Contact input1 "Porte garage ouverte [%s]" <contact> (gIPXInputs) {channel="gce:ipx800v3:ipx:contact#1"}
 Contact input2 "Porte garage fermĂ©e [%s]"  <contact> (gIPXInputs) {channel="gce:ipx800v3:ipx:contact#2"}
 
-Group gIPXOutputs "Outputs" <output>          
+Group gIPXOutputs "Outputs" <output>
 Switch output3 "Chaudière" <furnace> (gIPXOutputs) {channel="gce:ipx800v3:ipx:relay#3"}
 Switch output4 "Lumière Porche" <light> (gIPXOutputs) {channel="gce:ipx800v3:ipx:relay#4"}
 
index a450b3987d1f686ee7870ef370d2eb738e4bc24e..f6896902585d0cef46278674ca46fe19d0405ebf 100644 (file)
@@ -12,13 +12,13 @@ ThingTypeUID: `account`
 
 ### Generator
 
-A Generator thing represents an individual generator linked to an account bridge. Multiple generators are supported.  
+A Generator thing represents an individual generator linked to an account bridge. Multiple generators are supported.
 
 ThingTypeUID: `generator`
 
 ## Discovery
 
-The MobileLink account bridge must be added manually. Once added, generator things will automatically be added to the inbox.  
+The MobileLink account bridge must be added manually. Once added, generator things will automatically be added to the inbox.
 
 ## Thing Configuration
 
index 8a0d304fd932a04698283839f1cefae10c6f6614..149f7d19f72cc5173f3a91ccfcd8774299cdd852 100644 (file)
@@ -366,7 +366,7 @@ then
         Thread.sleep(750)
         ContactClosure1.sendCommand(OFF)
         isRunning = false
-    }      
+    }
 end
 ```
 
index c936f2ead6cbfc1e3e178a5031db28f65f54c7af..71abd5d531c6edf90034d30226d6d659bcc91ee2 100644 (file)
@@ -156,7 +156,7 @@ then
                 GoEChargerMaxCurrent.sendCommand(maxAmp3Phases.intValue)
                 // logInfo("eCharger", "Set charging limit 3 Phases: " + maxAmp3Phases.intValue + " A")
             }
-        } else {         
+        } else {
             if (maxAmp1Phase.intValue >= 6 ) {
                 // set force state to neutral (Neutral=0, Off=1, On=2)
                 if (GoEChargerForceState.state != 0) {
index 729820460c1359055702fece085c726658f68d4b..459f17aa5f333c07f5536942be2f8e4b0d82c899 100644 (file)
@@ -111,7 +111,7 @@ arp -a | grep "MAC_ADDRESS"
 | Name            | Type    | Description                           | Default | Required | Advanced |
 |-----------------|---------|---------------------------------------|---------|----------|----------|
 | hostname        | text    | Hostname or IP address of the device  | N/A     | yes      | no       |
-| macAddress      | text    | MAC address of the device             | N/A     | yes      | no       |   
+| macAddress      | text    | MAC address of the device             | N/A     | yes      | no       |
 | refreshInterval | integer | Interval the device is polled in sec. | 5       | no       | yes      |
 
 ## Channels
index 51e88383af2e0b98a06592c99d16d30700465a68..48c4af5e74575c41bb6de1448134d43e695a25ca 100644 (file)
@@ -17,7 +17,7 @@ On a raspberry (or a compatible device) you have to install pigpiod.
 
 ```shell
 sudo apt-get install pigpiod
-sudo raspi-config 
+sudo raspi-config
 ```
 
 -> Interfacing Options --> Remote GPIO --> YES --> OK --> Finish
@@ -42,7 +42,7 @@ sudo systemctl daemon-reload
 Now that Remote GPIO is enabled, get the pigpiod daemon going (even if installed with apt-get):
 
 ```shell
-sudo systemctl enable pigpiod 
+sudo systemctl enable pigpiod
 sudo systemctl start pigpiod
 ```
 
@@ -86,7 +86,7 @@ Input Channel Disconnect Connect Action determines what happens when the binding
 Input Channel Reconnect Action determines what happens when the binding reconnects to pigpiod
 after a disconnect. This action does not occur on the initial binding connect to pigpiod.
 startup.
-  
+
 - **Do Nothing:** The default, do nothing. Input channels will retain their current value.
 - **Refresh Channel:** Issues a refresh command on the input channels. This will refresh the channels from
                     pigpiod causing the gpio pin state to reflect on the channel state.
@@ -95,7 +95,7 @@ startup.
 
 Output Channel Connect Action determines what happens when the binding initially connects to pigpiod.
 This action only occurs once after binding startup.
-  
+
 - **Do Nothing:** The default, do nothing. Output channels will retain their default value (UNDEF).
 - **All On:** Issues a ON command to all configured output channels.
 - **All Off:** Issues a OFF command to all configured output channels.
@@ -107,7 +107,7 @@ This action only occurs once after binding startup.
 ### Output Channel Disconnect Connect Action
 
 Output Channel Disconnect Connect Action determines what happens when the binding disconnects from pigpiod.
-  
+
 - **Do Nothing:** he default, do nothing. Input channels will retain their current value.
 - **Set Undef:** Sets the output channel states to UNDEF to indicate that pigpiod has disconnected.
 
@@ -115,7 +115,7 @@ Output Channel Disconnect Connect Action determines what happens when the bindin
 
 Output Channel Reconnect Action determines what happens when the binding reconnects to pigpiod
 after a disconnect. This action does not occur on the initial binding connect to pigpiod.
-  
+
 - **Do Nothing:** The default, do nothing. Output channels will retain their current value.
 - **Refresh Channel:** Issues a refresh command on the output channels. This will refresh the channels from
                     pigpiod causing the gpio pin state to reflect on the channel state. NOTE: This does
@@ -231,7 +231,7 @@ Thing gpio:pigpio-remote:mypi "MyPi GPIO" [ host="192.168.1.5", port=8888,
                 Type pigpio-digital-input  : GPI6  [ gpioId=6, debouncingTime=50,pullupdown="UP",invert=true ]
                 Type pigpio-digital-input  : GPI13 [ gpioId=13,debouncingTime=50,pullupdown="DOWN",invert=false ]
                 Type pigpio-digital-input  : GPI26 [ gpioId=26,debouncingTime=50,pullupdown="OFF",invert=false ]
-    } 
+    }
 ```
 
 demo.items:
index 589198b295eb099409cd3022cb9204bf13de8146..aa000c7365bcbeb979bea04889feaa189c50e98c 100644 (file)
@@ -139,9 +139,9 @@ Switch   GreeAirConditioner_Light   "Light"               {channel="gree:aircond
 rule "Mode changed"
 when
         Item GreeAirConditioner_Mode changed
-then        
+then
         if(GreeAirConditioner_Mode.state == "cool" ) {
             logInfo("A/C", "Cooling has be turned on")
-        } 
+        }
 end
 ```
index bde7c935c7fb8973c51d3f0ed316a7f037544475..aed8cc992bd895886dab029eb3d4edad4de738c8 100644 (file)
@@ -6,7 +6,7 @@ The Viessmann GridBox is a variety of the [gridX Gateway](https://de.gridx.ai/ed
 The measured data (energy production, consumptions, etc.) cannot be accessed locally. However, thanks to the pioneer work in the [unl0ck/viessmann-gridbox-connector](https://github.com/unl0ck/viessmann-gridbox-connector) repository, we can retrieve the data from the gridX cloud service using Rest-API calls.
 The API is documented [here](https://developer.gridx.ai/reference/).
 
-This binding polls the "live data" API endpoint to gather the available data from the GridBox. 
+This binding polls the "live data" API endpoint to gather the available data from the GridBox.
 It creates a GridBox thing with the channels representing the data points of the live data API call.
 
 For connection to the cloud service, account E-Mail and password used to connect to the [GridBox web service](https://mygridbox.viessmann.com/login) are required.
@@ -16,16 +16,16 @@ At the moment, only one API-"system" per account is supported by this binding.
 A "system" is the representation of a GridBox together with its connected appliances (PV inverter, heat pump etc.).
 The binding will use the first system ID retrieved by a call to the https://api.gridx.de/systems API.
 
-Also, only the live data API endpoint is supported by the binding as it is the most interesting for openHAB use cases. 
+Also, only the live data API endpoint is supported by the binding as it is the most interesting for openHAB use cases.
 There is another API endpoint for fetching aggregated measurement data which could be added in the future.
 Only the Viessmann GridBox variant is supported, other variants would need adaptions to the OAuth mechanism.
 
-This binding is not endorsed or supported by Viessmann or gridX. 
+This binding is not endorsed or supported by Viessmann or gridX.
 Arbitrary breaking changes to the API can happen at any time, resulting in this binding failing to retrieve the data.
 
 ## Supported Things
 
-The following thing can be created with the binding: 
+The following thing can be created with the binding:
 
 - `gridbox`: A thing representing the GridBox, tied to an account of the Viessmann GridBox.
 
@@ -73,16 +73,16 @@ The following channels are supplied by the GridBox thing (descriptions taken fro
 | self-sufficiency-rate         | Number    | R           | Ratio of produced energy vs total consumed energy (0.0-1.0).                                                                                                        |
 | self-supply                   | Number    | R           | Power/energy consumed through storage and production.                                                                                                               |
 | total-consumption             | Number    | R           | Adjusted power/energy of the system including heatpumps and EV charging stations.                                                                                   |
-                                                                                                                                                                                                                             
-## Full Example                                                                                                                                                                                                              
-                                                                                                                                                                                                                             
-### Thing Configuration                                                                                                                                                                                                      
-                                                                                                                                                                                                                             
-```java                                                                                                                                                                                                                      
-Thing gridbox:gridbox:901b4766e2 "GridBox" [email="abc@example.com",password="mypassword",refreshInterval=120]                                                                                                               
-```                                                                                                                                                                                                                          
-                                                                                                                                                                                                                             
-### Item Configuration                                                                                                                                                                                                       
+
+## Full Example
+
+### Thing Configuration
+
+```java
+Thing gridbox:gridbox:901b4766e2 "GridBox" [email="abc@example.com",password="mypassword",refreshInterval=120]
+```
+
+### Item Configuration
 
 ```java
 Number GridBox_PhotovoltaicProduction "PV Production [%.0f W]" {channel="gridbox:gridbox:901b4766e2:photovoltaicProduction"}
index 9a9e6407a2d4d92a41959673b35d58eb827d20e1..86fd378d8715dbd7fd459191d2ac551f6aec5610 100644 (file)
@@ -147,7 +147,7 @@ Where the first parameter must always be `growatt` and the second must be the fu
 Once the action instance has been retrieved, you can invoke the following method:
 
 ```php
-growattActions.setupBatteryProgram(int programMode, @Nullable Integer powerLevel, @Nullable Integer stopSOC, @Nullable Boolean enableAcCharging, @Nullable String startTime, @Nullable String stopTime, @Nullable Boolean enableProgram) 
+growattActions.setupBatteryProgram(int programMode, @Nullable Integer powerLevel, @Nullable Integer stopSOC, @Nullable Boolean enableAcCharging, @Nullable String startTime, @Nullable String stopTime, @Nullable Boolean enableProgram)
 ```
 
 The meaning of the method parameters is as follows:
@@ -283,7 +283,7 @@ then
     var pauseStartDateTime = (pauseStartState as DateTimeType).getZonedDateTime()
     if (pauseStartDateTime.getHour() < 8) {
         logWarn("Rules", "Power Pause program shall not start before 08:00h => " + pauseStartDateTime)
-        return 
+        return
     }
 
     val programDuration = Duration.between(now, pauseStartDateTime)
index 2508d59ae300a61074898ca57f85da806a5b1a6e..5bf0787d1258dfc1aac740952feb234a7ec8b2a6 100644 (file)
@@ -167,10 +167,10 @@ Hayward OmniLogic Connection Parameters:
 | heaterEnable          | Switch             | Heater enable           |      R     |
 | heaterCurrentSetpoint | Number:Temperature | Heater Current Setpoint |     R/W    |
 
-**Item Types Number:Dimensionless should have the units (i.e. %, ppm) defined in the Unit metadata 
+**Item Types Number:Dimensionless should have the units (i.e. %, ppm) defined in the Unit metadata
 
 ## Full Example
 
 After installing the binding, you will need to manually add the Hayward Connection thing and enter your credentials.
-All pool items can be automatically discovered by scanning the bridge.  
+All pool items can be automatically discovered by scanning the bridge.
 Goto the inbox and add the things.
index 08d6dd0e94b6e674a4884d21bab6d248864cf3db..e5b9650665e75ab4189eeb99ea870d34d763f6df 100644 (file)
@@ -9,7 +9,7 @@ A single supported thing called `collection`.
 
 ## Thing Configuration
 
-The thing supports one setting labelled `address` which is your street number and name as it appears on Google.  
+The thing supports one setting labelled `address` which is your street number and name as it appears on Google.
 _For Example:
 1 Victoria Street_
 
index 7e87e865c381cb22587aedb0e4e40b8be3c4cdc6..750e9566a74cf3a9d98905774267b150bd2cec02 100644 (file)
@@ -73,7 +73,7 @@ demo.rules:
 ```java
 rule SomeRule
 when
-    Channel "helios:ipvario221:gate:keypressed" triggered 
+    Channel "helios:ipvario221:gate:keypressed" triggered
 then
     var actionName = receivedEvent.getEvent()
     logInfo("org.openhab","Rule trigger " + actionName)
index d581e7872a9733597b94d7338e20b7f92ad13afd..6645929e20642cc4b5acd1dcb0eb4807abf7d5a9 100644 (file)
@@ -98,22 +98,22 @@ After the bridge has been added and authorized, devices are discovered automatic
 #### 2. Create Home Connect developer account
 
 1. Create an account at [https://developer.home-connect.com](https://developer.home-connect.com) and login.
-1. Please make sure you've added your associated Home Connect account email at <https://developer.home-connect.com/user/me/edit>. You should fill in your email address, which you use for the official Android or iOS app, at `Default Home Connect User Account for Testing`.  
+1. Please make sure you've added your associated Home Connect account email at <https://developer.home-connect.com/user/me/edit>. You should fill in your email address, which you use for the official Android or iOS app, at `Default Home Connect User Account for Testing`.
 ![Screenshot Home Connect profile page](doc/home_connect_profile.png "Screenshot Home Connect profile page")
 1. Register / Create an application at [https://developer.home-connect.com/applications](https://developer.home-connect.com/applications)
     - _Application ID_: e.g. `openhab-binding`
     - _OAuth Flow_: Authorization Code Grant Flow
-    - _Home Connect User Account for Testing_: the associated user account email from [Home Connect](https://www.home-connect.com/)  
-       > **WARNING**: Please don't use your developer account username  
+    - _Home Connect User Account for Testing_: the associated user account email from [Home Connect](https://www.home-connect.com/)
+       > **WARNING**: Please don't use your developer account username
 
-    - _Redirect URIs_: add your openHAB URL followed by `/homeconnect`  
+    - _Redirect URIs_: add your openHAB URL followed by `/homeconnect`
     for example: `http://192.168.178.34:8080/homeconnect` or `https://myhome.domain.com/homeconnect`
     - _One Time Token Mode_: keep unchecked
     - _Proof Key for Code Exchange_: keep unchecked
-      
+
        > **NOTE**: You might get an error (`403 - Forbidden`) in case you entered a bare IP of your local openHAB instance. In that case, use your instance's hostname instead (e.g. for openhabian `http://openhabian:8080/homeconnect`) and try again.
-    
-1. After your application has been created, you should see the _Client ID_ and _Client Secret_ of the application. Please save these for later.  
+
+1. After your application has been created, you should see the _Client ID_ and _Client Secret_ of the application. Please save these for later.
 
 ![Screenshot Home Connect application page](doc/home_connect_application.png "Screenshot Home Connect application page")
 
@@ -129,11 +129,11 @@ The Home Connect bridge can be configured in the openHAB UI as follows:
     - **client secret:** your application client secret
     - **simulator:** false
 1. Now navigate to the URL (`Redirct URI`) you've added to your Home Connect application in the previous step (2.3). For example `http://192.168.178.80:8080/homeconnect`.
-1. Please follow the steps shown to authenticate your binding. You can redo this step every time. For example if you have authentication problems, just start wizard again.  
-![Screenshot Home Connect wizard page 1](doc/homeconnect_setup_1.png "Screenshot Home Connect wizard page 1")  
-![Screenshot Home Connect wizard page 2](doc/homeconnect_setup_2.png "Screenshot Home Connect wizard page 2")  
-![Screenshot Home Connect wizard page 3](doc/homeconnect_setup_3.png "Screenshot Home Connect wizard page 3")  
-![Screenshot Home Connect wizard page 4](doc/homeconnect_setup_4.png "Screenshot Home Connect wizard page 4")  
+1. Please follow the steps shown to authenticate your binding. You can redo this step every time. For example if you have authentication problems, just start wizard again.
+![Screenshot Home Connect wizard page 1](doc/homeconnect_setup_1.png "Screenshot Home Connect wizard page 1")
+![Screenshot Home Connect wizard page 2](doc/homeconnect_setup_2.png "Screenshot Home Connect wizard page 2")
+![Screenshot Home Connect wizard page 3](doc/homeconnect_setup_3.png "Screenshot Home Connect wizard page 3")
+![Screenshot Home Connect wizard page 4](doc/homeconnect_setup_4.png "Screenshot Home Connect wizard page 4")
 1. That's it! Now you can use autodiscovery to add devices. Your devices should show up if you start a device scan in the openHAB UI.
 
 ## Examples: File based configuration
@@ -327,7 +327,7 @@ The channel of type `remote_start_allowance_state` is read only. You can only en
 
 ### In case of error...
 
-Please check log UI (http(s)://[YOUROPENHAB]:[YOURPORT]/homeconnect) and ask for help in the community forum or on github. Please provide request and event exports.  
+Please check log UI (http(s)://[YOUROPENHAB]:[YOURPORT]/homeconnect) and ask for help in the community forum or on github. Please provide request and event exports.
  ![Screenshot Home Connect wizard page 4](doc/export_button.png "Export button")
 
 ### Rate limit reached
index 2b13cfb6208a0c52b0de62905875a2063950e020..452a4f0c966a735b769ce648b682e7aebb5b99ac 100644 (file)
@@ -181,7 +181,7 @@ For a CCU2, the value may need to be increased to 180s.
 Time in seconds that the controller will be in install mode when a device discovery is initiated (default = 60)
 
 - **unpairOnDeletion**
-If set to true, devices are automatically unpaired from the gateway when their corresponding things are deleted.  
+If set to true, devices are automatically unpaired from the gateway when their corresponding things are deleted.
 **Warning:** The option "factoryResetOnDeletion" also unpairs a device, so in order to avoid unpairing on deletion completely, both options need to be set to false! (default = false)
 
 - **factoryResetOnDeletion**
@@ -192,7 +192,7 @@ Due to the factory reset, the device will also be unpaired from the gateway, eve
   If a large number of devices are connected to the gateway, the default buffersize of 2048 kB may be too small for communication with the gateway.
   In this case, e.g. the discovery fails.
   With this setting the buffer size can be adjusted. The value is specified in kB.
-  
+
 - **useAuthentication**
 Username and password are send to the gateway to authenticate the access to the gateway.
 
@@ -212,7 +212,7 @@ homematic:bridge:NAME
 - **bridge** the type, fixed
 - **name** the name of the bridge
 
-### Example
+### Bridge Configuration Example
 
 #### Minimum configuration
 
@@ -448,7 +448,7 @@ Adds multiple virtual datapoints to the HM-Dis-WM55 and HM-Dis-EP-WM55 devices t
 
 **Note:** The HM-Dis-EP-WM55 has only a black and white display and therefore does not support datapoints for colored lines. In addition, only lines 1-3 can be set.
 
-#### Example
+#### Button Example
 
 Display text at line 1,3 and 5 when the bottom button on the display is pressed
 
@@ -734,6 +734,7 @@ The problem can be solved by increasing the `bufferSize` value in the bridge con
 
 openHAB and the CCU are using different values for the same state of a rollershutter.
 Examples: HmIP-BROLL, HmIP-FROLL, HmIP-BBL, HmIP-FBL and HmIP-DRBLI4
+
 |         | Open | Closed |
 | ------- | ---- | ------ |
 | openHAB | 0%   | 100%   |
index 2518a50b31111a95c16876c44dedea7cb8cf18c1..ba70f4fc0e08f1ed417e4e12428edfe2f32561b1 100644 (file)
@@ -112,7 +112,7 @@ Black Ink displayed as a whole percentage - `60 %`
 Text item=hpprinter_printer_djprinter_ink_blackLevel label="Black [%.0f %unit%]"
 ```
 
-Black Marker displayed in millilitres - `21 ml`  
+Black Marker displayed in millilitres - `21 ml`
 _Default_
 
 ```perl
index 4335bf503c4e71cb93a877db38752044e721c324..47b323b215dd55222cd73dbb19438694a988ef51 100644 (file)
@@ -15,7 +15,7 @@ Both bridges are fully supported by this binding.
 
 Almost all available Hue devices are supported by this binding.
 This includes not only the "Friends of Hue", but also products like the LivingWhites adapter.
-Additionally, it is possible to use OSRAM Lightify devices as well as other Zigbee Light Link compatible products, including the IKEA TRĂ…DFRI lights (when updated). 
+Additionally, it is possible to use OSRAM Lightify devices as well as other Zigbee Light Link compatible products, including the IKEA TRĂ…DFRI lights (when updated).
 Beside bulbs and luminaires the Hue binding also supports some Zigbee sensors.
 Currently only Hue specific sensors are tested successfully (Hue Motion Sensor and Hue Dimmer Switch).
 Please note that the devices need to be registered with the Hue Bridge before it is possible for this binding to use them.
index 64f6d8388eb7f4b38a0d3163844af1c32d172737..ad09b867cf61a850be0eb40c486fb36de1ed8a5a 100644 (file)
@@ -17,7 +17,7 @@ An account must be manually added and configured.
 Controller Things are automatically discovered once an [Account Bridge](#account-bridge-thing) has be properly configured.
 
 The Controller Thing type is the primary way most users will control and monitor their irrigation system.
-This allows full control over zones, sensors and weather forecasts.  
+This allows full control over zones, sensors and weather forecasts.
 Changes made through this Thing type will be reflected in the Hydrawise mobile and web applications as well as in their reporting modules.
 
 Controller Things require a parent [Account Bridge](#account-bridge-thing)
@@ -34,15 +34,15 @@ Controller Things require a parent [Account Bridge](#account-bridge-thing)
 
 ### Local Thing
 
-The Local Thing type uses an undocumented API that allows direct HTTP access to an irrigation controller on the user's network.  
-This provides a subset of features compared to the Cloud Thing type limited to basic zone control.  
+The Local Thing type uses an undocumented API that allows direct HTTP access to an irrigation controller on the user's network.
+This provides a subset of features compared to the Cloud Thing type limited to basic zone control.
 Controlling zones through the local API will not be reported back to the cloud service or the Hydrawise mobile/web applications, and reporting functionality will not reflect the locally controlled state.
 
 Local control may not be available on later Hydrawise controller firmware versions.
 
 Use Cases
 
-- The Local thing can be useful when testing zones, as there is no delay when starting/stopping zones as compared to the cloud API which can take anywhere between 5-15 seconds.  
+- The Local thing can be useful when testing zones, as there is no delay when starting/stopping zones as compared to the cloud API which can take anywhere between 5-15 seconds.
 - This is also useful if you wish to not use the cloud scheduling  at all and use openHAB as the irrigation scheduling system.
 
 #### Local Thing Supported Channel Groups
index 343a1f06d84197d1b48c2b6b2f46bdb3d3a8c102..064ab288f4915415cbf60ae5836f55d2fe345ea6 100644 (file)
@@ -155,7 +155,7 @@ sitemap demo label="Main Menu" {
     'X-Mas'='X-Mas'
   ]
   Switch item=Clear mappings=[50="Clear"]
-  
+
   // only serverNG
   Switch item=HyperionEnabled
   Switch item=BlackBorderEnabled
index 1a61becc9faea92dd01b8e9b9a309b2382ffe97b..58fcf4b6ed3a8171d3964b89d6603b1f4cecf6a7 100644 (file)
@@ -154,7 +154,7 @@ ihc:controller:elko [ hostname="192.168.1.2", username="openhab", password="secr
         Type number                : my_test_number  "My Test Number"          [ resourceId=3988827, direction="ReadOnly" ]
         Type rf-device-low-battery : my_low_battery  "My Low Battery Warning"  [ serialNumber=123456789 ]
         Type push-button-trigger   : my_test_trigger "My Test Trigger"         [ resourceId=3988827, longPressTime=1000 ]
-        
+
         Type dimmer                : inc_resource        "Increase resource"   [ resourceId=9000001, direction="WriteOnly", commandToReact="INCREASE", pulseWidth=300 ]
         Type dimmer                : dec_resource        "Decrease resource"   [ resourceId=9000002, direction="WriteOnly", commandToReact="DECREASE", pulseWidth=300 ]
 
@@ -185,14 +185,14 @@ Dimmer dimmer { channel="ihc:controller:elko:my_test_trigger"[profile="ihc:pushb
 ```java
 rule "My test trigger test rule"
 when
-    Channel 'ihc:controller:elko:my_test_trigger' triggered LONG_PRESS 
+    Channel 'ihc:controller:elko:my_test_trigger' triggered LONG_PRESS
 then
     logInfo("Test","Long press detected")
 end
 
 rule "My test trigger test rule 2"
 when
-    Channel 'ihc:controller:elko:my_test_trigger' triggered 
+    Channel 'ihc:controller:elko:my_test_trigger' triggered
 then
     val String e = receivedEvent.toString.split(' ').get(2).toString
     switch e {
index b2dc77e338aa3c2e534ed8121be1f2fc2689431b..869ff6f87a4048a47937dfa04ad6c23b69381a34 100644 (file)
@@ -521,7 +521,7 @@ For safety reasons, only close the garage door if you have visual contact to mak
 
 > NOTE: If the I/O Linc contact status appears delayed, or returns the wrong value when the sensor changes states, the contact was likely ON (status LED lit) when the modem was linked as a responder.
 Examples of this behavior would include: The status remaining CLOSED for up to 3 minutes after the door is opened, or the status remains OPEN for up to three minutes after the garage is opened and immediately closed again.
-To resolve this behavior the I/O Linc will need to be unlinked and then re-linked to the modem with the contact OFF (stats LED off). 
+To resolve this behavior the I/O Linc will need to be unlinked and then re-linked to the modem with the contact OFF (stats LED off).
 That would be with the door open when using the Insteon garage kit.
 
 ### Keypads
index 648987bc71e567855048540fad5dae91fbc80358..f8648ec8455eec399aae850ed1ba974c8148001e 100644 (file)
@@ -91,12 +91,12 @@ sitemap intesishome label="My AC control" {
           Switch item=acVanesUpDown    icon="movecontrol"      mappings=[AUTO="Stop", 1="1", 2="2", 3="3", 4="4", 5="5", SWING="Swing"]
           Switch item=acVanesLeftRight icon="movecontrol"      mappings=[AUTO="Stop", 1="1", 2="2", 3="3", 4="4", 5="5", SWING="Swing"]
           Setpoint item=acSetPoint     icon="temperature"      minValue=16 maxValue=28 step=1
-          Text item=acAmbientTemp      icon="temperature" 
+          Text item=acAmbientTemp      icon="temperature"
           Text item=acOutdoorTemp      icon="temperature"
           Text item=acErrorStatus
           Text item=acErrorCode
           Text item=acWifiSignal       icon="qualityofservice"
-           
+
     }
 }
 ```
index 3f1dace0b386912798822bf1da9309640fe62f80..386f0bd37c8a21d37bd496f296dd6c63ccd5a95a 100644 (file)
@@ -12,7 +12,7 @@ The IoTaWatt binding supports one Thing called `iotawatt`.
 
 ## Discovery
 
-The binding does not auto-discover the IoTaWatt device.  
+The binding does not auto-discover the IoTaWatt device.
 
 ## Thing Configuration
 
index d81d65590c6b51cb39944b33506876a18a4fcc58..5882b31c1a47d372bf23b244d2c62c4d1ad6c5fc 100644 (file)
@@ -286,7 +286,7 @@ To move a camera with this binding you need an ONVIF camera that supports one of
 
 - Absolute movements
 - Relative movements
-- Continuous movements  
+- Continuous movements
 - Presets
 
 To test your cameras compatibility and also to create some preset locations, use a free program called `ONVIF Device Manager` (ODM for short).
@@ -587,7 +587,7 @@ Webview url="http://192.168.6.4:8080/static/html/file.html" height=5
             <video playsinline autoplay muted controls style="width: 100%; " src="http://openHAB:8080/ipcamera/{cameraUID}/ipcamera.m3u8" />
         </div>
     </body>
-</html> 
+</html>
 
 ```
 
@@ -718,13 +718,13 @@ If you use the `Create Equipment from Thing` feature to auto create your items,
 ```java
 
     Text label="BabyMonitor" icon="camera"{
-        Switch item=BabyCam_GoToPreset icon=movecontrol label="Camera Direction" mappings=[1="Room", 2="Chair", 3="Cot"]            
-        Text label="Advanced Controls" icon="settings"{ 
+        Switch item=BabyCam_GoToPreset icon=movecontrol label="Camera Direction" mappings=[1="Room", 2="Chair", 3="Cot"]
+        Text label="Advanced Controls" icon="settings"{
             Default item=BabyCam_AutoLED
             Default item=BabyCam_AudioAlarmThreshold icon=recorder
             Switch item=BabyCam_AudioAlarm
             Default item=BabyCam_EnableMotionAlarm
-            Default item=BabyCam_MotionAlarm                                
+            Default item=BabyCam_MotionAlarm
             Slider item=BabyCam_Pan icon=movecontrol
             Slider item=BabyCam_Tilt icon=movecontrol
             Slider item=BabyCam_Zoom icon=zoom
@@ -732,7 +732,7 @@ If you use the `Create Equipment from Thing` feature to auto create your items,
         Default item=BabyCam_StartHLSStream
         Text label="Mjpeg Stream" icon="camera"{Video url="http://openHAB:8080/ipcamera/BabyCam/ipcamera.mjpeg" encoding="mjpeg"}
         Text label="HLS Stream" icon="camera"{Webview url="http://openHAB:8080/ipcamera/BabyCam/ipcamera.m3u8" height=15}
-        Video url="http://openHAB:8080/ipcamera/BabyCam/autofps.mjpeg" encoding="mjpeg"            
-    }  
+        Video url="http://openHAB:8080/ipcamera/BabyCam/autofps.mjpeg" encoding="mjpeg"
+    }
 
 ```
index b0d1e47ef343a25ca8300baefbda19e2a3b3980d..21bc90d6551e93953f012a25a3fa9adea1d2916d 100644 (file)
@@ -91,7 +91,7 @@ demo.rules:
 ```java
 rule "Kitchen switch IR rule"
 when
-    Item KitchenIRReceiverTelenetPower received update 
+    Item KitchenIRReceiverTelenetPower received update
 then
     createTimer(now.plusSeconds(5)) [|
         KitchenIRBlasterSamsung.sendCommand("samsung,power")
index a6d1865a8ea4f36ebb2db7a60f0f88504e0048dc..1d6eb60393b916c66345a2017b785fc58a0032a9 100644 (file)
@@ -81,27 +81,27 @@ Thing ism8:device:heater "Wolf Heizung"         [portNumber=12004]
     {
         Type switch-r       : DpId001 "Störung Heizgerät"            [id=1, type="1.001"]
         Type number-r       : DpId002 "Betriebsart"                  [id=2, type="20.105"]
-        Type percentage-r   : DpId003 "Brennerleistung"              [id=3, type="5.001"] 
-        Type temperature-r  : DpId004 "Kesseltemperatur"             [id=4, type="9.001"] 
-        Type temperature-r  : DpId006 "RĂĽcklauftemperatur"           [id=6, type="9.001"] 
-        Type temperature-r  : DpId007 "Warmwassertemperatur"         [id=7, type="9.001"] 
-        Type temperature-r  : DpId008 "AuĂźentemperatur"              [id=8, type="9.001"] 
-        Type switch-r       : DpId009 "Status Flamme"                [id=9, type="1.001"] 
-        Type temperature-r  : DpId013 "Anlagendruck"                 [id=13, type="9.006"] 
-        Type switch-r       : DpId053 "Störung Systemmodul"          [id=53, type="1.001"] 
-        Type temperature-r  : DpId054 "AuĂźentemperatur Systemmodul"  [id=54, type="9.001"] 
-        Type temperature-rw : DpId056 "Sollwert Warmwasser"          [id=56, type="9.001"] 
-        Type mode-rw        : DpId057 "Betriebsart Heizkreis"        [id=57, type="20.102"] 
-        Type mode-rw        : DpId058 "Betriebsart Warmwasser"       [id=58, type="20.103"] 
-        Type temperature-rw : DpId065 "Sollwertverschiebung"         [id=65, type="9.002"] 
-        Type switch-rw      : DpId148 "CML Störung"                  [id=148, type="1.001"] 
-        Type mode-rw        : DpId149 "CWL Betriebsart"              [id=149, type="20.102"] 
-        Type percentage-r   : DpId163 "CWL LĂĽftungsstufe"            [id=163, type="5.001"] 
-        Type temperature-r  : DpId164 "CWL Ablufttemperatur"         [id=164, type="9.001"] 
+        Type percentage-r   : DpId003 "Brennerleistung"              [id=3, type="5.001"]
+        Type temperature-r  : DpId004 "Kesseltemperatur"             [id=4, type="9.001"]
+        Type temperature-r  : DpId006 "RĂĽcklauftemperatur"           [id=6, type="9.001"]
+        Type temperature-r  : DpId007 "Warmwassertemperatur"         [id=7, type="9.001"]
+        Type temperature-r  : DpId008 "AuĂźentemperatur"              [id=8, type="9.001"]
+        Type switch-r       : DpId009 "Status Flamme"                [id=9, type="1.001"]
+        Type temperature-r  : DpId013 "Anlagendruck"                 [id=13, type="9.006"]
+        Type switch-r       : DpId053 "Störung Systemmodul"          [id=53, type="1.001"]
+        Type temperature-r  : DpId054 "AuĂźentemperatur Systemmodul"  [id=54, type="9.001"]
+        Type temperature-rw : DpId056 "Sollwert Warmwasser"          [id=56, type="9.001"]
+        Type mode-rw        : DpId057 "Betriebsart Heizkreis"        [id=57, type="20.102"]
+        Type mode-rw        : DpId058 "Betriebsart Warmwasser"       [id=58, type="20.103"]
+        Type temperature-rw : DpId065 "Sollwertverschiebung"         [id=65, type="9.002"]
+        Type switch-rw      : DpId148 "CML Störung"                  [id=148, type="1.001"]
+        Type mode-rw        : DpId149 "CWL Betriebsart"              [id=149, type="20.102"]
+        Type percentage-r   : DpId163 "CWL LĂĽftungsstufe"            [id=163, type="5.001"]
+        Type temperature-r  : DpId164 "CWL Ablufttemperatur"         [id=164, type="9.001"]
         Type temperature-r  : DpId165 "CWL Zulufttemperatur"         [id=165, type="9.001"]
         Type flowrate-r     : DpId166 "CWL Luftdurchsatz Zuluft"     [id=166, type="13.002"]
         Type flowrate-r     : DpId167 "CWL Luftdurchsatz Abluft"     [id=167, type="13.002"]
-        Type switch-r       : DpId192 "CML Filterwarnung"            [id=192, type="1.001"]    
+        Type switch-r       : DpId192 "CML Filterwarnung"            [id=192, type="1.001"]
     }
 ```
 
@@ -137,7 +137,7 @@ Switch ISM_LueftungFilterwarnung        "CML Filterwarnung"
 
 ```perl
 Frame label="Heizung"
-{    
+{
     Text item=ISM_HeizungSysStoerung                icon="siren"
     Text item=ISM_HeizungStoerung                   icon="siren"
     Text item=ISM_HeizungAussentemperatur           icon="temperature"
@@ -151,14 +151,14 @@ Frame label="Heizung"
     Setpoint item=ISM_HeizungSollwertverschiebung   icon="radiator"          minValue=-5 maxValue=5 step=1
 }
 Frame label="Wasser"
-{    
+{
     Text item=ISM_HeizungWarmwassertemperatur       icon="temperature_hot"
     Setpoint item=ISM_HeizungSollwertWarmwasser     icon="temperature"       minValue=40 maxValue=60 step=1
     Selection item=ISM_HeizungBetriebsartWarmwasser icon="faucet"            mappings=[0="Auto", 1="Legionellen Schutz", 2="Normal", 3="Eco", 4="Frost Schutz"]
 }
 Frame label="LĂĽftung"
-{    
-    Text item=ISM_LueftungStoerung                  icon="siren"        
+{
+    Text item=ISM_LueftungStoerung                  icon="siren"
     Selection item=ISM_LueftungBetriebsart          icon="fan"                mappings=[0="Auto", 1="Minimum", 2="Reduziert", 3="Normal", 4="Intensiv"]
     Text item=ISM_LueftungLueftungsstufe            icon="qualityofservice"
     Text item=ISM_LueftungFilterwarnung             icon="siren"
index 3e862230c40097924d30ad45f4e070fac0ed79c0..af3895845c63d895366337539cc777e390794a00 100644 (file)
@@ -104,8 +104,8 @@ Text item=HouseAlarm icon="alarm" {
 
 ```java
 rule "Alarm"
-when 
-  Item ArmSectionA changed or Item ArmSectionAB changed or Item ArmSectionABC changed or 
+when
+  Item ArmSectionA changed or Item ArmSectionAB changed or Item ArmSectionABC changed or
   System started
 then
    if( ArmSectionA.state == ON || ArmSectionAB.state == ON || ArmSectionABC.state == ON)
index 2849d66a26ddaaf3a3c17a06bbe1dfffa2b62bd8..b67fc42d4e41333ae86348fb415edff891805685 100644 (file)
@@ -10,15 +10,15 @@ See [Kaleidescape-System-Control-Protocol-Reference-Manual.pdf](https://support.
 ## Supported Things
 
 All movie player components including the original K-Player series, M Class Players, Cinema One, Alto, and Strato are supported.
-It is important to choose the correct thing type to ensure the available channels are correct for the component being used.  
+It is important to choose the correct thing type to ensure the available channels are correct for the component being used.
 
-The supported thing types are:  
-`player` Any KPlayer, M Class [M300, M500, M700] or Cinema One 1st Gen player  
-`cinemaone` Cinema One (2nd Gen)  
-`alto`  
-`strato` Includes Strato, Strato S, Strato C or Strato V  
+The supported thing types are:
+`player` Any KPlayer, M Class [M300, M500, M700] or Cinema One 1st Gen player
+`cinemaone` Cinema One (2nd Gen)
+`alto`
+`strato` Includes Strato, Strato S, Strato C or Strato V
 
-The binding supports either a TCP/IP connection or direct serial port connection (19200-8-N-1) to the Kaleidescape component.  
+The binding supports either a TCP/IP connection or direct serial port connection (19200-8-N-1) to the Kaleidescape component.
 
 ## Discovery
 
@@ -410,13 +410,13 @@ rule "Bring up Lights when movie is over"
 when
     Item z1_Ui_MovieLocation changed from "Main content" to "End Credits"
 then
-    // fade the lights up slowly while the credits are rolling 
+    // fade the lights up slowly while the credits are rolling
     lightPercent = 0
     while (lightPercent < 100) {
         lightPercent = lightPercent + 5
         logInfo("k rules", "lights at " + lightPercent.toString + " percent")
         // myLightItem.sendCommand(lightPercent)
-        Thread::sleep(5000) 
+        Thread::sleep(5000)
     }
 end
 
index 2bdef1ea07b2f4266a29b7da0a62d1d84118b4e3..bfb4c79b74a273be136bfa284d959a5c0532de6b 100644 (file)
@@ -61,11 +61,11 @@ demo.items:
 ```java
 Number:Dimensionless      KebaCurrentRange      "Maximum supply current [%.1f %%]"        {channel="keba:kecontact:1:maxpresetcurrentrange"}
 Number:ElectricCurrent    KebaCurrent           "Maximum supply current [%.3f A]"         {channel="keba:kecontact:1:maxpresetcurrent"}
-Number:ElectricCurrent    KebaSystemCurrent     "Maximum system supply current [%.3f A]"  {channel="keba:kecontact:1:maxsystemcurrent"} 
-Number:ElectricCurrent    KebaFailSafeCurrent   "Failsafe supply current [%.3f A]"        {channel="keba:kecontact:1:failsafecurrent"} 
+Number:ElectricCurrent    KebaSystemCurrent     "Maximum system supply current [%.3f A]"  {channel="keba:kecontact:1:maxsystemcurrent"}
+Number:ElectricCurrent    KebaFailSafeCurrent   "Failsafe supply current [%.3f A]"        {channel="keba:kecontact:1:failsafecurrent"}
 Number                    KebaState             "Operating State [%s]"                    {channel="keba:kecontact:1:state"}
 Switch                    KebaEnabledSystem     "Enabled (System)"                        {channel="keba:kecontact:1:enabledsystem"}
-Switch                    KebaEnabledUser       "Enabled (User)"                          {channel="keba:kecontact:1:enableduser"}  
+Switch                    KebaEnabledUser       "Enabled (User)"                          {channel="keba:kecontact:1:enableduser"}
 Switch                    KebaWallboxPlugged    "Plugged into wallbox"                    {channel="keba:kecontact:1:wallbox"}
 Switch                    KebaVehiclePlugged    "Plugged into vehicle"                    {channel="keba:kecontact:1:vehicle"}
 Switch                    KebaPlugLocked        "Plug locked"                             {channel="keba:kecontact:1:locked"}
index 238bd8e0671d15a07c239ce9f46998a5d43f0351..d1a2812ad2bc894e7e45f94f8e687b77de738c16 100644 (file)
@@ -163,7 +163,7 @@ A change would break all existing installations and is therefore not implemented
 | position         | Group address of the absolute position | 5.001       |
 | increaseDecrease | Group address for relative movement    | 3.007       |
 
-##### Channel Type `number`, `number-control` 
+##### Channel Type `number`, `number-control`
 
 | Parameter | Description   | Default DPT |
 |-----------|---------------|-------------|
@@ -411,7 +411,7 @@ Further DPTs and subtypes may be added later once implemented and released in th
 |||
 | 232.600         | HSBType (color)                                    | RGB                                  |
 | 232.60000       | HSBType (color)                                    | Non-Standard, DPT 232.600 with HSB instead of RGB data |
-||| 
+|||
 | 235.001         | QuantityType\<> (number) (Number:ActiveEnergy)     | Composed DPT 235.001, first element ActiveEnergy (Wh), read only  |
 | 235.61001       | DecimalType (number)                               | Non-Standard, composed DPT 235.001, second element Tariff (plain number), read only |
 |||
@@ -621,7 +621,7 @@ Bridge knx:serial:bridge [
     Thing device generic {
         Type switch-control        : controlSwitch        "Control Switch"        [ ga="3/3/10+<3/3/11" ]   // '<'  signs are allowed but will be ignored for control Channels
         Type dimmer-control        : controlDimmer        "Control Dimmer"        [ switch="3/3/50+3/3/48", position="3/3/46", increaseDecrease="3/3/49", frequency=300 ]
-        Type color                 : controlColorLight    "Color"                 [ hsb="6/0/10", switch="6/0/12", position="6/0/14", 
+        Type color                 : controlColorLight    "Color"                 [ hsb="6/0/10", switch="6/0/12", position="6/0/14",
         Type rollershutter-control : controlRollershutter "Control Rollershutter" [ upDown="3/4/1+3/4/2", stopMove="3/4/3", position="3/4/4" ]
         Type number-control        : controlNumber        "Control Number"        [ ga="1/2/2" ]
         Type string-control        : controlString        "Control String"        [ ga="1/4/2" ]
index 29e420b17c70ab307498a077ade037becb06246b..5269c286da993161696fa87a4c21c1926a774c7b 100644 (file)
@@ -61,7 +61,7 @@ This is commonly used with a piezo buzzer to make a "beep beep" sound when a doo
 It can also be used to blink lights.
 
 A note about the Alarm Panel Pro.
-Zones 1-8 can be configured for any Channel-Types.  
+Zones 1-8 can be configured for any Channel-Types.
 Zones 9-12, out1, alarm1 and out2/alarm2 can only be configured as an actuator.
 For more information, see: <https://help.konnected.io/support/solutions/articles/32000028978-alarm-panel-pro-inputs-and-outputs>
 
index 885b2ac09803e14d0488542f7f81c3fe27aec014..99cd4cec89e7c1448d992de3305df927eafb4355 100644 (file)
@@ -286,7 +286,7 @@ demo.items:
 ```java
 Number:Power                GridOutputPower             "Grid Output Power"                         <energy> { channel="kostalinverter:piko1020:mypiko1020:gridOutputPower" }
 Number:Energy               YieldDaySecondGen           "PV Output Power Day"                       <energy> { channel="kostalinverter:piko1020:mypiko1020:yieldDaySecondGen" }
-Number:Energy               YieldTotalSecondGen         "PV Output Power Total"                     <energy> { channel="kostalinverter:piko1020:mypiko1020:yieldTotalSecondgen" }  
+Number:Energy               YieldTotalSecondGen         "PV Output Power Total"                     <energy> { channel="kostalinverter:piko1020:mypiko1020:yieldTotalSecondgen" }
 Number:Dimensionless        OperatingStatus             "Operating Status"                          <energy> { channel="kostalinverter:piko1020:mypiko1020:operatingStatus" }
 Number:ElectricPotential    GridVoltageL1               "Grid Voltage L1"                           <energy> { channel="kostalinverter:piko1020:mypiko1020:gridVoltageL1" }
 Number:ElectricCurrent      GridCurrentL1               "Grid Current L1"                           <energy> { channel="kostalinverter:piko1020:mypiko1020:gridCurrentL1" }
@@ -315,12 +315,12 @@ Number:Power                PhaseSelHomeConsumpL2       "Phase Sel Home Consump
 Number:Power                PhaseSelHomeConsumpL3       "Phase Sel Home Consump L3"                 <energy> { channel="kostalinverter:piko1020:mypiko1020:phaseSelHomeConsumpL3" }
 Number:Frequency            GridFreq                    "Grid Freq"                                 <energy> { channel="kostalinverter:piko1020:mypiko1020:gridFreq" }
 Number:Angle                GridCosPhi                  "Grid Cos Phi"                              <energy> { channel="kostalinverter:piko1020:mypiko1020:gridCosPhi" }
-Number:Energy               HomeConsumptionDay          "Home Consumption Day"                      <energy> { channel="kostalinverter:piko1020:mypiko1020:homeConsumptionDay" } 
-Number:Energy               OwnConsumptionDay           "Own Consumption Day"                       <energy> { channel="kostalinverter:piko1020:mypiko1020:ownConsumptionDay" } 
-Number:Dimensionless        OwnConsRateDay              "Own Cons Rate Day"                         <energy> { channel="kostalinverter:piko1020:mypiko1020:ownConsRateDay" } 
+Number:Energy               HomeConsumptionDay          "Home Consumption Day"                      <energy> { channel="kostalinverter:piko1020:mypiko1020:homeConsumptionDay" }
+Number:Energy               OwnConsumptionDay           "Own Consumption Day"                       <energy> { channel="kostalinverter:piko1020:mypiko1020:ownConsumptionDay" }
+Number:Dimensionless        OwnConsRateDay              "Own Cons Rate Day"                         <energy> { channel="kostalinverter:piko1020:mypiko1020:ownConsRateDay" }
 Number:Dimensionless        AutonomyDegreeDay           "Autonomy Degree Day"                       <energy> { channel="kostalinverter:piko1020:mypiko1020:autonomyDegreeDay" }
-Number:Energy               HomeConsumptionTotal        "Home Consumption Total"                    <energy> { channel="kostalinverter:piko1020:mypiko1020:homeConsumptionTotal" } 
-Number:Energy               OwnConsumptionTotal         "Own Consumption Total"                     <energy> { channel="kostalinverter:piko1020:mypiko1020:ownConsumptionTotal" } 
+Number:Energy               HomeConsumptionTotal        "Home Consumption Total"                    <energy> { channel="kostalinverter:piko1020:mypiko1020:homeConsumptionTotal" }
+Number:Energy               OwnConsumptionTotal         "Own Consumption Total"                     <energy> { channel="kostalinverter:piko1020:mypiko1020:ownConsumptionTotal" }
 Number:Time                 OperatingTimeTotal          "Operating Time Total"                      <energy> { channel="kostalinverter:piko1020:mypiko1020:operatingTimeTotal" }
 Number:ElectricCurrent      Current                     "Current"                                   <energy> { channel="kostalinverter:piko1020:mypiko1020:current" }
 Number:Dimensionless        CurrentDir                  "Current Dir"                               <energy> { channel="kostalinverter:piko1020:mypiko1020:currentDir" }
@@ -328,8 +328,8 @@ Number:Dimensionless        ChargeCycles                "Charge Cycles"
 Number:Temperature          BatteryTemperature          "BatteryTemperature"                        <energy> { channel="kostalinverter:piko1020:mypiko1020:batteryTemperature" }
 Number:Time                 Loginterval                 "Log Interval"                              <energy> { channel="kostalinverter:piko1020:mypiko1020:loginterval" }
 Number:Dimensionless        S0InPulseCnt                "S0 InPulse Cnt"                            <energy> { channel="kostalinverter:piko1020:mypiko1020:s0InPulseCnt" }
-Number:Dimensionless        OwnConsRateTotal            "Own Cons Rate Total"                       <energy> { channel="kostalinverter:piko1020:mypiko1020:ownConsRateTotal" } 
-Number:Dimensionless        AutonomyDegreeTotal         "Autonomy Degree Total"                     <energy> { channel="kostalinverter:piko1020:mypiko1020:autonomyDegreeTotal" } 
+Number:Dimensionless        OwnConsRateTotal            "Own Cons Rate Total"                       <energy> { channel="kostalinverter:piko1020:mypiko1020:ownConsRateTotal" }
+Number:Dimensionless        AutonomyDegreeTotal         "Autonomy Degree Total"                     <energy> { channel="kostalinverter:piko1020:mypiko1020:autonomyDegreeTotal" }
 Number:ElectricPotential    BatteryVoltage              "Battery Voltage"                           <energy> { channel="kostalinverter:piko1020:mypiko1020:batteryVoltage" }
 Number:Dimensionless        BatStateOfCharge            "Bat State Of Charge"                       <energy> { channel="kostalinverter:piko1020:mypiko1020:batStateOfCharge" }
 Number:Power                SelfConsumption             "Self Consumption"                          <energy> { channel="kostalinverter:piko1020:mypiko1020:selfConsumption" }
@@ -337,7 +337,7 @@ Number:Dimensionless        BatteryUsageConsumption     "Battery Usage Consumpti
 Switch                      SmartBatteryControl         "Smart Battery Control"                     <energy> { channel="kostalinverter:piko1020:mypiko1020:smartBatteryControl" }
 Number:Dimensionless        MaxDepthOfDischarge         "Max Depth Of Discharge"                    <energy> { channel="kostalinverter:piko1020:mypiko1020:maxDepthOfDischarge" }
 Number:Dimensionless        ShadowManagement            "Shadow Management"                         <energy> { channel="kostalinverter:piko1020:mypiko1020:shadowManagement" }
-Number:Dimensionless        ExternalModuleControl       "External Module Control"                   <energy> { channel="kostalinverter:piko1020:mypiko1020:externalModuleControl" }           
+Number:Dimensionless        ExternalModuleControl       "External Module Control"                   <energy> { channel="kostalinverter:piko1020:mypiko1020:externalModuleControl" }
 
 
 ```
index 4fe8fb4434dac62567ebd746abf7e8405160bf6f..253b676808801d1d6639ea44d9f86f49189a2d82 100644 (file)
@@ -233,7 +233,7 @@ rule "Notify Info"
         Item NotifyInfo changed to ON
     then
         NotifyInfo.postUpdate(OFF)
-        
+
         logInfo("demo.rules", "Sending info notification")
         DeviceNotifyInfo.sendCommand("INFO!")
 end
@@ -243,7 +243,7 @@ rule "Notify Warning"
         Item NotifyWarning changed to ON
     then
         NotifyWarning.postUpdate(OFF)
-        
+
         logInfo("demo.rules", "Sending warning notification")
         DeviceNotifyWarning.sendCommand("WARNING!")
 end
@@ -253,7 +253,7 @@ rule "Notify Alert"
         Item NotifyAlert changed to ON
     then
         NotifyAlert.postUpdate(OFF)
-        
+
         logInfo("demo.rules", "Sending alert notification")
         DeviceNotifyAlert.sendCommand("ALERT!")
 end
@@ -263,9 +263,9 @@ rule "Set Alarm in 1 Minute"
          Item SetAlarmIn1Min changed to ON
     then
          SetAlarmIn1Min.postUpdate(OFF)
-         
+
          logInfo("demo.rules", "Setting alarm for 1 minute from now")
-         
+
          val cal = Calendar.getInstance()
          cal.add(Calendar.MINUTE, 1)
          ClockSetAlarm.sendCommand(new DateTimeType(cal))
@@ -276,7 +276,7 @@ rule "Set 2 Minute Timer"
          Item Set2MinTimer changed to ON
     then
          Set2MinTimer.postUpdate(OFF)
-         
+
          logInfo("demo.rules", "Configure timer for 2 minutes without starting")
          TimerDuration.sendCommand(120)
 end
index 500b1f67d02bb69646a1373aac274073f2260dc9..a885df1a1024203c11dcc0848bee76709d5f20b0 100644 (file)
@@ -52,5 +52,5 @@ demo.items:
 ```java
 Switch DemoSwitch  "Switch"         { channel="leapmotion:controller:1:gesture" }
 Color  RGBLight    "RGB Light"      { channel="leapmotion:controller:1:gesture" }
-Dimmer DimmedLight "Dimmer [%d %%]" { channel="leapmotion:controller:1:gesture"[profile="leapmotion:dimmer", mode="fingers"] } 
+Dimmer DimmedLight "Dimmer [%d %%]" { channel="leapmotion:controller:1:gesture"[profile="leapmotion:dimmer", mode="fingers"] }
 ```
index 51f41c7dff44238fe1744b330ea0cc49e0bae302..d87809b5f5d908191116e5f04aad4206000f8f44 100644 (file)
@@ -174,7 +174,7 @@ then
         logInfo("actions", "Actions not found, check thing ID")
         return
     }
-                
+
     switch receivedCommand{
                     case 0: actions.decreaseChannel()
                     case 1: actions.increaseChannel()
index 1149a0833b179d33ea14745d02fffd4956caaeee..f86804fd7e908afda4922485937328fb5d5c954f 100644 (file)
@@ -40,7 +40,7 @@ You will have to look it up in your documentation or in the 'Luxom Plusconfig' s
 Sometimes a device does not send back a confirmation over the bus having set the correct state.
 Some dimmers do the dimming, but do not send back the set brightness level.
 To be able to use these devices, you can add the `doesNotReply=true` parameter so that the binding immediately sets the item's state and does not wait for confirmation.
-  
+
 #### Dimmers
 
 Dimmers support the optional advanced parameters `onLevel`, `onToLast` and `stepPercentage`:
index 3e5752d785c3f2d0a0cc828d4d5db6cc2c595241..8a207061b2852bf50adc5280efca86da3150d91d 100644 (file)
@@ -18,7 +18,7 @@ The default update interval is set to 5 seconds. Intervals from 1 to 300 seconds
 
 ## Thing Configuration
 
-The thing has a few configuration parameters:  
+The thing has a few configuration parameters:
 
 | Parameter       | Description                                                           |
 |-----------------|-----------------------------------------------------------------------|
@@ -241,6 +241,6 @@ sitemap mecmeter label="MecMeter"
         Text item=VoltageP2
         Text item=VoltageP3
     }
-    
+
 }
 ```
index bc0f395a97fba609a7027b6d5f9a280f8303cd24..804e80ce5a563ddb956b2f09f3556f703ea6a33d 100644 (file)
@@ -49,12 +49,12 @@ Set `region` to your location
 - `EU` : Europe and Rest of World
 - `NA` : North America
 - `AP` : Asia Pacific
-- `CN` : China 
+- `CN` : China
 
 Set `pin` to your Mercedes Me App PIN.
 Parameter is *not required*.
 Note `pin` is needed for some commands which are affecting **vehicle safety**.
-Commands like _unlock doors_ will result into an _unsafe state_: your vehicle is unlocked and is accessible to everybody. 
+Commands like _unlock doors_ will result into an _unsafe state_: your vehicle is unlocked and is accessible to everybody.
 
 Commands protected by PIN
 
@@ -63,7 +63,7 @@ Commands protected by PIN
 - Open / Ventilate Windows
 - Open / Lift Sunroof
 
-IP `callbackIP` and port `callbackPort` will be auto-detected. 
+IP `callbackIP` and port `callbackPort` will be auto-detected.
 If you're running on server with more than one network interface please select manually.
 
 ### Bridge Authorization
@@ -73,7 +73,7 @@ The Bridge will indicate in the status headline if authorization is needed inclu
 
 Three steps are needed
 
-1. Open the mentioned URL like 192.168.x.x:8090/mb-auth 
+1. Open the mentioned URL like 192.168.x.x:8090/mb-auth
 Opening this URL will request a PIN  which will be send to your configured email.
 Check your Mail Account if you received the PIN.
 Click on _Continue_ to proceed with Step 2.
@@ -84,7 +84,7 @@ Click on _Submit_ button.
 
 3. Confirmation shall be shown that authorization was successful.
 
-In case of non successful authorization check your log for errors. 
+In case of non successful authorization check your log for errors.
 Below screenshots are illustrating the authorization flow.
 
 ### After Bridge Setup
@@ -150,17 +150,17 @@ Group name: `vehicle`
 | command-capabilities  | String              |  Command Capabilities         | X    |       |    X     |
 | proto-update          | String              |  Last Vehicle Data Update     | X    |       |    X     |
 
-Advanced channels are used to identify problems. 
+Advanced channels are used to identify problems.
 If you encounter problems with this binding follow the instructions from [Troubleshooting](#troubleshooting) section.
 
 #### Lock Status Mapping
 
-State 
+State
 
 - 0 : Locked
 - 1 : Unlocked
 
-Command 
+Command
 
 - 0 : Lock
 - 1 : Unlock
@@ -177,7 +177,7 @@ State
 
 Command
 
-- 0 : Ventilate 
+- 0 : Ventilate
 - 1 : Close
 - 2 : Open
 
@@ -190,7 +190,7 @@ Triggers `WINDOWVENTILATE`, `WINDOWCLOSE` and `WINDOWOPEN` from [Command Name Ma
 
 #### Ignition Mapping
 
-State 
+State
 
 - 0 : Off
 - 2 : Ready
@@ -224,7 +224,7 @@ States and controls are depending on your vehicle capabilities.
 | sunroof             | Number               |  Sun roof                    | X    | X     |
 
 #### Rooftop Mapping
-            
+
 - 0 : Unlocked
 - 1 : Open and locked
 - 2 : Closed and locked
@@ -301,11 +301,11 @@ State representing current window position.
 #### Rear Right Blind Channel Mapping
 
 - not available yet
+
 #### Rear Left Blind Channel Mapping
 
 - not available yet
+
 #### Rear Blind Channel Mapping
 
 - not available yet
@@ -358,7 +358,7 @@ Triggers `- PRECONDCONFIGURESEATS` from [Command Name Mapping](#command-name-map
 Pre-configure selected zone with desired temperature.
 Minimum and maximum temperature depends on your local settings either Degree Celsius or Fahrenheit.
 
-Celsius 
+Celsius
 
 - Minimum : 16 Â°C
 - Maximum : 28 Â°C
@@ -372,10 +372,10 @@ Fahrenheit
 
 Triggers `TEMPERATURECONFIGURE` from [Command Name Mapping](#command-name-mapping)
 
-#### AC Precondition Control 
+#### AC Precondition Control
 
 Triggers `PRECONDSTART` and `PRECONDSTOP` from [Command Name Mapping](#command-name-mapping)
+
 #### AC Precondition Status Mapping
 
 - 0 : No Request
@@ -383,7 +383,7 @@ Triggers `PRECONDSTART` and `PRECONDSTOP` from [Command Name Mapping](#command-n
 - 2 : Available after Restart Engine
 - 3 : Not Possible, Charging not Finished
 - 4 : General Error</option>
+
 #### Auxiliary Heating Switch
 
 Triggers `AUXHEATSTART` and `AUXHEATSTOP` from [Command Name Mapping](#command-name-mapping)
@@ -582,9 +582,9 @@ All channels `read-only`
 #### Average Consumption
 
 You can configure different average consumption units like kWh per 100 kilometer or km per kWh.
-In your Mercedes Me App front page 
+In your Mercedes Me App front page
 
-- Burger Menu top left 
+- Burger Menu top left
 - Last Entry `Settings`
 - First Entry `Units`
 
@@ -593,7 +593,7 @@ In your Mercedes Me App front page
 #### Trip Duration
 
 Shown as String in format `d days, HH:mm`.
-If duration is below 24 hours format is `HH:mm`. 
+If duration is below 24 hours format is `HH:mm`.
 
 ### ECO Score
 
@@ -657,10 +657,10 @@ All channels `read-only`
 | pressure-front-right     | Number:Pressure      |  Tire Pressure Front Right      |
 | pressure-rear-left       | Number:Pressure      |  Tire Pressure Rear Left        |
 | pressure-rear-right      | Number:Pressure      |  Tire Pressure Rear Right       |
-| sensor-available         | Number               |  Tire Sensor Available          | 
+| sensor-available         | Number               |  Tire Sensor Available          |
 | marker-front-left        | Number               |  Tire Marker Front Left         |
-| marker-front-right       | Number               |  Tire Marker Front Right        | 
-| marker-rear-left         | Number               |  Tire Marker Rear Left          | 
+| marker-front-right       | Number               |  Tire Marker Front Right        |
+| marker-rear-left         | Number               |  Tire Marker Rear Left          |
 | marker-rear-right        | Number               |  Tire Marker Rear Right         |
 | last-update              | DateTime             |  Timestamp of last Measurement  |
 
@@ -740,7 +740,7 @@ Send lock/unlock or temperatures in a short period of time will result in failur
 
 ## Vehicle Actions
 
-Actions for `vehicle` [thing}(#vehicle) are provided. 
+Actions for `vehicle` [thing}(#vehicle) are provided.
 
 ### `sendPOI`
 
@@ -777,19 +777,19 @@ Full information
 There's a big variety of vehicles with different features and different command capabilities.
 During discovery the capabilities of your vehicle are identified.
 They are stored in `Vehicle Properties` as shown below.
-You can check in beforehand if features like _Charge Program Configuration_ or _HVAC Configuration_ are supported or not. 
+You can check in beforehand if features like _Charge Program Configuration_ or _HVAC Configuration_ are supported or not.
 
 <img src="./doc/OH-capabilities.png" width="500" height="280"/>
 
-If you want to dive deeper see [Troubleshooting](#troubleshooting) `feature-capabilities` and `command-capabilities` to evaluate the exact capabilities. 
+If you want to dive deeper see [Troubleshooting](#troubleshooting) `feature-capabilities` and `command-capabilities` to evaluate the exact capabilities.
 
 ## Troubleshooting
 
 In order to be able to analyze problems 3 advanced channels are placed in the vehicle group.
 
-* `feature-capabilities` - showing which feature your vehicle is equipped with
-* `command-capabilities` - showing which commands can be sent to your vehicle
-* `proto-update` - latest update of your vehicle data
+- `feature-capabilities` - showing which feature your vehicle is equipped with
+- `command-capabilities` - showing which commands can be sent to your vehicle
+- `proto-update` - latest update of your vehicle data
 
 In case you find problems regarding this binding add items to these 3 channels.
 The items are reporting Strings in JSON format.
@@ -879,7 +879,7 @@ Number:Speed            EQA_TripAvgSpeed            {channel="mercedesme:bev:471
 Number                  EQA_TripAvgConsumption      {channel="mercedesme:bev:4711:eqa:trip#cons-ev" }
 String                  EQA_AvgConsumptionUnit      {channel="mercedesme:bev:4711:eqa:trip#cons-ev-unit" }
 
-Number:Angle            EQA_Heading                 {channel="mercedesme:bev:4711:eqa:position#heading" }  
+Number:Angle            EQA_Heading                 {channel="mercedesme:bev:4711:eqa:position#heading" }
 Location                EQA_GPSLocation             {channel="mercedesme:bev:4711:eqa:position#gps" }
 Number                  EQA_Signal                  {channel="mercedesme:bev:4711:eqa:position#signal" }
 
@@ -900,10 +900,10 @@ DateTime                EQA_CommandTimestamp        {channel="mercedesme:bev:471
 // send POI from JSON String item
 rule "Send POI"
     when
-        Item POIJsonString changed 
+        Item POIJsonString changed
     then
         // decode JSON
-        val json = POIJsonString.state.toString        
+        val json = POIJsonString.state.toString
         val title = transform("JSONPATH", "$.title", json)
         val lat = transform("JSONPATH", "$.latitude", json)
         val lon = transform("JSONPATH", "$.longitude", json)
index 50df154b6094a75b2cc77e8edda683c94e83bf36..e07ea4f9fe25de6dfc03449a5ea3f4f1cbd85f0f 100644 (file)
@@ -1,6 +1,6 @@
 # How to protoc
 
-- Check [mvn repository](https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java-util) which version to use 
+- Check [mvn repository](https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java-util) which version to use
 - Download correct protoc compiler from [maven central](https://repo1.maven.org/maven2/com/google/protobuf/protoc/) into `PROTOC_DIR`
 - Call in mercedesme binding directory `PROTOC_DIR\protoc -I=proto --java_out=gen proto/*.proto`
 - Move generated sources including subdirs from `gen` to `3rdparty\java`
index 6c03d7ff7a57283b5494720745e9896e711a7f76..54f41db8bf13ee4cf3bb577b55d03ccf2a88ed09 100644 (file)
@@ -1,6 +1,6 @@
 # MfFan Binding
 
-This binding is used to enable communications between openHAB and "Modern Forms" or "WAC Lighting" WIFI connected, smart, ceiling fans.  
+This binding is used to enable communications between openHAB and "Modern Forms" or "WAC Lighting" WIFI connected, smart, ceiling fans.
 
 ## Supported Things
 
@@ -12,7 +12,7 @@ The binding currently supports the following thing:
 
 ## Discovery
 
-Auto discovery is not supported at this time.  
+Auto discovery is not supported at this time.
 
 ## Thing Configuration
 
index 2064694bc8c6b58a3d7177f106771df146c8e21d..9a51373194a1e1b89920a07fac63d5072f3c6757 100644 (file)
@@ -130,7 +130,7 @@ Bridge mihome:bridge:f0b429XXXXXX "Xiaomi Gateway" [ serialNumber="f0b429XXXXXX"
 ```java
 // Replace <GwID> with itemId of gateway from Things file
 // Replace <ID> with itemId of item from Things file
-// Gateway 
+// Gateway
 Switch Gateway_LightSwitch <light> { channel="mihome:gateway:<GwID>:<ID>:brightness" }
 Dimmer Gateway_Brightness <dimmablelight> { channel="mihome:gateway:<GwID>:<ID>:brightness" }
 Color Gateway_Color <rgb> { channel="mihome:gateway:<GwID>:<ID>:color" }
@@ -238,7 +238,7 @@ rule "Mijia & Aqara Wireless Switch"
 when
     Channel "mihome:sensor_switch:<GwID>:<ID>:button" triggered
 then
-    
+
     switch(receivedEvent) {
         case "SHORT_PRESSED": {
             <ACTION>
@@ -553,7 +553,7 @@ In order to verify that traffic is actually received by the machine use `tcpdump
 
 - List your network interfaces `ifconfig | grep MULTICAST` or `ip link | grep MULTICAST`
 - Use `tcpdump -i <interface> port 9898` for each interface to verify if you receive traffic
-  
+
 If you already know the correct interface, or you found the correct one through tcpdump:
 
 - Configure the `interface` property of the `Bridge` Thing with the correct name (for example `eth0`, etc)
index e70966ddf3de09c3f147d8a1ef93e8a8184d92b6..b69470dcada124874ba405782ff7dd8390a5e61d 100644 (file)
@@ -6385,10 +6385,10 @@ Number statusBat    "Battery Level [%1.0f%%]" <battery>   (gVac,gVacStat) {chann
 Number statusArea    "Cleaned Area [%1.0fm²]" <zoom>   (gVac,gVacStat) {channel="miio:vacuum:034F0E45:status#clean_area" }
 Number statusTime    "Cleaning Time [%1.0f']" <clock>   (gVac,gVacStat) {channel="miio:vacuum:034F0E45:status#clean_time" }
 String  statusError    "Error [%s]"  <error>  (gVac,gVacStat) {channel="miio:vacuum:034F0E45:status#error_code" }
-Number statusFanPow    "Fan Power [%1.0f%%]"  <signal>   (gVacStat) {channel="miio:vacuum:034F0E45:status#fan_power" } 
+Number statusFanPow    "Fan Power [%1.0f%%]"  <signal>   (gVacStat) {channel="miio:vacuum:034F0E45:status#fan_power" }
 Number statusClean    "In Cleaning Status [%1.0f]"   <switch>  (gVacStat) {channel="miio:vacuum:034F0E45:status#in_cleaning" }
 Switch statusDND    "DND Activated"    (gVacStat) {channel="miio:vacuum:034F0E45:status#dnd_enabled" }
-Number statusStatus    "Status [%1.0f]"  <status>  (gVacStat) {channel="miio:vacuum:034F0E45:status#state"} 
+Number statusStatus    "Status [%1.0f]"  <status>  (gVacStat) {channel="miio:vacuum:034F0E45:status#state"}
 Switch isLocating    "Locating"    (gVacStat) {channel="miio:vacuum:034F0E45:status#is_locating" }
 
 Number consumableMain    "Main Brush [%1.0f]"    (gVacCons) {channel="miio:vacuum:034F0E45:consumables#main_brush_time"}
index d83a7d2b2ff6c6f2579ea59255d5477115c5a8e7..621a2f91a6fbcd22aa14fab0b34a49fcda119476 100644 (file)
@@ -37,11 +37,11 @@ See full example below for how to configure using thing files.
 
 ### Heater
 
-- `macAddress` = network mac address of device in UPPERCASE.  
+- `macAddress` = network mac address of device in UPPERCASE.
   Can be found in the app by viewing devices. Or you can find it during discovery. Used for heaters connected to a room.
 - `heaterId` = id of device/heater, type number (not string)
   Use auto discovery to find this value. Used to identify independent heaters or heaters connected to a room.
-- `power` = number of watts this heater is consuming when active.  
+- `power` = number of watts this heater is consuming when active.
   Used to provide data for the currentPower channel.
 
 Either `macAddres` or `heaterId` must be specified.
@@ -93,7 +93,7 @@ Bridge millheat:account:home "Millheat account" [username="email@address.com",pa
     Thing home monaco "Penthouse Monaco" [ homeId=100000000000000 ] // Note: numeric value
     Thing room office "Office room" [ roomId=200000000000000 ] Note: numeric value
     Thing heater office "Office panel heater" [ macAddress="F0XXXXXXXXX", power=900, heaterId=12345 ] Note: heaterId is a numeric value, macAddress in UPPERCASE
-} 
+}
 ```
 
 millheat.items:
index dcaad540de6be98b02aee8f9ea2954f4edfd2a47..7d64d0646624a820ec90e5b61b3454ced52baa6b 100644 (file)
@@ -2,7 +2,7 @@
 
 Integrates the Home Power Plants from E3/DC GmbH into openHAB.
 See [E3DC Website](https://www.e3dc.com/) to find more informations about the device.
-The Power Plant handles all your Electrical Energy Resources like Photovoltaic Producers, Battery Storage, Wallbox Power Supply, Household Consumption and even more.  
+The Power Plant handles all your Electrical Energy Resources like Photovoltaic Producers, Battery Storage, Wallbox Power Supply, Household Consumption and even more.
 E3DC devices are integrated into the Modbus Binding.
 
 See chapter [Thing Configuration](#thing-configuration) how to set them up or check the [full example Things](#things) for manual setup.
@@ -228,7 +228,7 @@ sitemap E3DC label="E3DC Binding Sitemap" {
     Text    item=E3DC_Firmware                  label="Firmware [%s]"
     Text    item=E3DC_SerialNumber              label="Serial Number[%s]"
   }
-  
+
     Frame label="Power Producer" {
       Text    item=E3DC_PVPower                 label="PV Power [%d %unit%]"
       Text    item=E3DC_BatteryDischarge        label="Battery Discharge [%d %unit%]"
@@ -247,7 +247,7 @@ sitemap E3DC label="E3DC Binding Sitemap" {
       Text    item=E3DC_SelfConsumptionLevel    label="Self Consumption [%d %%]"
       Text    item=E3DC_BatterySOC              label="SOC [%d %%]"
     }
-  
+
   Frame label="Wallbox" {
     Switch    item=E3DC_WB_Available            label="Available [%s]"
     Switch    item=E3DC_WB_Sunmode              label="Sunmode [%s]"
@@ -263,7 +263,7 @@ sitemap E3DC label="E3DC Binding Sitemap" {
     Switch    item=E3DC_WB_Relay32A             label="Relay 32A [%s]"
     Switch    item=E3DC_WB_1PhaseCharging       label="1-Phase charging [%s]"
   }
-  
+
     Frame label="String 1 Details" {
       Text    item=E3DC_String1V                label="Volt [%d %unit%]"
       Text    item=E3DC_String1A                label="Ampere [%.2f %unit%]"
@@ -279,7 +279,7 @@ sitemap E3DC label="E3DC Binding Sitemap" {
       Text    item=E3DC_String3A                label="Ampere [%.2f %unit%]"
       Text    item=E3DC_String3W                label="Watt [%d %unit%]"
     }
-  
+
   Frame label="EMS" {
     Text      item=E3DC_EMS_Status                      label="Status [%s]"
     Switch    item=E3DC_EMS_BatteryChargingLock         label="Battery Charging Lock [%s]"
index c7bbb2d0aac2cd7ff7420d268782607637d2e468..c4888208d810335b7ed41e85990458d60ae2c3a6 100644 (file)
@@ -154,10 +154,10 @@ Number:Energy stiebel_eltron_consumption_water_total            "Water heating p
 ```perl
 Text label="Heat pumpt" icon="temperature" {
  Frame label="Optation Mode" {
-  Default item=stiebel_eltron_mode_pump 
+  Default item=stiebel_eltron_mode_pump
   Default item=stiebel_eltron_mode_heating
-  Default item=stiebel_eltron_mode_water 
-  Default item=stiebel_eltron_mode_cooling 
+  Default item=stiebel_eltron_mode_water
+  Default item=stiebel_eltron_mode_cooling
   Default item=stiebel_eltron_mode_summer
  }
  Frame label= "State" {
index d3358efd6269ce788974f4396be07e324f1ae9ff..132c1a540f56d0316b52ad683a1fa93007fc6b66 100644 (file)
@@ -165,7 +165,7 @@ Number Studer_BSP_batteryVoltage     "Battery Voltage: [%s]"                {cha
 Text item=Studer_Xtender_Phase1_InputVoltage
 Text item=Studer_Xtender_Phase1_InputCurrent
 Text item=Studer_Xtender_Phase1_StateInverter
-            
+
 Chart item=Studer_Xtender_Phase1_InputVoltage period=D refresh=600000
 Chart item=Studer_Xtender_Phase1_InputCurrent period=D refresh=30000
 
index 3f1bc95830a39fcb695486156f3d9d8ac2188eff..641723cb92729b3db2e185d874293faa5640bd22 100644 (file)
@@ -114,15 +114,15 @@ Basic parameters
 
 Advanced parameters
 
-| Parameter                       | Required | Type    | Default if omitted | Description                                                                                                                                                        |
-| ------------------------------- | -------- | ------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
-| `timeBetweenTransactionsMillis` |          | integer | `60`               | How long to delay we must have at minimum between two consecutive MODBUS transactions. In milliseconds.                                                            |
-| `timeBetweenReconnectMillis`    |          | integer | `0`                | How long to wait to before trying to establish a new connection after the previous one has been disconnected. In milliseconds.                                     |
-| `connectMaxTries`               |          | integer | `1`                | How many times we try to establish the connection. Should be at least 1.                                                                                           |
-| `afterConnectionDelayMillis`    |          | integer | `0`                | Connection warm-up time. Additional time which is spent on preparing connection which should be spent waiting while end device is getting ready to answer first modbus call. In milliseconds.  |
-| `reconnectAfterMillis`          |          | integer | `0`                | The connection is kept open at least the time specified here. Value of zero means that connection is disconnected after every MODBUS transaction. In milliseconds. |
-| `connectTimeoutMillis`          |          | integer | `10000`            | The maximum time that is waited when establishing the connection. Value of zero means that system/OS default is respected. In milliseconds.                        |
-| `enableDiscovery`                |          | boolean | false               | Enable auto-discovery feature. Effective only if a supporting extension has been installed. |
+| Parameter                       | Required | Type    | Default if omitted | Description                                                                                                                                                                                   |
+|---------------------------------|----------|---------|--------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `timeBetweenTransactionsMillis` |          | integer | `60`               | How long to delay we must have at minimum between two consecutive MODBUS transactions. In milliseconds.                                                                                       |
+| `timeBetweenReconnectMillis`    |          | integer | `0`                | How long to wait to before trying to establish a new connection after the previous one has been disconnected. In milliseconds.                                                                |
+| `connectMaxTries`               |          | integer | `1`                | How many times we try to establish the connection. Should be at least 1.                                                                                                                      |
+| `afterConnectionDelayMillis`    |          | integer | `0`                | Connection warm-up time. Additional time which is spent on preparing connection which should be spent waiting while end device is getting ready to answer first modbus call. In milliseconds. |
+| `reconnectAfterMillis`          |          | integer | `0`                | The connection is kept open at least the time specified here. Value of zero means that connection is disconnected after every MODBUS transaction. In milliseconds.                            |
+| `connectTimeoutMillis`          |          | integer | `10000`            | The maximum time that is waited when establishing the connection. Value of zero means that system/OS default is respected. In milliseconds.                                                   |
+| `enableDiscovery`               |          | boolean | false              | Enable auto-discovery feature. Effective only if a supporting extension has been installed.                                                                                                   |
 
 **Note:** Advanced parameters must be equal for all `tcp` things sharing the same `host` and `port`.
 
@@ -136,29 +136,29 @@ Similarly, with some slower devices on might need to increase the values.
 
 Basic parameters
 
-| Parameter | Type    | Required | Default if omitted | Description                                                                                                                                                                                               |     |
-| --------- | ------- | -------- | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --- |
-| port      | text    | âś“        |                    | Serial port to use, for example `"/dev/ttyS0"` or `"COM1"`                                                                                                                                                |     |
-| id        | integer |          | `1`                | Slave id. Also known as station address or unit identifier. See [Wikipedia](https://en.wikipedia.org/wiki/Modbus) and [simplymodbus](https://www.simplymodbus.ca/index.html) articles for more information |     |
-| baud      | integer | âś“        |                    | Baud of the connection. Valid values are: `75`, `110`, `300`, `1200`, `2400`, `4800`, `9600`, `19200`, `38400`, `57600`, `115200`.                                                                        |     |
-| stopBits  | text    | âś“        |                    | Stop bits. Valid values are: `"1.0"`, `"1.5"`, `"2.0"`.                                                                                                                                                       |     |
-| parity    | text    | âś“        |                    | Parity. Valid values are: `"none"`, `"even"`, `"odd"`.                                                                                                                                                    |     |
-| dataBits  | integer | âś“        |                    | Data bits. Valid values are: `5`, `6`, `7` and `8`.                                                                                                                                                       |     |
-| encoding  | text    |          | `"rtu"`           | Encoding. Valid values are: `"ascii"`, `"rtu"`, `"bin"`.                                                                                                                                                  |     |
-| echo      | boolean |          | `false`            | Flag for setting the RS485 echo mode. This controls whether we should try to read back whatever we send on the line, before reading the response. Valid values are: `true`, `false`.                      |     |
+| Parameter | Type    | Required | Default if omitted | Description                                                                                                                                                                                                |   |
+|-----------|---------|----------|--------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
+| port      | text    | âś“        |                    | Serial port to use, for example `"/dev/ttyS0"` or `"COM1"`                                                                                                                                                 |   |
+| id        | integer |          | `1`                | Slave id. Also known as station address or unit identifier. See [Wikipedia](https://en.wikipedia.org/wiki/Modbus) and [simplymodbus](https://www.simplymodbus.ca/index.html) articles for more information |   |
+| baud      | integer | âś“        |                    | Baud of the connection. Valid values are: `75`, `110`, `300`, `1200`, `2400`, `4800`, `9600`, `19200`, `38400`, `57600`, `115200`.                                                                         |   |
+| stopBits  | text    | âś“        |                    | Stop bits. Valid values are: `"1.0"`, `"1.5"`, `"2.0"`.                                                                                                                                                    |   |
+| parity    | text    | âś“        |                    | Parity. Valid values are: `"none"`, `"even"`, `"odd"`.                                                                                                                                                     |   |
+| dataBits  | integer | âś“        |                    | Data bits. Valid values are: `5`, `6`, `7` and `8`.                                                                                                                                                        |   |
+| encoding  | text    |          | `"rtu"`            | Encoding. Valid values are: `"ascii"`, `"rtu"`, `"bin"`.                                                                                                                                                   |   |
+| echo      | boolean |          | `false`            | Flag for setting the RS485 echo mode. This controls whether we should try to read back whatever we send on the line, before reading the response. Valid values are: `true`, `false`.                       |   |
 
 Advanced parameters
 
-| Parameter                       | Required | Type    | Default if omitted | Description                                                                                                                                |
-| ------------------------------- | -------- | ------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ |
-| `receiveTimeoutMillis`          |          | integer | `1500`             | Timeout for read operations. In milliseconds.                                                                                              |
-| `flowControlIn`                 |          | text    | `"none"`           | Type of flow control for receiving. Valid values are: `"none"`, `"xon/xoff in"`, `"rts/cts in"`.                                           |
-| `flowControlOut`                |          | text    | `"none"`           | Type of flow control for sending. Valid values are: `"none"`, `"xon/xoff out"`, `"rts/cts out"`.                                           |
-| `timeBetweenTransactionsMillis` |          | integer | `35`               | How long to delay we must have at minimum between two consecutive MODBUS transactions. In milliseconds.                                    |
-| `connectMaxTries`               |          | integer | `1`                | How many times we try to establish the connection. Should be at least 1.                                                                   |
-| `afterConnectionDelayMillis`    |          | integer | `0`                | Connection warm-up time. Additional time which is spent on preparing connection which should be spent waiting while end device is getting ready to answer first modbus call. In milliseconds.   |
-| `connectTimeoutMillis`          |          | integer | `10000`            | The maximum time that is waited when establishing the connection. Value of zero means thatsystem/OS default is respected. In milliseconds. |
-| `enableDiscovery`                |          | boolean | false               | Enable auto-discovery feature. Effective only if a supporting extension has been installed. |
+| Parameter                       | Required | Type    | Default if omitted | Description                                                                                                                                                                                   |
+|---------------------------------|----------|---------|--------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `receiveTimeoutMillis`          |          | integer | `1500`             | Timeout for read operations. In milliseconds.                                                                                                                                                 |
+| `flowControlIn`                 |          | text    | `"none"`           | Type of flow control for receiving. Valid values are: `"none"`, `"xon/xoff in"`, `"rts/cts in"`.                                                                                              |
+| `flowControlOut`                |          | text    | `"none"`           | Type of flow control for sending. Valid values are: `"none"`, `"xon/xoff out"`, `"rts/cts out"`.                                                                                              |
+| `timeBetweenTransactionsMillis` |          | integer | `35`               | How long to delay we must have at minimum between two consecutive MODBUS transactions. In milliseconds.                                                                                       |
+| `connectMaxTries`               |          | integer | `1`                | How many times we try to establish the connection. Should be at least 1.                                                                                                                      |
+| `afterConnectionDelayMillis`    |          | integer | `0`                | Connection warm-up time. Additional time which is spent on preparing connection which should be spent waiting while end device is getting ready to answer first modbus call. In milliseconds. |
+| `connectTimeoutMillis`          |          | integer | `10000`            | The maximum time that is waited when establishing the connection. Value of zero means thatsystem/OS default is respected. In milliseconds.                                                    |
+| `enableDiscovery`               |          | boolean | false              | Enable auto-discovery feature. Effective only if a supporting extension has been installed.                                                                                                   |
 
 With the exception of `id` parameters should be equal for all `serial` things sharing the same `port`.
 
@@ -174,9 +174,9 @@ With low baud rates and/or long read requests (that is, many items polled), ther
 You must give each of your bridge Things a reference (thing ID) that is unique for this binding.
 
 | Parameter     | Type    | Required | Default if omitted | Description                                                                                                                                                                                    |
-| ------------- | ------- | -------- | ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+|---------------|---------|----------|--------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
 | `start`       | integer |          | `0`                | Address of the first register, coil, or discrete input to poll. Input as zero-based index number.                                                                                              |
-| `length`      | integer | âś“        | (-)                | Number of registers, coils or discrete inputs to read.  Note that protocol limits max length, depending on type                                                                             |
+| `length`      | integer | âś“        | (-)                | Number of registers, coils or discrete inputs to read.  Note that protocol limits max length, depending on type                                                                                |
 | `type`        | text    | âś“        | (-)                | Type of modbus items to poll. This matches directly to Modbus request type or function code (FC). Valid values are: `"coil"` (FC01), `"discrete"` (FC02), `"holding"`(FC03), `"input"` (FC04). |
 | `refresh`     | integer |          | `500`              | Poll interval in milliseconds. Use zero to disable automatic polling.                                                                                                                          |
 | `maxTries`    | integer |          | `3`                | Maximum tries when reading. <br /><br />Number of tries when reading data, if some of the reading fail. For single try, enter 1.                                                               |
@@ -360,14 +360,14 @@ Note that value types less than 16 bits are not supported on write to holding re
 
 See [Full examples](#full-examples) section for practical examples.
 
-#### `bit`:
+#### `bit`
 
 - a single bit is read from the registers
 - address is given as `X.Y`, where `Y` is between 0...15 (inclusive), representing bit of the register `X`
 - index `Y=0` refers to the least significant bit
 - index `Y=1` refers to the second least significant bit, etc.
 
-#### `int8`:
+#### `int8`
 
 - a byte (8 bits) from the registers is interpreted as signed integer
 - address is given as `X.Y`, where `Y` is between 0...1 (inclusive), representing byte of the register `X`
@@ -375,42 +375,42 @@ See [Full examples](#full-examples) section for practical examples.
 - index `Y=1` refers to high byte
 - it is assumed that each high and low byte is encoded in most significant bit first order
 
-#### `uint8`:
+#### `uint8`
 
 - same as `int8` except value is interpreted as unsigned integer
 
-#### `int16`:
+#### `int16`
 
 - register with index is interpreted as 16 bit signed integer.
 - it is assumed that register is encoded in most significant bit first order
 
-#### `uint16`:
+#### `uint16`
 
 - same as `int16` except value is interpreted as unsigned integer
 
-#### `int32`:
+#### `int32`
 
 - registers `index` and `(index + 1)` are interpreted as signed 32bit integer
 - it assumed that the first register contains the most significant 16 bits
 - it is assumed that each register is encoded in most significant bit first order
 
-#### `uint32`:
+#### `uint32`
 
 - same as `int32` except value is interpreted as unsigned integer
 
-#### `float32`:
+#### `float32`
 
 - registers `index` and `(index + 1)` are interpreted as signed 32bit floating point number
 - it assumed that the first register contains the most significant 16 bits
 - it is assumed that each register is encoded in most significant bit first order
 
-#### `int64`:
+#### `int64`
 
 - registers `index`, `(index + 1)`, `(index + 2)`, `(index + 3)` are interpreted as signed 64bit integer.
 - it assumed that the first register contains the most significant 16 bits
 - it is assumed that each register is encoded in most significant bit first order
 
-#### `uint64`:
+#### `uint64`
 
 - same as `int64` except value is interpreted as unsigned integer
 
@@ -422,27 +422,27 @@ To resolve this the binding supports a second set of valuetypes that have the wo
 
 If you get strange values using the `int32`, `uint32`, `float32`, `int64`, or `uint64` valuetypes then just try the `int32_swap`, `uint32_swap`, `float32_swap`, `int64_swap`, or `uint64_swap` valuetype, depending upon what your data type is.
 
-#### `int32_swap`:
+#### `int32_swap`
 
 - registers `index` and `(index + 1)` are interpreted as signed 32bit integer
 - it assumed that the first register contains the least significant 16 bits
 - it is assumed that each register is encoded in most significant bit first order (Big Endian)
 
-#### `uint32_swap`:
+#### `uint32_swap`
 
 - same as `int32_swap` except value is interpreted as unsigned integer
 
-#### `float32_swap`:
+#### `float32_swap`
 
 - registers `index` and `(index + 1)` are interpreted as signed 32bit floating point number
 - it assumed that the first register contains the least significant 16 bits
 - it is assumed that each register is encoded in most significant bit first order (Big Endian)
 
-#### `int64_swap`:
+#### `int64_swap`
 
 - same as `int64` but registers swapped, that is, registers (index + 3), (index + 2), (index + 1), (index + 1) are interpreted as signed 64bit integer
 
-#### `uint64_swap`:
+#### `uint64_swap`
 
 - same as `uint64` except value is interpreted as unsigned integer
 
index 5c60d9909530ae6f9a4e8a9e53c001b2b43d6c94..abe260fde46e8f9cea8f0575f71503a5f33a5ed9 100644 (file)
@@ -22,19 +22,19 @@ Or you can connect it for example to a Raspberry Pi and use [ser2net Linux tool]
 ## Supported Things
 
 Monoprice 10761 & 39261 or Dayton Audio DAX66 amplifiers use the `amplifier` thing id. Up to 18 zones with 3 linked amps and 6 source inputs are supported.
-Note: Compatible clones from McLELLAND, Factor, Soundavo, etc. should work as well.  
+Note: Compatible clones from McLELLAND, Factor, Soundavo, etc. should work as well.
 
-***The following thing types were implemented via available documentation only and have not been tested. Please open an issue for any bugs found when using these thing types.***  
+***The following thing types were implemented via available documentation only and have not been tested. Please open an issue for any bugs found when using these thing types.***
 
-Monoprice 44519 4 zone variants use the `monoprice4` thing id. Up to 12 zones with 3 linked amps and 6 source inputs are supported.  
+Monoprice 44519 4 zone variants use the `monoprice4` thing id. Up to 12 zones with 3 linked amps and 6 source inputs are supported.
 
-Monoprice 31028 or OSD Audio PAM1270 70 volt amplifiers use the `monoprice70` thing id. 6 zones per amp (not linkable) and 2 source inputs are supported.  
+Monoprice 31028 or OSD Audio PAM1270 70 volt amplifiers use the `monoprice70` thing id. 6 zones per amp (not linkable) and 2 source inputs are supported.
 
-Dayton Audio DAX88 amplifiers use the `dax88` thing id. 8 zones (2 un-amplified) per amp (not linkable) and 8 source inputs are supported.  
+Dayton Audio DAX88 amplifiers use the `dax88` thing id. 8 zones (2 un-amplified) per amp (not linkable) and 8 source inputs are supported.
 
 Xantech MRC88, MX88, MRAUDIO8X8 or CM8X8 amplifiers use the `xantech` thing id. Up to 16 zones with 2 linked amps and 8 source inputs are supported.
-Some Xantech amps provide unsolicited zone updates for keypad actions and may work with the `disableKeypadPolling` option set to true which will prevent un-necessary polling of the amplifier. 
-Note: MRC44 amps do not support serial control.  
+Some Xantech amps provide unsolicited zone updates for keypad actions and may work with the `disableKeypadPolling` option set to true which will prevent un-necessary polling of the amplifier.
+Note: MRC44 amps do not support serial control.
 
 ## Discovery
 
index f663be586ff702115d1959740d1dc62fbbfca922..24ef3277bc3a8614bc8faa8bfcd00c742b9a62bb 100644 (file)
@@ -7,11 +7,11 @@ Ruuvi Cloud Subscription is not needed at all as the integration is local.
 Compared to Ruuvi Tag Bluetooth binding, this binding has the benefit of relying on strong and reliable antenna of Ruuvi Gateway, as opposed to e.g. usually much weaker antenna integrated onto computer motherboard.
 Obvious downside compared to the bluetooth binding is the requirement of having Ruuvi Gateway device.
 
-Both RuuviTag and RuuviTag Pro are supported. 
+Both RuuviTag and RuuviTag Pro are supported.
 
 ## Setup the Gateway
 
-Before using this binding, Ruuvi Gateway needs to configured to publish the sensor data via MQTT. 
+Before using this binding, Ruuvi Gateway needs to configured to publish the sensor data via MQTT.
 
 For further instructions, refer to relevant section in [Ruuvi Gateway documentation](https://ruuvi.com/gateway-config/).
 For most convenient usage of this binding, please ensure that "Use 'ruuvi' on the prefix' MQTT setting is enabled on Ruuvi Gateway.
index 6f74d1b64de6a7d0097850b882ae483e9a5fc1f9..cf51a4e7712a2996aeecee53df7833c2b5c4179d 100644 (file)
@@ -517,7 +517,7 @@ The channel id _name_ shows the first element as default.
 All other possibilities are attached as options.
 The picture on the right shows the _Session Title_ item and 3 possible options.
 Select the desired service and the corresponding Charge Session with _Energy Charged_, _Session Status_ and
-_Session Issues_ will be shown.  
+_Session Issues_ will be shown.
 
 ### TroubleShooting
 
@@ -597,9 +597,9 @@ Bridge mybmw:account:4711   "MyBMW Account" [userName="YOUR_USERNAME",password="
 ### Items File
 
 ```java
-Number:Length           i3Mileage                 "Odometer [%d %unit%]"                        <line>          (i3)        {channel="mybmw:bev_rex:4711:i3:range#mileage" }                                                                           
+Number:Length           i3Mileage                 "Odometer [%d %unit%]"                        <line>          (i3)        {channel="mybmw:bev_rex:4711:i3:range#mileage" }
 Number:Length           i3Range                   "Range [%d %unit%]"                           <motion>        (i3)        {channel="mybmw:bev_rex:4711:i3:range#hybrid"}
-Number:Length           i3RangeElectric           "Electric Range [%d %unit%]"                  <motion>        (i3,long)   {channel="mybmw:bev_rex:4711:i3:range#electric"}   
+Number:Length           i3RangeElectric           "Electric Range [%d %unit%]"                  <motion>        (i3,long)   {channel="mybmw:bev_rex:4711:i3:range#electric"}
 Number:Length           i3RangeFuel               "Fuel Range [%d %unit%]"                      <motion>        (i3)        {channel="mybmw:bev_rex:4711:i3:range#fuel"}
 Number:Dimensionless    i3BatterySoc              "Battery Charge [%.1f %%]"                    <battery>       (i3,long)   {channel="mybmw:bev_rex:4711:i3:range#soc"}
 Number:Volume           i3Fuel                    "Fuel [%.1f %unit%]"                          <oil>           (i3)        {channel="mybmw:bev_rex:4711:i3:range#remaining-fuel"}
@@ -613,16 +613,16 @@ String                  i3LockStatus              "Lock Status [%s]"
 DateTime                i3NextServiceDate         "Next Service Date [%1$tb %1$tY]"             <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:status#service-date" }
 String                  i3NextServiceMileage      "Next Service Mileage [%d %unit%]"            <line>          (i3)        {channel="mybmw:bev_rex:4711:i3:status#service-mileage" }
 String                  i3CheckControl            "Check Control [%s]"                          <error>         (i3)        {channel="mybmw:bev_rex:4711:i3:status#check-control" }
-String                  i3PlugConnection          "Plug [%s]"                                   <energy>        (i3)        {channel="mybmw:bev_rex:4711:i3:status#plug-connection" } 
-String                  i3ChargingStatus          "[%s]"                                        <energy>        (i3)        {channel="mybmw:bev_rex:4711:i3:status#charge" } 
-String                  i3ChargingInfo            "[%s]"                                        <energy>        (i3)        {channel="mybmw:bev_rex:4711:i3:status#charge-info" } 
+String                  i3PlugConnection          "Plug [%s]"                                   <energy>        (i3)        {channel="mybmw:bev_rex:4711:i3:status#plug-connection" }
+String                  i3ChargingStatus          "[%s]"                                        <energy>        (i3)        {channel="mybmw:bev_rex:4711:i3:status#charge" }
+String                  i3ChargingInfo            "[%s]"                                        <energy>        (i3)        {channel="mybmw:bev_rex:4711:i3:status#charge-info" }
 DateTime                i3LastUpdate              "Update [%1$tA, %1$td.%1$tm. %1$tH:%1$tM]"    <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:status#last-update"}
 
-Location                i3Location                "Location  [%s]"                              <zoom>          (i3)        {channel="mybmw:bev_rex:4711:i3:location#gps" }                                                                           
-Number:Angle            i3Heading                 "Heading [%.1f %unit%]"                       <zoom>          (i3)        {channel="mybmw:bev_rex:4711:i3:location#heading" }  
+Location                i3Location                "Location  [%s]"                              <zoom>          (i3)        {channel="mybmw:bev_rex:4711:i3:location#gps" }
+Number:Angle            i3Heading                 "Heading [%.1f %unit%]"                       <zoom>          (i3)        {channel="mybmw:bev_rex:4711:i3:location#heading" }
 
-String                  i3RemoteCommand           "Command [%s]"                                <switch>        (i3)        {channel="mybmw:bev_rex:4711:i3:remote#command" } 
-String                  i3RemoteState             "Remote Execution State [%s]"                 <status>        (i3)        {channel="mybmw:bev_rex:4711:i3:remote#state" } 
+String                  i3RemoteCommand           "Command [%s]"                                <switch>        (i3)        {channel="mybmw:bev_rex:4711:i3:remote#command" }
+String                  i3RemoteState             "Remote Execution State [%s]"                 <status>        (i3)        {channel="mybmw:bev_rex:4711:i3:remote#state" }
 
 String                  i3DriverDoor              "Driver Door [%s]"                            <lock>          (i3)        {channel="mybmw:bev_rex:4711:i3:doors#driver-front" }
 String                  i3DriverDoorRear          "Driver Door Rear [%s]"                       <lock>          (i3)        {channel="mybmw:bev_rex:4711:i3:doors#driver-rear" }
@@ -645,51 +645,51 @@ DateTime                i3ServiceDate             "Service Date [%1$tb %1$tY]"
 String                  i3CCName                  "CheckControl Name [%s]"                      <text>          (i3)        {channel="mybmw:bev_rex:4711:i3:check#name" }
 String                  i3CCDetails               "CheckControl Details [%s]"                   <text>          (i3)        {channel="mybmw:bev_rex:4711:i3:check#details" }
 String                  i3CCSeverity              "CheckControl Severity [%s]"                  <line>          (i3)        {channel="mybmw:bev_rex:4711:i3:check#severity" }
-Switch                  i3ChargeProfileClimate    "Charge Profile Climatization"                <temperature>   (i3)        {channel="mybmw:bev_rex:4711:i3:profile#climate" }  
-String                  i3ChargeProfileMode       "Charge Profile Mode [%s]"                    <energy>        (i3)        {channel="mybmw:bev_rex:4711:i3:profile#mode" } 
-String                  i3ChargeProfilePrefs      "Charge Profile Preference [%s]"              <energy>        (i3)        {channel="mybmw:bev_rex:4711:i3:profile#prefs" } 
-String                  i3ChargeProfileCtrl       "Charge Profile Control [%s]"                 <energy>        (i3)        {channel="mybmw:bev_rex:4711:i3:profile#control" } 
-Number                  i3ChargeProfileTarget     "Charge Profile SoC Target [%s]"              <energy>        (i3)        {channel="mybmw:bev_rex:4711:i3:profile#target" } 
-Switch                  i3ChargeProfileLimit      "Charge Profile limited"                      <energy>        (i3)        {channel="mybmw:bev_rex:4711:i3:profile#limit" } 
-DateTime                i3ChargeWindowStart       "Charge Window Start [%1$tH:%1$tM]"           <time>          (i3)        {channel="mybmw:bev_rex:4711:i3:profile#window-start" } 
-DateTime                i3ChargeWindowEnd         "Charge Window End [%1$tH:%1$tM]"             <time>          (i3)        {channel="mybmw:bev_rex:4711:i3:profile#window-end" } 
-DateTime                i3Timer1Departure         "Timer 1 Departure [%1$tH:%1$tM]"             <time>          (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer1-departure" } 
-String                  i3Timer1Days              "Timer 1 Days [%s]"                           <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer1-days" } 
-Switch                  i3Timer1DayMon            "Timer 1 Monday"                              <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer1-day-mon" } 
-Switch                  i3Timer1DayTue            "Timer 1 Tuesday"                             <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer1-day-tue" } 
-Switch                  i3Timer1DayWed            "Timer 1 Wednesday"                           <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer1-day-wed" } 
-Switch                  i3Timer1DayThu            "Timer 1 Thursday"                            <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer1-day-thu" } 
-Switch                  i3Timer1DayFri            "Timer 1 Friday"                              <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer1-day-fri" } 
-Switch                  i3Timer1DaySat            "Timer 1 Saturday"                            <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer1-day-sat" } 
-Switch                  i3Timer1DaySun            "Timer 1 Sunday"                              <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer1-day-sun" } 
-Switch                  i3Timer1Enabled           "Timer 1 Enabled"                             <switch>        (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer1-enabled" }  
-DateTime                i3Timer2Departure         "Timer 2 Departure [%1$tH:%1$tM]"             <time>          (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer2-departure" } 
-Switch                  i3Timer2DayMon            "Timer 2 Monday"                              <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer2-day-mon" } 
-Switch                  i3Timer2DayTue            "Timer 2 Tuesday"                             <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer2-day-tue" } 
-Switch                  i3Timer2DayWed            "Timer 2 Wednesday"                           <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer2-day-wed" } 
-Switch                  i3Timer2DayThu            "Timer 2 Thursday"                            <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer2-day-thu" } 
-Switch                  i3Timer2DayFri            "Timer 2 Friday"                              <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer2-day-fri" } 
-Switch                  i3Timer2DaySat            "Timer 2 Saturday"                            <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer2-day-sat" } 
-Switch                  i3Timer2DaySun            "Timer 2 Sunday"                              <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer2-day-sun" } 
-Switch                  i3Timer2Enabled           "Timer 2 Enabled"                             <switch>        (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer2-enabled" }  
-DateTime                i3Timer3Departure         "Timer 3 Departure [%1$tH:%1$tM]"             <time>          (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer3-departure" } 
-Switch                  i3Timer3DayMon            "Timer 3 Monday"                              <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer3-day-mon" } 
-Switch                  i3Timer3DayTue            "Timer 3 Tuesday"                             <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer3-day-tue" } 
-Switch                  i3Timer3DayWed            "Timer 3 Wednesday"                           <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer3-day-wed" } 
-Switch                  i3Timer3DayThu            "Timer 3 Thursday"                            <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer3-day-thu" } 
-Switch                  i3Timer3DayFri            "Timer 3 Friday"                              <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer3-day-fri" } 
-Switch                  i3Timer3DaySat            "Timer 3 Saturday"                            <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer3-day-sat" } 
-Switch                  i3Timer3DaySun            "Timer 3 Sunday"                              <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer3-day-sun" } 
+
+Switch                  i3ChargeProfileClimate    "Charge Profile Climatization"                <temperature>   (i3)        {channel="mybmw:bev_rex:4711:i3:profile#climate" }
+String                  i3ChargeProfileMode       "Charge Profile Mode [%s]"                    <energy>        (i3)        {channel="mybmw:bev_rex:4711:i3:profile#mode" }
+String                  i3ChargeProfilePrefs      "Charge Profile Preference [%s]"              <energy>        (i3)        {channel="mybmw:bev_rex:4711:i3:profile#prefs" }
+String                  i3ChargeProfileCtrl       "Charge Profile Control [%s]"                 <energy>        (i3)        {channel="mybmw:bev_rex:4711:i3:profile#control" }
+Number                  i3ChargeProfileTarget     "Charge Profile SoC Target [%s]"              <energy>        (i3)        {channel="mybmw:bev_rex:4711:i3:profile#target" }
+Switch                  i3ChargeProfileLimit      "Charge Profile limited"                      <energy>        (i3)        {channel="mybmw:bev_rex:4711:i3:profile#limit" }
+DateTime                i3ChargeWindowStart       "Charge Window Start [%1$tH:%1$tM]"           <time>          (i3)        {channel="mybmw:bev_rex:4711:i3:profile#window-start" }
+DateTime                i3ChargeWindowEnd         "Charge Window End [%1$tH:%1$tM]"             <time>          (i3)        {channel="mybmw:bev_rex:4711:i3:profile#window-end" }
+DateTime                i3Timer1Departure         "Timer 1 Departure [%1$tH:%1$tM]"             <time>          (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer1-departure" }
+String                  i3Timer1Days              "Timer 1 Days [%s]"                           <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer1-days" }
+Switch                  i3Timer1DayMon            "Timer 1 Monday"                              <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer1-day-mon" }
+Switch                  i3Timer1DayTue            "Timer 1 Tuesday"                             <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer1-day-tue" }
+Switch                  i3Timer1DayWed            "Timer 1 Wednesday"                           <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer1-day-wed" }
+Switch                  i3Timer1DayThu            "Timer 1 Thursday"                            <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer1-day-thu" }
+Switch                  i3Timer1DayFri            "Timer 1 Friday"                              <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer1-day-fri" }
+Switch                  i3Timer1DaySat            "Timer 1 Saturday"                            <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer1-day-sat" }
+Switch                  i3Timer1DaySun            "Timer 1 Sunday"                              <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer1-day-sun" }
+Switch                  i3Timer1Enabled           "Timer 1 Enabled"                             <switch>        (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer1-enabled" }
+DateTime                i3Timer2Departure         "Timer 2 Departure [%1$tH:%1$tM]"             <time>          (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer2-departure" }
+Switch                  i3Timer2DayMon            "Timer 2 Monday"                              <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer2-day-mon" }
+Switch                  i3Timer2DayTue            "Timer 2 Tuesday"                             <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer2-day-tue" }
+Switch                  i3Timer2DayWed            "Timer 2 Wednesday"                           <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer2-day-wed" }
+Switch                  i3Timer2DayThu            "Timer 2 Thursday"                            <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer2-day-thu" }
+Switch                  i3Timer2DayFri            "Timer 2 Friday"                              <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer2-day-fri" }
+Switch                  i3Timer2DaySat            "Timer 2 Saturday"                            <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer2-day-sat" }
+Switch                  i3Timer2DaySun            "Timer 2 Sunday"                              <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer2-day-sun" }
+Switch                  i3Timer2Enabled           "Timer 2 Enabled"                             <switch>        (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer2-enabled" }
+DateTime                i3Timer3Departure         "Timer 3 Departure [%1$tH:%1$tM]"             <time>          (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer3-departure" }
+Switch                  i3Timer3DayMon            "Timer 3 Monday"                              <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer3-day-mon" }
+Switch                  i3Timer3DayTue            "Timer 3 Tuesday"                             <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer3-day-tue" }
+Switch                  i3Timer3DayWed            "Timer 3 Wednesday"                           <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer3-day-wed" }
+Switch                  i3Timer3DayThu            "Timer 3 Thursday"                            <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer3-day-thu" }
+Switch                  i3Timer3DayFri            "Timer 3 Friday"                              <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer3-day-fri" }
+Switch                  i3Timer3DaySat            "Timer 3 Saturday"                            <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer3-day-sat" }
+Switch                  i3Timer3DaySun            "Timer 3 Sunday"                              <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer3-day-sun" }
 Switch                  i3Timer3Enabled           "Timer 3 Enabled"                             <switch>        (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer3-enabled" }
-DateTime                i3Timer4Departure         "Timer 4 Departure [%1$tH:%1$tM]"             <time>          (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer4-departure" } 
-Switch                  i3Timer4DayMon            "Timer 4 Monday"                              <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer4-day-mon" } 
-Switch                  i3Timer4DayTue            "Timer 4 Tuesday"                             <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer4-day-tue" } 
-Switch                  i3Timer4DayWed            "Timer 4 Wednesday"                           <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer4-day-wed" } 
-Switch                  i3Timer4DayThu            "Timer 4 Thursday"                            <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer4-day-thu" } 
-Switch                  i3Timer4DayFri            "Timer 4 Friday"                              <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer4-day-fri" } 
-Switch                  i3Timer4DaySat            "Timer 4 Saturday"                            <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer4-day-sat" } 
-Switch                  i3Timer4DaySun            "Timer 4 Sunday"                              <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer4-day-sun" } 
+DateTime                i3Timer4Departure         "Timer 4 Departure [%1$tH:%1$tM]"             <time>          (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer4-departure" }
+Switch                  i3Timer4DayMon            "Timer 4 Monday"                              <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer4-day-mon" }
+Switch                  i3Timer4DayTue            "Timer 4 Tuesday"                             <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer4-day-tue" }
+Switch                  i3Timer4DayWed            "Timer 4 Wednesday"                           <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer4-day-wed" }
+Switch                  i3Timer4DayThu            "Timer 4 Thursday"                            <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer4-day-thu" }
+Switch                  i3Timer4DayFri            "Timer 4 Friday"                              <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer4-day-fri" }
+Switch                  i3Timer4DaySat            "Timer 4 Saturday"                            <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer4-day-sat" }
+Switch                  i3Timer4DaySun            "Timer 4 Sunday"                              <calendar>      (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer4-day-sun" }
 Switch                  i3Timer4Enabled           "Timer 4 Enabled"                             <switch>        (i3)        {channel="mybmw:bev_rex:4711:i3:profile#timer4-enabled" }
 
 String                  i3StatisticsTitle         "[%s]"                                        <text>          (i3)        {channel="mybmw:bev_rex:4711:i3:statistic#title" }
@@ -711,8 +711,8 @@ Number:Pressure         i3TireRLTarget            "Tire Rear Left Target [%.1f %
 Number:Pressure         i3TireRRCurrent           "Tire Rear Right [%.1f %unit%]"               <text>          (i3)        {channel="mybmw:bev_rex:4711:i3:tires#rr-current" }
 Number:Pressure         i3TireRRTarget            "Tire Rear Right Target [%.1f %unit%]"        <text>          (i3)        {channel="mybmw:bev_rex:4711:i3:tires#rr-target" }
 
-Image                   i3Image                   "Image"                                                       (i3)        {channel="mybmw:bev_rex:4711:i3:image#png" }  
-String                  i3ImageViewport           "Image Viewport [%s]"                         <zoom>          (i3)        {channel="mybmw:bev_rex:4711:i3:image#view" }  
+Image                   i3Image                   "Image"                                                       (i3)        {channel="mybmw:bev_rex:4711:i3:image#png" }
+String                  i3ImageViewport           "Image Viewport [%s]"                         <zoom>          (i3)        {channel="mybmw:bev_rex:4711:i3:image#view" }
 ```
 
 ### Sitemap File
@@ -720,47 +720,47 @@ String                  i3ImageViewport           "Image Viewport [%s]"
 ```perl
 sitemap BMW label="BMW" {
   Frame label="BMW i3" {
-    Image  item=i3Image  
-                       
-  } 
+    Image  item=i3Image
+
+  }
   Frame label="Status" {
-    Text    item=i3DoorStatus           
-    Text    item=i3WindowStatus         
-    Text    item=i3LockStatus           
-    Text    item=i3NextServiceDate              
-    Text    item=i3NextServiceMileage       
-    Text    item=i3CheckControl         
-    Text    item=i3ChargingStatus           
-    Text    item=i3LastUpdate               
+    Text    item=i3DoorStatus
+    Text    item=i3WindowStatus
+    Text    item=i3LockStatus
+    Text    item=i3NextServiceDate
+    Text    item=i3NextServiceMileage
+    Text    item=i3CheckControl
+    Text    item=i3ChargingStatus
+    Text    item=i3LastUpdate
   }
   Frame label="Range" {
-    Text    item=i3Mileage           
-    Text    item=i3Range             
-    Text    item=i3RangeElectric     
-    Text    item=i3RangeFuel         
-    Text    item=i3BatterySoc        
-    Text    item=i3Fuel              
-    Text    item=i3RadiusElectric       
-    Text    item=i3RadiusHybrid         
+    Text    item=i3Mileage
+    Text    item=i3Range
+    Text    item=i3RangeElectric
+    Text    item=i3RangeFuel
+    Text    item=i3BatterySoc
+    Text    item=i3Fuel
+    Text    item=i3RadiusElectric
+    Text    item=i3RadiusHybrid
   }
   Frame label="Remote Services" {
-    Selection item=i3RemoteCommand              
-    Text      item=i3RemoteState              
+    Selection item=i3RemoteCommand
+    Text      item=i3RemoteState
   }
   Frame label="Services" {
-    Selection    item=i3ServiceName          
-    Text         item=i3ServiceDetails          
-    Text         item=i3ServiceMileage          
-    Text         item=i3ServiceDate          
+    Selection    item=i3ServiceName
+    Text         item=i3ServiceDetails
+    Text         item=i3ServiceMileage
+    Text         item=i3ServiceDate
   }
   Frame label="CheckControl" {
-    Selection    item=i3CCName          
-    Text         item=i3CCDetails          
-    Text         item=i3CCSeverity          
+    Selection    item=i3CCName
+    Text         item=i3CCDetails
+    Text         item=i3CCSeverity
   }
   Frame label="Door Details" {
     Text    item=i3DriverDoor visibility=[i3DriverDoor!="INVALID"]
-    Text    item=i3DriverDoorRear visibility=[i3DriverDoorRear!="INVALID"]  
+    Text    item=i3DriverDoorRear visibility=[i3DriverDoorRear!="INVALID"]
     Text    item=i3PassengerDoor visibility=[i3PassengerDoor!="INVALID"]
     Text    item=i3PassengerDoorRear visibility=[i3PassengerDoorRear!="INVALID"]
     Text    item=i3Hood visibility=[i3Hood!="INVALID"]
@@ -773,77 +773,77 @@ sitemap BMW label="BMW" {
     Text    item=i3Sunroof visibility=[i3Sunroof!="INVALID"]
   }
   Frame label="Location" {
-    Text    item=i3Location          
-    Text    item=i3Heading             
+    Text    item=i3Location
+    Text    item=i3Heading
+  }
+  Frame label="Charge Profile" {
+    Switch    item=i3ChargeProfileClimate
+    Selection item=i3ChargeProfileMode
+    Text      item=i3ChargeWindowStart
+    Text      item=i3ChargeWindowEnd
+    Text      item=i3Timer1Departure
+    Switch    item=i3Timer1DayMon
+    Switch    item=i3Timer1DayTue
+    Switch    item=i3Timer1DayWed
+    Switch    item=i3Timer1DayThu
+    Switch    item=i3Timer1DayFri
+    Switch    item=i3Timer1DaySat
+    Switch    item=i3Timer1DaySun
+    Switch    item=i3Timer1Enabled
+    Text      item=i3Timer2Departure
+    Switch    item=i3Timer2DayMon
+    Switch    item=i3Timer2DayTue
+    Switch    item=i3Timer2DayWed
+    Switch    item=i3Timer2DayThu
+    Switch    item=i3Timer2DayFri
+    Switch    item=i3Timer2DaySat
+    Switch    item=i3Timer2DaySun
+    Switch    item=i3Timer2Enabled
+    Text      item=i3Timer3Departure
+    Switch    item=i3Timer3DayMon
+    Switch    item=i3Timer3DayTue
+    Switch    item=i3Timer3DayWed
+    Switch    item=i3Timer3DayThu
+    Switch    item=i3Timer3DayFri
+    Switch    item=i3Timer3DaySat
+    Switch    item=i3Timer3DaySun
+    Switch    item=i3Timer3Enabled
+    Text      item=i3Timer4Departure
+    Switch    item=i3Timer4DayMon
+    Switch    item=i3Timer4DayTue
+    Switch    item=i3Timer4DayWed
+    Switch    item=i3Timer4DayThu
+    Switch    item=i3Timer4DayFri
+    Switch    item=i3Timer4DaySat
+    Switch    item=i3Timer4DaySun
+    Switch    item=i3Timer4Enabled
   }
-  Frame label="Charge Profile" {    
-    Switch    item=i3ChargeProfileClimate     
-    Selection item=i3ChargeProfileMode        
-    Text      item=i3ChargeWindowStart        
-    Text      item=i3ChargeWindowEnd          
-    Text      item=i3Timer1Departure          
-    Switch    item=i3Timer1DayMon            
-    Switch    item=i3Timer1DayTue            
-    Switch    item=i3Timer1DayWed            
-    Switch    item=i3Timer1DayThu            
-    Switch    item=i3Timer1DayFri            
-    Switch    item=i3Timer1DaySat            
-    Switch    item=i3Timer1DaySun            
-    Switch    item=i3Timer1Enabled            
-    Text      item=i3Timer2Departure          
-    Switch    item=i3Timer2DayMon            
-    Switch    item=i3Timer2DayTue            
-    Switch    item=i3Timer2DayWed            
-    Switch    item=i3Timer2DayThu            
-    Switch    item=i3Timer2DayFri            
-    Switch    item=i3Timer2DaySat            
-    Switch    item=i3Timer2DaySun            
-    Switch    item=i3Timer2Enabled            
-    Text      item=i3Timer3Departure          
-    Switch    item=i3Timer3DayMon            
-    Switch    item=i3Timer3DayTue            
-    Switch    item=i3Timer3DayWed            
-    Switch    item=i3Timer3DayThu            
-    Switch    item=i3Timer3DayFri            
-    Switch    item=i3Timer3DaySat            
-    Switch    item=i3Timer3DaySun            
-    Switch    item=i3Timer3Enabled            
-    Text      item=i3Timer4Departure          
-    Switch    item=i3Timer4DayMon            
-    Switch    item=i3Timer4DayTue            
-    Switch    item=i3Timer4DayWed            
-    Switch    item=i3Timer4DayThu            
-    Switch    item=i3Timer4DayFri            
-    Switch    item=i3Timer4DaySat            
-    Switch    item=i3Timer4DaySun            
-    Switch    item=i3Timer4Enabled            
-  } 
   Frame label="Charge Statistics" {
-    Text    item=i3StatisticsTitle          
-    Text    item=i3StatisticsEnergy             
-    Text    item=i3StatisticsSessions          
+    Text    item=i3StatisticsTitle
+    Text    item=i3StatisticsEnergy
+    Text    item=i3StatisticsSessions
   }
 
   Frame label="Charge Sessions" {
-    Selection    item=i3SessionTitle          
-    Text         item=i3SessionDetails             
-    Text         item=i3SessionCharged          
-    Text         item=i3SessionProblems             
-    Text         item=i3SessionStatus          
+    Selection    item=i3SessionTitle
+    Text         item=i3SessionDetails
+    Text         item=i3SessionCharged
+    Text         item=i3SessionProblems
+    Text         item=i3SessionStatus
   }
   Frame label="Tires" {
-    Text    item=i3TireFLCurrent          
-    Text    item=i3TireFLTarget             
-    Text    item=i3TireFRCurrent          
-    Text    item=i3TireFRTarget             
-    Text    item=i3TireRLCurrent          
-    Text    item=i3TireRLTarget             
-    Text    item=i3TireRRCurrent          
-    Text    item=i3TireRRTarget             
+    Text    item=i3TireFLCurrent
+    Text    item=i3TireFLTarget
+    Text    item=i3TireFRCurrent
+    Text    item=i3TireFRTarget
+    Text    item=i3TireRLCurrent
+    Text    item=i3TireRLTarget
+    Text    item=i3TireRRCurrent
+    Text    item=i3TireRRTarget
   }
   Frame label="Image Properties" {
     Selection    item=i3ImageViewport
-  } 
+  }
 }
 ```
 
index 2b0ca0cd26dbd9de2574ef7be6a488fe3165657d..8d746fa3d3f96b08e643dd94035c5c19d843c8ff 100644 (file)
@@ -64,7 +64,7 @@ The channel 'full_message' has the following configuration available:
 A manual setup through a `things/mycroft.things` file could look like this:
 
 ```java
-Thing mycroft:mycroft:myMycroft "Mycroft A.I." @ "Living Room" [host="192.168.X.X", port=8181] { 
+Thing mycroft:mycroft:myMycroft "Mycroft A.I." @ "Living Room" [host="192.168.X.X", port=8181] {
     Channels:
         Type full-message-channel : Text [
             messageTypes="message.type.1,message.type.4"
index f8aa929090b099d8233ad3bc34985b4c5e672fd5..6a4bb1c5d08a2481a84f766fd8833d055fe870ad 100644 (file)
@@ -56,7 +56,7 @@ Channels available for the gates are :
 (1) : Accepted commands are : STOP, MOVE
 (2) : Valid status are : OPEN, CLOSED, OPENING, CLOSING, STOPPED
 (3) : Accepted commands are : "stop","open","close"
-(4) : There is no way to retrieve the current status of the courtesy light. It is supposed to be ON when the gate is moving and turned OFF once done. 
+(4) : There is no way to retrieve the current status of the courtesy light. It is supposed to be ON when the gate is moving and turned OFF once done.
 The delay between the moving end and light being turned off is a configuration parameter of the `courtesy` channel.
 
 ### T4 Commands
index 8c8035910ac6a3b8796984b81852d0aec9476276..dd3eb168f6ed1305d205b5b0cae99d4a688dce8c 100644 (file)
@@ -76,16 +76,16 @@ Thing mystrom:mystromplug:d6217a31 "Plug" [hostname="hostname|ip"]
 
 ```java
 Switch              PlugSwitch                      "Plug"                      {channel="mystrom:mystromplug:d6217a31:switch"}
-Number:Temperature  PlugTemperature                 "Temperature: [%.1f Â°C]"    {channel="mystrom:mystromplug:d6217a31:temperature"}  
+Number:Temperature  PlugTemperature                 "Temperature: [%.1f Â°C]"    {channel="mystrom:mystromplug:d6217a31:temperature"}
 Number:Power        PlugPower                       "Power: [%.1f W]"           {channel="mystrom:mystromplug:d6217a31:power"}
-Number:Energy       PlugEnergyConsumedSinceLastCall "Ws: [%.1f Ws]"             {channel="mystrom:mystromplug:d6217a31:energy-consumed-since-last-call"} 
+Number:Energy       PlugEnergyConsumedSinceLastCall "Ws: [%.1f Ws]"             {channel="mystrom:mystromplug:d6217a31:energy-consumed-since-last-call"}
 ```
 
 
 ### Sitemap Configuration
 
 ```perl
-Frame label="myStrom Plug" { 
+Frame label="myStrom Plug" {
     Switch item=PlugSwitch
     Text item=PlugTemperature
     Text item=PlugPower
index cf71e1dfc51a4d077b9e89b768ca4e2a2380a7db..e5f9e64748bc95e77dc201e799ccaaad08b6da19 100644 (file)
@@ -26,7 +26,7 @@ You can set the **color** for each panel and in the case of a Nanoleaf Canvas or
 
 | Nanoleaf Name          | Type | Description                                                | supported | touch support |
 | ---------------------- | ---- | ---------------------------------------------------------- | --------- | ------------- |
-| Light Panels           | NL22 | Triangles 1st Generation                                   |     X     |       -       |  
+| Light Panels           | NL22 | Triangles 1st Generation                                   |     X     |       -       |
 | Shapes Hexagon         | NL42 | Hexagons                                                   |     X     |       X       |
 | Shapes Triangles       | NL47 | Triangles                                                  |     X     |       X       |
 | Shapes Mini Triangles  | NL48 | Mini Triangles                                             |     X     |       X       |
@@ -94,13 +94,13 @@ The `thingUID` is an optional parameter. If it is not provided, the command loop
 Compare the following output with the right picture at the beginning of the article
 
 ```text
-            31413                    9162       13276     
+            31413                    9162       13276
 
 55836       56093       48111       38724       17870        5164       64279
 
-                        58086        8134                   39755             
+                        58086        8134                   39755
 
-                                    41451                                     
+                                    41451
 
 ```
 
@@ -131,7 +131,7 @@ The controller thing has the following parameters:
 
 **Important note on the topic of IPV6 ip addresses:**
 
-With firmware version 8.5.2 or newer, panels may change between being OFFLINE and ONLINE.  
+With firmware version 8.5.2 or newer, panels may change between being OFFLINE and ONLINE.
 This is due to the fact that if they are discovered with IPv6 addresses, the binding is not able to correctly send API requests to the devices.
 It is therefore recommended to disable IPv6 on the openHAB server.
 
@@ -281,11 +281,11 @@ sitemap nanoleaf label="Nanoleaf"
     Frame label="Controller" {
             Switch item=NanoleafPower
             Slider item=NanoleafBrightness
-            Colorpicker item=NanoleafColor           
+            Colorpicker item=NanoleafColor
             Text item=NanoleafHue
             Text item=NanoleafSaturation
-            Slider item=NanoleafColorTemp     
-            Setpoint item=NanoleafColorTempAbs step=100 minValue=1200 maxValue=6500            
+            Slider item=NanoleafColorTemp
+            Setpoint item=NanoleafColorTempAbs step=100 minValue=1200 maxValue=6500
             Text item=NanoleafColorMode
             Selection item=NanoleafEffect
             Text item=NanoleafRhythmState
@@ -311,7 +311,7 @@ sitemap nanoleaf label="Nanoleaf"
 rule "UpdateHueAndSat"
 when Item NanoleafColor changed
 then
-    val hsbValues = NanoleafColor.state as HSBType    
+    val hsbValues = NanoleafColor.state as HSBType
     NanoleafHue.postUpdate(hsbValues.hue.intValue)
     NanoleafSaturation.postUpdate(hsbValues.saturation.intValue)
 end
@@ -326,17 +326,17 @@ then
     var hue = 0
     var direction = 1
 
-    while(NanoleafRainbowScene.state == ON) {        
-        Thread::sleep(pause)        
+    while(NanoleafRainbowScene.state == ON) {
+        Thread::sleep(pause)
         hue = hue + (5 * direction)
         if(hue >= 359) {
             hue = 359
-            direction = direction * -1            
+            direction = direction * -1
         }
         else if (hue < 0) {
             hue = 0
-            direction = direction * -1            
-        }        
+            direction = direction * -1
+        }
         // replace NanoleafColor with Panel1Color to run rainbow on a single panel
         NanoleafColor.sendCommand(new HSBType(new DecimalType(hue), saturation, brightness))
     }
@@ -376,18 +376,18 @@ var oldEffect = null
 /*
 
 The idea behind that rule is to use one panel to switch on / off brightness control for a specific openHAB item.
- - In this case the panel with the id=36604 has been created as a thing. 
+
+ - In this case the panel with the id=36604 has been created as a thing.
  - The controller color item is named SZNanoCanvas_Color
  - The controller effect item that holds the last chosen effect is SZNanoCanvas_Effect
  - Also that thing has channel to control the color of the panel
+
 We use that specific panel to toggle the brightness swipe mode on or off.
 We indicate that mode by  setting the canvas to red. When switching it
 off we make sure we return the effect that was on before.
-Only if the brightness swipe mode is ON we then use this to control the brightness of 
+Only if the brightness swipe mode is ON we then use this to control the brightness of
 another thing which in this case is a lamp. Every swipe changes the brightness by 10.
-By extending it further this would also allow to select different items to control by 
+By extending it further this would also allow to select different items to control by
 tapping different panels before.
 
 */
@@ -403,16 +403,16 @@ then
     } else {
         brightnessMode = OFF
         sendCommand("SZNanoCanvas_Effect", oldEffect)
-    }    
+    }
 end
 
 rule "Swipe Nano to control brightness"
 when
-    Channel "nanoleaf:controller:645E3A484FFF:swipe" triggered 
+    Channel "nanoleaf:controller:645E3A484FFF:swipe" triggered
 then
     // Note: you can even control a rollershutter instead of a light dimmer
     var dimItem = MyLampDimmerItem
-     
+
     // only process the swipe if brightness mode is active
     if (brightnessMode == ON) {
         var currentBrightness = dimItem.state as Number
index 3d0b5d81dab30ffea15dab34854a8891d99d8aa1..6cbf519b667ff1229f9f7a68fc5fa1ea5b8a23c3 100644 (file)
@@ -13,7 +13,7 @@ Supported thing types
 - neatoaccount (bridge)
 - vacuumcleaner
 
-A bridge is required to connect to your Neato Cloud account.  
+A bridge is required to connect to your Neato Cloud account.
 
 All "Connected" type vacuum cleaners should be supported by this binding since they are supported by the Neato API.  As of todays date, it is only verified with Neato Connected and Neato D7 vacuum cleaners.
 
index e566e016983eb614794ee2630822bf6ec946dae1..821ab591b6f3bb1a3ecd7d15a422e067c0ad0e29 100644 (file)
@@ -121,7 +121,7 @@ rule "NEEO"
         Channel 'neeo:Brain:d487672e:forwardActions' triggered
     then
         logInfo("neeo", "action received")
-        
+
         var data = receivedEvent.getEvent()
 
         logInfo("neeo", "data: {}", data)
@@ -131,9 +131,9 @@ rule "NEEO"
         var String device = transform("JSONPATH", "$.device", data);
         var String room = transform("JSONPATH", "$.room", data);
         var String actionparameter = transform("JSONPATH", "$.actionparameter", data);
-        
+
         logInfo("neeo", "action: {}, recipe: {}, device: {}, room: {}, actionparameter: {}", action, recipe, device, room, actionparameter)
-end   
+end
 ```
 
 Since the NEEO Brain ONLY allows a single forward actions URL, the NEEO Brain Bridge can be configured to:
@@ -210,7 +210,7 @@ The following channels will be in the Room state group:
 |--------------------|------------|--------------|--------------------------------------------------------------------------------------------|
 | currentStep*       | R          | trigger      | Displays the current step being executed                                                   |
 
-Current Step will ONLY be triggered if openHAB started the corresponding recipe (or scenario).  
+Current Step will ONLY be triggered if openHAB started the corresponding recipe (or scenario).
 If the NEEO Remote or NEEO App starts the recipe or scenario, the currentStep will never be triggered.
 
 The current step is ONLY communicated from the Brain to the device that started the Recipe/Scenario.
index 52857734296b60bb61df046763e9c14aeda6c196..70e16997ec004f0146a0bfa47ce9de8238d5f7d7 100644 (file)
@@ -76,7 +76,7 @@ The device name is automatically discovered by the NeoHub Thing, and it is also
 The following Channels, and their associated channel types are shown below.
 | Channel        | Data Type            | Description                                                                                                                                  |
 |----------------|----------------------|----------------------------------------------------------------------------------------------------------------------------------------------|
-| meshNetworkQoS | Number:Dimensionless | RF mesh network Quality-of-Service; this is the percentage of configured devices that are currently connected online via the RF mesh network |  
+| meshNetworkQoS | Number:Dimensionless | RF mesh network Quality-of-Service; this is the percentage of configured devices that are currently connected online via the RF mesh network |
 
 ## Channels for "NeoStat" Thermostat
 
@@ -171,15 +171,15 @@ Number:Temperature Kitchen_Temperature "Kitchen Temperature" { channel="neohub:n
 sitemap neohub label="Heatmiser NeoHub"
 {
     Frame label="Thermostat" {
-        Text      item=Upstairs_RoomTemperature 
+        Text      item=Upstairs_RoomTemperature
         Setpoint  item=Upstairs_TargetTemperature minValue=15 maxValue=30 step=1
         Text      item=Upstairs_ThermostatOutputState
         Switch    item=Upstairs_OccupancyModePresent
-        Text      item=Upstairs_FloorTemperature 
+        Text      item=Upstairs_FloorTemperature
     }
 
     Frame label="Plug" {
-        Switch item=Downstairs_PlugOutputState  
+        Switch item=Downstairs_PlugOutputState
         Switch item=Downstairs_PlugAutoMode
     }
 
index ef62071af962142f8799833a6ff0c2a32952c6f8..3f32908ec816aa876b57dbbee7e85087335cbf57 100644 (file)
@@ -453,7 +453,6 @@ A Home is the Thing holding various modules and devices. They can hold two areas
 Depending on the way it is configured the behaviour will be adapted and available channels can vary.
 
 **Home Configuration**
-
 The Home thing has the following configuration elements:
 
 | Parameter       | Type    | Required | Description                                                                         |
@@ -463,11 +462,11 @@ The Home thing has the following configuration elements:
 | securityId      | String  | No       | Id of a home holding security monitoring devices                                    |
 | refreshInterval | Integer | No       | Refresh interval for refreshing the data in seconds. Default 180.                   |
 
-At least one of these parameter must be filled - at most two : 
+At least one of these parameter must be filled - at most two :
 
-* id or securityId
-* id or energyId
-* securityId and energyId
+- id or securityId
+- id or energyId
+- securityId and energyId
 
 (1) this parameter is kept for backward compatibility.
 
@@ -810,7 +809,7 @@ sitemap netatmo label="Netatmo" {
         Text item=Indoor_TimeStamp
         Text item=Indoor_LastSeen
     }
-    Frame label="Outdoor" { 
+    Frame label="Outdoor" {
         Text item=Outdoor_Temperature
         Text item=Outdoor_TempTrend
         Text item=Outdoor_Humidity
index 9471ae261afeac0614f330ea532e88aba698b266..663504e0bcad45ed068bad261cf1b27394cb53e9 100644 (file)
@@ -217,13 +217,13 @@ sitemap demo label="Main Menu"
         Text item=MyDevice label="Device [%s]"
         Text item=MyDeviceResponseTime label="Device Response Time [%s]"
     }
-    
+
     Frame label="SpeedTest" {
         Text item=Speedtest_Start
         Switch item=Speedtest_Running
         Default item=Speedtest_Progress
         Text item=Speedtest_Running label="Speedtest [%s]" visibility=[Speedtest_Running != "-"]
-    }    
+    }
 
     Frame label="Down" {
         Text item=Speedtest_ResultDown
@@ -238,7 +238,7 @@ sitemap demo label="Main Menu"
         Chart item=Speedtest_ResultUp period=D refresh=30000 service="influxdb" visibility=[sys_chart_period==0, sys_chart_period=="Non initialisĂ©"]
         Chart item=Speedtest_ResultUp period=W refresh=30000 service="influxdb" visibility=[sys_chart_period==1]
         Chart item=Speedtest_ResultUp period=M refresh=30000 service="influxdb" visibility=[sys_chart_period==2]
-        Chart item=Speedtest_ResultUp period=Y refresh=30000 service="influxdb" visibility=[sys_chart_period==3]  
+        Chart item=Speedtest_ResultUp period=Y refresh=30000 service="influxdb" visibility=[sys_chart_period==3]
     }
 }
 ```
@@ -257,7 +257,7 @@ if (actions === null) {
     // Send via MAC address
     actions.sendWakeOnLanPacketViaMac()
     actions.sendWakeOnLanPacket() // deprecated
-    
+
     // Send via IP address
     actions.sendWakeOnLanPacketViaIp()
 }
index 8db1297b90773a8eaa6674bb1b0a3446f755c8e3..e2986236b5dad78fa98b5c201139f80e13f7b486 100644 (file)
@@ -1,15 +1,14 @@
 # NibeGW Hardware and Compiling hints
 
-
 ## RS-485 Modules
 
-For settting up a NibeGW you need a RS485 module. 
+For settting up a NibeGW you need a RS485 module.
 While ProDiNo already have RS-485 support included, you need a separate module for Arduino Uno.
 Most cheap modules out there are compatible with 5V voltage and therefore compatible with Arduino based hardware.
 Mostly you will get one of two commonly used designs:
 
-* Modules based on Max1348 chip, which has 2 pins on the Arduino side (RXD, TXD) + VCC + GND
-* Modules based on Max485 chip, which has 4 pins on the Arduino side (RO, RE, DE, DI) + VCC + GND
+- Modules based on Max1348 chip, which has 2 pins on the Arduino side (RXD, TXD) + VCC + GND
+- Modules based on Max485 chip, which has 4 pins on the Arduino side (RO, RE, DE, DI) + VCC + GND
 
 Both types of modules work fine with NibeGW.
 The difference between the two is, that the Max485 chip needs to be switched between RX mode and TX mode manually while the Max1348 chip do this automatically.
@@ -45,16 +44,15 @@ No special configuration is needed, NibeGW supports this shield out of the box.
 ProDiNo already have Ethernet included, so there's no need for a separate Ethernet Shield.
 Also the ProDiNo Ethernet is supported by NibeGW out of the box.
 
-
 ## Arduino Uno
 
-Arduino Uno has only one serial port which is shared with USB. 
+Arduino Uno has only one serial port which is shared with USB.
 So make sure to disconnect all hardware (ethernet shield, RS485 module, etc.) while uploading the compiled sketch to the Arduino.
 Furthermore do not use the USB port while Arduino is communicating with the Nibe heatpump.
 
 For compiling NibeGW, you have to make the following changes to the code:
 
-#### Config.h:
+### Config.h
 
 Comment out support for all special boards:
 
@@ -74,7 +72,7 @@ Comment out debugging on the serial console:
 Adjust the settings for your ethernet connection, target ip and ports and modbus module to simulate.
 Leave the serial configuration untouched - it is fine for Arduino Uno.
 
-#### NibeGW.h:
+### NibeGW.h
 
 Enable support for HARDWARE_SERIAL:
 
@@ -83,12 +81,12 @@ Enable support for HARDWARE_SERIAL:
 #define HARDWARE_SERIAL
 ```
 
-##  ProDiNo ESP32 Ethernet v1 
+## ProDiNo ESP32 Ethernet v1
 
 NibeGW default settings are valid for ProDiNo ESP32 Ethernet v1 board.
 Dynamic configuration is enabled by default.
 
-### Config.h:
+### Config.h
 
 ```c
 //#define PRODINO_BOARD
@@ -96,7 +94,7 @@ Dynamic configuration is enabled by default.
 //#define TRANSPORT_ETH_ENC28J6A0
 ```
 
-### NibeGW.h:
+### NibeGW.h
 
 ```c
 #define HARDWARE_SERIAL_WITH_PINS
@@ -110,12 +108,10 @@ Install [ProDinoESP32](https://github.com/kmpelectronics/ProDinoESP32) library (
 NibeGW code is compatible with ESP32 v2.0.x board library by Espressif Systems.
 Install correct ESP32 library via Arduino IDE board manager.
 
-
 ## ProDiNo Ethernet V2
 
 Todo
 
-
 ## Debugging
 
 Debugging messages are available by connecting to port 23 to your NibeGW via telnet.
@@ -155,8 +151,9 @@ When dynamic configuration is enabled (only ESP32 boards), NibeGW can be configu
 Also OTA firmware update is supported.
 
 The following libraries are required:
- * Bleeper (tested with version 1.1.0)
- * ElegantOTA (tested with version 2.2.9)
+
+- Bleeper (tested with version 1.1.0)
+- ElegantOTA (tested with version 2.2.9)
 
 Dynamic configuration mode is loaded if input 0 is ON during boot.
 When dynamic configuration mode is activated, login to the 'Bleeper' Wi-Fi access point.
index bce258b7d22e6782092e57c1e3630b198c31700b..2a28358b1ce3269f849d98a753b75c79ef796116 100644 (file)
@@ -33,7 +33,7 @@ The bridge enables communication with other Nikobus components:
 - `rollershutter-module` - Nikobus roller shutter module,
 - `push-button` - Nikobus physical push button.
 
-## Warning : PC-Link software addresses writing convention 
+## Warning : PC-Link software addresses writing convention
 
 This binding and Niko's PC-Link software don't have the same address writing convention ! **You must invert the MSB & LSB**.
 
@@ -255,7 +255,7 @@ Each discovered button has a Nikobus address appended to its name, same as can b
 maps as
 
 ```text
- 3  1  
+ 3  1
  4  2
 ```
 
@@ -275,7 +275,7 @@ so
 maps as
 
 ```text
- 7  5  3  1  
+ 7  5  3  1
  8  6  4  2
 ```
 
index 44a529e7059534ee900e0189260b27488bc2dbb6..669151455fe05e6adbd1f5486569ff827f2e0be9 100644 (file)
@@ -115,9 +115,9 @@ sitemap nobo label="Nobø " {
 
     Frame label="Main Bedroom"{
       Switch    item=Zone_ActiveStatus
-      Text      item=Zone_ActiveWeekProfileName           
-      Text      item=Zone_ActiveWeekProfile           
-      Selection item=Zone_ActiveWeekProfile           
+      Text      item=Zone_ActiveWeekProfileName
+      Text      item=Zone_ActiveWeekProfile
+      Selection item=Zone_ActiveWeekProfile
       Setpoint  item=Zone_ComfortTemperatur minValue=7 maxValue=30 step=1 icon="temperature"
       Setpoint  item=Zone_EcoTemperatur     minValue=7 maxValue=30 step=1 icon="temperature"
       Text      item=Zone_CurrentTemperatur
@@ -162,7 +162,7 @@ The binding will now automatically update all available week profile options in
 sitemap nobo label="Nobø " {
 
     Frame label="Main Bedroom"{
-      Selection item=MainBedroom_Zone_WeekProfile   
+      Selection item=MainBedroom_Zone_WeekProfile
     }
 }
 ```
index 8bd649c1b9be3f3e7da779f34b2f583a0a259ed9..5c980e7289a321767d1a7925b4c13de5afd3c638 100644 (file)
@@ -1,6 +1,6 @@
 # Nuki Binding
 
-This is the binding for the [Nuki Smart Lock](https://nuki.io).  
+This is the binding for the [Nuki Smart Lock](https://nuki.io).
 This binding allows you to integrate, view, control and configure the Nuki Bridge, Nuki Smart Lock and Nuki Opener.
 
 ## Prerequisites
@@ -10,23 +10,23 @@ This binding allows you to integrate, view, control and configure the Nuki Bridg
     - [Nuki Combo](https://nuki.io/en/shop/nuki-combo/)
 1. The Bridge HTTP-API has to be enabled during [Initial Bridge setup](https://nuki.io/en/support/bridge/bridge-setup/initial-bridge-setup/).
 
-It is absolutely recommended to configure static IP addresses for both, the openHAB server and the Nuki Bridge!  
+It is absolutely recommended to configure static IP addresses for both, the openHAB server and the Nuki Bridge!
 
 ### Nuki Bridge Callback
 
 The Nuki Binding will manage the required callback from the Nuki Bridge to the openHAB server if _manageCallbacks_ is set to `true`.
-If _manageCallbacks_ is not set it will default to `true`.  
+If _manageCallbacks_ is not set it will default to `true`.
 Make sure that you've selected the correct primary address in the [network settings](https://www.openhab.org/docs/settings/services_system.html#network-settings).
 
 If you want to manage the callbacks from the Nuki Bridge to the openHAB server by yourself, you need to set _manageCallbacks_ to `false`.
-Then add the callback on the Nuki Bridge via Bridge API Endpoint _/callback/add_ in the format `http://<openHAB_IP>:<openHAB_PORT>/nuki/bcb`.  
-The Sheet [NukiBridgeAPI](https://docs.google.com/spreadsheets/d/1SGKWhqwqRyOGbv4NEq-8PAPjBORRixvEjRuzO-nVabQ) is a helpfull tool for listing, adding and removing callbacks.  
+Then add the callback on the Nuki Bridge via Bridge API Endpoint _/callback/add_ in the format `http://<openHAB_IP>:<openHAB_PORT>/nuki/bcb`.
+The Sheet [NukiBridgeAPI](https://docs.google.com/spreadsheets/d/1SGKWhqwqRyOGbv4NEq-8PAPjBORRixvEjRuzO-nVabQ) is a helpfull tool for listing, adding and removing callbacks.
 
 ## Supported Bridges
 
-This binding supports just one bridge type: The Nuki Bridge (`nuki:bridge`). Create one `bridge` per Nuki Bridge available in your home automation environment.  
+This binding supports just one bridge type: The Nuki Bridge (`nuki:bridge`). Create one `bridge` per Nuki Bridge available in your home automation environment.
 
-The following configuration options are available:  
+The following configuration options are available:
 
 | Parameter       | Description                                                                                                                                                                                        | Comment      |
 | --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ |
@@ -159,7 +159,7 @@ Unfortunately the Nuki Bridge is not reporting any transition states (e.g. for L
 | 255   | Undefined           |
 
 ##### Supported openerMode values
-  
+
 | Mode | Name            |
 | ---- | --------------- |
 | 2    | Door mode       |
index 26f302b4b114038ffd7b117261d6747cfb325833..66750a66e652d7506b7354d87e5f86bda1cb5d6f 100644 (file)
@@ -133,7 +133,7 @@ nuvo:amplifier:myamp "Nuvo WHA" [ serialPort="COM5", numZones=6, clockSync=false
 // serial over IP connection
 nuvo:amplifier:myamp "Nuvo WHA" [ host="192.168.0.10", port=4444, numZones=6, clockSync=false]
 
-// MPS4 server IP connection 
+// MPS4 server IP connection
 nuvo:amplifier:myamp "Nuvo WHA" [ host="192.168.0.10", port=5006, numZones=6, clockSync=false]
 
 ```
@@ -377,7 +377,7 @@ then
 end
 
 // In the below examples, a method for maintaing Metadata information
-// for a hypothetical non NuvoNet Source 3 is demonstrated 
+// for a hypothetical non NuvoNet Source 3 is demonstrated
 
 // Item_Containing_TrackLength should get a 'received update' when the track changes
 // ('changed' is not sufficient if two consecutive tracks are the same length)
@@ -392,7 +392,7 @@ then
     // '0' indicates the track is just starting (at position 0), '2' indicates to Nuvo that the track is playing
     // The Nuvo keypad will now begin counting up the elapsed time displayed (starting from 0)
     sendCommand(nuvo_system_sendcmd, "S3DISPINFO," + trackLength.toString() + ",0,2")
-    
+
 end
 
 rule "Load track name for Source 3"
@@ -406,7 +406,7 @@ then
 
     sendCommand(nuvo_s3_display_line4, trackName)
     sendCommand(nuvo_s3_display_line1, "")
-    
+
 end
 
 rule "Load album name for Source 3"
@@ -451,7 +451,7 @@ then
         }
         case "Playing": {
             // when playback starts or resumes, '2' tells Nuvo to display 'playing' on the keypad
-            // trackPosition does not need to be updated continuously, Nuvo will automatically count up the elapsed time displayed on the keypad 
+            // trackPosition does not need to be updated continuously, Nuvo will automatically count up the elapsed time displayed on the keypad
             sendCommand(nuvo_system_sendcmd, "S3DISPINFO," + trackLength.toString() + "," + trackPosition.toString() + ",2")
         }
         case "Paused": {
@@ -497,10 +497,10 @@ When the item `Top menu 2` is selected the text sent to the button channel will
 ### Rule to trigger an action based on which keypad zone where a button was pressed or menu item selected
 
 By using the `system#buttonpress` channel it is possible to trigger an action based on which keypad zone was used to send the action.
-This channel appends the zone number and a comma before the button action or menu item selection.  
+This channel appends the zone number and a comma before the button action or menu item selection.
 
-For example if the Play/Pause button is pressed on Zone 7, the channel will display: `7,PLAYPAUSE`  
-Also if a menu item from a custom menu was selected, ie: `Top menu 1` on Zone 5, the channel will display: `5,Top menu 1`  
+For example if the Play/Pause button is pressed on Zone 7, the channel will display: `7,PLAYPAUSE`
+Also if a menu item from a custom menu was selected, ie: `Top menu 1` on Zone 5, the channel will display: `5,Top menu 1`
 
 The functionality can be used to create very powerful rules as demontrated below. The following rule triggered from a menu item turns off all zones except for the zone that triggered the rule.
 
@@ -558,7 +558,7 @@ var albumName = ""
 var trackName = ""
 
 // supportedactions bitmask tells the keypad what buttons to display
-// detailed in SourceCommunicationProtocolForNNA_v1.0.pdf 
+// detailed in SourceCommunicationProtocolForNNA_v1.0.pdf
 // 0 : play/pause only
 // 196615 : play/pause/skip
 // 196639 : play/pause/skip/shuffle/repeat
@@ -676,12 +676,12 @@ end
 rule "Music Source update song elapsed time"
 when
     Item music_Music_TrackPosition received update or
-    Item music_Music_Random received update or 
+    Item music_Music_Random received update or
     Item music_Music_Repeat received update
 then
     var int trackLength = Integer::parseInt(music_Music_TrackLength.state.toString.replaceAll("[\\D]", "")) * 10
     // track position should not update continuously to prevent excessive amounts of DISPINFOTWO messages from being sent
-    // the keypad counts up the time on its own after a DISPINFOTWO message is received 
+    // the keypad counts up the time on its own after a DISPINFOTWO message is received
     var int trackPosition = Integer::parseInt(music_Music_TrackPosition.state.toString.replaceAll("[\\D]", "")) * 10
     var playState = music_Music_PlayMode.state.toString()
     var randomMode = music_Music_Random.state
@@ -706,7 +706,7 @@ then
     // DISPINFOTWO sends track time, play state, album art id, source status, etc. all in one command message
     //*SsDISPINFOTWOduration,position,deprecatedstatus,albumartid,sourcemode,sourcestatus,supportedactions
 
-    // The binding will automatically substitute the 'albumartid' token with the id of the JPG processed by the `art_url` channel 
+    // The binding will automatically substitute the 'albumartid' token with the id of the JPG processed by the `art_url` channel
     if (playState == "Playing") {
         // first '2' indicates deprecatedstatus = playing, second '2' is sourcemode = Music Server Mode
         // The Nuvo keypad will now begin counting up the elapsed time displayed (starting from trackPosition)
index 919de784dfcfa70572b474d398971a54fde67121..92bf1f986708927ee56cbd539a5947fb2b658672 100644 (file)
@@ -95,21 +95,21 @@ Within the Oceanic binding two routes are provided:
 1. Connect to the Oceanic softener over a serial port that is outside the scope of the Java Virtual Machine, setup a TCP "proxy" on the host that is connected to the softener, and make openHAB connect to that proxy over a plain TCP connection. This can be achieved with `socat`:
 
     ```shell
-    /usr/bin/socat -v TCP-LISTEN:9000 /dev/ttyUSB0,raw,echo=0           
+    /usr/bin/socat -v TCP-LISTEN:9000 /dev/ttyUSB0,raw,echo=0
     ```
 
     In the above example, the name of the host running socat, and the TCP port number 9000, will be part of the **network** Thing configuration
 1. Connect to the Oceanic softener over a serial port on the openHAB host and use `socat` to pipe the data from that serial port to a pseudo tty, which has to be manipulated in a CommPortIdentifier.PORT_RAW manner.
 
     ```shell
-    /usr/bin/socat -v /dev/ttyUSB0,raw,echo=0 pty,link=/dev/ttyS1,raw,echo=0            
+    /usr/bin/socat -v /dev/ttyUSB0,raw,echo=0 pty,link=/dev/ttyS1,raw,echo=0
     ```
 
 Both workarounds can be implemented using a systemd system manager script, for example:
 
 ```text
 [Install]
-WantedBy=multi-user.target   
+WantedBy=multi-user.target
 
 [Service]
 #Type=forking
@@ -117,7 +117,7 @@ ExecStart=/usr/bin/socat -v /dev/ttyUSB0,raw,echo=0 pty,link=/dev/ttyS1,raw,echo
 #PIDFile=/var/run/socat.pid
 User=root
 Restart=always
-RestartSec=10             
+RestartSec=10
 ```
 
 However, in order to fix permissions at the OS level, one has to issue following commands in order to make /dev/ttyS1 accessible by the 'openhab' system user (that is used to start up the openHAB runtime), and to make the tty both readable and writable.
@@ -125,7 +125,7 @@ However, in order to fix permissions at the OS level, one has to issue following
 ```shell
 sudo useradd  -G dialout openhab
 sudo chgrp dialout /dev/ttyS1
-sudo chmod 777 /dev/ttyS1 
+sudo chmod 777 /dev/ttyS1
 ```
 
 Alternatively, these commands can be executed through a script that is attached to the systemd system manager script.
index f580fa3d9c8f6981f33f741e2d191e371641a172..29b14cd25b3bef48d39ab3cd4e4979fa9a415019 100644 (file)
@@ -49,7 +49,7 @@ The `port` parameter is used to adjust non-standard OWFS installations.
 It defaults to `4304`, which is the default of each OWFS installation.
 
 Bridges of type `owserver` are extensible with channels of type `owfs-number` and `owfs-string`.
-  
+
 ### Generic (`basic`)
 
 The `basic` thing supports iButton-like chips (DS1420, DS2401/DS1990A), temperature sensors (DS18B20, DS18S20, DS1822), digital i/o chips (DS2405, DS2406, DS2408, DS2413) and counter chips (DS2423).
@@ -238,12 +238,12 @@ This is the configuration for a OneWire network consisting of an owserver as bri
 ### demo.things:
 
 ```java
-Bridge onewire:owserver:mybridge [ 
-    network-address="192.168.0.51" 
+Bridge onewire:owserver:mybridge [
+    network-address="192.168.0.51"
     ] {
-    
+
     Thing basic mysensor [
-        id="28.505AF0020000", 
+        id="28.505AF0020000",
         refresh=60
         ] {
             Channels:
@@ -251,20 +251,20 @@ Bridge onewire:owserver:mybridge [
                     ignorepor=true,
                     resolution="11"
                 ]
-        } 
-    
+        }
+
     Thing bms mybms [
         id="26.CD497C010000",
-        refresh=60, 
-        lightsensor=true, 
-        temperaturesensor="DS18B20" 
+        refresh=60,
+        lightsensor=true,
+        temperaturesensor="DS18B20"
         ] {
             Channels:
                 Type temperature-por-res : temperature [
                     ignorepor=false,
                     resolution="9"
                 ]
-        } 
+        }
 
     Thing basic mydio [
         id="3A.67F113000000"
@@ -277,7 +277,7 @@ Bridge onewire:owserver:mybridge [
                     mode="output"
                 ]
         }
-        
+
     Channels:
         Type owfs-number : crc8errors [
             path="statistics/errors/CRC8_errors"
index 155372a0fe5e01b4b90e00dc195f0262f6d8ddb6..33790be1b690a86634edb4f5d01504f69c535bb8 100644 (file)
@@ -63,9 +63,9 @@ opengarage.sitemap:
 Text item=OpenGarage_StatusText label="Status"
 Switch item=OpenGarage_Status icon="garagedoorclosed" mappings=[ON=Open]  visibility=[OpenGarage_Status == OFF]
 Switch item=OpenGarage_Status icon="garagedooropen"   mappings=[OFF=Close] visibility=[OpenGarage_Status == ON]
-Switch item=OpenGarage_Status icon="garage" 
-Contact item=OpenGarage_Status_Contact icon="garage" 
-Rollershutter item=OpenGarage_Status_Rollershutter icon="garage" 
+Switch item=OpenGarage_Status icon="garage"
+Contact item=OpenGarage_Status_Contact icon="garage"
+Rollershutter item=OpenGarage_Status_Rollershutter icon="garage"
 Text item=OpenGarage_Distance label="OG distance"
 Text item=OpenGarage_Vehicle label="Vehicle Presence"
 
index 22aeb8c28ffd1fe850266030d234d3084d81b51d..aa317b27ad44f889827333d62da377b8d40c41c7 100644 (file)
@@ -66,11 +66,11 @@ Thing can be extended with as many SafeExposure channels as needed for each skin
 
 This binding has its own IconProvider and makes available the following list of icons
 
-| Icon Name          | Dynamic | Illustration |
-|--------------------|---------|--------------|
-| oh:openuv:ozone    |   No    | ![](src/main/resources/icon/ozone.svg) |
-| oh:openuv:uv-alarm |   Yes   | ![](src/main/resources/icon/uv-alarm.svg) |
-| oh:openuv:uv-index |   Yes   | ![](src/main/resources/icon/uv-index.svg) |
+| Icon Name          | Dynamic | Illustration               |
+|--------------------|---------|----------------------------|
+| oh:openuv:ozone    | No      | ![](doc/icon/ozone.svg)    |
+| oh:openuv:uv-alarm | Yes     | ![](doc/icon/uv-alarm.svg) |
+| oh:openuv:uv-index | Yes     | ![](doc/icon/uv-index.svg) |
 
 ## Examples
 
@@ -80,7 +80,7 @@ demo.things:
 Bridge openuv:openuvapi:local "OpenUV Api" [ apikey="xxxxYYYxxxx" ] {
     Thing uvreport city1 "UV In My City" [ location="52.5200066,13.4049540", refresh=20 ]{
         Channels:
-            Type SafeExposure : parents [       
+            Type SafeExposure : parents [
                 index="III"
             ]
             Type SafeExposure : childs [
diff --git a/bundles/org.openhab.binding.openuv/doc/icon/ozone.svg b/bundles/org.openhab.binding.openuv/doc/icon/ozone.svg
new file mode 100644 (file)
index 0000000..fce47e3
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg viewBox="0 0 380.6 380.6" width="380.6" height="380.6" xmlns="http://www.w3.org/2000/svg">
+  <defs>
+    <style type="text/css">
+       .st0{fill:#1A98D5;}
+</style>
+  </defs>
+  <path class="st0" d="M 236.072 302.465 C 239.076 304.128 246.015 306.704 253.334 306.704 C 266.873 306.704 271.062 299.249 270.956 293.659 C 270.829 284.249 261.013 280.211 250.817 280.211 L 244.936 280.211 L 244.936 273.378 L 250.817 273.378 C 258.496 273.378 268.185 269.961 268.185 261.995 C 268.185 256.606 264.229 251.855 254.519 251.855 C 248.278 251.855 242.291 254.23 238.949 256.313 L 236.199 249.681 C 240.261 247.105 248.172 244.51 256.571 244.51 C 271.908 244.51 278.868 252.367 278.868 260.552 C 278.868 267.477 274.066 273.378 264.483 276.393 L 264.483 276.594 C 274.066 278.256 281.851 284.45 281.851 293.878 C 281.851 304.639 272.141 314.067 253.461 314.067 C 244.724 314.067 237.045 311.692 233.216 309.518 L 236.072 302.465 Z" style=""/>
+  <g>
+    <path class="st0" d="M325.8,190.3c0-33.7-12.2-64.6-32.4-88.4c0,2.6,0,5.1,0,7.7c-0.2,0.6-0.5,1.2-0.6,1.9 c-2.2,12.2-8.7,21.5-19.4,27.8c-14.8,8.7-34.5,6.2-46.8-5.8c-0.5-0.4-1.6-0.7-2.2-0.4c-11.9,5.9-23.8,11.8-35.7,17.8 c-9.7,4.9-19.5,9.7-29.2,14.6c-13,6.5-26.1,13-39.1,19.6c-0.6,0.3-1,1.3-1.1,2c-0.1,3.2-0.1,6.4,0,9.7c0,0.7,0.5,1.6,1.1,2 c2.4,1.4,4.9,2.6,7.3,3.8c18.9,9.5,37.9,18.9,56.8,28.4c13.3,6.6,26.6,13.3,39.9,19.9c0.5,0.3,1.6,0.1,2-0.3 c7.6-7.3,16.6-10.9,27.1-11c18.1-0.2,33.9,11.8,38.4,29.4c0.5,1.8,0.9,3.6,1.4,5.4c0,1.5,0,3,0,4.5 C313.6,254.9,325.8,224,325.8,190.3z"/>
+    <path class="st0" d="M228.2,308.6c-10.4-9.2-14.8-20.9-13.4-34.6c0.1-1.1-0.1-1.7-1.2-2.2c-11.4-5.6-22.7-11.4-34.1-17 c-23.3-11.6-46.5-23.2-69.8-34.9c-0.9-0.5-1.5-0.4-2.3,0.3c-1.7,1.6-3.5,3.2-5.4,4.5c-8.8,5.6-18.3,7.7-28.7,6 c-6.5-1.1-12.6-3.9-17.7-7.9c14.6,60,68.6,104.5,133.1,104.5c19,0,37.1-3.9,53.5-10.8C237.1,314.9,232.4,312.3,228.2,308.6z"/>
+    <path class="st0" d="M62.7,156.6c15.3-7.6,32.3-4.7,44.8,7c0.8,0.7,1.3,0.8,2.2,0.3c14.4-7.2,28.9-14.4,43.3-21.6 c20.1-10,40.1-20.1,60.2-30.1c1.3-0.7,1.6-1.4,1.5-2.8c-2.2-20.4,11.1-38.1,29.6-42.6c0.8-0.2,1.6-0.4,2.4-0.6 c-17.6-8.2-37.3-12.9-58-12.9C123,53.4,68.1,99.7,54.9,161.6C57.2,159.7,59.8,158,62.7,156.6z"/>
+  </g>
+  <path class="st0" d="M 190.3 32.1 C 211.7 32.1 232.4 36.3 251.9 44.5 C 270.7 52.5 287.7 63.9 302.2 78.4 C 316.7 92.9 328.2 109.9 336.1 128.7 C 344.3 148.2 348.5 168.9 348.5 190.3 C 348.5 211.7 344.3 232.4 336.1 251.9 C 328.1 270.7 316.7 287.7 302.2 302.2 C 287.7 316.7 270.7 328.2 251.9 336.1 C 232.4 344.3 211.7 348.5 190.3 348.5 C 168.9 348.5 148.2 344.3 128.7 336.1 C 109.9 328.1 92.9 316.7 78.4 302.2 C 63.9 287.7 52.4 270.7 44.5 251.9 C 36.3 232.4 32.1 211.7 32.1 190.3 C 32.1 168.9 36.3 148.2 44.5 128.7 C 52.5 109.9 63.9 92.9 78.4 78.4 C 92.9 63.9 109.9 52.4 128.7 44.5 C 148.2 36.3 168.9 32.1 190.3 32.1 M 190.3 0 C 85.2 0 0 85.2 0 190.3 C 0 295.4 85.2 380.6 190.3 380.6 C 295.4 380.6 380.6 295.4 380.6 190.3 C 380.6 85.2 295.4 0 190.3 0 Z"/>
+</svg>
\ No newline at end of file
diff --git a/bundles/org.openhab.binding.openuv/doc/icon/uv-alarm.svg b/bundles/org.openhab.binding.openuv/doc/icon/uv-alarm.svg
new file mode 100644 (file)
index 0000000..66394be
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg enable-background="new 0 0 64 64" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
+  <ellipse style="stroke-width: 0px; stroke: rgb(0, 0, 0); fill:#3d3c3c;" cx="32" cy="32" rx="30" ry="30"/>
+  <circle class="cls-1" cx="32.141" cy="31.8" r="17" style="fill: #b3b3b3;"/>
+  <line class="cls-2" x1="32.141" x2="32.141" y1="4.8" y2="10.8" style="fill: none; stroke: #b3b3b3; stroke-linecap: round; stroke-miterlimit: 10; stroke-width: 3px;"/>
+  <line class="cls-2" x1="32.141" x2="32.141" y1="52.8" y2="58.8" style="fill: none; stroke: #b3b3b3; stroke-linecap: round; stroke-miterlimit: 10; stroke-width: 3px;"/>
+  <line class="cls-2" x1="59.141" x2="53.141" y1="31.8" y2="31.8" style="fill: none; stroke: #b3b3b3; stroke-linecap: round; stroke-miterlimit: 10; stroke-width: 3px;"/>
+  <line class="cls-2" x1="11.141" x2="5.141" y1="31.8" y2="31.8" style="fill: none; stroke: #b3b3b3; stroke-linecap: round; stroke-miterlimit: 10; stroke-width: 3px;"/>
+  <line class="cls-2" x1="51.231" x2="46.991" y1="12.71" y2="16.95" style="fill: none; stroke: #b3b3b3; stroke-linecap: round; stroke-miterlimit: 10; stroke-width: 3px;"/>
+  <line class="cls-2" x1="17.291" x2="13.051" y1="46.65" y2="50.89" style="fill: none; stroke: #b3b3b3; stroke-linecap: round; stroke-miterlimit: 10; stroke-width: 3px;"/>
+  <line class="cls-2" x1="51.231" x2="46.991" y1="50.89" y2="46.65" style="fill: none; stroke: #b3b3b3; stroke-linecap: round; stroke-miterlimit: 10; stroke-width: 3px;"/>
+  <line class="cls-2" x1="17.291" x2="13.051" y1="16.95" y2="12.71" style="fill: none; stroke: #b3b3b3; stroke-linecap: round; stroke-miterlimit: 10; stroke-width: 3px;"/>
+  <path class="cls-3" d="M 24.931 27.55 L 24.931 33.5 C 24.931 35.28 25.601 36.18 26.801 36.18 C 28.001 36.18 28.701 35.32 28.701 33.5 L 28.701 27.55 L 31.031 27.55 L 31.031 33.34 C 31.031 36.53 29.421 38.04 26.731 38.04 C 24.041 38.04 22.591 36.6 22.591 33.31 L 22.591 27.55 L 24.931 27.55 Z" style="fill: rgb(255, 255, 255);"/>
+  <path class="cls-3" d="M 35.491 37.88 L 32.141 27.55 L 34.741 27.55 L 36.001 31.92 C 36.351 33.15 36.671 34.33 36.921 35.61 C 37.181 34.37 37.501 33.14 37.851 31.96 L 39.171 27.55 L 41.651 27.55 L 38.211 37.88 L 35.491 37.88 Z" style="fill: rgb(255, 255, 255);"/>
+</svg>
diff --git a/bundles/org.openhab.binding.openuv/doc/icon/uv-index.svg b/bundles/org.openhab.binding.openuv/doc/icon/uv-index.svg
new file mode 100644 (file)
index 0000000..ed6cb5f
--- /dev/null
@@ -0,0 +1,50 @@
+<svg version="1.2" width="52.876" height="26.86mm" viewBox="13400 10314 1399 2686" preserveAspectRatio="xMidYMid"
+   fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg">
+   <defs class="prefix__ClipPathGroup">
+      <clipPath id="prefix__a" clipPathUnits="userSpaceOnUse">
+         <path d="M13400 10314h1399v2686h-1399z" />
+      </clipPath>
+   </defs>
+   <g class="prefix__SlideGroup">
+      <g class="prefix__Slide" clip-path="url(#prefix__a)">
+         <g class="prefix__Page">
+            <g class="prefix__com_sun_star_drawing_ClosedBezierShape">
+               <path class="prefix__BoundingBox" fill="none" d="M13400 10314h1400v2687h-1400z" />
+               <path fill="#143A79"
+                  d="M13607 10314h986c114 0 206 93 206 207v2272c0 114-92 207-206 207h-986c-114 0-207-93-207-207v-2272c0-114 93-207 207-207z" />
+            </g>
+            <g class="prefix__com_sun_star_drawing_ClosedBezierShape">
+               <path class="prefix__BoundingBox" fill="none" d="M13616 10459h459v551h-459z" />
+               <path fill="#FFF"
+                  d="M13616 10820c0 113 101 189 228 189 129 0 230-76 230-189v-361h-98v352c0 75-58 115-132 115s-131-40-131-115v-352h-97v361z" />
+            </g>
+            <g class="prefix__com_sun_star_drawing_PolyPolygonShape">
+               <path class="prefix__BoundingBox" fill="none" d="M14118 10459h503v546h-503z" />
+               <path fill="#FFF" d="M14332 11004h76l212-545h-103l-146 415h-2l-146-415h-104l213 545z" />
+            </g>
+            <g class="prefix__com_sun_star_drawing_PolyPolygonShape">
+               <path class="prefix__BoundingBox" fill="none" d="M13630 11065h32v217h-32z" />
+               <path fill="#FFF" d="M13630 11281h31v-216h-31v216z" />
+            </g>
+            <g class="prefix__com_sun_star_drawing_PolyPolygonShape">
+               <path class="prefix__BoundingBox" fill="none" d="M13748 11065h154v217h-154z" />
+               <path fill="#FFF" d="M13748 11281h30v-153h1l93 153h29v-216h-31v154l-93-154h-29v216z" />
+            </g>
+            <g class="prefix__com_sun_star_drawing_ClosedBezierShape">
+               <path class="prefix__BoundingBox" fill="none" d="M13987 11065h146v217h-146z" />
+               <path fill="#FFF"
+                  d="M13988 11281h69c30 0 51-16 63-36 9-15 12-23 12-72 0-45 0-53-11-72-14-24-36-36-62-36h-71v216zm30-186h37c17 0 27 5 36 20 9 11 10 21 10 59 0 40-1 46-8 57-8 13-20 19-38 19h-37v-155z" />
+            </g>
+            <g class="prefix__com_sun_star_drawing_PolyPolygonShape">
+               <path class="prefix__BoundingBox" fill="none" d="M14212 11065h132v217h-132z" />
+               <path fill="#FFF" d="M14212 11281h131v-31h-100v-63h85v-29h-85v-63h100v-30h-131v216z" />
+            </g>
+            <g class="prefix__com_sun_star_drawing_PolyPolygonShape">
+               <path class="prefix__BoundingBox" fill="none" d="M14391 11065h161v217h-161z" />
+               <path fill="#FFF"
+                  d="M14515 11281h36l-63-111 59-105h-36l-41 75-40-75h-35l58 105-62 111h35l44-80 45 80z" />
+            </g>
+         </g>
+      </g>
+   </g>
+</svg>
\ No newline at end of file
index 6ed4cfabcecfa1ba416aaf7acb161ccb2dc13f00..c78790490b560db1e967e1bbff29069e3801b4a1 100644 (file)
@@ -142,7 +142,7 @@ For any manually added device, you must configure:
     - dry Contact or IR Interface `99`: add `3` before --> `where="399"`
     - energy meter F520/F521 numbered `1`: add `5` before  --> `where="51"`
     - energy meter F522/F523 numbered `4`: add `7` before and `#0` after --> `where="74#0"`
-    - energy meter F520/F521 the `energyRefreshPeriod` configuration parameter sets the number of minutes (the minimum value is 30, the maximum value is 1440) between refreshes for energy totalizers (default: 30 minutes) --> `energyRefreshPeriod` = 35  
+    - energy meter F520/F521 the `energyRefreshPeriod` configuration parameter sets the number of minutes (the minimum value is 30, the maximum value is 1440) between refreshes for energy totalizers (default: 30 minutes) --> `energyRefreshPeriod` = 35
     - alarm zone `2` --> `where="2"`
   - example for Zigbee devices: `where=765432101#9`. The ID of the device (ADDR part) is usually written in hexadecimal on the device itself, for example `ID 0074CBB1`: convert to decimal (`7654321`) and add `01#9` at the end to obtain `where=765432101#9`. For 2-unit switch devices (`zb_on_off_switch2u`), last part should be `00#9`.
 
@@ -340,7 +340,7 @@ Example: to activate SCENARIO number 9 on the thermo Central Unit then set chann
 
 ## Rule Actions
 
-The following Rule actions can be used to send arbitrary OpenWebNet messages on the MyHOME BUS. 
+The following Rule actions can be used to send arbitrary OpenWebNet messages on the MyHOME BUS.
 Actions can be used for example to send commands to the BUS for a WHOs not yet supported by the binding.
 
 - `Boolean sendMessage(String message)` returns a `Boolean` = `true` if the `message` (OpenWebNet frame) was successfully sent via the gateway, `false` otherwise.
@@ -418,11 +418,11 @@ Bridge openwebnet:bus_gateway:mybridge "MyHOMEServer1" [ host="192.168.1.35", pa
       bus_thermo_sensor             EXT_tempsensor       "External Temperature"     [ where="500"]
 
       bus_scenario_control          BR_scenario          "Bedroom Scenario Module"  [ where="95" ]
-            
+
       bus_cen_scenario_control      LR_CEN_scenario      "Living Room CEN"          [ where="51", buttons="4,3,8"]
       bus_cenplus_scenario_control  LR_CENplus_scenario  "Living Room CEN+"         [ where="212", buttons="1,5,18" ]
       bus_dry_contact_ir            LR_IR_sensor         "Living Room IR Sensor"    [ where="399" ]
-      
+
       bus_aux                       Alarm_Control        "Alarm control"            [ where="4" ]
 
       bus_alarm_system              Alarm_Sys            "Alarm System"             [ where="0"  ]
@@ -539,7 +539,7 @@ sitemap openwebnet label="OpenWebNet Binding Example Sitemap"
 
     Frame label="Living Room Thermo"
     {
-          Default   item=iLR_zone_temp          label="Temperature" icon="fire" valuecolor=[<20="red"] 
+          Default   item=iLR_zone_temp          label="Temperature" icon="fire" valuecolor=[<20="red"]
           Setpoint  item=iLR_zone_setTemp       label="Setpoint [%.1f Â°C]" step=0.5 minValue=15 maxValue=30
           Selection item=iLR_zone_fanSpeed      label="Fan Speed" icon="fan" mappings=[AUTO="AUTO", SPEED_1="Low", SPEED_2="Medium", SPEED_3="High"]
           Switch    item=iLR_zone_mode          label="Mode" icon="settings"
@@ -548,12 +548,12 @@ sitemap openwebnet label="OpenWebNet Binding Example Sitemap"
           Default   item=iLR_zone_hv            label="Heating valves status"
           Default   item=iLR_zone_cv            label="Conditioning valves status"
     }
-    
+
     Frame label="CEN+ Scenario activation"
     {
           Switch    item=iCENPlusProxyItem      label="My CEN+ scenario" icon="movecontrol"  mappings=[ON="Activate"]
     }
-    
+
     Frame label="Alarm"
     {
          Switch  item=iAlarm_System_State       label="Alarm state"
@@ -575,15 +575,15 @@ rule "Basic scenario WHO=0"
 when
     Channel "openwebnet:bus_scenario_control:mybridge:BR_scenario:scenario" triggered SCENARIO_02
 then
-    sendCommand(iLR_switch, ON)  
+    sendCommand(iLR_switch, ON)
 end
 
 
 rule "CEN+ virtual press from OH button"
 /* This rule triggers when the proxy item iCENPlusProxyItem is activated, for example from a button on WebUI/sitemap.
-When activated it sends a "virtual short press" event (where=212, button=5) on the BUS 
+When activated it sends a "virtual short press" event (where=212, button=5) on the BUS
 */
-when 
+when
     Item iCENPlusProxyItem received command
 then
     val actions = getActions("openwebnet","openwebnet:bus_cenplus_scenario_control:mybridge:212")
@@ -596,7 +596,7 @@ rule "CEN dimmer increase"
 when
     Channel "openwebnet:bus_cen_scenario_control:mybridge:51:button#4" triggered START_PRESS
 then
-    sendCommand(iLR_dimmer, INCREASE)  
+    sendCommand(iLR_dimmer, INCREASE)
 end
 
 
@@ -605,7 +605,7 @@ rule "CEN dimmer decrease"
 when
     Channel "openwebnet:bus_cen_scenario_control:mybridge:51:button#4" triggered RELEASE_EXTENDED_PRESS
 then
-    sendCommand(iLR_dimmer, DECREASE)  
+    sendCommand(iLR_dimmer, DECREASE)
 end
 
 ```
index d04b29438bcb65ff5059af1d43ac6635c78d4b34..cc27aad5822021fa60dadf7098de4da79428edbb 100644 (file)
@@ -9,12 +9,12 @@ So far only the [Orbit B-hyve 8-zone Indoor Timer](https://bhyve.orbitonline.com
 
 ## Discovery
 
-This binding supports the auto discovery of the sprinklers bound to your Orbit B-hyve account.  
+This binding supports the auto discovery of the sprinklers bound to your Orbit B-hyve account.
 To start the discovery you need to create a bridge thing and enter valid credentials to your Orbit B-hyve cloud account.
 
 ## Thing Configuration
 
-The bridge thing requires a manual configuration. You have to enter valid credentials to your Orbit B-hyve account, and you can also set the refresh time in seconds for polling data from the Orbit cloud.  
+The bridge thing requires a manual configuration. You have to enter valid credentials to your Orbit B-hyve account, and you can also set the refresh time in seconds for polling data from the Orbit cloud.
 There is no user configuration related to sprinkler things. Sprinklers do need a configuration property _id_ identifying the device, but the only way how to retrieve it is to let the bridge to auto discover sprinklers.
 
 ## Channels
@@ -43,42 +43,42 @@ Beside the dynamic channels each sprinkler thing provides these standard channel
 ### Things Example
 
 ```java
-Bridge orbitbhyve:bridge:mybridge "Orbit Bridge" [ email="your@ema.il", password="yourPass", refresh=30 ] {  
-  Thing sprinkler indoor_timer "Sprinkler" [ id="4cab55704e0d7ddf98c1cc37" ]  
+Bridge orbitbhyve:bridge:mybridge "Orbit Bridge" [ email="your@ema.il", password="yourPass", refresh=30 ] {
+  Thing sprinkler indoor_timer "Sprinkler" [ id="4cab55704e0d7ddf98c1cc37" ]
 }
 ```
 
 ### Items Example
 
 ```java
-Switch IrrigationControl "Irrigation active" <bhyve>  (Out_Irrigation) { channel="orbitbhyve:sprinkler:mybridge:indoor_timer:control" }  
-Switch IrrigationSmartWatering "Smart watering" <bhyve> (Out_Irrigation) { channel="orbitbhyve:sprinkler:mybridge:indoor_timer:smart_watering" }  
-Switch Irrigation1 "Zone 1" <water> (Out_Irrigation) { channel="orbitbhyve:sprinkler:mybridge:indoor_timer:zone_1" }  
-Switch Irrigation2 "Zone 2" <water> (Out_Irrigation) { channel="orbitbhyve:sprinkler:mybridge:indoor_timer:zone_2" }  
-Switch Irrigation3 "Zone 3" <water> (Out_Irrigation) { channel="orbitbhyve:sprinkler:mybridge:indoor_timer:zone_3" }  
-Switch Irrigation4 "Zone 4" <water> (Out_Irrigation) { channel="orbitbhyve:sprinkler:mybridge:indoor_timer:zone_4" }  
-Switch IrrigationP1 "Run program A" <program> (Out_Irrigation) { channel="orbitbhyve:sprinkler:mybridge:indoor_timer:program_a" }  
-Switch IrrigationP1Enable "Schedule program A" <program>  (Out_Irrigation) { channel="orbitbhyve:sprinkler:mybridge:indoor_timer:enable_program_a" }  
-String IrrigationMode "Irrigation mode [%s]" <water>  (Out_Irrigation) { channel="orbitbhyve:sprinkler:mybridge:indoor_timer:mode" }  
-Number IrrigationTime "Irrigation time [%d min]" <clock>  (Out_Irrigation) { channel="orbitbhyve:sprinkler:mybridge:indoor_timer:watering_time" }  
-Number IrrigationRainDelay "Rain delay [%d h]" <hourglass>  (Out_Irrigation) { channel="orbitbhyve:sprinkler:mybridge:indoor_timer:rain_delay" }  
-DateTime IrrigationNextStart "Next start A [%1$td.%1$tm.%1$tY %1$tR]" <clock>  (Out_Irrigation) { channel="orbitbhyve:sprinkler:mybridge:indoor_timer:next_start" }  
+Switch IrrigationControl "Irrigation active" <bhyve>  (Out_Irrigation) { channel="orbitbhyve:sprinkler:mybridge:indoor_timer:control" }
+Switch IrrigationSmartWatering "Smart watering" <bhyve> (Out_Irrigation) { channel="orbitbhyve:sprinkler:mybridge:indoor_timer:smart_watering" }
+Switch Irrigation1 "Zone 1" <water> (Out_Irrigation) { channel="orbitbhyve:sprinkler:mybridge:indoor_timer:zone_1" }
+Switch Irrigation2 "Zone 2" <water> (Out_Irrigation) { channel="orbitbhyve:sprinkler:mybridge:indoor_timer:zone_2" }
+Switch Irrigation3 "Zone 3" <water> (Out_Irrigation) { channel="orbitbhyve:sprinkler:mybridge:indoor_timer:zone_3" }
+Switch Irrigation4 "Zone 4" <water> (Out_Irrigation) { channel="orbitbhyve:sprinkler:mybridge:indoor_timer:zone_4" }
+Switch IrrigationP1 "Run program A" <program> (Out_Irrigation) { channel="orbitbhyve:sprinkler:mybridge:indoor_timer:program_a" }
+Switch IrrigationP1Enable "Schedule program A" <program>  (Out_Irrigation) { channel="orbitbhyve:sprinkler:mybridge:indoor_timer:enable_program_a" }
+String IrrigationMode "Irrigation mode [%s]" <water>  (Out_Irrigation) { channel="orbitbhyve:sprinkler:mybridge:indoor_timer:mode" }
+Number IrrigationTime "Irrigation time [%d min]" <clock>  (Out_Irrigation) { channel="orbitbhyve:sprinkler:mybridge:indoor_timer:watering_time" }
+Number IrrigationRainDelay "Rain delay [%d h]" <hourglass>  (Out_Irrigation) { channel="orbitbhyve:sprinkler:mybridge:indoor_timer:rain_delay" }
+DateTime IrrigationNextStart "Next start A [%1$td.%1$tm.%1$tY %1$tR]" <clock>  (Out_Irrigation) { channel="orbitbhyve:sprinkler:mybridge:indoor_timer:next_start" }
 ```
 
 ### Sitemap Example
 
 ```perl
-Switch item=IrrigationControl  
-Switch item=IrrigationSmartWatering  
-Switch item=Irrigation1  
-Switch item=Irrigation2  
-Switch item=Irrigation3  
-Switch item=Irrigation4  
-Setpoint item=IrrigationTime minValue=1 maxValue=240 step=1  
-Switch item=IrrigationP1  
-Switch item=IrrigationP1Enable  
-Text item=IrrigationMode  
-Text item=IrrigationRainDelay  
-Switch item=IrrigationRainDelay mappings=[0="OFF", 24="24", 48="48", 72="72"]  
-Text item=IrrigationNextStart visibility=[IrrigationP1Enable==ON]  
+Switch item=IrrigationControl
+Switch item=IrrigationSmartWatering
+Switch item=Irrigation1
+Switch item=Irrigation2
+Switch item=Irrigation3
+Switch item=Irrigation4
+Setpoint item=IrrigationTime minValue=1 maxValue=240 step=1
+Switch item=IrrigationP1
+Switch item=IrrigationP1Enable
+Text item=IrrigationMode
+Text item=IrrigationRainDelay
+Switch item=IrrigationRainDelay mappings=[0="OFF", 24="24", 48="48", 72="72"]
+Text item=IrrigationNextStart visibility=[IrrigationP1Enable==ON]
 ```
index c0e14532ff45909f7e8312a03f78ff5647fb22ce..99d4dcd98b3ce223ab319d702dd975d83fa85121 100644 (file)
@@ -1,25 +1,25 @@
 # Panasonic Blu-ray Player Binding
 
-This binding connects Panasonic Blu-ray players from 2011/2012 and UHD Blu-ray players from 2018 to openHAB.  
-**Supported Blu-ray models:** DMP-BDT110, DMP-BDT210, DMP-BDT310, DMP-BDT120, DMP-BDT220, DMP-BDT320, DMP-BBT01 & DMP-BDT500.  
-**Supported UHD models:** DP-UB420/424, DP-UB820/824 & DP-UB9000/9004.  
+This binding connects Panasonic Blu-ray players from 2011/2012 and UHD Blu-ray players from 2018 to openHAB.
+**Supported Blu-ray models:** DMP-BDT110, DMP-BDT210, DMP-BDT310, DMP-BDT120, DMP-BDT220, DMP-BDT320, DMP-BBT01 & DMP-BDT500.
+**Supported UHD models:** DP-UB420/424, DP-UB820/824 & DP-UB9000/9004.
 
 **Please note:** The player must be on the same IP subnet as the openHAB server for this binding to function.
 If the connection to the player originates from a different subnet, 404 response errors are sent in response to all requests.
 
-To enable network remote control of the Blu-ray model players, configure the following settings:  
-**Player Settings/Network/Network Settings/Remote Device Settings**  
-Then make sure you have the following values set:  
-**Remote Device Operation: On**  
-**Registration Type: Automatic**  
+To enable network remote control of the Blu-ray model players, configure the following settings:
+**Player Settings/Network/Network Settings/Remote Device Settings**
+Then make sure you have the following values set:
+**Remote Device Operation: On**
+**Registration Type: Automatic**
 
 For the UHD models, Voice Control must be enabled for the player's http interface to be active:
 **Player Settings/Network/Voice Control: On**
 
-To enable the binding to control the player while off (network active while off), Quick Start mode must be On as follows:  
-**Player Settings/System/Quick Start: On**  
+To enable the binding to control the player while off (network active while off), Quick Start mode must be On as follows:
+**Player Settings/System/Quick Start: On**
 
-**UHD Model Command Authentication:**  
+**UHD Model Command Authentication:**
 The UHD models require authentication to use the control API.
 A player key must be specified in the thing configuration in order for the `power`, `button` and `control` channels to work.
 UHD model players that are patched do not require a player key.
@@ -52,11 +52,11 @@ The Thing has a few configuration parameters:
 
 Some notes:
 
-* The control protocol of these players is undocumented and may not work consistently in all situations
-* The UHD models only support playback elapsed time (not title total time or chapter information) reporting
-* The time and chapter information is only available when playing a Blu-ray disc (not DVD or CD)
-* There are reports in forum postings that not all commands work on all of the older models (i.e.: Power does not work on DMP-BDT110)
-* Not all status information is available from all BD models (i.e.: playback elapsed time not reported by some models)
+- The control protocol of these players is undocumented and may not work consistently in all situations
+- The UHD models only support playback elapsed time (not title total time or chapter information) reporting
+- The time and chapter information is only available when playing a Blu-ray disc (not DVD or CD)
+- There are reports in forum postings that not all commands work on all of the older models (i.e.: Power does not work on DMP-BDT110)
+- Not all status information is available from all BD models (i.e.: playback elapsed time not reported by some models)
 
 ## Channels
 
@@ -125,7 +125,7 @@ sitemap panasonicbdp label="Panasonic Blu-ray" {
 
 ### Appendix A - 'button' channel command codes:
 
-**List of available button commands for BD players:**  
+**List of available button commands for BD players:**
 
 | Function                 | Command  |
 |--------------------------|----------|
@@ -180,9 +180,9 @@ sitemap panasonicbdp label="Panasonic Blu-ray" {
 | OSD (DISPLAY)            | OSDONOFF |
 | Shuttle(BD) View (buttons not in other views)||
 | Swipe in CW circle       | SHFWD2   |
-| Swipe in CCW circle      | SHREV2   | 
+| Swipe in CCW circle      | SHREV2   |
 
-**List of available button commands for UHD players:**  
+**List of available button commands for UHD players:**
 
 | Function         | Command          |
 |------------------|------------------|
index 20be7230d3cddf1c2ddf041f9abad463e36bafa7..53a1f014f3de093fd10179f36490c0b64c6bffa8 100644 (file)
@@ -13,40 +13,40 @@ Examples:
 
 Currently binding supports the following panels: EVO192, EVO48(not tested), EVO96(not tested)
 
-## Supported things
+## Supported Things
 
-| Thing      | Thing Type | Description                                                    |
-|------------|------------|----------------------------------------------------------------|
-| ip150      | Bridge     | The bridge is used to communicate with IP150 ethernet module attached to Paradox security system.|
-| panel      | Thing      | This is representation of Paradox panel. Has the general information about the main panel module, i.e. serial number, firmware/hardware/software versions, panel type, etc...|
-| partition  | Thing      | The partition is grouped aggregation of multiple zones. It's also referred in Paradox Babyware as "Area". |
-| zone       | Thing      | Paradox zone. Can be anything - magnetic, motion or any other opened/closed sensor. State channel is contact, "low battery" and "is tampered" channels are switch, label is String |
+| Thing     | Thing Type | Description                                                                                                                                                                        |
+|-----------|------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| ip150     | Bridge     | The bridge is used to communicate with IP150 ethernet module attached to Paradox security system.                                                                                  |
+| panel     | Thing      | This is representation of Paradox panel. Has the general information about the main panel module, i.e. serial number, firmware/hardware/software versions, panel type, etc...      |
+| partition | Thing      | The partition is grouped aggregation of multiple zones. It's also referred in Paradox Babyware as "Area".                                                                          |
+| zone      | Thing      | Paradox zone. Can be anything - magnetic, motion or any other opened/closed sensor. State channel is contact, "low battery" and "is tampered" channels are switch, label is String |
 
 ## Things configuration
 
-### IP150 bridge parameters
+### IP150 Bridge Parameters
 
-| Parameter         | Description                            |
-|-------------------|----------------------------------------|
-| refresh           | Value is in seconds. Defines the refresh interval when the binding polls from paradox system. Optional parameter. Default 5 seconds.|
-| ip150Password     | The password to your IP150 (not your panel PIN). Mandatory parameter.  |
-| pcPassword        | The panel programming code 3012 setting. Optional parameter. Default value is 0000.|
-| ipAddress         | IP address or hostname of your IP150. If hostname is used must be resolvable by OpenHAB. Mandatory parameter.  |
-| port              | The port used for data communication. Optional parameter. Default value is 10000.|
+| Parameter         | Description                                                                                                                             |
+|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------|
+| refresh           | Value is in seconds. Defines the refresh interval when the binding polls from paradox system. Optional parameter. Default 5 seconds.    |
+| ip150Password     | The password to your IP150 (not your panel PIN). Mandatory parameter.                                                                   |
+| pcPassword        | The panel programming code 3012 setting. Optional parameter. Default value is 0000.                                                     |
+| ipAddress         | IP address or hostname of your IP150. If hostname is used must be resolvable by OpenHAB. Mandatory parameter.                           |
+| port              | The port used for data communication. Optional parameter. Default value is 10000.                                                       |
 | panelType         | If parameter is passed, auto-discovery of panel type will be skipped. Provide string - EVO48, EVO96, EVO192, etc... Optional parameter. |
-| reconnectWaitTime | Value is in seconds. The time to wait before a reconnect occurs after socket timeout. Optional parameter. Default value is 30 seconds.|
-| maxPartitions     | Sets maximum partitions to use during refresh. If not set, maximum allowed amount from panelType will be used. Optional parameter. |
-| maxZones          | Sets maximum zones to use during refresh. If not set, maximum allowed amount from panelType will be used. Optional parameter.|
-| encrypt           | Sets if encryption has to be used. Optional parameter. Default value is false |
+| reconnectWaitTime | Value is in seconds. The time to wait before a reconnect occurs after socket timeout. Optional parameter. Default value is 30 seconds.  |
+| maxPartitions     | Sets maximum partitions to use during refresh. If not set, maximum allowed amount from panelType will be used. Optional parameter.      |
+| maxZones          | Sets maximum zones to use during refresh. If not set, maximum allowed amount from panelType will be used. Optional parameter.           |
+| encrypt           | Sets if encryption has to be used. Optional parameter. Default value is false                                                           |
 
-### IP150 bridge channels
+### IP150 Bridge Channels
 
 | Channel             | Description                                    |
 |---------------------|------------------------------------------------|
 |communicationCommand | Possible values [LOGOUT, LOGIN, RESET]         |
 |communicationState   | Shows the communication status to Paradox. Different from Bridge status. Bridge may be online and able to receive commands but communication may be offline due to various reasons. Possible values [Offline, Online] |
 
-#### Communication command channel allowed values
+#### Communication Command Values
 
 | Value  | Description                                                                        |
 |--------|------------------------------------------------------------------------------------|
@@ -54,14 +54,14 @@ Currently binding supports the following panels: EVO192, EVO48(not tested), EVO9
 | LOGIN  | Creates socket if necessary, connects to paradox system and uses the logon data from the thing parameters to connect.|
 | RESET  | Does logout and then login with recreation of communicator objects inside the code.|
 
-### Entities (zones, partitions) configuration parameters:
+### Entities (zones, partitions) Configuration
 
 | Value             | Description                                                                        |
 |-------------------|------------------------------------------------------------------------------------|
 | id                | The numeric ID of the zone/partition                                               |
 | disarmEnabled     | Optional boolean flag. Valid for partitions. When set to true the command DISARM will be allowed for the partition where the flag is enabled. CAUTION: Enabling DISARM command can be dangerous. If attacker can gain access to your openHAB (via API or UI), this command can be used to disarm your armed partition (area) |
 
-### Panel channels:
+### Panel Channels
 
 | Channel                  | Type                       | Description                                                                               |
 |--------------------------|----------------------------|-------------------------------------------------------------------------------------------|
@@ -71,7 +71,7 @@ Currently binding supports the following panels: EVO192, EVO48(not tested), EVO9
 | batteryVoltage           | Number:ElectricPotential   | Battery Voltage                                                                           |
 | panelTime                | DateTime                   | Panel internal time (Timezone is set to default zone of the Java virtual machine)         |
 
-### Partition channels:
+### Partition Channels
 
 | Channel                  | Type    | Description                                                                                   |
 |--------------------------|---------|-----------------------------------------------------------------------------------------------|
@@ -96,14 +96,15 @@ Currently binding supports the following panels: EVO192, EVO48(not tested), EVO9
 | allZonesClosed           | Contact | All zones in partition are currently closed                                                   |
 | command                  | String  | Command to be send to partition. Can be (ARM, DISARM, FORCE_ARM, INSTANT_ARM, STAY_ARM, BEEP) |
 
-### Partition detailed state possible values:
+### Partition Detailed State Values
+
 | Overall state value      | Detailed state value (depending on the sub-state)                                            |
 |--------------------------|----------------------------------------------------------------------------------------------|
 | InAlarm                  | Silent Alarm, Audible Alarm, Fire Alarm, In Alarm (if none of the first three)               |
 | Armed                    | Away Armed, Stay Armed, NoEntry Armed, Armed (if none of the first three)                    |
 | Disarmed                 | Disarmed                                                                                     |
 
-### Zone channels:
+### Zone Channels
 
 | Channel                            | Type    | Description                                                                    |
 |------------------------------------|---------|--------------------------------------------------------------------------------|
@@ -120,8 +121,7 @@ Currently binding supports the following panels: EVO192, EVO48(not tested), EVO9
 | generatedAlarm                     | Switch  | Zone has generated an alarm                                                    |
 | command                            | String  | Command for zone. Can be (BYPASS, CLEAR_BYPASS)                                |
 
-
-## Example things configuration
+## Example Things Configuration
 
 ```java
    Bridge paradoxalarm:ip150:ip150 [refresh=5, panelType="EVO192", ip150Password="********", pcPassword="0000", ipAddress=XXX.XXX.XXX.XXX", port=10000, reconnectWaitTime=10, maxPartitions=4, maxZones=50, encrypt=true ] {
@@ -140,7 +140,7 @@ Currently binding supports the following panels: EVO192, EVO48(not tested), EVO9
 }
 ```
 
-## Example items configuration
+## Example Items Configuration
 
 ```java
 //Groups
@@ -169,7 +169,7 @@ Currently binding supports the following panels: EVO192, EVO48(not tested), EVO9
     Contact CorridorFl1_MUC_state "Corridor Fl1 window: [%s]" (Floor1MUC) { channel = "paradoxalarm:zone:ip150:MagneticSensorWindow1:opened" }
 ```
 
-## Example sitemap configuration
+## Example Sitemap Configuration
 
 ```java
     Text label="Security" icon="lock" {
index b4a3cd0e8648e2160199630270543d22771cb390..0d7b3686a2f1a7c73c6f7c684699cec330eb1d78 100644 (file)
@@ -1,8 +1,8 @@
 # PegelOnline Binding
 
-Binding to observe water level from german rivers. 
+Binding to observe water level from german rivers.
 Data is provided by german **Water-Route and Shipping Agency** [WSV](https://www.pegelonline.wsv.de/).
-Goal is to monitor actual water levels from rivers nearby your home. 
+Goal is to monitor actual water levels from rivers nearby your home.
 In case of changing water levels the corresponding warning level is lowered or raised.
 
 ## Supported Things
@@ -11,25 +11,23 @@ In case of changing water levels the corresponding warning level is lowered or r
 |---------------------|---------------------------------------------------------------------------------|---------|
 | Measurement Station | Station providing water level measurements                                      | station |
 
-
 ## Discovery
 
 In case your home location coordinates are set the discovery will recognize all measurement stations within a radius of 50 km.
 Found Things are added in your Inbox.
 
-
 ## Thing Configuration
 
 Thing configuration contains 3 sections
 
-* [Station selection](station_selection)
-* [Warning Levels of selected station](warning_levels)
-* [Refresh rate](configuration_parameters)
+- [Station selection](station_selection)
+- [Warning Levels of selected station](warning_levels)
+- [Refresh rate](configuration_parameters)
 
 ### Station selection
 
-Stations can be selected with an Universally Unique Identifier (uuid). 
-It's automatically added by the Discovery. 
+Stations can be selected with an Universally Unique Identifier (uuid).
+It's automatically added by the Discovery.
 Configure a station manually using [list of all available stations](https://pegelonline.wsv.de/gast/pegeltabelle) or [stations.json](https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations.json) and choose the uuid of your desired measurement station.
 
 ### Warning Levels
@@ -38,10 +36,10 @@ Configure a station manually using [list of all available stations](https://pege
 
 Each station has specific warning levels
 
-* Warning Levels 1 (*lowest*) to 3 (*highest*) 
-* Flooding Levels
+- Warning Levels 1 (*lowest*) to 3 (*highest*)
+- Flooding Levels
 
-Unfortunately these levels cannot be queried automatically. 
+Unfortunately these levels cannot be queried automatically.
 Please select your [federal state](https://www.hochwasserzentralen.de/) and check if which levels they provide.
 The picture shows the levels of [measurement station Marburg of federal state Hesse](https://www.hlnug.de/static/pegel/wiskiweb2/stations/25830056/station.html?v=20210802152952)
 
@@ -49,7 +47,7 @@ If you cannot evaluate warning or flooding levels leave the parameter empty.
 
 ### Configuration parameters
 
-| configuration    | content   | unit | description               | required | default | 
+| configuration    | content   | unit | description               | required | default |
 |------------------|-----------|------|---------------------------|----------|---------|
 | uuid             | text      |  -   | Unique Station Identifier |     X    | N/A     |
 | warningLevel1    | integer   |  cm  | Warning Level 1           |          | N/A     |
@@ -62,7 +60,6 @@ If you cannot evaluate warning or flooding levels leave the parameter empty.
 
 ## Channels
 
-
 | channel id           | type                 | description                    |
 |----------------------|----------------------|--------------------------------|
 | timestamp            | DateTime             | Last Measurement               |
@@ -74,21 +71,21 @@ If you cannot evaluate warning or flooding levels leave the parameter empty.
 
 Possible values:
 
-* 1 : Rising
-* 0 : Steady
-* -1 : Lowering
+- 1 : Rising
+- 0 : Steady
+- -1 : Lowering
 
 ### Warning
 
 Current warning according to configuration
 
-* 0 : No Warning
-* 1 : Warning level 1
-* 2 : Warning Level 2
-* 3 : Warning Level 3
-* 4 : Decade Flooding
-* 5 : Century Flooding
-* 6 : Extreme Flooding
+- 0 : No Warning
+- 1 : Warning level 1
+- 2 : Warning Level 2
+- 3 : Warning Level 3
+- 4 : Decade Flooding
+- 5 : Century Flooding
+- 6 : Extreme Flooding
 
 ## Full Example
 
@@ -96,12 +93,12 @@ Current warning according to configuration
 
 ```java
 Thing pegelonline:station:giessen "Measurement Station Giessen" [
-    uuid="4b386a6a-996e-4a4a-a440-15d6b40226d4", 
-    refreshInterval=15, 
-    warningLevel1=550, 
-    warningLevel2=600, 
-    warningLevel3=650, 
-    hq10=732, 
+    uuid="4b386a6a-996e-4a4a-a440-15d6b40226d4",
+    refreshInterval=15,
+    warningLevel1=550,
+    warningLevel2=600,
+    warningLevel3=650,
+    hq10=732,
     hq100=786
 ]
 ```
@@ -109,14 +106,12 @@ Thing pegelonline:station:giessen "Measurement Station Giessen" [
 ### Items
 
 ```java
-DateTime         Lahn_Giessen_Timestamp      "Measurement timestamp Lahn Giessen"   {channel="pegelonline:station:giessen:timestamp" }                                                                           
-Number:Length    Lahn_Giessen_Level          "Water Level Lahn Giessen]"            {channel="pegelonline:station:giessen:level" }                                                                           
+DateTime         Lahn_Giessen_Timestamp      "Measurement timestamp Lahn Giessen"   {channel="pegelonline:station:giessen:timestamp" }
+Number:Length    Lahn_Giessen_Level          "Water Level Lahn Giessen]"            {channel="pegelonline:station:giessen:level" }
 Number           Lahn_Giessen_Trend          "Water Level Trend Lahn Giessen"       {channel="pegelonline:station:giessen:trend"}
-Number           Lahn_Giessen_Warning        "Warning Level Lahn Giessen"           {channel="pegelonline:station:giessen:warning"}   
+Number           Lahn_Giessen_Warning        "Warning Level Lahn Giessen"           {channel="pegelonline:station:giessen:warning"}
 ```
 
-
 ## Links
 
 [PegelOnline API Documentation](https://www.pegelonline.wsv.de/webservice/dokuRestapi#caching)
-
index 2f1233089960137b4f3ffcb87b7a58d03294c502..5de26c016008bf2d3c7f79134e67f1c315956f1c 100644 (file)
@@ -116,7 +116,7 @@ This is useful to keep the pool system clock set correct and automatically adjus
 
 | Channel Group                     | Channel           | Type               |     | Description  |
 | :------------------------------:  | :-------:         | :----:             | :-: | :--------------: |
-| pool, spa, aux[1-8], feature[1-8] | switch            | Switch             | RW  | Indicates the particulcar circuit or feature is on or off.  | 
+| pool, spa, aux[1-8], feature[1-8] | switch            | Switch             | RW  | Indicates the particulcar circuit or feature is on or off.  |
 | "                                 | name              | String             | R   | Name of circuit |
 | "                                 | feature           | String             | R   | Feature of ciruit |
 | poolheat, spaheat                 | setpoint          | Number:Temperature | RW  | Temperature setpoint |
@@ -260,7 +260,7 @@ Switch Pump_Run                 "Pump run"
 Number Pump_RPM                 "Pump RPM [%d]"                                 (gPool)     { channel = "pentair:intelliflo:1:pump1:rpm" }
 Number Pump_GPM                 "Pump GPM [%d]"                                 (gPool)     { channel = "pentair:intelliflo:1:pump1:gpm" }
 Number Pump_Power               "Pump Power [%d W]"                             (gPool)     { channel = "pentair:intelliflo:1:pump1:power" }
-Number Pump_Error               "Pump Error [%d]"                               (gPool)     { channel = "pentair:intelliflo:1:pump1:error" }                                                                                                                                      
+Number Pump_Error               "Pump Error [%d]"                               (gPool)     { channel = "pentair:intelliflo:1:pump1:error" }
 Number Pump_Status1             "Pump Status 1 [%d]"                            (gPool)     { channel = "pentair:intelliflo:1:pump1:status1" }
 Number Pump_Status2             "Pump Status 2 [%d]"                            (gPool)     { channel = "pentair:intelliflo:1:pump1:status2" }
 
@@ -269,7 +269,7 @@ Number Schedule1_End            "Schedule 1 end"
 Number Schedule1_Type           "Schedule 1 type"                               (gPool)     { channel = "pentair:controller:1:main:schedule1#type" }
 String Schedule1_String         "Schedule 1 string"                             (gPool)     { channel = "pentair:controller:1:main:schedule1#schedule" }
 Number Schedule1_Circuit        "Schedule 1 circuit"                            (gPool)     { channel = "pentair:controller:1:main:schedule1#circuit" }
-String Schedule1_Days           "Schedule 1 days"                               (gPool)     { channel = "pentair:controller:1:main:schedule1#days" }                                                                                                                                     
+String Schedule1_Days           "Schedule 1 days"                               (gPool)     { channel = "pentair:controller:1:main:schedule1#days" }
 ```
 
 ### sitemap
index d8d7e7486ee46ab1b16a5423ad7483514407e4da..42a5a1e2d54e92df9a7ff6874cc1d3003a03ed18 100644 (file)
@@ -1,6 +1,6 @@
 # PHC Binding
 
-This binding allows you to integrate modules(at the Moment AM, EM, JRM and DIM) of PHC, without the PHC control (STM), in openHAB.  
+This binding allows you to integrate modules(at the Moment AM, EM, JRM and DIM) of PHC, without the PHC control (STM), in openHAB.
 
 The serial protocol is mainly extracted, with thanks to the developers from the projects [PHCtoUDP](https://sourceforge.net/projects/phctoudp/) and [OpenHC](https://sourceforge.net/projects/openhc/?source=directory).
 
@@ -9,7 +9,7 @@ While the Wiki is offline you can find a PDF version [here](https://phc-forum.de
 
 ## Serial Communication
 
-The binding was tested with QinHeng Electronics HL-340 USB-Serial adapter (RS485) and the Digitus DA-70157 (FTDI/FT323RL) on Raspbian Ubilinux (Up Board) and Windows 10:  
+The binding was tested with QinHeng Electronics HL-340 USB-Serial adapter (RS485) and the Digitus DA-70157 (FTDI/FT323RL) on Raspbian Ubilinux (Up Board) and Windows 10:
 
 | Device/OS                | adaptor       | result       |
 |--------------------------|---------------|--------------|
@@ -25,7 +25,7 @@ If there are many modules on one bridge, the initialization can take a few minut
 Sometimes after initialization, you might have to switch two times or the reaction could be a bit slow, but after you used a channel it should all work fine.
 
 For all devices running with Linux that use the ch341 driver (HL-340), the new version (ch34x) is needed.
-A guide how to install this can be found here: [CH340/341 UART Driver for Raspberry Pi](https://github.com/aperepel/raspberrypi-ch340-driver).  
+A guide how to install this can be found here: [CH340/341 UART Driver for Raspberry Pi](https://github.com/aperepel/raspberrypi-ch340-driver).
 
 If you don´t have the same kernel as used in the guide you have to compile the module yourself. In the guide is described a specific way for the Raspberry Pi. With another Linux version you can go the normal way with linux-headers.
 
index 6516b910427689d6557133db8e1dadf7514fa96f..1b618a9145bd586e0ef59047be4848b2e2f74e81 100644 (file)
@@ -143,7 +143,7 @@ Pi-hole binding provides actions to use in rules:
 
 ```java
 import java.util.concurrent.TimeUnit
-        
+
 rule "test"
 when
     /* when */
@@ -152,16 +152,16 @@ then
        if (actions !== null) {
             // disable blocking for 5 * 60 seconds (5 minutes)
             actions.disableBlocking(5 * 60)
-    
+
             // disable blocking for 5 minutes
             actions.disableBlocking(5, TimeUnit.MINUTES)
-    
+
             // disable blocking for infinity
             actions.disableBlocking(0)
             actions.disableBlocking()
-    
+
             // enable blocking
             actions.enableBlocking()
-       } 
+       }
 end
 ```
index 7fc0d81d9ad8806fb29252fc3af46d7e3fea2dcf..6b244456ef483e7c78c44c38b31c3cd5168076e2 100644 (file)
@@ -4,15 +4,15 @@ This binding can read information from multiple PLEX players connected to a PLEX
 
 It can be used for multiple scenarios:
 
-* Drive light changes based on player status. For instances turn off the lights when movie starts playing and turn them back on when movie is stopped/paused
-* Create a page that displays currently played media of one or more player connected to the server.
-* Send social media messages when player plays new media
-* Inform what the end time of the currently played media is
+- Drive light changes based on player status. For instances turn off the lights when movie starts playing and turn them back on when movie is stopped/paused
+- Create a page that displays currently played media of one or more player connected to the server.
+- Send social media messages when player plays new media
+- Inform what the end time of the currently played media is
 
 The binding can also control `PLAY/PAUSE/NEXT/PREVIOUS` the players which can be used for:
 
-* Start playing some music when someone enters a room
-* Pause the movie when motion is detected
+- Start playing some music when someone enters a room
+- Pause the movie when motion is detected
 
 ## Supported Things
 
@@ -30,7 +30,7 @@ Next step is to *PLAY* something on the desired player. Only when media is playe
 
 The PLEX Server needs to be configured first. The hostname of the PLEX server is mandatory and the either the PLEX token (recommended) or the username/password of the PLEX server (not recommended).
 
-Then find the PLEX token please follow the instructions from the PLEX support forum: 
+Then find the PLEX token please follow the instructions from the PLEX support forum:
 
 1. Sign in to your Plex account in Plex Web App
 2. Browse to a library item and view the XML for it
@@ -54,7 +54,7 @@ You can add multiple PLEX players. You can choose to find the player by autodisc
 #### Autodiscovery
 
 Turn on the player you want to add and *play* some media on it. Navigate to `/settings/things/add/plex` and start the auto discover.
-The player will be found and you can add it. 
+The player will be found and you can add it.
 
 #### Manual adding a player Thing
 
index e2d5f135f12d25a8f494db8c14d3be3e8a43dfec..c495f67b709b209a2b9338fba170f08f0034aa28 100644 (file)
@@ -1,7 +1,7 @@
 # Prowl Binding
 
-This is the binding for the [Prowl](https://www.prowlapp.com) iOS push service.  
-It has been written from scratch and therefore it is not based on the original 1.x Prowl binding.  
+This is the binding for the [Prowl](https://www.prowlapp.com) iOS push service.
+It has been written from scratch and therefore it is not based on the original 1.x Prowl binding.
 It has no other purpose than sending push messages to iOS devices.
 
 ## Binding Configuration
@@ -10,8 +10,8 @@ The binding does not require any manual configuration on the binding level.
 
 ## Thing Configuration
 
-This binding has only one thing called _Broker_. If you want to use this binding, just add a broker instance and configure the API key, which you can generate on the Prowl website.  
-You can also modify the _application_ property, which identifies the originator of these push messages.  
+This binding has only one thing called _Broker_. If you want to use this binding, just add a broker instance and configure the API key, which you can generate on the Prowl website.
+You can also modify the _application_ property, which identifies the originator of these push messages.
 If you want to have specific refresh time for the remaining free push messages channel, you can edit the _refresh_ property.
 Anyway beware - every check consumes one free push message you can send in an hour.
 
@@ -33,13 +33,13 @@ Thing prowl:broker:mybroker "Prowl Broker" [ apiKey="000000000000000000000000000
 
 ### Rules
 
-Once you have created the broker thing with a valid API key, you can use the Prowl service in your rules.  
+Once you have created the broker thing with a valid API key, you can use the Prowl service in your rules.
 First you need to create an instance of the broker just before any call or on the top rules level. (replace the _mybroker_ with the right name of your instance).
 Then you can call method _pushNotification_, which requires two parameters - _event_ and _description_.
 There is also an optional third parameter _priority_ which represents the message priority (very low) -2,-1,0,1,2 (emergency). The default priority is 0.
 
 ```java
-val prowl = getActions("prowl","prowl:broker:mybroker")  
+val prowl = getActions("prowl","prowl:broker:mybroker")
 prowl.pushNotification("Event", "This is the description of the event")
 prowl.pushNotification("Emergency Event", "This is the description of the event", 2)
 ```
index 9a7fda811d3971ea8298afe64e918bf7466fb321..fef5c3b9951addac24febd1630e1117fffe470ba 100644 (file)
@@ -21,8 +21,8 @@ Upcoming departures for a single station. This is what you would usually see dis
 
 #### UI based Configuration
 
-`station` is the station name for which to display departures.  
-The name has to be one that is used by the swiss federal railways.  
+`station` is the station name for which to display departures.
+The name has to be one that is used by the swiss federal railways.
 Please consult their [website](https://sbb.ch/en).
 
 #### Textual configuration
index f43b04f59e895efecb322c47f8fda18edfe71ff8..410cda133b016fe5ad7a5f627c0bbf89418a1a38 100644 (file)
@@ -38,10 +38,10 @@ binding.pulseaudio:sourceOutput=false
 
 ## Thing Configuration
 
-The Pulseaudio bridge requires the host (ip address or a hostname) and a port (default: 4712) as a configuration value in order for the binding to know where to access it.  
+The Pulseaudio bridge requires the host (ip address or a hostname) and a port (default: 4712) as a configuration value in order for the binding to know where to access it.
 A Pulseaudio device requires at least an identifier. For sinks and sources, you can use the name or the description. For sink inputs and source outputs, you can use the name or the application name.
-To know without hesitation the correct value to use, you should use the command line utility `pactl`. For example, to find the name of a sink:  
-`pactl -s <ip-address|hostname> list sinks | grep "name:"`  
+To know without hesitation the correct value to use, you should use the command line utility `pactl`. For example, to find the name of a sink:
+`pactl -s <ip-address|hostname> list sinks | grep "name:"`
 If you need to narrow the identification of a device (in case name or description are not consistent and sufficient), you can use the `additionalFilters` parameter (optional/advanced parameter), in the form of one or several (separator '###') regular expression(s), each one matching a property value of the pulseaudio device. You can use every properties listed with `pactl`.
 
 ## Channels
index 5682c913892cf399e1fc2a7751b5a0fcd0052f07..712f9173fa1ca73e9eabf409fbd3ed5223b1b14c 100644 (file)
@@ -23,8 +23,8 @@ You can reach it via [https://pushover.net/apps/clone/openHAB](https://pushover.
 | `title`                 | text    | The default title of a message (default: `openHAB`).                                                                                                                                                                                                                                                          |
 | `format`                | text    | The default format (`none`, `html` or `monospace`) of a message (default: `none`).                                                                                                                                                                                                                            |
 | `sound`                 | text    | The notification sound on target device (default: `default`) (see [supported notification sounds](https://pushover.net/api#sounds)). This list will be populated dynamically during runtime with 21 different sounds plus user-defined [custom sounds](https://blog.pushover.net/posts/2021/3/custom-sounds). |
-| `retry`                 | integer | The retry parameter specifies how often (in seconds) the Pushover servers will send the same emergency-priority notification to the user (default: `300`). **advanced**                                                                                                                                                          |
-| `expire`                | integer | The expire parameter specifies how long (in seconds) your emergency-priority notification will continue to be retried (default: `3600`). **advanced**                                                                                                                                                                            |
+| `retry`                 | integer | The retry parameter specifies how often (in seconds) the Pushover servers will send the same emergency-priority notification to the user (default: `300`). **advanced**                                                                                                                                       |
+| `expire`                | integer | The expire parameter specifies how long (in seconds) your emergency-priority notification will continue to be retried (default: `3600`). **advanced**                                                                                                                                                         |
 | `timeout`               | integer | The timeout parameter specifies maximum number of seconds a request to Pushover can take. **advanced**                                                                                                                                                                                                        |
 
 ## Channels
@@ -74,6 +74,7 @@ For priority `2` only, the action returns a `String` value (the `receipt`) if th
 For other priorities, the action always returns an empty `String`.
 
 - `cancelPriorityMessage(String receipt)` - This method is used to cancel an emergency priority message.
+
 The action returns a `Boolean` value to indicate if the message was cancelled successfully or not.
 
 ## Full Example
index 998492a38d86d2a0b2f03a9c91be7bf5d7a48ad3..b11319af235ce38f166c7b0adbbca65e0310fe1f 100644 (file)
@@ -33,7 +33,7 @@ Panel will _reboot_
 
 `Settings` --> `Advanced Settings` --> `Installation` --> `Devices` --> `Wi-Fi Devices` --> `Reveal Secure Token` (copy token to use in panel configuration)
 
-At this point you may add the panel thing in openHAB using the secure token along with the IP or host name of the panel.  
+At this point you may add the panel thing in openHAB using the secure token along with the IP or host name of the panel.
 
 ### Partition (Bridge)
 
@@ -121,5 +121,5 @@ Contact    ZoneKitchenWindows_ZoneContact        "Kitchen Windows Zone Contact"
 
 Group      ZoneMotionDetector1                   "Motion Detector 1"                                                      ["Equipment"]
 Number     ZoneMotionDetector_ZoneState1         "Motion Detector 1 Zone State"                  (ZoneMotionDetector1)    ["Point"]        {channel="qolsysiq:zone:home:0:2:state"}
-String     ZoneMotionDetector_ZoneStatus1        "Motion Detector 1 Zone Status"                 (ZoneMotionDetector1)    ["Point"]        {channel="qolsysiq:zone:home:0:2:status"} 
+String     ZoneMotionDetector_ZoneStatus1        "Motion Detector 1 Zone Status"                 (ZoneMotionDetector1)    ["Point"]        {channel="qolsysiq:zone:home:0:2:status"}
 ```
index 0f6d9a677ffaad9ca00031da1d46dc7b222e45a0..e1d4ad748cc04dbaa769a046167e998b4b50ec88 100644 (file)
@@ -36,7 +36,7 @@ The countries need to be the country code not the full name, for example `US` an
 The binding will auto select your country based on openHAB's settings that you made when setting up openHAB.
 It makes sense to do this for languages if the built in way of `languageCount` does not work for your use case.
 Genres are a good example for using the metadata, only show the styles of music and other tags that you like.
-If in doubt you can use the [Event Monitor in the Developer Sidebar](https://www.openhab.org/docs/tutorial/tips-and-tricks.html#event-monitor) to watch what commands are sent to the bindings channels. 
+If in doubt you can use the [Event Monitor in the Developer Sidebar](https://www.openhab.org/docs/tutorial/tips-and-tricks.html#event-monitor) to watch what commands are sent to the bindings channels.
 
 ## Channels
 
index 0d3661e9a76243602b3affc5af0d9e5cb15cb82d..b341f221b0d82a87bc25f03e48acc9aafd3dd163 100644 (file)
@@ -10,11 +10,11 @@ The Rego heat pump binding supports:
 The Rego 6xx controllers family is used in many heat pumps such as IVT/Bosch/Autotherm/Carrier and others.
 
 Rego 6xx unit contain an interface marked as service.
-Header of this interface is close to the control unit. This is 5V (TTL) serial interface and is connected by a 9 pin can/d-sub connector. Pinout:  
+Header of this interface is close to the control unit. This is 5V (TTL) serial interface and is connected by a 9 pin can/d-sub connector. Pinout:
 
-2 - RxD  
-3 - TxD  
-4 - +5V  
+2 - RxD
+3 - TxD
+4 - +5V
 5 - GND
 
 Serial communication is using 19200 bps, 8 bit, no parity, 1 stop bit.
index 4b6e35efc32a4b56b97ac957311c247e9773b42d..fd868a7e5b2da1939c11f3d07c3eeba8d136a1ac 100644 (file)
@@ -61,7 +61,7 @@ The "externaltemperature" only works on a few cars.
 The "hvactargettemperature" is used by the hvacstatus ON command for pre-conditioning the car.
 This seams to only allow values 19, 20 and 21 or else the pre-conditioning command will not work.
 
-The 'pause' and 'chargingmode' may not work on some cars. 
+The 'pause' and 'chargingmode' may not work on some cars.
 As an example, 'chargingmode' does not work on Dacia Spring cars.
 
 The Kamereon API Key changes periodically, which causes a communication error.
index d35205ff05516f7ce823d15e4b602b5474b430a3..788ad69d9b41138b540891796f9d970c0ee34814 100644 (file)
@@ -703,8 +703,8 @@ Until then, commands 1, 3, 5-13 and 15 are considered ON and 0, 2, 4 and 14 are
 There are a number of ways to detect the commandId values for your device.
 
 - You can turn on DEBUG messages for the rfxcom binding by adding the line `<Logger level="DEBUG" name="org.openhab.binding.rfxcom"/>` to your `log4j2.xml`.
-You will then be able to see the commandId in the log file when you trigger the device.  
-- You can link a Number Item to the commandId channel. The item will be updated with the detected commandId when you trigger the device.  
+You will then be able to see the commandId in the log file when you trigger the device.
+- You can link a Number Item to the commandId channel. The item will be updated with the detected commandId when you trigger the device.
 - You can use RFXmngr to look at the data from the device. Use the last letter/number of the hexadecimal "Code", and convert it from hexadecimal to decimal.
 
 #### Examples
index 60b88812a67ed12ac6339a2839248cc7d5ff1425..6557c8ba1db0e3d6c6f67a040530f99f4b93b77e 100644 (file)
@@ -56,37 +56,37 @@ Some Notes:
 
 - The values for `activeApp`, `activeAppName`, `playMode`, `timeElapsed`, `timeTotal`, `activeChannel`, `signalMode`, `signalQuality`, `channelName`, `programTitle`, `programDescription`, `programRating`, `power` & `powerState` refresh automatically per the configured `refresh` interval.
 
-**List of available button commands for Roku streaming devices:**  
-Home  
-Rev  
-Fwd  
-Play  
-Select  
-Left  
-Right  
-Up  
-Down  
-Back  
-InstantReplay  
-Info  
-Backspace  
-Search  
-Enter  
-FindRemote  
-  
-**List of additional button commands for Roku TVs:**  
-ChannelUp  
-ChannelDown  
-VolumeUp  
-VolumeDown  
-VolumeMute  
-InputTuner  
-InputHDMI1  
-InputHDMI2  
-InputHDMI3  
-InputHDMI4  
-InputAV1  
-PowerOff  
+**List of available button commands for Roku streaming devices:**
+Home
+Rev
+Fwd
+Play
+Select
+Left
+Right
+Up
+Down
+Back
+InstantReplay
+Info
+Backspace
+Search
+Enter
+FindRemote
+
+**List of additional button commands for Roku TVs:**
+ChannelUp
+ChannelDown
+VolumeUp
+VolumeDown
+VolumeMute
+InputTuner
+InputHDMI1
+InputHDMI2
+InputHDMI3
+InputHDMI4
+InputAV1
+PowerOff
 POWERON _(NOTE: POWERON needs to be completely capitalized due to a bug with older Roku devices)_
 
 ## Full Example
index 1c590e83f760923327503cbbe6ca58b82fff49a1..c30424889559807dbf145a9a6049a48b9d7dcabc 100644 (file)
@@ -87,6 +87,6 @@ String  SWC_presstrend          "Pressure Trend"                        (gSager)
 String  SWC_forecast            "Weather Forecast"                      (gSager)                {channel="sagercaster:sagercaster:triel:output#forecast"}
 String  SWC_velocity            "Wind Velocity"                         (gSager)                {channel="sagercaster:sagercaster:triel:output#velocity"}
 String  SWC_windfrom            "Wind from"                             (gSager)                {channel="sagercaster:sagercaster:triel:output#wind-from"}
+
 DateTime SWC_ObservationTime    "Timestamp [%1$tH:%1$tM]"       <time>  (gSager, gTrackAge)     {channel="sagercaster:sagercaster:triel:output#timestamp" }
 ```
index a86c0d4ed28fcde864029b752c114c27195737b8..d9ac88a42a77f18f7e858012483068bd4651aa4d 100644 (file)
@@ -2,7 +2,7 @@
 
 OpenHAB binding to the SAIC-API used by MG cars (MG4, MG5 EV, MG ZSV...)
 
-It enables iSMART users to get battery status and other data from their cars. 
+It enables iSMART users to get battery status and other data from their cars.
 They can also pre-heat their cars by turning ON the AC.
 
 Based on the work done here: https://github.com/SAIC-iSmart-API
@@ -17,7 +17,7 @@ European iSMART accounts and vehicles.
 
 ## Discovery
 
-Vehicle discovery is implemented. 
+Vehicle discovery is implemented.
 Once an account has been configured it can be scanned for vehicles.
 
 ## Thing Configuration
@@ -90,7 +90,7 @@ demo.items:
 ```java
 Number                 MG5_Total_Distance_Driven               "MG5 Total Distance Driven"     ["Length"]              {channel="saicismart:vehicle:myaccount:mymg5:odometer"}
 Number                 MG5_Electric_Range                      "MG5 Electric Range"            ["Length"]              {channel="saicismart:vehicle:myaccount:mymg5:range-electric"}
-Number         MG5_Battery_Level                       "MG5 Battery Level"             ["Energy"]              {channel="saicismart:vehicle:myaccount:mymg5:soc"}  
+Number         MG5_Battery_Level                       "MG5 Battery Level"             ["Energy"]              {channel="saicismart:vehicle:myaccount:mymg5:soc"}
 Number                 MG5_Power_Usage                         "MG5 Power Usage"               ["Power"]               {channel="saicismart:vehicle:myaccount:mymg5:power"}
 Switch                 MG5_Charging                            "MG5 Charging"                                          {channel="saicismart:vehicle:myaccount:mymg5:charging"}
 Switch                 MG5_Engine_State                        "MG5 Engine State"                                      {channel="saicismart:vehicle:myaccount:mymg5:engine"}
index d05142d81987d45dd8e6d68cd546d29f6ef353cd..6dadffdf3baf2830c30056c7a0eb8f50443298b8 100755 (executable)
@@ -12,7 +12,7 @@ The TV's are discovered through UPnP protocol in the local network and all devic
 
 ## Binding Configuration
 
-Basic operation does not require any special configuration. 
+Basic operation does not require any special configuration.
 
 The binding has the following configuration options, which can be set for "binding:samsungtv":
 
@@ -35,7 +35,7 @@ The binding has the following configuration options, which can be set for "bindi
 The Samsung TV Thing requires the host name and port address as a configuration value in order for the binding to know how to access it.
 Samsung TV's publish several UPnP devices and the hostname is used to recognize those UPnP devices.
 Port address is used for remote control emulation protocol.
-Additionally, a refresh interval can be configured in milliseconds to specify how often TV resources are polled. Default is 1000 ms.  
+Additionally, a refresh interval can be configured in milliseconds to specify how often TV resources are polled. Default is 1000 ms.
 
 E.g.
 
@@ -45,19 +45,19 @@ Thing samsungtv:tv:livingroom [ hostName="192.168.1.10", port=55000, macAddress=
 
 Different ports are used on different models. It may be 55000, 8001 or 8002.
 
-If you have a <2016 TV, the interface will be *Legacy*, and the port is likely 55000.  
-If you have a >2016 TV, the interface will be either *websocket* on port 8001, or *websocketsecure* on port 8002.  
+If you have a <2016 TV, the interface will be *Legacy*, and the port is likely 55000.
+If you have a >2016 TV, the interface will be either *websocket* on port 8001, or *websocketsecure* on port 8002.
 If your TV supports *websocketsecure*, you **MUST** use it, otherwise the `keyCode` and all dependent channels will not work.
 
-In order for the binding to control your TV, you will be asked to accept the remote connection (from openHAB) on your TV. You have 30 seconds to accept the connection. If you fail to accept it, then most channels will not work.  
-Once you have accepted the connection, the returned token is stored in the binding, so you don't have to repeat this every time openHAB is restarted.  
+In order for the binding to control your TV, you will be asked to accept the remote connection (from openHAB) on your TV. You have 30 seconds to accept the connection. If you fail to accept it, then most channels will not work.
+Once you have accepted the connection, the returned token is stored in the binding, so you don't have to repeat this every time openHAB is restarted.
 
-If the connection has been refused, or you don't have your TV configured to allow remote connections, the binding will not work. If you are having problems, check the settings on your TV, sometimes a family member denies the popup (because they don't know what it is), and after that nothing will work.  
+If the connection has been refused, or you don't have your TV configured to allow remote connections, the binding will not work. If you are having problems, check the settings on your TV, sometimes a family member denies the popup (because they don't know what it is), and after that nothing will work.
 You can set the connection to `Allow` on the TV, or delete the openHAB entry, and try the connection again.
 
 The binding will try to automatically discover the correct protocol for your TV, so **don't change it** unless you know it is wrong.
 
-Under `advanced`, you can enter a Smartthings PAT, and Device Id. This enables more channels via the Smartthings cloud. This is only for TV's that support Smartthings. No hub is required. The binding will attempt to discover the device ID for your TV automatically, you can enter it manually if automatic detection fails.  
+Under `advanced`, you can enter a Smartthings PAT, and Device Id. This enables more channels via the Smartthings cloud. This is only for TV's that support Smartthings. No hub is required. The binding will attempt to discover the device ID for your TV automatically, you can enter it manually if automatic detection fails.
 Also under `advanced`, you have the ability to turn on *"Subscribe to UPnP events"*. This is off by default. This option reduces (but does not eliminate) the polling of UPnP services. You can enable it if you want to test it out. If you disable this setting (after testing), you should power cycle your TV to remove the old subscriptions.
 
 For >2019 TV's, there is an app workaround, see [App Discovery](#app-discovery) for details.
@@ -93,8 +93,8 @@ TVs support the following channels:
 | artColorTemperature | Number   | RW         | ArtMode Color temperature Minnimum value is -5 and maximum 5                                            |
 | artOrientation      | Switch   | RW         | TV orientation, Landscape (OFF) or Portrait (ON)                                                        |
 
-**NOTE:** channels: brightness, contrast, sharpness, colorTemperature don't work on newer TV's.  
-**NOTE:** channels: sourceName, sourceId, programTitle, channelName and stopBrowser may need additional configuration. 
+**NOTE:** channels: brightness, contrast, sharpness, colorTemperature don't work on newer TV's.
+**NOTE:** channels: sourceName, sourceId, programTitle, channelName and stopBrowser may need additional configuration.
 
 Some channels do not work on some TV's. It depends on the age of your TV, and what kind of interface it has. Only link channels that work on your TV, polling channels that your TV doesn't have may cause errors, and other problems. see [Tested TV Models](#tested-tv-models).
 
@@ -103,7 +103,7 @@ Some channels do not work on some TV's. It depends on the age of your TV, and wh
 `keyCode` is a String channel, that emulates a remote control. it allows you to send keys to the TV, as if they were from the remote control, hence it is send only.
 
 This is one of the more useful channels, and several new features have been added in this binding.
-Now all keyCode channel sends are queued, so they don’t overlap each other. You can also now use in line delays, and keypresses (in mS). for example:  
+Now all keyCode channel sends are queued, so they don’t overlap each other. You can also now use in line delays, and keypresses (in mS). for example:
 sending:
 `"KEY_MENU, 1000, KEY_DOWN, KEY_DOWN, KEY_ENTER, 2000, KEY_EXIT"`
 
@@ -128,7 +128,7 @@ would send a long press of return, a 1 second pause, then menu, followed by exit
 
 Spaces are ignored. The supported keys can be listed in the Thing `keyCode` channel
 
-Mouse events and text entry are now supported. Send `{"x":0, "y":0}` to move the mouse to 0,0, send `LeftClick` or `RightClick` to click the mouse.  
+Mouse events and text entry are now supported. Send `{"x":0, "y":0}` to move the mouse to 0,0, send `LeftClick` or `RightClick` to click the mouse.
 Send `"text"` to send the word text to the TV. Any text that you want to send has to be enclosed in `"` to be recognized as a text entry.
 
 Here is an example to fill in the URL if you launch the browser:
@@ -166,8 +166,8 @@ Frame TV's have additional channels.
 
 ### artMode:
 
-`artMode` is a Switch channel. When `power` is ON, `artMode` will be OFF. If the `artMode` channel is commanded `OFF`, then the TV will power down to standby/off mode (this takes 4 seconds).  
-Commanding ON to `artMode` will try to power up the TV in art mode, and commanding ON to `power` will try to power the TV up in ON mode, but see WOL limitations.  
+`artMode` is a Switch channel. When `power` is ON, `artMode` will be OFF. If the `artMode` channel is commanded `OFF`, then the TV will power down to standby/off mode (this takes 4 seconds).
+Commanding ON to `artMode` will try to power up the TV in art mode, and commanding ON to `power` will try to power the TV up in ON mode, but see WOL limitations.
 
 To determine the ON/ART/OFF state of your TV, you have to read both `power` and `artMode`.
 
@@ -177,9 +177,9 @@ To determine the ON/ART/OFF state of your TV, you have to read both `power` and
 
 **NOTE** Samsung added back the art API in Firmware 1622 to >2021 Frame TV's. If you have this version of firmware or higher, don't use the `setArtMode` channel, as it is not neccessary.
 
-`setArtMode` is a Switch channel. Since Samsung removed the art api in 2022, the TV has no way of knowing if it is in art mode or playing a TV source. This switch is to allow you to manually tell the TV what mode it is in.  
+`setArtMode` is a Switch channel. Since Samsung removed the art api in 2022, the TV has no way of knowing if it is in art mode or playing a TV source. This switch is to allow you to manually tell the TV what mode it is in.
 
-If you only use the binding to turn the TV on and off or to Standby, the binding will keep track of the TV state. If, however you use the remote to turn the TV on or off from art mode, the binding cannot detect this, and the power state will become invalid.  
+If you only use the binding to turn the TV on and off or to Standby, the binding will keep track of the TV state. If, however you use the remote to turn the TV on or off from art mode, the binding cannot detect this, and the power state will become invalid.
 This input allows you to set the internal art mode state from an external source (say by monitoring the power usage of the TV, or by querying the ex-link port) - thus keeping the power state consistent.
 
 **NOTE:** If you don't have a >2021 Frame TV, don't use the `setArtMode` channel, it will confuse the power handling logic.
@@ -190,11 +190,11 @@ This input allows you to set the internal art mode state from an external source
 
 ### artLabel:
 
-`artlabel` is a String channel that receives the *intenal* lable of the artwork displayed. This will be something like `MY_0010` or `SAM-0123`. `MY` means it's art you uploaded, `SAM` means its from the Samsung art gallery.  
-You have to figure out what the label actually represents.  
+`artlabel` is a String channel that receives the *intenal* lable of the artwork displayed. This will be something like `MY_0010` or `SAM-0123`. `MY` means it's art you uploaded, `SAM` means its from the Samsung art gallery.
+You have to figure out what the label actually represents.
 
-You can send commands to the channel. It accepts, Strings, string representations of a `Rawtype` image and `RawType` Images. If you send a String, such as `MY-0013`, it will display that art on the TV. If the TV is ON, playing live TV, then the Tv will switch to artMode.  
-If you send a `RawType` image, then the image (jpg or png or some other common image format) will be uploaded to the TV, and stored in it's internal storage - if you have space.  
+You can send commands to the channel. It accepts, Strings, string representations of a `Rawtype` image and `RawType` Images. If you send a String, such as `MY-0013`, it will display that art on the TV. If the TV is ON, playing live TV, then the Tv will switch to artMode.
+If you send a `RawType` image, then the image (jpg or png or some other common image format) will be uploaded to the TV, and stored in it's internal storage - if you have space.
 
 The string representation of a `Rawtype` image is of the form `"data:image/png;base64,iVBORw0KGgoAAA........AAElFTkSuQmCC"` where the data is the base64 encoded binary data. the command would look like this:
 
@@ -205,7 +205,7 @@ TV_ArtLabel.sendCommand("data:image/png;base64,iVBORw0KGgoAAA........AAElFTkSuQm
 here is an example `sitemap` entry:
 
 ```java
-Selection item=TV_ArtLabel mappings=["MY_F0061"="Large Bauble","MY_F0063"="Small Bauble","MY_F0062"="Presents","MY_F0060"="Single Bauble","MY_F0055"="Gold Bauble","MY_F0057"="Snowflake","MY_F0054"="Stag","MY_F0056"="Pine","MY_F0059"="Cabin","SAM-S4632"="Snowy Trees","SAM-S2607"="Icy Trees","SAM-S0109"="Whale"]                      
+Selection item=TV_ArtLabel mappings=["MY_F0061"="Large Bauble","MY_F0063"="Small Bauble","MY_F0062"="Presents","MY_F0060"="Single Bauble","MY_F0055"="Gold Bauble","MY_F0057"="Snowflake","MY_F0054"="Stag","MY_F0056"="Pine","MY_F0059"="Cabin","SAM-S4632"="Snowy Trees","SAM-S2607"="Icy Trees","SAM-S0109"="Whale"]
 ```
 
 ### artJson:
@@ -289,7 +289,7 @@ These are just the commands I know, there are probably others, let me know if yo
 
 ### artbrightness:
 
-`artBrightness` is a dimmer channel that sets the brightness of the art in ArtMode. It does not affect the TV brightness. Normally the brightness of the artwork is controlled automatically, and the current value is polled and reported via this channel.  
+`artBrightness` is a dimmer channel that sets the brightness of the art in ArtMode. It does not affect the TV brightness. Normally the brightness of the artwork is controlled automatically, and the current value is polled and reported via this channel.
 You can change the brightness of the artwork (but automatic control is still enabled, unless you turn it off).
 
 There are only 10 levels of brighness, so you could use a `Setpoint` control for this channel in your `sitemap` - eg:
@@ -301,7 +301,7 @@ Setpoint item=TV_ArtBrightness minValue=0 maxValue=100 step=10 visibility=[TV_Ar
 
 ### artColorTemperature:
 
-`artColorTemperature` is a Number channel, it reports the "warmth" of the artwork from -5 to 5 (default 0). It's not polled, but is updated when artmode status is updated.  
+`artColorTemperature` is a Number channel, it reports the "warmth" of the artwork from -5 to 5 (default 0). It's not polled, but is updated when artmode status is updated.
 You can use a `Setpoint` contol for this item in your `sitemap` eg:
 
 ```java
@@ -355,20 +355,20 @@ Switch  TV_ArtOrient     "Art Orientation [%s]"                (gLivingRoomTV)
 
 ## WOL
 
-Wake on Lan is supported by Samsung TV’s after 2016. The binding will attempt to use WOL to turn on a TV, if `power` (or `artMode`) is commanded ON.  
+Wake on Lan is supported by Samsung TV’s after 2016. The binding will attempt to use WOL to turn on a TV, if `power` (or `artMode`) is commanded ON.
 This only works on TV's after 2016, and has some quirks.
-* Does not work on TV's <2016
-* Does not work on hardwired ethernet connected TV's **if you have a soundbar connected via ARC/eARC**
-* Works on WiFi connected TV's (with or without soundbar)
-* May need to enable this function on the TV
-* May have to wait up to 1 minute before turning TV back on, as TV does not power down immediately (and so doesn't respond to WOL)
+
+- Does not work on TV's <2016
+- Does not work on hardwired ethernet connected TV's **if you have a soundbar connected via ARC/eARC**
+- Works on WiFi connected TV's (with or without soundbar)
+- May need to enable this function on the TV
+- May have to wait up to 1 minute before turning TV back on, as TV does not power down immediately (and so doesn't respond to WOL)
 
 You will have to experiment to see if it works for you. If not, you can power on the TV using IR (if you have a Harmony Hub, or GC iTach or similar).
 
 ## Apps
 
-The `sourceApp` channel is a string channel, it displays the name of the current app, `artMode` or `slideshow` if the TV is in artMode, or blank for regular TV.  
+The `sourceApp` channel is a string channel, it displays the name of the current app, `artMode` or `slideshow` if the TV is in artMode, or blank for regular TV.
 You can launch an app, by sending its name or appID to the channel. if you send `""` to the channel, it closes the current app.
 
 Here is an example `sitemap` entry:
@@ -397,7 +397,7 @@ Sending `slideshow,off` turns the slideshow feature of the TV off.
 
 Apps are automatically discovered on TV's >2015 and <2020 (or 2019 it's not clear when the API was removed).
 
-**NOTE:** This is an old Apps list, on later TV's the app ID's have changed.  
+**NOTE:** This is an old Apps list, on later TV's the app ID's have changed.
 List of known apps and the respective name that can be passed on to the `sourceApp` channel.
 Values are confirmed to work on UE50MU6179.
 
@@ -410,13 +410,13 @@ Values are confirmed to work on UE50MU6179.
 | YouTube       | `YouTube`          | YouTube App                       |
 | ZDF Mediathek | `ZDF mediathek`    | German public TV broadcasting app |
 
-To discover all installed apps names, you can enable the DEBUG log output from the binding to see a list of apps that have been discovered as installed. This list is displayed once, shortly after the TV is turned On.   
+To discover all installed apps names, you can enable the DEBUG log output from the binding to see a list of apps that have been discovered as installed. This list is displayed once, shortly after the TV is turned On.
 
-If you have a TV >2019, then the list of apps will not be discovered. Instead, a default list of known appID's is built into the binding, these cover most common apps. The binding will attempt to discover these apps, and, if you are lucky, your app will be found and you have nothing further to do. It is possible that new apps have been added, or are specific to your country that are not in the built in list, in which case you can add these apps manually.  
+If you have a TV >2019, then the list of apps will not be discovered. Instead, a default list of known appID's is built into the binding, these cover most common apps. The binding will attempt to discover these apps, and, if you are lucky, your app will be found and you have nothing further to do. It is possible that new apps have been added, or are specific to your country that are not in the built in list, in which case you can add these apps manually.
 
 #### Adding apps manually
 
-If the app you need is not discovered, a file `samsungtv.cfg` will need to be be created in the openHAB config services directory (`/etc/openhab/services/` for Linux systems).  
+If the app you need is not discovered, a file `samsungtv.cfg` will need to be be created in the openHAB config services directory (`/etc/openhab/services/` for Linux systems).
 
 You need to edit the file `samsungtv.cfg`, and add in the name, appID, and type of the apps you have installed on your TV. Here is a sample for the contents of the `samsungtv.cfg` file:
 
@@ -520,8 +520,8 @@ You need to edit the file `samsungtv.cfg`, and add in the name, appID, and type
 { "name":"Viafree"                 , "appId":"hs9ONwyP2U.ViafreeBigscreen" , "type":2 }
 ```
 
-Enter this into the `samsungtv.cfg` file and save it. The file contents are read automatically every time the file is updated. The binding will check to see if the app is installed, and start polling the status every 10 seconds (or more if your refresh interval is set higher).  
-Apps that are not installed are deleted from the list (internally, the file is not updated). If you install an app on the TV, which is not in the built in list, you have to update the file with it's appID, or at least touch the file for the new app to be registered with the binding.  
+Enter this into the `samsungtv.cfg` file and save it. The file contents are read automatically every time the file is updated. The binding will check to see if the app is installed, and start polling the status every 10 seconds (or more if your refresh interval is set higher).
+Apps that are not installed are deleted from the list (internally, the file is not updated). If you install an app on the TV, which is not in the built in list, you have to update the file with it's appID, or at least touch the file for the new app to be registered with the binding.
 
 The entry for `Internet` is important, as this is the TV web browser App. on older TV's it's `org.tizen.browser`, but this is not correct on later TV's (>2019). This is the app used for the `url` channel, so it needs to be set correctly if you use this channel.
 `org.tizen.browser` is the internal default, and does launch the browser on all TV's, but on later TV's this is just an alias for the actual app, so the `sourceApp` channel will not be updated correctly unless the correct appID is entered here. The built in list has the correct current appID for the browser, but if it changes or is incorrect for your TV, you can update it here.
@@ -530,7 +530,7 @@ You can use any name you want in this list, as long as the appID is valid. The b
 
 ## Smartthings
 
-In order to be able to control the TV input (HDMI1, HDMI2 etc), you have to link the binding to the smartthngs API, as there is no local control capable of switching the TV input.  
+In order to be able to control the TV input (HDMI1, HDMI2 etc), you have to link the binding to the smartthngs API, as there is no local control capable of switching the TV input.
 There are several steps required to enable this feature, and no hub is needed.
 In order to connect to the Smartthings cloud, there are a few steps to take.
 
@@ -540,7 +540,7 @@ In order to connect to the Smartthings cloud, there are a few steps to take.
 4. Go to https://account.smartthings.com/tokens and create a Personal Access Token (PAT). check off all the features you want (I would add them all).
 5. Go to the openHAB Samsung TV Thing, and update the configuration with your PAT (click on advanced). You will fill in Device ID later if necessary.
 6. Save the Thing, and watch the logs.
-    
+
 The binding will attempt to find the Device ID for your TV. If you have several TV’s of the same type, you will have to manually identify the Device ID for the current Thing from the logs. The device ID should look something like 996ff19f-d12b-4c5d-1989-6768a7ad6271. If you have only one TV of each type, Device ID should get filled in for you.
 You can now link the `sourceName`, `sourceId`, `channel` and `channelName` channels, and should see the values updating. You can change the TV input source by sending `"HDMI1"`, or `"HDMI2"` to the `sourceName` channel, the exact string will depend on your TV, and how many inputs you have. You can also send a number to the `sourceId` channel.
 
@@ -565,7 +565,7 @@ Samsung TV K (2016) and onwards are supported via websocket interface.
 Even if the remote control channels are not supported, the UPnP channels may still work.
 
 Art channels on all Frame TV's are supported.
+
 Because Samsung does not publish any documentation about the TV's UPnP interface, there could be differences between different TV models, which could lead to mismatch problems.
 
 Tested TV models (but this table may be out of date):
@@ -606,17 +606,17 @@ On legacy TV's, you may see an error like this:
 2021-12-08 12:19:50.262 [DEBUG] [port.upnp.internal.UpnpIOServiceImpl] - Error reading SOAP response message. Can't transform message payload: org.jupnp.model.action.ActionException: The argument value is invalid. Invalid number of input or output arguments in XML message, expected 2 but found 1.
 ```
 
-This is not an actual error, but is what is returned when a value is polled that does not yet exist, such as the URL for the TV browser, when the browser isn’t running. These messages are not new, and can be ignored. Enabling `subscription` will eliminate them.  
+This is not an actual error, but is what is returned when a value is polled that does not yet exist, such as the URL for the TV browser, when the browser isn’t running. These messages are not new, and can be ignored. Enabling `subscription` will eliminate them.
 
-The `getSupportedChannelNames` messages are not UPnP services, they are not actually services that are supported *by your TV* at all. They are the internal capabilities of whatever method is being used for communication (which could be direct port connection, UPnP or websocket). 
+The `getSupportedChannelNames` messages are not UPnP services, they are not actually services that are supported *by your TV* at all. They are the internal capabilities of whatever method is being used for communication (which could be direct port connection, UPnP or websocket).
 They also do not reflect the actual capabilities of your TV, just what that method supports, on your TV, they may do nothing.
 
 You should get `volume` and `mute` channels working at the minnimum. Other channels may or may not work, depending on your TV and the binding configuration.
 
 If you see errors that say `no route to host` or similar things, it means your TV is off. The binding cannot discover, control or poll a TV that is off.
 
-For the binding to function properly it is very important that your network config allows the machine running openHAB to receive UPnP multicast traffic.  
-Multicast traffic is not propogated between different subnets, or VLANS, unless you specifically configure your router to do this. Many switches have IGMP Snooping enabled by default, which filters out multicast traffic.  
+For the binding to function properly it is very important that your network config allows the machine running openHAB to receive UPnP multicast traffic.
+Multicast traffic is not propogated between different subnets, or VLANS, unless you specifically configure your router to do this. Many switches have IGMP Snooping enabled by default, which filters out multicast traffic.
 If you want to check the communication between the machine and the TV is working, you can try the following:
 
 ### Check if your Linux machine receives multicast traffic
@@ -659,7 +659,7 @@ Where the ip address in `LOCATION` is the ip address of your TV, and the `USN` v
 
 If you now turn your TV off, you will see similar messages, but with `NTS: ssdp:byebye`. This is how the binding detects that your TV has turned OFF.
 
-Try this several times over a period of 30 minutes after you have discovered the TV and added the binding. This is because when you discover the binding, a UPnP `M-SEARCH` packet is broadcast, which will enable mulicast traffic, but your network (router or switches) can eventually start filtering out multicast traffic, leading to unrealiable behaviour.  
+Try this several times over a period of 30 minutes after you have discovered the TV and added the binding. This is because when you discover the binding, a UPnP `M-SEARCH` packet is broadcast, which will enable mulicast traffic, but your network (router or switches) can eventually start filtering out multicast traffic, leading to unrealiable behaviour.
 If you see these messages, then basic communications is working, and you should be able to turn your TV Off (and on later TV's) ON, and have the status reported correctly.
 
 ### Multiple network interfaces
index aa0f10fef70fe2c0cdeff92e9648c9a6809c5e9d..f2085164dc63eb38160770f46f5c762740c9191f 100644 (file)
@@ -31,7 +31,7 @@ This binding supports following thing types:
 ## Discovery
 
 The binding discovers all devices (partitions, zones) defined in the system, but bridge things must be configured manually.
-  
+
 ## Thing Configuration
 
 ### ethm-1 bridge
index 366de79da2c1a7a2c18594814bc2b07f6d568d72..1f6423aabede413d47b26d0a3a819d1ff71a8b5f 100644 (file)
@@ -73,10 +73,10 @@ sitemap:
 
 ```perl
 Switch item=AC_Office_Heater_MasterSwitch
-Selection item=AC_Office_Room_Mode 
+Selection item=AC_Office_Room_Mode
 Setpoint item=AC_Office_Room_Target_Temperature
 Selection item=AC_Office_Heater_Fan_Level
 Selection item=AC_Office_Room_Swing_Mode
-Text item=AC_Office_Room_Current_Temperature  
+Text item=AC_Office_Room_Current_Temperature
 Text item=AC_Office_Room_Current_Humidity
 ```
index 7e93d7670bba40ac2cf97106a686ab6646304840..55885f4970ef9d4aa180bd59410fe91a9c54b0fb 100644 (file)
@@ -87,17 +87,17 @@ Thing sensorcommunity:noise:noise_sensor      "Noise Sensor"      [ sensorid=397
 sensorcommunity.items
 
 ```java
-Number:Density PM_25                "PM2.5"                 { channel="sensorcommunity:particulate:pm_sensor:pm25" } 
-Number:Density PM_100               "PM10"                  { channel="sensorcommunity:particulate:pm_sensor:pm100" } 
+Number:Density PM_25                "PM2.5"                 { channel="sensorcommunity:particulate:pm_sensor:pm25" }
+Number:Density PM_100               "PM10"                  { channel="sensorcommunity:particulate:pm_sensor:pm100" }
 
-Number:Temperature LDI_Temperature  "Temperature"           { channel="sensorcommunity:conditions:cond_sensor:temperature" } 
-Number:Dimensionless LDI_Humidity   "Humidity"              { channel="sensorcommunity:conditions:cond_sensor:humidity" } 
-Number:Pressure LDI_Pressure        "Atmospheric Pressure"  { channel="sensorcommunity:conditions:cond_sensor:pressure" } 
-Number:Pressure LDI_PressureSea     "Pressure sea level"    { channel="sensorcommunity:conditions:cond_sensor:pressure-sea" } 
+Number:Temperature LDI_Temperature  "Temperature"           { channel="sensorcommunity:conditions:cond_sensor:temperature" }
+Number:Dimensionless LDI_Humidity   "Humidity"              { channel="sensorcommunity:conditions:cond_sensor:humidity" }
+Number:Pressure LDI_Pressure        "Atmospheric Pressure"  { channel="sensorcommunity:conditions:cond_sensor:pressure" }
+Number:Pressure LDI_PressureSea     "Pressure sea level"    { channel="sensorcommunity:conditions:cond_sensor:pressure-sea" }
 
-Number:Dimensionless LDI_NoiseEQ    "Noise EQ"              { channel="sensorcommunity:noise:noise_sensor:noise-eq" } 
-Number:Dimensionless LDI_NoiseMin   "Noise min"             { channel="sensorcommunity:noise:noise_sensor:noise-min" } 
-Number:Dimensionless LDI_NoiseMax   "Noise max"             { channel="sensorcommunity:noise:noise_sensor:noise-max" } 
+Number:Dimensionless LDI_NoiseEQ    "Noise EQ"              { channel="sensorcommunity:noise:noise_sensor:noise-eq" }
+Number:Dimensionless LDI_NoiseMin   "Noise min"             { channel="sensorcommunity:noise:noise_sensor:noise-min" }
+Number:Dimensionless LDI_NoiseMax   "Noise max"             { channel="sensorcommunity:noise:noise_sensor:noise-max" }
 ```
 
 ### Sitemap
@@ -106,16 +106,16 @@ SensorCommunity.sitemap
 
 ```perl
 sitemap SensorCommunity label="SensorCommunity" {
-        Text item=PM_25                     label="Particulate Matter 2.5 [%.1f %unit%]"    
-        Text item=PM_100                    label="Particulate Matter 10 [%.1f %unit%]"     
-
-        Text item=LDI_Temperature           label="Temperature [%d %unit%]"     
-        Text item=LDI_Humidity              label="Humidity [%d %unit%]"    
-        Text item=LDI_Pressure              label="Atmospheric Pressure [%d %unit%]"    
-        Text item=LDI_PressureSea           label="Atmospheric Pressure sea [%d %unit%]"    
-                                            
-        Text item=LDI_NoiseEQ               label="Noise avg [%.1f %unit%]"     
-        Text item=LDI_NoiseMin              label="Noise min [%.1f %unit%]"     
-        Text item=LDI_NoiseMax              label="Noise max [%.1f %unit%]"     
+        Text item=PM_25                     label="Particulate Matter 2.5 [%.1f %unit%]"
+        Text item=PM_100                    label="Particulate Matter 10 [%.1f %unit%]"
+
+        Text item=LDI_Temperature           label="Temperature [%d %unit%]"
+        Text item=LDI_Humidity              label="Humidity [%d %unit%]"
+        Text item=LDI_Pressure              label="Atmospheric Pressure [%d %unit%]"
+        Text item=LDI_PressureSea           label="Atmospheric Pressure sea [%d %unit%]"
+
+        Text item=LDI_NoiseEQ               label="Noise avg [%.1f %unit%]"
+        Text item=LDI_NoiseMin              label="Noise min [%.1f %unit%]"
+        Text item=LDI_NoiseMax              label="Noise max [%.1f %unit%]"
 }
 ```
index 2b646d9a5cf4e4bf223222de9ad774887efb6c77..c73793570ca2eeeaa00d53ec328794b6e44662ee 100644 (file)
@@ -239,7 +239,7 @@ In this case the credentials are persisted as part of the Thing configuration.
 
 ### Range Extender Mode
 
-The Plus/Pro devices support the so-called Range Extender Mode (not available for Gen1). 
+The Plus/Pro devices support the so-called Range Extender Mode (not available for Gen1).
 This allows connect Shellys, which are normally no reachable, because of a lack of WiFi signal.
 Once enabled the Shelly acts as a hub to the linked devices, like a WiFi repeater.
 The hub device enables the access point, which can be seen by the linked device.
@@ -482,7 +482,7 @@ Refer to section [Full Example](#full-example) for examples how to catch alarm t
 
 ## Channels
 
-Depending on the device type and firmware release channels might be not available or stay with value NaN.  
+Depending on the device type and firmware release channels might be not available or stay with value NaN.
 
 ### Shelly 1 (thing-type: shelly1)
 
@@ -1712,7 +1712,7 @@ then
     if (! gBattery.allMembers.filter([state < lowBatteryThreshold]).empty) {
         message = "Battery levels:\n"
 
-        var report = gBattery.allMembers.filter([ state instanceof DecimalType ]).sortBy([ state instanceof DecimalType ]).map[ 
+        var report = gBattery.allMembers.filter([ state instanceof DecimalType ]).sortBy([ state instanceof DecimalType ]).map[
         name + ": " + state.format("%d%%\n") ]
         message = message + report
 
@@ -1807,10 +1807,10 @@ then
         eventSource = triggeredChannel
         eventType = receivedEvent
         ...
-    } 
+    }
 end
 
-rule "Color changed" 
+rule "Color changed"
 when
     Item ShellyColor changed
 then
index 43bb340914edd8f2db7c92008688ffce891f0e8b..cc19a7ed6f875d638459f6f76aab002ef3cf7100 100644 (file)
@@ -2,9 +2,9 @@
 
 This binding provides support for the Siemens HVAC controller ecosystem, and the Web Gateway interface OZW672.
 A typical system is composed of:
-         
-![Diagram](doc/Diagram.png)                 
+
+![Diagram](doc/Diagram.png)
+
 There's a lot of different HVAC controllers depending on model in lot of different PAC constructors.
 Siemens RVS41.813/327 inside a Atlantic Hybrid Duo was used for the development, and is fully supported and tested.
 
@@ -14,7 +14,7 @@ You can also find this device in other types of heating systems: boiler or solar
 
 ![](doc/Albatros.jpg)
 
-You will find some information about the OZW672.01 gateway on the Siemens web site: 
+You will find some information about the OZW672.01 gateway on the Siemens web site:
 
 [OZW 672 Page](https://hit.sbt.siemens.com/RWD/app.aspx?rc=FR&lang=fr&module=Catalog&action=ShowProduct&key=BPZ:OZW672.01)
 
@@ -24,7 +24,7 @@ With this binding, you will be able to:
 - Modify the functioning mode of your device: temperature set point, heating mode, and others.
 
 The OZW672 gateway supports many different languages (about 16).
-The binding should work with all language choices, but is currently tested more thoroughly with French and English as configured language.  
+The binding should work with all language choices, but is currently tested more thoroughly with French and English as configured language.
 If you use another language, and find some issues, you can report them on the openHAB forum.
 
 ## Discovery
@@ -58,41 +58,41 @@ Channels are auto-discovered, you will find them on the RVS things.
 They are organized the same way as the LCD screen of your PAC device, by top level menu functionality, and sub-functionalities.
 Each channel is strongly typed, so for example, for heating mode, openHAB will provide you with a list of choices supported by the device.
 
-Channel                         | Description                                                                                       | Type                          | Unit     | Security Access Level   |  ReadOnly | Advanced   
+Channel                         | Description                                                                                       | Type                          | Unit     | Security Access Level   |  ReadOnly | Advanced
 --------------------------------|---------------------------------------------------------------------------------------------------|-------------------------------|----------|-------------------------|-----------|----------
 1724#1725-optgmode-hc1          | Set Operating mode heat circuit 1 (`Automatic`, `Comfort`, `Reduced`, `Protection`)               | operating-mode-hc             |          |                         |  R/W      | true
 1724#1726-roomtemp-comfsetp-hc1 | Romm temperature comfort setpoint HC1                                                             | room-temp-comfort-setpoint-hc |          |                         |  R/W      | true
-   
+
 ## Full Example
 
 Things file `.things`
 
 ```java
-Bridge siemenshvac:ozw:ozw672_FF00F445 "Ozw672" [ baseUrl="https://192.168.254.42/", userName="Administrator", userPassword="mypass"  ] 
+Bridge siemenshvac:ozw:ozw672_FF00F445 "Ozw672" [ baseUrl="https://192.168.254.42/", userName="Administrator", userPassword="mypass"  ]
 {
     Thing rvs41-813-327 00770000756A "RVS41.813/327"  [  ]
     {
         Type room-temp-comfort-setpoint-hc : testChannelTemperature                  "TestChannelTemperature"  [ id="1726" ]
-        Type operating-mode-hc : testChannelCC1                                      "TestChannelCC1"          [ id="1725" ] 
+        Type operating-mode-hc : testChannelCC1                                      "TestChannelCC1"          [ id="1725" ]
     }
-}    
+}
 ```
 
 
 Items file `.items`
 
 ```java
-Contact             Boiler_State_Pump_HWSb      "HWS Pump State [%s]"                   { channel = "siemenshvac:rvs41-813-327:ozw672_FF00F445:00770000756A:2237#2259-ppechargeecs"              } 
+Contact             Boiler_State_Pump_HWSb      "HWS Pump State [%s]"                   { channel = "siemenshvac:rvs41-813-327:ozw672_FF00F445:00770000756A:2237#2259-ppechargeecs"              }
 Number              Boiler_State_HWS            "HWS State [%s]"                        { channel = "siemenshvac:rvs41-813-327:ozw672_FF00F445:00770000756A:2032#2035-etat-ecs"                  }
-Number:Temperature  Flow_Temperature_Real       "Flow Temparature Real [%.1f Â°C]"       { channel = "siemenshvac:rvs41-813-327:ozw672_FF00F445:00770000756A:2237#2248-valreelletempdep-cc1"      }   
-Number:Temperature  Flow_Temperature_Setpoint   "Flow Temperature Setpoint [%.1f Â°C]"   { channel = "siemenshvac:rvs41-813-327:ozw672_FF00F445:00770000756A:2237#2249-constdepresultcc1"         }   
-Number              Hour_fct_HWS                "HWS Hour function"                     { channel = "siemenshvac:rvs41-813-327:ozw672_FF00F445:00770000756A:2237#2263-heuresfoncpompeecs"        }   
+Number:Temperature  Flow_Temperature_Real       "Flow Temparature Real [%.1f Â°C]"       { channel = "siemenshvac:rvs41-813-327:ozw672_FF00F445:00770000756A:2237#2248-valreelletempdep-cc1"      }
+Number:Temperature  Flow_Temperature_Setpoint   "Flow Temperature Setpoint [%.1f Â°C]"   { channel = "siemenshvac:rvs41-813-327:ozw672_FF00F445:00770000756A:2237#2249-constdepresultcc1"         }
+Number              Hour_fct_HWS                "HWS Hour function"                     { channel = "siemenshvac:rvs41-813-327:ozw672_FF00F445:00770000756A:2237#2263-heuresfoncpompeecs"        }
 Number              Nb_Start_HWS                "HWS Number of start [%.1f]"            { channel = "siemenshvac:rvs41-813-327:ozw672_FF00F445:00770000756A:2237#2266-comptdemarresel-ecs"       }
 Number:Temperature  Thermostat_Temperature      "Thermostat tempeature [%.1f Â°C]"       { channel = "siemenshvac:rvs41-813-327:ozw672_FF00F445:00770000756A:2237#2246-tambact-cc1"               }
 Number:Temperature  Thermostat_Setpoint         "Thermostat setpoint [%.1f Â°C]"         { channel = "siemenshvac:rvs41-813-327:ozw672_FF00F445:00770000756A:1724#1726-consconfort-ta-cc1"        }
 Number              Heat_Mode                   "Heat mode [%s]"                        { channel = "siemenshvac:rvs41-813-327:ozw672_FF00F445:00770000756A:1724#1725-regime-cc1"                }
 
-Number:Temperature  Thermostat_Setpoint_bis     "Temperature [%.1f Â°C]"                 { channel = "siemenshvac:rvs41-813-327:ozw672_FF00F445:00770000756A:testChannelTemperature "             }   
+Number:Temperature  Thermostat_Setpoint_bis     "Temperature [%.1f Â°C]"                 { channel = "siemenshvac:rvs41-813-327:ozw672_FF00F445:00770000756A:testChannelTemperature "             }
 Number              Heat_Mode_bis               "Heat mode [%s]"                        { channel = "siemenshvac:rvs41-813-327:ozw672_FF00F445:00770000756A:testChannelCC1"                      }
 
-``` 
+```
index 02f586ca1c9dd5da6adb4de91af7976319304b2f..f353a8054837cacbd05673ca6605eeeae04c1801 100644 (file)
@@ -127,9 +127,9 @@ Number Room_HeatLevel "Room Heating level [%d]" <heating> { channel="sinope:ther
 
 ```perl
 sitemap demo label="Main Menu"
-{ 
+{
   Frame label="Sinope" {
-     Text item=Room_In   
+     Text item=Room_In
      Text item=Room_Out
      Setpoint item=Room_SetPoint  label="Set Point [%.1f Â°C]" step=0.5 minValue=5 maxValue=35
      Switch item=Room_SetPointMode mappings=[2=Manual, 3=Auto, 5=Away]
index 725d27f945909881d1a8739b25e222e6fa0f121d..8ec1ddd912783f49d05f3488b38a013995a86921 100644 (file)
@@ -11,7 +11,7 @@ There are two supported things:
  - `target` for SNMP v1/v2c agents
  - `target3` for SNMP v3 agents
 
-Both represent a single network device. 
+Both represent a single network device.
 Things can be extended with `number`, `string` and `switch` channels.
 
 ## Binding Configuration
@@ -46,7 +46,7 @@ port=8162
 
 ### Common parameters for all thing-types
 
-The `hostname` is mandatory and can be set as FQDN or IP address. 
+The `hostname` is mandatory and can be set as FQDN or IP address.
 
 An optional configuration parameter is `refresh`.
 By using the `refresh` parameter the time between two subsequent GET requests to the target can be set.
@@ -85,7 +85,7 @@ Optional configuration parameters are: `securityModel`, `authProtocol`, `authPas
 The `securityModel` can be set to
 
 - `NO_AUTH_NO_PRIV` (default) - no encryption on authentication data, no encryption on transmitted data
-- `AUTH_NO_PRIV` - encryption on authentication data, no encryption on transmitted data 
+- `AUTH_NO_PRIV` - encryption on authentication data, no encryption on transmitted data
 - `AUTH_PRIV` - encryption on authentication data, encryption on transmitted data
 
 Depending on the `securityModel` some of the other parameters are also mandatory.
@@ -130,7 +130,7 @@ The `datatype` parameter is used to convert the configuration strings to the nee
 
 `number`-type channels have a `unit` parameter.
 The unit is added to the received value before it is passed to the channel.
-For commands (i.e. sending), the value is first converted to the configured unit. 
+For commands (i.e. sending), the value is first converted to the configured unit.
 
 | type     | item   | description                     |
 |----------|--------|---------------------------------|
index 6d6d28f88a507a9ec62cf0b1d936913277ba6f62..3d14d251e5fc9dee9601ca5e9af4c0c4d3817dc1 100644 (file)
@@ -32,10 +32,10 @@ It is called "SPRING_SECURITY_REMEMBER_ME_COOKIE".
 When using this token, see also `usePrivateApi` and `meterInstalled`.
 E.g. for Firefox, use the built-in [Storage Inspector](https://developer.mozilla.org/en-US/docs/Tools/Storage_Inspector) to retrieve the token.
 
-- **solarId** (required)  
+- **solarId** (required)
 Id of your inverter at SolarEdge (can be found in the URL after successful login: <https://monitoring.solaredge.com/solaredge-web/p/site/> **&lt;solarId&gt;** /#/dashboard)
 
-- **usePrivateApi** (optional)  
+- **usePrivateApi** (optional)
 can be set to true to use the private API.
 Private API has no limit regarding query frequency but is less stable.
 Private API will only gather live data if a meter is available.
@@ -43,17 +43,17 @@ The official public API has a limit of 300 queries per day but should be much mo
 Set this to true when using token retrieved from browser in `tokenOrApiKey`.
 See also `meterInstalled`. (default = false)
 
-- **meterInstalled** (optional)  
+- **meterInstalled** (optional)
 can be set to true for setups that contain a meter which is connected to the inverter.
 A meter allows more detailed data retrieval.
 This must be set to true when using token retrieved from browser in `tokenOrApiKey`.
 This can be set either to true or false when using the API key. (default = false)
 
-- **liveDataPollingInterval** (optional)  
+- **liveDataPollingInterval** (optional)
 interval (minutes) in which live data values are retrieved from Solaredge.
 Setting less than 10 minutes is only allowed when using private API. (default = 10)
 
-- **aggregateDataPollingInterval** (optional)  
+- **aggregateDataPollingInterval** (optional)
   interval (minutes) in which aggregate data values are retrieved from Solaredge.
   Setting less than 60 is only allowed when using private API. (default = 60)
 
index 72953200712a561edd0712057b03ffad3b4235e8..2cfbd214fea87fc9b4f9a82d1c044fad7cd8d0d7 100644 (file)
@@ -1,6 +1,6 @@
 # SolarForecast Binding
 
-This binding provides data from Solar Forecast services. 
+This binding provides data from Solar Forecast services.
 Use it to estimate your daily production, plan electric consumers like Electric Vehicle charging, heating or HVAC.
 Look ahead the next days in order to identify surplus / shortages in your energy planning.
 
@@ -9,7 +9,7 @@ Supported Services
 - [Solcast](https://solcast.com/)
     - Free [Hobbyist Plan](https://toolkit.solcast.com.au/register/hobbyist) with registration
 - [Forecast.Solar](https://forecast.solar/)
-    - Public, Personal and Professional [plans](https://forecast.solar/#accounts) available 
+    - Public, Personal and Professional [plans](https://forecast.solar/#accounts) available
 
 Display Power values of Forecast and PV Inverter items
 
@@ -22,7 +22,7 @@ Yellow line shows *Daily Total Forecast*.
 
 ## Supported Things
 
-Each service needs one `xx-site` for your location and at least one photovoltaic `xx-plane`.  
+Each service needs one `xx-site` for your location and at least one photovoltaic `xx-plane`.
 
 | Name                              | Thing Type ID |
 |-----------------------------------|---------------|
@@ -39,7 +39,7 @@ You need to configure your home photovoltaic system within the web interface.
 The `resourceId` for each PV plane is provided afterwards.
 
 In order to receive proper timestamps double check your time zone in *openHAB - Settings - Regional Settings*.
-Correct time zone is necessary to show correct forecast times in UI. 
+Correct time zone is necessary to show correct forecast times in UI.
 
 ### Solcast Bridge Configuration
 
@@ -50,7 +50,7 @@ Correct time zone is necessary to show correct forecast times in UI.
 
 `apiKey` can be obtained in your [Account Settings](https://toolkit.solcast.com.au/account)
 
-`timeZone` can be left empty to evaluate Regional Settings of your openHAB installation. 
+`timeZone` can be left empty to evaluate Regional Settings of your openHAB installation.
 See [DateTime](#date-time) section for more information.
 
 ### Solcast Plane Configuration
@@ -62,27 +62,27 @@ See [DateTime](#date-time) section for more information.
 
 `resourceId` for each plane can be obtained in your [Rooftop Sites](https://toolkit.solcast.com.au/rooftop-sites)
 
-`refreshInterval` of forecast data needs to respect the throttling of the Solcast service. 
+`refreshInterval` of forecast data needs to respect the throttling of the Solcast service.
 If you have 25 free calls per day, each plane needs 2 calls per update a refresh interval of 120 minutes will result in 24 calls per day.
 
 With `refreshInterval = 0` the forecast data will not be updated by binding.
 This gives the user the possibility to define an own update strategy in rules.
-See [manual update rule example](#solcast-manual-update) to update Solcast forecast data 
+See [manual update rule example](#solcast-manual-update) to update Solcast forecast data
 
 - after startup
-- every 2 hours only during daytime using [Astro Binding](https://www.openhab.org/addons/bindings/astro/)  
+- every 2 hours only during daytime using [Astro Binding](https://www.openhab.org/addons/bindings/astro/)
 
 ## Solcast Channels
 
 Each `sc-plane` reports its own values including a `json` channel holding JSON content.
-The `sc-site` bridge sums up all attached `sc-plane` values and provides total forecast for your home location.  
+The `sc-site` bridge sums up all attached `sc-plane` values and provides total forecast for your home location.
 
 Channels are covering today's actual data with current, remaining and today's total prediction.
 Forecasts are delivered up to 6 days in advance.
-Scenarios are clustered in groups: 
+Scenarios are clustered in groups:
 
 - `average` scenario
-- `pessimistic` scenario: 10th percentile 
+- `pessimistic` scenario: 10th percentile
 - `optimistic` scenario: 90th percentile
 
 | Channel                 | Type          | Unit | Description                                     | Advanced |
@@ -124,7 +124,7 @@ In case of empty the location configured in openHAB is obtained.
 | dampPM          | decimal | Damping factor of evening hours                                              | 0       | no       | true     |
 | horizon         | text    | Horizon definition as comma separated integer values                         | N/A     | no       | true     |
 
-`refreshInterval` of forecast data needs to respect the throttling of the ForecastSolar service. 
+`refreshInterval` of forecast data needs to respect the throttling of the ForecastSolar service.
 12 calls per hour allowed from your caller IP address so for 2 planes lowest possible refresh rate is 10 minutes.
 
 #### Advanced Configuration
@@ -146,7 +146,7 @@ So you need to know what you're doing.
 ## ForecastSolar Channels
 
 Each `fs-plane` reports its own values including a `json` channel holding JSON content.
-The `fs-site` bridge sums up all attached `fs-plane` values and provides the total forecast for your home location.  
+The `fs-site` bridge sums up all attached `fs-plane` values and provides the total forecast for your home location.
 
 Channels are covering today's actual data with current, remaining and total prediction.
 Forecasts are delivered up to 3 days for paid personal plans.
@@ -233,7 +233,7 @@ Check log or catch exceptions for error handling
 Each forecast is bound to a certain location which automatically defines the time zone.
 Most common use case is forecast and your location are matching the same time zone.
 Action interface is using `Instant` as timestamps which enables you translating to any time zone.
-This allows you with an easy conversion to query also foreign forecast locations.  
+This allows you with an easy conversion to query also foreign forecast locations.
 
 Examples are showing
 
@@ -258,29 +258,29 @@ Bridge solarforecast:fs-site:homeSite   "ForecastSolar Home" [ location="54.321,
 
 ```java
 // channel items
-Number:Power            ForecastSolarHome_Actual_Power      "Power prediction for this moment"              { channel="solarforecast:fs-site:homeSite:power-actual", stateDescription=" "[ pattern="%.0f %unit%" ], unit="W" }                                                                           
-Number:Energy           ForecastSolarHome_Actual            "Today's forecast till now"                     { channel="solarforecast:fs-site:homeSite:energy-actual", stateDescription=" "[ pattern="%.3f %unit%" ], unit="kWh" }                                                                           
-Number:Energy           ForecastSolarHome_Remaining         "Today's remaining forecast till sunset"        { channel="solarforecast:fs-site:homeSite:energy-remain", stateDescription=" "[ pattern="%.3f %unit%" ], unit="kWh" }                                                                           
-Number:Energy           ForecastSolarHome_Today             "Today's total energy forecast"                 { channel="solarforecast:fs-site:homeSite:energy-today", stateDescription=" "[ pattern="%.1f %unit%" ], unit="kWh" }   
-// calculated by rule                                                                        
-Number:Energy           ForecastSolarHome_Tomorrow          "Tomorrow's total energy forecast"              { stateDescription=" "[ pattern="%.1f %unit%" ], unit="kWh" }                                                                           
-
-Number:Power            ForecastSolarHome_Actual_Power_NE   "NE Power prediction for this moment"           { channel="solarforecast:fs-plane:homeSite:homeNorthEast:power-actual", stateDescription=" "[ pattern="%.0f %unit%" ], unit="W" }   
-Number:Energy           ForecastSolarHome_Actual_NE         "NE Today's forecast till now"                  { channel="solarforecast:fs-plane:homeSite:homeNorthEast:energy-actual", stateDescription=" "[ pattern="%.3f %unit%" ], unit="kWh" }                                                                           
-Number:Energy           ForecastSolarHome_Remaining_NE      "NE Today's remaining forecast till sunset"     { channel="solarforecast:fs-plane:homeSite:homeNorthEast:energy-remain", stateDescription=" "[ pattern="%.3f %unit%" ], unit="kWh" }                                                                           
-Number:Energy           ForecastSolarHome_Today_NE          "NE Today's total energy forecast"              { channel="solarforecast:fs-plane:homeSite:homeNorthEast:energy-today", stateDescription=" "[ pattern="%.1f %unit%" ], unit="kWh" }                                                                           
-
-Number:Power            ForecastSolarHome_Actual_Power_SW   "SW Power prediction for this moment"           { channel="solarforecast:fs-plane:homeSite:homeSouthWest:power-actual", stateDescription=" "[ pattern="%.0f %unit%" ], unit="W" }                                                                           
-Number:Energy           ForecastSolarHome_Actual_SW         "SW Today's forecast till now"                  { channel="solarforecast:fs-plane:homeSite:homeSouthWest:energy-actual", stateDescription=" "[ pattern="%.3f %unit%" ], unit="kWh" }                                                                           
-Number:Energy           ForecastSolarHome_Remaining_SW      "SW Today's remaining forecast till sunset"     { channel="solarforecast:fs-plane:homeSite:homeSouthWest:energy-remain", stateDescription=" "[ pattern="%.3f %unit%" ], unit="kWh" }                                                                           
-Number:Energy           ForecastSolarHome_Today_SW          "SW Today's total energy forecast"              { channel="solarforecast:fs-plane:homeSite:homeSouthWest:energy-today", stateDescription=" "[ pattern="%.1f %unit%" ], unit="kWh" }                                                                           
+Number:Power            ForecastSolarHome_Actual_Power      "Power prediction for this moment"              { channel="solarforecast:fs-site:homeSite:power-actual", stateDescription=" "[ pattern="%.0f %unit%" ], unit="W" }
+Number:Energy           ForecastSolarHome_Actual            "Today's forecast till now"                     { channel="solarforecast:fs-site:homeSite:energy-actual", stateDescription=" "[ pattern="%.3f %unit%" ], unit="kWh" }
+Number:Energy           ForecastSolarHome_Remaining         "Today's remaining forecast till sunset"        { channel="solarforecast:fs-site:homeSite:energy-remain", stateDescription=" "[ pattern="%.3f %unit%" ], unit="kWh" }
+Number:Energy           ForecastSolarHome_Today             "Today's total energy forecast"                 { channel="solarforecast:fs-site:homeSite:energy-today", stateDescription=" "[ pattern="%.1f %unit%" ], unit="kWh" }
+// calculated by rule
+Number:Energy           ForecastSolarHome_Tomorrow          "Tomorrow's total energy forecast"              { stateDescription=" "[ pattern="%.1f %unit%" ], unit="kWh" }
+
+Number:Power            ForecastSolarHome_Actual_Power_NE   "NE Power prediction for this moment"           { channel="solarforecast:fs-plane:homeSite:homeNorthEast:power-actual", stateDescription=" "[ pattern="%.0f %unit%" ], unit="W" }
+Number:Energy           ForecastSolarHome_Actual_NE         "NE Today's forecast till now"                  { channel="solarforecast:fs-plane:homeSite:homeNorthEast:energy-actual", stateDescription=" "[ pattern="%.3f %unit%" ], unit="kWh" }
+Number:Energy           ForecastSolarHome_Remaining_NE      "NE Today's remaining forecast till sunset"     { channel="solarforecast:fs-plane:homeSite:homeNorthEast:energy-remain", stateDescription=" "[ pattern="%.3f %unit%" ], unit="kWh" }
+Number:Energy           ForecastSolarHome_Today_NE          "NE Today's total energy forecast"              { channel="solarforecast:fs-plane:homeSite:homeNorthEast:energy-today", stateDescription=" "[ pattern="%.1f %unit%" ], unit="kWh" }
+
+Number:Power            ForecastSolarHome_Actual_Power_SW   "SW Power prediction for this moment"           { channel="solarforecast:fs-plane:homeSite:homeSouthWest:power-actual", stateDescription=" "[ pattern="%.0f %unit%" ], unit="W" }
+Number:Energy           ForecastSolarHome_Actual_SW         "SW Today's forecast till now"                  { channel="solarforecast:fs-plane:homeSite:homeSouthWest:energy-actual", stateDescription=" "[ pattern="%.3f %unit%" ], unit="kWh" }
+Number:Energy           ForecastSolarHome_Remaining_SW      "SW Today's remaining forecast till sunset"     { channel="solarforecast:fs-plane:homeSite:homeSouthWest:energy-remain", stateDescription=" "[ pattern="%.3f %unit%" ], unit="kWh" }
+Number:Energy           ForecastSolarHome_Today_SW          "SW Today's total energy forecast"              { channel="solarforecast:fs-plane:homeSite:homeSouthWest:energy-today", stateDescription=" "[ pattern="%.1f %unit%" ], unit="kWh" }
 
 // estimation items
 Group influxdb
-Number:Power            ForecastSolarHome_Power_Estimate        "Power estimations"                         (influxdb)  { channel="solarforecast:fs-site:homeSite:power-estimate", stateDescription=" "[ pattern="%.0f %unit%" ], unit="W" }                                                                           
-Number:Energy           ForecastSolarHome_Energy_Estimate       "Energy estimations"                        (influxdb)  { channel="solarforecast:fs-site:homeSite:energy-estimate", stateDescription=" "[ pattern="%.3f %unit%" ], unit="kWh" }                                                                           
-Number:Power            ForecastSolarHome_Power_Estimate_SW     "SW Power estimations"                      (influxdb)  { channel="solarforecast:fs-plane:homeSite:homeSouthWest:power-estimate", stateDescription=" "[ pattern="%.0f %unit%" ], unit="W" }                                                                           
-Number:Energy           ForecastSolarHome_Energy_Estimate_SW    "SW Energy estimations"                     (influxdb)  { channel="solarforecast:fs-plane:homeSite:homeSouthWest:energy-estimate", stateDescription=" "[ pattern="%.3f %unit%" ], unit="kWh" }                                                                           
+Number:Power            ForecastSolarHome_Power_Estimate        "Power estimations"                         (influxdb)  { channel="solarforecast:fs-site:homeSite:power-estimate", stateDescription=" "[ pattern="%.0f %unit%" ], unit="W" }
+Number:Energy           ForecastSolarHome_Energy_Estimate       "Energy estimations"                        (influxdb)  { channel="solarforecast:fs-site:homeSite:energy-estimate", stateDescription=" "[ pattern="%.3f %unit%" ], unit="kWh" }
+Number:Power            ForecastSolarHome_Power_Estimate_SW     "SW Power estimations"                      (influxdb)  { channel="solarforecast:fs-plane:homeSite:homeSouthWest:power-estimate", stateDescription=" "[ pattern="%.0f %unit%" ], unit="W" }
+Number:Energy           ForecastSolarHome_Energy_Estimate_SW    "SW Energy estimations"                     (influxdb)  { channel="solarforecast:fs-plane:homeSite:homeSouthWest:energy-estimate", stateDescription=" "[ pattern="%.3f %unit%" ], unit="kWh" }
 ```
 
 ### Persistence file
@@ -308,11 +308,11 @@ Items {
 rule "Tomorrow Forecast Calculation"
     when
         Item ForecastSolarHome_Today received update
-    then 
+    then
         val solarforecastActions = getActions("solarforecast","solarforecast:fs-site:homeSite")
         val energyState = solarforecastActions.getDay(LocalDate.now.plusDays(1))
         logInfo("SF Tests","{}",energyState)
-        ForecastSolarHome_Tomorrow.postUpdate(energyState) 
+        ForecastSolarHome_Tomorrow.postUpdate(energyState)
 end
 ```
 
@@ -324,7 +324,7 @@ import java.time.temporal.ChronoUnit
 rule "Exception Handling"
     when
         System started
-    then 
+    then
         val solcastActions = getActions("solarforecast","solarforecast:sc-site:3cadcde4dc")
         try {
             val forecast = solcastActions.getPower(solcastActions.getForecastEnd.plus(30,ChronoUnit.MINUTES))
@@ -342,7 +342,7 @@ import java.time.temporal.ChronoUnit
 rule "Solcast Actions"
     when
         Time cron "0 0 23 * * ?" // trigger whatever you like
-    then 
+    then
         // Query forecast via Actions
         val solarforecastActions = getActions("solarforecast","solarforecast:sc-site:homeSite")
         val startTimestamp = Instant.now
@@ -369,20 +369,20 @@ rule "Daylight End"
     when
         Channel "astro:sun:local:daylight#event" triggered END
     then
-        PV_Daytime.postUpdate(OFF) // switch item holding daytime state        
+        PV_Daytime.postUpdate(OFF) // switch item holding daytime state
 end
 
 rule "Daylight Start"
     when
         Channel "astro:sun:local:daylight#event" triggered START
     then
-        PV_Daytime.postUpdate(ON)           
+        PV_Daytime.postUpdate(ON)
 end
 
 rule "Solacast Updates"
-    when 
+    when
         Thing "solarforecast:sc-plane:homeSouthWest" changed to INITIALIZING or // Thing status changed to INITIALIZING
-        Time cron "0 30 0/2 ? * * *" // every 2 hours at minute 30 
+        Time cron "0 30 0/2 ? * * *" // every 2 hours at minute 30
     then
         if(PV_Daytime.state == ON) {
             val solarforecastActions = getActions("solarforecast","solarforecast:sc-plane:homeSouthWest")
index ab75a528ab19910772b8b001d5220745fe22fe19..5c6d5939659faf07773daf7d910a80473bc1cc46 100644 (file)
@@ -69,7 +69,7 @@ Thing solarman:logger:local [ hostname="x.x.x.x", inverterType="deye_sg04lp3", s
 }
 ```
 
-**Please note** As of this writing inverter types besides the `deye_sg04lp3` were not tested to work. 
+**Please note** As of this writing inverter types besides the `deye_sg04lp3` were not tested to work.
 If you have one of those inverters and it works, please drop me a message, if it doesn't work, please open an issue and I'll try to fix it.
 
 ## Channels
@@ -254,7 +254,7 @@ sitemap solarman label="Solarman"
         Text item=Current_L3 icon="line"
         Text item=Inverter_Frequency icon="line"
     }
-    
+
     Frame label="Battery"{
         Text item=Battery_SOC icon="battery"
         Text item=Battery_Current icon="current"
@@ -273,7 +273,7 @@ sitemap solarman label="Solarman"
         Text item=Battery_Max_A_Charge icon="battery"
         Text item=Battery_Max_A_Discharge icon="battery"
     }
-    
+
     Frame label="Solar"{
         Text item=Total_Solar_Production icon="solar"
         Text item=Daily_Production icon="solar"
@@ -284,7 +284,7 @@ sitemap solarman label="Solarman"
         Text item=PV2_Power icon="solar"
         Text item=PV2_Voltage icon="solar"
     }
-    
+
     Frame label="Grid"{
         Text item=Total_Grid_Production icon="power"
         Text item=Total_Grid_Power icon="power"
@@ -302,7 +302,7 @@ sitemap solarman label="Solarman"
         Text item=Daily_Energy_Bought icon="power"
         Text item=Total_Energy_Bought icon="power"
     }
-    
+
     Frame label="Load"{
         Text item=Daily_Load_Consumption icon="power"
         Text item=Total_Load_Consumption icon="power"
index a651db5695e40a269fd3a3581f70eeb9fcc9da56..f10e4f9562a8c433e37a3b9910bac84cb6d2b469 100644 (file)
@@ -6,16 +6,15 @@ All supported values and devices were discovered while playing with my own energ
 
 ## Supported devices
 
-* Solarwatt Energymanager; ie. the DIN rail mounted device in your house distribution.
+- Solarwatt Energymanager; ie. the DIN rail mounted device in your house distribution.
 
 ## Not supported by this binding
 
-* Solarwatt Manager/Manager Flex; ie. the black square device that is wall mounted.
+- Solarwatt Manager/Manager Flex; ie. the black square device that is wall mounted.
+
 The Solarwatt Manager already contains an OpenHAB installation which can be connected to
 other installations via [Remote openHAB Binding](https://www.openhab.org/addons/bindings/remoteopenhab/).
 
-
 ## Supported Things
 
 | Thing Type ID    | Devices                                                |
index 974eec036640384ff68254fe503bdcf227fe3b92..fc0cc86bdf5e025ec20ff62b9efbed0622ab261b 100644 (file)
@@ -18,7 +18,7 @@ In case the parsed information that comes with the binding out of the box differ
 | local-connect-charger  | Thing      | An electric vehicle charger representation with all the data available as a channels (directly retrieved from the wi-fi module) |
 | cloud-connect-inverter | Thing      | An inverter representation with all the data available as a channels (retrieved from the Solax cloud API)                       |
 
-Note: Channels may vary depending on the inverter type and the availability of information for parsing the raw data. 
+Note: Channels may vary depending on the inverter type and the availability of information for parsing the raw data.
 If you're missing a channel this means that it's not supported for your inverter type.
 
 ## Thing Configuration
@@ -194,9 +194,9 @@ Here are some file based examples.
 ### Thing Configuration
 
 ```java
-// The local connect inverter thing 
-Thing solax:local-connect-inverter:localInverter  [ refreshInterval=10, password="<SERIAL NUMBER OF THE WIFI MODULE>", hostname="<local IP/hostname in the network>" ] 
-Thing solax:cloud-connect-inverter:cloudInverter  [ refresh=30, password="<REG_NUMBER>", token="<TOKEN>" ] 
+// The local connect inverter thing
+Thing solax:local-connect-inverter:localInverter  [ refreshInterval=10, password="<SERIAL NUMBER OF THE WIFI MODULE>", hostname="<local IP/hostname in the network>" ]
+Thing solax:cloud-connect-inverter:cloudInverter  [ refresh=30, password="<REG_NUMBER>", token="<TOKEN>" ]
 ```
 
 ### Item Configuration
@@ -221,7 +221,7 @@ Number solaxBatteryVoltage "Battery voltage [%.1f V]" <energy> (gsolax_inverter,
 
 Number solaxFeedInPower "Feed-in power (CEZ) [%.0f W]" <energy> (gsolax_inverter,EveryChangePersist) { channel="solax:local-connect-inverter:localInverter:feed-in-power" }
 Number solaxCalculatedTotalFeedInPower "Calculated feed-in total power (CEZ) [%.0f KWh]" <energy> (gsolax_inverter,EveryChangePersist)
-Number solaxCalculatedTotalFeedInPowerThisMonth "Calculated feed-in total power this month (CEZ) [%.0f KWh]" <energy> (gsolax_inverter,EveryChangePersist) 
+Number solaxCalculatedTotalFeedInPowerThisMonth "Calculated feed-in total power this month (CEZ) [%.0f KWh]" <energy> (gsolax_inverter,EveryChangePersist)
 Number solaxAcPower "Invertor output power [%.0f W]" <energy> (gsolax_inverter,EveryChangePersist){ channel="solax:local-connect-inverter:localInverter:inverter-output-power" }
 Number solaxFrequency "Invertor frequency [%.2f Hz]" <energy> (gsolax_inverter,EveryChangePersist){ channel="solax:local-connect-inverter:localInverter:inverter-frequency" }
 Number solaxVoltage "Invertor voltage [%.1f V]" <energy> (gsolax_inverter,EveryChangePersist){ channel="solax:local-connect-inverter:localInverter:inverter-voltage" }
@@ -233,7 +233,7 @@ String solaxLocalRawData "Local raw data [%s]" <data> (gsolax_inverter) { channe
 String solaxCloudRawData "Cloud raw data [%s]" <data> (gsolax_inverter) { channel="solax:cloud-connect-inverter:cloudInverter:raw-data" }
 
 // Cloud
-Number solaxYieldToday "Yield today [%.0f kWh]" <energy> (gsolax_inverter){ channel="solax:cloud-connect-inverter:cloudInverter:today-energy" } 
+Number solaxYieldToday "Yield today [%.0f kWh]" <energy> (gsolax_inverter){ channel="solax:cloud-connect-inverter:cloudInverter:today-energy" }
 Number solaxYieldTotal "Yield total [%.0f kWh]" <energy> (gsolax_inverter) { channel="solax:cloud-connect-inverter:cloudInverter:total-energy" }
 Number solaxFeedInEnergy "Total Feed-in (CEZ) Power [%.0f kWh]" <energy> (gsolax_inverter,EveryChangePersist) { channel="solax:cloud-connect-inverter:cloudInverter:total-feed-in-energy" }
 String solaxInverterStatus "Inverter Status [%s]" <energy> (gsolax_inverter,EveryChangePersist) { channel="solax:cloud-connect-inverter:cloudInverter:inverter-status" }
@@ -331,7 +331,7 @@ Frame label="Battery" {
         Switch item=Chart_Period label="Chart Period" mappings=[0="H", 1="D", 2="W", 3="M", 4="Y"]
         Text item=solaxBatteryCurrent icon="energy" valuecolor=[<-800="red", <0="orange", ==0="gray", >=0="green"]
         Chart item=solaxBatteryCurrent period=h refresh=600 visibility=[Chart_Period==0]
-        Chart item=solaxBatteryCurrent period=D refresh=3600 visibility=[Chart_Period==1]                      
+        Chart item=solaxBatteryCurrent period=D refresh=3600 visibility=[Chart_Period==1]
         Chart item=solaxBatteryCurrent period=W refresh=3600 visibility=[Chart_Period==2, Chart_Period==Uninitialized]
         Chart item=solaxBatteryCurrent period=M refresh=3600 visibility=[Chart_Period==3]
         Chart item=solaxBatteryCurrent period=Y refresh=3600 visibility=[Chart_Period==4]
index f2da92dc0ea4fa28b76fe9cad3e9114cbb36c026..558c106f7574741b7426b8dade55d6d270f544f3 100644 (file)
@@ -127,6 +127,7 @@ Dimmer          PhilipsSomneo_Alarm1Volume              "Volume"
 ```
 
 transform/somneorepeatday.js
+
 ```javascript
 (function(i) {
     if (i == 254) {
@@ -226,7 +227,7 @@ sitemap somneo label="Philips Somneo" {
             Default item=PhilipsSomneo_Alarm15Configured
             Default item=PhilipsSomneo_Alarm16Configured
         }
-    }    
+    }
     Frame label="Alarm [1]" {
         Default         item=PhilipsSomneo_Alarm1Switch
         Default         item=PhilipsSomneo_Alarm1Time
@@ -235,7 +236,7 @@ sitemap somneo label="Philips Somneo" {
         Slider          item=PhilipsSomneo_Alarm1RepeatDay minValue=0 maxValue=254 step=2
         Text label="Settings" icon="settings" {
             Default         item=PhilipsSomneo_Alarm1SunriseDuration
-            Slider          item=PhilipsSomneo_Alarm1SunriseBrightness 
+            Slider          item=PhilipsSomneo_Alarm1SunriseBrightness
             Selection       item=PhilipsSomneo_Alarm1SunriseSchema
             Default         item=PhilipsSomneo_Alarm1Sound
             Default         item=PhilipsSomneo_Alarm1Volume
index ba205cb4b2c31463ecd103067e90211a22447516..f94d658ed4740470fd186a6ed32614bb75a637e4 100644 (file)
@@ -2,7 +2,7 @@
 
 [Souliss](http://www.souliss.net/) is a networking framework for Arduino and compatibles boards, and is designed to let you easily build a smart home that is distributed over multiple boards via Ethernet, WiFi, wireless point-to-point and RS485 bus.
 
-Souliss is an open-source and community driven project, you can use the [wiki](https://github.com/souliss/souliss/wiki) and [Community](https://github.com/souliss/souliss/wiki/Community) to get help and share your results.  
+Souliss is an open-source and community driven project, you can use the [wiki](https://github.com/souliss/souliss/wiki) and [Community](https://github.com/souliss/souliss/wiki/Community) to get help and share your results.
 
 ## Prerequisites
 
@@ -157,7 +157,7 @@ souliss.things:
 
 ```java
 Bridge souliss:gateway:105 "Souliss Gateway - 105" [gatewayLanAddress="192.168.1.105", gatewayPortNumber=230, pingInterval=30, subscriptionInterval=2, healthyInterval=38, userIndex=72, nodeIndex=38,  timeoutToRequeue=5000, timeoutToRemovePacket=20000]
-{  
+{
 Thing t14 1-6 "Portoncino"@"Rientro" [node=1,slot=6] //thing UID is named as node-slot only as mnemonic convention, but you are free to assign other values
 Thing t14 1-7 "Cancello"@"Rientro" [node=1,slot=7]
 Thing t57 1-4 "Consumo"@"Soggiorno" [node=1,slot=4]
@@ -179,7 +179,7 @@ Thing t19 6-9 "Termostato Soggiorno - LuminositĂ "@"Soggiorno" [node=6,slot=9]
 
 Thing t11 5-0 "Tettoia"@"Giardino"  [node=5,slot=0]
 
-Thing t11 12-0 "Divano"@"Soggiorno" [node=12,slot=0,sleep=10, secureSend=false] 
+Thing t11 12-0 "Divano"@"Soggiorno" [node=12,slot=0,sleep=10, secureSend=false]
 
 Thing t16 8-0 "LYT1" [node=8,slot=0]
 
@@ -220,7 +220,7 @@ Number   Consumo            "Consumo [%.1f W]"
 Number   Fotovoltaico       "Fotovoltaico [%.1f W]"                                     <energy>  (FamilyRoom, Elettricita)              {channel="souliss:t57:105:4-0:value"}
 String   AggiornamentoNodo1 "Agg.Consumi [%1$td.%1$tm.%1$tY %1$tk:%1$tM:%1$tS]"         <keyring> (FamilyRoom, Elettricita, Diagnostic)  {channel="souliss:t57:105:1-4:lastStatusStored"}
 String   AggiornamentoNodo4 "Agg.Fotovoltaico [%1$td.%1$tm.%1$tY %1$tk:%1$tM:%1$tS]"    <keyring> (FamilyRoom, Elettricita, Diagnostic)  {channel="souliss:t57:105:4-0:lastStatusStored"}
-                                  
+
 Switch divano               "Divano"                                        <light> (FamilyRoom, Divano ) ["Switchable"]    {autoupdate="false", channel="souliss:t11:105:12-0:onOff"}
 String divano_aggiornamento "Agg. [%1$td.%1$tm.%1$tY %1$tk:%1$tM:%1$tS]"    <keyring> (FamilyRoom, Divano, Diagnostic)      {channel="souliss:t57:105:12-0:lastStatusStored"}
 String divano_healthy       "Salute"                                        <keyring> (FamilyRoom, Divano, Diagnostic)      {channel="souliss:t57:105:12-0:healthy"}
@@ -251,8 +251,8 @@ sitemap default label="Tonino" {
            Switch item=portoncino mappings=[ON="Apri"]
            Switch item=cancello mappings=[ON="Apri"]
         }
-    }        
-         
+    }
+
  Frame {
         Group item=Outside
     }
@@ -265,7 +265,7 @@ Frame {
         Group item=Elettricita label="ElettricitĂ " icon="energy"
 }
 
-Frame {  
+Frame {
        Group item=Divano icon="light"
 }
 
@@ -275,7 +275,7 @@ Frame label="Temperature"{
             Default item=FamilyRoom_Temperature label="Temperatura"
             Default item=FamilyRoom_Humidity label="UmiditĂ "
             Default item=AggiornamentoNodo6 icon="icon16x16"
-        
+
 }
 
 Text label="Termostato soggiorno" icon="temperature" {
@@ -283,7 +283,7 @@ Text label="Termostato soggiorno" icon="temperature" {
             Default item=termostatosoggiorno_temperatura
             Default item=termostatosoggiorno_umidita
             Switch item=termostatosoggiorno_setasmeasured mappings=[ON="Set"]
-            Switch item=termostatosoggiorno_modo label="Heating Mode" mappings=[HEATING_MODE="Set"] 
+            Switch item=termostatosoggiorno_modo label="Heating Mode" mappings=[HEATING_MODE="Set"]
             Switch item=termostatosoggiorno_power label="Power On/Off"
             Default item=termostatosoggiorno_fire label="Fire"
             Text item=termostatoSoggiorno_aggiornamento label="Aggiornato: [%1$td.%1$tm.%1$tY %1$tk:%1$tM:%1$tS]" icon="icon16x16"
index 06074d8918696c5ff021fd56dd58e066790cbf49..2619eccdf9bfba050501567f5e17fc8ac6ca0d2a 100644 (file)
@@ -168,7 +168,7 @@ Bridge surepetcare:bridge:bridge1 "Demo API Bridge" @ "SurePetcare" [ username="
 /* *****************************************
  * Bridge
  * *****************************************/
-Group   dgPet                                               
+Group   dgPet
 Switch  UR_1a_Online    "Bridge Online [%s]"        (dgPet) {channel="surepetcare:bridge:bridge1:online"}
 Switch  UR_1a_Refresh   "Bridge Data Refresh [%s]"  (dgPet) {channel="surepetcare:bridge:bridge1:refresh"}
 
@@ -188,7 +188,7 @@ String      UR_1c_Product           "Hub Product [%s]"
 String      UR_1c_LEDMode           "Hub LED Mode [%s]"                             (dgPet) {channel="surepetcare:hubDevice:bridge1:123456:ledMode"}
 String      UR_1c_PairingMode       "Hub Pairing Mode [%s]"                         (dgPet) {channel="surepetcare:hubDevice:bridge1:123456:pairingMode"}
 Switch      UR_1c_Online            "Hub Online [%s]"                               (dgPet) {channel="surepetcare:hubDevice:bridge1:123456:online"}
+
 /* *****************************************
  * Cat/Pet Flap
  * *****************************************/
index 0a458dbb722c419cfabe552cca13cc171ebbe9fa..b072166c60b57cb89243daa6db30a908c7c688e4 100644 (file)
@@ -46,12 +46,12 @@ But therefore it set's device-ip and protocol automaticly.
 If you have problems with udp-discovery, try to set the advanced setting 'broadcastAddress' to your local subnet ('e.g. 192.168.0.255').
 Default is '255.255.255.255'
 
-You can combine both discovery methods to get any informations from local devices.  
+You can combine both discovery methods to get any informations from local devices.
 If you enable setting 'onlyLocalOnlineDevices' results will only generated for local online devices but with the combined data of cloud discovery.
 RF-Devices will be discovered by the hub they are connected to.
-You can discover them manually or use Â´backgroundDiscovery´ 
+You can discover them manually or use Â´backgroundDiscovery´
 
-RF-Devices will be discovered by the hub they are connected to. You can discover them manually or use Â´backgroundDiscovery´ 
+RF-Devices will be discovered by the hub they are connected to. You can discover them manually or use Â´backgroundDiscovery´
 
 ## Bridge Configuration
 
index 30f6247f05a71abc20749afa8b57b7b0798172f7..8cd6f34ec51aad3471bf79284b9f3a9fc6afbbc9 100644 (file)
@@ -1,8 +1,8 @@
 # TasmotaPlug Binding
 
-This binding connects Tasmota flashed smart plugs with 1, 2, 3 or 4 relay channels to openHAB.  
-The plug must report the status of the relay via the url `http://$PLUG_IP/cm?cmnd=Power` in order for the binding to work.  
-The energy monitoring channels can be used if the plug reports energy status via the url `http://$PLUG_IP/cm?cmnd=Status%2010`.  
+This binding connects Tasmota flashed smart plugs with 1, 2, 3 or 4 relay channels to openHAB.
+The plug must report the status of the relay via the url `http://$PLUG_IP/cm?cmnd=Power` in order for the binding to work.
+The energy monitoring channels can be used if the plug reports energy status via the url `http://$PLUG_IP/cm?cmnd=Status%2010`.
 See the [Tasmota Supported Devices Repository](https://templates.blakadder.com/plug.html) for a list of supported plugs.
 
 ## Supported Things
index 05dfa3192aedacebff81f373008a87c1b986875f..25c077e77168f147bbb78027ba82b49bf9fd46d0 100644 (file)
@@ -286,7 +286,7 @@ sitemap main label="Main"
 {
     Text item=TeslaUsableBatteryLevel label="Car" icon="tesla" valuecolor=[<=20="red",>60="green"]
     {
-        Frame 
+        Frame
         {
             Text item=TeslaEventstamp icon="time"
             Text item=TeslaState label="State [%s]" icon=""
@@ -294,9 +294,9 @@ sitemap main label="Main"
             Text item=TeslaDistance
             Text item=TeslaSpeed label="Speed [%.1f]"
             Text item=TeslaShiftState label="Shift State [%s]" icon=""
-            Text item=nTeslaShiftState 
+            Text item=nTeslaShiftState
             Text item=TeslaOdometer label="Odometer [%.1f %unit%]"
-            Text item=TeslaRange 
+            Text item=TeslaRange
         }
         Frame
         {
@@ -337,17 +337,17 @@ sitemap main label="Main"
         Frame
         {
             Switch item=TeslaDoorLock label="Doorlock"
-            Switch item=TeslaHorn label="Horn" 
+            Switch item=TeslaHorn label="Horn"
             Switch item=TeslaLights label="Lights"
             Switch item=TeslaStart label="Remote Start"
             Switch item=TeslaValet label="Valet Mode"
             Switch item=TeslaSentry label="Sentry Mode"
 
-            Switch item=TeslaBatteryHeater label="Battery Heater"   
-            Switch item=TeslaFrontDefrost label="Defrost Front"     
-            Switch item=TeslaRearDefrost label="Defrost Rear"                                               
-            Switch item=TeslaLeftSeatHeater label="Seat Heat Left" 
-            Switch item=TeslaRightSeatHeater label="Seat Heat Right" 
+            Switch item=TeslaBatteryHeater label="Battery Heater"
+            Switch item=TeslaFrontDefrost label="Defrost Front"
+            Switch item=TeslaRearDefrost label="Defrost Rear"
+            Switch item=TeslaLeftSeatHeater label="Seat Heat Left"
+            Switch item=TeslaRightSeatHeater label="Seat Heat Right"
         }
         Frame
         {
index fa0c4719d178104116ee8d28c09d2a265781721d..5cba1bb1a90c41987a78785b298487deb70ff5bf 100644 (file)
@@ -14,10 +14,10 @@ The binding does not support auto discovery.
 
 As a minimum, the hostname is needed:
 
-* hostname - The hostname of the Tesla Powerwall 2. Defaults to powerwall to avoid SSL certificate issues
-* email - the email of the local account on the Powerwall that the installer provided
-* password - the password of the local account on the Powerwall that the installer provided
-* refresh - The frequency with which to refresh information from the Tesla Powerwall2 specified in seconds. Defaults to 10 seconds.
+- hostname - The hostname of the Tesla Powerwall 2. Defaults to powerwall to avoid SSL certificate issues
+- email - the email of the local account on the Powerwall that the installer provided
+- password - the password of the local account on the Powerwall that the installer provided
+- refresh - The frequency with which to refresh information from the Tesla Powerwall2 specified in seconds. Defaults to 10 seconds.
 
 ## Channels
 
index d532010d4e1cc3822088277d3e7a5939b334f8b1..f50724b1987472b511341246753c6c37ab485f19 100644 (file)
@@ -184,15 +184,15 @@ sitemap main label="Main"
 {
     Text item=TeslaUsableBatteryLevel label="Car" icon="tesla" valuecolor=[<=20="red",>60="green"]
     {
-        Frame 
+        Frame
         {
             Text item=TeslaState label="State [%s]" icon=""
             Text item=TeslaHomelink label="Homelink Available[%s]" icon=""
             Text item=TeslaSpeed label="Speed [%.1f]"
             Text item=TeslaShiftState label="Shift State [%s]" icon=""
-            Text item=TeslaShiftState 
+            Text item=TeslaShiftState
             Text item=TeslaOdometer label="Odometer [%.1f miles]"
-            Text item=TeslaRange 
+            Text item=TeslaRange
         }
         Frame
         {
@@ -223,15 +223,15 @@ sitemap main label="Main"
         Frame
         {
             Switch item=TeslaDoorLock label="Doorlock"
-            Switch item=TeslaHorn label="Horn" 
+            Switch item=TeslaHorn label="Horn"
             Switch item=TeslaLights label="Lights"
             Switch item=TeslaValet label="Valet Mode"
             Switch item=TeslaSentry label="Sentry Mode"
 
-            Switch item=TeslaFrontDefrost label="Defrost Front"     
-            Switch item=TeslaRearDefrost label="Defrost Rear"                                               
-            Switch item=TeslaLeftSeatHeater label="Seat Heat Left" 
-            Switch item=TeslaRightSeatHeater label="Seat Heat Right" 
+            Switch item=TeslaFrontDefrost label="Defrost Front"
+            Switch item=TeslaRearDefrost label="Defrost Rear"
+            Switch item=TeslaLeftSeatHeater label="Seat Heat Left"
+            Switch item=TeslaRightSeatHeater label="Seat Heat Right"
         }
         Frame
         {
index 0a9b3973700c68c77fc1a7217135e0e2e5662566..80407b7ca73c53e2026e78ae6345bf89c6b050d2 100644 (file)
@@ -3,7 +3,7 @@
 The Tibber Binding connects to the [Tibber API](https://developer.tibber.com), and enables users to retrieve electricity data:
 
 - Default: Frequent polls are performed to retrieve electricity price and cost/consumption information
-- Optional: For users having Tibber Pulse, a websocket connection is established to retrieve live measurements  
+- Optional: For users having Tibber Pulse, a websocket connection is established to retrieve live measurements
 
 Refresh time (poll frequency) is set manually as part of setup, minimum 1 minute.
 
index e416cf24c47103522488459e44086f89bc2b214e..8487df517929f0cb94370b44d82c3137c98df7e9 100644 (file)
@@ -65,62 +65,62 @@ All devices support the following channels:
 - To send multiple copies of the same keyboard command, append an asterisk with the number of repeats required e.g. NUM2*4 would send the number 2 four times. This is useful for performing searches where the number characters can only be accessed by pressing the keys multiple times in rapid succession i.e. each key press cycles through characters A, B, C, 2.
 - Special characters must also be changed to the appropriate command e.g. the comma symbol(`,`) must not be sent it should be replaced by 'COMMA'.
 
-Available IR Commands to use with `irCommand` channel:  
-UP  
-DOWN  
-LEFT  
-RIGHT  
-SELECT  
-TIVO  
-LIVETV  
-GUIDE  
-BACK  
-INFO  
-EXIT  
-THUMBSUP  
-THUMBSDOWN  
-CHANNELUP  
-CHANNELDOWN  
-PLAY  
-FORWARD  
-REVERSE  
-PAUSE  
-SLOW  
-REPLAY  
-ADVANCE  
-RECORD  
-NUM0  
-NUM1  
-NUM2  
-NUM3  
-NUM4  
-NUM5  
-NUM6  
-NUM7  
-NUM8  
-NUM9  
-ENTER  
-CLEAR  
-ACTION_A  
-ACTION_B  
-ACTION_C  
-ACTION_D  
-CC_ON  
-CC_OFF  
-FIND_REMOTE  
-STANDBY  
-ASPECT_CORRECTION_FULL  
-ASPECT_CORRECTION_PANEL  
-ASPECT_CORRECTION_ZOOM  
-ASPECT_CORRECTION_WIDE_ZOOM  
-VIDEO_MODE_FIXED_480i  
-VIDEO_MODE_FIXED_480p  
-VIDEO_MODE_FIXED_720p  
-VIDEO_MODE_FIXED_1080i  
-VIDEO_MODE_HYBRID  
-VIDEO_MODE_HYBRID_720p  
-VIDEO_MODE_HYBRID_1080i  
-VIDEO_MODE_NATIVE  
+Available IR Commands to use with `irCommand` channel:
+UP
+DOWN
+LEFT
+RIGHT
+SELECT
+TIVO
+LIVETV
+GUIDE
+BACK
+INFO
+EXIT
+THUMBSUP
+THUMBSDOWN
+CHANNELUP
+CHANNELDOWN
+PLAY
+FORWARD
+REVERSE
+PAUSE
+SLOW
+REPLAY
+ADVANCE
+RECORD
+NUM0
+NUM1
+NUM2
+NUM3
+NUM4
+NUM5
+NUM6
+NUM7
+NUM8
+NUM9
+ENTER
+CLEAR
+ACTION_A
+ACTION_B
+ACTION_C
+ACTION_D
+CC_ON
+CC_OFF
+FIND_REMOTE
+STANDBY
+ASPECT_CORRECTION_FULL
+ASPECT_CORRECTION_PANEL
+ASPECT_CORRECTION_ZOOM
+ASPECT_CORRECTION_WIDE_ZOOM
+VIDEO_MODE_FIXED_480i
+VIDEO_MODE_FIXED_480p
+VIDEO_MODE_FIXED_720p
+VIDEO_MODE_FIXED_1080i
+VIDEO_MODE_HYBRID
+VIDEO_MODE_HYBRID_720p
+VIDEO_MODE_HYBRID_1080i
+VIDEO_MODE_NATIVE
 
 ## Full Example
 
index 90f67aeef52f175876ad52ec09aa3df9afac248a..7079c9894b0d0b202f59b3235e048bf01dfdddca 100644 (file)
@@ -184,7 +184,7 @@ They are replaced by `wifiXEnable` (with `X` being a number between `1` and `4`)
 | `wanPhysicalLinkStatus`    | `String`                  |    x     | Link Status                                                    |
 | `wanTotalBytesReceived`    | `Number:DataAmount`       |    x     | Total Bytes Received                                           |
 | `wanTotalBytesSent`        | `Number:DataAmount`       |    x     | Total Bytes Sent                                               |
+
 **Note:** AVM FritzBox devices use 4-byte-unsigned-integers for `wanTotalBytesReceived` and `wanTotalBytesSent`, because of that the counters are reset after around 4GB data.
 
 ## `PHONEBOOK` Profile
@@ -258,8 +258,8 @@ The definition of the bridge and of the subdevices things is the following
 Bridge tr064:fritzbox:rootuid "Root label" @ "location" [ host="192.168.1.1", user="user", password="passwd",
                                                          phonebookInterval="0"]{
     Thing subdeviceLan LAN "label LAN"   [ uuid="uuid:xxxxxxxx-xxxx-xxxx-yyyy-xxxxxxxxxxxx",
-                                                macOnline="XX:XX:XX:XX:XX:XX",  
-                                                          "YY:YY:YY:YY:YY:YY"]  
+                                                macOnline="XX:XX:XX:XX:XX:XX",
+                                                          "YY:YY:YY:YY:YY:YY"]
     Thing subdevice WAN "label WAN"               [ uuid="uuid:xxxxxxxx-xxxx-xxxx-zzzz-xxxxxxxxxxxx"]
     Thing subdevice WANCon "label WANConnection"  [ uuid="uuid:xxxxxxxx-xxxx-xxxx-wwww-xxxxxxxxxxxx"]
     }
index 851b8eec704e181e38eae05313f108c9b524d922..bf464c367b0b1b6fda0b3804277673575365ef87 100644 (file)
@@ -79,11 +79,12 @@ The control outlet supports the `power` channel.
 A blind or curtain supports, beside `battery_level` and `battery_low` channels,  a `positon` channel.
 
 An air purifier supports:
-* `fan_mode` and `fan_speed` channels, which allows for control of the fan and reading of the current speed.
-* `disable_led` and `lock_button` channels, to respectively disable the LED's and lock the button on the physical device.
-* `air_quality_pm25` and `air_quality_rating` channels, which reads the particulate matter 2.5ÎĽm and corresponding indication of air quality (similar to Tradfri app rating).
-* `filter_check_next` and `filter_check_alarm` channels, which represents the remaining number of minutes until the next filter check and whether it is time to do the filter check now. Filter check must be completed through the TRĂ…DFRI app (or on the hardware buttons in case of replacement).
-* a `filter_uptime` channel, which represents the current time since last filter change.
+
+- `fan_mode` and `fan_speed` channels, which allows for control of the fan and reading of the current speed.
+- `disable_led` and `lock_button` channels, to respectively disable the LED's and lock the button on the physical device.
+- `air_quality_pm25` and `air_quality_rating` channels, which reads the particulate matter 2.5ÎĽm and corresponding indication of air quality (similar to Tradfri app rating).
+- `filter_check_next` and `filter_check_alarm` channels, which represents the remaining number of minutes until the next filter check and whether it is time to do the filter check now. Filter check must be completed through the TRĂ…DFRI app (or on the hardware buttons in case of replacement).
+- a `filter_uptime` channel, which represents the current time since last filter change.
 
 Refer to the matrixes above.
 
@@ -112,7 +113,7 @@ demo.things:
 
 ```java
 Bridge tradfri:gateway:mygateway [ host="192.168.0.177", code="EHPW5rIJKyXFgjH3" ] {
-    0100 myDimmableBulb "My Dimmable Bulb" [ id=65537 ]    
+    0100 myDimmableBulb "My Dimmable Bulb" [ id=65537 ]
     0220 myColorTempBulb "My Color Temp Bulb" [ id=65538 ]
     0210 myColorBulb "My Color Bulb" [ id=65539 ]
     0830 myRemoteControl "My Remote Control" [ id=65545 ]
index 80c14dded3b05699a2a52e5250ec16028d1f3eb1..81b9cbc2b67b3bf6910fbc3e28b9cd5f751c1115 100644 (file)
@@ -84,7 +84,7 @@ Thing upnpcontrol:upnprenderer:<rendererId> [udn="<udn of media renderer>", refr
 The `upnpserver` has the following channels (item type and access mode indicated in brackets):
 
 - `upnprenderer` (String, RW): The renderer to receive media content for playback.
-  
+
   The channel allows selecting from all discovered media renderers.
   This list is dynamically adjusted as media renderers are being added/removed.
 
@@ -94,25 +94,25 @@ The `upnpserver` has the following channels (item type and access mode indicated
 
   The browsing will start at the top of the content directory tree and allows you to go down and up (represented by ..) in the tree.
   The list of containers (directories) and media entries for selection in the content hierarchy is updated dynamically when selecting a container or entry.
-  
+
   This channel can also be used to skip to a specific container or entry in the content directory.
   Setting it to 0 will reposition to the top of the content hierarchy.
-  
+
   All media in the selection list, playable on the currently selected `upnprenderer` channel, are automatically queued to the renderer as next media for playback.
-  
+
   The `browseDown` configuration parameter influences the result in such a way that, for `browseDown = true`, if the result only contains exactly one container entry, the result will be the content of the container and not the container itself.
 
 - `search` (String, W): Search for media content on the server.
 
   Search criteria are defined in UPnP search criteria format.
   Examples: `dc:title contains "song"`, `dc:creator contains "SpringSteen"`, `unp:class = "object.item.audioItem"`, `upnp:album contains "Born in"`.
-  
+
   The search, by default, starts at the value of the `currentid` and searches down from there unless the `searchfromroot` thing configuration parameter is set to `true`.
   The result (media and containers) will be available in the `browse` command option list.
   The `currentid` channel will be put to the id of the top container where the search started.
-  
+
   All media in the search result list, playable on the current selected `upnprenderer` channel, are automatically queued to the renderer as next media for playback.
-  
+
   The `browseDown` configuration parameter influences the result in such a way that, for `browseDown = true`, if the result only contains exactly one container entry, the result   will be the content of the container and not the container itself.
 
 - `playlistselect` (String, W): Select a playlist from the available playlists currently saved on disk.
@@ -217,10 +217,10 @@ There are multiple ways to serve content to a renderer for playback.
   Playback does not start automatically if not yet playing.
   When already playing a queue, the first entry of the new queue will be playing as the next entry.
   When playing an URI or media provided through an action, playback will immediately switch to the new queue.
-  
+
   The `upnprenderer` will use that queue until it is replaced by another queue from the same or another `upnpserver`.
   Note that querying the content hierarchy on the `upnpserver` will update the `upnpserver browse` option list each time, and therefore the queue on the `upnprenderer` will be updated each time as long as `upnprenderer` is selected on `upnpserver`.
-  
+
 - Selecting a favorite or playlist on the renderer.
 
   Playback of the favorite or playlist will start immediately.
index 8f9bc74c66092019a7bdcab81a45b5e2bf9a0a5a..e44fc9cfac0db6988e7144b453bc8785b4069ec0 100644 (file)
@@ -169,9 +169,9 @@ Bridge velbus:bridge:1 [ port="COM1", reconnectionInterval="15" ]
 
 Adding Velbus modules to your openHAB configuration follows the conventions of your preferred configuration method.
 
-* **UI-based configuration:** Invoke a manual scan from the Things menu in order to start the [discovery process](#discovery).
+- **UI-based configuration:** Invoke a manual scan from the Things menu in order to start the [discovery process](#discovery).
 Discovered modules can be found in the inbox.
-* **Textual `.thing` configuration** can declare Velbus modules either in a standalone fashion (a bridge is still required):
+- **Textual `.thing` configuration** can declare Velbus modules either in a standalone fashion (a bridge is still required):
 
   ```java
   Thing velbus:<thingType>:<bridgeId>:<thingId> "Label" @ "Location" [ CH1="Kitchen Light", CH2="Living Light" ]
@@ -258,7 +258,7 @@ xidel -e 'let $refs := (
 | `dimspeed`                | `vmb1dm`, `vmb1led`, `vmb4dc`, `vmbdme`, `vmbdmi`, `vmbdmir`                                                                                                                                                      | The time (in seconds) needed for dimming from 0 to 100%.                                                                     |
 | `refresh`                 | `vmb1ts`, `vmb4an`, `vmb7in`, `vmbel1`, `vmbel2`, `vmbel4`, `vmbelpir`, `vmbgp1`, `vmbgp1-2`, `vmbgp2`, `vmbgp2-2`, `vmbgp4`, `vmbgp4-2`, `vmbgp4pir`, `vmbgp4pir-2`, `vmbmeteo`, `vmbpirc`, `vmbpirm`, `vmbpiro` | Refresh interval for sensors or counters (in seconds), default 300. If set to 0 or left empty, no refresh will be scheduled. |
 
-The `vmbdali` and `vmbdali-20` things have 16 virtual light channels. 
+The `vmbdali` and `vmbdali-20` things have 16 virtual light channels.
 A virtual light combines 3 or 4 VMBDALI module channels into an openHAB channel to control RGB or RGBW lights.
 This is because an RGBW DALI light is configured on the VMBDALI module with 4 channels (Red channel, Green channel, Blue channel, White channel).
 The channels of the virtual light can be identified by a module channel `CH1` ... `CH64` or a DALI address `A0` ... `A63`.
index 12d26c55ed6ad904a2ee4b64f6e3e489459a8de7..53ae2235274e265e194f19eb1845a158335d371a 100644 (file)
@@ -153,7 +153,7 @@ sitemap demo label="Venstar Color Thermostat Demo"
     Text item=Guest_aux1RuntimeDay0
     Text item=Guest_aux2RuntimeDay0
     Text item=Guest_freeCoolRuntimeDay0
-    
+
    }
 }
 ```
index f41dc8d548d082f2ed37c1457a9edc797310e969..9ffcd7d1965e96575dfa83e8ffb4e6d032344491 100644 (file)
@@ -225,12 +225,12 @@ Frame {
    Switch item=LoungeAPPower label="Power"
    Text   item=LoungeAPFilterRemainingUse label="Filter Remaining"
    Switch item=LoungeAPDisplay label="Display"
-   Text   item=LoungeAPAirQuality label="Air Quality [%.0f (PM2.5)]"                
+   Text   item=LoungeAPAirQuality label="Air Quality [%.0f (PM2.5)]"
    Switch item=LoungeAPControlsLock label="Controls Locked"
    Text   item=LoungeAPTimerExpiry label="Timer Shutdown @" icon="clock"
    Switch item=LoungeAPMode label="Mode" mappings=[auto="Auto", manual="Manual Fan Control", sleep="Sleeping"] icon="settings"
    Text   item=LoungeAPErrorCode label="Error Code [%.0f]"
-   Switch item=LoungeAPManualFanSpeed label="Manual Fan Speed [%.0f]" mappings=[1="1", 2="2", 3="3", 4="4"] icon="settings"                               
+   Switch item=LoungeAPManualFanSpeed label="Manual Fan Speed [%.0f]" mappings=[1="1", 2="2", 3="3", 4="4"] icon="settings"
 }
 ```
 
@@ -242,12 +242,12 @@ Frame {
    Text   item=LoungeAPFilterRemainingUse label="Filter Remaining"
    Switch item=LoungeAPDisplay label="Display"
    Switch item=LoungeAPNightLightMode label="Night Light Mode" mappings=[on="On", dim="Dimmed", off="Off"] icon="settings"
-   Text   item=LoungeAPAirQuality label="Air Quality [%.0f]"                
+   Text   item=LoungeAPAirQuality label="Air Quality [%.0f]"
    Switch item=LoungeAPControlsLock label="Controls Locked"
    Text   item=LoungeAPTimerExpiry label="Timer Shutdown @" icon="clock"
    Switch item=LoungeAPMode label="Mode" mappings=[manual="Manual Fan Control", sleep="Sleeping"] icon="settings"
    Text   item=LoungeAPErrorCode label="Error Code [%.0f]"
-   Switch item=LoungeAPManualFanSpeed label="Manual Fan Speed [%.0f]" mappings=[1="1", 2="2", 3="3"] icon="settings"                               
+   Switch item=LoungeAPManualFanSpeed label="Manual Fan Speed [%.0f]" mappings=[1="1", 2="2", 3="3"] icon="settings"
 }
 ```
 
index aef84a356ad802b1a5dca1824bfa505311f754f3..05edd24cbe0a194b17a33fec3a799eee9c9e6f9c 100644 (file)
@@ -5,10 +5,10 @@ VisualCrossing Binding provides integration with VisualCrossing API
  > Visual Crossing Weather is the easiest-to-use and lowest-cost source for historical and forecast weather data.
  > Our [Weather API](https://www.visualcrossing.com/weather-api) is designed to integrate easily into any app or code, and
  > our prices are lower than any other provider in the industry.
- > 
+ >
  > Our data is used daily by a diverse customer-base including business analysts, data scientists, insurance professionals,
  > energy producers, construction planners, and academics.
- > 
+ >
  > We have the [Weather Data](https://www.visualcrossing.com/weather-data) and expertise needed to serve any individual or
  > organization from an independent event planner to a global enterprise.
 
@@ -87,31 +87,31 @@ In `day-channel-group` there are 0–23 channels of type `hourXX`
 
 | Channel                | Type                        | Read/Write | Description |
 |------------------------|-----------------------------|------------|-------------|
-| hourXX-datetime        | time-channel                | R          |             |  
-| hourXX-timestamp       | timestamp-channel           | R          |             |  
-| hourXX-temperature     | system.outdoor-temperature  | R          |             |  
-| hourXX-feels-like      | temperature-channel         | R          |             |  
-| hourXX-humidity        | system.atmospheric-humidity | R          |             |  
-| hourXX-dew             | temperature-channel         | R          |             |  
-| hourXX-precip          | precip-channel              | R          |             |  
-| hourXX-precip-prob     | precip-prob-channel         | R          |             |  
-| hourXX-precip-type     | precip-type-channel         | R          |             |  
-| hourXX-snow            | snow-channel                | R          |             |  
-| hourXX-snow-depth      | snow-channel                | R          |             |  
-| hourXX-wind-gust       | system.wind-speed           | R          |             |  
-| hourXX-wind-speed      | system.wind-speed           | R          |             |  
-| hourXX-wind-dir        | system.wind-direction       | R          |             |  
-| hourXX-pressure        | system.barometric-pressure  | R          |             |  
-| hourXX-visibility      | visibility-channel          | R          |             |  
-| hourXX-cloud-cover     | cloud-cover-channel         | R          |             |  
-| hourXX-solar-radiation | solar-radiation-channel     | R          |             |  
-| hourXX-solar-energy    | solar-energy-channel        | R          |             |  
-| hourXX-uv-index        | uv-index-channel            | R          |             |  
-| hourXX-severe-risk     | severe-risk-channel         | R          |             |  
-| hourXX-conditions      | conditions-channel          | R          |             |  
-| hourXX-icon            | icon-channel                | R          |             |  
-| hourXX-stations        | stations-channel            | R          |             |  
-| hourXX-source          | source-channel              | R          |             |   
+| hourXX-datetime        | time-channel                | R          |             |
+| hourXX-timestamp       | timestamp-channel           | R          |             |
+| hourXX-temperature     | system.outdoor-temperature  | R          |             |
+| hourXX-feels-like      | temperature-channel         | R          |             |
+| hourXX-humidity        | system.atmospheric-humidity | R          |             |
+| hourXX-dew             | temperature-channel         | R          |             |
+| hourXX-precip          | precip-channel              | R          |             |
+| hourXX-precip-prob     | precip-prob-channel         | R          |             |
+| hourXX-precip-type     | precip-type-channel         | R          |             |
+| hourXX-snow            | snow-channel                | R          |             |
+| hourXX-snow-depth      | snow-channel                | R          |             |
+| hourXX-wind-gust       | system.wind-speed           | R          |             |
+| hourXX-wind-speed      | system.wind-speed           | R          |             |
+| hourXX-wind-dir        | system.wind-direction       | R          |             |
+| hourXX-pressure        | system.barometric-pressure  | R          |             |
+| hourXX-visibility      | visibility-channel          | R          |             |
+| hourXX-cloud-cover     | cloud-cover-channel         | R          |             |
+| hourXX-solar-radiation | solar-radiation-channel     | R          |             |
+| hourXX-solar-energy    | solar-energy-channel        | R          |             |
+| hourXX-uv-index        | uv-index-channel            | R          |             |
+| hourXX-severe-risk     | severe-risk-channel         | R          |             |
+| hourXX-conditions      | conditions-channel          | R          |             |
+| hourXX-icon            | icon-channel                | R          |             |
+| hourXX-stations        | stations-channel            | R          |             |
+| hourXX-source          | source-channel              | R          |             |
 
 ### `current-conditions-channel-group`
 
@@ -163,15 +163,15 @@ Thing visualcrossing:weather:all_config "Total Weather Data" @ "Weather" [ apiKe
 **Note 2: Use `docs/only_days.items` to have forecast for days but without hours or join items from `docs/Day_XX` to get hourly forecast for each day**
 
 ```java
-Group Total_Weather_Data "Total Weather Data" [ "Equipment" ] 
+Group Total_Weather_Data "Total Weather Data" [ "Equipment" ]
 
 // basic group
-Group Total_Weather_Data_Basic "Basic" (Total_Weather_Data) [ "Equipment" ] 
+Group Total_Weather_Data_Basic "Basic" (Total_Weather_Data) [ "Equipment" ]
 Number Total_Weather_Data_Basic_Cost "Cost" (Total_Weather_Data_Basic) [ "Point" ] {channel="visualcrossing:weather:default_config:basic#cost"}
 String Total_Weather_Data_Basic_Description "Description" (Total_Weather_Data_Basic) [ "Point" ] {channel="visualcrossing:weather:default_config:basic#description"}
 
 // current conditions
-Group Total_Weather_Data_Current_Conditions "Current Conditions" (Total_Weather_Data) [ "Equipment" ] 
+Group Total_Weather_Data_Current_Conditions "Current Conditions" (Total_Weather_Data) [ "Equipment" ]
 String Total_Weather_Data_Basic_Datetime "Datetime" (Total_Weather_Data_Current_Conditions) [ "Point" ] {channel="visualcrossing:weather:default_config:current-conditions#datetime"}
 DateTime Total_Weather_Data_Basic_Timestamp "Timestamp" (Total_Weather_Data_Current_Conditions) [ "Point" ] {channel="visualcrossing:weather:default_config:current-conditions#timestamp"}
 Number:Temperature Total_Weather_Data_Basic_Temperature "Temperature" (Total_Weather_Data_Current_Conditions) [ "Point" ] {channel="visualcrossing:weather:default_config:current-conditions#temperature"}
@@ -220,6 +220,6 @@ then
             // lang - https://www.visualcrossing.com/resources/documentation/weather-api/how-to-create-or-modify-language-files/
             // dateFrom, dateTo - https://www.visualcrossing.com/resources/documentation/weather-api/using-the-time-period-parameter-to-specify-dynamic-dates-for-weather-api-requests/
             val weatherResponse2 = actions.timeline("wrocĹ‚aw,poland", METRIC, "pl", "last7days", "next5days")
-       } 
+       }
 end
 ```
index 0fffe60e51ae8a4711ed77ee5419394951921325..34f4451f542ecc77009efd8712db6ed83ce123f4 100644 (file)
@@ -1,6 +1,6 @@
 # Vizio Binding
 
-This binding connects Vizio TVs to openHAB.  
+This binding connects Vizio TVs to openHAB.
 The TV must support the Vizio SmartCast API that is found on 2016 and later models.
 
 ## Supported Things
@@ -36,8 +36,8 @@ Start Pairing:
 openhab:vizio <thingUID> start_pairing <deviceName>
 ```
 
-Substitute `<thingUID>` with thing's id, ie: `vizio_tv:00bc3e711660`  
-Substitute `<deviceName>` the desired device name that will appear in the TV's settings, under Mobile Devices, ie: `Vizio-openHAB`  
+Substitute `<thingUID>` with thing's id, ie: `vizio_tv:00bc3e711660`
+Substitute `<deviceName>` the desired device name that will appear in the TV's settings, under Mobile Devices, ie: `Vizio-openHAB`
 
 Submit Pairing Code:
 
@@ -45,12 +45,12 @@ Submit Pairing Code:
 openhab:vizio <thingUID> submit_code <pairingCode>
 ```
 
-Substitute `<thingUID>` with the same thing id used above  
-Substitute `<pairingCode>` with the 4-digit pairing code displayed on the TV, ie: `1234`  
+Substitute `<thingUID>` with the same thing id used above
+Substitute `<pairingCode>` with the 4-digit pairing code displayed on the TV, ie: `1234`
 
 The console should then indicate that pairing was successful (token will be displayed) and that the token was saved to the thing configuration.
 If using file-based provisioning of the thing, the authorization token must be added to the thing configuration manually.
-With an authorization token in place, the binding can now control the TV.  
+With an authorization token in place, the binding can now control the TV.
 
 The authorization token text can be re-used in the event that it becomes necessary to setup the binding again.
 By simply adding the token that is already recognized by the TV to the thing configuration, the pairing process can be bypassed.
@@ -71,42 +71,42 @@ The following channels are available:
 
 ### List of available button commands for Vizio TVs:
 
-PowerOn  
-PowerOff  
-PowerToggle  
-VolumeUp  
-VolumeDown  
-MuteOn **(may only work as a toggle)**  
-MuteOff **(may only work as a toggle)**  
-MuteToggle  
-ChannelUp  
-ChannelDown  
-PreviousCh  
-InputToggle  
-SeekFwd  
-SeekBack  
-Play  
-Pause  
-Up  
-Down  
-Left  
-Right  
-Ok  
-Back  
-Info  
-Menu  
-Home  
-Exit  
-Smartcast  
-ccToggle  
-PictureMode  
-WideMode  
+PowerOn
+PowerOff
+PowerToggle
+VolumeUp
+VolumeDown
+MuteOn **(may only work as a toggle)**
+MuteOff **(may only work as a toggle)**
+MuteToggle
+ChannelUp
+ChannelDown
+PreviousCh
+InputToggle
+SeekFwd
+SeekBack
+Play
+Pause
+Up
+Down
+Left
+Right
+Ok
+Back
+Info
+Menu
+Home
+Exit
+Smartcast
+ccToggle
+PictureMode
+WideMode
 WideToggle
 
 ### App List Configuration:
 
 The Vizio API to launch and identify currently running apps on the TV is very complex.
-To handle this, the binding maintains a JSON database of applications and their associated metadata in order to populate the `activeApp` dropdown with available apps.  
+To handle this, the binding maintains a JSON database of applications and their associated metadata in order to populate the `activeApp` dropdown with available apps.
 
 When the thing is started for the first time, this JSON database is saved into the `appListJson` configuration parameter.
 This list of apps can be edited via the script editor on the thing configuration.
index eab075dc54a879c54d9834e19ac9fefe0b8bc2a1..90fb0f1f09d1555d15b1a22d908e2c6bfece3eba 100644 (file)
@@ -41,7 +41,7 @@ The devices support the following channels:
 | track-type        | String | R          | Track type of the currently played track.                                                                            |
 | play-radiostream  | String | RW         | Play the given radio stream.                                                                                         |
 | play-playlist     | String | RW         | Play a playlist identified  by its name.                                                                             |
-| clear-queue       | Switch | RW         | Clear the current queue.                                                                                             | 
+| clear-queue       | Switch | RW         | Clear the current queue.                                                                                             |
 | play-uri          | String | RW         | Play the stream at given uri.                                                                                        |
 | play-file         | String | RW         | Play a file, located on your Volumio device at the given absolute path, e.g."mnt/INTERNAL/song.mp3"                  |
 | random            | Switch | RW         | Activate random mode.                                                                                                |
index e7648e2b1b749723a80349cd3ec7f327c0311667..6120d9f9c129c1139968df1f5009f6574ac09e0b 100644 (file)
@@ -122,7 +122,7 @@ Bridge volvooncall:vocapi:glh "VoC GaĂ«l" @ "System" [username="mail@address.org
 demo.items:
 
 ```java
-Group gVoc "Volvo On Call" 
+Group gVoc "Volvo On Call"
 
 Group:Contact:OR(OPEN,CLOSED) gDoorsOpening "Portes"     (gVoc)
 Contact Voc_DoorsTailgate           "Tailgate"                              (gDoorsOpening)         {channel="volvooncall:vehicle:glh:XC60:doors#tailgate"}
@@ -153,7 +153,7 @@ voc.sitemap:
 
 ```perl
 sitemap voc label="Volvo On Call" {
-    
+
     Frame label="Etat VĂ©hicule" {
         Switch item=Voc_DoorsCarLocked
         Switch item=Voc_Location_LUD mappings=[REFRESH='MAJ !']
@@ -167,7 +167,7 @@ sitemap voc label="Volvo On Call" {
     Frame label="" {
         Mapview item=Voc_Location label="" height=10
     }
-        
+
     Frame label="Opening Status" {
         Group item=gDoorsOpening
         Group item=gWindowsOpening
index 51e48fe22390f54f543dec5e56997601a4d1b303..0e76056a3f007e57891d324ca799f0175f158fcd 100644 (file)
@@ -4,28 +4,27 @@ This binding integrates [Warmup](https://www.warmup.co.uk) Wifi enabled Thermost
 
 Devices known to work with the binding:
 
-* [Warmup 4iE](https://www.warmup.co.uk/thermostats/smart/4ie-underfloor-heating)
-* [Warmup Element](https://www.warmup.co.uk/thermostats/smart/element-wifi-thermostat)
+- [Warmup 4iE](https://www.warmup.co.uk/thermostats/smart/4ie-underfloor-heating)
+- [Warmup Element](https://www.warmup.co.uk/thermostats/smart/element-wifi-thermostat)
 
 Device expected to work with the binding:
 
-* [Warmup 6iE](https://www.warmup.co.uk/thermostats/smart/6ie-underfloor-heating)
+- [Warmup 6iE](https://www.warmup.co.uk/thermostats/smart/6ie-underfloor-heating)
 
 Devices which might work with the binding:
 
-* Other similar looking devices marketed under different brands, mentioned in the API
-  * [Laticrete](https://laticrete.com/)
-  * [Rointe](https://rointe.com/)
-  * [Porcelanosa](https://www.porcelanosa.com/)
-  * Equus
-  * [Savant](https://www.savant.com/)
+- Other similar looking devices marketed under different brands, mentioned in the API
+  - [Laticrete](https://laticrete.com/)
+  - [Rointe](https://rointe.com/)
+  - [Porcelanosa](https://www.porcelanosa.com/)
+  - Equus
+  - [Savant](https://www.savant.com/)
 
 Any Warmup device must be registered at <https://my.warmup.com/> prior to usage, or connected through the [MyHeating app](https://www.warmup.co.uk/thermostats/smart/myheating-app).
 
 This API is not known to be documented publicly.
 The binding api implementation has been derived from the implementations at <https://github.com/alyc100/SmartThingsPublic/blob/master/devicetypes/alyc100/warmup-4ie.src/warmup-4ie.groovy> and <https://github.com/alex-0103/warmup4IE/blob/master/warmup4ie/warmup4ie.py>, and enhanced by inspecting the [GraphQL endpoint](https://apil.warmup.com/graphql).
 
-
 ## Supported Things
 
 The Warmup binding supports the following thing types:
@@ -38,8 +37,7 @@ The Warmup binding supports the following thing types:
 |----------|-------|------------------------------------------------------------------------------------------------|
 | `room`   | Room  | A room containing an individual Warmup WiFi connected device which controls a heating circuit. |
 
-### Room
-
+**Room**
 The device is optimised for controlling underfloor heating (electric or hydronic), although it can also control central heating circuits.
 The device reports the temperature from one of two thermostats, either a floor temperature probe or the air temperature at the device.
 It appears to be possible to configure two devices in a primary / secondary configuration, but it is not clear how this might be represented by the API and hasn't been implemented.
@@ -50,7 +48,7 @@ Once credentials are successfully added to the bridge, any rooms (devices) detec
 
 ## Thing Configuration
 
-### My Warmup Account
+### `my-warmup` Bridge Configuration
 
 | config parameter | type    | description                                     | required | default |
 |------------------|---------|-------------------------------------------------|----------|---------|
@@ -58,7 +56,7 @@ Once credentials are successfully added to the bridge, any rooms (devices) detec
 | password         | String  | Password for my.warmup.com                      | true     |         |
 | refreshInterval  | Integer | Interval in seconds between automatic refreshes | true     | 300     |
 
-### Room
+### `room` Thing Configuration
 
 Rooms are configured automatically with a Serial Number on discovery, or can be added manually using the "Device Number" from the device, excluding the last 3 characters. Changing the target temperature results in a temporary override to that temperature, for the duration configured on the thing. This defaults to 60 minutes.
 
@@ -84,10 +82,10 @@ Rooms are configured automatically with a Serial Number on discovery, or can be
 
 ### Run Mode Statuses
 
-These run mode statuses are defined for the API. 
-The descriptions are based on inspection of the device behaviour and are not sourced from documentation. 
-Only the value `schedule` is writeable, this reverts the device to the program/schedule configured on the device. 
-The value `fixed` can be set by commanding the `fixedTemperature` channel. The value `override` can be set by commanding the `targetTemperature` channel. 
+These run mode statuses are defined for the API.
+The descriptions are based on inspection of the device behaviour and are not sourced from documentation.
+Only the value `schedule` is writeable, this reverts the device to the program/schedule configured on the device.
+The value `fixed` can be set by commanding the `fixedTemperature` channel. The value `override` can be set by commanding the `targetTemperature` channel.
 
 | api value  | ui name          | description                                                                     |
 |------------|------------------|---------------------------------------------------------------------------------|
@@ -133,6 +131,7 @@ getActions("warmup", "warmup:room:my_warmup:my_room").setOverride(18 | Â°C, 10 |
 ```javascript
 actions.get("warmup", "warmup:room:my_warmup:my_room").setOverride(Quantity("18 Â°C"), Quantity("10 min"));
 ```
+
 :::
 
 ::::
index c37a83ad718fc7fd8297b3e4f84f37e0ebde2ca7..2fdd0d6b6c1059d24a7d054e0b0692a68e96710c 100644 (file)
@@ -83,5 +83,5 @@ This binding includes these rule actions for sending messages:
 - `var success = botActions.sendPersonMessage(String personEmail, String markdown, String attach)` - Send a direct message to a person, with attachment.
 
 Sending messages for bot or person accounts works exactly the same.
-Attachments must be URLs.  
+Attachments must be URLs.
 Sending local files is not supported at this moment.
index e431f14f8c8c8523cbc2dc0dc94b0d5e201ac003..cbf42baf08250ed1b3109024ce275b0cdaa8200f 100644 (file)
@@ -47,7 +47,7 @@ The supported channels depend on the WebThing device that is connected. Each map
 In the example below WebThings provided by the [Internet Monitor Service](https://pypi.org/project/internet-monitor-webthing/) will be connected.
 This service does not require specific hardware or devices. To connect the WebThings, the service has to be installed inside your local network.
 
-### Thing  
+### Thing
 
 After installing the WebThing binding you should find the WebThings of your network in the things section of your openHAB administration interface as shown below.
 
@@ -58,7 +58,7 @@ _Internet Speed Monitor_ WebThing have been discovered. To add a WebThing as an
 
 ![discovery picture](doc/speedmonitor.png)
 
-Alternatively, you may add the WebThing as an openHAB Thing by using a webthing.thing file that has to be located inside the things folder.  
+Alternatively, you may add the WebThing as an openHAB Thing by using a webthing.thing file that has to be located inside the things folder.
 
 ```java
 Thing  webthing:generic:speedmonitor [ webThingURI="http://192.168.1.27:9496/0" ]
@@ -95,8 +95,8 @@ To add the newly linked WebThing items to the sitemap you place a sitemap file s
 
 ```perl
 sitemap internetmonitor label="Internet Speed Monitor" {
-    Text item=uploadSpeed  
-    Text item=downloadSpeed  
+    Text item=uploadSpeed
+    Text item=downloadSpeed
 }
 ```
 
index 4504c1717face0a2aff3165fa50a3f167c2f693f..3f871cbf3798541ba56eaae8c2061f0e01176e48 100644 (file)
@@ -222,27 +222,27 @@ sitemap demo label="Main Menu"
     Frame {
        // Switch
        Switch item=DemoSwitch
-       
+
        // LightSwitch
        Switch item=LightSwitch
-       
+
        // Motion
        Switch item=MotionSensor
        Text item=MotionSensorLastChanged icon="clock"
-       
+
        // Insight
        Switch item=InsightSwitch
        Number item=InsightPower
        Number item=InsightLastOn
        Number item=InsightToday
        Number item=InsightTotal
-       
+
        // LED Bulb
        Switch item=LED1
        Slider item=dLED1
        Switch item=LED2
        Slider item=dLED2
-       
+
        //DimmerSwitch
        Switch item=DimmerSwitch
        Slider item=dDimmerSwitch
@@ -253,7 +253,7 @@ sitemap demo label="Main Menu"
        Slider item=NightModeBrightness
        Text item=NightModeStart
        Text item=NightModeEnd
-       
+
        // CoffeMaker
        Switch item=CoffeSwitch
        Text item=CoffeMode
index 38aee6f51ec2cfea55cd186e77424b23b5ba1143..c6bab4fbc903303e3c2ee33a46fc57cbca3cadc8 100644 (file)
@@ -1,7 +1,7 @@
 # WiFi LED Binding
 
 This binding is used to control LED strips connected by WiFi.
-These devices are sold with different names, i.e. Magic Home LED, UFO LED, LED NET controller, etc.  
+These devices are sold with different names, i.e. Magic Home LED, UFO LED, LED NET controller, etc.
 
 ## Supported Things
 
@@ -119,8 +119,8 @@ Switch LED_1_preset_23    "Jump - R/G/B"           <chart>        (LEDPresets1)
 wifiled.sitemap
 
 ```perl
-sitemap wifiled label="LED Sitemap" 
-{ 
+sitemap wifiled label="LED Sitemap"
+{
 
     Frame {
         Switch item=MyWiFiLight_power
@@ -129,7 +129,7 @@ sitemap wifiled label="LED Sitemap"
         Slider item=MyWiFiLight_speed      visibility=[MyWiFiLight_power==ON]
 
         Selection item=LED_1_program  visibility=[MyWiFiLight_power==ON]
-  
+
         Switch item=LED_1_preset_0   visibility=[MyWiFiLight_power==ON]
         Switch item=LED_1_preset_1   visibility=[MyWiFiLight_power==ON]
         Switch item=LED_1_preset_2   visibility=[MyWiFiLight_power==ON]
@@ -153,7 +153,7 @@ sitemap wifiled label="LED Sitemap"
         Switch item=LED_1_preset_20   visibility=[MyWiFiLight_power==ON]
         Switch item=LED_1_preset_21   visibility=[MyWiFiLight_power==ON]
         Switch item=LED_1_preset_22   visibility=[MyWiFiLight_power==ON]
-        Switch item=LED_1_preset_23   visibility=[MyWiFiLight_power==ON]  
+        Switch item=LED_1_preset_23   visibility=[MyWiFiLight_power==ON]
     }
 }
 ```
index 5c2cbcbcadfdecfb3662338313756c9a9b4238e1..481ccbc8843a14639eb0393895bcf9967273ca48 100644 (file)
@@ -1,6 +1,6 @@
 # WlanThermo Binding
 
-This binding add support for the WlanThermo BBQ Thermometer.  
+This binding add support for the WlanThermo BBQ Thermometer.
 | Nano                                 | Mini                                |
 |--------------------------------------|-------------------------------------|
 | ![WlanThermo Nano V1+](doc/nano.jpg) | ![WlanThermo Mini V2](doc/mini.jpg) |
@@ -14,7 +14,7 @@ This binding supports the following version of WlanThermo:
 - Mini V1 (untested, but should be working)
 - Mini V2
 
- Pitmaster support is currently only enabled for Mini V1/V2.  
+ Pitmaster support is currently only enabled for Mini V1/V2.
  If you have a WlanThermo Nano with Pitmaster, please contact the author of this binding to include the support in future releases.
 
 ## Discovery
@@ -37,7 +37,7 @@ Depending on the WlanThermo you're using, the following channels are available.
 
 If username/password is given in the thing, most channels are writeable.
 
-#### The device itself provides the following channels:  
+#### The device itself provides the following channels:
 
 | channel             | type                 | description                              |
 |---------------------|----------------------|------------------------------------------|
@@ -46,7 +46,7 @@ If username/password is given in the thing, most channels are writeable.
 | rssi_signalstrength | Number               | Signal Strength in range [0 ... 4]       |
 | rssi                | Number               | Signal Strength in dBm                   |
 
-#### The following channels apply for all 8 probes of the WlanThermo Nano:  
+#### The following channels apply for all 8 probes of the WlanThermo Nano:
 
 | channel            | type               | description                                                          |
 |--------------------|--------------------|----------------------------------------------------------------------|
@@ -385,136 +385,136 @@ sitemap wlanthermo label="WlanThermo" {
         Default item=nano_rssi icon="qualityofservice"
         Default item=nano_soc icon="batterylevel"
         Default item=nano_charging icon="energy"
-        
+
         Text item=nano_name_1 icon="fire" {
             Frame {
                 Default item=nano_typ_1 icon="settings"
                 Default item=nano_color_1
-                
+
                 Default item=nano_temp_1 icon="temperature"
                 Text icon=""
                 Setpoint item=nano_min_1 icon="temperature_cold"
                 Setpoint item=nano_max_1 icon="temperature_hot"
-                
+
                 Default item=nano_alarm_device_1 icon="switch"
                 Default item=nano_alarm_push_1 icon="switch"
                 Default item=nano_alarm_low_1 icon="siren"
                 Default item=nano_alarm_high_1 icon="siren"
             }
         }
-        
+
         Text item=nano_name_2 icon="fire" {
             Frame {
                 Default item=nano_typ_2 icon="settings"
                 Default item=nano_color_2
-                
+
                 Default item=nano_temp_2 icon="temperature"
                 Text icon=""
                 Setpoint item=nano_min_2 icon="temperature_cold"
                 Setpoint item=nano_max_2 icon="temperature_hot"
-                
+
                 Default item=nano_alarm_device_2 icon="switch"
                 Default item=nano_alarm_push_2 icon="switch"
                 Default item=nano_alarm_low_2 icon="siren"
                 Default item=nano_alarm_high_2 icon="siren"
             }
         }
-        
+
         Text item=nano_name_3 icon="fire" {
             Frame {
                 Default item=nano_typ_3 icon="settings"
                 Default item=nano_color_3
-                
+
                 Default item=nano_temp_3 icon="temperature"
                 Text icon=""
                 Setpoint item=nano_min_3 icon="temperature_cold"
                 Setpoint item=nano_max_3 icon="temperature_hot"
-                
+
                 Default item=nano_alarm_device_3 icon="switch"
                 Default item=nano_alarm_push_3 icon="switch"
                 Default item=nano_alarm_low_3 icon="siren"
                 Default item=nano_alarm_high_3 icon="siren"
             }
         }
-        
+
         Text item=nano_name_4 icon="fire" {
             Frame {
                 Default item=nano_typ_4 icon="settings"
                 Default item=nano_color_4
-                
+
                 Default item=nano_temp_4 icon="temperature"
                 Text icon=""
                 Setpoint item=nano_min_4 icon="temperature_cold"
                 Setpoint item=nano_max_4 icon="temperature_hot"
-                
+
                 Default item=nano_alarm_device_4 icon="switch"
                 Default item=nano_alarm_push_4 icon="switch"
                 Default item=nano_alarm_low_4 icon="siren"
                 Default item=nano_alarm_high_4 icon="siren"
             }
         }
-        
+
         Text item=nano_name_5 icon="fire" {
             Frame {
                 Default item=nano_typ_5 icon="settings"
                 Default item=nano_color_5
-                
+
                 Default item=nano_temp_5 icon="temperature"
                 Text icon=""
                 Setpoint item=nano_min_5 icon="temperature_cold"
                 Setpoint item=nano_max_5 icon="temperature_hot"
-                
+
                 Default item=nano_alarm_device_5 icon="switch"
                 Default item=nano_alarm_push_5 icon="switch"
                 Default item=nano_alarm_low_5 icon="siren"
                 Default item=nano_alarm_high_5 icon="siren"
             }
         }
-        
+
         Text item=nano_name_6 icon="fire" {
             Frame {
                 Default item=nano_typ_6 icon="settings"
                 Default item=nano_color_6
-                
+
                 Default item=nano_temp_6 icon="temperature"
                 Text icon=""
                 Setpoint item=nano_min_6 icon="temperature_cold"
                 Setpoint item=nano_max_6 icon="temperature_hot"
-                
+
                 Default item=nano_alarm_device_6 icon="switch"
                 Default item=nano_alarm_push_6 icon="switch"
                 Default item=nano_alarm_low_6 icon="siren"
                 Default item=nano_alarm_high_6 icon="siren"
             }
         }
-        
+
         Text item=nano_name_7 icon="fire" {
             Frame {
                 Default item=nano_typ_7 icon="settings"
                 Default item=nano_color_7
-                
+
                 Default item=nano_temp_7 icon="temperature"
                 Text icon=""
                 Setpoint item=nano_min_7 icon="temperature_cold"
                 Setpoint item=nano_max_7 icon="temperature_hot"
-                
+
                 Default item=nano_alarm_device_7 icon="switch"
                 Default item=nano_alarm_push_7 icon="switch"
                 Default item=nano_alarm_low_7 icon="siren"
                 Default item=nano_alarm_high_7 icon="siren"
             }
         }
-        
+
         Text item=nano_name_8 icon="fire" {
             Frame {
                 Default item=nano_typ_8 icon="settings"
                 Default item=nano_color_8
-                
+
                 Default item=nano_temp_8 icon="temperature"
                 Text icon=""
                 Setpoint item=nano_min_8 icon="temperature_cold"
                 Setpoint item=nano_max_8 icon="temperature_hot"
-                
+
                 Default item=nano_alarm_device_8 icon="switch"
                 Default item=nano_alarm_push_8 icon="switch"
                 Default item=nano_alarm_low_8 icon="siren"
index 7b70b0eefbc359cd6f74c7bfd74ed8bc34f818cb..c7443f970068052c4ccfb2309670680ad236acbc 100644 (file)
@@ -99,8 +99,8 @@ If you use the ADMIN>MODEL>`Create equipment from thing` feature you can use the
             Selection item=XmasTree_Palettes
             Selection item=XmasTree_Presets
             Default item=XmasTree_FXSpeed
-            Default item=XmasTree_FXIntensity            
+            Default item=XmasTree_FXIntensity
             Selection item=XmasTree_TransformTime mappings=[0='0 seconds', 2 ='2 seconds', 10='10 seconds', 30='30 seconds', 60='60 seconds']
         }
-        
+
 ```
index 6f6715a6514575ebd7d865a52aff8898e569dfb7..f1ab7533e4c7702774a757832729e967e0e9009f 100644 (file)
@@ -212,7 +212,7 @@ You would then have to trigger another rule to submit the original request with
 You can also define a transformation to fx. get a cardinal direction (N, S, W, E):
 
 ```javascript
-(function(s){ 
+(function(s){
   if ( (s == "NULL") || (s == "UNDEF") )
   {
       return undefined;
@@ -223,7 +223,7 @@ You can also define a transformation to fx. get a cardinal direction (N, S, W, E
     var winddiroffset = (wind + (360.0/32.0)) % 360.0;
     var winddiridx    = Math.floor(winddiroffset / (360.0/16.0));
     var winddir       = dir[winddiridx];
-    
+
     return winddir + ' ('+ wind +'°)';
   }
 })(input)
index 3f1ead8c695ccf140420ad60a99f842c998192dd..dbc6337e2f5ebddc24a706ec8cbdbe5a51ac5ca4 100644 (file)
@@ -205,7 +205,7 @@ Rules:
 rule "Yamaha_Input_Ex"
 when
     Item Yamaha_Input changed or
-    Item Yamaha_Tuner_Band changed    
+    Item Yamaha_Tuner_Band changed
 then
     var String input = "" + Yamaha_Input.state
     if (Yamaha_Input.state == "TUNER" && Yamaha_Tuner_Band.state !== NULL) {
@@ -267,7 +267,7 @@ Use the UI to customize the setting for your particular AVR: `Things > Edit > Ya
 For example, if your AVR returns `HDMI_1` for command `HDMI1` you can create such mapping list:
 
 `HDMI_1=HDMI1,HDMI 1=HDMI1,HDMI_2=HDMI2,HDMI 2=HDMI2`
-  
+
 If you unsure what mapping to apply, enable trace logging (see section earlier) and you should see what is going on:
 
 ```text
index 0ba68b428ec5c35b35af37bcdb63e98cba178b65..3ce15ca931680352a6cd0cfc4832e3f4b831918a 100644 (file)
@@ -11,27 +11,32 @@ and a json based protocol for newer receivers.
 The http port 80 on the receiver is used with http POST requests for retrieving and changing the device state. The actual url is http://HOST/YamahaRemoteControl/ctrl.
 
 An example for retrieving data:
+
 ```xml
 <?xml version="1.0" encoding="utf-8"?>
 <YAMAHA_AV cmd="GET">
 <ZONE><Basic_Status>GetParam</Basic_Status><ZONE>
 </YAMAHA_AV>
 ```
+
 where ZONE is Main_Zone, Zone_2, Zone_3 or Zone_4.
 
 An example for changing the state of the receiver:
+
 ```xml
 <YAMAHA_AV cmd="PUT">
 <ZONE><Power_Control><Power>On</Power></Power_Control><ZONE>
 </YAMAHA_AV>
 ```
+
 ### XML Structure
-       System  
+
+       System
                Config
                        Model_Name
-                       System_ID       
-                       Version 
-                       Feature_Existence       
+                       System_ID
+                       Version
+                       Feature_Existence
                                Main_Zone
                                Zone_2
                                Zone_3
@@ -75,7 +80,7 @@ An example for changing the state of the receiver:
                        Destination
                        Freq_Step
 
-       Main Zone       
+       Main Zone
                Config
                        Feature_Availability
                        Name -> Zone/Scene
@@ -110,7 +115,7 @@ An example for changing the state of the receiver:
                Play_Control
                List_Control
 
-       Zone2,3 
+       Zone2,3
                Config
                Basic_Status
                Power_Control
@@ -121,7 +126,7 @@ An example for changing the state of the receiver:
                Play_Control
                List_Control
 
-       Zone4   
+       Zone4
                Config
                Basic_Status
                Power_Control
@@ -130,14 +135,14 @@ An example for changing the state of the receiver:
                Play_Control
                List_Control
 
-       USB     
+       USB
                Config
                Play_Control
                Play_Info
                List_Control
                List_Info
 
-       Tuner   
+       Tuner
                Config
                Play_Control
                Play_Info
@@ -149,14 +154,16 @@ An example for changing the state of the receiver:
                List_Control
                List_Info
 
-
 ### XML Descriptor
 
 The AVR provides an XML file that describes features and commands available using this URL:
+
 ```
 http://<Your_Yamaha_ID>/YamahaRemoteControl/desc.xml
 ```
+
 Or this URL:
+
 ```
 http://<Your_Yamaha_ID>/YamahaRemoteControl/UnitDesc.xml
 ```
@@ -164,14 +171,14 @@ http://<Your_Yamaha_ID>/YamahaRemoteControl/UnitDesc.xml
 As Yamaha introduces new models there may be variations between XML structure.
 In an attempt to improve the add-on maintenance and troubleshooting selected model's `desc.xml`' has been collected from community users:
 
-* [HTR-4069](desc_HTR-4069.xml) 
-* [RX-A2000](desc_RX-A2000.xml) 
-* [RX-A3070](desc_RX-A3070.xml) 
-* [RX-S601D](desc_RX-S601D.xml) 
-* [RX-V479](desc_RX-V479.xml) 
-* [RX-V583](desc_RX-V583.xml) 
-* [RX-V675](desc_RX-V675.xml) 
-* [RX-V3900](desc_RX-V3900.xml) 
+- [HTR-4069](desc_HTR-4069.xml)
+- [RX-A2000](desc_RX-A2000.xml)
+- [RX-A3070](desc_RX-A3070.xml)
+- [RX-S601D](desc_RX-S601D.xml)
+- [RX-V479](desc_RX-V479.xml)
+- [RX-V583](desc_RX-V583.xml)
+- [RX-V675](desc_RX-V675.xml)
+- [RX-V3900](desc_RX-V3900.xml)
 
 ### Key differences between models
 
index 225a81087185888134d38bf764544848144a7fc4..73d2c7033482e6f8fe6a749f5175e195bf1d6db7 100644 (file)
@@ -207,7 +207,7 @@ Selection item=ZmServer_ImageMonitorId
 Image item=ZmServer_ImageUrl
 Selection item=ZmServer_VideoMonitorId
 Video item=ZmServer_VideoUrl url="" encoding="mjpeg"
-                
+
 Selection item=ZM_Monitor1_Function
 Selection item=ZM_Monitor1_Enable
 Image item=ZM_Monitor1_Image
index 9d420b9e4db6821b2a4aeec175cd5f703e512ab0..7d1c1b95f024022977e66d27d6a6bc2c0adec79f 100644 (file)
@@ -47,7 +47,7 @@ HomeKit integration supports following accessory types:
 
 - install homekit addon via UI
 
-- add metadata to an existing item (see [UI based configuration](#UI-based-Configuration))
+- add metadata to an existing item (see [UI based configuration](#ui-based-configuration))
 
 - scan QR code from UI->Settings->HomeKit Integration
 
@@ -76,7 +76,6 @@ HomeKit integration supports following accessory types:
 
 Add metadata to more items or fine-tune your configuration using further settings
 
-
 ## Global Configuration
 
 You can define HomeKit settings either via mainUI or via `$OPENHAB_CONF/services/homekit.cfg`.
@@ -153,7 +152,6 @@ In order to add metadata to an item:
 
 - click on "Save"
 
-
 ### Textual configuration
 
 ```java
@@ -453,7 +451,7 @@ Rollershutter window          "Window"               {homekit = "Window" [invert
 Rollershutter door            "Door"                 {homekit = "Door" [inverted=false]}
  ```
 
-HomeKit home app never sends "STOP" but only the target position. 
+HomeKit home app never sends "STOP" but only the target position.
 If you add configuration parameter "stop=true", openHAB will emulate stop and send "STOP" command to rollershutter item if you click on the blind icon in the iOS home app while the blind is moving.
 
 ```java
@@ -517,9 +515,11 @@ String          thermostat_target_mode     "Thermostat Target Mode"
 
 In addition, thermostat can have thresholds for cooling and heating modes.
 When a thermostat is configured with all three of TargetTemperature, HeatingThresholdTemperature, and CoolingThresholdTemperature, Home will set the characteristics as follows:
- * TargetTemperature is used when the thermostat is in HEAT or COOL TargetHeatingCoolingMode.
- * CoolingThresholdThemperature and HeatingThresholdTemperature are _only_ used in AUTO TargetHeatingCoolingMode.
- * In AUTO TargetHeatingCoolingMode, TargetTemperature will be set to the average of CoolingThresholdThemperature and HeatingThresholdTemperature.
+
+- TargetTemperature is used when the thermostat is in HEAT or COOL TargetHeatingCoolingMode.
+- CoolingThresholdThemperature and HeatingThresholdTemperature are *only* used in AUTO TargetHeatingCoolingMode.
+- In AUTO TargetHeatingCoolingMode, TargetTemperature will be set to the average of CoolingThresholdThemperature and HeatingThresholdTemperature.
+
 Example with thresholds:
 
 ```java
@@ -701,7 +701,7 @@ Switch          motionsensor_tampered      "Motion Sensor Tampered"
 or using UI
 
 ![sensor_ui_config.png](doc/sensor_ui_config.png)
+
 ### Stateless Programmable Switch Groups
 
 To expose multiple Stateless Programmable Switches as a single accessory with multiple buttons (aka a scene controller), you need to configure ServiceLabel on the accessory group and ServiceIndex on each switch.
@@ -728,6 +728,7 @@ Enum mappings can have multiple values for a single key.
 These must be an array, not a comma separated string.
 If the characteristic can be set by HomeKit, the first value will be used when sending the command to the linked item.
 Such a mapping can be configured manually in MainUI on HomeKit metadata in the Code editor:
+
 ```yaml
 value: "Lock"
 config:
@@ -738,23 +739,27 @@ config:
     - UNLOCK
     - UNLOCKED
 ```
+
 Or in a `.items` file:
+
 ```java
 String MyLock "My Lock" { homekit="Lock"[SECURE="LOCK","LOCKED", UNSECURE="UNLOCK","UNLOCKED"] }
 ```
 
 All accessories support the following characteristics that can be set via metadata or linked to a String item:
- * Name (defaults to item's label)
- * Manufacturer (defaults to "none")
- * Model (defaults to "none")
- * SerialNumber (defaults to item's name)
- * FirmwareRevision (defaults to "none")
- * HardwareRevision (defaults to not present)
+
+- Name (defaults to item's label)
+- Manufacturer (defaults to "none")
+- Model (defaults to "none")
+- SerialNumber (defaults to item's name)
+- FirmwareRevision (defaults to "none")
+- HardwareRevision (defaults to not present)
 
 Note that even though these characteristics can be linked to an item, they are not dynamic and cannot be updated once the Home app reads their initial values.
 
 All accessories also support the following optional characteristic that can be linked to a Switch item:
- * Identify (receives `ON` command when the user wishes to identify the accessory)
+
+- Identify (receives `ON` command when the user wishes to identify the accessory)
 
 | Accessory Tag               | Mandatory Characteristics   | Optional Characteristics    | Supported openHAB item types                   | Description                                                                                                                                                                                                                                                                                                                                                   | Configuration Options                                                 | Valid Enum Values                                                                                           |
 |-----------------------------|-----------------------------|-----------------------------|------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
@@ -1073,7 +1078,7 @@ In order to overcome this limitation, you can instruct openHAB to expose multipl
 You will need to manually add each additional bridge in the Home app, since the QR Code in settings will only be for the primary bridge; however the same PIN is still used.
 In order to assign a particular accessory to a different bridge, set the `instance` metadata parameter:
 
-```
+```java
 Switch kitchen_light {homekit="Lighting" [instance=2]}
 ```
 
@@ -1082,7 +1087,7 @@ If you reference an instance that doesn't exist, then that accessory won't be ex
 
 For complex items, only the root group needs to be tagged for the specific instance:
 
-```
+```java
 Group           gSecuritySystem            "Security System Group"                                     {homekit="SecuritySystem" [instance=2]}
 String          security_current_state     "Security Current State"               (gSecuritySystem)    {homekit="SecuritySystem.CurrentSecuritySystemState"}
 String          security_target_state      "Security Target State"                (gSecuritySystem)    {homekit="SecuritySystem.TargetSecuritySystemState"}
@@ -1109,14 +1114,14 @@ Depending on the openHAB installation method, you should modify `start.sh`, `sta
 If you encounter any issues with the add-on and need support, it may be important to get detailed logs of your device's communication with openHAB.
 In order to get logs from the underlying library used to implement the HomeKit protocol, enable trace logging using the following commands at [the console](https://www.openhab.org/docs/administration/console.html):
 
-```
+```shell
 openhab> log:set TRACE io.github.hapjava
 openhab> log:tail io.github.hapjava
 ```
 
 In order to enable detailed logs of openHAB HomeKit binding
 
-```
+```shell
 openhab> log:set TRACE org.openhab.io.homekit.internal
 openhab> log:tail org.openhab.io.homekit.internal
 ```
@@ -1159,12 +1164,12 @@ You can verify this with [Discovery DNS iOS app](https://apps.apple.com/us/app/d
 There are various reasons this may happen.
 Try the following:
 
-* In [openhab-cli](https://www.openhab.org/docs/administration/console.html), run `openhab:homekit clearPairings`.
+- In [openhab-cli](https://www.openhab.org/docs/administration/console.html), run `openhab:homekit clearPairings`.
 Try again.
-* In the HomeKit settings, change the port, setupId, and pin.
+- In the HomeKit settings, change the port, setupId, and pin.
 Save the settings, then re-open the settings so as to refresh the QR code.
 Re-add the device.
-* Remove HomeKit state in `${OPENHAB_USERDATA}/jsondb/homekit.json`, and HomeKit config in `${OPENHAB_USERDATA}/config/org/openhab/homekit.config`.
+- Remove HomeKit state in `${OPENHAB_USERDATA}/jsondb/homekit.json`, and HomeKit config in `${OPENHAB_USERDATA}/config/org/openhab/homekit.config`.
   Restart openHAB.
   Reboot iPhone.
   Try again.
index c9c068c0847838fc05fc990d76d7507f190d3e97..ece2c28f8abe76bbd6be43b872128ec673841418 100644 (file)
@@ -9,23 +9,23 @@ This service is independent of the also available Hue binding!
 
 Currently the following Hue functionality is supported:
 
-* Lights: Maps to items
-* Groups: Maps to group items
-* Rooms: Maps to group items with a specific tag
-* Scenes: Maps to rules (new rule engine) that are tagged with "scene"
-* Rules: Maps to rules (new rule engine) that are tagged with "hueemulation_rule"
-* Schedule: Maps to rules (new rule engine) that are tagged with "hueemulation_schedule"
+- Lights: Maps to items
+- Groups: Maps to group items
+- Rooms: Maps to group items with a specific tag
+- Scenes: Maps to rules (new rule engine) that are tagged with "scene"
+- Rules: Maps to rules (new rule engine) that are tagged with "hueemulation_rule"
+- Schedule: Maps to rules (new rule engine) that are tagged with "hueemulation_schedule"
 
 You can create / modify and remove groups, rooms, scenes, rules and schedules from within Hue compatible devices and apps.
 
-## Discovery:
+## Discovery
 
 As soon as the service is enabled, it will announce the presence of an (emulated) HUE bridge of the second generation (square bridge).
 Hue bridges are using the Universal Plug and Play (UPnP) protocol for discovery.
 
 ![Philips Hue Bridge](doc/Philips_Hue_Bridge.jpg)
 
-Like the real HUE bridge the service must be put into pairing mode before other applications can access it. 
+Like the real HUE bridge the service must be put into pairing mode before other applications can access it.
 By default the pairing mode disables itself after 1 minute (can be configured).
 
 ## Exposed lights
@@ -36,22 +36,22 @@ Group type items require the "Huelight" tag to be exposed as devices instead of
 
 This service can emulate 3 different devices:
 
-* An OSRAM SMART+ Plug,
-* a dimmable white color Philips A19 bulb and
-* an a Philips Gen 3 LCT010 extended color bulb.
+- An OSRAM SMART+ Plug,
+- a dimmable white color Philips A19 bulb and
+- an a Philips Gen 3 LCT010 extended color bulb.
 
 The exposed Hue-type depends on some criteria:
 
-* If the item has the category "ColorLight": It will be exposed as a color bulb
-* If the item has the category "Light": It will be exposed as a switch.
+- If the item has the category "ColorLight": It will be exposed as a color bulb
+- If the item has the category "Light": It will be exposed as a switch.
 
 This initial type determination is overridden if the item is tagged.
 
 The following default tags are setup:
 
-* "Switchable": Item will be exposed as an OSRAM SMART+ Plug
-* "Lighting": Item will be exposed as a dimmable white bulb
-* "ColorLighting": Item will be exposed as a color bulb
+- "Switchable": Item will be exposed as an OSRAM SMART+ Plug
+- "Lighting": Item will be exposed as a dimmable white bulb
+- "ColorLighting": Item will be exposed as a color bulb
 
 It is the responsibility of binding developers to categories and default tag their available *Channels*, so that linked Items are automatically exposed with this service.
 
@@ -70,14 +70,14 @@ The following configurations can be adjusted.
 
 Pairing can be turned on and off:
 
-```
+```ini
 org.openhab.hueemulation:pairingEnabled=false
 ```
 
 You can define a pairing timeout in seconds.
 After that timeout, the `pairingEnabled` is automatically set to `false`.
 
-```
+```ini
 org.openhab.hueemulation:pairingTimeout=60
 ```
 
@@ -86,7 +86,7 @@ Enable the following option in combination with pairing to create a new API key
 Necessary for Amazon Echos and other devices where the API key cannot be reset.
 After a new installation of openHAB or a configuration pruning the old API keys are gone but Amazon Echos will keep trying with their old, invalid keys.
 
-```
+```ini
 org.openhab.hueemulation:createNewUserOnEveryEndpoint=false
 ```
 
@@ -95,13 +95,13 @@ If the following option is enabled in combination with the pairing mode, the ser
 
 This option resets automatically after pairing mode has been switched off by the timeout.
 
-```
+```ini
 org.openhab.hueemulation:temporarilyEmulateV1bridge=false
 ```
 
 Permanent V1 bridge emulation (no obvious reason to enable that):
 
-```
+```ini
 org.openhab.hueemulation:permanentV1bridge=false
 ```
 
@@ -113,7 +113,7 @@ Usually you do not want to set this option, but change the primary address confi
 This option allows you to override what addresses are used for the announcement.
 You can have multiple comma separated entries.
 
-```
+```ini
 org.openhab.hueemulation:discoveryIp=192.168.1.100,::FFFF:A9DB:0D85
 ```
 
@@ -122,7 +122,7 @@ You need to tell the service which item tag corresponds to which emulated bulb t
 One of the comma separated tags must match for the item to be exposed.
 Can be empty to match an item based on other criteria.
 
-```
+```ini
 org.openhab.hueemulation:restrictToTagsSwitches=Switchable
 org.openhab.hueemulation:restrictToTagsWhiteLights=Lighting
 org.openhab.hueemulation:restrictToTagsColorLights=ColorLighting
@@ -131,7 +131,7 @@ org.openhab.hueemulation:restrictToTagsColorLights=ColorLighting
 The above default assignment means that every item that has the tag "Switchable" will be emulated as a Zigbee Switch.
 If you want your switches to be exposed as lights instead (because your Amazon Echo does not support switches for example), you want to have:
 
-```
+```ini
 org.openhab.hueemulation:restrictToTagsSwitches=NONE
 org.openhab.hueemulation:restrictToTagsWhiteLights=Lighting,Switchable
 org.openhab.hueemulation:restrictToTagsColorLights=ColorLighting
@@ -140,7 +140,7 @@ org.openhab.hueemulation:restrictToTagsColorLights=ColorLighting
 The service tries to expose as much items as possible (greedy), based on some criteria as explained in the section above.
 If you want to exclude items, you need to tag them. Define the tags with the following option:
 
-```
+```ini
 org.openhab.hueemulation:ignoreItemsWithTags=internal
 ```
 
@@ -152,9 +152,9 @@ You want this tag for all items that are purely used for rules, as proxy items e
 Some devices like Amazon Echo, Google Home and all Philips devices (TVs, Apps) expect a Hue bridge to run on port 80.
 You must either
 
-* port forward your openHAB installation to port 80,
+- port forward your openHAB installation to port 80,
   (`iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080`)
-* install a reverse proxy on port 80, for example nginx with the following configuration:
+- install a reverse proxy on port 80, for example nginx with the following configuration:
 
   ```
   server {
@@ -169,9 +169,9 @@ You must either
   }
   ```
 
-* or let openHAB run on port 80 (the entire java process requires elevated privileges).
+- or let openHAB run on port 80 (the entire java process requires elevated privileges).
 
-* For Amazon Echo the pairing process may fail due to a 302 response from openHAB, this can be resolved by using a reverse proxy to change the request url from `/api` to `/api/`, for example nginx with the following configuration:
+- For Amazon Echo the pairing process may fail due to a 302 response from openHAB, this can be resolved by using a reverse proxy to change the request url from `/api` to `/api/`, for example nginx with the following configuration:
 
   ```
   server {
@@ -199,14 +199,14 @@ Please assign "ColorLighting" and "Switchable" to the `WhiteLights` type as expl
 Also note that Amazon Echos are stubborn as.
 You might need to remove all former recognized devices multiple times and perform the search via different Echos and also the web or mobile application.
 
-It might help to (temporarly) lower the emulated bridge version in the configuration as described above
+It might help to (temporarly) lower the emulated bridge version in the configuration as described above.
 
 ## Text configuration example
 
 The item label will be used as the Hue device name. Please be aware that textual defined items are generally a bad idea.
-In this case renaming items in Hue compatible Apps will fail.  
+In this case renaming items in Hue compatible Apps will fail.
 
-```
+```java
 Switch  TestSwitch      "Kitchen Switch" [ "Switchable" ]    {channel="..."}
 Color   TestColorBulb   "Bathroom"       [ "ColorLighting" ] {channel="..."}
 Dimmer  TestDimmer      "Hallway"        [ "Lighting" ]      {channel="..."}
index d126720dd7dba1a8facda50d417decd129dfb05e..cd1d9a0990324667bbb573673fe663126ed54c97 100644 (file)
@@ -2,12 +2,12 @@
 
 The metrics service provides:
 
-* an additional REST endpoint to retrieve openHAB core metrics from. This can be used as scrape target for pull-based monitoring systems like [Prometheus](https://prometheus.io/).
-* optionally configurable services to export openHAB core metrics to push-based monitoring systems like [InfluxDB](https://www.influxdata.com/).
+- an additional REST endpoint to retrieve openHAB core metrics from. This can be used as scrape target for pull-based monitoring systems like [Prometheus](https://prometheus.io/).
+- optionally configurable services to export openHAB core metrics to push-based monitoring systems like [InfluxDB](https://www.influxdata.com/).
 
 ## Provided metrics
 
-Currently the following metrics are provided: 
+Currently the following metrics are provided:
 
 - openHAB events counts (per topic)
 - openHAB bundle states
@@ -15,17 +15,17 @@ Currently the following metrics are provided:
 - openHAB rule runs (per rule)
 - openHAB threadpool stats (per scheduler)
 - JVM stats including metrics of
-    - class loader
-    - memory
-    - GarbageCollector
-    - OS (system load, CPU)
-    - thread metrics
+  - class loader
+  - memory
+  - GarbageCollector
+  - OS (system load, CPU)
+  - thread metrics
 
 ## Configuration
 
 The configuration for the metrics service is available in the openHAB UI under Settings | Other Services | Metrics service.
 Support for pull-based monitoring systems (e. g. Prometheus) is always enabled, since it doesn't imply any significant overhead when not used.
-Support for push-based monitoring systems (e. g. InfluxDB) have to be enabled separately. 
+Support for push-based monitoring systems (e. g. InfluxDB) have to be enabled separately.
 
 The following configuration parameters can be set:
 
@@ -43,7 +43,7 @@ For a start, the following formats are supported:
 ### Prometheus
 
 Once the IO addon is installed, the Prometheus endpoint will be available under:
-_<openhab_host>:8080/rest/metrics/prometheus_ 
+_<openhab_host>:8080/rest/metrics/prometheus_
 
 Refer to the [Prometheus](https://prometheus.io/) documentation on how to setup a Prometheus instance and add a scrape configuration. A typical scrape config could look like this (excerpt from `/etc/prometheus/prometheus.yml`):
 
@@ -58,7 +58,7 @@ scrape_configs:
       - 'openhab.local:8080'
 ````
 
-Replace `openhab.local` by the openhab host.   
+Replace `openhab.local` by the openhab host.
 
 #### Available configuration parameters
 
@@ -105,17 +105,17 @@ jmxMetricsEnabled=false
 
 ## Additional metric formats
 
-The metrics service was implemented using [Micrometer](https://micrometer.io), which supports a number of [monitoring systems](https://micrometer.io/docs) 
+The metrics service was implemented using [Micrometer](https://micrometer.io), which supports a number of [monitoring systems](https://micrometer.io/docs)
 It should be possible to add any of these, especially the ones using a pull mechanism ("scraping") like Prometheus does.
 
 ## Grafana
 
-You can now visualize the results in Grafana. Micrometer provides a public [Grafana dashboard here](https://grafana.com/grafana/dashboards/4701). 
+You can now visualize the results in Grafana. Micrometer provides a public [Grafana dashboard here](https://grafana.com/grafana/dashboards/4701).
 I adapted it a little bit to include the openHAB metrics.
 You can download it here [Dashboard](doc/dashboard.json).
 This has been tested with Prometheus - for other monitoring systems adaptions to the dashboard might be necessary.
 
-Here are some screenshots: 
+Here are some screenshots:
 
 ![Grafana (1)](doc/grafana-1.png)
 ![Grafana (2)](doc/grafana-2.png)
index 1fcc26c1dc09e6fdba8925ca7f6a8a539167530d..3f82e55dff1eafa4f132bdda8c03de2cc8dfa258 100644 (file)
@@ -14,10 +14,10 @@ This integration compliments the NEEO binding by exposing a brain's devices to a
 
 The openHAB NEEO Integration will provide the following:
 
-* Automatic discovery of NEEO brains on the network and automatic registering of the openHAB as an SDK.
-* A NEEO dashboard tile that will show the status of NEEO Brain connections and provide the ability to customize the mapping between openHAB things/item and NEEO device/capabilities.
-* Discovery of openHAB things on the NEEO app.
-* Full two-way communcation between openHAB and brain.
+- Automatic discovery of NEEO brains on the network and automatic registering of the openHAB as an SDK.
+- A NEEO dashboard tile that will show the status of NEEO Brain connections and provide the ability to customize the mapping between openHAB things/item and NEEO device/capabilities.
+- Discovery of openHAB things on the NEEO app.
+- Full two-way communcation between openHAB and brain.
 
 Item changes in openHAB will appear in NEEO and vice-versa.
 
@@ -25,10 +25,10 @@ Item changes in openHAB will appear in NEEO and vice-versa.
 
 If searching for openHAB devices on the NEEO Brain is always returning nothing, here are a few tips to solve the issue:
 
-1.  Read sections IP Address and openHAB Primary Address below.
-2.  Make sure the openHAB primary address is set to an address that is reachable from the NEEO Brain (see openHAB Primary Address section below).
-3.  Make sure your firewall is not blocking access to the openHAB server
-4.  Your search criteria has included too many openHAB devices (especially if "Expose ALL" setting has been turned on).
+1. Read sections IP Address and openHAB Primary Address below.
+2. Make sure the openHAB primary address is set to an address that is reachable from the NEEO Brain (see openHAB Primary Address section below).
+3. Make sure your firewall is not blocking access to the openHAB server
+4. Your search criteria has included too many openHAB devices (especially if "Expose ALL" setting has been turned on).
 
 The NEEO brain has an (unknown) size limit to the amount of items that can be returned for a search and you may be going beyond that limit.
 Narrow your search to a specific item to see if you were hitting that search limit.
@@ -388,7 +388,7 @@ The following changes have occurred:
 
 1. SKIP BACKWARD should be changed to PREVIOUS.
 2. SKIP FORWARD should be changed to NEXT.
-3. ENTER should be changed to CURSOR ENTER. 
+3. ENTER should be changed to CURSOR ENTER.
 4. Added support for 'specificname' (allowing you to override the name shown in NEEO).
 5. Added support for HSBType channels (creates 4 channels: overall, hue, brightness and saturation).
 6. Added NEEO Brain name to the Brain tab.
@@ -412,14 +412,14 @@ Alternatively, you can configure the settings in the file `conf/services/neeo.cf
 # Default is 'true'
 #exposeNeeoBinding=true|false
 
-# The maximum number of search results to return to the brain for any given 
-# search request. 
-# Default is 10 
+# The maximum number of search results to return to the brain for any given
+# search request.
+# Default is 10
 #searchLimit=10
 
 # The interval (in seconds) to check the status of the brain to determine if the
 # brain is reachable or not
-# Default is 10 
+# Default is 10
 #checkStatusInterval=10
 ```
 
index c2038900cec864741e836c53640692fb85c4cfae..1f2d0d196b475370fa71d0f9268d3e211f92517e 100644 (file)
@@ -7,16 +7,16 @@ openHAB Cloud service hosted by the [openHAB Foundation](https://www.openhabfoun
 
 The openHAB Cloud service (and thus the connector to it) is useful for different use cases:
 
-* It allows remote access to local openHAB instances without having to expose ports to the Internet or to require a complex VPN setup.
-* It serves as a connector to Firebase Cloud Messaging (FCM) for pushing notifications to mobile phone apps.
-* It provides integrations with 3rd party services that require OAuth2 authentication, such as Amazon Alexa or Google Home applications.
+- It allows remote access to local openHAB instances without having to expose ports to the Internet or to require a complex VPN setup.
+- It serves as a connector to Firebase Cloud Messaging (FCM) for pushing notifications to mobile phone apps.
+- It provides integrations with 3rd party services that require OAuth2 authentication, such as Amazon Alexa or Google Home applications.
 
 ## Installation via UI
 
-* Open the openHAB web UI and login as an administrator.
-* Click on Add-on Store, followed by System Integrations.
-* Use the Install button to install the openHAB Cloud Connector.
-* Register your session (https://myopenhab.org/) using UUID and Secret.
+- Open the openHAB web UI and login as an administrator.
+- Click on Add-on Store, followed by System Integrations.
+- Use the Install button to install the openHAB Cloud Connector.
+- Register your session (https://myopenhab.org/) using UUID and Secret.
 
 ## UUID and Secret
 
@@ -45,7 +45,7 @@ After installing this add-on, you will find configuration options in the openHAB
 
 ![Configuration](doc/configuration.png)
 
-By default, both remote access and push notifications are enabled.  
+By default, both remote access and push notifications are enabled.
 
 ### Advanced Configuration
 
@@ -57,7 +57,7 @@ This is also not required for remote access through the cloud service to functio
 
 Alternatively, you can configure the settings in the file `conf/services/openhabcloud.cfg`:
 
-```
+```ini
 ############################## openHAB Cloud Connector #############################
 
 # The URL of the openHAB Cloud service to connect to.
@@ -72,7 +72,7 @@ Alternatively, you can configure the settings in the file `conf/services/openhab
 # Optional, default is 'remote'.
 #mode=
 
-# A comma-separated list of items to be exposed to external services like IFTTT. 
+# A comma-separated list of items to be exposed to external services like IFTTT.
 # Events of those items are pushed to the openHAB Cloud and commands received for
 # these items from the openHAB Cloud service are accepted and sent to the local bus.
 # Optional, default is an empty list.
@@ -134,9 +134,9 @@ To specify media attachments and actions, there is another variant of the `sendN
 - `sendNotification(emailAddress, message, icon, tag, title, referenceId, onClickAction, mediaAttachmentUrl, actionButton1, actionButton2, actionButton3)`
 - `sendBroadcastNotification(message, icon, tag, title, referenceId, onClickAction, mediaAttachmentUrl, actionButton1, actionButton2, actionButton3)`
 
-
 The additional parameter for these variants have the following meaning:
-- `tag` : A user supplied tag to group messages for removing using the `hideNotificationByTag` action or grouping messages when displayed in the app. This renames the `severity` parameter, both are functionally identical. 
+
+- `tag` : A user supplied tag to group messages for removing using the `hideNotificationByTag` action or grouping messages when displayed in the app. This renames the `severity` parameter, both are functionally identical.
 - `title`: The title of the notification. Defaults to "openHAB" inside the Android and iOS apps.
 - `referenceId`: A user supplied id to both replace existing messages when pushed, and later remove messages with the `hideNotificationByReferenceId` actions.
 - `onClickAction`: The action to be performed when the user clicks on the notification. Specified using the [action syntax](#action-syntax).
@@ -198,6 +198,7 @@ then
   sendNotification("me@email.com", "Front door was opened!")
 end
 ```
+
 :::
 
 ::: tab JS
@@ -305,7 +306,7 @@ rules.when().item('Apartment_MotionSensor').changed().to('ON').then(() => {
     .withTitle('Motion Detected')
     .withReferenceId('motion-id-1234')
     .withMediaAttachment('https://apartment.my/camera-snapshot.jpg')
-    .addActionButton('Turn on the light', 'command:Apartment_Light:ON')  
+    .addActionButton('Turn on the light', 'command:Apartment_Light:ON')
     .send();
 }).build('Motion Detected Notification');
 ```
index db54fe0fb6c3181da0cf529eb6358bdf90db6f2f..b522c05e6ad0a5cf10531f0409d69b4b65cf7152 100644 (file)
@@ -5,9 +5,9 @@ Query functionality is also fully supported.
 
 Features:
 
-* Writing/reading information to relational database systems
-* Configurable database table names
-* Automatic table creation
+- Writing/reading information to relational database systems
+- Configurable database table names
+- Automatic table creation
 
 ## Disclaimer
 
@@ -35,8 +35,8 @@ Please also note possible [Free Tier](https://aws.amazon.com/free/) benefits.
 <!-- markdownlint-disable-next-line no-emphasis-as-heading -->
 **Login to AWS web console**
 
-* [Sign up](https://aws.amazon.com/) for Amazon AWS.
-* Select the AWS region in the [AWS console](https://console.aws.amazon.com/) using [these instructions](https://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/getting-started.html#select-region). Note the region identifier in the URL (e.g. `https://eu-west-1.console.aws.amazon.com/console/home?region=eu-west-1` means that region id is `eu-west-1`).
+- [Sign up](https://aws.amazon.com/) for Amazon AWS.
+- Select the AWS region in the [AWS console](https://console.aws.amazon.com/) using [these instructions](https://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/getting-started.html#select-region). Note the region identifier in the URL (e.g. `https://eu-west-1.console.aws.amazon.com/console/home?region=eu-west-1` means that region id is `eu-west-1`).
 
 <!-- markdownlint-disable-next-line no-emphasis-as-heading -->
 **Create policy controlling permissions for AWS user**
@@ -56,9 +56,8 @@ For users with old table schema, one can use pre-existing policy `AmazonDynamoDB
   5. Open _JSON_ tab and input the below policy code.
   6. Make the below the changes to the policy JSON `Resource` section
 
-* Modify the AWS account id from `055251986555` to to the one you have on clipboard (see step 2 above)
-* If you are on some other region than `eu-west-1`, change the entry accordingly
-
+- Modify the AWS account id from `055251986555` to to the one you have on clipboard (see step 2 above)
+- If you are on some other region than `eu-west-1`, change the entry accordingly
 
 ```json
 {
@@ -267,4 +266,3 @@ Eclipse instructions
 ```
 
 The `--add-opens` parameter is necessary also with the local temporary DynamoDB server, otherwise the mockito will fail at runtime with (`java.base does not "opens java.lang" to unnamed module`).
-
index f22392c26dea27131d8acc3643d4d8839a00dd27..568a9a588256933acef98d2f28cc36490374ae53 100644 (file)
@@ -265,9 +265,9 @@ Issues than can be identified and possibly fixed:
 
 ### For Developers
 
-* Clearly separated source files for the database-specific part of openHAB logic.
-* Code duplication by similar services is prevented.
-* Integrating a new SQL and JDBC enabled database is fairly simple.
+- Clearly separated source files for the database-specific part of openHAB logic.
+- Code duplication by similar services is prevented.
+- Integrating a new SQL and JDBC enabled database is fairly simple.
 
 ### Performance Tests
 
@@ -282,28 +282,28 @@ Not necessarily representative of the performance you may experience.
 | postgresql |     8.147 |   7.072 |   6.895 |          - | ext. Server VM |
 | sqlite     |     2.406 |   1.249 |   1.137 |    0.28 MB | local embedded |
 
-* Each test ran about 20 Times every 30 seconds.
-* openHAB 1.x has ready started for about a Minute.
-* the data in seconds for the evaluation are from the console output.
+- Each test ran about 20 Times every 30 seconds.
+- openHAB 1.x has ready started for about a Minute.
+- the data in seconds for the evaluation are from the console output.
 
 Used a script like this:
 
-```
+```java
 var count = 0;
 rule "DB STRESS TEST"
 when
-       Time cron "30 * * * * ?"
+    Time cron "30 * * * * ?"
 then
-       if( count = 24) count = 0
-       count = count+1
-       if( count > 3 && count < 23){
-               for( var i=500; i>1; i=i-1){
-                       postUpdate( NUMBERITEM, i)
-                       SWITCHITEM.previousState().state
-                       postUpdate( DIMMERITEM, OFF)
-                       NUMBERITEM.changedSince( now().minusMinutes(1))
-                       postUpdate( DIMMERITEM, ON)
-               }
-       }
+    if( count = 24) count = 0
+    count = count+1
+    if( count > 3 && count < 23){
+        for( var i=500; i>1; i=i-1){
+            postUpdate( NUMBERITEM, i)
+            SWITCHITEM.previousState().state
+            postUpdate( DIMMERITEM, OFF)
+            NUMBERITEM.changedSince( now().minusMinutes(1))
+            postUpdate( DIMMERITEM, ON)
+        }
+    }
 end
 ```
index a3a5ad134065e5921fffa791b056d4f114ef5123..153f7a628699188d8c0fec2211073deeb4e0a2b9 100644 (file)
@@ -3,7 +3,7 @@
 The [rrd4j](https://github.com/rrd4j/rrd4j) persistence service is based on a round-robin database.
 
 In contrast to a "normal" database such as db4o, a round-robin database does not grow in size - it has a fixed allocated size.
-This is accomplished by saving a fixed amount of datapoints and by doing data compression, which means that the older the data is, the less values are available. 
+This is accomplished by saving a fixed amount of datapoints and by doing data compression, which means that the older the data is, the less values are available.
 The data is kept in several "archives", each holding the data for its set timeframe at a defined level of granularity.
 The starting point for all archives is the actually saved data sample (Item value).
 So while you might store a sample value every minute for the last 8 hours, you might store the average per day for the last year.
@@ -101,7 +101,7 @@ The time interval (seconds) between reading consecutive samples from the OpenHAB
 
 It must be a positive integer value.
 
-Relation between the sample intervall and openHABs persistence strategy. 
+Relation between the sample intervall and openHABs persistence strategy.
 The persistence strategy determines on which events (time, change, startUp) a new value is provided to the persistence service, the sample intervall determines at which time steps the actually provided value is being read (i.e an everyMinute strategy provides a new value at every full minute, a sample intervall of 10 seconds would use such a provided value 6 times).
 
 ### `<consolidationFunction>` (Consolidation Function)
@@ -173,7 +173,7 @@ This means that any Item with an allocated strategy in the `rrd4j.persist` file
 
 #### default_numeric
 
-This datasource is used for plain `Number` items. 
+This datasource is used for plain `Number` items.
 It does not build averages over values, so that it is ensured that discrete values are kept when being read (e.g. an Item which has only states 0 and 1 will not be set to 0.5).
 
 ```
@@ -258,7 +258,7 @@ Items {
 ```
 
 **IMPORTANT:**
-When creating a custom datasource in the `rrd4j.cfg` file the used [sample interval](#sampleinterval-sample-interval) should be 20 seconds or less in order to keep the granularity. The selection of the used strategy has no effect on the granularity.  
+When creating a custom datasource in the `rrd4j.cfg` file the used [sample interval](#sampleinterval-sample-interval) should be 20 seconds or less in order to keep the granularity. The selection of the used strategy has no effect on the granularity.
 
 ## Troubleshooting
 
index 453ceb8d2c5c6731291f11f0bdf13f73d49330e4..f172bb39107a38188ec15533b4b69e2be76d568c 100644 (file)
@@ -1,9 +1,9 @@
 # Binary To JSON Transformation Service
 
-Transforms the input by Java Binary Block Parser syntax. 
+Transforms the input by Java Binary Block Parser syntax.
 
 See details about syntax from [JBBP homepage](https://github.com/raydac/java-binary-block-parser)
+
 ## Example
 
 Let's assume we have received string containing bytes in hexa string format `03FAFF` and we want to convert binary data to JSON format. Binary data contains 3 bytes and strict data format is following `byte a; byte b; ubyte c;`.
index 423b1d16fe8bebf4a6fed59a4e93dc783ae10245..ec0b527851f89acb79c1d5c3b6e0df38a900eb3c 100644 (file)
@@ -30,7 +30,7 @@ numfmt --to=iec-i --suffix=B --padding=7 %s
 #### Item
 
 This will replace the visible label in the UI with the transformation you apply with the command <TransformProgram>.
-  
+
 ```java
 String yourItem "Some info  [EXEC(/absolute/path/to/your/<TransformProgram> %s):%s]"
 ```
@@ -43,7 +43,7 @@ when
     Item YourTriggeringItem changed
 then
     var formatted = transform("EXEC","/absolute/path/to/your/<TransformProgram>", YourTriggeringItem.state.toString)
-    yourFormattedItem.sendCommand(formatted.toString) 
+    yourFormattedItem.sendCommand(formatted.toString)
 end
 ```
 
@@ -90,5 +90,5 @@ Please note: This profile is a one-way transformation, i.e. only values from a d
 
 ## Further Reading
 
-* [Manual](http://man7.org/linux/man-pages/man1/date.1.html) and [tutorial](https://linode.com/docs/tools-reference/tools/use-the-date-command-in-linux/) for date.
-* [Manual](http://man7.org/linux/man-pages/man1/numfmt.1.html) and [tutorial](https://www.pixelbeat.org/docs/numfmt.html) for numfmt.
+- [Manual](http://man7.org/linux/man-pages/man1/date.1.html) and [tutorial](https://linode.com/docs/tools-reference/tools/use-the-date-command-in-linux/) for date.
+- [Manual](http://man7.org/linux/man-pages/man1/numfmt.1.html) and [tutorial](https://www.pixelbeat.org/docs/numfmt.html) for numfmt.
index c7fbe818ac2f5880de0820f49db5ad94b6e39988..e5058817e5c166b2e20b6945bd1ac9acd78b293c 100644 (file)
@@ -1,6 +1,6 @@
 # Jinja Transformation Service
 
-Transforms a value using a jinja template. 
+Transforms a value using a jinja template.
 
 The main purpose of this transformer is the use in the home assistant discovery. Therfore not all features of the home assistant templating are supported.
 Basically on [Processing incoming data](https://www.home-assistant.io/docs/configuration/templating/#processing-incoming-data)
@@ -64,6 +64,6 @@ commandTransformation = "JINJA:{\"msgtype\":\"m.text\", \"body\":\"{{value}}\"}"
 
 ## Further Reading
 
-* Wikipedia on [Jinja](https://en.wikipedia.org/wiki/Jinja_(template_engine).
-* Home assistant [discovery](https://www.home-assistant.io/docs/mqtt/discovery/).
-* Home assistant [templating](https://www.home-assistant.io/docs/configuration/templating/).
+- Wikipedia on [Jinja](https://en.wikipedia.org/wiki/Jinja_(template_engine).
+- Home assistant [discovery](https://www.home-assistant.io/docs/mqtt/discovery/).
+- Home assistant [templating](https://www.home-assistant.io/docs/configuration/templating/).
index d2b71f602881cb7a5c48fd919f9e01d5d5e77f24..8fb5d85025bcf7f09f664ab0ded53b931337dbae 100644 (file)
@@ -62,5 +62,5 @@ This profile is a one-way transformation; only values from a device toward the i
 
 ## Further Reading
 
-* An extended [introduction](https://www.w3schools.com/js/js_json_intro.asp) can be found at W3School.
-* As JsonPath transformation is based on [Jayway](https://github.com/json-path/JsonPath), using an [online validator](https://jsonpath.herokuapp.com/) which also uses Jayway will give the most similar results. 
+- An extended [introduction](https://www.w3schools.com/js/js_json_intro.asp) can be found at W3School.
+- As JsonPath transformation is based on [Jayway](https://github.com/json-path/JsonPath), using an [online validator](https://jsonpath.herokuapp.com/) which also uses Jayway will give the most similar results.
index 92f7586dddfd2b39c364b0bd72b607d545537170..cffdc4cf6c787143eba270491579c256cb7f53b4 100644 (file)
@@ -33,7 +33,7 @@ This entry will match all numeric values not met by a previous range. Obviously,
 
 ### Not A Number
 
-Scale transform is designed to work with numeric or quantity states. When the value presented to scale transform does not match this (most of the time with NULL or UNDEF states) it will not be handled and a warning is raised in the openhab.log . This case can be smoothly avoided with a 
+Scale transform is designed to work with numeric or quantity states. When the value presented to scale transform does not match this (most of the time with NULL or UNDEF states) it will not be handled and a warning is raised in the openhab.log . This case can be smoothly avoided with a
 
 `NaN=Non Numeric State presented`
 
@@ -43,9 +43,9 @@ At last, Scale transform can take care of formatting an output with this entry :
 
 `format=%label% (%value%) !`
 
-Where : 
+Where :
 
-- `%label%` will be replaced by transformed value and 
+- `%label%` will be replaced by transformed value and
 - `%value%` is the numeric value presen
 
 ## Example
index 62ebac1a6aeaabde9e04fd3372306a05d669f7ab..2ac87120645f501afdd9693344cfb28e49882e19 100644 (file)
@@ -6,7 +6,7 @@ Transforms an [XML](https://www.w3.org/XML/) input using an [XPath](https://www.
 
 ### Basic Example
 
-Given a retrieved XML 
+Given a retrieved XML
 
 **Input XML**
 
@@ -48,15 +48,15 @@ A simple xpath query to fetch the Azimut value does not work as it does not addr
 
 There are two ways to address the namespace.
 
-* Simple path which may not work in complex XML.
-* With full qualified path.
+- Simple path which may not work in complex XML.
+- With full qualified path.
 
 The XPath
 
-* `[name()='PTZStatus']/*[name()='AbsoluteHigh']/*[name()='azimuth']/`
-* `/*[local-name()='PTZStatus' and namespace-uri()='http://www.hikvision.com/ver20/XMLSchema']/*[local-name()='AbsoluteHigh' and namespace-uri()='http://www.hikvision.com/ver20/XMLSchema']/*[local-name()='azimuth' and namespace-uri()='http://www.hikvision.com/ver20/XMLSchema']`
+- `[name()='PTZStatus']/*[name()='AbsoluteHigh']/*[name()='azimuth']/`
+- `/*[local-name()='PTZStatus' and namespace-uri()='http://www.hikvision.com/ver20/XMLSchema']/*[local-name()='AbsoluteHigh' and namespace-uri()='http://www.hikvision.com/ver20/XMLSchema']/*[local-name()='azimuth' and namespace-uri()='http://www.hikvision.com/ver20/XMLSchema']`
 
-returns 
+returns
 
 ```
 <azimuth>450</azimuth>
@@ -64,14 +64,14 @@ returns
 
 ### In Setup
 
-**.items**
+#### .items
 
-```csv
+```java
 String  Temperature_xml "Temperature [XPATH(/*[name()='PTZStatus']/*[name()='AbsoluteHigh']/*[name()='azimuth']/):%s Â°C]" {...}
 Number  Temperature "Temperature [%.1f Â°C]"
 ```
 
-**.rules**
+### .rules
 
 ```php
 rule "Convert XML to Item Type Number"
@@ -83,8 +83,8 @@ rule "Convert XML to Item Type Number"
     val mytest = transform("XPATH", "/*[name()='PTZStatus']
                                      /*[name()='AbsoluteHigh']
                                      /*[name()='azimuth']
-                                     /text()", 
-                                    Temperature_xml.state.toString )  
+                                     /text()",
+                                    Temperature_xml.state.toString )
     // Fully qualified
     val mytest = transform("XPATH", "/*[local-name()='PTZStatus'    and namespace-uri()='http://www.hikvision.com/ver20/XMLSchema']
                                      /*[local-name()='AbsoluteHigh' and namespace-uri()='http://www.hikvision.com/ver20/XMLSchema']
@@ -116,6 +116,6 @@ Please note: This profile is a one-way transformation, i.e. only values from a d
 
 ## Further Reading
 
-* An [introduction](https://www.w3schools.com/xml/xpath_intro.asp) to XPath at W3School
-* An informative explanation of [common mistakes](https://qxf2.com/blog/common-xpath-mistakes/).
-* Online validation tools like [this](https://www.freeformatter.com/xpath-tester.html) to check the syntax.
+- An [introduction](https://www.w3schools.com/xml/xpath_intro.asp) to XPath at W3School
+- An informative explanation of [common mistakes](https://qxf2.com/blog/common-xpath-mistakes/).
+- Online validation tools like [this](https://www.freeformatter.com/xpath-tester.html) to check the syntax.
index b9aca1abf159eb65d17752e2b4a70c0153992d05..e18dceeef3b256ae4187a62d9fa67961d813ad88 100644 (file)
@@ -4,14 +4,14 @@ Transform input using the XML Stylesheet Language for Transformations (XSLT).
 
 XSLT is a standard method to transform an XML structure from one document into a new document with a different structure.
 
-The transformation expects the rule to be read from a file which is stored under the `transform` folder. 
+The transformation expects the rule to be read from a file which is stored under the `transform` folder.
 To organize the various transformations one should use subfolders.
 
 General transformation rule summary:
 
-* The directive `xsl:output` defines how the output document should be structured.
-* The directive `xsl:template` specifies matching attributes for the XML node to find. 
-* The `xsl:template` tag contains the rule which specifies what should be done.
+- The directive `xsl:output` defines how the output document should be structured.
+- The directive `xsl:template` specifies matching attributes for the XML node to find.
+- The `xsl:template` tag contains the rule which specifies what should be done.
 
 The Rule uses XPath to gather the XML node information.
 For more information have a look at the [XPath transformation](https://docs.openhab.org/addons/transformations/xpath/readme.html) .
@@ -31,9 +31,9 @@ A simple but complete XSLT transformation looks like in the following example, w
 
 **transform/helloworld.xsl**
 
-* `xsl:output`: transform incoming document into another XML-like document, without indentation.
-* `xsl:template`: `match="/"` "any type of node", so the whole document.
-* The `xsl` rule does `select` the node `/root/node` and extracts the `value-of` attribute `val`.
+- `xsl:output`: transform incoming document into another XML-like document, without indentation.
+- `xsl:template`: `match="/"` "any type of node", so the whole document.
+- The `xsl` rule does `select` the node `/root/node` and extracts the `value-of` attribute `val`.
 
 ```xml
 <?xml version='1.0' encoding='UTF-8'?>
@@ -57,34 +57,34 @@ This example has a namespace defined, as you would find in real world applicatio
 
 **input XML**
 
-* The tag `<PTZStatus>` contains an attribute `xmlns=` which defines the namespace `http://www.hikvision.com/ver20/XMLSchema`.
+- The tag `<PTZStatus>` contains an attribute `xmlns=` which defines the namespace `http://www.hikvision.com/ver20/XMLSchema`.
 
 ```xml
 <?xml version="1.0" encoding="UTF-8"?>
 <PTZStatus version="2.0" xmlns="http://www.hikvision.com/ver20/XMLSchema">
-       <AbsoluteHigh>
-               <elevation>0</elevation>
-               <azimuth date="Fri, 18 Dec 2009 9:38 am PST" >450</azimuth>
-               <absoluteZoom>10</absoluteZoom>
-       </AbsoluteHigh>
+    <AbsoluteHigh>
+        <elevation>0</elevation>
+        <azimuth date="Fri, 18 Dec 2009 9:38 am PST" >450</azimuth>
+        <absoluteZoom>10</absoluteZoom>
+    </AbsoluteHigh>
 </PTZStatus>
 ```
 
 **transform/azimut.xsl**
 
-In the rule, the tag `<xsl:stylesheet>` has to have an attribute `xmlns:xsl="http://www.w3.org/1999/XSL/Transform"` and a second attribute `xmlns:`. 
+In the rule, the tag `<xsl:stylesheet>` has to have an attribute `xmlns:xsl="http://www.w3.org/1999/XSL/Transform"` and a second attribute `xmlns:`.
 This attribute has to be the same as the namespace for the input document.
 In the rule each step traversed along the path to the next tag has to be prepended with the `xmlns` namespace, here defined as `h`.
 
-* `xsl:output` transform incoming document into another XML-like document, no indentation, **without XML**.
-* `xsl:template`: `match="/"` whole document.
-* Full path to node `azimuth` reading out `date` attribute.
-* Add a linebreak by setting `&#10;` as text.
-* Search for node `azimuth` by prepending `//` and get the `text`.
+- `xsl:output` transform incoming document into another XML-like document, no indentation, **without XML**.
+- `xsl:template`: `match="/"` whole document.
+- Full path to node `azimuth` reading out `date` attribute.
+- Add a linebreak by setting `&#10;` as text.
+- Search for node `azimuth` by prepending `//` and get the `text`.
 
 ```xml
 <?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet version="2.0" 
+<xsl:stylesheet version="2.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:h="http://www.hikvision.com/ver20/XMLSchema">
    <xsl:output method="xml" indent="no" encoding="UTF-8" omit-xml-declaration="yes"  />
@@ -120,7 +120,7 @@ Please note: This profile is a one-way transformation, i.e. only values from a d
 
 ## Further Reading
 
-* Extended introduction and more [examples](https://en.wikipedia.org/wiki/XSLT#XSLT_examples) at Wikipedia.
-* A good [introduction](https://www.w3schools.com/xml/xsl_intro.asp) and [tutorial](https://www.w3schools.com/xml/xsl_transformation.asp) at W3School.
-* An informative [tutorial](https://www.ibm.com/developerworks/library/x-xsltmistakes/) of common mistakes.
-* Online XSL transformer tools like [this](https://www.freeformatter.com/xsl-transformer.html) to check the syntax.
+- Extended introduction and more [examples](https://en.wikipedia.org/wiki/XSLT#XSLT_examples) at Wikipedia.
+- A good [introduction](https://www.w3schools.com/xml/xsl_intro.asp) and [tutorial](https://www.w3schools.com/xml/xsl_transformation.asp) at W3School.
+- An informative [tutorial](https://www.ibm.com/developerworks/library/x-xsltmistakes/) of common mistakes.
+- Online XSL transformer tools like [this](https://www.freeformatter.com/xsl-transformer.html) to check the syntax.
index 15e3f94539c0385d4d8f34897cff42cfe3918436..623798524509968168096cd55d0dba43a44981d0 100644 (file)
@@ -1,6 +1,6 @@
 # Google Cloud Speech-to-Text
 
-Google Cloud STT Service uses the non-free Google Cloud Speech-to-Text API to transcript audio data to text. 
+Google Cloud STT Service uses the non-free Google Cloud Speech-to-Text API to transcript audio data to text.
 Be aware, that using this service may incur cost on your Google Cloud account.
 You can find pricing information on the [documentation page](https://cloud.google.com/speech-to-text#section-12).
 
@@ -8,15 +8,15 @@ You can find pricing information on the [documentation page](https://cloud.googl
 
 Before you can integrate this service with your Google Cloud Speech-to-Text, you must have a Google API Console project:
 
-* Select or create a GCP project. [link](https://console.cloud.google.com/cloud-resource-manager)
-* Make sure that billing is enabled for your project. [link](https://cloud.google.com/billing/docs/how-to/modify-project)
-* Enable the Cloud Speech-to-Text API. [link](https://console.cloud.google.com/apis/dashboard)
-* Set up authentication:
-  * Go to the "APIs & Services" -> "Credentials" page in the GCP Console and your project. [link](https://console.cloud.google.com/apis/credentials)
-  * From the "Create credentials" drop-down list, select "OAuth client ID".
-  * Select application type "Web application" and enter a name into the "Name" field.
-  * Add "https://www.google.com" to the "Authorized redirect URIs".
-  * Click Create. A pop-up appears, showing your "client ID" and "client secret".
+- Select or create a GCP project. [link](https://console.cloud.google.com/cloud-resource-manager)
+- Make sure that billing is enabled for your project. [link](https://cloud.google.com/billing/docs/how-to/modify-project)
+- Enable the Cloud Speech-to-Text API. [link](https://console.cloud.google.com/apis/dashboard)
+- Set up authentication:
+  - Go to the "APIs & Services" -> "Credentials" page in the GCP Console and your project. [link](https://console.cloud.google.com/apis/credentials)
+  - From the "Create credentials" drop-down list, select "OAuth client ID".
+  - Select application type "Web application" and enter a name into the "Name" field.
+  - Add "https://www.google.com" to the "Authorized redirect URIs".
+  - Click Create. A pop-up appears, showing your "client ID" and "client secret".
 
 ## Configuration
 
@@ -24,9 +24,9 @@ Before you can integrate this service with your Google Cloud Speech-to-Text, you
 
 Using your favorite configuration UI to edit **Settings / Other Services - Google Cloud Speech-to-Text** and set:
 
-* **Client Id** - Google Cloud Platform OAuth 2.0-Client Id.
-* **Client Secret** - Google Cloud Platform OAuth 2.0-Client Secret.
-* **Authorization Code** - This code is used once for retrieving the Google Cloud Platform access and refresh tokens.
+- **Client Id** - Google Cloud Platform OAuth 2.0-Client Id.
+- **Client Secret** - Google Cloud Platform OAuth 2.0-Client Secret.
+- **Authorization Code** - This code is used once for retrieving the Google Cloud Platform access and refresh tokens.
   **Please go to your browser ...**
   [https://accounts.google.com/o/oauth2/v2/auth?scope=https://www.googleapis.com/auth/cloud-platform&access_type=offline&prompt=consent&include_granted_scopes=true&response_type=code&redirect_uri=https://www.google.com&client_id=<clientId>](https://accounts.google.com/o/oauth2/v2/auth?scope=https://www.googleapis.com/auth/cloud-platform&access_type=offline&prompt=consent&include_granted_scopes=true&response_type=code&redirect_uri=https://www.google.com&client_id=<clientId>) (replace `<clientId>` by your Client Id)
   **... to generate an authorization code and paste it here**.
@@ -38,17 +38,17 @@ Using your favorite configuration UI to edit **Settings / Other Services - Googl
 
 Using your favorite configuration UI to edit **Settings / Other Services - Google Cloud Speech-to-Text**:
 
-* **Single Utterance Mode** - When enabled Google Cloud Platform is responsible for detecting when to stop listening after a single utterance. (Recommended)
-* **Max Transcription Seconds** - Max seconds to wait to force stop the transcription.
-* **Max Silence Seconds** - Only works when singleUtteranceMode is disabled, max seconds without getting new transcriptions to stop listening.
-* **Refresh Supported Locales** - Try loading supported locales from the documentation page.
+- **Single Utterance Mode** - When enabled Google Cloud Platform is responsible for detecting when to stop listening after a single utterance. (Recommended)
+- **Max Transcription Seconds** - Max seconds to wait to force stop the transcription.
+- **Max Silence Seconds** - Only works when singleUtteranceMode is disabled, max seconds without getting new transcriptions to stop listening.
+- **Refresh Supported Locales** - Try loading supported locales from the documentation page.
 
 ### Messages Configuration
 
 Using your favorite configuration UI to edit **Settings / Other Services - Google Cloud Speech-to-Text**:
 
-* **No Results Message** - Message to be told when no results. (Empty for disabled)
-* **Error Message** - Message to be told when an error has happened. (Empty for disabled)
+- **No Results Message** - Message to be told when no results. (Empty for disabled)
+- **Error Message** - Message to be told when an error has happened. (Empty for disabled)
 
 ### Configuration via a text file
 
@@ -56,7 +56,7 @@ In case you would like to setup the service via a text file, create a new file i
 
 Its contents should look similar to:
 
-```
+```ini
 org.openhab.voice.googlestt:clientId=ID
 org.openhab.voice.googlestt:clientSecret=SECRET
 org.openhab.voice.googlestt:authcode=XXXXX
@@ -72,12 +72,12 @@ org.openhab.voice.googlestt:errorMessage="Sorry, something went wrong"
 
 You can setup your preferred default Speech-to-Text in the UI:
 
-* Go to **Settings**.
-* Edit **System Services - Voice**.
-* Set **Google Cloud** as **Speech-to-Text**.
+- Go to **Settings**.
+- Edit **System Services - Voice**.
+- Set **Google Cloud** as **Speech-to-Text**.
 
 In case you would like to setup these settings via a text file, you can edit the file `runtime.cfg` in `$OPENHAB_ROOT/conf/services` and set the following entries:
 
-```
+```ini
 org.openhab.voice:defaultSTT=googlestt
 ```
index 2038faa239ea80c98c81f842dffd1e3bf9b1a40e..7665fc98a073dcdd074c2d33e286269849a01b82 100644 (file)
@@ -1,7 +1,7 @@
 # Google Cloud Text-to-Speech
 
-Google Cloud TTS Service uses the non-free Google Cloud Text-to-Speech API to convert text or Speech Synthesis Markup Language (SSML) input into audio data of natural human speech. 
-It provides multiple voices, available in different languages and variants and applies DeepMind’s groundbreaking research in WaveNet and Google’s powerful neural networks. 
+Google Cloud TTS Service uses the non-free Google Cloud Text-to-Speech API to convert text or Speech Synthesis Markup Language (SSML) input into audio data of natural human speech.
+It provides multiple voices, available in different languages and variants and applies DeepMind’s groundbreaking research in WaveNet and Google’s powerful neural networks.
 The Google Cloud TTS service uses the openHAB TTS cache to cache audio files produced from the most recent queries in order to reduce traffic, improve performance and reduce number of requests.
 Be aware, that using this service may incur cost on your Google Cloud account.
 You can find pricing information on the [documentation page](https://cloud.google.com/text-to-speech/#pricing-summary).
@@ -10,9 +10,9 @@ You can find pricing information on the [documentation page](https://cloud.googl
 
 <!-- MarkdownTOC -->
 
-* [Obtaining Credentials](#obtaining-credentials)
-* [Configuration](#configuration)
-* [Voice Configuration](#default-text-to-speech-and-voice-configuration)
+- [Obtaining Credentials](#obtaining-credentials)
+- [Configuration](#configuration)
+- [Voice Configuration](#default-text-to-speech-and-voice-configuration)
 
 <!-- /MarkdownTOC -->
 
@@ -36,24 +36,24 @@ Before you can integrate this service with your Google Cloud Text-to-Speech, you
 
 Using your favorite configuration UI to edit **Settings / Other Services - Google Cloud Text-to-Speech** and set:
 
-* **Client Id** - Google Cloud Platform OAuth 2.0-Client Id.
-* **Client Secret** - Google Cloud Platform OAuth 2.0-Client Secret.
-* **Authorization Code** - This code is used once for retrieving the Google Cloud Platform access and refresh tokens.
+- **Client Id** - Google Cloud Platform OAuth 2.0-Client Id.
+- **Client Secret** - Google Cloud Platform OAuth 2.0-Client Secret.
+- **Authorization Code** - This code is used once for retrieving the Google Cloud Platform access and refresh tokens.
   1. Go to `OAuth consent screen` ([link](https://console.cloud.google.com/apis/credentials/consent)) and set the `publishing status` to `production` to activate the created project.
   2. Wait a few minutes. The step before takes some time to go live. Sometimes it is necessary to wait a few hours, so you can try after some minutes, if it doesn't work, try again the next day.
   3. Go to your browser and access the following URL to generate an authorization code
 [https://accounts.google.com/o/oauth2/v2/auth?scope=https://www.googleapis.com/auth/cloud-platform&access_type=offline&prompt=consent&include_granted_scopes=true&response_type=code&redirect_uri=https://www.google.com&client_id=<clientId>](https://accounts.google.com/o/oauth2/v2/auth?scope=https://www.googleapis.com/auth/cloud-platform&access_type=offline&prompt=consent&include_granted_scopes=true&response_type=code&redirect_uri=https://www.google.com&client_id=CLIENTID) (replace `CLIENTID` at the end by your Client Id)
   4. After your browser has been redirected to https://www.google.com, the authorization code will be set in the browser URL as value of the "code" URL query parameter (e.g. `https://www.google.com/?code=XXXXXXXXXX&scope=https://www.googleapis.com/auth/cloud-platform` --> `XXXXXXXXXX`)
   5. After initial authorization, this code is not needed anymore. It is recommended to clear this configuration parameter afterwards.
-* **Pitch** - The pitch of selected voice, up to 20 semitones.
-* **Volume Gain** - The volume of the output between 16dB and -96dB.
-* **Speaking Rate** - The speaking rate can be 4x faster or slower than the normal rate.
+- **Pitch** - The pitch of selected voice, up to 20 semitones.
+- **Volume Gain** - The volume of the output between 16dB and -96dB.
+- **Speaking Rate** - The speaking rate can be 4x faster or slower than the normal rate.
 
 In case you would like to setup the service via a text file, create a new file in `$OPENHAB_ROOT/conf/services` named `googletts.cfg`
 
 Its contents should look similar to:
 
-```
+```ini
 org.openhab.voice.googletts:clientId=ID
 org.openhab.voice.googletts:clientSecret=SECRET
 org.openhab.voice.googletts:authcode=XXXXX
@@ -66,18 +66,20 @@ org.openhab.voice.googletts:speakingRate=1
 
 You can setup your preferred default Text-to-Speech and default voice in the UI:
 
-* Go to **Settings**.
-* Edit **System Services - Voice**.
-* Set **Google Cloud** as **Default Text-to-Speech**.
-* Choose your preferred **Default Voice** for your setup.
+- Go to **Settings**.
+- Edit **System Services - Voice**.
+- Set **Google Cloud** as **Default Text-to-Speech**.
+- Choose your preferred **Default Voice** for your setup.
 
 In case you would like to setup these settings via a text file, you can edit the file `runtime.cfg` in `$OPENHAB_ROOT/conf/services` and set the following entries:
 
-```
+```ini
 org.openhab.voice:defaultTTS=googletts
 org.openhab.voice:defaultVoice=googletts:XXX
 ```
+
 You can see the available voices by entering `voice voices` in the karaf console
+
 ```shell
 openhab> voice voices
   ...
index 43e28b62654d9c427f005e52440f09ad7f85aacc..ccfde0e807a950649ef240101e851cc2ebe6db37 100644 (file)
@@ -39,14 +39,14 @@ mactts:Yuna Yuna (ko_KR)
 
 You can setup your preferred default Text-to-Speech and default voice in the UI:
 
-* Go to **Settings**.
-* Edit **System Services - Voice**.
-* Set **macOS TTS** as **Default Text-to-Speech**.
-* Choose your preferred **Default Voice** for your setup.
+- Go to **Settings**.
+- Edit **System Services - Voice**.
+- Set **macOS TTS** as **Default Text-to-Speech**.
+- Choose your preferred **Default Voice** for your setup.
 
 In case you would like to setup these settings via a text file, you can edit the file `runtime.cfg` in `$OPENHAB_ROOT/conf/services` and set the following entries:
 
-```
+```ini
 org.openhab.voice:defaultTTS=mactts
 org.openhab.voice:defaultVoice=mactts:Alex
 ```
index 14a5d4277845ed72b7571d5c19fecad2157a259f..a11b8cab71b2943657c5ac07a579399f950f8a6b 100644 (file)
@@ -23,14 +23,14 @@ marytts:bits1hsmm bits1-hsmm (de)
 
 You can setup your preferred default Text-to-Speech and default voice in the UI:
 
-* Go to **Settings**.
-* Edit **System Services - Voice**.
-* Set **MaryTTS** as **Default Text-to-Speech**.
-* Choose your preferred **Default Voice** for your setup.
+- Go to **Settings**.
+- Edit **System Services - Voice**.
+- Set **MaryTTS** as **Default Text-to-Speech**.
+- Choose your preferred **Default Voice** for your setup.
 
 In case you would like to setup these settings via a text file, you can edit the file `runtime.cfg` in `$OPENHAB_ROOT/conf/services` and set the following entries:
 
-```
+```ini
 org.openhab.voice:defaultTTS=marytts
 org.openhab.voice:defaultVoice=marytts:cmuslthsmm
 ```
@@ -47,4 +47,3 @@ The log messages of Mary TTS are not bundled with the openHAB log messages in th
 ## Caching
 
 The MaryTTS service uses the openHAB TTS cache to cache audio files produced from the most recent queries in order to reduce traffic, improve performance and reduce number of requests.
-
index 93e9e84b3d76e89839c45cf23387b2028f942823..f87eaeddaedec89c4e2097c9656e707ee72bee78 100644 (file)
@@ -16,16 +16,16 @@ It supports a subset of SSML, and if you want to use it, be sure to start your t
 
 Using your favorite configuration UI to edit **Settings / Other Services - Mimic Text-to-Speech** and set:
 
-* **url** - Mimic URL. Default to `http://localhost:59125`
-* **speakingRate** - Controls how fast the voice speaks the text. A value of 1 is the speed of the training dataset. Less than 1 is faster, and more than 1 is slower.
-* **audioVolatility** - The amount of noise added to the generated audio (0-1). Can help mask audio artifacts from the voice model. Multi-speaker models tend to sound better with a lower amount of noise than single speaker models.
-* **phonemeVolatility** - The amount of noise used to generate phoneme durations (0-1). Allows for variable speaking cadance, with a value closer to 1 being more variable. Multi-speaker models tend to sound better with a lower amount of phoneme variability than single speaker models.
+- **url** - Mimic URL. Default to `http://localhost:59125`
+- **speakingRate** - Controls how fast the voice speaks the text. A value of 1 is the speed of the training dataset. Less than 1 is faster, and more than 1 is slower.
+- **audioVolatility** - The amount of noise added to the generated audio (0-1). Can help mask audio artifacts from the voice model. Multi-speaker models tend to sound better with a lower amount of noise than single speaker models.
+- **phonemeVolatility** - The amount of noise used to generate phoneme durations (0-1). Allows for variable speaking cadance, with a value closer to 1 being more variable. Multi-speaker models tend to sound better with a lower amount of phoneme variability than single speaker models.
 
 In case you would like to setup the service via a text file, create a new file in `$OPENHAB_ROOT/conf/services` named `mimictts.cfg`
 
 Its contents should look similar to:
 
-```
+```ini
 org.openhab.voice.mimictts:url=http://localhost:59125
 org.openhab.voice.mimictts:speakingRate=1
 org.openhab.voice.mimictts:audioVolatility=0.667
@@ -36,14 +36,14 @@ org.openhab.voice.mimictts:phonemeVolatility=0.8
 
 You can setup your preferred default Text-to-Speech and default voice in the UI:
 
-* Go to **Settings**.
-* Edit **System Services - Voice**.
-* Set **Mimic** as **Default Text-to-Speech**.
-* Choose your preferred **Default Voice** for your setup.
+- Go to **Settings**.
+- Edit **System Services - Voice**.
+- Set **Mimic** as **Default Text-to-Speech**.
+- Choose your preferred **Default Voice** for your setup.
 
 In case you would like to setup these settings via a text file, you can edit the file `runtime.cfg` in `$OPENHAB_ROOT/conf/services` and set the following entries:
 
-```
+```ini
 org.openhab.voice:defaultTTS=mimictts
 org.openhab.voice:defaultVoice=mimictts:fr_FR_siwis_low
 ```
index ad7d6a151c1c53a37101c8051f4f5a4dc11ffc8b..0acd73597336e49a0b0d8eb77c43737e6e45aa9e 100644 (file)
@@ -5,7 +5,7 @@ The Pico Text-to-Speech (TTS) service uses the TTS binary from SVOX for producin
 You manually need to install the pico2wave binary in order for this service to work correctly. You can,
 e.g., install it with apt-get on an Ubuntu system:
 
-```
+```bash
 sudo apt-get install libttspico-utils
 ```
 
@@ -34,14 +34,14 @@ Italian (it-IT)
 
 You can setup your preferred default Text-to-Speech and default voice in the UI:
 
-* Go to **Settings**.
-* Edit **System Services - Voice**.
-* Set **PicoTTS** as **Default Text-to-Speech**.
-* Choose your preferred **Default Voice** for your setup.
+- Go to **Settings**.
+- Edit **System Services - Voice**.
+- Set **PicoTTS** as **Default Text-to-Speech**.
+- Choose your preferred **Default Voice** for your setup.
 
 In case you would like to setup these settings via a text file, you can edit the file `runtime.cfg` in `$OPENHAB_ROOT/conf/services` and set the following entries:
 
-```
+```ini
 org.openhab.voice:defaultTTS=picotts
 org.openhab.voice:defaultVoice=picotts:frFR
 ```
index 57ad9ba250030b7071d240cdc64b63498f694ced..f2f3eaadf049f4fdd0b0bddce380b90073d49016 100644 (file)
@@ -7,9 +7,9 @@ This voice service allows you to use the open source library [Piper](https://git
 
 The add-on is compatible with the following platforms:
 
-* linux (armv7l, aarch64, x86_64, min GLIBC version 2.31)
-* macOS (x86_64 min version 11.0, aarch64 min version 13.0)
-* win64 (x86_64 min version Windows 10).
+- linux (armv7l, aarch64, x86_64, min GLIBC version 2.31)
+- macOS (x86_64 min version 11.0, aarch64 min version 13.0)
+- win64 (x86_64 min version Windows 10).
 
 ## Configuration
 
@@ -37,7 +37,7 @@ Models that support multiples speakers are shown as multiple voices in openHAB.
 
 Use your favorite configuration UI to edit **Settings / Other Services - Piper Text-to-Speech**:
 
-* **Preload model** - Keep last voice model used loaded in memory, these way it can be reused on next execution if the voice option matches.
+- **Preload model** - Keep last voice model used loaded in memory, these way it can be reused on next execution if the voice option matches.
 
 ### Configuration via a text file
 
@@ -53,10 +53,10 @@ org.openhab.voice.pipertts:preloadModel=true
 
 You can setup your preferred default Speech-to-Text in the UI:
 
-* Go to **Settings**.
-* Edit **System Services - Voice**.
-* Set **Piper** as **Text-to-Speech**.
-* Set your **Default Voice**.
+- Go to **Settings**.
+- Edit **System Services - Voice**.
+- Set **Piper** as **Text-to-Speech**.
+- Set your **Default Voice**.
 
 In case you would like to set up these settings via a text file, you can edit the file `runtime.cfg` in `$OPENHAB_ROOT/conf/services` and set the following entries:
 
index 1946fd5c15a37913ab58848e14141ca02e410e63..bd38f5ce76a43b87aa2d82d81442c498103d8dfb 100644 (file)
@@ -10,11 +10,11 @@ You can find pricing information on the [documentation page](https://aws.amazon.
 
 ## Obtaining Credentials
 
-* Sign up for Amazon Web Services (AWS). [link](https://portal.aws.amazon.com/billing/signup)
+- Sign up for Amazon Web Services (AWS). [link](https://portal.aws.amazon.com/billing/signup)
 
-When you sign up for AWS, your account is automatically signed up for all services in AWS, including Amazon Polly. 
+When you sign up for AWS, your account is automatically signed up for all services in AWS, including Amazon Polly.
 
-* Create an IAM User. [link](https://docs.aws.amazon.com/polly/latest/dg/setting-up.html)
+- Create an IAM User. [link](https://docs.aws.amazon.com/polly/latest/dg/setting-up.html)
 
 Services in AWS, such as Amazon Polly, require that you provide credentials when you access them so that the service can determine whether you have permissions to access the resources owned by that service.
 Within the AWS console, you can create access keys for your AWS account to access the Polly API.
@@ -25,11 +25,11 @@ To use the service you will need the **access key**, **secret key** and **server
 
 The following settings can be edited in UI (**Settings / Other Services - Polly Text-to-Speech**):
 
-* **Access Key** - The AWS credentials access key (required).
-* **Secret Key** - The AWS credentials secret key (required).
-* **Service Region** - The service region used for accessing Polly (required). To reduce latency select the region closest to you. E.g. "eu-west-1" (see [regions](https://docs.aws.amazon.com/general/latest/gr/rande.html#pol_region))
-* **Audio Format** - Allows for overriding the system default audio format.
+- **Access Key** - The AWS credentials access key (required).
+- **Secret Key** - The AWS credentials secret key (required).
+- **Service Region** - The service region used for accessing Polly (required). To reduce latency select the region closest to you. E.g. "eu-west-1" (see [regions](https://docs.aws.amazon.com/general/latest/gr/rande.html#pol_region))
+- **Audio Format** - Allows for overriding the system default audio format.
+
 Use "default" to select the system default audio format.
 The default audio format can be overriden with the value "mp3" or "ogg".
 
@@ -37,7 +37,7 @@ In case you would like to setup the service via a text file, create a new file i
 
 Its contents should look similar to:
 
-```
+```ini
 org.openhab.voice.pollytts:accessKey=ACCESS_KEY
 org.openhab.voice.pollytts:secretKey=SECRET_KEY
 org.openhab.voice.pollytts:serviceRegion=eu-west-1
@@ -48,14 +48,14 @@ org.openhab.voice.pollytts:audioFormat=default
 
 You can setup your preferred default Text-to-Speech and default voice in the UI:
 
-* Go to **Settings**.
-* Edit **System Services - Voice**.
-* Set **PollyTTS** as **Default Text-to-Speech**.
-* Choose your preferred **Default Voice** for your setup.
+- Go to **Settings**.
+- Edit **System Services - Voice**.
+- Set **PollyTTS** as **Default Text-to-Speech**.
+- Choose your preferred **Default Voice** for your setup.
 
 In case you would like to setup these settings via a text file, you can edit the file `runtime.cfg` in `$OPENHAB_ROOT/conf/services` and set the following entries:
 
-```
+```ini
 org.openhab.voice:defaultTTS=pollytts
 org.openhab.voice:defaultVoice=pollytts:Joanne
 ```
@@ -66,9 +66,9 @@ The PolyTTS service uses the openHAB TTS cache to cache audio files produced fro
 
 ## Rule Examples
 
-```
-say("Hello there")  
-say("Hello there", "pollytts:Joanne", "enhancedjavasound")  
-say("" + item.state, "pollytts:Joey", "enhancedjavasound")  
-say("<speak>Children, come to dinner <prosody volume='x-loud'>Right now!</prosody></speak>")  
+```java
+say("Hello there")
+say("Hello there", "pollytts:Joanne", "enhancedjavasound")
+say("" + item.state, "pollytts:Joey", "enhancedjavasound")
+say("<speak>Children, come to dinner <prosody volume='x-loud'>Right now!</prosody></speak>")
 ```
index 6428b88ac67f324d742bae7b6d171ce99f314dc4..112b4e82ad0382e3c319bc138d6ac34c3dab3408 100644 (file)
@@ -55,7 +55,7 @@ org.openhab.voice.rustpotterks:gainRef=0.004
 
 ## Magic Word Configuration
 
-The magic word to spot is gathered from your 'Voice' configuration. 
+The magic word to spot is gathered from your 'Voice' configuration.
 
 You can generate your own wakeword files using the [command line utility](https://github.com/GiviMAD/rustpotter-cli).
 
index bff099818d15a5a4dfc38eab640520fa4b634122..a7b397e58df97fd638d6046e38d53ee6bfb9ee17 100644 (file)
@@ -29,13 +29,13 @@ https://api.voicerss.org/?key=API_KEY&hl=de-de&f=44khz_16bit_mono&src=Hallo%20We
 
 The following settings can be edited in UI (**Settings / Other Services - VoiceRSS Text-to-Speech**):
 
-* **VoiceRSS API Key** - The API Key to get access to https://www.voicerss.org.
+- **VoiceRSS API Key** - The API Key to get access to https://www.voicerss.org.
 
 In case you would like to setup the service via a text file, create a new file in `$OPENHAB_ROOT/conf/services` named `voicerss.cfg`
 
 Its contents should look similar to:
 
-```
+```ini
 org.openhab.voice.voicerss:apiKey=1234567890
 ```
 
@@ -43,115 +43,115 @@ org.openhab.voice.voicerss:apiKey=1234567890
 
 It supports the following voices (depending on language):
 
-* Oda (Arabic - Egypt)
-* Salim (Arabic - Saudi Arabia)
-* Dimo (Bulgarian)
-* Rut (Catalan)
-* Luli (Chinese - China)
-* Shu (Chinese - China)
-* Chow (Chinese - China)
-* Wang (Chinese - China)
-* Jia (Chinese - Hong Kong)
-* Xia (Chinese - Hong Kong)
-* Chen (Chinese - Hong Kong)
-* Akemi (Chinese - Taiwan)
-* Lin (Chinese - Taiwan)
-* Lee (Chinese - Taiwan)
-* Nikola (Croatian)
-* Josef (Czech)
-* Freja (Danish)
-* Daan (Dutch - Belgium)
-* Lotte (Dutch - Netherlands)
-* Bram (Dutch - Netherlands)
-* Zoe (English - Australia)
-* Isla (English - Australia)
-* Evie (English - Australia)
-* Jack (English - Australia)
-* Rose (English - Canada)
-* Clara (English - Canada)
-* Emma (English - Canada)
-* Mason (English - Canada)
-* Alice (English - Great Britain)
-* Nancy (English - Great Britain)
-* Lily (English - Great Britain)
-* Harry (English - Great Britain)
-* Eka (English - India)
-* Jai (English - India)
-* Ajit (English - India)
-* Oran (English - Ireland)
-* Linda (English - United States)
-* Amy (English - United States)
-* Mary (English - United States)
-* John (English - United States)
-* Mike (English - United States)
-* Aada (Finnish)
-* Emile (French - Canada)
-* Olivia (French - Canada)
-* Logan (French - Canada)
-* Felix (French - Canada)
-* Bette (French - France)
-* Iva (French - France)
-* Zola (French - France)
-* Axel (French - France)
-* Theo (French - Switzerland)
-* Lukas (German - Austria)
-* Hanna (German - Germany)
-* Lina (German - Germany)
-* Jonas (German - Germany)
-* Tim (German - Switzerland)
-* Neo (Greek)
-* Rami (Hebrew)
-* Puja (Hindi)
-* Kabir (Hindi)
-* Mate (Hungarian)
-* Intan (Indonesian)
-* Bria (Italian)
-* Mia (Italian)
-* Pietro (Italian)
-* Hina (Japanese)
-* Airi (Japanese)
-* Fumi (Japanese)
-* Akira (Japanese)
-* Nari (Korean)
-* Aqil (Malay)
-* Marte (Norwegian)
-* Erik (Norwegian)
-* Julia (Polish)
-* Jan (Polish)
-* Marcia (Portuguese - Brazil)
-* Ligia (Portuguese - Brazil)
-* Yara (Portuguese - Brazil)
-* Dinis (Portuguese - Brazil)
-* Leonor (Portuguese - Portugal)
-* Doru (Romanian)
-* Olga (Russian)
-* Marina (Russian)
-* Peter (Russian)
-* Beda (Slovak)
-* Vid (Slovenian)
-* Juana (Spanish - Mexico)
-* Silvia (Spanish - Mexico)
-* Teresa (Spanish - Mexico)
-* Jose (Spanish - Mexico)
-* Camila (Spanish - Spain)
-* Sofia (Spanish - Spain)
-* Luna (Spanish - Spain)
-* Diego (Spanish - Spain)
-* Molly (Swedish)
-* Hugo (Swedish)
-* Sai (Tamil)
-* Ukrit (Thai)
-* Omer (Turkish)
-* Chi (Vietnamese)
+- Oda (Arabic - Egypt)
+- Salim (Arabic - Saudi Arabia)
+- Dimo (Bulgarian)
+- Rut (Catalan)
+- Luli (Chinese - China)
+- Shu (Chinese - China)
+- Chow (Chinese - China)
+- Wang (Chinese - China)
+- Jia (Chinese - Hong Kong)
+- Xia (Chinese - Hong Kong)
+- Chen (Chinese - Hong Kong)
+- Akemi (Chinese - Taiwan)
+- Lin (Chinese - Taiwan)
+- Lee (Chinese - Taiwan)
+- Nikola (Croatian)
+- Josef (Czech)
+- Freja (Danish)
+- Daan (Dutch - Belgium)
+- Lotte (Dutch - Netherlands)
+- Bram (Dutch - Netherlands)
+- Zoe (English - Australia)
+- Isla (English - Australia)
+- Evie (English - Australia)
+- Jack (English - Australia)
+- Rose (English - Canada)
+- Clara (English - Canada)
+- Emma (English - Canada)
+- Mason (English - Canada)
+- Alice (English - Great Britain)
+- Nancy (English - Great Britain)
+- Lily (English - Great Britain)
+- Harry (English - Great Britain)
+- Eka (English - India)
+- Jai (English - India)
+- Ajit (English - India)
+- Oran (English - Ireland)
+- Linda (English - United States)
+- Amy (English - United States)
+- Mary (English - United States)
+- John (English - United States)
+- Mike (English - United States)
+- Aada (Finnish)
+- Emile (French - Canada)
+- Olivia (French - Canada)
+- Logan (French - Canada)
+- Felix (French - Canada)
+- Bette (French - France)
+- Iva (French - France)
+- Zola (French - France)
+- Axel (French - France)
+- Theo (French - Switzerland)
+- Lukas (German - Austria)
+- Hanna (German - Germany)
+- Lina (German - Germany)
+- Jonas (German - Germany)
+- Tim (German - Switzerland)
+- Neo (Greek)
+- Rami (Hebrew)
+- Puja (Hindi)
+- Kabir (Hindi)
+- Mate (Hungarian)
+- Intan (Indonesian)
+- Bria (Italian)
+- Mia (Italian)
+- Pietro (Italian)
+- Hina (Japanese)
+- Airi (Japanese)
+- Fumi (Japanese)
+- Akira (Japanese)
+- Nari (Korean)
+- Aqil (Malay)
+- Marte (Norwegian)
+- Erik (Norwegian)
+- Julia (Polish)
+- Jan (Polish)
+- Marcia (Portuguese - Brazil)
+- Ligia (Portuguese - Brazil)
+- Yara (Portuguese - Brazil)
+- Dinis (Portuguese - Brazil)
+- Leonor (Portuguese - Portugal)
+- Doru (Romanian)
+- Olga (Russian)
+- Marina (Russian)
+- Peter (Russian)
+- Beda (Slovak)
+- Vid (Slovenian)
+- Juana (Spanish - Mexico)
+- Silvia (Spanish - Mexico)
+- Teresa (Spanish - Mexico)
+- Jose (Spanish - Mexico)
+- Camila (Spanish - Spain)
+- Sofia (Spanish - Spain)
+- Luna (Spanish - Spain)
+- Diego (Spanish - Spain)
+- Molly (Swedish)
+- Hugo (Swedish)
+- Sai (Tamil)
+- Ukrit (Thai)
+- Omer (Turkish)
+- Chi (Vietnamese)
 
 ### Default Text-to-Speech and Voice Configuration
 
 You can setup your preferred default Text-to-Speech and default voice in the UI:
 
-* Go to **Settings**.
-* Edit **System Services - Voice**.
-* Set **VoiceRSS** as **Default Text-to-Speech**.
-* Choose your preferred **Default Voice** for your setup.
+- Go to **Settings**.
+- Edit **System Services - Voice**.
+- Set **VoiceRSS** as **Default Text-to-Speech**.
+- Choose your preferred **Default Voice** for your setup.
 
 In case you would like to setup these settings via a text file, you can edit the file `runtime.cfg` in `$OPENHAB_ROOT/conf/services` and set the following entries:
 
index 7a1736bf8f6a15063c9f566bfcc8e7b4ed9ae149..964c84afa6dcc9f37c6110bffea7d5db2a1cf5f7 100644 (file)
@@ -11,11 +11,11 @@ More to come.
 This add-on uses an underling binary to work.
 The following platforms are supported:
 
-* linux-aarch64
-* linux-armv7l
-* linux-x86_64
-* osx
-* win64
+- linux-aarch64
+- linux-armv7l
+- linux-x86_64
+- osx
+- win64
 
 **On Linux this binary requires the package libatomic to be installed (apt install libatomic1).**
 
@@ -31,17 +31,17 @@ You should unzip the contained folder into '\<openHAB userdata\>/vosk/' and rena
 
 Use your favorite configuration UI to edit **Settings / Other Services - Vosk Speech-to-Text**:
 
-* **Preload Model** - Keep language model loaded.
-* **Single Utterance Mode** - When enabled recognition stops listening after a single utterance.
-* **Max Transcription Seconds** - Max seconds to wait to force stop the transcription.
-* **Max Silence Seconds** - Only works when singleUtteranceMode is disabled, max seconds without getting new transcriptions to stop listening.
+- **Preload Model** - Keep language model loaded.
+- **Single Utterance Mode** - When enabled recognition stops listening after a single utterance.
+- **Max Transcription Seconds** - Max seconds to wait to force stop the transcription.
+- **Max Silence Seconds** - Only works when singleUtteranceMode is disabled, max seconds without getting new transcriptions to stop listening.
 
 ### Messages Configuration
 
 Use your favorite configuration UI to edit **Settings / Other Services - Vosk Speech-to-Text**:
 
-* **No Results Message** - Message to be told when no results.
-* **Error Message** - Message to be told when an error has happened.
+- **No Results Message** - Message to be told when no results.
+- **Error Message** - Message to be told when an error has happened.
 
 ### Configuration via a text file
 
@@ -62,12 +62,12 @@ org.openhab.voice.voskstt:errorMessage="Sorry, something went wrong"
 
 You can setup your preferred default Speech-to-Text in the UI:
 
-* Go to **Settings**.
-* Edit **System Services - Voice**.
-* Set **Vosk** as **Speech-to-Text**.
+- Go to **Settings**.
+- Edit **System Services - Voice**.
+- Set **Vosk** as **Speech-to-Text**.
 
 In case you would like to setup these settings via a text file, you can edit the file `runtime.cfg` in `$OPENHAB_ROOT/conf/services` and set the following entries:
 
-```
+```ini
 org.openhab.voice:defaultSTT=voskstt
 ```
index c9610b56cc145e3f80933a9b540523f5c353cb95..c3a5e652b422248d2b65b2625625de1463b62d42 100644 (file)
@@ -1,15 +1,15 @@
 # IBM Watson Speech-to-Text
 
-Watson STT Service uses the non-free IBM Watson Speech-to-Text API to transcript audio data to text. 
+Watson STT Service uses the non-free IBM Watson Speech-to-Text API to transcript audio data to text.
 Be aware that using this service may incur cost on your IBM account.
 You can find pricing information on [this page](https://www.ibm.com/cloud/watson-speech-to-text/pricing).
 
 ## Obtaining Credentials
 
-Before you can use this add-on, you should create a Speech-to-Text instance in the IBM Cloud service. 
+Before you can use this add-on, you should create a Speech-to-Text instance in the IBM Cloud service.
 
-* Go to the following [link](https://cloud.ibm.com/catalog/services/speech-to-text) and create the instance in your desired region.
-* After the instance is created you should be able to view its url and api key.
+- Go to the following [link](https://cloud.ibm.com/catalog/services/speech-to-text) and create the instance in your desired region.
+- After the instance is created you should be able to view its url and api key.
 
 ## Configuration
 
@@ -17,22 +17,22 @@ Before you can use this add-on, you should create a Speech-to-Text instance in t
 
 Use your favorite configuration UI to edit **Settings / Other Services - IBM Watson Speech-to-Text** and set:
 
-* **Api Key** - Api key for Speech-to-Text instance created on IBM Cloud.
-* **Instance Url** - Url for Speech-to-Text instance created on IBM Cloud.
+- **Api Key** - Api key for Speech-to-Text instance created on IBM Cloud.
+- **Instance Url** - Url for Speech-to-Text instance created on IBM Cloud.
 
 ### Speech to Text Configuration
 
 Use your favorite configuration UI to edit **Settings / Other Services - IBM Watson Speech-to-Text**:
 
-* **Prefer Multimedia Model** - Prefer multimedia to telephony [models](https://cloud.ibm.com/docs/speech-to-text?topic=speech-to-text-models-ng). Multimedia models are intended for audio that has a minimum sampling rate of 16 kHz, while telephony models are intended for audio that has a minimum sampling rate of 8 kHz.
-* **Background Audio Suppression** - Use the parameter to suppress side conversations or background noise.
-* **Speech Detector Sensitivity** - Use the parameter to suppress word insertions from music, coughing, and other non-speech events.
-* **Single Utterance Mode** - When enabled recognition stops listening after a single utterance.
-* **Max Silence Seconds** - The time in seconds after which, if only silence (no speech) is detected in the audio, the connection is closed.
-* **Opt Out Logging** - By default, all IBM Watson™ services log requests and their results. Logging is done only to improve the services for future users. The logged data is not shared or made public.
-* **No Results Message** - Message to be told when no results.
-* **Smart Formatting** - If true, the service converts dates, times, series of digits and numbers, phone numbers, currency values, and internet addresses into more readable. (Not available for all locales)
-* **Redaction** - If true, the service redacts, or masks, numeric data from final transcripts. (Not available for all locales)
+- **Prefer Multimedia Model** - Prefer multimedia to telephony [models](https://cloud.ibm.com/docs/speech-to-text?topic=speech-to-text-models-ng). Multimedia models are intended for audio that has a minimum sampling rate of 16 kHz, while telephony models are intended for audio that has a minimum sampling rate of 8 kHz.
+- **Background Audio Suppression** - Use the parameter to suppress side conversations or background noise.
+- **Speech Detector Sensitivity** - Use the parameter to suppress word insertions from music, coughing, and other non-speech events.
+- **Single Utterance Mode** - When enabled recognition stops listening after a single utterance.
+- **Max Silence Seconds** - The time in seconds after which, if only silence (no speech) is detected in the audio, the connection is closed.
+- **Opt Out Logging** - By default, all IBM Watson™ services log requests and their results. Logging is done only to improve the services for future users. The logged data is not shared or made public.
+- **No Results Message** - Message to be told when no results.
+- **Smart Formatting** - If true, the service converts dates, times, series of digits and numbers, phone numbers, currency values, and internet addresses into more readable. (Not available for all locales)
+- **Redaction** - If true, the service redacts, or masks, numeric data from final transcripts. (Not available for all locales)
 
 ### Configuration via a text file
 
@@ -40,7 +40,7 @@ In case you would like to setup the service via a text file, create a new file i
 
 Its contents should look similar to:
 
-```
+```ini
 org.openhab.voice.watsonstt:apiKey=******
 org.openhab.voice.watsonstt:instanceUrl=https://api.***.speech-to-text.watson.cloud.ibm.com/instances/*****
 org.openhab.voice.watsonstt:backgroundAudioSuppression=0.5
@@ -58,12 +58,12 @@ org.openhab.voice.watsonstt:errorMessage="Sorry, something went wrong"
 
 You can setup your preferred default Speech-to-Text in the UI:
 
-* Go to **Settings**.
-* Edit **System Services - Voice**.
-* Set **Watson** as **Speech-to-Text**.
+- Go to **Settings**.
+- Edit **System Services - Voice**.
+- Set **Watson** as **Speech-to-Text**.
 
 In case you would like to setup these settings via a text file, you can edit the file `runtime.cfg` in `$OPENHAB_ROOT/conf/services` and set the following entries:
 
-```
+```ini
 org.openhab.voice:defaultSTT=watsonstt
 ```
index 03ea4b6849e74cf7478f25a679152a925b71ee88..745a302440d1ad0d382c92f13dbf810dc539ce43 100644 (file)
@@ -7,12 +7,12 @@ It also uses [libfvad](https://github.com/dpirch/libfvad) for voice activity det
 
 Whisper enables speech recognition for multiple languages and dialects:
 
-english, chinese, german, spanish, russian, korean, french, japanese, portuguese, turkish, polish, catalan, dutch, arabic, swedish, 
-italian, indonesian, hindi, finnish, vietnamese, hebrew, ukrainian, greek, malay, czech, romanian, danish, hungarian, tamil, norwegian, 
-thai, urdu, croatian, bulgarian, lithuanian, latin, maori, malayalam, welsh, slovak, telugu, persian, latvian, bengali, serbian, azerbaijani, 
-slovenian, kannada, estonian, macedonian, breton, basque, icelandic, armenian, nepali, mongolian, bosnian, kazakh, albanian, swahili, galician, 
-marathi, punjabi, sinhala, khmer, shona, yoruba, somali, afrikaans, occitan, georgian, belarusian, tajik, sindhi, gujarati, amharic, yiddish, lao, 
-uzbek, faroese, haitian, pashto, turkmen, nynorsk, maltese, sanskrit, luxembourgish, myanmar, tibetan, tagalog, malagasy, assamese, tatar, lingala, 
+english, chinese, german, spanish, russian, korean, french, japanese, portuguese, turkish, polish, catalan, dutch, arabic, swedish,
+italian, indonesian, hindi, finnish, vietnamese, hebrew, ukrainian, greek, malay, czech, romanian, danish, hungarian, tamil, norwegian,
+thai, urdu, croatian, bulgarian, lithuanian, latin, maori, malayalam, welsh, slovak, telugu, persian, latvian, bengali, serbian, azerbaijani,
+slovenian, kannada, estonian, macedonian, breton, basque, icelandic, armenian, nepali, mongolian, bosnian, kazakh, albanian, swahili, galician,
+marathi, punjabi, sinhala, khmer, shona, yoruba, somali, afrikaans, occitan, georgian, belarusian, tajik, sindhi, gujarati, amharic, yiddish, lao,
+uzbek, faroese, haitian, pashto, turkmen, nynorsk, maltese, sanskrit, luxembourgish, myanmar, tibetan, tagalog, malagasy, assamese, tatar, lingala,
 hausa, bashkir, javanese and sundanese.
 
 ## Supported platforms
@@ -22,9 +22,9 @@ You can find here the used [whisper.cpp Java wrapper](https://github.com/GiviMAD
 
 The following platforms are supported:
 
-* Windows10 x86_64
-* Debian GLIBC x86_64/arm64 (min GLIBC version 2.31 / min Debian version Focal)
-* macOS x86_64/arm64 (min version v11.0)
+- Windows10 x86_64
+- Debian GLIBC x86_64/arm64 (min GLIBC version 2.31 / min Debian version Focal)
+- macOS x86_64/arm64 (min version v11.0)
 
 The native binaries for those platforms are included in this add-on provided with the openHAB distribution.
 
@@ -58,8 +58,8 @@ Before you can use this service you should configure your model.
 
 You can download them from the sources provided by the [whisper.cpp](https://github.com/ggerganov/whisper.cpp) author:
 
-* https://huggingface.co/ggerganov/whisper.cpp
-* https://ggml.ggerganov.com
+- https://huggingface.co/ggerganov/whisper.cpp
+- https://ggml.ggerganov.com
 
 You should place the downloaded .bin model in '\<openHAB userdata\>/whisper/' so the add-ons can find them.
 
@@ -108,49 +108,48 @@ Use your favorite configuration UI to edit the Whisper settings:
 
 General options.
 
-* **Model Name** - Model name. The 'ggml-' prefix and '.bin' extension are optional here but required on the filename. (ex: tiny.en -> ggml-tiny.en.bin)
-* **Preload Model** - Keep whisper model loaded.
-* **Single Utterance Mode** - When enabled recognition stops listening after a single utterance.
-* **Min Transcription Seconds** - Forces min audio duration passed to whisper, in seconds.
-* **Max Transcription Seconds** - Max seconds for force trigger the transcription, without wait for detect silence.
-* **Initial Silence Seconds** - Max seconds without any voice activity to abort the transcription.
-* **Max Silence Seconds** - Max consecutive silence seconds to trigger the transcription.
-* **Remove Silence** - Remove start and end silence from the audio to transcribe.
+- **Model Name** - Model name. The 'ggml-' prefix and '.bin' extension are optional here but required on the filename. (ex: tiny.en -> ggml-tiny.en.bin)
+- **Preload Model** - Keep whisper model loaded.
+- **Single Utterance Mode** - When enabled recognition stops listening after a single utterance.
+- **Min Transcription Seconds** - Forces min audio duration passed to whisper, in seconds.
+- **Max Transcription Seconds** - Max seconds for force trigger the transcription, without wait for detect silence.
+- **Initial Silence Seconds** - Max seconds without any voice activity to abort the transcription.
+- **Max Silence Seconds** - Max consecutive silence seconds to trigger the transcription.
+- **Remove Silence** - Remove start and end silence from the audio to transcribe.
 
 ### Voice Activity Detection Configuration
 
 Configure VAD options.
 
-* **Audio Step** - Audio processing step in seconds for the voice activity detection.
-* **Voice Activity Detection Mode** - Selected VAD Mode.
-* **Voice Activity Detection Sensitivity** - Percentage in range 0-1 of voice activity in one second to consider it as voice.
-* **Voice Activity Detection Step** - VAD detector internal step in ms (only allows 10, 20 or 30). (Audio Step / Voice Activity Detection Step = number of vad executions per audio step).
+- **Audio Step** - Audio processing step in seconds for the voice activity detection.
+- **Voice Activity Detection Mode** - Selected VAD Mode.
+- **Voice Activity Detection Sensitivity** - Percentage in range 0-1 of voice activity in one second to consider it as voice.
+- **Voice Activity Detection Step** - VAD detector internal step in ms (only allows 10, 20 or 30). (Audio Step / Voice Activity Detection Step = number of vad executions per audio step).
 
 ### Whisper Configuration
 
 Configure whisper options.
 
-* **Threads** - Number of threads used by whisper. (0 to use host max threads)
-* **Sampling Strategy** - Sampling strategy used.
-* **Beam Size** - Beam Size configuration for sampling strategy Bean Search.
-* **Greedy Best Of** - Best Of configuration for sampling strategy Greedy.
-* **Speed Up** - Speed up audio by x2. (Reduced accuracy)
-* **Audio Context** - Overwrite the audio context size. (0 to use whisper default context size)
-* **Temperature** - Temperature threshold.
-* **Initial Prompt** - Initial prompt for whisper.
-* **OpenVINO Device** - Initialize OpenVINO encoder. (built-in binaries do not support OpenVINO, this has no effect)
-* **Use GPU** - Enables GPU usage. (built-in binaries do not support GPU usage, this has no effect)
+- **Threads** - Number of threads used by whisper. (0 to use host max threads)
+- **Sampling Strategy** - Sampling strategy used.
+- **Beam Size** - Beam Size configuration for sampling strategy Bean Search.
+- **Greedy Best Of** - Best Of configuration for sampling strategy Greedy.
+- **Speed Up** - Speed up audio by x2. (Reduced accuracy)
+- **Audio Context** - Overwrite the audio context size. (0 to use whisper default context size)
+- **Temperature** - Temperature threshold.
+- **Initial Prompt** - Initial prompt for whisper.
+- **OpenVINO Device** - Initialize OpenVINO encoder. (built-in binaries do not support OpenVINO, this has no effect)
+- **Use GPU** - Enables GPU usage. (built-in binaries do not support GPU usage, this has no effect)
 
 ### Grammar Configuration
 
 Configure the grammar options.
 
-* **Grammar** - Grammar to use in GBNF format (whisper.cpp BNF variant).
-* **Use Grammar** - Enable grammar usage.
-* **Grammar penalty** - Penalty for non grammar tokens.
-
-#### Grammar Example:
+- **Grammar** - Grammar to use in GBNF format (whisper.cpp BNF variant).
+- **Use Grammar** - Enable grammar usage.
+- **Grammar penalty** - Penalty for non grammar tokens.
 
+#### Grammar Example
 
 ```gbnf
 # Grammar should define a root expression that should end with a dot.
@@ -183,14 +182,14 @@ timer ::= [0-9]+
 
 ### Messages Configuration
 
-* **No Results Message** - Message to be told on no results.
-* **Error Message** - Message to be told on exception.
+- **No Results Message** - Message to be told on no results.
+- **Error Message** - Message to be told on exception.
 
 ### Developer Configuration
 
-* **Create WAV Record** - Create wav audio file on each whisper execution, also creates a '.prop' file containing the transcription.
-* **Record Sample Format** - Change the record sample format. (allows i16 or f32)
-* **Enable Whisper Log** - Emit whisper.cpp library logs as add-on debug logs.
+- **Create WAV Record** - Create wav audio file on each whisper execution, also creates a '.prop' file containing the transcription.
+- **Record Sample Format** - Change the record sample format. (allows i16 or f32)
+- **Enable Whisper Log** - Emit whisper.cpp library logs as add-on debug logs.
 
 You can find [here](https://github.com/givimad/whisper-finetune-oh) information on how to fine-tune a model using the generated records.
 
@@ -200,10 +199,10 @@ In case you would like to set up the service via a text file, create a new file
 
 Its contents should look similar to:
 
-```
+```ini
 org.openhab.voice.whisperstt:modelName=tiny
 org.openhab.voice.whisperstt:initSilenceSeconds=0.3
-org.openhab.voice.whisperstt:removeSilence=true 
+org.openhab.voice.whisperstt:removeSilence=true
 org.openhab.voice.whisperstt:stepSeconds=0.3
 org.openhab.voice.whisperstt:vadStep=0.5
 org.openhab.voice.whisperstt:singleUtteranceMode=true
@@ -237,12 +236,12 @@ org.openhab.voice.whisperstt:grammarLines=
 
 You can select your preferred default Speech-to-Text in the UI:
 
-* Go to **Settings**.
-* Edit **System Services - Voice**.
-* Set **Whisper** as **Speech-to-Text**.
+- Go to **Settings**.
+- Edit **System Services - Voice**.
+- Set **Whisper** as **Speech-to-Text**.
 
 In case you would like to set up these settings via a text file, you can edit the file `runtime.cfg` in `$OPENHAB_ROOT/conf/services` and set the following entries:
 
-```
+```ini
 org.openhab.voice:defaultSTT=whisperstt
 ```