GE Concord Alarm Panel Binding

Hello -
Can one of those that have succeeded in getting this to work please help? I am not having much luck. Here is what I did. By the way I am using OH 2.5 but not using the OH built in MQTT Broker

  1. Connected Automation Module to Concord 4 Panel
  2. Connected Automation Module to Raspberry Pi (same Pi that has Openhab running on it) using RS232 serial->USB cable
  3. Used eclipse to create a concord4pi.jar file (using everything in the concord4pi folder) from your code and uploaded to my openhab2-addons folder
  4. Installed mosquito broker on same Raspberry Pi
  5. Here is my Config for the broker and thingā€¦
    Bridge mqtt:broker:mosquittobroker [ host=ā€œ192.xxx.xxx.xxxā€, secure=false ]
    {
    Thing topic alarm ā€œAlarm Stateā€ @ ā€œInterlogixā€ {
    Channels:
    Type string : alarmstate [ stateTopic=ā€œconcord4pi/areapartition/0100/armingLevel/textā€]
    }
    }
    Item:
    String AlarmStateText ā€œAlarm State Text [%s]ā€ {channel=ā€œmqtt:topic:mosquittobroker:alarm:alarmstateā€ }

Issues encountered:

  1. I am getting an error on the Alarm Panel (I had only one item and now have two with the Automation Module. The error is 'System Bus Failure AM1. I guess this was because I powered up the alarm before connecting the Raspberry Pi. Now I cant get rid of the error
  2. Is my MQTT config and topic correct?
  3. Is it possible to upload the jar file? Atleast that way I can verify that I am using one that is working
    Thanks!

I have pretty much the same setup as you and it is working for me. I am using the MQTT binding (easier to set up the channels in PaperUI), but not the server. A few comments:

  • The System Bus Failure indicates that your Automation module is correctly connected to the alarm board. This is a good thing. :wink: With the Concord 4 panel, when the Automation module is connected, it must constantly send ACK messages for every message that is sent to the automation module, or you will get this automation bus failure message. Once you get the Concord4pi software working properly, it will handle the ACKs for you and the bus failure errors will go away.
  • I donā€™t know which version you downloaded, but the one that is in the master branch of GitHub now uses the following topic path: /concord4pi/areapartition/[AreaPartitionNumber]/ā€¦
    Note: normally the AreaPartition should be 0100, but that depends on your setup. You can get the full topics by using a mosquitto client to subscribe the messages.

A few examples, for my sysytem are below:
/concord4pi/areapartition/0100/zones/0006/status - This is the status of my zone 0006 in partition 1.
/concord4pi/areapartition/0100/touchpad/text - This is the text on all the keypads in partition 1.
/concord4pi/areapartition/0100/armingLevel - This is the numeric level of alarm state (reflecting Away, Stay, Armed, etc).
/concord4pi/areapartition/0100/armingLevel/text - This is the text version of the alarm state (ā€œSTAYā€, ā€œARMEDā€, etc).

I really should add a full list of these paths, but wasnā€™t sure how many people are using this concord4pi software and you can easily discover them by subscribing to the MQTT server using the topic /#

A few important points to rememberā€¦

  • The source code that you downloaded is not an OpenHAB binding. It is really a ā€œgatewayā€ of sorts; it reads the messages coming from the Automation Module, and then re-sends them over an IP network via MQTT.
  • To receive these messages, I use the MQTT binding and create custom channels with the correct topic path. Iā€™ve done the config file thing tooā€¦ both work exactly the same and, for me, the PaperUI way is easier to manage.

So the basic steps to getting this working are:

  1. Install the automation module and make sure it is talking to the alarm system. It looks like it is doing this, because you are getting the failure messages.
  2. Connect a computer (I use a Raspberry Pi with a serial board wired to some of the pins, but it can be any serial connection) to the Automation module and make sure that you are seeing the Automation module messages manually. This will help to make sure you have the correct serial device. I use the screen command on my RPI to do this. You will get text messages printed on the screen when you get this.
  3. When you verify that you are seeing the automation module commands come through, then you can set up the concord4pi software to read the automation module messages. Do this by copying the source tree and creating a JAR. If you like, I can compile the JAR and upload to the github repo, if that would be easier. Put the jar in a directory (e.g. /opt/concord4pi) along with an empty log directory, the lib directory from GitHub, the start.sh file from github, and the config directory from github. Update the files in the github config directory from github so that it matches your config (e.g. the correct hostname/IP address of your MQTT server, etc.). This should all be done in the concord4pi.config fileā€¦ no need to change the log.config file. Then start it with the start.sh script.
  4. Once the concord4pi script is running, you can watch the file created in the log directory to make sure there are no issues. If not, very soon, your Bus failure message should go away and it will start sending messages via MQTT.
  5. After this you just need to configure your openhab setup to read in the MQTT items.

Okay, this message is already too long, but I am very willing to help you get his working. Just send me any questions about whatever step and I can help you out.

Thanks,
Brandon

THANK YOU very much. I really appreciate the detailed write up. Here is what I haveā€¦

I donā€™t know which version you downloadedā€¦
I got the latest from your github page. I must say a jar would make it easier (so if you can Iā€™ll appreciate that)

The source code that you downloaded is not an OpenHAB binding
Thanks I figured that out

I use the screen command on my RPI to do this. You will get text messages printed on the screen when you get this.

Not sure how to use this beyond creating a new screen :slight_smile: So now reading up on screen.

I can compile the JAR and upload to the github repo, if that would be easier

That would be great and I think easier. I also understand it would be another thing to maintain.

Put the jar in a directory (e.g. /opt/concord4pi) along with an empty log directory, the lib directory from GitHub, the start.sh file from github, and the config directory from github. Update the files in the github config directory from github so that it matches your config (e.g. the correct hostname/IP address of your MQTT server, etc.). This should all be done in the concord4pi.config fileā€¦ no need to change the log.config file. Then start it with the start.sh script.

There we go! I never did any of these. I am sure this is the root of the issue. I incorrectly uploaded the jar in the ā€œopenhab2-addonsā€ folder (where the bindings go). Thank you for pointing this out

I am on windows so the directories are not same. Here is what I currently have in the opt folder (when I remote into the pi)
opt/FireMotD
opt/openhabian
opt/vc
I will create the opt/concord4pi here and dump all the components you listed above in it.
Please confirm

Again THANK you for all the work and assistance

Iā€™ve uploaded the jar in a new jars folder on GitHub. Iā€™ll upload a new JAR if I change the code at any point (or just make a CI pipeline to create it for meā€¦ if I get the time).

Let me know if you have any questions about the configuration of this all. This has been working for me for a while now and work pretty well.

THANKS! One more ā€¦ The start.sh referenced is it the ā€œconcord4pi.service.RASPBIANā€ file that should be renamed to start.sh?

Oopsā€¦ Nope. the concord4pi.service.RASPBIAN file is for setting up a systemd service so it will automatically start when it reboots. You will still need the start.sh file thoughā€¦ Just create an empty file and put the following in it (Iā€™ll upload it to GitHub too in the startup folder):

#!/bin/bash
cd /opt/concord4pi

java -Dtinylog.configuration=config/log.config -cp lib/jSerialComm-2.4.0.jar:concord4pi.jar:lib/org.eclipse.paho.client.mqttv3-1.1.1.jar:lib/tinylog-api-2.0.0-M2.1.jar:lib/tinylog-impl-2.0.0-M2.1.jar concord4pi.concord4pi

Make sure that file is executable (chmod u+x /opt/concord4pi/start.sh). You can run that file (cd /opt/concord4pi;./start.sh). That will run concord4pi in the foreground and will help you make sure that it works.

Once working correctly you can run the following commands to make sure that it starts up with systemd (as root):

cp /opt/concord4pi/startup/concord4pi.service.RASPBIAN /etc/systemd/system/concord4pi.service
systemctl daemon-reload
systemctl start concord4pi

Check to make sure that it is workingā€¦ then to make sure it starts automatically on reboot:

systemctl enable concord4pi

Keep the questions coming :wink:

Cool. Almost there. Will provide an update in a few.
Updates ā€¦

  1. I think I need help with this

Connect a computer (I use a Raspberry Pi with a serial board wired to some of the pins, but it can be any serial connection) to the Automation module and make sure that you are seeing the Automation module messages manually. This will help to make sure you have the correct serial device. I use the screen command on my RPI to do this. You will get text messages printed on the screen when you get this

Do you have a sample script I can use?

  1. I ran the start.sh file and got an errorā€¦

    [14:43:07] openhabian@openhabian:~$ cd /opt/concord4pi/
    [14:43:35] openhabian@openhabian:/opt/concord4pi$ ./start.sh
    Exception in thread ā€œmainā€ java.lang.NoClassDefFoundError: com/fazecast/jSerialC omm/SerialPortDataListener
    at concord4pi.MainController.(MainController.java:33)
    at concord4pi.concord4pi.(concord4pi.java:29)
    at concord4pi.concord4pi.main(concord4pi.java:11)
    Caused by: java.lang.ClassNotFoundException: com.fazecast.jSerialComm.SerialPort DataListener
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ā€¦ 3 more
    [14:43:46] openhabian@openhabian:

It seems we are missing this ā€œjetty-all-9.4.5.v20170502-uber.jarā€ in the start.sh config. Also, do we need the " concord4pi.concord4pi" at the end?

  1. Below is how my config file now looks
    MQTTBroadcaster=true
    MQTTConnectionString=tcp://192.XXX.XXX.XXX:1883
    MQTTClientID=mosquittobroker
    MQTTBaseTopic=concord4pi
    MQTTEnableCommands=true
    MQTTCommandTopic=cmd

How are you connected to the serial port on the automation module? Do you have a serial cable connected to your PI in some way? My setup includes a serial add-on board (like this one) connected to pins 8 and 10 on the RPI. (You could also use a USB serial adapter.) I then connect the add-on board to the automation module and I can use the Raspberry Pi serial controller to read the data. Since I used the built-in serial controller on the RPI, then I just use the serial device, which is /dev/serial0. If using a USB serial controller, you can just look from what shows up in /dev/ when you plug it in. :wink: Then I use screen to test the controller (e.g. screen /dev/serial0)

Can you send me your start script or paste it here? All the jars that it needs should be in /opt/concord4pi/lib and are all on github. That error you are getting shows that java canā€™t find the library that should be at /opt/concord4pi/lib/jSerialComm-2.4.0.jar.

Jetty was only required in a previous version of this, but concord4pi doesnā€™t use jetty anymore. What makes you think that you need Jetty? are you getting another error that you arenā€™t showing above?

On your config file, it looks right, but you are missing the SerialDevice lineā€¦ You need something like:

SerialDevice=/dev/serial0

in the file.

How are you connected to the serial port on the automation module? Do you have a serial cable connected to your PI in some way?

I am using a Sabrent USB 2.0 to Serial (9-Pin) DB-9 RS-232 Adapter Cable

Here is what I have in the lib folder
tinylog-impl-2.0.0-M2.1.jar
tinylog-api-2.0.0-M2.1.jar
org.eclipse.paho.client.mqttv3-1.1.1.jar
jSerialComm-2.4.2.jar
jetty-all-9.4.5.v20170502-uber.jar

Please note that the ā€œconcord4pi.jarā€ is NOT in the lib folder. It is in concord4pi while the other jars above are in the concord4pi/lib. I also just noticed that the lib has jSerialComm-2.4.2.jar while the start up is looking for jSerialComm-2.4.0.jar

Jetty was only required in a previous version of this, but concord4pi doesnā€™t use jetty anymore. What makes you think that you need Jetty? are you getting another error that you arenā€™t showing above?

I just added it because I saw it in the folder :slight_smile:

Here is my full config

SerialDevice=/dev/ttyAMA0 (I think I need to edit this line as you suggested to be ttyUSB0)

MQTTBroadcaster=true
MQTTConnectionString=tcp://192.XXX.XXX.XXX:1883
MQTTClientID=mosquittobroker
MQTTBaseTopic=home
MQTTEnableCommands=true
MQTTCommandTopic=cmd

Here is my full Start.sh (updated)

#!/bin/bash

cd /opt/concord4pi

java -Dtinylog.configuration=config/log.config -cp concord4pi.jar:lib/jetty-all-9.4.5.v20170502-uber.jar:lib/jSerialComm-2.4.2.jar:lib/org.eclipse.paho.client.mqttv3-1.1.1.jar:lib/tinylog-api-2.0.0-M2.1.jar:lib/tinylog-impl-2.0.0-M2.1.jar concord4pi.concord4pi

Now when I do ./start.sh here is the error I get (note I also added the syslog output)

[14:11:07] openhabian@openhabian:/opt/concord4pi$ ./start.sh
Exception in thread "main" java.lang.NullPointerException
        at concord4pi.messaging.MQTTService.connect(MQTTService.java:93)
        at concord4pi.messaging.MQTTService.<init>(MQTTService.java:50)
        at concord4pi.MainController.addBroadcasters(MainController.java:100)
        at concord4pi.MainController.<init>(MainController.java:36)
        at concord4pi.concord4pi.<init>(concord4pi.java:29)
        at concord4pi.concord4pi.main(concord4pi.java:11)
^C[14:13:14] openhabian@openhabian:/opt/concord4pi$ tail -20 /var/log/syslog
Dec 28 13:54:47 openhabian systemd[1]: concord4pi.service: Failed with result 'exit-code'.
Dec 28 13:54:47 openhabian systemd[1]: concord4pi.service: Service hold-off time over, scheduling restart.
Dec 28 13:54:47 openhabian systemd[1]: Stopped concord4pi Automation Service.
Dec 28 13:54:47 openhabian systemd[1]: Started concord4pi Automation Service.
Dec 28 13:54:47 openhabian systemd[3548]: concord4pi.service: Failed at step USER spawning /opt/concord4pi/start.sh: No such process
Dec 28 13:54:47 openhabian systemd[1]: concord4pi.service: Main process exited, code=exited, status=217/USER
Dec 28 13:54:47 openhabian systemd[1]: concord4pi.service: Unit entered failed state.
Dec 28 13:54:47 openhabian systemd[1]: concord4pi.service: Failed with result 'exit-code'.
Dec 28 13:54:48 openhabian systemd[1]: concord4pi.service: Service hold-off time over, scheduling restart.
Dec 28 13:54:48 openhabian systemd[1]: Stopped concord4pi Automation Service.
Dec 28 13:54:48 openhabian systemd[1]: concord4pi.service: Start request repeated too quickly.
Dec 28 13:54:48 openhabian systemd[1]: Failed to start concord4pi Automation Service.
Dec 28 13:54:48 openhabian systemd[1]: concord4pi.service: Unit entered failed state.
Dec 28 13:54:48 openhabian systemd[1]: concord4pi.service: Failed with result 'exit-code'.
Dec 28 13:55:01 openhabian CRON[3573]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Dec 28 13:59:23 openhabian systemd[1]: Starting Daily apt download activities...
Dec 28 13:59:27 openhabian systemd[1]: Started Daily apt download activities.
Dec 28 13:59:27 openhabian systemd[1]: apt-daily.timer: Adding 26min 31.774308s random time.
Dec 28 13:59:27 openhabian systemd[1]: apt-daily.timer: Adding 5h 37min 9.644648s random time.
Dec 28 14:05:01 openhabian CRON[4016]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
[14:13:22] openhabian@openhabian:/opt/concord4pi$

Update Two
I also noticed that the ā€œconcord4pi.service.RASPBIANā€ file has the following for user

User=pi

However, when I do /etc/passwd I dont find ā€œpiā€ listed.
I do however find the following (among a host of others): root, openhabian, openhab, mysql, mosquitto

I updated the user to be User=openhabian and I could get the service started. I am guessing we need to add that as part of the config?

Lastly when I do screen /dev/ttyUSB0 this is what I get. So I think we are really really close! :slight_smile: .
[14:33:22] openhabian@openhabian:/opt/concord4pi$ screen /dev/ttyUSB0
B
0B011407034317016706998B
0B011407034317016706998B
0B011407034317016706998B
0B011407034317016706998B
0B011407034317016706998B

Update Three
I looked at the error again closer and decided to look at the code on github. I noticed this in the src/concord4pi/SB2000/SB2000Controller.java fileā€¦

MQTTService mqtt = new MQTTService(
					logger,
					appConfig.getProperty("MQTTConnectionString"),
					appConfig.getProperty("MQTTClientID"),
					appConfig.getProperty("MQTTUsername"),
					appConfig.getProperty("MQTTPassword"),
					appConfig.getProperty("MQTTBaseTopic"),
					appConfig.getProperty("MQTTCommandTopic"),
					enableCommands
					);

I had removed the MQTTUsername and MQTTPassword as I did not have any. I added them back as such: MQTTUsername=ā€œā€ and MQTTPassword =ā€œā€ and tried running the ./start.sh and it seemed to work. It gave me a different error now :slight_smile:

[19:27:04] openhabian@openhabian:/opt/concord4pi$ ./start.sh
Exception in thread ā€œThread-5ā€ java.lang.NumberFormatException: For input string: "B
"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at concord4pi.SB2000.SB2000Controller.processIncomingMessages(SB2000Controller.java:148)
at concord4pi.SB2000.SB2000Controller.run(SB2000Controller.java:45)
at java.lang.Thread.run(Thread.java:748)

Update 4
It is finally working after some tinkering and multiple restarts. Phew!. I get the thing to work when I run ./start.sh but it does not auto start when I restart OH. I can start and enable concord4pi service just fine now.

Sorry for the very long post.

Glad to hear that it is working. Thanks for the heads up on the version of the jSerialComm library. I had updated the library in the code, but forgot to add the updated lib in my actual production running version. (Curse my sloppy maintenance ;-))

Also, thanks for the patience and all the insight on how to make this code better. Iā€™ll update the code so that the MQTT user and password is not required.

On that last error, what ended up being the problem? Or did you just keep restarting until it worked? If the latter, then I think there is a bug with my hex->dec conversion somewhere. Iā€™ll use the message strings that you posted and test it out.

Again, thanks for all the help with debugging and providing such useful feedback to make this better.

EDIT: Is your openhab running on the same machine as is connected to your alarm system? Sounds like you got systemd configured, but it isnā€™t starting up on boot?

This has been fun and I am really excited about the possibilities. To answer your questionsā€¦

On that last error, what ended up being the problem?

I still have not figured it out. It would not auto start on restart. I have been manually starting it using the ./start.sh and it runs for a while and times out (approx 6-8hrs later).
Below is a acreen shot of my MQTT Explorer. I think that issue is caused by the second entry (which I think should not be there).
image

Is your openhab running on the same machine as is connected to your alarm system? Sounds like you got systemd configured, but it isnā€™t starting up on boot?

I have one Raspberry PI that has OH installed in it. The same PI has the cable from the AM module connected to it so I think the answer is yes. I have another Pi and can use two but would need some guidance on how to do that.
I have systemd configured and yes its not working. I can enable the service and start it. The service does start automatically but for some reason it does not launch the start up script. So in order to manually run ./start.sh I have to stop the service since the port is already being used.

I would be glad to do some more testing
Thanks!

I have been trying to re-create the error that you were getting but I canā€™t seem to do it. However, I did add some code to handle the situation. Iā€™ve uploaded a new jar to github, if you want to try it out.

Also, Iā€™ve fixed the problem with the MQTT user/pass. You shouldnā€™t have to include those in the config file anymore.

I have been trying to re-create the error that you were getting but I canā€™t seem to do it.

The error comes up when my system times out and I try to re-start it using the start.sh (since that is the only way I have been able to get it to run).

Perfect! Iā€™ll try it right now and let you. I also noticed that in the concord4pi.config file you uploaded the ā€œMQTTBroadcaster=falseā€ mine had ā€œMQTTBroadcaster=trueā€.
I will make that change and test it.
Question:
Do you have any thoughts on the suggestion of making the user in the ā€œconcord4pi.service.RASPBIANā€ be a variable? Right now it is hard coded and it seems our users were different. The file had ā€œpiā€ (which I did not have on my system) and mine is running as ā€œopenhabianā€.
I dont know if thatā€™s an issue given I cant call the start.sh script on start up.
Iā€™ll let you know what I find.

That was a mistake on my part. Iā€™ll fix it. MQTTBroadcaster=false disables the MQTT messages completely, so you wonā€™t be able to get anything in openhab. Best to keep it set to true, if you have an MQTT server running.

MQTTBroadcaster=false disables the MQTT messages completely, so you wonā€™t be able to get anything in openhab

I learned! :). It is set to true. The changes are working beautiful (I no longer have a password). I will let you know if I find anything after it times out. Just have to figure out what to do to get it auto start

You may not get a timeout, but am interested in what you find. The error that was happening before wasnā€™t caught properly so the thread that processes messages from the Automation Module broke. Now that that issues is properly caught, it may continue to run indefinitely. Very interested to know if that is the case. :wink:

Well, I ended up refactoring the whole set up. So I am posting it here as a summary for others that may be reading this. I am assuming this is how yours is set up.

  1. I am using two Raspberry Pis.
  2. Pi 1 has the concord4pi code (opt/concord4pi folder) and also running MQTT Broker on it.
  3. The SB2000 Automation module is connected from the Alarm Panel to Pi 1. This Pi will serve simply as the Broker and communication with the panel. And I think this is what you suggested in one of your very early posts. This allowed me to use the same user you use (pi) with no changes
  4. Pi 2 is the one that has OH installed on it. Pi 2 has the OH embedded broker installed and configured to interact with Pi 1 (simply enter the IP address of Pi 1 in the OH embedded broker Host name)
  5. With this set up I can restart OH and do what ever I need to and not trip the alarm.

I decided to give this a shot because I could not figure out why the auto start would not call the start.sh script and it times out at least twice a day when I manually started it. I am guessing it has something to do with the load order in OH

After refactoring, the code worked flawlessly (with the changes discussed above applied) and the auto start works as designed.
So far I have not seen any errors and no ā€œnullā€ entry (as in my screen shot above) and my system has not timed out. So all is working great so far.

I have the same issue. After numerous unsuccessful attempts I decided to step through the code (MQTTService.java). The core method is
private void handleMessage( String topic, String message) {...}
I keep getting the error:
logger.log("Received the MQTT message [" + message + "], but not a valid Alarm System Command. Ignoring...", Level.INFO);
Example:

concord4pi.messaging.MQTTService$MQTTMessageHandler.handleMessage: Received the MQTT message [ARMEDSTAY], but not a valid Alarm System Command.  Ignoring...

So after stepping through the code, I think there are two main issues;

  1. byteArray.length % 2) != 0 check fails for ā€œARMEDSTAYā€ and ā€œARMEDAWAYā€ (unless I am sending the wrong command. It passes for " DISARMED" since its an even number of characters). See my log below:
    MQTT Message: ARMEDSTAY
    1. Message.getBytes(): [65, 82, 77, 69, 68, 83, 84, 65, 89]
    2. running 'convertRawByteArrayToHexString' method with param: [65, 82, 77, 69, 68, 83, 84, 65, 89]
    3. (byteArray.length % 2) != 0 so returning null
    4. running 'convertHexStringToEncodedByteArray' method with param: null
    5. 'convertHexStringToEncodedByteArray' try/catch error returning new byte[0]
    6. invalid message: encodedMessage.length not greater than 0

MQTT Message: ARMEDAWAY

    1. Message.getBytes(): [65, 82, 77, 69, 68, 65, 87, 65, 89]
    2. running 'convertRawByteArrayToHexString' method with param: [65, 82, 77, 69, 68, 65, 87, 65, 89]
    3. (byteArray.length % 2) != 0 so returning null
    4. running 'convertHexStringToEncodedByteArray' method with param: null
    5. 'convertHexStringToEncodedByteArray' try/catch error returning new byte[0]
    6. invalid message: encodedMessage.length not greater than 0
  1. convertRawByteArrayToHexString method may be wrong as the result is not a HEX. I say that because the result fails in the next call convertHexStringToEncodedByteArray
    My Log:
    MQTT Message: DISARMED
Message.getBytes(): [68, 73, 83, 65, 82, 77, 69, 68]
running 'convertRawByteArrayToHexString' method with param: [68, 73, 83, 65, 82, 77, 69, 68]
tempMessage part: DI
tempMessage part: SA
tempMessage part: RM
tempMessage part: ED
tempMessage: DISARMED
running 'convertHexStringToEncodedByteArray' method with param: DISARMED
[DI, SA, RM, ED]
starting array length...4
starting...[0, 0, 0, 0]
running 'convertHexToEncodedBinary' method with param: DI
'convertHexStringToEncodedByteArray' try/catch error returning new byte[0]
invalid message: encodedMessage.length not greater than 0