Tertiush / ParadoxIP150v2

Python-based IP150 'middle-ware' that uses the IP module's software port for monitoring and control of the alarm via an MQTT Broker.
Eclipse Public License 1.0
73 stars 35 forks source link

No label report on MG5000 #7

Closed breizh33 closed 7 years ago

breizh33 commented 7 years ago

Hi,

When i run this script, the dictionnary send nothing like that :+1:

Labels detected for siteNameLabel: {1: ''} Labels detected for partitionLabel: {1: '', 2: ''}

I leave MG5050type in config.ini because it the same programming code that MG5000

If it's necessary, i have capture with wireshark, exchange winload on label request.

breizh33 commented 7 years ago

Send by winload :

Control -> System

0000 00 19 ba 02 fd e0 14 da e9 11 16 a1 08 00 45 00 ..............E. 0010 00 68 6f 1d 40 00 80 06 09 d9 c0 a8 00 37 c0 a8 .ho.@........7.. 0020 00 12 c4 da 27 10 7a 7c af 8f f1 7a 2b b9 50 18 ....'.z|...z+.P. 0030 f5 59 3b cb 00 00 aa 25 00 04 08 00 00 14 ee ee .Y;....%........ 0040 ee ee ee ee ee ee 50 00 00 10 00 00 00 00 00 00 ......P......... 0050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0060 00 00 00 00 00 00 00 00 00 00 60 ee ee ee ee ee ..........`..... 0070 ee ee ee ee ee ee ......

System -> Control

0000 14 da e9 11 16 a1 00 19 ba 02 fd e0 08 00 45 00 ..............E. 0010 00 28 c7 12 00 00 ff 06 73 23 c0 a8 00 12 c0 a8 .(......s#...... 0020 00 37 27 10 c4 da f1 7a 2b b9 7a 7c af cf 50 10 .7'....z+.z|..P. 0030 11 50 e9 7f 00 00 00 00 00 00 00 00 .P..........

System -> Control

0000 14 da e9 11 16 a1 00 19 ba 02 fd e0 08 00 45 00 ..............E. 0010 00 5d c7 13 00 00 ff 06 72 ed c0 a8 00 12 c0 a8 .]......r....... 0020 00 37 27 10 c4 da f1 7a 2b b9 7a 7c af cf 50 18 .7'....z+.z|..P. 0030 11 50 da 8f 00 00 aa 25 00 02 72 00 00 00 00 ee .P.....%..r..... 0040 ee ee ee ee ee ee 52 00 00 10 42 6f 69 74 69 65 ......R...Boitie 0050 72 20 20 20 20 20 20 20 20 20 53 69 72 65 6e 65 r Sirene 0060 20 20 20 20 20 20 20 20 20 20 f6

And with Python script :

Control -> System

00 19 ba 02 fd e0 b8 27 eb e6 72 93 08 00 45 00 .......'..r...E. 0010 00 68 83 50 40 00 40 06 35 7a c0 a8 00 63 c0 a8 .h.P@.@.5z...c.. 0020 00 12 e9 27 27 10 a6 a3 a3 4b 14 1b ab eb 50 18 ...''....K....P. 0030 72 10 82 20 00 00 aa 25 00 04 08 00 00 14 ee ee r.. ...%........ 0040 ee ee ee ee ee ee 50 00 00 10 00 00 00 00 00 00 ......P......... 0050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0060 00 00 00 00 00 00 00 00 00 00 60 ee ee ee ee ee ..........`..... 0070 ee ee ee ee ee ee ......

System -> Control

0000 b8 27 eb e6 72 93 00 19 ba 02 fd e0 08 00 45 00 .'..r.........E. 0010 00 28 f6 2a 00 00 ff 06 43 df c0 a8 00 12 c0 a8 .(.*....C....... 0020 00 63 27 10 e9 27 14 1b ab eb a6 a3 a3 8b 50 10 .c'..'........P. 0030 15 d0 fd d0 00 00 00 00 00 00 00 00 ............

System -> Control

0000 b8 27 eb e6 72 93 00 19 ba 02 fd e0 08 00 45 00 .'..r.........E. 0010 00 5d f6 2b 00 00 ff 06 43 a9 c0 a8 00 12 c0 a8 .].+....C....... 0020 00 63 27 10 e9 27 14 1b ab eb a6 a3 a3 8b 50 18 .c'..'........P. 0030 15 d0 13 b0 00 00 aa 25 00 02 72 00 00 00 00 ee .......%..r..... 0040 ee ee ee ee ee ee 70 00 10 00 00 00 00 00 00 00 ......p......... 0050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0060 00 00 00 00 00 00 00 00 00 00 80

I hope it can help to integrate MG5000

breizh33 commented 7 years ago

Integrate MG5000 is fully functionnal with these modifications : On ligne 289 : message = '\xa0\x50\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

On ligne 308 : message += '\x99\x99' (i dont know if it's contant or not, but it's functionnal on my install)

So @Tertiush, i leave you integrate in master code and close this issue

lalamper commented 7 years ago

@breizh33 I have exactly the same problem, however your modification did not work. What can be the problem?

lalamper commented 7 years ago

Update: I just discovered that if Panel and/or PC password has been set, label read will not work. After setting back to default values (0000/0000), script just works!

Please update your script to make it possible to enter codes.

Tertiush commented 7 years ago

Only the password is needed in the v2 code. However, I recall now that the script can only handle a password up to 16 characters I think. How long was yours, perhaps longer?

lalamper commented 7 years ago

There are three secrets in Paradox alarm systems equipped IP150 modul:

  1. IP150 modul password (can be a string, digit or mixed, default is 'paradox'), mine is set to 8 chars long. Stored in IP150 modul.
  2. Panel ID (fixed 4 digits length, default is 0000). Stored in alarm mainboard.
  3. PC password (fixed 4 digits length, default is 0000). Stored in alarm mainboard.

To connect from Babyware or Winload, both of them are requied.

For security reasons, I have changed them (2, 3) at the time of installation. In config file I entered IP150 modul password only. It could seemingly connect and I could see events, however labels were empty. After changing back Panel ID and PC password to default values (IP150 modul password remained the same) everything just started to work.

By the way, I can confirm that script perfectly works with MG5000.

Tertiush commented 7 years ago

That's awesome, thanks for the info!

On Mon, Dec 19, 2016, 21:45 lalamper notifications@github.com wrote:

There are three secrets in Paradox alarm systems equipped IP150 modul:

  1. IP150 modul password (can be a string, digit or mixed, default is 'paradox'), mine is set to 8 chars long. Stored in IP150 modul.
  2. Panel ID (fixed 4 digits length, default is 0000). Stored in alarm mainboard.
  3. PC password (fixed 4 digits length, default is 0000). Stored in alarm mainboard.

To connect from Babyware or Winload, both of them are requied.

For security reasons, I have changed it at the time of installation. In config file I entered IP150 modul password only. It could seemingly connect and I could see events, however labels were empty. After changing back to Panel ID and PC password to default values (IP150 modul password remained the same) everything just started to work.

By the way, I can confirm that script perfectly works with MG5000.

— You are receiving this because you were mentioned.

Reply to this email directly, view it on GitHub https://github.com/Tertiush/ParadoxIP150v2/issues/7#issuecomment-268059425, or mute the thread https://github.com/notifications/unsubscribe-auth/ALGOjIBw3nQVpXChu564EFFL3SEdANajks5rJt7ogaJpZM4LIbN4 .

lalamper commented 7 years ago

You are welcome. By the way, the next step is to connect it to Homekit/Homebridge.. do you have any experience with it? Homekit accessory needs to deal with MQTT.. Thanks!

Tertiush commented 7 years ago

Sorry no can do, never worked with homekit.

On Mon, Dec 19, 2016, 21:51 lalamper notifications@github.com wrote:

You are welcome. By the way, the next step is to connect it to Homekit/Homebridge.. do you have any experience with it? Homekit accessory needs to deal with MQTT.. Thanks!

— You are receiving this because you were mentioned.

Reply to this email directly, view it on GitHub https://github.com/Tertiush/ParadoxIP150v2/issues/7#issuecomment-268060683, or mute the thread https://github.com/notifications/unsubscribe-auth/ALGOjEf44T_fbWIM1Me6oEy6BPfaB8Ceks5rJuAlgaJpZM4LIbN4 .

lalamper commented 7 years ago

Ok, thanks.

One more thing. If you connect from iParadox app or via the website of IP150, you need only IP150 modul password and a valid user PIN code. In this case there is no need Panel ID and PC password.

I assume that your alarm system had the default secrets set, that is why you did not discover zero values when doing packet capture.

I will do some testing and let you know about Panel ID and PC password location in WinLoad communication.

breizh33 commented 7 years ago

If you need, the code to retrieve zone statut/ alarm statut / clock and batt. Inspire from @bioego

def keepAlive(self, Debug_Mode=0):
mqtt_msg = ''

    header = "\xaa\x25\x00\x04\x08\x00\x00\x14\xee\xee\xee\xee\xee\xee\xee\xee"

    message = "\x50\x00\x80"

    message += bytes(bytearray([self.aliveSeq]))

    message += "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"

   if self.aliveSeq <= 1 :
     reply_amount, headers, replys  = self.splitMessage(self.readDataRaw (header + self.format37ByteMessage(message),Debug_Mode))
     reply = headers[0]+replys[0]
     if reply[19] == '\x01' :
      mqtt_msg += ''
      if reply[33] == '\x00' :
       mqtt_msg += 'Disarm'
      elif reply[33] == '\x01' :
        mqtt_msg += 'Total'
      elif reply[33] == '\x02' or reply[32] == '\x03' or reply[32] == '\x06' :
        mqtt_msg += 'Not'
      elif reply[33] == '\x04' or reply[32] == '\x05' :
        mqtt_msg += 'Perimetral'
      elif reply[33] == '\x08' or reply[32] == '\x09' :
        mqtt_msg += 'Instant Armed'
      elif reply[33] > '\x10' :
        mqtt_msg += 'IN ALLARM!'
      client.publish("Paradox/Statut/Alarm", mqtt_msg, qos=0, retain=False)
     elif reply[19] ==  '\x00':
    #                //get date&time info
      mqtt_msg += '{'
      mqtt_msg += '\"Year\":'+ str(struct.unpack('b',reply[25])[0]) + str(struct.unpack('b',reply[26])[0])
      mqtt_msg += ',\"Month\":'+ str(struct.unpack('b',reply[27])[0])
      mqtt_msg += ',\"Day\":'+ str(struct.unpack('b',reply[28])[0])
      mqtt_msg += ',\"Hours\":'+ str(struct.unpack('b',reply[29])[0])
      mqtt_msg += ',\"Minutes\":'+ str(struct.unpack('b',reply[30])[0])+'}'
      client.publish("Paradox/Statut/Date", mqtt_msg, qos=0, retain=False)
    #                //get power & battery info
      mqtt_msg = '{'
    #                //VDC Voltage (FF= 20.3 - 00= 1.4 - 80= 10.9)
      percentageVDC = ((ord(reply[31]) / 255) * 18.9) + 1.4
      mqtt_msg += '\"VDC\":' + str(percentageVDC)
    #
    #                        //DC Voltage (FF= 22.8 - 00= 0.0 - 80= 11.5)
      percentageDC = (ord(reply[32]) / 255) * 22.8
      mqtt_msg += ',\"DC\":' + str(percentageDC)
    #
    #                //Battery Voltage (FF= 22.8 - 00= 0.0 - 80= 11.5)
      percentageBatt = (ord(reply[33]) / 255) * 22.8
      mqtt_msg += ',\"Batt\":' + str(percentageBatt)+'}}'
      client.publish("Paradox/Statut/Batt", mqtt_msg, qos=0, retain=False)

      mqtt_msg = '{'
      for j in range (0,4) :
       for i in range (0,8) :
          mqtt_msg += '\"'+self.eventmap.getzoneLabel(i+(8*j)+1)+'\"'+':'+ bin(int(hex(ord(reply[35+j])),16))[2:].zfill(8)[7-i]
          if i+(8*j)+1 <32 :
            mqtt_msg += ','
          else :
            mqtt_msg +='}'
      print 'Msg : ' + mqtt_msg
      client.publish("Paradox/Statut/Zones", mqtt_msg, qos=0, retain=False)
    else:

     self.sendData(header + message)

    self.aliveSeq += 1
    if self.aliveSeq > 6:
        self.aliveSeq = 0
MnrGreg commented 7 years ago

Hey @lalamper, @Tertiush I'm putting together a HomeKit/Homebridge Accessory plugin to talk to ParadoxIP150v2 via MQTT. Check it out at https://github.com/mnrgreg/homebridge-paradox-security-system

lalamper commented 7 years ago

Hi MnrGreg, Thanks for the information, this is what I was waiting for! :) I will check it out soon.

Tertiush commented 7 years ago

this issue has been quiet so some time so closing it for now