示例#1
0
    def set_version(self, version):
        """        
        Sets the 'version_latest' in '../www/www_rc'
        
        args    : 
        excepts : 
        return  : str ... the version string
        """

        parser = self.mutex_www_parser_rd(self.kmotion_dir)
        parser.set('system', 'version_latest', version)
        self.mutex_www_parser_wr(self.kmotion_dir, parser)

        mutex.acquire(self.kmotion_dir, 'www_rc')
        sort_rc.sort_rc('../www/www_rc')
        mutex.release(self.kmotion_dir, 'www_rc')
示例#2
0
 def set_version(self, version):
     """        
     Sets the 'version_latest' in '../www/www_rc'
     
     args    : 
     excepts : 
     return  : str ... the version string
     """
     
     parser = self.mutex_www_parser_rd(self.kmotion_dir)
     parser.set('system', 'version_latest', version)
     self.mutex_www_parser_wr(self.kmotion_dir, parser)
     
     mutex.acquire(self.kmotion_dir, 'www_rc') 
     sort_rc.sort_rc('../www/www_rc')
     mutex.release(self.kmotion_dir, 'www_rc')
示例#3
0
def main():  
    """
    Waits on the 'fifo_settings_wr' fifo until data received then parse the data
    and modifiy 'www_rc', also updates 'feeds_cache'
    
    ine ... interleave enabled
    fse ... full screen enabled
    lbe ... low bandwidth enabled
    lce ... low CPU enabled
    skf ... skip archive frames
    are ... archive button enabled
    lge ... logs button enabled
    coe ... config button enabled
    fue ... func button enabled
    spa ... msg button enabled
    abe ... about button enabled
    loe ... logout button enabled
    
    sec ... secure config
    coh ... config hash code
    
    fma ... feed mask
    
    fen ... feed enabled
    fpl ... feed pal 
    fde ... feed device
    fin ... feed input
    ful ... feed url
    fpr ... feed proxy
    fln ... feed loggin name
    flp ... feed loggin password
    fwd ... feed width
    fhe ... feed height
    fna ... feed name
    fbo ... feed show box
    ffp ... feed fps
    fpe ... feed snap enabled
    fsn ... feed snap interval
    ffe ... feed smovie enabled
    fme ... feed movie enabled
    fup ... feed updates
    
    psx ... PTZ step x
    psy ... PTZ step y
    ptt ... PTZ track type
    pte ... PTZ enabled
    ptc ... PTZ calib first
    pts ... PTZ servo settle
    ppe ... PTZ park enabled
    ppd ... PTZ park delay
    ppx ... PTZ park x
    ppy ... PTZ park y
    p1x ... PTZ preset 1 x
    p1y ... PTZ preset 1 y
    p2x ... PTZ preset 2 x
    p2y ... PTZ preset 2 y
    p3x ... PTZ preset 3 x
    p3y ... PTZ preset 3 y
    p4x ... PTZ preset 4 x
    p4y ... PTZ preset 4 y
    
    st1 ... schedule time line 1
    st2 ... schedule time line 2
    st3 ... schedule time line 3
    st4 ... schedule time line 4
    st5 ... schedule time line 5
    st6 ... schedule time line 6
    st7 ... schedule time line 7
    
    ed1 ... exception time line 1 dates   
    ed2 ... exception time line 2 dates      
    ed3 ... exception time line 3 dates    
    ed4 ... exception time line 4 dates
    ed5 ... exception time line 5 dates
    ed6 ... exception time line 6 dates
    ed7 ... exception time line 7 dates

    et1 ... exception time line 1    
    et2 ... exception time line 2       
    et3 ... exception time line 3    
    et4 ... exception time line 4
    et5 ... exception time line 5
    et6 ... exception time line 6
    et7 ... exception time line 7

    dif ... display feeds
    col ... color select
    dis ... display select
    
    chk ... length check
    
    args    : 
    excepts : 
    return  : none
    """
    
    logger.log('starting daemon ...', 'CRIT')
    kmotion_dir = os.getcwd()[:-5]
    
    reload_ptz_config = False
    reload_all_config = False
    
    RELOAD_PTZ =  ['psx', 'psy', 'ptc', 'pts', 'ppe', 'ppd', 'ppx', 'ppy',
                   'p1x', 'p1y', 'p2x', 'p2y', 'p3x', 'p3y', 'p4x', 'p4y']
    
    RELOAD_ALL =  ['fma', 'fen', 'fpl', 'fde', 'fin', 'ful', 'fpr', 'fln', 
                   'flp', 'fwd', 'fhe', 'fbo', 'ffp', 'fpe', 'fsn', 'ffe', 
                   'fme', 'fup', 'ptt', 'pte', 'st1', 'st2', 'st3',
                   'st4', 'st5', 'st6', 'st7', 'ed1', 'ed2', 'ed3', 'wd4',
                   'ed5', 'ed6', 'ed7', 'et1', 'et2', 'et3', 'et4', 'et5',
                   'et6', 'et7']
    
    update_feeds_cache(kmotion_dir)

    while True:
        
        logger.log('waiting on FIFO pipe data', 'DEBUG')
        data = subprocess.Popen(['cat', '%s/www/fifo_settings_wr' % kmotion_dir], stdout=subprocess.PIPE).communicate()[0]
        data = data.rstrip()
        logger.log('FIFO pipe data: %s' % data, 'DEBUG')
        
        if len(data) < 8:
            continue
        
        if len(data) > 7 and data[-8:] == '99999999': # FIFO purge
            logger.log('FIFO purge', 'DEBUG')
            continue

        if int(data[-8:]) != len(data) - 13: # filter checksum
            logger.log('data checksum error - rejecting data', 'CRIT')
            continue
        
        masks_modified = [] # reset masks changed list
        parser = mutex_www_parser_rd(kmotion_dir)
        for raw_data in data.split('$'):
            if raw_data == '': continue # filter starting ''
            split_data = raw_data.split(':')

            if len(split_data[0]) > 3:
                key = split_data[0][:3]
                index = int(split_data[0][3:])
            else:
                key = split_data[0] # the 3 digit key ie 'fen' or 'fha'
                index = 0           # optional list pointer for the id
            value = split_data[1]
            if key == 'ine': # interleave
                parser.set('misc', 'misc1_interleave', num_bool(value))
            elif key == 'fse': # full screen
                parser.set('misc', 'misc1_full_screen', num_bool(value))
            elif key == 'lbe': # low bandwidth
                parser.set('misc', 'misc1_low_bandwidth', num_bool(value))
            elif key == 'lce': # low cpu
                parser.set('misc', 'misc1_low_cpu', num_bool(value))
            elif key == 'skf': # skip archive frames enabled
                parser.set('misc', 'misc1_skip_frames', num_bool(value))
            elif key == 'are': # archive button enabled
                parser.set('misc', 'misc2_archive_button_enabled', num_bool(value))
            elif key == 'lge': # logs button enabled
                parser.set('misc', 'misc2_logs_button_enabled', num_bool(value))
            elif key == 'coe': # config button enabled
                parser.set('misc', 'misc2_config_button_enabled', num_bool(value))
            elif key == 'fue': # function button enabled
                parser.set('misc', 'misc2_func_button_enabled', num_bool(value))
            elif key == 'spa': # update button enabled
                parser.set('misc', 'misc2_msg_button_enabled', num_bool(value))
            elif key == 'abe': # about button enabled
                parser.set('misc', 'misc2_about_button_enabled', num_bool(value))
            elif key == 'loe': # logout button enabled
                parser.set('misc', 'misc2_logout_button_enabled', num_bool(value))

            elif key == 'sec': # secure config
                parser.set('misc', 'misc3_secure', num_bool(value))
            elif key == 'coh': # config hash
                parser.set('misc', 'misc3_config_hash', value)
        
            elif key == 'fma': # feed mask
                parser.set('motion_feed%02i' % index, 'feed_mask', value)
                masks_modified.append((index, value))
        
            elif key == 'fen': # feed enabled
                parser.set('motion_feed%02i' % index, 'feed_enabled', num_bool(value))
            elif key == 'fpl': # feed pal 
                parser.set('motion_feed%02i' % index, 'feed_pal', num_bool(value))
            elif key == 'fde': # feed device
                parser.set('motion_feed%02i' % index, 'feed_device', value)
            elif key == 'fin': # feed input
                parser.set('motion_feed%02i' % index, 'feed_input', value)
            elif key == 'ful': # feed url
                parser.set('motion_feed%02i' % index, 'feed_url', de_sanitise(value))
            elif key == 'fpr': # feed proxy
                parser.set('motion_feed%02i' % index, 'feed_proxy', de_sanitise(value))
            elif key == 'fln': # feed loggin name
                parser.set('motion_feed%02i' % index, 'feed_lgn_name', de_sanitise(value))
            elif key == 'flp': # feed loggin password
                # check to see if default *'d password is returned
                if de_sanitise(value) != '*' * len(parser.get('motion_feed%02i' % index, 'feed_lgn_pw')):
                    parser.set('motion_feed%02i' % index, 'feed_lgn_pw', de_sanitise(value))
            elif key == 'fwd': # feed width
                parser.set('motion_feed%02i' % index, 'feed_width', value)
            elif key == 'fhe': # feed height
                parser.set('motion_feed%02i' % index, 'feed_height', value)
            elif key == 'fna': # feed name
                parser.set('motion_feed%02i' % index, 'feed_name', de_sanitise(value))
            elif key == 'fbo': # feed show box
                parser.set('motion_feed%02i' % index, 'feed_show_box', num_bool(value))
            elif key == 'ffp': # feed fps
                parser.set('motion_feed%02i' % index, 'feed_fps', value)
            elif key == 'fpe': # feed snap enabled
                parser.set('motion_feed%02i' % index, 'feed_snap_enabled', num_bool(value))
            elif key == 'fsn': # feed snap interval
                parser.set('motion_feed%02i' % index, 'feed_snap_interval', value)
            elif key == 'ffe': # feed smovie enabled
                parser.set('motion_feed%02i' % index, 'feed_smovie_enabled', num_bool(value))
            elif key == 'fme': # feed movie enabled
                parser.set('motion_feed%02i' % index, 'feed_movie_enabled', num_bool(value))
                
            elif key == 'psx': # ptz step x
                parser.set('motion_feed%02i' % index, 'ptz_step_x', value)                
            elif key == 'psy': # ptz step y
                parser.set('motion_feed%02i' % index, 'ptz_step_y', value)
            elif key == 'ptt': # ptz calib first
                parser.set('motion_feed%02i' % index, 'ptz_track_type', value)
        
            elif key == 'pte': # ptz enabled
                parser.set('motion_feed%02i' % index, 'ptz_enabled', num_bool(value))
            elif key == 'ptc': # ptz calib first
                parser.set('motion_feed%02i' % index, 'ptz_calib_first', num_bool(value))
            elif key == 'pts': # ptz servo settle
                parser.set('motion_feed%02i' % index, 'ptz_servo_settle', value)
            elif key == 'ppe': # ptz park enable
                parser.set('motion_feed%02i' % index, 'ptz_park_enabled', num_bool(value))
            elif key == 'ppd': # ptz park delay
                parser.set('motion_feed%02i' % index, 'ptz_park_delay', value)
            elif key == 'ppx': # ptz park x
                parser.set('motion_feed%02i' % index, 'ptz_park_x', value)
            elif key == 'ppy': # ptz park y
                parser.set('motion_feed%02i' % index, 'ptz_park_y', value)
            elif key == 'p1x': # ptz preset 1 x
                parser.set('motion_feed%02i' % index, 'ptz_preset1_x', value)                
            elif key == 'p1y': # ptz preset 1 y
                parser.set('motion_feed%02i' % index, 'ptz_preset1_y', value)
            elif key == 'p2x': # ptz preset 2 x
                parser.set('motion_feed%02i' % index, 'ptz_preset2_x', value)                
            elif key == 'p2y': # ptz preset 2 y
                parser.set('motion_feed%02i' % index, 'ptz_preset2_y', value)
            elif key == 'p3x': # ptz preset 3 x
                parser.set('motion_feed%02i' % index, 'ptz_preset3_x', value)                
            elif key == 'p3y': # ptz preset 3 y
                parser.set('motion_feed%02i' % index, 'ptz_preset3_y', value)
            elif key == 'p4x': # ptz preset 4 x
                parser.set('motion_feed%02i' % index, 'ptz_preset4_x', value)                
            elif key == 'p4y': # ptz preset 4 y
                parser.set('motion_feed%02i' % index, 'ptz_preset4_y', value)
        
            elif key == 'st1': # schedule time line 1
                parser.set('schedule%i' % index, 'tline1', value)
            elif key == 'st2': # schedule time line 2
                parser.set('schedule%i' % index, 'tline2', value)
            elif key == 'st3': # schedule time line 3
                parser.set('schedule%i' % index, 'tline3', value)
            elif key == 'st4': # schedule time line 4
                parser.set('schedule%i' % index, 'tline4', value)
            elif key == 'st5': # schedule time line 5
                parser.set('schedule%i' % index, 'tline5', value)
            elif key == 'st6': # schedule time line 6
                parser.set('schedule%i' % index, 'tline6', value)
            elif key == 'st7': # schedule time line 7
                parser.set('schedule%i' % index, 'tline7', value)
                
            elif key == 'ed1': # exception time line 1 dates
                parser.set('schedule_except%i' % index, 'tline1_dates', value)
            elif key == 'ed2': # exception time line 2 dates
                parser.set('schedule_except%i' % index, 'tline2_dates', value)
            elif key == 'ed3': # exception time line 3 dates
                parser.set('schedule_except%i' % index, 'tline3_dates', value)
            elif key == 'ed4': # exception time line 4 dates
                parser.set('schedule_except%i' % index, 'tline4_dates', value)
            elif key == 'ed5': # exception time line 5 dates
                parser.set('schedule_except%i' % index, 'tline5_dates', value)
            elif key == 'ed6': # exception time line 6 dates
                parser.set('schedule_except%i' % index, 'tline6_dates', value)
            elif key == 'ed7': # exception time line 7 dates
                parser.set('schedule_except%i' % index, 'tline7_dates', value)
                
            elif key == 'et1': # exception time line 1
                parser.set('schedule_except%i' % index, 'tline1', value)
            elif key == 'et2': # exception time line 2
                parser.set('schedule_except%i' % index, 'tline2', value)
            elif key == 'et3': # exception time line 3
                parser.set('schedule_except%i' % index, 'tline3', value)
            elif key == 'et4': # exception time line 4
                parser.set('schedule_except%i' % index, 'tline4', value)
            elif key == 'et5': # exception time line 5
                parser.set('schedule_except%i' % index, 'tline5', value)
            elif key == 'et6': # exception time line 6
                parser.set('schedule_except%i' % index, 'tline6', value)
            elif key == 'et7': # exception time line 7
                parser.set('schedule_except%i' % index, 'tline7', value)
                
            elif key == 'dif': # display feeds
                parser.set('misc', 'misc4_display_feeds_%02i' % index, value)
            elif key == 'col': # color select
                parser.set('misc', 'misc4_color_select', value)
            elif key == 'dis': # display select
                parser.set('misc', 'misc4_display_select', value)
                
            # if key fits flag for reload everything including the ptz daemon, 
            # motion and everything else, slow and painfull
            if key in RELOAD_ALL : reload_all_config = True
            
            # if key fits flag for reload the ptz daemon only. the ptz daemon is
            # quick to reload and does not have the crashy pants of a motion 
            # reload !
            if key in RELOAD_PTZ : reload_ptz_config = True
            
        mutex_www_parser_wr(kmotion_dir, parser)
        mutex.acquire(kmotion_dir, 'www_rc')
        sort_rc.sort_rc('%s/www/www_rc' % kmotion_dir)
        mutex.release(kmotion_dir, 'www_rc')
        update_feeds_cache(kmotion_dir)
        
        # has to be here, image width, height have to be written to 'www_rc'
        # before mask can be made
        for i in range(len(masks_modified)):
            create_mask(kmotion_dir, masks_modified[i][0], masks_modified[i][1])
        
        if reload_all_config: 
            init_motion.gen_motion_configs(kmotion_dir)
            daemon_whip.reload_all_configs()
            reload_all_config = False
            reload_ptz_config = False
            continue # skip 'reload_ptz_config', already done
    
        if reload_ptz_config: 
            daemon_whip.reload_ptz_config()
            reload_ptz_config = False 
示例#4
0
def main():
    """
    Waits on the 'fifo_settings_wr' fifo until data received then parse the data
    and modifiy 'www_rc', also updates 'feeds_cache'
    
    ine ... interleave enabled
    fse ... full screen enabled
    lbe ... low bandwidth enabled
    lce ... low CPU enabled
    skf ... skip archive frames
    are ... archive button enabled
    lge ... logs button enabled
    coe ... config button enabled
    fue ... func button enabled
    spa ... msg button enabled
    abe ... about button enabled
    loe ... logout button enabled
    
    sec ... secure config
    coh ... config hash code
    
    fma ... feed mask
    
    fen ... feed enabled
    fpl ... feed pal 
    fde ... feed device
    fin ... feed input
    ful ... feed url
    fpr ... feed proxy
    fln ... feed loggin name
    flp ... feed loggin password
    fwd ... feed width
    fhe ... feed height
    fna ... feed name
    fbo ... feed show box
    ffp ... feed fps
    fpe ... feed snap enabled
    fsn ... feed snap interval
    ffe ... feed smovie enabled
    fme ... feed movie enabled
    fup ... feed updates
    
    psx ... PTZ step x
    psy ... PTZ step y
    ptt ... PTZ track type
    pte ... PTZ enabled
    ptc ... PTZ calib first
    pts ... PTZ servo settle
    ppe ... PTZ park enabled
    ppd ... PTZ park delay
    ppx ... PTZ park x
    ppy ... PTZ park y
    p1x ... PTZ preset 1 x
    p1y ... PTZ preset 1 y
    p2x ... PTZ preset 2 x
    p2y ... PTZ preset 2 y
    p3x ... PTZ preset 3 x
    p3y ... PTZ preset 3 y
    p4x ... PTZ preset 4 x
    p4y ... PTZ preset 4 y
    
    st1 ... schedule time line 1
    st2 ... schedule time line 2
    st3 ... schedule time line 3
    st4 ... schedule time line 4
    st5 ... schedule time line 5
    st6 ... schedule time line 6
    st7 ... schedule time line 7
    
    ed1 ... exception time line 1 dates   
    ed2 ... exception time line 2 dates      
    ed3 ... exception time line 3 dates    
    ed4 ... exception time line 4 dates
    ed5 ... exception time line 5 dates
    ed6 ... exception time line 6 dates
    ed7 ... exception time line 7 dates

    et1 ... exception time line 1    
    et2 ... exception time line 2       
    et3 ... exception time line 3    
    et4 ... exception time line 4
    et5 ... exception time line 5
    et6 ... exception time line 6
    et7 ... exception time line 7

    dif ... display feeds
    col ... color select
    dis ... display select
    
    chk ... length check
    
    args    : 
    excepts : 
    return  : none
    """

    logger.log('starting daemon ...', 'CRIT')
    kmotion_dir = os.getcwd()[:-5]

    reload_ptz_config = False
    reload_all_config = False

    RELOAD_PTZ = [
        'psx', 'psy', 'ptc', 'pts', 'ppe', 'ppd', 'ppx', 'ppy', 'p1x', 'p1y',
        'p2x', 'p2y', 'p3x', 'p3y', 'p4x', 'p4y'
    ]

    RELOAD_ALL = [
        'fma', 'fen', 'fpl', 'fde', 'fin', 'ful', 'fpr', 'fln', 'flp', 'fwd',
        'fhe', 'fbo', 'ffp', 'fpe', 'fsn', 'ffe', 'fme', 'fup', 'ptt', 'pte',
        'st1', 'st2', 'st3', 'st4', 'st5', 'st6', 'st7', 'ed1', 'ed2', 'ed3',
        'wd4', 'ed5', 'ed6', 'ed7', 'et1', 'et2', 'et3', 'et4', 'et5', 'et6',
        'et7'
    ]

    update_feeds_cache(kmotion_dir)

    while True:

        logger.log('waiting on FIFO pipe data', 'DEBUG')
        data = subprocess.Popen(
            ['cat', '%s/www/fifo_settings_wr' % kmotion_dir],
            stdout=subprocess.PIPE).communicate()[0]
        data = data.rstrip()
        logger.log('FIFO pipe data: %s' % data, 'DEBUG')

        if len(data) < 8:
            continue

        if len(data) > 7 and data[-8:] == '99999999':  # FIFO purge
            logger.log('FIFO purge', 'DEBUG')
            continue

        if int(data[-8:]) != len(data) - 13:  # filter checksum
            logger.log('data checksum error - rejecting data', 'CRIT')
            continue

        masks_modified = []  # reset masks changed list
        parser = mutex_www_parser_rd(kmotion_dir)
        for raw_data in data.split('$'):
            if raw_data == '': continue  # filter starting ''
            split_data = raw_data.split(':')

            if len(split_data[0]) > 3:
                key = split_data[0][:3]
                index = int(split_data[0][3:])
            else:
                key = split_data[0]  # the 3 digit key ie 'fen' or 'fha'
                index = 0  # optional list pointer for the id
            value = split_data[1]
            if key == 'ine':  # interleave
                parser.set('misc', 'misc1_interleave', num_bool(value))
            elif key == 'fse':  # full screen
                parser.set('misc', 'misc1_full_screen', num_bool(value))
            elif key == 'lbe':  # low bandwidth
                parser.set('misc', 'misc1_low_bandwidth', num_bool(value))
            elif key == 'lce':  # low cpu
                parser.set('misc', 'misc1_low_cpu', num_bool(value))
            elif key == 'skf':  # skip archive frames enabled
                parser.set('misc', 'misc1_skip_frames', num_bool(value))
            elif key == 'are':  # archive button enabled
                parser.set('misc', 'misc2_archive_button_enabled',
                           num_bool(value))
            elif key == 'lge':  # logs button enabled
                parser.set('misc', 'misc2_logs_button_enabled',
                           num_bool(value))
            elif key == 'coe':  # config button enabled
                parser.set('misc', 'misc2_config_button_enabled',
                           num_bool(value))
            elif key == 'fue':  # function button enabled
                parser.set('misc', 'misc2_func_button_enabled',
                           num_bool(value))
            elif key == 'spa':  # update button enabled
                parser.set('misc', 'misc2_msg_button_enabled', num_bool(value))
            elif key == 'abe':  # about button enabled
                parser.set('misc', 'misc2_about_button_enabled',
                           num_bool(value))
            elif key == 'loe':  # logout button enabled
                parser.set('misc', 'misc2_logout_button_enabled',
                           num_bool(value))

            elif key == 'sec':  # secure config
                parser.set('misc', 'misc3_secure', num_bool(value))
            elif key == 'coh':  # config hash
                parser.set('misc', 'misc3_config_hash', value)

            elif key == 'fma':  # feed mask
                parser.set('motion_feed%02i' % index, 'feed_mask', value)
                masks_modified.append((index, value))

            elif key == 'fen':  # feed enabled
                parser.set('motion_feed%02i' % index, 'feed_enabled',
                           num_bool(value))
            elif key == 'fpl':  # feed pal
                parser.set('motion_feed%02i' % index, 'feed_pal',
                           num_bool(value))
            elif key == 'fde':  # feed device
                parser.set('motion_feed%02i' % index, 'feed_device', value)
            elif key == 'fin':  # feed input
                parser.set('motion_feed%02i' % index, 'feed_input', value)
            elif key == 'ful':  # feed url
                parser.set('motion_feed%02i' % index, 'feed_url',
                           de_sanitise(value))
            elif key == 'fpr':  # feed proxy
                parser.set('motion_feed%02i' % index, 'feed_proxy',
                           de_sanitise(value))
            elif key == 'fln':  # feed loggin name
                parser.set('motion_feed%02i' % index, 'feed_lgn_name',
                           de_sanitise(value))
            elif key == 'flp':  # feed loggin password
                # check to see if default *'d password is returned
                if de_sanitise(value) != '*' * len(
                        parser.get('motion_feed%02i' % index, 'feed_lgn_pw')):
                    parser.set('motion_feed%02i' % index, 'feed_lgn_pw',
                               de_sanitise(value))
            elif key == 'fwd':  # feed width
                parser.set('motion_feed%02i' % index, 'feed_width', value)
            elif key == 'fhe':  # feed height
                parser.set('motion_feed%02i' % index, 'feed_height', value)
            elif key == 'fna':  # feed name
                parser.set('motion_feed%02i' % index, 'feed_name',
                           de_sanitise(value))
            elif key == 'fbo':  # feed show box
                parser.set('motion_feed%02i' % index, 'feed_show_box',
                           num_bool(value))
            elif key == 'ffp':  # feed fps
                parser.set('motion_feed%02i' % index, 'feed_fps', value)
            elif key == 'fpe':  # feed snap enabled
                parser.set('motion_feed%02i' % index, 'feed_snap_enabled',
                           num_bool(value))
            elif key == 'fsn':  # feed snap interval
                parser.set('motion_feed%02i' % index, 'feed_snap_interval',
                           value)
            elif key == 'ffe':  # feed smovie enabled
                parser.set('motion_feed%02i' % index, 'feed_smovie_enabled',
                           num_bool(value))
            elif key == 'fme':  # feed movie enabled
                parser.set('motion_feed%02i' % index, 'feed_movie_enabled',
                           num_bool(value))

            elif key == 'psx':  # ptz step x
                parser.set('motion_feed%02i' % index, 'ptz_step_x', value)
            elif key == 'psy':  # ptz step y
                parser.set('motion_feed%02i' % index, 'ptz_step_y', value)
            elif key == 'ptt':  # ptz calib first
                parser.set('motion_feed%02i' % index, 'ptz_track_type', value)

            elif key == 'pte':  # ptz enabled
                parser.set('motion_feed%02i' % index, 'ptz_enabled',
                           num_bool(value))
            elif key == 'ptc':  # ptz calib first
                parser.set('motion_feed%02i' % index, 'ptz_calib_first',
                           num_bool(value))
            elif key == 'pts':  # ptz servo settle
                parser.set('motion_feed%02i' % index, 'ptz_servo_settle',
                           value)
            elif key == 'ppe':  # ptz park enable
                parser.set('motion_feed%02i' % index, 'ptz_park_enabled',
                           num_bool(value))
            elif key == 'ppd':  # ptz park delay
                parser.set('motion_feed%02i' % index, 'ptz_park_delay', value)
            elif key == 'ppx':  # ptz park x
                parser.set('motion_feed%02i' % index, 'ptz_park_x', value)
            elif key == 'ppy':  # ptz park y
                parser.set('motion_feed%02i' % index, 'ptz_park_y', value)
            elif key == 'p1x':  # ptz preset 1 x
                parser.set('motion_feed%02i' % index, 'ptz_preset1_x', value)
            elif key == 'p1y':  # ptz preset 1 y
                parser.set('motion_feed%02i' % index, 'ptz_preset1_y', value)
            elif key == 'p2x':  # ptz preset 2 x
                parser.set('motion_feed%02i' % index, 'ptz_preset2_x', value)
            elif key == 'p2y':  # ptz preset 2 y
                parser.set('motion_feed%02i' % index, 'ptz_preset2_y', value)
            elif key == 'p3x':  # ptz preset 3 x
                parser.set('motion_feed%02i' % index, 'ptz_preset3_x', value)
            elif key == 'p3y':  # ptz preset 3 y
                parser.set('motion_feed%02i' % index, 'ptz_preset3_y', value)
            elif key == 'p4x':  # ptz preset 4 x
                parser.set('motion_feed%02i' % index, 'ptz_preset4_x', value)
            elif key == 'p4y':  # ptz preset 4 y
                parser.set('motion_feed%02i' % index, 'ptz_preset4_y', value)

            elif key == 'st1':  # schedule time line 1
                parser.set('schedule%i' % index, 'tline1', value)
            elif key == 'st2':  # schedule time line 2
                parser.set('schedule%i' % index, 'tline2', value)
            elif key == 'st3':  # schedule time line 3
                parser.set('schedule%i' % index, 'tline3', value)
            elif key == 'st4':  # schedule time line 4
                parser.set('schedule%i' % index, 'tline4', value)
            elif key == 'st5':  # schedule time line 5
                parser.set('schedule%i' % index, 'tline5', value)
            elif key == 'st6':  # schedule time line 6
                parser.set('schedule%i' % index, 'tline6', value)
            elif key == 'st7':  # schedule time line 7
                parser.set('schedule%i' % index, 'tline7', value)

            elif key == 'ed1':  # exception time line 1 dates
                parser.set('schedule_except%i' % index, 'tline1_dates', value)
            elif key == 'ed2':  # exception time line 2 dates
                parser.set('schedule_except%i' % index, 'tline2_dates', value)
            elif key == 'ed3':  # exception time line 3 dates
                parser.set('schedule_except%i' % index, 'tline3_dates', value)
            elif key == 'ed4':  # exception time line 4 dates
                parser.set('schedule_except%i' % index, 'tline4_dates', value)
            elif key == 'ed5':  # exception time line 5 dates
                parser.set('schedule_except%i' % index, 'tline5_dates', value)
            elif key == 'ed6':  # exception time line 6 dates
                parser.set('schedule_except%i' % index, 'tline6_dates', value)
            elif key == 'ed7':  # exception time line 7 dates
                parser.set('schedule_except%i' % index, 'tline7_dates', value)

            elif key == 'et1':  # exception time line 1
                parser.set('schedule_except%i' % index, 'tline1', value)
            elif key == 'et2':  # exception time line 2
                parser.set('schedule_except%i' % index, 'tline2', value)
            elif key == 'et3':  # exception time line 3
                parser.set('schedule_except%i' % index, 'tline3', value)
            elif key == 'et4':  # exception time line 4
                parser.set('schedule_except%i' % index, 'tline4', value)
            elif key == 'et5':  # exception time line 5
                parser.set('schedule_except%i' % index, 'tline5', value)
            elif key == 'et6':  # exception time line 6
                parser.set('schedule_except%i' % index, 'tline6', value)
            elif key == 'et7':  # exception time line 7
                parser.set('schedule_except%i' % index, 'tline7', value)

            elif key == 'dif':  # display feeds
                parser.set('misc', 'misc4_display_feeds_%02i' % index, value)
            elif key == 'col':  # color select
                parser.set('misc', 'misc4_color_select', value)
            elif key == 'dis':  # display select
                parser.set('misc', 'misc4_display_select', value)

            # if key fits flag for reload everything including the ptz daemon,
            # motion and everything else, slow and painfull
            if key in RELOAD_ALL: reload_all_config = True

            # if key fits flag for reload the ptz daemon only. the ptz daemon is
            # quick to reload and does not have the crashy pants of a motion
            # reload !
            if key in RELOAD_PTZ: reload_ptz_config = True

        mutex_www_parser_wr(kmotion_dir, parser)
        mutex.acquire(kmotion_dir, 'www_rc')
        sort_rc.sort_rc('%s/www/www_rc' % kmotion_dir)
        mutex.release(kmotion_dir, 'www_rc')
        update_feeds_cache(kmotion_dir)

        # has to be here, image width, height have to be written to 'www_rc'
        # before mask can be made
        for i in range(len(masks_modified)):
            create_mask(kmotion_dir, masks_modified[i][0],
                        masks_modified[i][1])

        if reload_all_config:
            init_motion.gen_motion_configs(kmotion_dir)
            daemon_whip.reload_all_configs()
            reload_all_config = False
            reload_ptz_config = False
            continue  # skip 'reload_ptz_config', already done

        if reload_ptz_config:
            daemon_whip.reload_ptz_config()
            reload_ptz_config = False
示例#5
0
def update_rcs(kmotion_dir, ramdisk_dir):
    
    """
    Update the rc's during a 'kmotion' or 'kmotion reload'
    
    args    : kmotion_dir ... the 'root' directory of kmotion
              ramdisk_dir ... the 'root' directory of ramdisk
    excepts :
    return  : none
    """
    
    # copy 'images_dbase_dir' from 'kmotion_rc' to 'www_rc' 
    logger.log('update_rcs() - Copy \'images_dbase_dir\' from \'kmotion_rc\' to \'www_rc\'', 'DEBUG')
    parser = ConfigParser.SafeConfigParser()
    parser.read('%s/kmotion_rc' % kmotion_dir)
    images_dbase_dir = parser.get('dirs', 'images_dbase_dir')
    parser = mutex_www_parser_rd(kmotion_dir)
    parser.set('system', 'images_dbase_dir', images_dbase_dir)
    mutex_www_parser_wr(kmotion_dir, parser)
        
    # set 'ramdisk_dir' in core_rc
    logger.log('update_rcs() - Setting ramdisk_dir to \'%s\' in core_rc' % ramdisk_dir, 'DEBUG')
    parser = mutex_core_parser_rd(kmotion_dir)
    parser.set('dirs', 'ramdisk_dir', ramdisk_dir )
    mutex_core_parser_wr(kmotion_dir, parser)
    
    # set the 'ramdisk_dir' in 'www_rc'
    logger.log('update_rcs() - Setting ramdisk_dir to \'%s\' in www_rc' % ramdisk_dir, 'DEBUG')
    parser = mutex_www_parser_rd(kmotion_dir)
    parser.set('system', 'ramdisk_dir', ramdisk_dir)
    mutex_www_parser_wr(kmotion_dir, parser)
    
    # copy 'version' from 'core_rc' to 'www_rc' 
    logger.log('update_rcs() - Copy \'version\' from \'core_rc\' to \'www_rc\'', 'DEBUG')
    parser = mutex_core_parser_rd(kmotion_dir)
    version = parser.get('version', 'string')
    parser = mutex_www_parser_rd(kmotion_dir)
    parser.set('system', 'version', version)
    parser.set('system', 'version_latest', version)
    mutex_www_parser_wr(kmotion_dir, parser)
    
    # Sets the 'func_f??_enabled' in 'www_rc' by scanning for valid files in 
    # the 'func' directory. Valid files have the format 'func<01-16>.sh'.
    logger.log('update_rcs() - Setting the \'func_f??_enabled\' in \'www_rc\'', 'DEBUG')
    parser = mutex_www_parser_rd(kmotion_dir)
    for func_num in range(1, 17):
        if os.path.isfile('%s/func/func%02i.sh' % (kmotion_dir, func_num)):
            parser.set('system', 'func_f%02i_enabled' % func_num, 'true')
        else:
            parser.set('system', 'func_f%02i_enabled' % func_num, 'false')
    mutex_www_parser_wr(kmotion_dir, parser)
    
    # copy 'msg' to 'www_rc' 
    logger.log('update_rcs() - Copy \'msg\' to \'www_rc\'', 'DEBUG') 
    # user generated file so error trap
    try:
        f_obj = open('../msg')
        msg = f_obj.read()
        f_obj.close()
    except IOError:
        msg = ''
        logger.log('update_rcs() - unable to read \'msg\'', 'DEBUG') 
        
    msg = msg.replace('\n', '<br>') 
    parser = mutex_www_parser_rd(kmotion_dir)
    parser.set('system', 'msg', msg)
    mutex_www_parser_wr(kmotion_dir, parser)
    
    sort_rc.sort_rc('%s/kmotion_rc' % kmotion_dir)
    try:
        mutex.acquire(kmotion_dir, 'www_rc') 
        sort_rc.sort_rc('%s/www/www_rc' % kmotion_dir) 
    finally:
        mutex.release(kmotion_dir, 'www_rc')
        
    try:
        mutex.acquire(kmotion_dir, 'core_rc') 
        sort_rc.sort_rc('%s/core/core_rc' % kmotion_dir)
    finally:
        mutex.release(kmotion_dir, 'core_rc')