diff --git a/docs/build/doctrees/alarmdecoder.doctree b/docs/build/doctrees/alarmdecoder.doctree index 5e8fd9a..9182adb 100644 Binary files a/docs/build/doctrees/alarmdecoder.doctree and b/docs/build/doctrees/alarmdecoder.doctree differ diff --git a/docs/build/doctrees/environment.pickle b/docs/build/doctrees/environment.pickle index 7617511..d5ec4eb 100644 Binary files a/docs/build/doctrees/environment.pickle and b/docs/build/doctrees/environment.pickle differ diff --git a/docs/build/html/_modules/alarmdecoder/decoder.html b/docs/build/html/_modules/alarmdecoder/decoder.html index 85ebd47..ff98d53 100644 --- a/docs/build/html/_modules/alarmdecoder/decoder.html +++ b/docs/build/html/_modules/alarmdecoder/decoder.html @@ -62,6 +62,7 @@ from .util import InvalidMessageError from .messages import Message, ExpanderMessage, RFMessage, LRRMessage from .zonetracking import Zonetracker +from .panels import PANEL_TYPES, ADEMCO, DSC
[docs]class AlarmDecoder(object): @@ -129,6 +130,8 @@ """The status of the devices LRR emulation.""" deduplicate = False """The status of message deduplication as configured on the device.""" + mode = ADEMCO + """The panel mode that the AlarmDecoder is in. Currently supports ADEMCO and DSC.""" def __init__(self, device): """ @@ -159,6 +162,7 @@ self.emulate_relay = [False for x in range(4)] self.emulate_lrr = False self.deduplicate = False + self.mode = ADEMCO def __enter__(self): """ @@ -271,20 +275,16 @@ config_entries = [] # HACK: This is ugly.. but I can't think of an elegant way of doing it. - config_entries.append(('ADDRESS', - '{0}'.format(self.address))) - config_entries.append(('CONFIGBITS', - '{0:x}'.format(self.configbits))) - config_entries.append(('MASK', - '{0:x}'.format(self.address_mask))) + config_entries.append(('ADDRESS', '{0}'.format(self.address))) + config_entries.append(('CONFIGBITS', '{0:x}'.format(self.configbits))) + config_entries.append(('MASK', '{0:x}'.format(self.address_mask))) config_entries.append(('EXP', ''.join(['Y' if z else 'N' for z in self.emulate_zone]))) config_entries.append(('REL', ''.join(['Y' if r else 'N' for r in self.emulate_relay]))) - config_entries.append(('LRR', - 'Y' if self.emulate_lrr else 'N')) - config_entries.append(('DEDUPLICATE', - 'Y' if self.deduplicate else 'N')) + config_entries.append(('LRR', 'Y' if self.emulate_lrr else 'N')) + config_entries.append(('DEDUPLICATE', 'Y' if self.deduplicate else 'N')) + config_entries.append(('MODE', PANEL_TYPES.keys()[PANEL_TYPES.values().index(self.mode)])) config_string = '&'.join(['='.join(t) for t in config_entries]) @@ -479,6 +479,8 @@ self.emulate_lrr = (val == 'Y') elif key == 'DEDUPLICATE': self.deduplicate = (val == 'Y') + elif key == 'MODE': + self.mode = PANEL_TYPES[val] self.on_config_received() diff --git a/docs/build/html/_modules/alarmdecoder/messages.html b/docs/build/html/_modules/alarmdecoder/messages.html index 4819440..24309e3 100644 --- a/docs/build/html/_modules/alarmdecoder/messages.html +++ b/docs/build/html/_modules/alarmdecoder/messages.html @@ -65,6 +65,7 @@ import datetime from .util import InvalidMessageError +from .panels import PANEL_TYPES, ADEMCO, DSC
[docs]class BaseMessage(object): @@ -144,13 +145,17 @@ """Indicates whether or not there are zones that require attention.""" perimeter_only = False """Indicates whether or not the perimeter is armed.""" + system_fault = False + """Indicates whether a system fault has occurred.""" + panel_type = ADEMCO + """Indicates which panel type was the source of this message.""" numeric_code = None """The numeric code associated with the message.""" text = None """The human-readable text to be displayed on the panel LCD.""" cursor_location = -1 """Current cursor location on the keypad.""" - mask = None + mask = 0xFFFFFFFF """Address mask this message is intended for.""" bitfield = None """The bitfield associated with this message.""" @@ -186,7 +191,6 @@ raise InvalidMessageError('Received invalid message: {0}'.format(data)) header, self.bitfield, self.numeric_code, self.panel_data, alpha = match.group(1, 2, 3, 4, 5) - self.mask = int(self.panel_data[3:3+8], 16) is_bit_set = lambda bit: not self.bitfield[bit] == "0" @@ -207,12 +211,18 @@ self.fire_alarm = is_bit_set(14) self.check_zone = is_bit_set(15) self.perimeter_only = is_bit_set(16) - # bits 17-20 unused. + self.system_fault = is_bit_set(17) + if self.bitfield[18] in PANEL_TYPES.keys(): + self.panel_type = PANEL_TYPES[self.bitfield[18]] + # pos 20-21 - Unused. self.text = alpha.strip('"') - if int(self.panel_data[19:21], 16) & 0x01 > 0: - # Current cursor location on the alpha display. - self.cursor_location = int(self.bitfield[21:23], 16) + if self.panel_type == ADEMCO: + self.mask = int(self.panel_data[3:3+8], 16) + + if int(self.panel_data[19:21], 16) & 0x01 > 0: + # Current cursor location on the alpha display. + self.cursor_location = int(self.bitfield[21:23], 16)
[docs] def dict(self, **kwargs): """ diff --git a/docs/build/html/alarmdecoder.html b/docs/build/html/alarmdecoder.html index 0a156be..7791166 100644 --- a/docs/build/html/alarmdecoder.html +++ b/docs/build/html/alarmdecoder.html @@ -296,6 +296,12 @@

The status of message deduplication as configured on the device.

+
+
+mode = 0
+

The panel mode that the AlarmDecoder is in. Currently supports ADEMCO and DSC.

+
+
id[source]
@@ -1246,6 +1252,18 @@ devices.

Indicates whether or not the perimeter is armed.

+
+
+system_fault = False
+

Indicates whether a system fault has occurred.

+
+ +
+
+panel_type = 0
+

Indicates which panel type was the source of this message.

+
+
numeric_code = None
@@ -1266,7 +1284,7 @@ devices.

-mask = None
+mask = 4294967295

Address mask this message is intended for.

diff --git a/docs/build/html/genindex.html b/docs/build/html/genindex.html index 39c4026..7c1defc 100644 --- a/docs/build/html/genindex.html +++ b/docs/build/html/genindex.html @@ -549,10 +549,14 @@
mask (alarmdecoder.messages.Message attribute)
+ +
Message (class in alarmdecoder.messages) +
+
-
Message (class in alarmdecoder.messages) +
mode (alarmdecoder.decoder.AlarmDecoder attribute)
@@ -740,6 +744,10 @@ +
panel_type (alarmdecoder.messages.Message attribute) +
+ +
partition (alarmdecoder.messages.LRRMessage attribute)
@@ -883,12 +891,12 @@
STAGE_DONE (alarmdecoder.util.Firmware attribute)
- -
STAGE_LOAD (alarmdecoder.util.Firmware attribute)
+
+
STAGE_START (alarmdecoder.util.Firmware attribute)
@@ -935,6 +943,10 @@
supervision (alarmdecoder.messages.RFMessage attribute)
+ +
system_fault (alarmdecoder.messages.Message attribute) +
+
diff --git a/docs/build/html/objects.inv b/docs/build/html/objects.inv index d83f83c..2f1eee7 100644 Binary files a/docs/build/html/objects.inv and b/docs/build/html/objects.inv differ diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js index c170c12..414a130 100644 --- a/docs/build/html/searchindex.js +++ b/docs/build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({envversion:42,terms:{represent:1,all:[1,0],code:[1,3],sleep:3,on_boot:1,stage_don:1,backlight:1,zone:1,readabl:1,send:1,program:1,x03:1,x02:1,x01:1,sent:1,x04:1,sourc:[0,1,3],string:1,clear_zon:1,fals:1,on_messag:[1,3],perimeter_onli:1,lrr:1,level:1,list:1,upload:1,"try":[1,3],emul:1,expandermessag:1,pleas:3,second:1,port:1,supervis:1,ad2seri:[1,3],current:1,"new":0,method:1,can:0,ser2sock:1,perimet:1,timeouterror:1,usbdevic:[1,3],entry_delay_off:1,here:3,on_config_receiv:1,address:1,path:1,valu:1,fire_alarm:1,search:[1,3],sender:[3,0],prior:1,def:[1,3],invalidmessageerror:1,via:1,vid:1,appli:1,filenam:1,api:3,famili:[1,3],key_pan:1,from:[1,3],usb:[1,3],commun:1,is_reader_al:1,handler:[3,0],call:[1,0],type:1,more:3,relat:1,stage_boot:1,pkei:1,flag:1,templat:1,relai:1,actual:1,cach:1,serialdevic:1,must:0,none:[1,0],retriev:[1,3],key_f2:1,on_restor:1,restor:1,dev:1,itself:0,x05:1,aliv:1,backlight_on:1,process:1,indic:1,high:1,cursor_loc:1,serial:1,occur:1,delai:1,progress_callback:1,secur:3,anoth:1,simulate_wire_problem:1,write:1,purg:1,low:1,instead:0,panic:1,updat:1,product:1,recogn:1,x509:1,ftdi:1,befor:1,attent:1,mai:3,data:1,classmethod:1,ssl_ca:1,issu:1,callback:1,"switch":1,ttimeout:1,socketdevic:1,disarm:1,jpath:1,through:1,paramet:1,bypass:1,on_read:1,main:[1,3],"return":1,python:3,timestamp:1,on_bypass:1,detach:1,name:1,revert:1,on_pan:1,authent:1,stage_wait:1,mode:1,timeout:1,found:[1,3],nodeviceerror:1,"static":1,connect:1,our:1,read_lin:1,event:1,ad2pi:[1,3],reboot:1,content:3,reader:1,print:3,factori:1,written:1,standard:1,on_clos:1,base:[1,0],dictionari:1,"byte":1,armed_hom:1,on_detach:1,key_f4:1,key_f1:1,thread:1,key_f3:1,emulate_relai:1,openssl:1,readthread:1,get_config:1,on_rfx_messag:1,find_al:1,ad2usb:[1,3],first:[1,3],oper:0,rang:1,number:1,done:1,on_writ:1,configbit:1,open:[1,3],on_power_chang:1,differ:1,associ:1,interact:3,system:1,wrapper:1,attach:1,start_detect:1,on_open:1,termin:3,battery_low:1,specifi:1,rfmessag:1,on_fir:1,provid:[1,3],remov:[1,0],charact:1,project:3,save_config:1,bitfield:1,raw:[1,3],dedupl:1,expir:1,"__main__":3,programming_mod:1,also:[1,0],exampl:3,which:1,event_data:1,channel:1,thi:[1,3],index:3,buffer:1,object:[1,0],most:1,detect:1,basemessag:1,"class":[1,0],armed_awai:1,doc:0,clear:1,request:1,emulate_lrr:1,on_low_batteri:1,text:1,ssl_kei:1,radio:1,find:[1,3],locat:1,configur:1,solut:1,fault_zon:1,should:1,dict:1,serial_numb:1,stop:1,ssl:1,"import":3,report:1,requir:[1,3],fileno:1,enabl:1,earg:0,whether:1,common:1,partit:1,contain:1,alarm_event_occur:1,certif:1,set:[1,3],keypad:1,ac_pow:1,on_alarm:1,see:3,arg:0,close:1,arm:1,stop_read:1,pyseri:1,statu:1,wire:1,pattern:1,keypress:1,state:1,between:1,progress:1,awai:1,kei:1,numer:1,last:1,fault:1,batteri:1,identif:1,detectthread:1,been:1,beep:1,trigger:1,basic:3,no_reader_thread:1,fire:[1,0],commerror:1,chime_on:1,convert:1,func:0,present:1,sound:1,check_zon:1,on_fault:1,cursor:1,defin:0,"while":[1,3],stage_upload:1,error:1,loop:1,readi:1,kwarg:[1,0],ftdi_vendor_id:1,on_zone_fault:1,alarm_sound:1,panel_data:1,author:1,receiv:1,belong:1,handl:[1,3],status:1,finish:1,expans:1,rais:1,user:1,expand:1,lower:1,entri:1,client:1,zone_bypass:1,usual:1,boot:1,human:1,baudrat:1,expos:1,field:1,"_on_open":1,except:[1,3],on_attach:1,add:0,board:1,match:1,applic:3,vendor:1,around:1,format:1,read:1,numeric_cod:1,lcd:1,bit:1,ad2:[1,3],like:0,singl:1,page:3,crypto:1,sampl:3,fire_timeout:1,home:1,librari:3,definit:1,pyftdi:1,localhost:1,run:1,power:1,event_typ:1,stage_load:1,ssl_certif:1,"__name__":3,describ:1,expander_to_zon:1,simul:1,stage_start:1,address_mask:1,"float":1,automat:1,chime:1,support:[1,3],on_relay_chang:1,"long":1,start:1,interfac:1,includ:3,on_expander_messag:1,stop_detect:1,"function":[1,0],tupl:1,eventhandl:0,line:1,"true":3,emulate_zon:1,"default":1,displai:1,purge_buff:1,below:3,alarm:1,"int":1,descript:1,pid:1,repres:1,on_zone_restor:1,exist:0,read_timeout:1,ftdi_product_id:1,check:1,battery_timeout:1,handle_messag:3,when:1,invalid:1,on_disarm:1,bool:1,you:0,intend:1,firmwar:1,track:1,on_arm:1,on_sending_receiv:1,directori:3,mask:1,lrrmessag:1,on_lrr_messag:1,obj:0,time:3},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:attribute","4":"py:exception","5":"py:classmethod","6":"py:staticmethod"},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","attribute","Python attribute"],"4":["py","exception","Python exception"],"5":["py","classmethod","Python class method"],"6":["py","staticmethod","Python static method"]},filenames:["alarmdecoder.event","alarmdecoder","modules","index"],titles:["event Package","alarmdecoder Package","alarmdecoder","Welcome to Alarm Decoder’s documentation!"],objects:{"alarmdecoder.messages.LRRMessage":{partition:[1,3,1,""],dict:[1,2,1,""],event_data:[1,3,1,""],event_type:[1,3,1,""]},"alarmdecoder.messages.BaseMessage":{raw:[1,3,1,""],dict:[1,2,1,""],timestamp:[1,3,1,""]},"alarmdecoder.messages.ExpanderMessage":{ZONE:[1,3,1,""],RELAY:[1,3,1,""],value:[1,3,1,""],dict:[1,2,1,""],address:[1,3,1,""],type:[1,3,1,""],channel:[1,3,1,""]},"alarmdecoder.event.event":{EventHandler:[0,1,1,""],Event:[0,1,1,""]},"alarmdecoder.zonetracking.Zone":{status:[1,3,1,""],STATUS:[1,3,1,""],name:[1,3,1,""],zone:[1,3,1,""],timestamp:[1,3,1,""],CLEAR:[1,3,1,""],FAULT:[1,3,1,""],CHECK:[1,3,1,""]},"alarmdecoder.devices.SerialDevice":{fileno:[1,2,1,""],BAUDRATE:[1,3,1,""],read:[1,2,1,""],read_line:[1,2,1,""],write:[1,2,1,""],find_all:[1,6,1,""],"interface":[1,3,1,""],close:[1,2,1,""],open:[1,2,1,""]},"alarmdecoder.zonetracking":{Zonetracker:[1,1,1,""],Zone:[1,1,1,""]},"alarmdecoder.zonetracking.Zonetracker":{faulted:[1,3,1,""],on_restore:[1,3,1,""],update:[1,2,1,""],zones:[1,3,1,""],on_fault:[1,3,1,""],EXPIRE:[1,3,1,""],expander_to_zone:[1,2,1,""]},"alarmdecoder.devices.Device.ReadThread":{READ_TIMEOUT:[1,3,1,""],stop:[1,2,1,""],run:[1,2,1,""]},"alarmdecoder.event":{event:[0,0,0,"-"]},"alarmdecoder.messages":{Message:[1,1,1,""],LRRMessage:[1,1,1,""],RFMessage:[1,1,1,""],ExpanderMessage:[1,1,1,""],BaseMessage:[1,1,1,""]},"alarmdecoder.devices":{Device:[1,1,1,""],SocketDevice:[1,1,1,""],USBDevice:[1,1,1,""],SerialDevice:[1,1,1,""]},"alarmdecoder.devices.USBDevice.DetectThread":{run:[1,2,1,""],stop:[1,2,1,""],on_attached:[1,3,1,""],on_detached:[1,3,1,""]},alarmdecoder:{zonetracking:[1,0,0,"-"],messages:[1,0,0,"-"],devices:[1,0,0,"-"],util:[1,0,0,"-"],decoder:[1,0,0,"-"],panels:[1,0,0,"-"],event:[0,0,0,"-"]},"alarmdecoder.decoder.AlarmDecoder":{configbits:[1,3,1,""],on_rfx_message:[1,3,1,""],fault_zone:[1,2,1,""],on_expander_message:[1,3,1,""],on_open:[1,3,1,""],save_config:[1,2,1,""],on_alarm:[1,3,1,""],on_arm:[1,3,1,""],on_sending_received:[1,3,1,""],KEY_PANIC:[1,3,1,""],fire_timeout:[1,3,1,""],close:[1,2,1,""],open:[1,2,1,""],id:[1,3,1,""],on_power_changed:[1,3,1,""],battery_timeout:[1,3,1,""],KEY_F1:[1,3,1,""],KEY_F2:[1,3,1,""],KEY_F3:[1,3,1,""],on_message:[1,3,1,""],reboot:[1,2,1,""],send:[1,2,1,""],on_zone_restore:[1,3,1,""],on_disarm:[1,3,1,""],on_fire:[1,3,1,""],on_write:[1,3,1,""],on_read:[1,3,1,""],on_lrr_message:[1,3,1,""],KEY_F4:[1,3,1,""],clear_zone:[1,2,1,""],on_zone_fault:[1,3,1,""],on_config_received:[1,3,1,""],emulate_relay:[1,3,1,""],on_close:[1,3,1,""],on_bypass:[1,3,1,""],address:[1,3,1,""],BATTERY_TIMEOUT:[1,3,1,""],on_panic:[1,3,1,""],on_relay_changed:[1,3,1,""],on_low_battery:[1,3,1,""],emulate_lrr:[1,3,1,""],deduplicate:[1,3,1,""],emulate_zone:[1,3,1,""],get_config:[1,2,1,""],address_mask:[1,3,1,""],FIRE_TIMEOUT:[1,3,1,""],on_boot:[1,3,1,""]},"alarmdecoder.devices.SocketDevice":{ssl_certificate:[1,3,1,""],ssl_key:[1,3,1,""],fileno:[1,2,1,""],read:[1,2,1,""],ssl_ca:[1,3,1,""],read_line:[1,2,1,""],ssl:[1,3,1,""],write:[1,2,1,""],"interface":[1,3,1,""],close:[1,2,1,""],open:[1,2,1,""]},"alarmdecoder.devices.USBDevice":{fileno:[1,2,1,""],BAUDRATE:[1,3,1,""],description:[1,3,1,""],read:[1,2,1,""],DetectThread:[1,1,1,""],stop_detection:[1,5,1,""],devices:[1,5,1,""],start_detection:[1,5,1,""],read_line:[1,2,1,""],write:[1,2,1,""],find_all:[1,5,1,""],FTDI_VENDOR_ID:[1,3,1,""],serial_number:[1,3,1,""],"interface":[1,3,1,""],close:[1,2,1,""],FTDI_PRODUCT_ID:[1,3,1,""],open:[1,2,1,""],find:[1,5,1,""]},"alarmdecoder.messages.Message":{backlight_on:[1,3,1,""],alarm_event_occurred:[1,3,1,""],programming_mode:[1,3,1,""],text:[1,3,1,""],bitfield:[1,3,1,""],armed_home:[1,3,1,""],alarm_sounding:[1,3,1,""],ready:[1,3,1,""],zone_bypassed:[1,3,1,""],panel_data:[1,3,1,""],check_zone:[1,3,1,""],numeric_code:[1,3,1,""],dict:[1,2,1,""],battery_low:[1,3,1,""],chime_on:[1,3,1,""],entry_delay_off:[1,3,1,""],perimeter_only:[1,3,1,""],fire_alarm:[1,3,1,""],ac_power:[1,3,1,""],beeps:[1,3,1,""],mask:[1,3,1,""],armed_away:[1,3,1,""],cursor_location:[1,3,1,""]},"alarmdecoder.devices.Device":{stop_reader:[1,2,1,""],on_open:[1,3,1,""],on_write:[1,3,1,""],ReadThread:[1,1,1,""],on_close:[1,3,1,""],on_read:[1,3,1,""],close:[1,2,1,""],is_reader_alive:[1,2,1,""],id:[1,3,1,""]},"alarmdecoder.messages.RFMessage":{battery:[1,3,1,""],value:[1,3,1,""],dict:[1,2,1,""],supervision:[1,3,1,""],serial_number:[1,3,1,""],loop:[1,3,1,""]},"alarmdecoder.decoder":{AlarmDecoder:[1,1,1,""]},"alarmdecoder.event.event.EventHandler":{fire:[0,2,1,""],add:[0,2,1,""],remove:[0,2,1,""]},"alarmdecoder.util.Firmware":{STAGE_LOAD:[1,3,1,""],upload:[1,6,1,""],STAGE_BOOT:[1,3,1,""],STAGE_START:[1,3,1,""],STAGE_UPLOADING:[1,3,1,""],STAGE_WAITING:[1,3,1,""],STAGE_DONE:[1,3,1,""]},"alarmdecoder.util":{CommError:[1,4,1,""],Firmware:[1,1,1,""],TimeoutError:[1,4,1,""],NoDeviceError:[1,4,1,""],InvalidMessageError:[1,4,1,""]}},titleterms:{alarmdecod:[1,2],welcom:3,alarm:3,devic:1,messag:1,event:0,util:1,packag:[1,0],decod:[1,3],zonetrack:1,indic:3,tabl:3,document:3,modul:[1,0],panel:1}}) \ No newline at end of file +Search.setIndex({envversion:42,terms:{represent:3,all:[0,3],code:[3,2],sleep:2,on_boot:3,stage_don:3,backlight:3,zone:3,readabl:3,send:3,program:3,x03:3,x02:3,x01:3,sent:3,x04:3,sourc:[0,2,3],string:3,clear_zon:3,fals:3,on_messag:[3,2],perimeter_onli:3,lrr:3,level:3,list:3,upload:3,dsc:3,"try":[3,2],emul:3,expandermessag:3,pleas:2,second:3,port:3,supervis:3,ad2seri:[3,2],current:3,"new":0,method:3,ser2sock:3,perimet:3,timeouterror:3,usbdevic:[3,2],entry_delay_off:3,here:2,on_config_receiv:3,address:3,path:3,valu:3,fire_alarm:3,search:[3,2],sender:[0,2],prior:3,def:[3,2],invalidmessageerror:3,via:3,vid:3,appli:3,filenam:3,api:2,famili:[3,2],key_pan:3,from:[3,2],usb:[3,2],commun:3,is_reader_al:3,handler:[0,2],call:[0,3],type:3,more:2,relat:3,stage_boot:3,pkei:3,flag:3,templat:3,relai:3,expander_to_zon:3,cach:3,serialdevic:3,must:0,none:[0,3],retriev:[3,2],thread:3,on_restor:3,restor:3,dev:3,itself:0,can:0,aliv:3,backlight_on:3,process:3,indic:[],high:3,cursor_loc:3,serial:3,occur:3,delai:3,progress_callback:3,secur:2,anoth:3,simulate_wire_problem:3,write:3,purg:3,instead:0,panic:3,panel_typ:3,updat:3,product:3,recogn:3,x509:3,ftdi:3,befor:3,attent:3,mai:2,associ:3,classmethod:3,ssl_ca:3,issu:3,callback:3,"switch":3,ttimeout:3,socketdevic:3,disarm:3,jpath:3,through:3,paramet:3,bypass:3,on_read:3,main:[3,2],"return":3,python:2,timestamp:3,on_bypass:3,detach:3,name:3,revert:3,on_pan:3,authent:3,stage_wait:3,mode:3,timeout:3,found:[3,2],nodeviceerror:3,"static":3,connect:3,our:3,read_lin:3,event:[],ad2pi:[3,2],reboot:3,content:2,reader:3,print:2,factori:3,state:3,standard:3,on_clos:3,base:[0,3],dictionari:3,"byte":3,armed_hom:3,on_detach:3,key_f4:3,key_f1:3,key_f2:3,key_f3:3,emulate_relai:3,openssl:3,readthread:3,get_config:3,on_rfx_messag:3,find_al:3,ad2usb:[3,2],first:[3,2],oper:0,rang:3,number:3,done:3,on_writ:3,configbit:3,open:[3,2],on_power_chang:3,differ:3,data:3,interact:2,system:3,wrapper:3,attach:3,start_detect:3,on_open:3,termin:2,battery_low:3,specifi:3,rfmessag:3,on_fir:3,provid:[3,2],remov:[0,3],charact:3,project:2,save_config:3,bitfield:3,check_zon:3,on_fault:3,expir:3,"__main__":2,programming_mod:3,also:[0,3],exampl:2,which:3,event_data:3,channel:3,thi:[3,2],index:2,buffer:3,object:[0,3],most:3,detect:3,basemessag:3,"class":[0,3],armed_awai:3,doc:0,clear:3,request:3,emulate_lrr:3,on_low_batteri:3,text:3,ssl_kei:3,radio:3,find:[3,2],locat:3,configur:3,solut:3,fault_zon:3,should:3,dict:3,serial_numb:3,stop:3,ssl:3,"import":2,report:3,requir:[3,2],fileno:3,enabl:3,earg:0,"default":3,common:3,partit:3,contain:3,alarm_event_occur:3,certif:3,set:[3,2],keypad:3,ac_pow:3,displai:3,see:2,arg:0,close:3,arm:3,stop_read:3,pyseri:3,statu:3,wire:3,pattern:3,keypress:3,written:3,between:3,progress:3,awai:3,kei:3,numer:3,last:3,fault:3,batteri:3,on_attach:3,detectthread:3,been:3,beep:3,trigger:3,basic:2,no_reader_thread:3,fire:[0,3],commerror:3,chime_on:3,convert:3,func:0,present:3,sound:3,raw:[3,2],dedupl:3,cursor:3,defin:0,"while":[3,2],stage_upload:3,error:3,loop:3,readi:3,kwarg:[0,3],ftdi_vendor_id:3,on_zone_fault:3,alarm_sound:3,panel_data:3,author:3,receiv:3,belong:3,handl:[3,2],status:3,finish:3,expans:3,rais:3,user:3,expand:3,lower:3,entri:3,client:3,zone_bypass:3,usual:3,when:3,human:3,baudrat:3,expos:3,on_disarm:3,"_on_open":3,except:[3,2],identif:3,add:0,board:3,match:3,applic:2,vendor:3,around:3,format:3,read:3,numeric_cod:3,lcd:3,bit:3,ad2:[3,2],like:0,singl:3,page:2,crypto:3,sampl:2,system_fault:3,fire_timeout:3,home:3,librari:2,definit:3,pyftdi:3,localhost:3,run:3,power:3,event_typ:3,stage_load:3,ssl_certif:3,"__name__":2,describ:3,actual:3,simul:3,stage_start:3,includ:2,address_mask:3,"float":3,automat:3,chime:3,support:[3,2],on_relay_chang:3,"long":3,start:3,interfac:3,low:3,on_expander_messag:3,stop_detect:3,"function":[0,3],tupl:3,eventhandl:0,line:3,"true":2,emulate_zon:3,whether:3,on_alarm:3,purge_buff:3,below:2,alarm:[],"int":3,mask:3,x05:3,pid:3,repres:3,on_zone_restor:3,exist:0,ademco:3,read_timeout:3,ftdi_product_id:3,check:3,battery_timeout:3,handle_messag:2,boot:3,invalid:3,field:3,bool:3,you:0,intend:3,firmwar:3,track:3,on_arm:3,on_sending_receiv:3,directori:2,descript:3,lrrmessag:3,on_lrr_messag:3,obj:0,time:2},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:attribute","4":"py:exception","5":"py:classmethod","6":"py:staticmethod"},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","attribute","Python attribute"],"4":["py","exception","Python exception"],"5":["py","classmethod","Python class method"],"6":["py","staticmethod","Python static method"]},filenames:["alarmdecoder.event","modules","index","alarmdecoder"],titles:["event Package","alarmdecoder","Welcome to Alarm Decoder’s documentation!","alarmdecoder Package"],objects:{"alarmdecoder.messages.LRRMessage":{partition:[3,3,1,""],dict:[3,2,1,""],event_data:[3,3,1,""],event_type:[3,3,1,""]},"alarmdecoder.messages.BaseMessage":{raw:[3,3,1,""],dict:[3,2,1,""],timestamp:[3,3,1,""]},"alarmdecoder.messages.ExpanderMessage":{ZONE:[3,3,1,""],RELAY:[3,3,1,""],value:[3,3,1,""],dict:[3,2,1,""],address:[3,3,1,""],type:[3,3,1,""],channel:[3,3,1,""]},"alarmdecoder.event.event":{EventHandler:[0,1,1,""],Event:[0,1,1,""]},"alarmdecoder.zonetracking.Zone":{status:[3,3,1,""],STATUS:[3,3,1,""],name:[3,3,1,""],zone:[3,3,1,""],timestamp:[3,3,1,""],CLEAR:[3,3,1,""],FAULT:[3,3,1,""],CHECK:[3,3,1,""]},"alarmdecoder.devices.SerialDevice":{fileno:[3,2,1,""],BAUDRATE:[3,3,1,""],read:[3,2,1,""],read_line:[3,2,1,""],write:[3,2,1,""],find_all:[3,6,1,""],"interface":[3,3,1,""],close:[3,2,1,""],open:[3,2,1,""]},"alarmdecoder.zonetracking":{Zonetracker:[3,1,1,""],Zone:[3,1,1,""]},"alarmdecoder.zonetracking.Zonetracker":{faulted:[3,3,1,""],on_restore:[3,3,1,""],update:[3,2,1,""],zones:[3,3,1,""],on_fault:[3,3,1,""],EXPIRE:[3,3,1,""],expander_to_zone:[3,2,1,""]},"alarmdecoder.devices.Device.ReadThread":{READ_TIMEOUT:[3,3,1,""],stop:[3,2,1,""],run:[3,2,1,""]},"alarmdecoder.event":{event:[0,0,0,"-"]},"alarmdecoder.messages":{Message:[3,1,1,""],LRRMessage:[3,1,1,""],RFMessage:[3,1,1,""],ExpanderMessage:[3,1,1,""],BaseMessage:[3,1,1,""]},"alarmdecoder.devices":{Device:[3,1,1,""],SocketDevice:[3,1,1,""],USBDevice:[3,1,1,""],SerialDevice:[3,1,1,""]},"alarmdecoder.devices.USBDevice.DetectThread":{stop:[3,2,1,""],run:[3,2,1,""],on_attached:[3,3,1,""],on_detached:[3,3,1,""]},alarmdecoder:{zonetracking:[3,0,0,"-"],messages:[3,0,0,"-"],devices:[3,0,0,"-"],util:[3,0,0,"-"],decoder:[3,0,0,"-"],panels:[3,0,0,"-"],event:[0,0,0,"-"]},"alarmdecoder.decoder.AlarmDecoder":{configbits:[3,3,1,""],on_rfx_message:[3,3,1,""],fault_zone:[3,2,1,""],on_expander_message:[3,3,1,""],on_open:[3,3,1,""],save_config:[3,2,1,""],on_alarm:[3,3,1,""],on_arm:[3,3,1,""],on_sending_received:[3,3,1,""],KEY_PANIC:[3,3,1,""],fire_timeout:[3,3,1,""],close:[3,2,1,""],open:[3,2,1,""],id:[3,3,1,""],on_power_changed:[3,3,1,""],BATTERY_TIMEOUT:[3,3,1,""],KEY_F1:[3,3,1,""],KEY_F2:[3,3,1,""],KEY_F3:[3,3,1,""],on_message:[3,3,1,""],reboot:[3,2,1,""],send:[3,2,1,""],on_zone_restore:[3,3,1,""],on_disarm:[3,3,1,""],on_fire:[3,3,1,""],on_write:[3,3,1,""],on_read:[3,3,1,""],on_lrr_message:[3,3,1,""],KEY_F4:[3,3,1,""],clear_zone:[3,2,1,""],on_zone_fault:[3,3,1,""],on_config_received:[3,3,1,""],emulate_relay:[3,3,1,""],on_close:[3,3,1,""],on_bypass:[3,3,1,""],address:[3,3,1,""],battery_timeout:[3,3,1,""],on_panic:[3,3,1,""],on_relay_changed:[3,3,1,""],on_low_battery:[3,3,1,""],emulate_lrr:[3,3,1,""],deduplicate:[3,3,1,""],emulate_zone:[3,3,1,""],get_config:[3,2,1,""],mode:[3,3,1,""],address_mask:[3,3,1,""],FIRE_TIMEOUT:[3,3,1,""],on_boot:[3,3,1,""]},"alarmdecoder.devices.SocketDevice":{ssl_certificate:[3,3,1,""],ssl_key:[3,3,1,""],fileno:[3,2,1,""],read:[3,2,1,""],ssl_ca:[3,3,1,""],read_line:[3,2,1,""],ssl:[3,3,1,""],write:[3,2,1,""],"interface":[3,3,1,""],close:[3,2,1,""],open:[3,2,1,""]},"alarmdecoder.devices.USBDevice":{fileno:[3,2,1,""],BAUDRATE:[3,3,1,""],description:[3,3,1,""],read:[3,2,1,""],DetectThread:[3,1,1,""],stop_detection:[3,5,1,""],devices:[3,5,1,""],start_detection:[3,5,1,""],read_line:[3,2,1,""],write:[3,2,1,""],find_all:[3,5,1,""],FTDI_VENDOR_ID:[3,3,1,""],serial_number:[3,3,1,""],"interface":[3,3,1,""],close:[3,2,1,""],FTDI_PRODUCT_ID:[3,3,1,""],open:[3,2,1,""],find:[3,5,1,""]},"alarmdecoder.messages.Message":{backlight_on:[3,3,1,""],alarm_event_occurred:[3,3,1,""],programming_mode:[3,3,1,""],text:[3,3,1,""],bitfield:[3,3,1,""],armed_home:[3,3,1,""],alarm_sounding:[3,3,1,""],ready:[3,3,1,""],zone_bypassed:[3,3,1,""],panel_data:[3,3,1,""],check_zone:[3,3,1,""],numeric_code:[3,3,1,""],dict:[3,2,1,""],battery_low:[3,3,1,""],chime_on:[3,3,1,""],entry_delay_off:[3,3,1,""],perimeter_only:[3,3,1,""],fire_alarm:[3,3,1,""],ac_power:[3,3,1,""],beeps:[3,3,1,""],mask:[3,3,1,""],system_fault:[3,3,1,""],armed_away:[3,3,1,""],panel_type:[3,3,1,""],cursor_location:[3,3,1,""]},"alarmdecoder.devices.Device":{stop_reader:[3,2,1,""],on_open:[3,3,1,""],on_write:[3,3,1,""],ReadThread:[3,1,1,""],on_close:[3,3,1,""],on_read:[3,3,1,""],close:[3,2,1,""],is_reader_alive:[3,2,1,""],id:[3,3,1,""]},"alarmdecoder.messages.RFMessage":{battery:[3,3,1,""],value:[3,3,1,""],dict:[3,2,1,""],supervision:[3,3,1,""],serial_number:[3,3,1,""],loop:[3,3,1,""]},"alarmdecoder.decoder":{AlarmDecoder:[3,1,1,""]},"alarmdecoder.event.event.EventHandler":{fire:[0,2,1,""],add:[0,2,1,""],remove:[0,2,1,""]},"alarmdecoder.util.Firmware":{STAGE_LOAD:[3,3,1,""],upload:[3,6,1,""],STAGE_BOOT:[3,3,1,""],STAGE_START:[3,3,1,""],STAGE_UPLOADING:[3,3,1,""],STAGE_WAITING:[3,3,1,""],STAGE_DONE:[3,3,1,""]},"alarmdecoder.util":{CommError:[3,4,1,""],Firmware:[3,1,1,""],TimeoutError:[3,4,1,""],NoDeviceError:[3,4,1,""],InvalidMessageError:[3,4,1,""]}},titleterms:{alarmdecod:[3,1],welcom:2,alarm:2,devic:3,messag:3,util:3,packag:[0,3],decod:[3,2],zonetrack:3,indic:2,tabl:2,modul:[0,3],document:2,event:0,panel:3}}) \ No newline at end of file