eavanvalkenburg / pysiaalarm

A python package to connect to a SIA DC-09 based alarm system.
MIT License
38 stars 29 forks source link

Bentel Absoluta compatible #53

Open n0way0ut opened 1 year ago

n0way0ut commented 1 year ago

hello, I have a Bentel Absoluta alarm system that runs as SIA client over FIBRO (UDP), so it needs a receiver to communicate. Do you know if this python module is compatible with it? Can you please share a simple code to run an UDP server and parse the client message with pysiaalarm lib?

thanks.

eavanvalkenburg commented 1 year ago

I have not been able to test that feature with a actual device because I don't have one. Taking this as an example: https://github.com/eavanvalkenburg/pysiaalarm/blob/master/tests/run_aio.py should get you going, with protocol = CommunicationsProtocol.UDP in the initialization of the Client.

n0way0ut commented 1 year ago

ok, I just added:

async with SIAClient(
        config["host"], config["port"], account, function=func, protocol = CommunicationsProtocol.UDP
    ) as client

but I get these errors:

DEBUG:asyncio:Using selector: EpollSelector
DEBUG:pysiaalarm.aio.client:Starting SIA.
ERROR:asyncio:Exception in callback SIAServerUDP.connection_made(<_SelectorDat...e, bufsize=0>>)
handle: <Handle SIAServerUDP.connection_made(<_SelectorDat...e, bufsize=0>>)>
Traceback (most recent call last):
  File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
    self._context.run(self._callback, *self._args)
  File "/sia_alarm/lib/python3.11/site-packages/pysiaalarm/aio/server.py", line 86, in connection_made
    assert isinstance(transport, asyncio.DatagramTransport)
AssertionError
--------------------------------------------------
Running for another 12000 seconds

and then I do not receive any events.

manu89padovani commented 1 year ago

Hi, i'm also interested on this part. I'm developing for testing purpose a .NET udp client to receive event from Bentel Absoluta (SIA over FIBRO) but the problem is that Fibro protocol is not public and is so hard to reverse engineering it without specifications.

As far as I discoverd, Fibro works with UDP protocol and implements a manual handshake between the alarm panel and the receiver: AP => RC (handshake messagge) RC => AP (kissoff message)

at this point, AP starts to send events to the receiver but every event must be kissedoff: AP => RC (event with SIA information visible) RC => AP (kissoff - event received)

the difficult part is to understand which response the Alarm Panel accept, in order to estabilsh a correct communication.