Jablotron JA-80 series and JA-100 series alarm integration

I have set up the Jablatron 100 code on Hassio.
Connected with a specially created account with administrator rights.
The centreal unit is a JA-106K.
I have got almost all motion sensors in to the Home assistant and both magnetic sensors.
But only 1 motion sensor is triggering changes and I dont get any feedback from when alarm turns off and on.

Any suggestions?

Update, now with the Horsi update I got the larm status to work, but also noticed that the only motion sensor sending data only sends when F-link or J-link is open.

Hi all
I have Jablotron 100 with the central units JA-101K- LAN3G.
How made integration whit my HA. I need instruction step by step :).
I’m installation partner for Jablotron, but HA it’s new for me.
Thanks for yours help

I have a JA-82T interface cable hooked up to a JA-82K. I have connected the cable and (for all I know) identified it to be on /dev/hidraw0. The control panel shows up in Hass, but the status badge is “unknown”. I do not see any devices being reported in the config directory. I’ve enabled debugging for the component but have not spotted any actionable results, apart from a lot of unknown packets (which I believe mean the connection is working)

Search "jablotron" (191 hits in 1 file)
  \\hassio\config\home-assistant.log (191 hits)
	Line 89: 2020-03-22 10:45:50 WARNING (MainThread) [homeassistant.loader] You are using a custom integration for jablotron which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant.
	Line 90: 2020-03-22 10:45:50 INFO (MainThread) [homeassistant.loader] Loaded jablotron from custom_components.jablotron
	Line 90: 2020-03-22 10:45:50 INFO (MainThread) [homeassistant.loader] Loaded jablotron from custom_components.jablotron
	Line 98: 2020-03-22 10:45:51 INFO (MainThread) [homeassistant.components.alarm_control_panel] Setting up alarm_control_panel.jablotron
	Line 124: 2020-03-22 10:45:52 DEBUG (MainThread) [custom_components.jablotron.alarm_control_panel] Sending startup message
	Line 125: 2020-03-22 10:45:52 DEBUG (MainThread) [custom_components.jablotron.alarm_control_panel] Successfully sent startup message
	Line 141: 2020-03-22 10:45:52 WARNING (ThreadPoolExecutor-0_0) [custom_components.jablotron.alarm_control_panel] Unknown status packet is b'\x82\x01`\x00\x00\x00\x00\x00'
	Line 185: 2020-03-22 10:45:53 DEBUG (MainThread) [custom_components.jablotron.alarm_control_panel] send_command_loop() enter
	Line 193: 2020-03-22 10:45:53 WARNING (ThreadPoolExecutor-0_0) [custom_components.jablotron.alarm_control_panel] Unknown status packet is b'\x82\x01`\x00\x00\x00\x00\x00'
	Line 201: 2020-03-22 10:45:53 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event state_changed[L]: entity_id=alarm_control_panel.jablotron_alarm, old_state=None, new_state=<state alarm_control_panel.jablotron_alarm=unknown; code_format=number, changed_by=None, code_arm_required=True, friendly_name=Jablotron Alarm, supported_features=15 @ 2020-03-22T10:45:53.947459+01:00>>
	Line 201: 2020-03-22 10:45:53 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event state_changed[L]: entity_id=alarm_control_panel.jablotron_alarm, old_state=None, new_state=<state alarm_control_panel.jablotron_alarm=unknown; code_format=number, changed_by=None, code_arm_required=True, friendly_name=Jablotron Alarm, supported_features=15 @ 2020-03-22T10:45:53.947459+01:00>>
	Line 201: 2020-03-22 10:45:53 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event state_changed[L]: entity_id=alarm_control_panel.jablotron_alarm, old_state=None, new_state=<state alarm_control_panel.jablotron_alarm=unknown; code_format=number, changed_by=None, code_arm_required=True, friendly_name=Jablotron Alarm, supported_features=15 @ 2020-03-22T10:45:53.947459+01:00>>
	Line 758: 2020-03-22 10:45:58 WARNING (ThreadPoolExecutor-0_0) [custom_components.jablotron.alarm_control_panel] Unknown status packet is b'\x82\x01`\x00\x00\x00\x00\x00'
	Line 787: 2020-03-22 10:45:59 WARNING (ThreadPoolExecutor-0_0) [custom_components.jablotron.alarm_control_panel] Unknown status packet is b'\x82\x01`\x00\x00\x00\x00\x00'
	Line 803: 2020-03-22 10:46:00 WARNING (ThreadPoolExecutor-0_0) [custom_components.jablotron.alarm_control_panel] Unknown status packet is b'\x82\x01`\x00\x00\x00\x00\x00'
	Line 804: 2020-03-22 10:46:01 WARNING (ThreadPoolExecutor-0_0) [custom_components.jablotron.alarm_control_panel] Unknown status packet is b'\x82\x01`\x00\x00\x00\x00\x00'
	Line 838: 2020-03-22 10:46:02 WARNING (ThreadPoolExecutor-0_0) [custom_components.jablotron.alarm_control_panel] Unknown status packet is b'\x82\x01`\x00\x00\x00\x00\x00'
	Line 839: 2020-03-22 10:46:02 WARNING (ThreadPoolExecutor-0_0) [custom_components.jablotron.alarm_control_panel] Unknown status packet is b'\x82\x01\xc6\x00\x00\x00\x00\x00'
	Line 1120: 2020-03-22 10:46:07 WARNING (ThreadPoolExecutor-0_0) [custom_components.jablotron.alarm_control_panel] Unknown status packet is b'\x82\x01`\x00\x00\x00\x00\x00'
	Line 1121: 2020-03-22 10:46:08 WARNING (ThreadPoolExecutor-0_0) [custom_components.jablotron.alarm_control_panel] Unknown status packet is b'\x82\x01`\x00\x00\x00\x00\x00'
	Line 1122: 2020-03-22 10:46:08 WARNING (ThreadPoolExecutor-0_0) [custom_components.jablotron.alarm_control_panel] Unknown status packet is b'\x82\x01`\x00\x00\x00\x00\x00'
	Line 1154: 2020-03-22 10:46:09 WARNING (ThreadPoolExecutor-0_0) [custom_components.jablotron.alarm_control_panel] Unknown status packet is b'\x82\x01`\x00\x00\x00\x00\x00'
	Line 1155: 2020-03-22 10:46:09 WARNING (ThreadPoolExecutor-0_0) [custom_components.jablotron.alarm_control_panel] Unknown status packet is b'\x82\x01`\x00\x00\x00\x00\x00'
	Line 1156: 2020-03-22 10:46:10 WARNING (ThreadPoolExecutor-0_0) [custom_components.jablotron.alarm_control_panel] Unknown status packet is b'\x82\x01`\x00\x00\x00\x00\x00'
	Line 1193: 2020-03-22 10:46:13 DEBUG (MainThread) [homeassistant.components.websocket_api.http.connection.1870598416] Sending {'id': 11, 'type': 'result', 'success': True, 'result': [<state sun.sun=above_horizon; next_dawn=2020-03-23T05:03:42+00:00, next_dusk=2020-03-22T18:31:41+00:00, next_midnight=2020-03-22T23:48:26+00:00, next_noon=2020-03-22T11:48:52+00:00, next_rising=2020-03-23T05:37:26+00:00, next_setting=2020-03-22T17:57:59+00:00, elevation=33.01, azimuth=142.51, rising=True, friendly_name=Sun @ 2020-03-22T10:45:49.886158+01:00>, <state group.printer=unknown; entity_id=('sensor.samsung_clp_320_series_192_168_178_102_toner_black', 'sensor.samsung_clp_320_series_192_168_178_102_toner_cyan', 'sensor.samsung_clp_320_series_192_168_178_102_toner_magenta', 'sensor.samsung_clp_320_series_192_168_178_102_toner_yellow'), order=0, friendly_name=Samsung printer, icon=mdi:printer @ 2020-03-22T10:45:50.210117+01:00>, <state group.converter=unknown; entity_id=('sensor.total_yield', 'sensor.pv_power', 'senso...
	Line 1193: 2020-03-22 10:46:13 DEBUG (MainThread) [homeassistant.components.websocket_api.http.connection.1870598416] Sending {'id': 11, 'type': 'result', 'success': True, 'result': [<state sun.sun=above_horizon; next_dawn=2020-03-23T05:03:42+00:00, next_dusk=2020-03-22T18:31:41+00:00, next_midnight=2020-03-22T23:48:26+00:00, next_noon=2020-03-22T11:48:52+00:00, next_rising=2020-03-23T05:37:26+00:00, next_setting=2020-03-22T17:57:59+00:00, elevation=33.01, azimuth=142.51, rising=True, friendly_name=Sun @ 2020-03-22T10:45:49.886158+01:00>, <state group.printer=unknown; entity_id=('sensor.samsung_clp_320_series_192_168_178_102_toner_black', 'sensor.samsung_clp_320_series_192_168_178_102_toner_cyan', 'sensor.samsung_clp_320_series_192_168_178_102_toner_magenta', 'sensor.samsung_clp_320_series_192_168_178_102_toner_yellow'), order=0, friendly_name=Samsung printer, icon=mdi:printer @ 2020-03-22T10:45:50.210117+01:00>, <state group.converter=unknown; entity_id=('sensor.total_yield', 'sensor.pv_power', 'senso...
	Line 1198: 2020-03-22 10:46:13 DEBUG (MainThread) [homeassistant.components.websocket_api.http.connection.1870598416] Sending {'id': 12, 'type': 'result', 'success': True, 'result': {'latitude': 51.93666030300183, 'longitude': 4.495325982570649, 'elevation': 0, 'unit_system': {'length': 'km', 'mass': 'g', 'pressure': 'Pa', 'temperature': '°C', 'volume': 'L'}, 'location_name': 'W51', 'time_zone': 'Europe/Amsterdam', 'components': {'sensor.template', 'vacuum.xiaomi_miio', 'sensor.sma', 'cover.deconz', 'input_select', 'frontend', 'input_datetime', 'websocket_api', 'automation', 'group', 'alarm_control_panel.jablotron', 'light', 'sun', 'logger', 'input_text', 'light.switch', 'sensor.dsmr', 'light.deconz', 'sensor.buienradar', 'webhook', 'stream', 'map', 'emulated_hue', 'api', 'ios', 'light.tuya', 'device_automation', 'alarm_control_panel', 'updater', 'system_log', 'climate.deconz', 'device_tracker.mobile_app', 'binary_sensor.yeelight', 'media_player.cast', 'binary_sensor.deconz', 'persistent_notification',...
	Line 1203: 2020-03-22 10:46:15 WARNING (ThreadPoolExecutor-0_0) [custom_components.jablotron.alarm_control_panel] Unknown status packet is b'\x82\x01`\x00\x00\x00\x00\x00'
	Line 1207: 2020-03-22 10:46:15 WARNING (ThreadPoolExecutor-0_0) [custom_components.jablotron.alarm_control_panel] Unknown status packet is b'\x82\x01`\x00\x00\x00\x00\x00'
	Line 1210: 2020-03-22 10:46:16 WARNING (ThreadPoolExecutor-0_0) [custom_components.jablotron.alarm_control_panel] Unknown status packet is b'\x82\x01`\x00\x00\x00\x00\x00'
	Line 1211: 2020-03-22 10:46:16 DEBUG (MainThread) [homeassistant.components.websocket_api.http.connection.1870598416] Sending {"id": 18, "type": "result", "success": true, "result": {"title": "W51", "views": [{"badges": [{"entity": "binary_sensor.updater"}, {"entity": "person.jacobijne"}, {"entity": "sensor.harmony_hub"}, {"entity": "sensor.plex_ntn_nas2"}, {"entity": "sensor.geocoded_location_3"}, {"entity": "sensor.geocoded_location_2"}, {"entity": "sun.sun"}], "cards": [{"entity": "media_player.woonkamer", "type": "media-control"}, {"entity": "media_player.home_mini", "type": "media-control"}, {"entities": ["binary_sensor.presence_3", "sensor.motion_sensor"], "show_header_toggle": true, "title": "Hal", "type": "entities"}, {"entities": ["sensor.daylight", "light.configuration_tool_2"], "show_header_toggle": true, "title": "Tuin", "type": "entities"}, {"entity": "media_player.mibox4", "type": "media-control"}, {"entities": ["sensor.br_humidity", "sensor.br_symbol", "sensor.br_temperature", "sensor.br...
	Line 1213: 2020-03-22 10:46:16 WARNING (ThreadPoolExecutor-0_0) [custom_components.jablotron.alarm_control_panel] Unknown status packet is b'\x82\x01`\x00\x00\x00\x00\x00'
	Line 1236: 2020-03-22 10:46:17 WARNING (ThreadPoolExecutor-0_0) [custom_components.jablotron.alarm_control_panel] Unknown status packet is b'\x82\x01`\x00\x00\x00\x00\x00'
	Line 1258: 2020-03-22 10:46:17 WARNING (ThreadPoolExecutor-0_0) [custom_components.jablotron.alarm_control_panel] Unknown status packet is b'\x82\x01`\x00\x00\x00\x00\x00'
	Line 1339: 2020-03-22 10:46:17 DEBUG (SyncWorker_17) [homeassistant.util.json] JSON file not found: /config/custom_components/jablotron/.translations/alarm_control_panel.nl.json
	Line 1417: 2020-03-22 10:46:18 DEBUG (SyncWorker_1) [homeassistant.util.json] JSON file not found: /config/custom_components/jablotron/.translations/alarm_control_panel.en.json
	Line 1481: 2020-03-22 10:46:18 WARNING (ThreadPoolExecutor-0_0) [custom_components.jablotron.alarm_control_panel] Unknown status packet is b'\x82\x01`\x00\x00\x00\x00\x00'
	Line 1506: 2020-03-22 10:46:21 DEBUG (MainThread) [homeassistant.components.websocket_api.http.connection.1791843600] Sending {'id': 3, 'type': 'result', 'success': True, 'result': [<state sun.sun=above_horizon; next_dawn=2020-03-23T05:03:42+00:00, next_dusk=2020-03-22T18:31:41+00:00, next_midnight=2020-03-22T23:48:26+00:00, next_noon=2020-03-22T11:48:52+00:00, next_rising=2020-03-23T05:37:26+00:00, next_setting=2020-03-22T17:57:59+00:00, elevation=33.01, azimuth=142.51, rising=True, friendly_name=Sun @ 2020-03-22T10:45:49.886158+01:00>, <state group.printer=unknown; entity_id=('sensor.samsung_clp_320_series_192_168_178_102_toner_black', 'sensor.samsung_clp_320_series_192_168_178_102_toner_cyan', 'sensor.samsung_clp_320_series_192_168_178_102_toner_magenta', 'sensor.samsung_clp_320_series_192_168_178_102_toner_yellow'), order=0, friendly_name=Samsung printer, icon=mdi:printer @ 2020-03-22T10:45:50.210117+01:00>, <state group.converter=unknown; entity_id=('sensor.total_yield', 'sensor.pv_power', 'sensor...
	Line 1506: 2020-03-22 10:46:21 DEBUG (MainThread) [homeassistant.components.websocket_api.http.connection.1791843600] Sending {'id': 3, 'type': 'result', 'success': True, 'result': [<state sun.sun=above_horizon; next_dawn=2020-03-23T05:03:42+00:00, next_dusk=2020-03-22T18:31:41+00:00, next_midnight=2020-03-22T23:48:26+00:00, next_noon=2020-03-22T11:48:52+00:00, next_rising=2020-03-23T05:37:26+00:00, next_setting=2020-03-22T17:57:59+00:00, elevation=33.01, azimuth=142.51, rising=True, friendly_name=Sun @ 2020-03-22T10:45:49.886158+01:00>, <state group.printer=unknown; entity_id=('sensor.samsung_clp_320_series_192_168_178_102_toner_black', 'sensor.samsung_clp_320_series_192_168_178_102_toner_cyan', 'sensor.samsung_clp_320_series_192_168_178_102_toner_magenta', 'sensor.samsung_clp_320_series_192_168_178_102_toner_yellow'), order=0, friendly_name=Samsung printer, icon=mdi:printer @ 2020-03-22T10:45:50.210117+01:00>, <state group.converter=unknown; entity_id=('sensor.total_yield', 'sensor.pv_power', 'sensor...
	Line 1513: 2020-03-22 10:46:21 DEBUG (MainThread) [homeassistant.components.websocket_api.http.connection.1791843600] Sending {'id': 6, 'type': 'result', 'success': True, 'result': {'latitude': 51.93666030300183, 'longitude': 4.495325982570649, 'elevation': 0, 'unit_system': {'length': 'km', 'mass': 'g', 'pressure': 'Pa', 'temperature': '°C', 'volume': 'L'}, 'location_name': 'W51', 'time_zone': 'Europe/Amsterdam', 'components': {'sensor.template', 'vacuum.xiaomi_miio', 'sensor.sma', 'cover.deconz', 'input_select', 'frontend', 'input_datetime', 'websocket_api', 'automation', 'group', 'alarm_control_panel.jablotron', 'light', 'sun', 'logger', 'input_text', 'light.switch', 'sensor.dsmr', 'light.deconz', 'sensor.buienradar', 'webhook', 'stream', 'map', 'emulated_hue', 'api', 'ios', 'light.tuya', 'device_automation', 'alarm_control_panel', 'updater', 'system_log', 'climate.deconz', 'device_tracker.mobile_app', 'binary_sensor.yeelight', 'media_player.cast', 'binary_sensor.deconz', 'persistent_notification', ...
	Line 1528: 2020-03-22 10:46:21 DEBUG (MainThread) [homeassistant.components.websocket_api.http.connection.1791843600] Sending {"id": 16, "type": "result", "success": true, "result": {"title": "W51", "views": [{"badges": [{"entity": "binary_sensor.updater"}, {"entity": "person.jacobijne"}, {"entity": "sensor.harmony_hub"}, {"entity": "sensor.plex_ntn_nas2"}, {"entity": "sensor.geocoded_location_3"}, {"entity": "sensor.geocoded_location_2"}, {"entity": "sun.sun"}], "cards": [{"entity": "media_player.woonkamer", "type": "media-control"}, {"entity": "media_player.home_mini", "type": "media-control"}, {"entities": ["binary_sensor.presence_3", "sensor.motion_sensor"], "show_header_toggle": true, "title": "Hal", "type": "entities"}, {"entities": ["sensor.daylight", "light.configuration_tool_2"], "show_header_toggle": true, "title": "Tuin", "type": "entities"}, {"entity": "media_player.mibox4", "type": "media-control"}, {"entities": ["sensor.br_humidity", "sensor.br_symbol", "sensor.br_temperature", "sensor.br...
	Line 1539: 2020-03-22 10:46:22 WARNING (ThreadPoolExecutor-0_0) [custom_components.jablotron.alarm_control_panel] Unknown status packet is b'\x82\x01`\x00\x00\x00\x00\x00'
	
The first thing I'd imagine I'd need to do is, establish whether the connection is configured correctly, ten work from there. Any pointers?

Hello,
do not forget that my code actually is not for a ja80 series.
Protocol words are different (shorter) than for the 100 series.
But do not hesitate to sniff on the usb port with wireshark and adapt the code for ja 80 series.
At the moment a bit short of time. Work in the IT of a hospital so other priorities at the moment…
Stay home!

@Horsi I have a 106 and use your code.
Still I have problems getting the sensors to report, I need to have F-link on to get any response beside alarm status and when I have f-link on I only get status from one of my sensors.

same problem

Um, the title of this topic does reference ja-80 series, right?

Managed to get my JA-106 work, somewhat with a combo of Horci and plaksnor code.
I am using Horsis Alarm panel and Plaksnors binary sensor.
It get me a working alarm control panel, I can set the alarm etc.
It also gives me sensors status without using F- or J-Link, but only for 2 sensors one PIR and one magnet.
With Horsis binary sensor I only could get it to work with f- Or J-link running.

the weird thing is that I only get continous status on 1 out of 7 PIR and 1 out 2 magnetic.
Not sure why all cant be shown.

Anyone have an idea on how to investigate this?

Solved it.
Took some logreading and testing.
Seems like every sensor has different on/off bytes. Also, some other tweaks to the binary sensor file and now all sensors works.

could you share what you did?

First of, I have a JK-106 with all wireless
I used the Horsi Alarm panel without any changes.
I then took Plaksnors binary sensor file.

I enabled logs according to
custom_components.jablotron_system: debug
custom_components.jablotron_system.alarm_control_panel: warn

Then I started to look for logs like:

2020-03-25 20:12:06 DEBUG (ThreadPoolExecutor-1_0) [custom_components.jablotron_system.binary_sensor] PortScanner._read(): 5508 packet, part 1: 55088084c0012033
2020-03-25 20:12:06 DEBUG (ThreadPoolExecutor-1_0) [custom_components.jablotron_system.binary_sensor] PortScanner._read(): 5508 packet, part 2: b40c00000b000000

5508 seems to be the start of the data packets I wanted

in short first 4 digits shows what I am looking for
digit 5+6 you need to keep a look at
They are in the if-statement on line 394 in plaksnors file, I had to add one variant here to get some sensors to register
digit 7+8 is the on/off code, for me different for every sensor
add those to line 398

So looking at my logs above
I added 80 to line394 and84 to line398

After that I was good to go. some trial and error to see if the 7+8 digit is on or off but got it to work

1 Like

would it be possible to share the file in pastebin??

@soylant
https://pastebin.com/XPFcuQLy

In the code I have removed some annoying debugs in order to get better printout for testing
My changes are in the area line 394 and line 396

1 Like

YOUR MY HERO :slight_smile: it is working :slight_smile: this is so cool… Thank you so mutch

1 Like

Ok, not sure if this finding is somewhere in the discussion above but here goes something
All my sensors have different on/off bytes
On is 2 lower then off making if sensor has 78 as on it will have 7a as off
All my sensors is also stepped by 4 giving if sensor 1 has 78 as on sensor 2 will have 7c as on

I can see it is only my wired sensors that are working my wireless is not working, i get the following in my log

@soylant
Lines in my text below is based on my file

Lets look at your part 1 packet, digit by digit, the first packet
1-4: 55 09 - this is ok, it will be caught on line 381 as a wireless sensor
5-6: 4b - this is not ok, it should be caught on line 394, add it there ( i think it could be related to zones)
7-8: c6 - this is not ok, its one of your on off bytes lets look more on this
9-12: c0 05 - this is ok, its your sensor id

Looking for the sensor id i can see that second packet has same id but other bytes on 7-8
7-8: c4

Now we know that on/off bytes are either C4 or C6, if my above theory on increment by 2 is correct you should have:
c4 : on
c6: off

add c4 to line396

This should work if I understand it correct

thank you so much for helping, is this right ?

based on the example I found, I think you should add
to line 394 -> b’\x4b
to line 396 -> b’\xc4