Reported on the forum. Due to selection of the `RoundingMode` instead of a `MathContext` the average calculation is returning unexpected results: 19.0 °C / 19.5 °C results in 19.3 °C (instead of 19.25 °C) which might be acceptable, but 19.5 °C / 19.5 °C results in 20 °C (instead of 19.5 °C) which is obviously not what we want or expect. Setting the `MathContext` fixes this problem. I also corrected the same calculation for non-dimensional groups.
Signed-off-by: Jan N. Klug <github@klug.nrw>
The `migrateThingType` call the managed thing provider directly instead of checking if it's actually a managed thing.
This check is done in the `thingUpdated` method. Changed the code so it makes the same call as in `thingUpdated`.
Also-by: Jan N. Klug <github@klug.nrw>
Signed-off-by: Hilbrand Bouwkamp <hilbrand@h72.nl>
* handle entire directories being moved in and out of a watched script path
* ensure sorted scripts when ScriptFileWatcher restarts or new directories are added
Signed-off-by: Cody Cutrer <cody@cutrer.us>
When updating file-based script transformations used in item state-descripting a CME can occur during reload. This is fixed by using thread-safe implementation of `HashMap`.
Signed-off-by: Jan N. Klug <github@klug.nrw>
When writing tests and mocking time, it can be important that
execution_time match _exactly_ with what was sent to reschedule().
When re-calculating based on now and the expected remaining delay,
this might be off by a few milliseconds. We have the exact time
that was requested already, so might as well use it.
Signed-off-by: Cody Cutrer <cody@cutrer.us>
this is a useful helper that can eliminate some complicated code elsewhere.
starting in SystemOffsetProfile. then I also want to use it in the homekit
addon.
Signed-off-by: Cody Cutrer <cody@cutrer.us>
* log full exception information when calling JSR223 scripts
The scripts are user code, so in order to help them debug their code,
the full stack trace is very useful.
Signed-off-by: Cody Cutrer <cody@cutrer.us>
Pattern %s will match <hue>,<saturation>,<brightness>
Pattern %hsb% will match <hue>,<saturation>,<brightness>
Pattern %rgb% will match <red>,<green>,<blue>
Related to discussion in openhab/openhab-webui#427
Signed-off-by: Laurent Garnier <lg.hc@free.fr>
* tweak ScriptedRuleProvider slightly
just extend AbstractProvider so that it doesn't need to re-implement
managing listeners
Signed-off-by: Cody Cutrer <cody@cutrer.us>
* have ScriptedRuleProvider implement ManagedProvider
there's nothing that says ManagedProvider has to be backed by storage,
just that they should be able to add and remove elements
Since that's exactly what ScriptedRuleProvider does, might as well
have it conform to the interface.
Signed-off-by: Cody Cutrer <cody@cutrer.us>
* Fix missing stateDescriptionProvider in Group items
The stateDescriptionProvider was not properly passed to the base item. Because of that units set in the state description were not properly used when setting the group state after calculating aggregation functions.
Signed-off-by: Jan N. Klug <github@klug.nrw>
* [mqtt] Properly process retained messages
Only the _first_ message has the retained flag (always on MQTT3,
there is a flag to forward the retain flag on all messages with
MQTT5, but we don't set it), so we have to keep track of previously
retained messages as well.
This shows up as when a thing comes back online and re-subscribes
to a retained message that another thing subscribed to also,
it won't see any changes that happened to that topic since the
very first message was received.
Signed-off-by: Cody Cutrer <cody@cutrer.us>
* Fix ItemStateCondition for PercentType values
Dimmer items return their state as PercentType. The code did not properly handle PercentType because PercentType is a subclass of DecimalType. One value was converted by casting the value to DecimalType (which leads to 40 for 40%) while the other one used `.as` (which results in 0.4 for 40%). A comparison than of "state <= 50" with state = 20 is therefore executed as "20 <= 0.5" which is not what the user would expect.
Signed-off-by: Jan N. Klug <github@klug.nrw>
* fix invertible unit conversions when sent via a binding
* do invertible unit conversion in ItemUIRegistry
Signed-off-by: Cody Cutrer <cody@cutrer.us>
* Implement command completion in console for openhab command
And subcommands can implement it if they want. At the least the
CommandConsoleExtension's description will now be visible in
tab-completion.
I've also implemented detailed completion for openhab:items,
openhab:status, openhab:send, and openhab:update.
Signed-off-by: Cody Cutrer <cody@cutrer.us>
* Support mired units
Mired are fairly common to describe the color temperature of
lightbulbs (slightly less common than Kelvin), but are very
useful for various calculations when adjusting the color
temperature, as well as being necessary for various integerations
that require mired units.
This commit makes them a well-known unit (previously they were
still usable, using "MK^-1"), as well as making them easier to
work with on QuantityType. The hiccup is that Mireds aren't
technically a Temperature dimension, because they're a reciprocal.
So add a `inverse` method that delegates to javax.measure's
same method, and then use it as necessary when doing unit
conversions and comparisons. Unfortunately, because the
dimension changes, the return value of a conversion won't
necessarily be the same type, an additional method is added
for callers that are willing to handle the change in
dimension. This is implemented for all callers that can use
it in core.
Signed-off-by: Cody Cutrer <cody@cutrer.us>
* New translations automation.properties (Italian)
* New translations restauth.properties (German)
* New translations restauth.properties (Italian)
* New translations addons.properties (Italian)
* New translations restauth.properties (Danish)
* New translations restauth.properties (Finnish)
* New translations restauth.properties (Hungarian)
* New translations restauth.properties (Polish)
The docs say that JSR223 scripts will be loaded in order of start level
(as defined by filename or containing folder). this works (mostly) fine
when you're stepping through start levels sequentially on startup, but if
you're already at SL100, and have scripts located in sl folders, and then
install an addon for those scripts, they were loading in alphabetic
order instead. This ensures they'll still respect start level order
relative to each other.
This should also fix the case of script start levels not matching
start levels OpenHAB actually steps through (which are all multiples
of 10) - i.e. if you define scripts in sl30, sl31, and sl32, when
OpenHAB jumps from 30 to 40, 31 should be executed before 32.
Signed-off-by: Cody Cutrer <cody@cutrer.us>
Unregistered trackers aren't clear, so then we never register new trackers,
and thus never get notified of any changes.
Signed-off-by: Cody Cutrer <cody@cutrer.us>
Signed-off-by: Cody Cutrer <cody@cutrer.us>
* Fix missing initial thing status event
A thing always has a status. This status is not properly propagated to the event bus when the thing is added. This e.g. leads to a situation where a thing's first status that is received by am event subscriber is "INITIALIZING" instead of "UNINITIALIZED". The status should always be sent so that the thing lifecycle can properly be tracked by event listeners.
Signed-off-by: Jan N. Klug <github@klug.nrw>
* Improve FeatureInstaller
* Remove unnecessary synchronized and clean up processing
* Re-add refeshing bundles after all configuratzion changes are processed
* Prevent unnecessary refreshes
* Make JNA part of the tp
Signed-off-by: Jan N. Klug <github@klug.nrw>
* [DateTimeTrigger] Adjust to system timeline
* [DateTimeTrigger] Add tests for DateTimeTriggerHandler
Signed-off-by: Jimmy Tanagra <jcode@tanagra.id.au>
When changing to addon.xml later, this can be extended to all add-ons. It is necessary to improve the UI code for changing add-on log levels.
Signed-off-by: Jan N. Klug <github@klug.nrw>
* New translations messages.properties (Danish)
* New translations audio.properties (Danish)
* New translations inbox.properties (Danish)
* New translations addons.properties (Danish)
* New translations persistence.properties (Danish)
* New translations lsp.properties (Danish)
* New translations sitemap.properties (Danish)
* New translations SystemThingStatusInfos.properties (Danish)
Instead of using the full id (`marketplace:123456`) the id without service prefix was used to lookup installed add-ons. This is not an issue if the network is available because then the information is request from the forum. If no network connection is present it obviously fails.
This also reduces the log level in the case of connection issues. ERROR is to much and the stack trace is not necessary.
Signed-off-by: Jan N. Klug <github@klug.nrw>
* Enhance transformation configuration
This is needed to give the users the best experience when editing transformations in UI.
Signed-off-by: Jan N. Klug <github@klug.nrw>
OH1 add-ons are not present in the OH3 distribution as they are not supported anyway, so we do not to filter them.
Signed-off-by: Jan N. Klug <github@klug.nrw>
Unlike the sitemap SSE subscriptions generic event subscriptions did not implement a connection lost monitor.
Signed-off-by: Jan N. Klug <github@klug.nrw>
It was reported that after an upgrade from aprevious version installed addons from marketplaces are not shown in the add-ons pages. This is a result of the new compatibility check which excludes incompatible add-ons by default. Already installed add-ons must be excluded from this check otherwise they can't be uninstalled.
Signed-off-by: Jan N. Klug <github@klug.nrw>
* [expiry] [expire] bool configuration parameters parsing as util method
* [expiry] [expire] extend ExpiryManager to allow ignoring commands
Similar to ignoreStateUpdates parameter, this introduces new optional
parameter ignoreCommands.
Signed-off-by: Sami Salonen <ssalonen@gmail.com>
It has been reported in the past (and in the forum) that the EphemerisManagerImpl can't handle illegal configurations. Due to dependencies in other bundles this results in the whole automation component to be unavailable.
Signed-off-by: Jan N. Klug <github@klug.nrw>
* UIRegistry now extensible, like other Registries
Signed-off-by: Jonathan Gilbert <jpg@trillica.com>
* Fix comments and more
Signed-off-by: Wouter Born <github@maindrain.net>
Co-authored-by: Wouter Born <github@maindrain.net>
* New translations DefaultSystemChannels.properties (Italian)
* New translations DefaultSystemChannels.properties (Dutch)
* New translations DefaultSystemChannels.properties (Polish)
* New translations DefaultSystemChannels.properties (Finnish)
* New translations DefaultSystemChannels.properties (Hebrew)
* New translations DefaultSystemChannels.properties (German)
* New translations DefaultSystemChannels.properties (Hungarian)
* New translations addons.properties (Hungarian)
* New translations marketplace.properties (Hungarian)
This fixes the build being broken when building on Windows.
It also contains many fixes for timing issues which seem to impact macOS and Windows more than Linux.
* Fix .gitattributes and add *.xml_gen to fix line ending issues on Windows
* Derive fork count from CPU details in org.openhab.core tests for more stable tests on machines with fewer cores
* Adjust SafeCallerImplTest timings
* Increase ExecUtilTest timeout
* Increase SchedulerImplTest timeouts
* Increase AudioConsoleTest serveStream timeout
* Increase AudioServletTest serveStream timeout
* Increase SchedulerImplTest test timeouts
* Increase ExpireManagerTest timeout used for checking published events
* Increase PeriodicSchedulerImplTest max allowed delta
* Increase SchedulerImplTest timeouts
* Fix BundleInfoReader file stream not closed causing temp dir deletion issues on Windows
* Fix GenerateDefaultTranslationsMojoTest Windows line endings issues
* Fix GenerateDefaultTranslationsMojoTest Windows temp dir deletion problem
* Fix GenericItemProviderTest tearDown sometimes fails because of queued events
* Fix ChannelLinkNotifierOSGiTest wait for channel link events
* Fix ChannelCommandDescriptionProviderOSGiTest fails if provider not immediately registered
* Fix ChannelStateDescriptionProviderOSGiTest fails if provider not immediately registered
* Fix GenericItemChannelLinkProviderTest not waiting for async updated state to become true
* Fix GenericThingProviderTest failing due to events of previous test
* Fix InboxOSGiTest sometimes fails because of queued events
* Fix ScriptEngineOSGiTest failing because items are not yet added to registry
* Fix ThingManagerOSGiTest failing due to async handleRemoval call
Signed-off-by: Wouter Born <github@maindrain.net>
An Angle is also Dimensionless and because it is the first compatible unit it is always returned instead of any other Dimensionless unit.
With these changes `getDimensionName` will prefer the dimension of equal units over those of compatible units.
Fixes#2880
Signed-off-by: Wouter Born <github@maindrain.net>
* New translations marketplace.properties (Greek)
* New translations validation.properties (Greek)
* New translations SystemThingStatusInfos.properties (Greek)
* New translations DefaultSystemChannels.properties (Greek)
* New translations addons.properties (Greek)
* New translations voice.properties (Greek)
* Fix memory leak in ScriptedRuleProvider
The Rule was never removed from the internal tracking map and therefore allocated resources were never freed.
Signed-off-by: Jan N. Klug <github@klug.nrw>
* Update semantic metadata of group members when groups are added/removed
This fixes the issue that the semantic metadata is incorrect when defining items in files and groups in the UI.
Fixes#2117
* New translations DefaultSystemChannels.properties (Finnish)
* New translations DefaultSystemChannels.properties (Dutch)
* New translations marketplace.properties (Polish)
* New translations SystemThingStatusInfos.properties (Polish)
* New translations validation.properties (Polish)
* New translations voice.properties (Polish)
* New translations DefaultSystemChannels.properties (Italian)
* New translations DefaultSystemChannels.properties (Polish)
* New translations DefaultSystemChannels.properties (Hebrew)
* New translations DefaultSystemChannels.properties (German)
* New translations marketplace.properties (French)
* New translations DefaultSystemChannels.properties (French)
* New translations addons.properties (French)
* New translations marketplace.properties (French)
* New translations addons.properties (Dutch)
* New translations addons.properties (Finnish)
* New translations addons.properties (German)
* New translations addons.properties (Hebrew)
* New translations addons.properties (Italian)
* New translations addons.properties (Polish)
* New translations marketplace.properties (Dutch)
* New translations marketplace.properties (Finnish)
* New translations marketplace.properties (German)
* New translations marketplace.properties (Hebrew)
* New translations marketplace.properties (Italian)
* New translations SystemThingStatusInfos.properties (Bulgarian)
* New translations units.properties (Catalan)
This makes it possible to use Crowdin for translating the new configuration options introduced in #2811.
Signed-off-by: Wouter Born <github@maindrain.net>
Most of the tests add a timeout of 1s to account for small delays in async processing in the AbstractWatchService. This adds some more timeouts for tests which were missing those.
Signed-off-by: Jan N. Klug <github@klug.nrw>
* Improve PeridodicSchedulerImplTest
The old implementation truncated timestamps to 1/10 s. Under some circumstances this could result in a failed tests:
offset = 201 -> truncatedOffset = 2
200ms delay expected, adjustment calculation results in an actual delay of 198ms
time = 399 -> truncatedTime = 3
expected: truncatedOffset + expected => 2 + 2 = 4
actual: truncatedTime = 3
The new implementation allows for an error of +/- 10ms which is far more than needed.
* increase tolerance
* fix consecutive executions build up errors
Signed-off-by: Jan N. Klug <github@klug.nrw>
The MqttService was used to keep track of the system MQTT brokers.
Since there are none it can be removed as well as the observer, tests, configuration and translations.
Fixes#2841
Signed-off-by: Wouter Born <github@maindrain.net>