Procedure to Migrate from OpenRemote Version 1.3.4 to 1.3.5

Seeking assistance:

  1. Is there a clear procedure to backup the database on version 1.3.4 and then restore it to the latest version 1.3.5 on another AWS instance - both running Ubuntu AWS instances
  2. Has anybody done this?

I realise this is a similar question to my previous post.

Thanks

Hi!

On backing up / restoring the database, you can use the command in the documentation;

.
Alternatively, you can also backup the Docker volume, or the filesystem in full manually.

Thanks Martin

I have followed the Backup/Restore OpenRemote DB process which works. On the new system after the DB restore ‘docker-compose -p openremote up’ ultimately fails after about 10 minutes with container openremote-manager-1 unhealthy. Up to this point I can see the rules etc working in the console log so it is working to a point.

For what it is worth I was getting the error below and ChatGPT recommended running:

ALTER TABLE asset_datapoint
ADD CONSTRAINT asset_datapoint_unique_constraint
UNIQUE (entity_id, attribute_name, timestamp);

After doing so I managed to get my window’s openremote version running with the restored database but still no success with the AWS Ubuntu instance i.e. unhealthy manager container.

error:

manager-1 | 2025-04-08 04:32:00.275 WARNING [ContainerExecutor-12 ] nremote.manager.event.ClientEventService : Event subscriber has thrown an exception: org.openremote.manager.datapoint.AssetDatapointService$$Lambda/0x00007f34f8c79098@5a3760d0
manager-1 | org.openremote.manager.asset.AssetProcessingException: STATE_STORAGE_FAILED (Failed to insert or update asset data point for attribute: AttributeEvent{timestamp=2025-04-08T02:32:00.261Z, ref=AttributeRef{id=‘xxxxxxxxxxxxxxxx’, name=‘payload’}, realm=xxxxxxxxxxx, source=AgentService, valueType=com.fasterxml.jackson.databind.node.ObjectNode})
manager-1 | at org.openremote.manager.datapoint.AssetDatapointService.onAttributeEvent(AssetDatapointService.java:127)
manager-1 | at org.openremote.manager.event.ClientEventService.lambda$sendToSubscribers$14(ClientEventService.java:399)
manager-1 | at java.base/java.util.concurrent.CopyOnWriteArrayList.forEach(CopyOnWriteArrayList.java:891)
manager-1 | at java.base/java.util.concurrent.CopyOnWriteArraySet.forEach(CopyOnWriteArraySet.java:425)
manager-1 | at org.openremote.manager.event.ClientEventService.sendToSubscribers(ClientEventService.java:384)
manager-1 | at org.openremote.manager.event.ClientEventService.lambda$configure$13(ClientEventService.java:378)
manager-1 | at org.apache.camel.support.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:65)
manager-1 | at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.doRun(RedeliveryErrorHandler.java:808)
manager-1 | at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.run(RedeliveryErrorHandler.java:714)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.doRun(DefaultReactiveExecutor.java:199)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.executeReactiveWork(DefaultReactiveExecutor.java:189)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.tryExecuteReactiveWork(DefaultReactiveExecutor.java:166)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:148)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor.schedule(DefaultReactiveExecutor.java:54)
manager-1 | at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.lambda$doRun$1(RedeliveryErrorHandler.java:813)
manager-1 | at org.apache.camel.processor.ThreadsProcessor$ProcessCall.run(ThreadsProcessor.java:82)
manager-1 | at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
postgresql-1 | 2025-04-08 04:32:00.289 CEST [104] ERROR: there is no unique or exclusion constraint matching the ON CONFLICT specification
postgresql-1 | 2025-04-08 04:32:00.289 CEST [104] STATEMENT: INSERT INTO asset_datapoint (entity_id, attribute_name, value, timestamp) VALUES ($1, $2, $3, $4) ON CONFLICT (entity_id, attribute_name, timestamp) DO UPDATE SET value = excluded.value
manager-1 | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
manager-1 | at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
manager-1 | at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
manager-1 | at java.base/java.lang.Thread.run(Thread.java:1583)
manager-1 | Caused by: java.lang.IllegalStateException: Failed to insert/update data point:
manager-1 | at org.openremote.manager.datapoint.AbstractDatapointService.lambda$upsertValue$1(AbstractDatapointService.java:114)
manager-1 | at org.hibernate.jdbc.WorkExecutor.executeWork(WorkExecutor.java:39)
manager-1 | at org.hibernate.internal.AbstractSharedSessionContract.lambda$doWork$5(AbstractSharedSessionContract.java:1054)
manager-1 | at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.coordinateWork(JdbcCoordinatorImpl.java:303)
manager-1 | at org.hibernate.internal.AbstractSharedSessionContract.doWork(AbstractSharedSessionContract.java:1065)
manager-1 | at org.hibernate.internal.AbstractSharedSessionContract.doWork(AbstractSharedSessionContract.java:1053)
manager-1 | at org.openremote.manager.datapoint.AbstractDatapointService.lambda$upsertValue$2(AbstractDatapointService.java:102)
manager-1 | at org.openremote.container.persistence.PersistenceService.lambda$doTransaction$4(PersistenceService.java:420)
manager-1 | at org.openremote.container.persistence.PersistenceService.doReturningTransaction(PersistenceService.java:430)
manager-1 | at org.openremote.container.persistence.PersistenceService.doTransaction(PersistenceService.java:419)
manager-1 | at org.openremote.manager.datapoint.AbstractDatapointService.upsertValue(AbstractDatapointService.java:101)
manager-1 | at org.openremote.manager.datapoint.AbstractDatapointService.upsertValue(AbstractDatapointService.java:98)
manager-1 | at org.openremote.manager.datapoint.AssetDatapointService.onAttributeEvent(AssetDatapointService.java:125)
manager-1 | … 20 more
manager-1 | Caused by: org.postgresql.util.PSQLException: ERROR: there is no unique or exclusion constraint matching the ON CONFLICT specification
manager-1 | at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2733)
manager-1 | at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2420)
manager-1 | at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:372)
manager-1 | at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:517)
manager-1 | at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:434)
manager-1 | at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:194)
manager-1 | at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(PgPreparedStatement.java:155)
manager-1 | at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61)
manager-1 | at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java)
manager-1 | at org.openremote.manager.datapoint.AbstractDatapointService.lambda$upsertValue$1(AbstractDatapointService.java:110)

This edit doesn’t make sense to me, as the attribute name column should not be unique.
Same counts for the timestamp column, as some datapoints might have the same timestamp.
Beside that, the SQL syntax seems incorrect based on a simple Google search.

.

Please explain exactly what logs are appearing without these changes.
And along with that, please share what is going wrong, and what you want instead.

Migrating from 1.3.4 to 1.3.5 should be seamless, as no model changes have been made.

Hi Martin,

Thanks for your help so far.

We’re currently running OpenRemote version 1.3.4 in production and looking to upgrade to the latest version (1.3.5), but want to avoid touching the live system directly.

To test the upgrade, I’ve launched a new Ubuntu instance in AWS and followed these steps:

  1. Backed up the database from the current system (using the standard OR procedure).
  2. Pulled the latest OpenRemote Docker images and started the system using the Quickstart guide – everything starts cleanly.
  3. Restored the database backup (without making any changes).

After about 10 minutes, the openremote-manager-1 container enters an unhealthy state. Interestingly, I can still see rules firing in the logs and there are no obvious errors. Keycloak authentication appears to be working fine, so I don’t think the issue is related to passwords in docker-compose.yml.

My skillset is somewhat limited, but I was under the impression this process should be relatively seamless – clearly I’m missing something.

Any advice or suggestions would be much appreciated.

Cheers,
Clint

Makes sense that you’re testing out the system first. :+1:

The steps you went through seem OK, and shouldn’t harm anything.
(I assume that the manager and keycloak instances were stopped during this process)

May I ask what size we’re talking in amount of data? (assets, rules etc)
We might’ve underestimated the load of a restore for larger systems.
.

The healthcheck in the container is as follows (see Dockerfile);

HEALTHCHECK --interval=3s --timeout=60s --start-period=30s --retries=120 CMD curl --fail --silent http://localhost:8080 || exit 1

.
Well, other than that, is there anything else you notice on the system?
Are the services responding slow, or is a service unreachable?
You can try to disable rules and/or disconnect agents to see those might be the cause?

@Rich @wborn do you have any other ideas?

Hi Martin

I have already tried disabling and the deleting groovy rules on my working windows version and the backing up and restoring the db.bak to the new instance but the manger container still goes to the unhealth state. I should mention that I am unable to login to the new instance as the Container openremote-proxy-1 never starts due to its dependency on Container openremote-manager-1.

We have about 15 Realms and approximately 100 Assets. Each Realm has a MQTT agent and most of the assets have one one attribute for the Agent link to receive a json payload from TTN or CS and this attribute has may Attribute Links to other attributes. We also have numerous rules and Insight dashboards.

The database size is about 240 Mb.

I performed a fresh backup (248MB) from the old system and restored it to the new instance. However, it still failed to start up correctly. After troubleshooting, I managed to get the whole stack up and running by adding the following to the docker-compose.yml file and the openremote-manager-1 container becomes healthy after about 15 minutes:

healthcheck:
test: [“CMD”, “curl”, “–fail”, “–silent”, “http://localhost:8080”]
interval: 30s
timeout: 60s
start_period: 1200s # ← 20 minutes
retries: 40

Even though the stack is now running, I am seeing the errors below in the console log. ChatGPT, suggests following command against the PostgreSQL database. I did this a while ago and it seemed to fix this particular issue but not the unhealthy container.

ALTER TABLE asset_datapoint
ADD CONSTRAINT unique_asset_datapoint UNIQUE (entity_id, attribute_name, timestamp);

Does anyone have any thoughts or insights on this? Would adding this unique constraint resolve the issue completely, or is there another underlying problem I should look into?

manager-1 | 2025-04-10 02:29:39.056 WARNING [ContainerExecutor-30 ] .manager.datapoint.AssetDatapointService : Failed to insert/update data point:
manager-1 | org.postgresql.util.PSQLException: ERROR: there is no unique or exclusion constraint matching the ON CONFLICT specification
manager-1 | at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2733)
manager-1 | at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2420)
manager-1 | at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:372)
manager-1 | at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:517)
manager-1 | at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:434)
manager-1 | at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:194)
manager-1 | at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(PgPreparedStatement.java:155)
manager-1 | at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61)
manager-1 | at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java)
manager-1 | at org.openremote.manager.datapoint.AbstractDatapointService.lambda$upsertValue$1(AbstractDatapointService.java:110)
manager-1 | at org.hibernate.jdbc.WorkExecutor.executeWork(WorkExecutor.java:39)
manager-1 | at org.hibernate.internal.AbstractSharedSessionContract.lambda$doWork$5(AbstractSharedSessionContract.java:1054)
manager-1 | at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.coordinateWork(JdbcCoordinatorImpl.java:303)
manager-1 | at org.hibernate.internal.AbstractSharedSessionContract.doWork(AbstractSharedSessionContract.java:1065)
manager-1 | at org.hibernate.internal.AbstractSharedSessionContract.doWork(AbstractSharedSessionContract.java:1053)
manager-1 | at org.openremote.manager.datapoint.AbstractDatapointService.lambda$upsertValue$2(AbstractDatapointService.java:102)
manager-1 | at org.openremote.container.persistence.PersistenceService.lambda$doTransaction$4(PersistenceService.java:420)
manager-1 | at org.openremote.container.persistence.PersistenceService.doReturningTransaction(PersistenceService.java:430)
manager-1 | at org.openremote.container.persistence.PersistenceService.doTransaction(PersistenceService.java:419)
manager-1 | at org.openremote.manager.datapoint.AbstractDatapointService.upsertValue(AbstractDatapointService.java:101)
manager-1 | at org.openremote.manager.datapoint.AbstractDatapointService.upsertValue(AbstractDatapointService.java:98)
manager-1 | at org.openremote.manager.datapoint.AssetDatapointService.onAttributeEvent(AssetDatapointService.java:125)
manager-1 | at org.openremote.manager.event.ClientEventService.lambda$sendToSubscribers$14(ClientEventService.java:399)
manager-1 | at java.base/java.util.concurrent.CopyOnWriteArrayList.forEach(CopyOnWriteArrayList.java:891)
manager-1 | at java.base/java.util.concurrent.CopyOnWriteArraySet.forEach(CopyOnWriteArraySet.java:425)
manager-1 | at org.openremote.manager.event.ClientEventService.sendToSubscribers(ClientEventService.java:384)
manager-1 | at org.openremote.manager.event.ClientEventService.lambda$configure$13(ClientEventService.java:378)
manager-1 | at org.apache.camel.support.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:65)
manager-1 | at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.doRun(RedeliveryErrorHandler.java:808)
manager-1 | at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.run(RedeliveryErrorHandler.java:714)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.doRun(DefaultReactiveExecutor.java:199)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.executeReactiveWork(DefaultReactiveExecutor.java:189)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.tryExecuteReactiveWork(DefaultReactiveExecutor.java:166)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:148)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor.schedule(DefaultReactiveExecutor.java:54)
manager-1 | at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.lambda$doRun$1(RedeliveryErrorHandler.java:813)
manager-1 | at org.apache.camel.processor.ThreadsProcessor$ProcessCall.run(ThreadsProcessor.java:82)
manager-1 | at io.micrometer.core.instrument.internal.TimedRunnable.run(TimedRunnable.java:49)
manager-1 | at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
manager-1 | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
manager-1 | at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
manager-1 | at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
manager-1 | at java.base/java.lang.Thread.run(Thread.java:1583)
manager-1 | 2025-04-10 02:29:39.061 WARNING [ContainerExecutor-30 ] nremote.manager.event.ClientEventService : Event subscriber has thrown an exception: org.openremote.manager.datapoint.AssetDatapointService$$Lambda/0x00007d5bf4babf38@60b63b9a
manager-1 | org.openremote.manager.asset.AssetProcessingException: STATE_STORAGE_FAILED (Failed to insert or update asset data point for attribute: AttributeEvent{timestamp=2025-04-10T00:29:39.029Z, ref=AttributeRef{id=‘52EpjNqTUWC3m7caTwE67s’, name=‘flow’}, realm=kai, source=RulesEngine, valueType=java.lang.Double})
manager-1 | at org.openremote.manager.datapoint.AssetDatapointService.onAttributeEvent(AssetDatapointService.java:127)
manager-1 | at org.openremote.manager.event.ClientEventService.lambda$sendToSubscribers$14(ClientEventService.java:399)
manager-1 | at java.base/java.util.concurrent.CopyOnWriteArrayList.forEach(CopyOnWriteArrayList.java:891)
manager-1 | at java.base/java.util.concurrent.CopyOnWriteArraySet.forEach(CopyOnWriteArraySet.java:425)
manager-1 | at org.openremote.manager.event.ClientEventService.sendToSubscribers(ClientEventService.java:384)
manager-1 | at org.openremote.manager.event.ClientEventService.lambda$configure$13(ClientEventService.java:378)
manager-1 | at org.apache.camel.support.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:65)
manager-1 | at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.doRun(RedeliveryErrorHandler.java:808)
manager-1 | at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.run(RedeliveryErrorHandler.java:714)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.doRun(DefaultReactiveExecutor.java:199)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.executeReactiveWork(DefaultReactiveExecutor.java:189)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.tryExecuteReactiveWork(DefaultReactiveExecutor.java:166)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:148)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor.schedule(DefaultReactiveExecutor.java:54)
manager-1 | at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.lambda$doRun$1(RedeliveryErrorHandler.java:813)
manager-1 | at org.apache.camel.processor.ThreadsProcessor$ProcessCall.run(ThreadsProcessor.java:82)
manager-1 | at io.micrometer.core.instrument.internal.TimedRunnable.run(TimedRunnable.java:49)
manager-1 | at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
manager-1 | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
manager-1 | at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
manager-1 | at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
manager-1 | at java.base/java.lang.Thread.run(Thread.java:1583)
manager-1 | Caused by: java.lang.IllegalStateException: Failed to insert/update data point:
manager-1 | at org.openremote.manager.datapoint.AbstractDatapointService.lambda$upsertValue$1(AbstractDatapointService.java:114)
manager-1 | at org.hibernate.jdbc.WorkExecutor.executeWork(WorkExecutor.java:39)
manager-1 | at org.hibernate.internal.AbstractSharedSessionContract.lambda$doWork$5(AbstractSharedSessionContract.java:1054)
manager-1 | at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.coordinateWork(JdbcCoordinatorImpl.java:303)
manager-1 | at org.hibernate.internal.AbstractSharedSessionContract.doWork(AbstractSharedSessionContract.java:1065)
manager-1 | at org.hibernate.internal.AbstractSharedSessionContract.doWork(AbstractSharedSessionContract.java:1053)
manager-1 | at org.openremote.manager.datapoint.AbstractDatapointService.lambda$upsertValue$2(AbstractDatapointService.java:102)
manager-1 | at org.openremote.container.persistence.PersistenceService.lambda$doTransaction$4(PersistenceService.java:420)
manager-1 | at org.openremote.container.persistence.PersistenceService.doReturningTransaction(PersistenceService.java:430)
manager-1 | at org.openremote.container.persistence.PersistenceService.doTransaction(PersistenceService.java:419)
manager-1 | at org.openremote.manager.datapoint.AbstractDatapointService.upsertValue(AbstractDatapointService.java:101)
manager-1 | at org.openremote.manager.datapoint.AbstractDatapointService.upsertValue(AbstractDatapointService.java:98)
manager-1 | at org.openremote.manager.datapoint.AssetDatapointService.onAttributeEvent(AssetDatapointService.java:125)
manager-1 | … 21 more
manager-1 | Caused by: org.postgresql.util.PSQLException: ERROR: there is no unique or exclusion constraint matching the ON CONFLICT specification
manager-1 | at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2733)
manager-1 | at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2420)
manager-1 | at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:372)
manager-1 | at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:517)
manager-1 | at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:434)
manager-1 | at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:194)
manager-1 | at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(PgPreparedStatement.java:155)
manager-1 | at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61)
manager-1 | at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java)
manager-1 | at org.openremote.manager.datapoint.AbstractDatapointService.lambda$upsertValue$1(AbstractDatapointService.java:110)
manager-1 | … 33 more
manager-1 | 2025-04-10 02:29:39.074 WARNING [ContainerExecutor-31 ] .manager.datapoint.AssetDatapointService : Failed to insert/update data point:
manager-1 | org.postgresql.util.PSQLException: ERROR: there is no unique or exclusion constraint matching the ON CONFLICT specification
manager-1 | at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2733)
manager-1 | at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2420)
manager-1 | at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:372)
manager-1 | at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:517)
manager-1 | at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:434)
manager-1 | at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:194)
manager-1 | at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(PgPreparedStatement.java:155)
manager-1 | at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61)
manager-1 | at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java)
manager-1 | at org.openremote.manager.datapoint.AbstractDatapointService.lambda$upsertValue$1(AbstractDatapointService.java:110)
manager-1 | at org.hibernate.jdbc.WorkExecutor.executeWork(WorkExecutor.java:39)
manager-1 | at org.hibernate.internal.AbstractSharedSessionContract.lambda$doWork$5(AbstractSharedSessionContract.java:1054)
manager-1 | at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.coordinateWork(JdbcCoordinatorImpl.java:303)
manager-1 | at org.hibernate.internal.AbstractSharedSessionContract.doWork(AbstractSharedSessionContract.java:1065)
manager-1 | at org.hibernate.internal.AbstractSharedSessionContract.doWork(AbstractSharedSessionContract.java:1053)
manager-1 | at org.openremote.manager.datapoint.AbstractDatapointService.lambda$upsertValue$2(AbstractDatapointService.java:102)
manager-1 | at org.openremote.container.persistence.PersistenceService.lambda$doTransaction$4(PersistenceService.java:420)
manager-1 | at org.openremote.container.persistence.PersistenceService.doReturningTransaction(PersistenceService.java:430)
manager-1 | at org.openremote.container.persistence.PersistenceService.doTransaction(PersistenceService.java:419)
manager-1 | at org.openremote.manager.datapoint.AbstractDatapointService.upsertValue(AbstractDatapointService.java:101)
manager-1 | at org.openremote.manager.datapoint.AbstractDatapointService.upsertValue(AbstractDatapointService.java:98)
manager-1 | at org.openremote.manager.datapoint.AssetDatapointService.onAttributeEvent(AssetDatapointService.java:125)
manager-1 | at org.openremote.manager.event.ClientEventService.lambda$sendToSubscribers$14(ClientEventService.java:399)
manager-1 | at java.base/java.util.concurrent.CopyOnWriteArrayList.forEach(CopyOnWriteArrayList.java:891)
manager-1 | at java.base/java.util.concurrent.CopyOnWriteArraySet.forEach(CopyOnWriteArraySet.java:425)
manager-1 | at org.openremote.manager.event.ClientEventService.sendToSubscribers(ClientEventService.java:384)
manager-1 | at org.openremote.manager.event.ClientEventService.lambda$configure$13(ClientEventService.java:378)
manager-1 | at org.apache.camel.support.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:65)
manager-1 | at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.doRun(RedeliveryErrorHandler.java:808)
manager-1 | at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.run(RedeliveryErrorHandler.java:714)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.doRun(DefaultReactiveExecutor.java:199)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.executeReactiveWork(DefaultReactiveExecutor.java:189)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.tryExecuteReactiveWork(DefaultReactiveExecutor.java:166)
keycloak-1 | 2025-04-10 02:49:33,966 WARN [org.keycloak.theme.DefaultThemeManager] (executor-thread-4) Not found parent theme ‘keycloak’ of theme ‘openremote’. Unable to load ACCOUNT theme ‘openremote’ due to this.
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:148)
keycloak-1 | 2025-04-10 02:49:33,969 ERROR [org.keycloak.theme.DefaultThemeManager] (executor-thread-4) Failed to find ACCOUNT theme openremote, using built-in themes
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor.schedule(DefaultReactiveExecutor.java:54)
keycloak-1 | 2025-04-10 02:49:33,974 WARN [org.keycloak.theme.DefaultThemeManager] (executor-thread-4) Not found parent theme ‘keycloak’ of theme ‘openremote’. Unable to load ACCOUNT theme ‘openremote’ due to this.
manager-1 | at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.lambda$doRun$1(RedeliveryErrorHandler.java:813)
keycloak-1 | 2025-04-10 02:49:33,976 ERROR [org.keycloak.theme.DefaultThemeManager] (executor-thread-4) Failed to find ACCOUNT theme openremote, using built-in themes
manager-1 | at org.apache.camel.processor.ThreadsProcessor$ProcessCall.run(ThreadsProcessor.java:82)
manager-1 | at io.micrometer.core.instrument.internal.TimedRunnable.run(TimedRunnable.java:49)
manager-1 | at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
manager-1 | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
manager-1 | at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
manager-1 | at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
manager-1 | at java.base/java.lang.Thread.run(Thread.java:1583)
manager-1 | 2025-04-10 02:29:39.076 WARNING [ContainerExecutor-31 ] nremote.manager.event.ClientEventService : Event subscriber has thrown an exception: org.openremote.manager.datapoint.AssetDatapointService$$Lambda/0x00007d5bf4babf38@60b63b9a
manager-1 | org.openremote.manager.asset.AssetProcessingException: STATE_STORAGE_FAILED (Failed to insert or update asset data point for attribute: AttributeEvent{timestamp=2025-04-10T00:29:39.042Z, ref=AttributeRef{id=‘52EpjNqTUWC3m7caTwE67s’, name=‘flowAccumulative’}, realm=kai, source=RulesEngine, valueType=java.lang.Double})
manager-1 | at org.openremote.manager.datapoint.AssetDatapointService.onAttributeEvent(AssetDatapointService.java:127)
manager-1 | at org.openremote.manager.event.ClientEventService.lambda$sendToSubscribers$14(ClientEventService.java:399)
manager-1 | at java.base/java.util.concurrent.CopyOnWriteArrayList.forEach(CopyOnWriteArrayList.java:891)
manager-1 | at java.base/java.util.concurrent.CopyOnWriteArraySet.forEach(CopyOnWriteArraySet.java:425)
manager-1 | at org.openremote.manager.event.ClientEventService.sendToSubscribers(ClientEventService.java:384)
manager-1 | at org.openremote.manager.event.ClientEventService.lambda$configure$13(ClientEventService.java:378)
manager-1 | at org.apache.camel.support.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:65)
manager-1 | at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.doRun(RedeliveryErrorHandler.java:808)
manager-1 | at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.run(RedeliveryErrorHandler.java:714)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.doRun(DefaultReactiveExecutor.java:199)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.executeReactiveWork(DefaultReactiveExecutor.java:189)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.tryExecuteReactiveWork(DefaultReactiveExecutor.java:166)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:148)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor.schedule(DefaultReactiveExecutor.java:54)
manager-1 | at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.lambda$doRun$1(RedeliveryErrorHandler.java:813)
manager-1 | at org.apache.camel.processor.ThreadsProcessor$ProcessCall.run(ThreadsProcessor.java:82)
manager-1 | at io.micrometer.core.instrument.internal.TimedRunnable.run(TimedRunnable.java:49)
manager-1 | at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
manager-1 | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
manager-1 | at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
manager-1 | at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
manager-1 | at java.base/java.lang.Thread.run(Thread.java:1583)
manager-1 | Caused by: java.lang.IllegalStateException: Failed to insert/update data point:
manager-1 | at org.openremote.manager.datapoint.AbstractDatapointService.lambda$upsertValue$1(AbstractDatapointService.java:114)
manager-1 | at org.hibernate.jdbc.WorkExecutor.executeWork(WorkExecutor.java:39)
manager-1 | at org.hibernate.internal.AbstractSharedSessionContract.lambda$doWork$5(AbstractSharedSessionContract.java:1054)
manager-1 | at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.coordinateWork(JdbcCoordinatorImpl.java:303)
manager-1 | at org.hibernate.internal.AbstractSharedSessionContract.doWork(AbstractSharedSessionContract.java:1065)
manager-1 | at org.hibernate.internal.AbstractSharedSessionContract.doWork(AbstractSharedSessionContract.java:1053)
manager-1 | at org.openremote.manager.datapoint.AbstractDatapointService.lambda$upsertValue$2(AbstractDatapointService.java:102)
manager-1 | at org.openremote.container.persistence.PersistenceService.lambda$doTransaction$4(PersistenceService.java:420)
manager-1 | at org.openremote.container.persistence.PersistenceService.doReturningTransaction(PersistenceService.java:430)
manager-1 | at org.openremote.container.persistence.PersistenceService.doTransaction(PersistenceService.java:419)
manager-1 | at org.openremote.manager.datapoint.AbstractDatapointService.upsertValue(AbstractDatapointService.java:101)
manager-1 | at org.openremote.manager.datapoint.AbstractDatapointService.upsertValue(AbstractDatapointService.java:98)
manager-1 | at org.openremote.manager.datapoint.AssetDatapointService.onAttributeEvent(AssetDatapointService.java:125)
manager-1 | … 21 more
manager-1 | Caused by: org.postgresql.util.PSQLException: ERROR: there is no unique or exclusion constraint matching the ON CONFLICT specification
manager-1 | at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2733)
manager-1 | at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2420)
manager-1 | at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:372)
manager-1 | at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:517)
manager-1 | at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:434)
manager-1 | at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:194)
manager-1 | at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(PgPreparedStatement.java:155)
manager-1 | at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61)
manager-1 | at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java)
manager-1 | at org.openremote.manager.datapoint.AbstractDatapointService.lambda$upsertValue$1(AbstractDatapointService.java:110)
manager-1 | … 33 more
manager-1 | 2025-04-10 02:29:39.103 WARNING [ContainerExecutor-30 ] .manager.datapoint.AssetDatapointService : Failed to insert/update data point:
manager-1 | org.postgresql.util.PSQLException: ERROR: there is no unique or exclusion constraint matching the ON CONFLICT specification
manager-1 | at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2733)
manager-1 | at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2420)
manager-1 | at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:372)
manager-1 | at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:517)
manager-1 | at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:434)
manager-1 | at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:194)
manager-1 | at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(PgPreparedStatement.java:155)
manager-1 | at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61)
manager-1 | at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java)
manager-1 | at org.openremote.manager.datapoint.AbstractDatapointService.lambda$upsertValue$1(AbstractDatapointService.java:110)
manager-1 | at org.hibernate.jdbc.WorkExecutor.executeWork(WorkExecutor.java:39)
manager-1 | at org.hibernate.internal.AbstractSharedSessionContract.lambda$doWork$5(AbstractSharedSessionContract.java:1054)
manager-1 | at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.coordinateWork(JdbcCoordinatorImpl.java:303)
manager-1 | at org.hibernate.internal.AbstractSharedSessionContract.doWork(AbstractSharedSessionContract.java:1065)
manager-1 | at org.hibernate.internal.AbstractSharedSessionContract.doWork(AbstractSharedSessionContract.java:1053)
manager-1 | at org.openremote.manager.datapoint.AbstractDatapointService.lambda$upsertValue$2(AbstractDatapointService.java:102)
manager-1 | at org.openremote.container.persistence.PersistenceService.lambda$doTransaction$4(PersistenceService.java:420)
manager-1 | at org.openremote.container.persistence.PersistenceService.doReturningTransaction(PersistenceService.java:430)
manager-1 | at org.openremote.container.persistence.PersistenceService.doTransaction(PersistenceService.java:419)
manager-1 | at org.openremote.manager.datapoint.AbstractDatapointService.upsertValue(AbstractDatapointService.java:101)
manager-1 | at org.openremote.manager.datapoint.AbstractDatapointService.upsertValue(AbstractDatapointService.java:98)
manager-1 | at org.openremote.manager.datapoint.AssetDatapointService.onAttributeEvent(AssetDatapointService.java:125)
manager-1 | at org.openremote.manager.event.ClientEventService.lambda$sendToSubscribers$14(ClientEventService.java:399)
manager-1 | at java.base/java.util.concurrent.CopyOnWriteArrayList.forEach(CopyOnWriteArrayList.java:891)
manager-1 | at java.base/java.util.concurrent.CopyOnWriteArraySet.forEach(CopyOnWriteArraySet.java:425)
manager-1 | at org.openremote.manager.event.ClientEventService.sendToSubscribers(ClientEventService.java:384)
manager-1 | at org.openremote.manager.event.ClientEventService.lambda$configure$13(ClientEventService.java:378)
manager-1 | at org.apache.camel.support.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:65)
manager-1 | at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.doRun(RedeliveryErrorHandler.java:808)
manager-1 | at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.run(RedeliveryErrorHandler.java:714)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.doRun(DefaultReactiveExecutor.java:199)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.executeReactiveWork(DefaultReactiveExecutor.java:189)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.tryExecuteReactiveWork(DefaultReactiveExecutor.java:166)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:148)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor.schedule(DefaultReactiveExecutor.java:54)
manager-1 | at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.lambda$doRun$1(RedeliveryErrorHandler.java:813)
StateException: Failed to insert/update data point:

Hello Clint,

Do you have any GUI tool to manage your PostgreSQL database to see if asset_datapoint table DDL definition is similar to this (it’s from my 1.3.4 version)?:

CREATE TABLE "openremote"."asset_datapoint" (
  "timestamp" timestamp(6) NOT NULL,
  "entity_id" varchar(22) COLLATE "pg_catalog"."default" NOT NULL,
  "attribute_name" varchar(255) COLLATE "pg_catalog"."default" NOT NULL,
  "value" jsonb NOT NULL,
  PRIMARY KEY ("timestamp", "entity_id", "attribute_name"),
  FOREIGN KEY ("entity_id") REFERENCES "openremote"."asset" ("id") ON DELETE CASCADE ON UPDATE NO ACTION
)
;

CREATE INDEX "asset_datapoint_entity_id_attribute_name_timestamp_idx_copy1" ON "openremote"."asset_datapoint" USING btree (
  "entity_id" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
  "attribute_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
  "timestamp" "pg_catalog"."timestamp_ops" DESC NULLS FIRST
);

CREATE INDEX "asset_datapoint_timestamp_idx_copy1" ON "openremote"."asset_datapoint" USING btree (
  "timestamp" "pg_catalog"."timestamp_ops" DESC NULLS FIRST
);

ALTER TABLE "openremote"."asset_datapoint" 
  OWNER TO "postgres";

CREATE TRIGGER "ts_insert_blocker" BEFORE INSERT ON "openremote"."asset_datapoint"
FOR EACH ROW
EXECUTE PROCEDURE "_timescaledb_internal"."insert_blocker"();

Regards,

Krzysztof

Hi Krzysztof

I don’t have any tools but will see if I can do the comparison.

Regards
Clint

Thankyou everyone for your help so far.

Since adding the Healthcheck override in docker-compose.yml I have been able to repeatably backup from the current system and restore to the new system. The logs are clear after deleting some rules which were problematic. The errors I posted above may have been due to a misstep in the restore procedure but they seem to have gone away (hopefully).

It is worth noting that the openremote-manager-1 container can take up to 20 minutes before it goes to the healthy state which seems like a long time.

Clint

Hi @martin.peeters

The system particularly the openremote-manger-1 container is taking about 20 to 30 minute to start up and I have to adjust the health check that i have added to docker-compose.yml to compensate. Is this normal for a system of our size?

docker stats:

Our system:
AWS t3.medium i.e. 2 vCPUs and 4Gb memory
database is about 250Mb
~ 10 realms
~ 120 assets
Combination of all flavours of rules
Approx 1 mqtt agents per realm
Many linked attributes
etc

Thanks

Hi!

The logs you shared say the following;
They “could not update data point” because of a PSQL constraint violation.
Other than that, it notes; "source=RulesEngine", meaning it’s triggered by your Rules.

This error shouldn’t cause the system to stop, as Rules run every 3 seconds by default.
But it could potentially overload the system, or lock certain threads while doing other tasks.

.

No, this is definitely weird behavior. The system should be up within 1 to 2 minutes or so.
The system should easily be able to handle 120 assets.
However, if custom logic like Groovy rules are added, it’s of course not guaranteed.
The Rules engine tends to be quite heavy, so keep that in mind.
Not sure if a larger instance would help here, but you could try of course.

.
If you sincerely want to debug this issue, try going through the steps in our docs;

For example, if you can share a thread dump, we can identify what the system is doing. :wink:

Thanks Martin

I still have my OpenRemote training wheels on so your help is much appreciated.

I think some of the Groovy rules we have written may be slowing things down so will revisit them.

I have gone from 2 to 4 cpus and 4 to 8 gb of memory. The start up time has gone from around 21 minutes to 12 minutes.

In either case once the system is up and running it is quite responsive. I note if the system is restarted ungracefully all bets are off. If I ‘down’ the containers before rebooting it seems to come up cleanly albeit still takes a very long time.

I’ll work through the guide you referred to.

Thanks again

Hey @Clint are you able to provide some startup logs of your manager container as that should inidicate which service is taking so long to start/initialise?

Hi @Rich - I will need to sanitise as they will have customer names etc. In the meantime it seems that the compiling of rules is what is holding things up. I then get a number of messages like this various realms:

manager-1 | 2025-04-14 16:56:26.210 WARNING [ContainerScheduledExecutor-4 ] ules.RulesEngine.RealmEngine-realm1.RULES : Rules firing took 150666ms
manager-1 | 2025-04-14 16:56:56.252 WARNING [ContainerScheduledExecutor-3 ] rules.RulesEngine.RealmEngine-realm2.RULES : Rules firing took 120135ms
manager-1 | 2025-04-14 16:56:56.632 WARNING [ContainerScheduledExecutor-4 ] remote.manager.rules.facade.AssetsFacade : Access to asset(s) not allowed for this rule engine scope RulesEngineId{scope=RealmRuleset, realm=‘realm3’, assetId=‘null’} for asset IDs: 4UknoBvh59OgSPHqRv9LZ9
manager-1 | 2025-04-14 16:56:56.648 WARNING [ContainerScheduledExecutor-4 ] Engine.RealmEngine-realm4.RULES : Rules firing took 30053ms

Also seeing this (truncated):
manager-1 | 2025-04-14 17:01:23.776 WARNING [ContainerScheduledExecutor-3 ] te.model.util.ValueUtil.MODEL_AND_VALUES : Failed to parse JSON
manager-1 | com.fasterxml.jackson.core.JsonParseException: Unrecognized token ‘Enable’: was expecting (JSON String, Number, Array, Object or token ‘null’, ‘true’ or ‘false’)
manager-1 | at [Source: REDACTED (StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION disabled); line: 1, column: 7]
manager-1 | at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2584)
manager-1 | at com.fasterxml.jackson.core.JsonParser._constructReadException(JsonParser.java:2610)
manager-1 | at com.fasterxml.jackson.core.JsonParser._constructReadException(JsonParser.java:2618)
manager-1 | at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:825)
manager-1 | at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._reportInvalidToken(ReaderBasedJsonParser.java:3017)
manager-1 | at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._handleOddValue(ReaderBasedJsonParser.java:2051)
manager-1 | at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:780)
manager-1 | at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:5018)
manager-1 | at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4921)
manager-1 | at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3868)
manager-1 | at org.openremote.model.util.ValueUtil.parse(ValueUtil.java:224)
manager-1 | at org.openremote.model.util.ValueUtil.parse(ValueUtil.java:236)
manager-1 | at org.openremote.model.util.ValueUtil.getValue(ValueUtil.java:372)
manager-1 | at org.openremote.model.util.ValueUtil.getValueCoerced(ValueUtil.java:392)
manager-1 | at org.openremote.manager.asset.AssetProcessingService.lambda$processAttributeEvent$13(AssetProcessingService.java:364)
manager-1 | at java.base/java.util.Optional.map(Optional.java:260)
manager-1 | at org.openremote.manager.asset.AssetProcessingService.lambda$processAttributeEvent$16(AssetProcessingService.java:362)
manager-1 | at org.openremote.container.persistence.PersistenceService.doReturningTransaction(PersistenceService.java:430)
manager-1 | at org.openremote.manager.asset.AssetProcessingService.lambda$processAttributeEvent$17(AssetProcessingService.java:350)
manager-1 | at org.openremote.manager.asset.AssetStorageService.withAssetLock(AssetStorageService.java:1154)
manager-1 | at org.openremote.manager.asset.AssetProcessingService.processAttributeEvent(AssetProcessingService.java:343)
manager-1 | at org.openremote.manager.asset.AssetProcessingService.lambda$configure$8(AssetProcessingService.java:293)
manager-1 | at io.micrometer.core.instrument.AbstractTimer.record(AbstractTimer.java:202)
manager-1 | at org.openremote.manager.asset.AssetProcessingService.lambda$configure$9(AssetProcessingService.java:293)
manager-1 | at org.apache.camel.support.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:65)
manager-1 | at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.doRun(RedeliveryErrorHandler.java:808)
manager-1 | at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.run(RedeliveryErrorHandler.java:714)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.doRun(DefaultReactiveExecutor.java:199)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.executeReactiveWork(DefaultReactiveExecutor.java:189)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.tryExecuteReactiveWork(DefaultReactiveExecutor.java:166)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:148)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutor.java:59)
manager-1 | at org.apache.camel.processor.Pipeline.process(Pipeline.java:163)
manager-1 | at org.apache.camel.impl.engine.CamelInternalProcessor.processNonTransacted(CamelInternalProcessor.java:347)
manager-1 | at org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInternalProcessor.java:323)
manager-1 | at org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:102)
manager-1 | at org.apache.camel.impl.engine.SharedCamelInternalProcessor.processNonTransacted(SharedCamelInternalProcessor.java:156)
manager-1 | at org.apache.camel.impl.engine.SharedCamelInternalProcessor.process(SharedCamelInternalProcessor.java:133)
manager-1 | at org.apache.camel.support.cache.DefaultProducerCache.asyncDispatchExchange(DefaultProducerCache.java:320)
manager-1 | at org.apache.camel.support.cache.DefaultProducerCache.lambda$doAsyncSendExchange$0(DefaultProducerCache.java:217)
manager-1 | at org.apache.camel.support.cache.DefaultProducerCache.doInAsyncProducer(DefaultProducerCache.java:281)
manager-1 | at org.apache.camel.support.cache.DefaultProducerCache.doAsyncSendExchange(DefaultProducerCache.java:226)
manager-1 | at org.apache.camel.support.cache.DefaultProducerCache.asyncSendExchange(DefaultProducerCache.java:207)
manager-1 | at org.apache.camel.impl.engine.DefaultProducerTemplate.lambda$asyncSendExchange$3(DefaultProducerTemplate.java:742)
manager-1 | at io.micrometer.core.instrument.internal.TimedCallable.call(TimedCallable.java:51)
manager-1 | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
manager-1 | at java.base/java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy.rejectedExecution(ThreadPoolExecutor.java:2053)
manager-1 | at java.base/java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:841)
manager-1 | at java.base/java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1376)
manager-1 | at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145)
manager-1 | at io.micrometer.core.instrument.internal.TimedExecutorService.submit(TimedExecutorService.java:95)
manager-1 | at org.apache.camel.impl.engine.DefaultProducerTemplate.asyncSendExchange(DefaultProducerTemplate.java:742)
manager-1 | at org.apache.camel.impl.engine.DefaultProducerTemplate.asyncSend(DefaultProducerTemplate.java:735)
manager-1 | at org.apache.camel.impl.engine.DefaultProducerTemplate.asyncSend(DefaultProducerTemplate.java:708)
manager-1 | at org.apache.camel.impl.engine.DefaultFluentProducerTemplate.asyncSend(DefaultFluentProducerTemplate.java:529)
manager-1 | at org.openremote.manager.asset.AssetProcessingService.sendAttributeEvent(AssetProcessingService.java:334)
manager-1 | at org.openremote.manager.rules.RulesEngine.lambda$new$0(RulesEngine.java:163)
manager-1 | at org.openremote.manager.rules.facade.AssetsFacade.dispatch(AssetsFacade.java:106)
manager-1 | at org.openremote.manager.rules.facade.AssetsFacade.dispatch(AssetsFacade.java:112)
manager-1 | at org.openremote.manager.rules.facade.AssetsFacade.dispatch(AssetsFacade.java:42)
manager-1 | at org.openremote.manager.rules.flow.NodeModel.lambda$static$18(NodeModel.java:219)
manager-1 | at org.openremote.manager.rules.FlowRulesBuilder.lambda$createRule$3(FlowRulesBuilder.java:106)
manager-1 | at org.jeasy.rules.core.DefaultRule.execute(DefaultRule.java:51)
manager-1 | at org.jeasy.rules.core.DefaultRulesEngine.doFire(DefaultRulesEngine.java:112)
manager-1 | at org.jeasy.rules.core.DefaultRulesEngine.fire(DefaultRulesEngine.java:70)
manager-1 | at org.openremote.manager.rules.RulesEngine.doFire(RulesEngine.java:516)
manager-1 | at io.micrometer.core.instrument.AbstractTimer.record(AbstractTimer.java:250)
manager-1 | at org.openremote.manager.rules.RulesEngine.fireAllDeployments(RulesEngine.java:481)
manager-1 | at org.openremote.manager.rules.RulesEngine.lambda$scheduleFire$3(RulesEngine.java:432)
manager-1 | at io.micrometer.core.instrument.AbstractTimer.record(AbstractTimer.java:250)
manager-1 | at io.micrometer.core.instrument.Timer.lambda$wrap$2(Timer.java:198)
manager-1 | at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
manager-1 | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
manager-1 | at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
manager-1 | at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
manager-1 | at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
manager-1 | at java.base/java.lang.Thread.run(Thread.java:1583)
manager-1 | 2025-04-14 17:01:24.086 WARNING [ContainerScheduledExecutor-3 ] ote.manager.asset.AssetProcessingService : Route ‘AttributeEvent-Processor’ error processing message: org.openremote.manager.asset.AssetProcessingException: INVALID_VALUE (Event processing failed unable to coerce value into the correct value type: realm=null, attribute=AttributeRef{id=‘7RrKDyudM2CtBMOaOnsfsN’, name=‘Messages’}, event value type=class java.lang.String, attribute value type=class [Lorg.openremote.model.value.ValueType$StringMap;)
manager-1 | 2025-04-14 17:01:24.274 INFO [ContainerScheduledExecutor-4 ] s.RulesEngine.RealmRuleset-1396327.RULES : Current time (UTC): 2025-04-14T15:01:24.268085237
manager-1 | 2025-04-14 17:01:24.278 INFO [ContainerScheduledExecutor-4 ] s.RulesEngine.RealmRuleset-1396327.RULES : Scheduled time match: false
manager-1 | 2025-04-14 17:01:24.284 INFO [ContainerScheduledExecutor-4 ] s.RulesEngine.RealmRuleset-1396327.RULES : Not the scheduled time: 2025-04-14T15:01:24.268085237
manager-1 | 2025-04-14 17:01:24.348 WARNING [ContainerScheduledExecutor-3 ] esEngine.RealmEngine-devereauxfarm.RULES : Rules firing took 148586ms
manager-1 | 2025-04-14 17:01:24.417 INFO [ContainerScheduledExecutor-3 ] MyLogger : Press value: idle
manager-1 | 2025-04-14 17:01:24.419 WARNING [ContainerScheduledExecutor-3 ] MyLogger : Press value is not ‘short’
manager-1 | 2025-04-14 17:01:24.508 WARNING [ContainerScheduledExecutor-3 ] org.jeasy.rules.core.DefaultRulesEngine : No rules registered! Nothing to apply
manager-1 | 2025-04-14 17:01:24.511 WARNING [ContainerScheduledExecutor-4 ] .rules.RulesEngine.RealmEngine-kai.RULES : Rules firing took 835ms
manager-1 | 2025-04-14 17:01:24.540 WARNING [ContainerScheduledExecutor-4 ] manager.energy.EnergyOptimisationService : Optimisation ‘51jSqyfNwcC5iJ5M9nlizB’: Expected exactly one ElectricitySupplierAsset asset with a ‘tariffImport’ attribute but found: 0
manager-1 | 2025-04-14 17:01:24.561 INFO [ContainerScheduledExecutor-4 ] DecimalToIEEE754Logger : Checking if rule should execute
manager-1 | 2025-04-14 17:01:24.722 WARNING [ContainerExecutor-10 ] te.model.util.ValueUtil.MODEL_AND_VALUES : Failed to parse JSON
manager-1 | com.fasterxml.jackson.core.JsonParseException: Unexpected character (‘,’ (code 44)): Expected space separating root-level values
manager-1 | at [Source: REDACTED (StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION disabled); line: 1, column: 11]
manager-1 | at com.fasterxml.jackson.core.JsonParser._constructReadException(JsonParser.java:2660)
manager-1 | at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:741)
manager-1 | at com.fasterxml.jackson.core.base.ParserMinimalBase._reportMissingRootWS(ParserMinimalBase.java:659)
manager-1 | at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._verifyRootSpace(ReaderBasedJsonParser.java:1800)
manager-1 | at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._parseFloat(ReaderBasedJsonParser.java:1461)
manager-1 | at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._parseUnsignedNumber(ReaderBasedJsonParser.java:1389)
manager-1 | at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:777)
manager-1 | at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:5018)
manager-1 | at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4921)
manager-1 | at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3868)
manager-1 | at org.openremote.model.util.ValueUtil.parse(ValueUtil.java:224)
manager-1 | at org.openremote.model.util.ValueUtil.parse(ValueUtil.java:236)
manager-1 | at org.openremote.model.util.ValueUtil.getValue(ValueUtil.java:372)
manager-1 | at org.openremote.model.util.ValueUtil.getValueCoerced(ValueUtil.java:392)
manager-1 | at org.openremote.manager.asset.AssetProcessingService.lambda$processAttributeEvent$13(AssetProcessingService.java:364)
manager-1 | at java.base/java.util.Optional.map(Optional.java:260)
manager-1 | at org.openremote.manager.asset.AssetProcessingService.lambda$processAttributeEvent$16(AssetProcessingService.java:362)
manager-1 | at org.openremote.container.persistence.PersistenceService.doReturningTransaction(PersistenceService.java:430)
manager-1 | at org.openremote.manager.asset.AssetProcessingService.lambda$processAttributeEvent$17(AssetProcessingService.java:350)
manager-1 | at org.openremote.manager.asset.AssetStorageService.withAssetLock(AssetStorageService.java:1154)
manager-1 | at org.openremote.manager.asset.AssetProcessingService.processAttributeEvent(AssetProcessingService.java:343)
manager-1 | at org.openremote.manager.asset.AssetProcessingService.lambda$configure$8(AssetProcessingService.java:293)
manager-1 | at io.micrometer.core.instrument.AbstractTimer.record(AbstractTimer.java:202)
manager-1 | at org.openremote.manager.asset.AssetProcessingService.lambda$configure$9(AssetProcessingService.java:293)
manager-1 | at org.apache.camel.support.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:65)

and this (truncated):
manager-1 | 2025-04-14 17:01:23.776 WARNING [ContainerScheduledExecutor-3 ] te.model.util.ValueUtil.MODEL_AND_VALUES : Failed to parse JSON
manager-1 | com.fasterxml.jackson.core.JsonParseException: Unrecognized token ‘Enable’: was expecting (JSON String, Number, Array, Object or token ‘null’, ‘true’ or ‘false’)
manager-1 | at [Source: REDACTED (StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION disabled); line: 1, column: 7]
manager-1 | at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2584)
manager-1 | at com.fasterxml.jackson.core.JsonParser._constructReadException(JsonParser.java:2610)
manager-1 | at com.fasterxml.jackson.core.JsonParser._constructReadException(JsonParser.java:2618)
manager-1 | at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:825)
manager-1 | at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._reportInvalidToken(ReaderBasedJsonParser.java:3017)
manager-1 | at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._handleOddValue(ReaderBasedJsonParser.java:2051)
manager-1 | at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:780)
manager-1 | at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:5018)
manager-1 | at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4921)
manager-1 | at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3868)
manager-1 | at org.openremote.model.util.ValueUtil.parse(ValueUtil.java:224)
manager-1 | at org.openremote.model.util.ValueUtil.parse(ValueUtil.java:236)
manager-1 | at org.openremote.model.util.ValueUtil.getValue(ValueUtil.java:372)
manager-1 | at org.openremote.model.util.ValueUtil.getValueCoerced(ValueUtil.java:392)
manager-1 | at org.openremote.manager.asset.AssetProcessingService.lambda$processAttributeEvent$13(AssetProcessingService.java:364)
manager-1 | at java.base/java.util.Optional.map(Optional.java:260)
manager-1 | at org.openremote.manager.asset.AssetProcessingService.lambda$processAttributeEvent$16(AssetProcessingService.java:362)
manager-1 | at org.openremote.container.persistence.PersistenceService.doReturningTransaction(PersistenceService.java:430)
manager-1 | at org.openremote.manager.asset.AssetProcessingService.lambda$processAttributeEvent$17(AssetProcessingService.java:350)
manager-1 | at org.openremote.manager.asset.AssetStorageService.withAssetLock(AssetStorageService.java:1154)
manager-1 | at org.openremote.manager.asset.AssetProcessingService.processAttributeEvent(AssetProcessingService.java:343)
manager-1 | at org.openremote.manager.asset.AssetProcessingService.lambda$configure$8(AssetProcessingService.java:293)
manager-1 | at io.micrometer.core.instrument.AbstractTimer.record(AbstractTimer.java:202)
manager-1 | at org.openremote.manager.asset.AssetProcessingService.lambda$configure$9(AssetProcessingService.java:293)
manager-1 | at org.apache.camel.support.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:65)
manager-1 | at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.doRun(RedeliveryErrorHandler.java:808)
manager-1 | at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.run(RedeliveryErrorHandler.java:714)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.doRun(DefaultReactiveExecutor.java:199)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.executeReactiveWork(DefaultReactiveExecutor.java:189)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.tryExecuteReactiveWork(DefaultReactiveExecutor.java:166)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:148)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutor.java:59)
manager-1 | at org.apache.camel.processor.Pipeline.process(Pipeline.java:163)
manager-1 | at org.apache.camel.impl.engine.CamelInternalProcessor.processNonTransacted(CamelInternalProcessor.java:347)
manager-1 | at org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInternalProcessor.java:323)
manager-1 | at org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:102)
manager-1 | at org.apache.camel.impl.engine.SharedCamelInternalProcessor.processNonTransacted(SharedCamelInternalProcessor.java:156)
manager-1 | at org.apache.camel.impl.engine.SharedCamelInternalProcessor.process(SharedCamelInternalProcessor.java:133)
manager-1 | at org.apache.camel.support.cache.DefaultProducerCache.asyncDispatchExchange(DefaultProducerCache.java:320)
manager-1 | at org.apache.camel.support.cache.DefaultProducerCache.lambda$doAsyncSendExchange$0(DefaultProducerCache.java:217)
manager-1 | at org.apache.camel.support.cache.DefaultProducerCache.doInAsyncProducer(DefaultProducerCache.java:281)
manager-1 | at org.apache.camel.support.cache.DefaultProducerCache.doAsyncSendExchange(DefaultProducerCache.java:226)
manager-1 | at org.apache.camel.support.cache.DefaultProducerCache.asyncSendExchange(DefaultProducerCache.java:207)
manager-1 | at org.apache.camel.impl.engine.DefaultProducerTemplate.lambda$asyncSendExchange$3(DefaultProducerTemplate.java:742)
manager-1 | at io.micrometer.core.instrument.internal.TimedCallable.call(TimedCallable.java:51)
manager-1 | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
manager-1 | at java.base/java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy.rejectedExecution(ThreadPoolExecutor.java:2053)
manager-1 | at java.base/java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:841)
manager-1 | at java.base/java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1376)
manager-1 | at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145)
manager-1 | at io.micrometer.core.instrument.internal.TimedExecutorService.submit(TimedExecutorService.java:95)
manager-1 | at org.apache.camel.impl.engine.DefaultProducerTemplate.asyncSendExchange(DefaultProducerTemplate.java:742)
manager-1 | at org.apache.camel.impl.engine.DefaultProducerTemplate.asyncSend(DefaultProducerTemplate.java:735)
manager-1 | at org.apache.camel.impl.engine.DefaultProducerTemplate.asyncSend(DefaultProducerTemplate.java:708)
manager-1 | at org.apache.camel.impl.engine.DefaultFluentProducerTemplate.asyncSend(DefaultFluentProducerTemplate.java:529)
manager-1 | at org.openremote.manager.asset.AssetProcessingService.sendAttributeEvent(AssetProcessingService.java:334)
manager-1 | at org.openremote.manager.rules.RulesEngine.lambda$new$0(RulesEngine.java:163)
manager-1 | at org.openremote.manager.rules.facade.AssetsFacade.dispatch(AssetsFacade.java:106)
manager-1 | at org.openremote.manager.rules.facade.AssetsFacade.dispatch(AssetsFacade.java:112)
manager-1 | at org.openremote.manager.rules.facade.AssetsFacade.dispatch(AssetsFacade.java:42)
manager-1 | at org.openremote.manager.rules.flow.NodeModel.lambda$static$18(NodeModel.java:219)
manager-1 | at org.openremote.manager.rules.FlowRulesBuilder.lambda$createRule$3(FlowRulesBuilder.java:106)
manager-1 | at org.jeasy.rules.core.DefaultRule.execute(DefaultRule.java:51)
manager-1 | at org.jeasy.rules.core.DefaultRulesEngine.doFire(DefaultRulesEngine.java:112)
manager-1 | at org.jeasy.rules.core.DefaultRulesEngine.fire(DefaultRulesEngine.java:70)
manager-1 | at org.openremote.manager.rules.RulesEngine.doFire(RulesEngine.java:516)
manager-1 | at io.micrometer.core.instrument.AbstractTimer.record(AbstractTimer.java:250)
manager-1 | at org.openremote.manager.rules.RulesEngine.fireAllDeployments(RulesEngine.java:481)
manager-1 | at org.openremote.manager.rules.RulesEngine.lambda$scheduleFire$3(RulesEngine.java:432)
manager-1 | at io.micrometer.core.instrument.AbstractTimer.record(AbstractTimer.java:250)
manager-1 | at io.micrometer.core.instrument.Timer.lambda$wrap$2(Timer.java:198)
manager-1 | at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
manager-1 | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
manager-1 | at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
manager-1 | at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
manager-1 | at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
manager-1 | at java.base/java.lang.Thread.run(Thread.java:1583)
manager-1 | 2025-04-14 17:01:24.086 WARNING [ContainerScheduledExecutor-3 ] ote.manager.asset.AssetProcessingService : Route ‘AttributeEvent-Processor’ error processing message: org.openremote.manager.asset.AssetProcessingException: INVALID_VALUE (Event processing failed unable to coerce value into the correct value type: realm=null, attribute=AttributeRef{id=‘7RrKDyudM2CtBMOaOnsfsN’, name=‘Messages’}, event value type=class java.lang.String, attribute value type=class [Lorg.openremote.model.value.ValueType$StringMap;)
manager-1 | 2025-04-14 17:01:24.274 INFO [ContainerScheduledExecutor-4 ] s.RulesEngine.RealmRuleset-1396327.RULES : Current time (UTC): 2025-04-14T15:01:24.268085237
manager-1 | 2025-04-14 17:01:24.278 INFO [ContainerScheduledExecutor-4 ] s.RulesEngine.RealmRuleset-1396327.RULES : Scheduled time match: false
manager-1 | 2025-04-14 17:01:24.284 INFO [ContainerScheduledExecutor-4 ] s.RulesEngine.RealmRuleset-1396327.RULES : Not the scheduled time: 2025-04-14T15:01:24.268085237
manager-1 | 2025-04-14 17:01:24.348 WARNING [ContainerScheduledExecutor-3 ] esEngine.RealmEngine-devereauxfarm.RULES : Rules firing took 148586ms
manager-1 | 2025-04-14 17:01:24.417 INFO [ContainerScheduledExecutor-3 ] MyLogger : Press value: idle
manager-1 | 2025-04-14 17:01:24.419 WARNING [ContainerScheduledExecutor-3 ] MyLogger : Press value is not ‘short’
manager-1 | 2025-04-14 17:01:24.508 WARNING [ContainerScheduledExecutor-3 ] org.jeasy.rules.core.DefaultRulesEngine : No rules registered! Nothing to apply
manager-1 | 2025-04-14 17:01:24.511 WARNING [ContainerScheduledExecutor-4 ] .rules.RulesEngine.RealmEngine-kai.RULES : Rules firing took 835ms
manager-1 | 2025-04-14 17:01:24.540 WARNING [ContainerScheduledExecutor-4 ] manager.energy.EnergyOptimisationService : Optimisation ‘51jSqyfNwcC5iJ5M9nlizB’: Expected exactly one ElectricitySupplierAsset asset with a ‘tariffImport’ attribute but found: 0
manager-1 | 2025-04-14 17:01:24.561 INFO [ContainerScheduledExecutor-4 ] DecimalToIEEE754Logger : Checking if rule should execute
manager-1 | 2025-04-14 17:01:24.722 WARNING [ContainerExecutor-10 ] te.model.util.ValueUtil.MODEL_AND_VALUES : Failed to parse JSON
manager-1 | com.fasterxml.jackson.core.JsonParseException: Unexpected character (‘,’ (code 44)): Expected space separating root-level values
manager-1 | at [Source: REDACTED (StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION disabled); line: 1, column: 11]
manager-1 | at com.fasterxml.jackson.core.JsonParser._constructReadException(JsonParser.java:2660)
manager-1 | at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:741)
manager-1 | at com.fasterxml.jackson.core.base.ParserMinimalBase._reportMissingRootWS(ParserMinimalBase.java:659)
manager-1 | at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._verifyRootSpace(ReaderBasedJsonParser.java:1800)
manager-1 | at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._parseFloat(ReaderBasedJsonParser.java:1461)
manager-1 | at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._parseUnsignedNumber(ReaderBasedJsonParser.java:1389)
manager-1 | at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:777)
manager-1 | at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:5018)
manager-1 | at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4921)
manager-1 | at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3868)
manager-1 | at org.openremote.model.util.ValueUtil.parse(ValueUtil.java:224)
manager-1 | at org.openremote.model.util.ValueUtil.parse(ValueUtil.java:236)
manager-1 | at org.openremote.model.util.ValueUtil.getValue(ValueUtil.java:372)
manager-1 | at org.openremote.model.util.ValueUtil.getValueCoerced(ValueUtil.java:392)
manager-1 | at org.openremote.manager.asset.AssetProcessingService.lambda$processAttributeEvent$13(AssetProcessingService.java:364)
manager-1 | at java.base/java.util.Optional.map(Optional.java:260)
manager-1 | at org.openremote.manager.asset.AssetProcessingService.lambda$processAttributeEvent$16(AssetProcessingService.java:362)
manager-1 | at org.openremote.container.persistence.PersistenceService.doReturningTransaction(PersistenceService.java:430)
manager-1 | at org.openremote.manager.asset.AssetProcessingService.lambda$processAttributeEvent$17(AssetProcessingService.java:350)
manager-1 | at org.openremote.manager.asset.AssetStorageService.withAssetLock(AssetStorageService.java:1154)
manager-1 | at org.openremote.manager.asset.AssetProcessingService.processAttributeEvent(AssetProcessingService.java:343)
manager-1 | at org.openremote.manager.asset.AssetProcessingService.lambda$configure$8(AssetProcessingService.java:293)
manager-1 | at io.micrometer.core.instrument.AbstractTimer.record(AbstractTimer.java:202)
manager-1 | at org.openremote.manager.asset.AssetProcessingService.lambda$configure$9(AssetProcessingService.java:293)
manager-1 | at org.apache.camel.support.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:65)
manager-1 | at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.doRun(RedeliveryErrorHandler.java:808)
manager-1 | at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.run(RedeliveryErrorHandler.java:714)
manager-1 | at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.doRun(DefaultReactiveExecutor.java:199)

Hi @Rich

Please see attached log file. Hopefully you can spot why it is taking so long to start/initialise.

openremote.log.txt (1.7 MB)