New version released 3.4.0-BETA3
As usual, remove the binding, then readd it from the marketplace.
You may have to restart openHAB if you have the error " Instance is not an SignalActions class." when using actions.
Compatibility with openHAB 3.4.x and 4.0
A new action to send images.
Should be good now (I hope). Feedback welcome.
Sorry for those waiting for something relating to SQLite error, but my tests with a replacement h2 database didn’t work at all. There are too many differences… I think we are stuck with sqlite. I changed one or two line of code about the way of initializing sqlite, but I don’t have high hope. Worth a try maybe, and as usual, feedback welcome.
It is now possible to use an action to send image. See documentation link in open post. “Feedback welcome”
Thanks for your effort to port it to OH4.
I tried to get it running, but I also encounter an SQLite issue now:
20:52:24.131 [WARN ] [ommon.WrappedScheduledExecutorService] - Scheduled runnable ended with an exception:
java.lang.UnsatisfiedLinkError: 'void org.sqlite.core.NativeDB._open_utf8(byte[], int)'
at org.sqlite.core.NativeDB._open_utf8(Native Method) ~[?:?]
at org.sqlite.core.NativeDB._open(NativeDB.java:75) ~[?:?]
at org.sqlite.core.DB.open(DB.java:216) ~[?:?]
at org.sqlite.SQLiteConnection.open(SQLiteConnection.java:285) ~[?:?]
at org.sqlite.SQLiteConnection.<init>(SQLiteConnection.java:65) ~[?:?]
at org.sqlite.jdbc3.JDBC3Connection.<init>(JDBC3Connection.java:28) ~[?:?]
at org.sqlite.jdbc4.JDBC4Connection.<init>(JDBC4Connection.java:19) ~[?:?]
at org.sqlite.JDBC.createConnection(JDBC.java:104) ~[?:?]
at org.sqlite.SQLiteDataSource.getConnection(SQLiteDataSource.java:440) ~[?:?]
at org.sqlite.SQLiteDataSource.getConnection(SQLiteDataSource.java:432) ~[?:?]
at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) ~[?:?]
at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) ~[?:?]
at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) ~[?:?]
at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ~[?:?]
at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:100) ~[?:?]
at com.zaxxer.hikari.HikariDataSource.<init>(HikariDataSource.java:81) ~[?:?]
at org.asamk.signal.manager.storage.Database.getHikariDataSource(Database.java:103) ~[?:?]
at org.asamk.signal.manager.storage.Database.initDatabase(Database.java:32) ~[?:?]
at org.asamk.signal.manager.storage.AccountDatabase.init(AccountDatabase.java:32) ~[?:?]
at org.asamk.signal.manager.storage.SignalAccount.lambda$48(SignalAccount.java:1114) ~[?:?]
at org.asamk.signal.manager.storage.SignalAccount.getOrCreate(SignalAccount.java:1523) ~[?:?]
at org.asamk.signal.manager.storage.SignalAccount.getAccountDatabase(SignalAccount.java:1112) ~[?:?]
at org.asamk.signal.manager.storage.SignalAccount.lambda$38(SignalAccount.java:1087) ~[?:?]
at org.asamk.signal.manager.storage.SignalAccount.getOrCreate(SignalAccount.java:1523) ~[?:?]
at org.asamk.signal.manager.storage.SignalAccount.getRecipientStore(SignalAccount.java:1086) ~[?:?]
at org.asamk.signal.manager.storage.SignalAccount.getProfileStore(SignalAccount.java:1091) ~[?:?]
at org.asamk.signal.manager.storage.SignalAccount.migrateLegacyConfigs(SignalAccount.java:335) ~[?:?]
at org.asamk.signal.manager.storage.SignalAccount.load(SignalAccount.java:182) ~[?:?]
at org.asamk.signal.manager.SignalAccountFiles.initManager(SignalAccountFiles.java:92) ~[?:?]
at org.asamk.signal.manager.SignalAccountFiles.initManager(SignalAccountFiles.java:80) ~[?:?]
at org.openhab.binding.signal.internal.protocol.SignalService.start(SignalService.java:146) ~[?:?]
at org.openhab.binding.signal.internal.handler.SignalBridgeHandler.checkAndStartServiceIfNeeded(SignalBridgeHandler.java:161) ~[?:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[?:?]
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) ~[?:?]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
at java.lang.Thread.run(Thread.java:833) ~[?:?]
Thanks for your update, but unfortunately also on my end there is no improvement.
OH 3.4.2 with openHABian on a Pi4, dedicated signal account with landline number
I deleted all Signal things, removed the binding, deleted folder userdata/signal, re-started openHAB with cleared cache, installed the updated binding from marketplace, and when I tried to add a new signalaccount thing I got these entries in the logs:
2023-04-07 09:54:47.326 [ERROR] [com.zaxxer.hikari.pool.HikariPool ] - HikariPool-1 - Exception during pool initialization.
java.sql.SQLException: Error opening connection
at org.sqlite.SQLiteConnection.open(SQLiteConnection.java:281) ~[?:?]
at org.sqlite.SQLiteConnection.<init>(SQLiteConnection.java:65) ~[?:?]
at org.sqlite.jdbc3.JDBC3Connection.<init>(JDBC3Connection.java:28) ~[?:?]
at org.sqlite.jdbc4.JDBC4Connection.<init>(JDBC4Connection.java:19) ~[?:?]
at org.sqlite.JDBC.createConnection(JDBC.java:104) ~[?:?]
at org.sqlite.SQLiteDataSource.getConnection(SQLiteDataSource.java:440) ~[?:?]
at org.sqlite.SQLiteDataSource.getConnection(SQLiteDataSource.java:432) ~[?:?]
at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) ~[?:?]
at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) ~[?:?]
at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) ~[?:?]
at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ~[?:?]
at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:100) ~[?:?]
at com.zaxxer.hikari.HikariDataSource.<init>(HikariDataSource.java:81) ~[?:?]
at org.asamk.signal.manager.storage.Database.getHikariDataSource(Database.java:103) ~[?:?]
at org.asamk.signal.manager.storage.Database.initDatabase(Database.java:32) ~[?:?]
at org.asamk.signal.manager.storage.AccountDatabase.init(AccountDatabase.java:32) ~[?:?]
at org.asamk.signal.manager.storage.SignalAccount.lambda$48(SignalAccount.java:1114) ~[?:?]
at org.asamk.signal.manager.storage.SignalAccount.getOrCreate(SignalAccount.java:1523) ~[?:?]
at org.asamk.signal.manager.storage.SignalAccount.getAccountDatabase(SignalAccount.java:1112) ~[?:?]
at org.asamk.signal.manager.storage.SignalAccount.lambda$38(SignalAccount.java:1087) ~[?:?]
at org.asamk.signal.manager.storage.SignalAccount.getOrCreate(SignalAccount.java:1523) ~[?:?]
at org.asamk.signal.manager.storage.SignalAccount.getRecipientStore(SignalAccount.java:1086) ~[?:?]
at org.asamk.signal.manager.storage.SignalAccount.getProfileStore(SignalAccount.java:1091) ~[?:?]
at org.asamk.signal.manager.storage.SignalAccount.migrateLegacyConfigs(SignalAccount.java:335) ~[?:?]
at org.asamk.signal.manager.storage.SignalAccount.create(SignalAccount.java:221) ~[?:?]
at org.asamk.signal.manager.SignalAccountFiles.initRegistrationManager(SignalAccountFiles.java:154) ~[?:?]
at org.asamk.signal.manager.SignalAccountFiles.initRegistrationManager(SignalAccountFiles.java:140) ~[?:?]
at org.openhab.binding.signal.internal.protocol.SignalService.registerMain(SignalService.java:230) ~[?:?]
at org.openhab.binding.signal.internal.protocol.SignalService.start(SignalService.java:151) ~[?:?]
at org.openhab.binding.signal.internal.handler.SignalBridgeHandler.checkAndStartServiceIfNeeded(SignalBridgeHandler.java:161) ~[?:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) [?:?]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) [?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
at java.lang.Thread.run(Thread.java:829) [?:?]
Caused by: java.lang.Exception: No native library found for os.name=Linux, os.arch=aarch64, paths=[/org/sqlite/native/Linux/aarch64:/var/lib/openhab/tmp/lib]
at org.sqlite.SQLiteJDBCLoader.loadSQLiteNativeLibrary(SQLiteJDBCLoader.java:375) ~[?:?]
at org.sqlite.SQLiteJDBCLoader.initialize(SQLiteJDBCLoader.java:68) ~[?:?]
at org.sqlite.core.NativeDB.load(NativeDB.java:63) ~[?:?]
at org.sqlite.SQLiteConnection.open(SQLiteConnection.java:278) ~[?:?]
... 35 more
2023-04-07 09:54:47.362 [WARN ] [mmon.WrappedScheduledExecutorService] - Scheduled runnable ended with an exception:
com.zaxxer.hikari.pool.HikariPool$PoolInitializationException: Failed to initialize pool: Error opening connection
at com.zaxxer.hikari.pool.HikariPool.throwPoolInitializationException(HikariPool.java:596) ~[?:?]
at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:582) ~[?:?]
at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:100) ~[?:?]
at com.zaxxer.hikari.HikariDataSource.<init>(HikariDataSource.java:81) ~[?:?]
at org.asamk.signal.manager.storage.Database.getHikariDataSource(Database.java:103) ~[?:?]
at org.asamk.signal.manager.storage.Database.initDatabase(Database.java:32) ~[?:?]
at org.asamk.signal.manager.storage.AccountDatabase.init(AccountDatabase.java:32) ~[?:?]
at org.asamk.signal.manager.storage.SignalAccount.lambda$48(SignalAccount.java:1114) ~[?:?]
at org.asamk.signal.manager.storage.SignalAccount.getOrCreate(SignalAccount.java:1523) ~[?:?]
at org.asamk.signal.manager.storage.SignalAccount.getAccountDatabase(SignalAccount.java:1112) ~[?:?]
at org.asamk.signal.manager.storage.SignalAccount.lambda$38(SignalAccount.java:1087) ~[?:?]
at org.asamk.signal.manager.storage.SignalAccount.getOrCreate(SignalAccount.java:1523) ~[?:?]
at org.asamk.signal.manager.storage.SignalAccount.getRecipientStore(SignalAccount.java:1086) ~[?:?]
at org.asamk.signal.manager.storage.SignalAccount.getProfileStore(SignalAccount.java:1091) ~[?:?]
at org.asamk.signal.manager.storage.SignalAccount.migrateLegacyConfigs(SignalAccount.java:335) ~[?:?]
at org.asamk.signal.manager.storage.SignalAccount.create(SignalAccount.java:221) ~[?:?]
at org.asamk.signal.manager.SignalAccountFiles.initRegistrationManager(SignalAccountFiles.java:154) ~[?:?]
at org.asamk.signal.manager.SignalAccountFiles.initRegistrationManager(SignalAccountFiles.java:140) ~[?:?]
at org.openhab.binding.signal.internal.protocol.SignalService.registerMain(SignalService.java:230) ~[?:?]
at org.openhab.binding.signal.internal.protocol.SignalService.start(SignalService.java:151) ~[?:?]
at org.openhab.binding.signal.internal.handler.SignalBridgeHandler.checkAndStartServiceIfNeeded(SignalBridgeHandler.java:161) ~[?:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) ~[?:?]
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) ~[?:?]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
at java.lang.Thread.run(Thread.java:829) [?:?]
Caused by: java.sql.SQLException: Error opening connection
at org.sqlite.SQLiteConnection.open(SQLiteConnection.java:281) ~[?:?]
at org.sqlite.SQLiteConnection.<init>(SQLiteConnection.java:65) ~[?:?]
at org.sqlite.jdbc3.JDBC3Connection.<init>(JDBC3Connection.java:28) ~[?:?]
at org.sqlite.jdbc4.JDBC4Connection.<init>(JDBC4Connection.java:19) ~[?:?]
at org.sqlite.JDBC.createConnection(JDBC.java:104) ~[?:?]
at org.sqlite.SQLiteDataSource.getConnection(SQLiteDataSource.java:440) ~[?:?]
at org.sqlite.SQLiteDataSource.getConnection(SQLiteDataSource.java:432) ~[?:?]
at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) ~[?:?]
at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) ~[?:?]
at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) ~[?:?]
at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ~[?:?]
... 25 more
Caused by: java.lang.Exception: No native library found for os.name=Linux, os.arch=aarch64, paths=[/org/sqlite/native/Linux/aarch64:/var/lib/openhab/tmp/lib]
at org.sqlite.SQLiteJDBCLoader.loadSQLiteNativeLibrary(SQLiteJDBCLoader.java:375) ~[?:?]
at org.sqlite.SQLiteJDBCLoader.initialize(SQLiteJDBCLoader.java:68) ~[?:?]
at org.sqlite.core.NativeDB.load(NativeDB.java:63) ~[?:?]
at org.sqlite.SQLiteConnection.open(SQLiteConnection.java:278) ~[?:?]
at org.sqlite.SQLiteConnection.<init>(SQLiteConnection.java:65) ~[?:?]
at org.sqlite.jdbc3.JDBC3Connection.<init>(JDBC3Connection.java:28) ~[?:?]
at org.sqlite.jdbc4.JDBC4Connection.<init>(JDBC4Connection.java:19) ~[?:?]
at org.sqlite.JDBC.createConnection(JDBC.java:104) ~[?:?]
at org.sqlite.SQLiteDataSource.getConnection(SQLiteDataSource.java:440) ~[?:?]
at org.sqlite.SQLiteDataSource.getConnection(SQLiteDataSource.java:432) ~[?:?]
at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) ~[?:?]
at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) ~[?:?]
at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) ~[?:?]
at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ~[?:?]
... 25 more
But I can’t see any entry in the log. I stopped and started it several time, but nothing in the log. That’s why I don’t know if it’s really running.
However, after I saw the sqlite error on the signal binding, I installed the sqlite-jdbc from the marketplace (version 4.0.0.M). That seems to work without any issues.
When I find time, I will try to get the signal binding running on a clean installation of openhabian…
Sorry, I was not clear. You don’t have to do anything. Putting the jar in the addon folder is sufficient to activate it : the sqlite service then “exports” its capability (but do nothing on its own), and any other bundle (like signal) can “import” this to use it.
Theoretically it is not needed for the Signal binding, because it embeds directly in its jar every libraries it needs (including sqlite). But in your case this “direct” embedded version doesn’t seem to work.
This is why I hope (not a strong hope) that adding the sqlite jar bundle in the modular osgi way could unlock the Signal binding as a side effect.
Today I’ve changed my image based notifications from telegram to signal.
It works fine, only the combination of an image with additional text is a small disadvantage. So I have to send two messages.
I updated the binding to the latest Version and tinkered around with sending images a bit.
Now the problem occurred that every time I try to send an Image from a rule uploaded to the rules folder the Image doesn’t get send an instead I get the following error in the log:
'sendSignalImage' is not a member of 'org.openhab.core.thing.binding.ThingActions';
If I write the same rule in the web UI editor it does work fine and the image does get send. Are there maybe different interpreters used for uploaded and web created rules?
I would very much appreciate your help, thanks in advance.
Paul
Hi, did you have any success in the end? I’m stuck with the same problem…
edit: got it running by copying /org/sqlite/native/Linux/armv7/libsqlitejdbc.so to /var/lib/openhab/tmp/lib (on Openhabian with a Raspi 4) the file in “aarch64” seems to be in an incompatible binary format that can be read (ldd says “not a dynamic executable”)
But now I am running into “rate limit” problems, can’t register my number :-/
Thanks for your test !
I made a new release (BETA 4) with updated signal and signal-cli libraries, I tested it on a clean openhabian, and it seems to work, without installing anything else. I really don’t understand why it works sometimes and sometimes not. Anyway I will make a note with your workaround on the open post.
Two things here :
Sorry, I left a bug in the last BETA 3 release, and sms verification was not available anymore (forcing vocal validation)
according to signal-cli forum, vocal validation is broken. Error message is “rate limit”, because they forbid to use vocal validation without trying sms validation first. In the discussion linked, a workaround is to try sms first, wait a minute, then vocal. I tried to implement this in the BETA4 release, but I didn’t test. Feedback welcome.
Hello,
Strange error. I wrote a rule file and this works for me :
rule "testwithrule"
when
Item NewItem received command
then
getActions("signal","signal:signalaccountbridge:bab72f1f7d").sendSignal("+33612345678", "Test signal !")
end
I honnestly don’t know what to do to help you in this case…
I am sorry, no good news. Now i got an Communication_error “NonSuccessfulResponseCodeException - [422] Bad response: 422”
How can i check that the phonenummer is or is not registered yet at signal. Maybe one of my several tests was succesful but not noticed be me. And if so, how can i remove my registration?
You wrote that now are two steps necessary. Frist try with SMS which fails and second try with vocal response. Do i need for the second step a new captcha link?
So, now i got it. Don´t ask why or how.
Maybe it would be an advantage if the registration manual would be a little more specific with more details.
I tried a lot and now registration is completed.
Thank you for creating this binding and the help.