Coder Social home page Coder Social logo

bco's People

Contributors

agatting avatar christianmertes avatar dependabot[bot] avatar divinethreepwood avatar dweinholz avatar github-actions[bot] avatar harmageddon avatar jdaberkow avatar lhuxohl avatar lilischroeder avatar lukbelter avatar pleminoq avatar thuppke avatar timomichi avatar vrichter avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Forkers

harmageddon

bco's Issues

testAbsenceEnergySavingAgent fails with execution state can not be reached.

Test fails with:

org.openbase.jul.exception.CouldNotPerformException: PH Hue E27 Device Stairway - stop waiting because state[EXECUTING] cannot be reached from state[REJECTED]
	at app//org.openbase.bco.dal.remote.action.RemoteAction.waitForActionState(RemoteAction.java:1017)
	at app//org.openbase.bco.dal.remote.action.RemoteAction.waitForActionState(RemoteAction.java:997)
	at app//org.openbase.bco.dal.remote.action.RemoteAction.waitForActionState(RemoteAction.java:973)
	at app//org.openbase.bco.dal.test.AbstractBCOTest.waitForExecution(AbstractBCOTest.java:217)
	at app//org.openbase.bco.app.preset.agent.AbsenceEnergySavingAgentTest.testAbsenceEnergySavingAgent(AbsenceEnergySavingAgentTest.java:112)
	at [email protected]/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at [email protected]/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at [email protected]/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

Issue can as well be reproduced by:

org.openbase.bco.dal.test.layer.unit.scene.SceneRemoteTest

  Test testTriggerSceneWithLocationActionPerRemoteAndVerifiesUnitModification() FAILED (4.5s)

  org.openbase.jul.exception.CouldNotPerformException: location On Test Scene - stop waiting because state[EXECUTING] cannot be reached from state[REJECTED]
      at app//org.openbase.bco.dal.test.layer.unit.scene.SceneRemoteTest.testTriggerSceneWithLocationActionPerRemoteAndVerifiesUnitModification(SceneRemoteTest.java:576)

  Test testTriggerSceneWithAllDevicesOfLocationActionPerRemoteAndVerifiesUnitModification() FAILED (2.9s)

  org.openbase.jul.exception.CouldNotPerformException: location Devices On Test Scene - stop waiting because state[EXECUTING] cannot be reached from state[REJECTED]
      at app//org.openbase.bco.dal.test.layer.unit.scene.SceneRemoteTest.testTriggerSceneWithAllDevicesOfLocationActionPerRemoteAndVerifiesUnitModification(SceneRemoteTest.java:509)

      Test testIntermediaryActionCancellationOnSceneDeactivation() FAILED (1.8s)

Websockets for GraphQL Subscriptions don't work

Currently, you cannot make use of GraphQL Subscriptions because the server does not allow Websocket connections. This is because the required spring boot dependency spring-boot-starter-websocket is missing from the classpath.

Cleanup for version 2.0

With the upgrade to version 2.0 deprecated methods should be removed and everything cleaned up.

Apply 2.0 data type changes

The following types has been refactored:

  • UserPresenceState -> UserTransitState
  • ActionAuthority
    • ticket -> user id
  • BlindState
    • MovementState -> State
    • field movement_state -> value
  • ActionDescription
    • Transaction id has been removed
  • InventoryState
    • owner_id -> borrower_id

The following deprecated types has been removed:

  • IntensityState
  • BrightnessState

The following deprecated methods has been removed:

  • PresenceState.last_presence has been replaced by the new last_value_occurrence field
  • ButtonState.last_pressed has been replaced by the new last_value_occurrence field
  • TamperState.last_detection has been replaced by the new last_value_occurrence field

Review Usage of `mergeFrom` on Protobuf Types

Issue #75 was caused by using the mergeFrom method of Protobuf. Naturally, this method cannot replace values in repeated fields but only extends them. Thus, we should review all usages and likely replace them with a more sophisticated merge strategy.

ServicesTest.testComputeActionImpact still fails

Now that #65 is fixed the test seems to consistently fail with the following issue:

org.opentest4j.AssertionFailedError: impacted unit id list differs as expected ==> expected: <[colorablelight-66950dd0, colorablelight-7f27f060, colorablelight-83fcdc9f, colorablelight-8bb6bc6b, dimmablelight-9e1df0ab, dimmer-7e6edf4b, light-d7b2c8a8, location-heaven-9c7c6bdb, location-hell-0404a49d, location-stairway_to_heaven-ee454d29, powerswitch-489dcee3]> but was: <[colorablelight-66950dd0, colorablelight-7f27f060, colorablelight-83fcdc9f, colorablelight-8bb6bc6b, dimmablelight-9e1df0ab, dimmer-7e6edf4b, light-d7b2c8a8, location-heaven-9c7c6bdb, location-hell-0404a49d, location-home-93a825b0, location-stairway_to_heaven-ee454d29, powerswitch-489dcee3]>
	at app//org.junit.jupiter.api.AssertionUtils.fail(AssertionUtils.java:55)
	at app//org.junit.jupiter.api.AssertionUtils.failNotEqual(AssertionUtils.java:62)
	at app//org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:182)
	at app//org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:1152)
	at app//org.openbase.bco.dal.lib.layer.service.provider.ServicesTest.testComputeActionImpact(ServicesTest.java:79)
	at [email protected]/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at [email protected]/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at [email protected]/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at [email protected]/java.lang.reflect.Method.invoke(Method.java:568)
	at app//org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725)
	at app//org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
	at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
	at app//org.junit.jupiter.engine.extension.TimeoutInvocation.proceed(TimeoutInvocation.java:46)
	at app//org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)
	at app//org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140)
	at app//org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84)
	at app//org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)
	at app//org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)
	at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
	at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
	at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
	at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
	at app//org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)
	at app//org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)
	at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:214)
	at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:210)
	at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:135)
	at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:66)
	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)
	at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at app//org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at [email protected]/java.util.ArrayList.forEach(ArrayList.java:1511)
	at app//org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
	at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at app//org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at [email protected]/java.util.ArrayList.forEach(ArrayList.java:1511)
	at app//org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
	at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at app//org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at app//org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
	at app//org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
	at app//org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)
	at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)
	at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:99)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:79)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:75)
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:61)
	at [email protected]/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at [email protected]/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at [email protected]/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at [email protected]/java.lang.reflect.Method.invoke(Method.java:568)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
	at jdk.proxy1/jdk.proxy1.$Proxy2.stop(Unknown Source)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:193)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
	at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:133)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71)
	at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
	at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)

Remove deprecated API

This major release contains some API cleanup. To optimize the code overview and maintainability we remove nearly all deprecated API within this release.

Some removals:

  • Datatypes

    • BrightnessSensorData.proto
  • Methods

  • Other

Remove replace label by alias list in all unit data types.

  • Because a label does not identify anymore units those are not a part of the unit data anymore.
  • If you need a label used the registry to quest the label by passing the id or the alias of an unit.
  • Aliases are now included in the unit data type which are more reliable than using labels.

Skip sending actions to OpenHAB if they do not cause a state change

Examples

  • If a light is off because the terminating action is executing and then an agent puts on another off action, this action causes an action to be send to OpenHAB.
  • Turning the root location off will likely trigger many commands to OpenHAB for devices that are already off.

Advantages

  • By Skipping to send such an action to OpenHAB, we should generally be more efficient.
  • We could avoid issues with mapping feedback from OpenHAB to our actions

Possible Disadvantages

  • There could be problems if we are out of sync with OpenHAB. E.g. a lamp is on for real, but our representation is that it is still off. As a consequence we would not send an off command.

Bug in ActionDescription description generation

While debugging the unit tests I found a weird behaviour that the descriptions (english and german) are generated multiple times for the same action.

Action [action_id: "action-low-815f2fa3"
label {
  entry {
    key: "en"
    value: "$UNIT_LABEL[SERVICE_STATE]"
  }
  entry {
    key: "en"
    value: "$UNIT_LABEL[SERVICE_STATE]"
  }
}
description {
  entry {
    key: "de"
    value: "Admin hat color von PH Hue E27 Device Stairway zu red ge\303\244ndert."
  }
  entry {
    key: "en"
    value: "Admin changed color of PH Hue E27 Device Stairway to red."
  }
  entry {
    key: "de"
    value: "Admin hat color von PH Hue E27 Device Stairway zu red ge\303\244ndert."
  }
  entry {
    key: "en"
    value: "Admin changed color of PH Hue E27 Device Stairway to red."
  }
}
action_initiator {
  initiator_id: "user-admin-054e9aec"
  initiator_type: HUMAN
  authorized_by: "user-admin-054e9aec"
  authenticated_by: "user-admin-054e9aec"
}
action_state {
  value: EXECUTING
  last_value_occurrence {
    key: INITIALIZED
    value {
      time: 1665519535040000
    }
  }
  last_value_occurrence {
    key: INITIATING
    value {
      time: 1665519535040000
    }
  }
  last_value_occurrence {
    key: EXECUTING
    value {
      time: 1665519535088000
    }
  }
  last_value_occurrence {
    key: SUBMISSION
    value {
      time: 1665519535058000
    }
  }
}
action_impact {
  action_id: "PRECOMPUTED_ACTION"
  service_state_description {
    unit_id: "unitgroup-allcolorablelights-d82eb836"
    service_type: COLOR_STATE_SERVICE
    service_state_class_name: "org.openbase.type.domotic.state.ColorStateType$ColorState"
    service_state: "{\"color\": {\"type\": \"HSB\",\"hsb_color\": {\"hue\": 0.0,\"saturation\": 1.0,\"brightness\": 1.0}}}"
  }
}
action_impact {
  action_id: "PRECOMPUTED_ACTION"
  service_state_description {
    unit_id: "location-home-5fdb311e"
    service_type: COLOR_STATE_SERVICE
    service_state_class_name: "org.openbase.type.domotic.state.ColorStateType$ColorState"
    service_state: "{\"color\": {\"type\": \"HSB\",\"hsb_color\": {\"hue\": 0.0,\"saturation\": 1.0,\"brightness\": 1.0}}}"
  }
}
action_impact {
  action_id: "PRECOMPUTED_ACTION"
  service_state_description {
    unit_id: "location-stairway_to_heaven-d0d899a8"
    service_type: COLOR_STATE_SERVICE
    service_state_class_name: "org.openbase.type.domotic.state.ColorStateType$ColorState"
    service_state: "{\"color\": {\"type\": \"HSB\",\"hsb_color\": {\"hue\": 0.0,\"saturation\": 1.0,\"brightness\": 1.0}}}"
  }
}
action_impact {
  action_id: "PRECOMPUTED_ACTION"
  service_state_description {
    unit_id: "unitgroup-allcolorablelights-d82eb836"
    service_type: COLOR_STATE_SERVICE
    service_state_class_name: "org.openbase.type.domotic.state.ColorStateType$ColorState"
    service_state: "{\"color\": {\"type\": \"HSB\",\"hsb_color\": {\"hue\": 0.0,\"saturation\": 1.0,\"brightness\": 1.0}}}"
  }
}
action_impact {
  action_id: "PRECOMPUTED_ACTION"
  service_state_description {
    unit_id: "location-home-5fdb311e"
    service_type: COLOR_STATE_SERVICE
    service_state_class_name: "org.openbase.type.domotic.state.ColorStateType$ColorState"
    service_state: "{\"color\": {\"type\": \"HSB\",\"hsb_color\": {\"hue\": 0.0,\"saturation\": 1.0,\"brightness\": 1.0}}}"
  }
}
action_impact {
  action_id: "PRECOMPUTED_ACTION"
  service_state_description {
    unit_id: "location-stairway_to_heaven-d0d899a8"
    service_type: COLOR_STATE_SERVICE
    service_state_class_name: "org.openbase.type.domotic.state.ColorStateType$ColorState"
    service_state: "{\"color\": {\"type\": \"HSB\",\"hsb_color\": {\"hue\": 0.0,\"saturation\": 1.0,\"brightness\": 1.0}}}"
  }
}
service_state_description {
  unit_id: "colorablelight-61ddaad0"
  service_type: COLOR_STATE_SERVICE
  service_state_class_name: "org.openbase.type.domotic.state.ColorStateType$ColorState"
  service_state: "{\"color\": {\"type\": \"HSB\",\"hsb_color\": {\"hue\": 0.0,\"saturation\": 1.0,\"brightness\": 1.0}}}"
}
priority: LOW
execution_time_period: 900000000
interruptible: true
schedulable: true
auto_continue_with_low_priority: true
timestamp {
  time: 1665519535039000
}
last_extension_timestamp {
  time: 1665519535039000
}
] is no longer scheduled but EXECUTING
 - entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}

 - entry {
  key: "de"
  value: "Admin hat color von PH Hue E27 Device Stairway zu red ge\303\244ndert."
}
entry {
  key: "en"
  value: "Admin changed color of PH Hue E27 Device Stairway to red."
}
entry {
  key: "de"
  value: "Admin hat color von PH Hue E27 Device Stairway zu red ge\303\244ndert."
}
entry {
  key: "en"
  value: "Admin changed color of PH Hue E27 Device Stairway to red."
}

 - entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"
  value: "BCO hat power von PH Hue E27 Device Stairway zu aus ge\303\244ndert."
}
entry {
  key: "en"
  value: "BCO changed power of PH Hue E27 Device Stairway to off."
}
entry {
  key: "de"

Implement Homematic -> Google Assistent Pipeline to control heaters

  1. Setup Openhab
  2. Setup BCO
  3. Create new DeviceClasses for available heater devices
  4. Setup BCO Cloud
  5. Setup BCO Google Assistent integration
    5.1 Google Assistent Authentication needs to be fixed.
  6. Validation:
    6.1 Heater can be controlled via Openhab
    6.2 Heater can be controlled via bco-visual-remote
    6.3 Heater can be controlled via Google

Introduce Unit Groups as Members of other Unit Groups

Currently it is not possible to add unit groups as members to other unit groups. This is a powerful feature which should be allowed. However care should be taken to avoid recursions.

  • Write a unit test which add unit groups as members to others and provokes a recursion
  • Fix consistency handlers so that it is possible to add unit groups to members of others
  • Add a consistency handler to check for recursions

Restructure maven group and artifact ids

The bco part of the group id should be moved to the start of the artifact id.
E.g:

GroupId: org.openbase.bco
ArtifactId: manager

should become

GroupId: org.openbase
ArtifactId: bco.manager

Further minor API changes

API Changes:

  • UnitRemote
    • getParentLocationConfig()
      • UnitConfig getParentLocationConfig() throws NotAvailableException, InterruptedException
      • UnitConfig getBaseLocationConfig() throws NotAvailableException
    • getParentLocationRemote()
      • UnitConfig getParentLocationRemote() throws NotAvailableException, InterruptedException
      • UnitConfig getBaseLocationRemote() throws NotAvailableException

Memory Leak because of AuthenticationFutures

Running bco-test --simuate and observing its memory usage in VisualVM reveals a memory leak. The Heap Dump reveals that the static list authenticatedFutureList in the class AbstractAuthenticationFuture makes up a large amount of this memory and the number of futures in this list is always increasing.

The idea with this list is that it is required to call get on these futures to update the users session (this is a problem if the future is created but no one calls get on it). Thus we keep a list of these features and regularly call get on futures which are already done. These futures and canceled futures are then removed from the list.

We should investigate why some futures on this list are never removed (are they never done?). If they never finish we could still remove all futures which are older than a timeout (e.g. 30 seconds, or simply the session timeout) since it is unusual that these could still help in keeping the users session alive.

ServicesTest.testComputeActionImpact fails

This unit test sometimes fails with the following error:

org.openbase.jul.exception.FatalImplementationErrorException: Fatal implementation error in or by using UnitRegistryRemote[scope:/test/thuxohl/registry/unit]: Location Paradise refers to itself as a child unit!
	at org.openbase.bco.registry.unit.lib.UnitRegistry.isServiceAvailable(UnitRegistry.java:1469)
	at org.openbase.bco.dal.lib.layer.service.provider.ServicesTest.testLocationLoop(ServicesTest.java:54)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725)
	at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
	at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)
	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140)
	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestTemplateMethod(TimeoutExtension.java:92)
	at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)
	at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
	at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)
	at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:214)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:210)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:135)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:66)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204)
	at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:139)
	at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:107)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
	at java.base/java.util.stream.IntPipeline$1$1.accept(IntPipeline.java:180)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Streams.java:104)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Spliterator.java:711)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
	at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
	at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:107)
	at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:42)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)
	at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)
	at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:99)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:79)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:75)
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:61)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
	at jdk.proxy1/jdk.proxy1.$Proxy2.stop(Unknown Source)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:193)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
	at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:133)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)

Fix action locking issue that causes an invalid transition from rejected to aborted

Once the registration test count of the testPowerStateServicePerformance is increased from 100 to 1000 we run into an invalid transition from rejected to abording. Investigate test and fix issue.

The remote connection gets lost since the controller seems to be to busy.

21:35:55.042 [pool-1-thread-93] WARN  o.o.b.d.r.l.u.PowerSwitchRemote Remote connection to Controller[/location-1/powerswitch/powerswitch-1] lost!
21:35:59.729 [pool-1-thread-97] ERROR o.o.b.d.c.a.ActionImpl Can not finalize ActionImpl[action-normal-8ebaf922|POWER_STATE_SERVICE|{"value": "ON"}|powerswitch-ea87da4a|user-bco-f19a7c8d(SYSTEM)|INITIATING] it seems the execution has stuck.
21:35:59.735 [pool-1-thread-97] WARN  o.o.b.d.c.a.ActionImpl Can not change the state to ABORTING of an already rejected action!
21:35:59.736 [pool-1-thread-97] WARN  o.o.b.d.c.a.ActionImpl 
=== Stacktrace ===
org.openbase.jul.exception.StackTracePrinter.printStackTrace(StackTracePrinter.java:72)
org.openbase.bco.dal.control.action.ActionImpl.updateActionState(ActionImpl.java:763)
org.openbase.bco.dal.control.action.ActionImpl.updateActionStateWhileHoldingWriteLock(ActionImpl.java:744)
org.openbase.bco.dal.control.action.ActionImpl.abort(ActionImpl.java:559)
org.openbase.bco.dal.lib.action.SchedulableAction.abort(SchedulableAction.java:64)
org.openbase.bco.dal.control.layer.unit.AbstractUnitController.reschedule(AbstractUnitController.java:1080)
org.openbase.bco.dal.control.layer.unit.AbstractUnitController.scheduleAction(AbstractUnitController.java:858)
org.openbase.bco.dal.control.layer.unit.AbstractUnitController.applyAction(AbstractUnitController.java:675)
org.openbase.bco.dal.control.layer.unit.AbstractUnitController.internalApplyActionAuthenticated(AbstractUnitController.java:1278)
org.openbase.bco.dal.control.layer.unit.AbstractUnitController.lambda$applyActionAuthenticated$5(AbstractUnitController.java:1226)
org.openbase.bco.authentication.lib.AuthenticatedServiceProcessor.authenticatedAction(AuthenticatedServiceProcessor.java:135)
org.openbase.bco.authentication.lib.AuthenticatedServiceProcessor.authenticatedAction(AuthenticatedServiceProcessor.java:90)
org.openbase.bco.authentication.lib.AuthenticatedServiceProcessor.authenticatedAction(AuthenticatedServiceProcessor.java:69)
org.openbase.bco.dal.control.layer.unit.AbstractUnitController.applyActionAuthenticated(AbstractUnitController.java:1244)
jdk.internal.reflect.GeneratedMethodAccessor760.invoke(Unknown Source)
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.base/java.lang.reflect.Method.invoke(Method.java:568)
kotlin.reflect.jvm.internal.calls.CallerImpl$Method.callMethod(CallerImpl.kt:97)
kotlin.reflect.jvm.internal.calls.CallerImpl$Method$Instance.call(CallerImpl.kt:113)
kotlin.reflect.jvm.internal.KCallableImpl.call(KCallableImpl.kt:108)
org.openbase.jul.communication.mqtt.RPCMethod.invoke(RPCMethod.kt:223)
org.openbase.jul.communication.mqtt.RPCServerImpl.handleRemoteCall(RPCServerImpl.kt:141)
org.openbase.jul.communication.mqtt.RPCServerImpl.activate$lambda-2$lambda-1(RPCServerImpl.kt:65)
com.hivemq.client.internal.mqtt.MqttAsyncClient$CallbackSubscriber.onNext(MqttAsyncClient.java:303)
com.hivemq.client.internal.mqtt.MqttAsyncClient$CallbackSubscriber.onNext(MqttAsyncClient.java:288)
com.hivemq.client.rx.FlowableWithSingle$SingleFutureSubscriber.onNext(FlowableWithSingle.java:406)
com.hivemq.client.internal.rx.operators.FlowableWithSingleCombine$SplitSubscriber$Default.tryOnNextActual(FlowableWithSingleCombine.java:235)
com.hivemq.client.internal.rx.operators.FlowableWithSingleCombine$SplitSubscriber.tryOnNext(FlowableWithSingleCombine.java:200)
io.reactivex.internal.operators.flowable.FlowableObserveOn$ObserveOnConditionalSubscriber.runAsync(FlowableObserveOn.java:649)
io.reactivex.internal.operators.flowable.FlowableObserveOn$BaseObserveOnSubscriber.run(FlowableObserveOn.java:176)
io.reactivex.internal.schedulers.ExecutorScheduler$ExecutorWorker$BooleanRunnable.run(ExecutorScheduler.java:288)
io.reactivex.internal.schedulers.ExecutorScheduler$ExecutorWorker.run(ExecutorScheduler.java:253)
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
java.base/java.lang.Thread.run(Thread.java:833)
==================
21:35:59.739 [pool-1-thread-97] INFO  o.o.j.p.JPVerbose Verbose is enabled!
21:35:59.742 [pool-1-thread-97] INFO  o.o.b.d.c.l.u.PowerSwitchController ActionImpl[action-normal-bdc604a5|POWER_STATE_SERVICE|{"value": "OFF"}|powerswitch-ea87da4a|user-bco-f19a7c8d(SYSTEM)|REJECTED] was postponed because of ActionImpl[action-termination-economy-0b796e97|POWER_STATE_SERVICE|{"value": "OFF"}|powerswitch-ea87da4a|user-bco-f19a7c8d(SYSTEM)|SUBMISSION] and added to the scheduling queue of PowerSwitchController[POWER_SWITCH[PW Power Plug Device]] at position 36.
21:35:59.745 [pool-1-thread-989] INFO  o.o.b.d.c.l.u.PowerSwitchController PW Power Plug Device is updated from off to off.
21:35:59.745 [pool-1-thread-97] ERROR o.o.b.a.l.AuthenticatedServerManager ═══⚀ Request timestamp [21.7.2022 - 21:35:54:89] differs more than 5 seconds from server time [21.7.2022 - 21:35:59:743]
21:35:59.746 [pool-1-thread-97] ERROR o.o.b.a.l.AuthenticatedServerManager =====================================
21:35:59.749 [pool-1-thread-97] ERROR o.o.b.a.l.AuthenticatedServerManager Request timestamp [21.7.2022 - 21:35:54:89] differs more than 5 seconds from server time [21.7.2022 - 21:35:59:743]
org.openbase.bco.authentication.lib.exception.SessionExpiredException: Request timestamp [21.7.2022 - 21:35:54:89] differs more than 5 seconds from server time [21.7.2022 - 21:35:59:743]
	at org.openbase.bco.authent

SeviceState percentage fields should be defined and handled between [0-1] as double type.

Pro arguments:

  • this improves any math operations because the values are already normalized.
  • nearly all ui components are using this range which avoids transformations.

Types to modify:

  • ColorState
  • BatteryState
  • BlindState
  • BrightnessState
  • SmokeState

Steps to perform on dedicated feature branch

  • adjust dal service validation
  • enable dal service validation to detect outdated values and auto adjust its range while printing a warning.
  • adjust openhab transformer
  • adjust registry editor scene edit panes
  • adjust dal.visual.remote panes
  • adjust bcozy panes
  • adjust bcomfy panes

Generating default aliases for units skips uneven numbers

Since the recent changes to the consistency handler that generates default aliases, the unit tests fail, because aliases with uneven numbers (ReedContact-1) are expected to exists. A debugging outputs revealed that only even numbers were taken ReedContact-2, ReedContact-4 and so on.

RemoteActionTest sometimes waits endlessly on exeuction state

Sometimes the remote action test fails on waiting for the execution state. This only happens seldom. Using a debugger, we could see that the state of the action in the data type of the unit remote is EXECUTING. Therefore the following things have to be investigated:

  • Is the event filtered because of a permission issue?
  • Can it happen that the notification of the state change is skipped? 👎
  • Does the RemoteAction handle the notifications correctly?

Performance improvements and JUL + RCT upgrade

Performance Improvement

  • Reduce amount of worker tasks used for state synchronisation.
  • Fix a bug where sometimes the action list was not properly synced into the data builder.
  • Improve interrupt handling
  • Make sure only interruptable locks are used for state monitoring.
  • Simplify Controller state locking by removing notification lock.
  • Make ButtonRemoteTest more stable.

Upstream Dependencies

  • switch to jul v3.2
  • switch to rct v3.2

fix testThatScenesDoNotInterfereEachOther() test

Fails with:

org.opentest4j.AssertionFailedError: Light is not red but: BCO changed power of PH Hue E27 Device Stairway to off. ==> expected: <type: HSB
hsb_color {
  hue: 0.0
  saturation: 1.0
  brightness: 1.0
}
> but was: <type: HSB
hsb_color {
  hue: 0.0
  saturation: 1.0
  brightness: 0.0
}
>
	at app//org.junit.jupiter.api.AssertionUtils.fail(AssertionUtils.java:55)
	at app//org.junit.jupiter.api.AssertionUtils.failNotEqual(AssertionUtils.java:62)
	at app//org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:182)
	at app//org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:1152)
	at app//org.openbase.bco.dal.test.layer.unit.scene.SceneRemoteTest.testThatScenesDoNotInterfereEachOther(SceneRemoteTest.java:855)
	at [email protected]/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at [email protected]/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at [email protected]/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at [email protected]/java.lang.reflect.Method.invoke(Method.java:568)
	at app//org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725)
	at app//org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
	at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
	at app//org.junit.jupiter.engine.extension.TimeoutInvocation.proceed(TimeoutInvocation.java:46)
	at app//org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)
	at app//org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140)
	at app//org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84)
	at app//org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)
	at app//org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)
	at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
	at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
	at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
	at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
	at app//org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)
	at app//org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)
	at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:214)
	at app//org.junit.platfor

output

?[0;39m17:50:57.643 [pool-1-thread-3] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.s.SceneControllerImpl?[0;39m ?[39mGroup Trigger Scene is updated from unknown to inactive.
?[0;39m17:50:57.647 [pool-1-thread-3] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed activation of Group Trigger Scene to inactive.
?[0;39m17:50:57.654 [pool-1-thread-47] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.UnitControllerRegistrySynchronizer?[0;39m ?[39m1 changes synchronized.
?[0;39m17:50:57.672 [pool-1-thread-40] ?[34mINFO ?[0;39m ?[36mo.o.j.p.JPTestMode?[0;39m ?[39mTest mode enabled!
?[0;39m17:50:57.879 [pool-1-thread-82] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.s.SceneControllerImpl?[0;39m ?[39mBlue Test Scene is updated from inactive to active.
?[0;39m17:50:57.976 [pool-1-thread-88] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.ColorableLightController?[0;39m ?[39mPH Hue E27 Device Heaven is updated from black to blue.
?[0;39m17:50:58.013 [pool-1-thread-88] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed color of PH Hue E27 Device Heaven to blue.
?[0;39m17:50:58.014 [pool-1-thread-37] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.ColorableLightController?[0;39m ?[39mPH Hue E27 Device Hell is updated from black to blue.
?[0;39m17:50:58.019 [pool-1-thread-59] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.ColorableLightController?[0;39m ?[39mPH Hue E27 Device is updated from black to blue.
?[0;39m17:50:58.068 [pool-1-thread-61] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.ColorableLightController?[0;39m ?[39mPH Hue E27 Device Stairway is updated from black to blue.
?[0;39m17:50:58.104 [pool-1-thread-37] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed color of PH Hue E27 Device Hell to blue.
?[0;39m17:50:58.143 [pool-1-thread-59] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed color of PH Hue E27 Device to blue.
?[0;39m17:50:58.174 [pool-1-thread-61] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed color of PH Hue E27 Device Stairway to blue.
?[0;39m17:50:58.580 [pool-1-thread-82] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed activation of Blue Test Scene to active.
?[0;39m17:50:59.055 [pool-1-thread-82] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.s.SceneControllerImpl?[0;39m ?[39mRed Test Scene is updated from inactive to active.
?[0;39m17:50:59.264 [pool-1-thread-100] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.ColorableLightController?[0;39m ?[39mPH Hue E27 Device Hell is updated from blue to red.
?[0;39m17:50:59.311 [pool-1-thread-26] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.ColorableLightController?[0;39m ?[39mPH Hue E27 Device is updated from blue to red.
?[0;39m17:50:59.332 [pool-1-thread-87] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.ColorableLightController?[0;39m ?[39mPH Hue E27 Device Heaven is updated from blue to red.
?[0;39m17:50:59.336 [pool-1-thread-71] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.ColorableLightController?[0;39m ?[39mPH Hue E27 Device Stairway is updated from blue to red.
?[0;39m17:50:59.340 [pool-1-thread-100] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed color of PH Hue E27 Device Hell to red.
?[0;39m17:50:59.377 [pool-1-thread-87] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed color of PH Hue E27 Device Heaven to red.
?[0;39m17:50:59.385 [pool-1-thread-26] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed color of PH Hue E27 Device to red.
?[0;39m17:50:59.385 [pool-1-thread-71] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed color of PH Hue E27 Device Stairway to red.
?[0;39m17:50:59.880 [pool-1-thread-82] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed activation of Red Test Scene to active.
?[0;39m17:51:00.032 [pool-1-thread-76] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.s.SceneControllerImpl?[0;39m ?[39mBlue Test Scene is updated from active to inactive.
?[0;39m17:51:00.895 [pool-1-thread-76] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed activation of Blue Test Scene to inactive.
?[0;39m17:51:01.166 [pool-1-thread-25] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.s.SceneControllerImpl?[0;39m ?[39mBlue Test Scene is updated from inactive to active.
?[0;39m17:51:01.482 [pool-1-thread-24] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.ColorableLightController?[0;39m ?[39mPH Hue E27 Device is updated from red to blue.
?[0;39m17:51:01.493 [pool-1-thread-91] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.ColorableLightController?[0;39m ?[39mPH Hue E27 Device Stairway is updated from red to blue.
?[0;39m17:51:01.508 [pool-1-thread-92] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.ColorableLightController?[0;39m ?[39mPH Hue E27 Device Hell is updated from red to blue.
?[0;39m17:51:01.558 [pool-1-thread-67] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.ColorableLightController?[0;39m ?[39mPH Hue E27 Device Heaven is updated from red to blue.
?[0;39m17:51:01.571 [pool-1-thread-91] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed color of PH Hue E27 Device Stairway to blue.
?[0;39m17:51:01.592 [pool-1-thread-24] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed color of PH Hue E27 Device to blue.
?[0;39m17:51:01.595 [pool-1-thread-92] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed color of PH Hue E27 Device Hell to blue.
?[0;39m17:51:01.656 [pool-1-thread-67] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed color of PH Hue E27 Device Heaven to blue.
?[0;39m17:51:02.191 [pool-1-thread-25] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed activation of Blue Test Scene to active.
?[0;39m17:51:02.355 [pool-1-thread-37] ?[33mWARN ?[0;39m ?[36mo.o.b.d.r.l.u.l.LocationRemote?[0;39m ?[33mRemote connection to Controller[/location-1] lost!
?[0;39m17:51:03.188 [pool-1-thread-46] ?[34mINFO ?[0;39m ?[36mo.o.b.d.r.l.u.l.LocationRemote?[0;39m ?[39mConnection reestablished LocationRemote[scope:/location-1]
?[0;39m17:51:03.201 [pool-1-thread-70] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.s.SceneControllerImpl?[0;39m ?[39mBlue Test Scene is updated from active to inactive.
?[0;39m17:51:03.436 [pool-1-thread-79] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.ColorableLightController?[0;39m ?[39mPH Hue E27 Device is updated from blue to red.
?[0;39m17:51:03.438 [pool-1-thread-77] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.ColorableLightController?[0;39m ?[39mPH Hue E27 Device Stairway is updated from blue to red.
?[0;39m17:51:03.496 [pool-1-thread-79] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed color of PH Hue E27 Device to red.
?[0;39m17:51:03.505 [pool-1-thread-77] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed color of PH Hue E27 Device Stairway to red.
?[0;39m17:51:03.534 [pool-1-thread-89] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.ColorableLightController?[0;39m ?[39mPH Hue E27 Device Hell is updated from blue to red.
?[0;39m17:51:03.611 [pool-1-thread-88] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.ColorableLightController?[0;39m ?[39mPH Hue E27 Device Heaven is updated from blue to red.
?[0;39m17:51:03.634 [pool-1-thread-89] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed color of PH Hue E27 Device Hell to red.
?[0;39m17:51:03.656 [pool-1-thread-88] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed color of PH Hue E27 Device Heaven to red.
?[0;39m17:51:04.057 [pool-1-thread-59] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.s.SceneControllerImpl?[0;39m ?[39mRed Test Scene is updated from active to inactive.
?[0;39m17:51:04.195 [pool-1-thread-66] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.ColorableLightController?[0;39m ?[39mPH Hue E27 Device Hell is updated from on to off.
?[0;39m17:51:04.221 [pool-1-thread-66] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed power of PH Hue E27 Device Hell to off.
?[0;39m17:51:04.252 [pool-1-thread-92] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.ColorableLightController?[0;39m ?[39mPH Hue E27 Device Stairway is updated from on to off.
?[0;39m17:51:04.265 [pool-1-thread-44] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.ColorableLightController?[0;39m ?[39mPH Hue E27 Device Heaven is updated from on to off.
?[0;39m17:51:04.334 [pool-1-thread-92] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed power of PH Hue E27 Device Stairway to off.
?[0;39m17:51:04.347 [pool-1-thread-81] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.ColorableLightController?[0;39m ?[39mPH Hue E27 Device is updated from on to off.
?[0;39m17:51:04.349 [pool-1-thread-44] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed power of PH Hue E27 Device Heaven to off.
?[0;39m17:51:04.383 [pool-1-thread-81] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed power of PH Hue E27 Device to off.
?[0;39m17:51:04.425 [pool-1-thread-70] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed activation of Blue Test Scene to inactive.
?[0;39m17:51:04.539 [Test worker] ?[34mINFO ?[0;39m ?[36mo.o.b.d.t.l.u.s.SceneRemoteTest?[0;39m ?[39mCancel all ongoing actions...
?[0;39m17:51:04.551 [pool-1-thread-48] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.DimmerController?[0;39m ?[39mHA TYA663A Device is updated from off to off.
?[0;39m17:51:04.553 [pool-1-thread-48] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed power of HA TYA663A Device to off.
?[0;39m17:51:04.567 [pool-1-thread-66] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.DimmableLightController?[0;39m ?[39mHA ABC Device is updated from off to off.
?[0;39m17:51:04.586 [pool-1-thread-66] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed power of HA ABC Device to off.
?[0;39m17:51:04.609 [pool-1-thread-74] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.LightController?[0;39m ?[39mF FGS221 Device is updated from off to off.
?[0;39m17:51:04.611 [pool-1-thread-74] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed power of F FGS221 Device to off.
?[0;39m17:51:04.663 [pool-1-thread-52] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.PowerSwitchController?[0;39m ?[39mPW Power Plug Device is updated from off to off.
?[0;39m17:51:04.666 [pool-1-thread-52] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed power of PW Power Plug Device to off.
?[0;39m17:51:04.788 [Test worker] ?[34mINFO ?[0;39m ?[36mo.o.b.d.t.AbstractBCOTest?[0;39m ?[39mCancel 3 ongoing test actions ...
?[0;39m17:51:04.864 [pool-1-thread-97] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.s.SceneControllerImpl?[0;39m ?[39mBlue Test Scene is updated from inactive to inactive.
?[0;39m17:51:04.886 [pool-1-thread-97] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed activation of Blue Test Scene to inactive.
?[0;39mtestTriggerSceneWithLocationActionPerRemoteAndVerifiesUnitModification
17:51:05.011 [pool-1-thread-6] ?[34mINFO ?[0;39m ?[36mo.o.j.p.JPTestMode?[0;39m ?[39mTest mode enabled!
?[0;39m17:51:05.059 [pool-1-thread-80] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.l.u.LightController?[0;39m ?[39mF FGS221 Device is updated from off to on.
?[0;39m17:51:05.059 [pool-1-thread-80] ?[34mINFO ?[0;39m ?[36mo.o.b.d.c.a.ActionImpl?[0;39m ?[39mBCO changed power of F FGS221 Device to on.

Generated by Gradle 7.5 at Aug 5, 2022, 5:51:11 PM

Multi Session Management

Components like the cloud connector need multi session management. This includes executing actions as different users as well as using tokens to execute actions with permissions different then the user logged in.

Error while building Debian package

[ERROR] Failed to create debian package /home/ppekala/workspace/openbase/bco/target/bco_1.6.0~20180420153740_all.deb
org.vafer.jdeb.PackagingException: Failed to create debian package /home/ppekala/workspace/openbase/bco/target/bco_1.6.0~20180420153740_all.deb
	at org.vafer.jdeb.DebMaker.makeDeb(DebMaker.java:348)
	at org.vafer.jdeb.maven.DebMojo.execute(DebMojo.java:583)
	at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
	at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
	at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
	at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
	at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
	at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
	at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
	at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
	at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
	at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
	at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
	at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
	at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
	at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.vafer.jdeb.PackagingException: Could not create deb package
	at org.vafer.jdeb.DebMaker.createSignedDeb(DebMaker.java:573)
	at org.vafer.jdeb.DebMaker.createDeb(DebMaker.java:463)
	at org.vafer.jdeb.DebMaker.makeDeb(DebMaker.java:344)
	... 23 more
Caused by: java.io.FileNotFoundException: Data source not found : /home/ppekala/workspace/openbase/bco/target/appassembler/share/bco/lib
	at org.vafer.jdeb.maven.Data.produce(Data.java:189)
	at org.vafer.jdeb.DataBuilder.buildData(DataBuilder.java:265)
	at org.vafer.jdeb.DebMaker.createSignedDeb(DebMaker.java:489)
	... 25 more
[ERROR] Failed to execute goal org.vafer:jdeb:1.6:jdeb (default) on project bco: Failed to create debian package /home/ppekala/workspace/openbase/bco/target/bco_1.6.0~20180420153740_all.deb: Could not create deb package: Data source not found : /home/ppekala/workspace/openbase/bco/target/appassembler/share/bco/lib -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

Fix Scene Remote Test Deadlocks

Deadlocks occur within the ActionImpl.cancelAction method during notification.
The list is notified by the thread that cancels the action which requires the action builder to sync the action list into the controller data builder. However during the tests, another thread is canceling the action that already locked the action builder again.

InfluxDB Connector APP - Index Out of Bounds

The following index out of bounds occurs

2022-08-21 18:52:26.824  WARN 46 --- [ol-1-thread-863] o.b.d.r.l.u.PowerConsumptionSensorRemote : ═╦═⚀ Could not notify state update for service[POWER_CONSUMPTION_STATE_SERVICE] in tempus[CURRENT]
2022-08-21 18:52:26.830  WARN 46 --- [ol-1-thread-863] o.b.d.r.l.u.PowerConsumptionSensorRemote :  ╚══╦═⚀ Could not notify Data[consumption: 0.0current: 0.0voltage: 230.0timestamp {  time: 166110074654600 [...]] to all observer!
2022-08-21 18:52:26.844  WARN 46 --- [ol-1-thread-863] o.b.d.r.l.u.PowerConsumptionSensorRemote :     ╚══╦═⚀ Observer[CustomUnitPool$$Lambda$237/0x000000080118ec30] update failed!
2022-08-21 18:52:26.844  WARN 46 --- [ol-1-thread-863] o.b.d.r.l.u.PowerConsumptionSensorRemote :        ╚══╦═⚀ Could not notify Data[consumption: 0.0current: 0.0voltage: 230.0timestamp {  time: 166110074654600 [...]] to all observer!
2022-08-21 18:52:26.845  WARN 46 --- [ol-1-thread-863] o.b.d.r.l.u.PowerConsumptionSensorRemote :           ╚══╦═⚀ Observer[InfluxDbconnectorApp$$Lambda$631/0x00000008014f2768] update failed!
2022-08-21 18:52:26.845  WARN 46 --- [ol-1-thread-863] o.b.d.r.l.u.PowerConsumptionSensorRemote :              ╚════⚀ Index 0 out of bounds for length 0
2022-08-21 18:52:26.869  WARN 46 --- [ol-1-thread-863] o.b.d.r.l.u.PowerConsumptionSensorRemote : =====================================
2022-08-21 18:52:26.881  WARN 46 --- [ol-1-thread-863] o.b.d.r.l.u.PowerConsumptionSensorRemote : Could not notify state update for service[POWER_CONSUMPTION_STATE_SERVICE] in tempus[CURRENT]

org.openbase.jul.exception.CouldNotPerformException: Could not notify state update for service[POWER_CONSUMPTION_STATE_SERVICE] in tempus[CURRENT]
	at org.openbase.jul.exception.printer.ExceptionPrinter.printHistory(ExceptionPrinter.java:159) ~[jul.exception-3.2-SNAPSHOT.jar:na]
	at org.openbase.bco.dal.remote.layer.unit.AbstractUnitRemote.lambda$new$1(AbstractUnitRemote.java:154) ~[bco.dal.remote-3.1-SNAPSHOT.jar:na]
	at org.openbase.jul.pattern.AbstractObservable.notifyObservers(AbstractObservable.java:271) ~[jul.pattern-3.2-SNAPSHOT.jar:na]
	at org.openbase.jul.pattern.AbstractObservable.notifyObservers(AbstractObservable.java:200) ~[jul.pattern-3.2-SNAPSHOT.jar:na]
	at org.openbase.bco.dal.remote.layer.unit.AbstractUnitRemote.lambda$new$0(AbstractUnitRemote.java:128) ~[bco.dal.remote-3.1-SNAPSHOT.jar:na]
	at org.openbase.jul.pattern.AbstractObservable.notifyObservers(AbstractObservable.java:271) ~[jul.pattern-3.2-SNAPSHOT.jar:na]
	at org.openbase.jul.pattern.AbstractObservable.notifyObservers(AbstractObservable.java:200) ~[jul.pattern-3.2-SNAPSHOT.jar:na]
	at org.openbase.jul.communication.controller.AbstractRemoteClient.applyDataUpdate(AbstractRemoteClient.java:1553) ~[jul.communication.controller-3.2-SNAPSHOT.jar:na]
	at org.openbase.jul.communication.controller.AbstractRemoteClient$SyncTaskCallable.call(AbstractRemoteClient.java:1901) ~[jul.communication.controller-3.2-SNAPSHOT.jar:na]
	at org.openbase.jul.communication.controller.AbstractRemoteClient$SyncTaskCallable.call(AbstractRemoteClient.java:1760) ~[jul.communication.controller-3.2-SNAPSHOT.jar:na]
	at java.base/java.util.concurrent.FutureTask.run(Unknown Source) ~[na:na]
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) ~[na:na]
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[na:na]
	at java.base/java.lang.Thread.run(Unknown Source) ~[na:na]
Caused by: org.openbase.jul.exception.MultiException: Could not notify Data[consumption: 0.0
current: 0.0
voltage: 230.0
timestamp {
  time: 166110074654600 [...]] to all observer!
	at org.openbase.jul.exception.MultiException.checkAndThrow(MultiException.java:82) ~[jul.exception-3.2-SNAPSHOT.jar:na]
	at org.openbase.jul.pattern.AbstractObservable.notifyObservers(AbstractObservable.java:325) ~[jul.pattern-3.2-SNAPSHOT.jar:na]
	at org.openbase.jul.pattern.AbstractObservable.notifyObservers(AbstractObservable.java:200) ~[jul.pattern-3.2-SNAPSHOT.jar:na]
	at org.openbase.bco.dal.remote.layer.unit.AbstractUnitRemote.lambda$new$1(AbstractUnitRemote.java:152) ~[bco.dal.remote-3.1-SNAPSHOT.jar:na]
	... 12 common frames omitted
Caused by: org.openbase.jul.exception.CouldNotPerformException: Observer[CustomUnitPool$$Lambda$237/0x000000080118ec30] update failed!
	at org.openbase.jul.pattern.AbstractObservable.notifyObservers(AbstractObservable.java:285) ~[jul.pattern-3.2-SNAPSHOT.jar:na]
	... 14 common frames omitted
Caused by: org.openbase.jul.exception.MultiException: Could not notify Data[consumption: 0.0
current: 0.0
voltage: 230.0
timestamp {
  time: 166110074654600 [...]] to all observer!
	at org.openbase.jul.exception.MultiException.checkAndThrow(MultiException.java:82) ~[jul.exception-3.2-SNAPSHOT.jar:na]
	at org.openbase.jul.pattern.AbstractObservable.notifyObservers(AbstractObservable.java:325) ~[jul.pattern-3.2-SNAPSHOT.jar:na]
	at org.openbase.bco.dal.remote.layer.unit.CustomUnitPool.lambda$new$2(CustomUnitPool.java:88) ~[bco.dal.remote-3.1-SNAPSHOT.jar:na]
	at org.openbase.jul.pattern.AbstractObservable.notifyObservers(AbstractObservable.java:271) ~[jul.pattern-3.2-SNAPSHOT.jar:na]
	... 14 common frames omitted
Caused by: org.openbase.jul.exception.CouldNotPerformException: Observer[InfluxDbconnectorApp$$Lambda$631/0x00000008014f2768] update failed!
	at org.openbase.jul.pattern.AbstractObservable.notifyObservers(AbstractObservable.java:285) ~[jul.pattern-3.2-SNAPSHOT.jar:na]
	... 16 common frames omitted
Caused by: java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0
	at java.base/jdk.internal.util.Preconditions.outOfBounds(Unknown Source) ~[na:na]
	at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Unknown Source) ~[na:na]
	at java.base/jdk.internal.util.Preconditions.checkIndex(Unknown Source) ~[na:na]
	at java.base/java.util.Objects.checkIndex(Unknown Source) ~[na:na]
	at java.base/java.util.ArrayList.get(Unknown Source) ~[na:na]
	at com.google.protobuf.LazyStringArrayList.get(LazyStringArrayList.java:112) ~[protobuf-java-3.19.2.jar:na]
	at com.google.protobuf.LazyStringArrayList.get(LazyStringArrayList.java:61) ~[protobuf-java-3.19.2.jar:na]
	at org.openbase.type.language.LabelType$Label$MapFieldEntry.getValue(LabelType.java:461) ~[type-1.1.3.jar:na]
	at org.openbase.bco.app.influxdbconnector.InfluxDbconnectorApp.storeServiceState(InfluxDbconnectorApp.java:354) ~[bco.app.influxdb.connector-3.1-SNAPSHOT.jar:na]
	at org.openbase.bco.app.influxdbconnector.InfluxDbconnectorApp.storeServiceState(InfluxDbconnectorApp.java:295) ~[bco.app.influxdb.connector-3.1-SNAPSHOT.jar:na]
	at org.openbase.bco.app.influxdbconnector.InfluxDbconnectorApp.lambda$new$0(InfluxDbconnectorApp.java:99) ~[bco.app.influxdb.connector-3.1-SNAPSHOT.jar:na]
	at org.openbase.jul.pattern.AbstractObservable.notifyObservers(AbstractObservable.java:271) ~[jul.pattern-3.2-SNAPSHOT.jar:na]
	... 16 common frames omitted

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.