def get_item(item_id): if not item_id: return None if is_oid(item_id): tp, i = parse_oid(item_id) else: i = item_id item = None if i.find('/') > -1: if i in items_by_full_id: item = items_by_full_id[i] elif not eva.core.config.enterprise_layout and i in items_by_id: item = items_by_id[i] return None if item and is_oid(item_id) and item.item_type != tp else item
def history(self, item_id, t_start=None, t_end=None, limit=None, prop=None, time_format=None, fill=None, fmt=None, db=None): """ get item state history To use this function, DB or TSDB notifier in LM PLC must be present. (notifier can share DB with SFA in read/only mode). Args: item_id: item ID, or multiple IDs (list or comma separated) Optional: t_start: time frame start, ISO or Unix timestamp t_end: time frame end, optional (default: current time), ISO or Unix timestamp limit: limit history records prop: item property ('status' or 'value' time_format: time format, 'iso' or 'raw' (default) for timestamp fill: fill frame with the specified interval (e.g. *1T* - 1 minute, *2H* - 2 hours etc.), optional. If specified, t_start is required fmt: output format, 'list' (default) or 'dict' db: :doc:`notifier</notifiers>` ID which keeps history for the specified item(s) (default: **db_1**) Returns: list of dicts or dict of lists """ return eva.lm.lmapi.api.state_history( k=eva.apikey.get_masterkey(), a=db, i=[ 'lvar:' + i if not is_oid(i) else i for i in item_id ] if \ isinstance(item_id, list) else \ item_id if is_oid(item_id) else 'lvar:' + item_id, s=t_start, e=t_end, l=limit, x=prop, t=time_format, w=fill, g=fmt)
def toggle(self, item_id, wait=None, uuid=None, priority=None): """ toggle lvar value Change lvar value to opposite boolean (0->1, 1->0) Args: lvar_id: lvar id Raises: FunctionFailed: lvar value set error ResourceNotFound: lvar is not found """ if is_oid(item_id) and oid_type(item_id) == 'unit': return self.action_toggle(unit_id=item_id, wait=wait, uuid=uuid, priority=priority) v = self.lvar_value(item_id) if v is None: raise FunctionFailed('lvar value is null') if v: return self.clear(item_id) else: return self.reset(item_id)
def value(self, item_id, default=''): """ get item value Args: item_id: item id (oid required) Optional: default: value if null (default is empty string) Returns: item value Raises: ResourceNotFound: item is not found """ if is_oid(item_id): tp, i = parse_oid(item_id) else: tp = 'lvar' i = item_id if tp == 'unit': return self.unit_value(i, default) if tp == 'sensor': return self.sensor_value(i, default) if tp == 'lvar': return self.lvar_value(i, default) raise ResourceNotFound
def status(self, item_id): """ get item status Args: item_id: item id (oid required) Returns: item status (integer) Raises: ResourceNotFound: item is not found """ if is_oid(item_id): tp, i = parse_oid(item_id) else: tp = 'lvar' i = item_id if tp == 'unit': return self.unit_status(i) if tp == 'sensor': return self.sensor_status(i) if tp == 'lvar': return self.lvar_status(i) raise ResourceNotFound
def state(self, item_id): """ get item state Args: item_id: item id (oid required) Returns: item status/value dict Raises: ResourceNotFound: item is not found @var_out status @var_out value """ if is_oid(item_id): tp, i = parse_oid(item_id) else: tp = 'lvar' i = item_id if tp == 'unit': return {'status': self.unit_status(i), 'value': self.unit_value(i)} if tp == 'sensor': return { 'status': self.sensor_status(i), 'value': self.sensor_value(i) } if tp == 'lvar': return {'status': self.lvar_status(i), 'value': self.lvar_value(i)} raise ResourceNotFound
def clone_item(item_id, new_item_id=None, group=None, save=False): i = get_item(item_id) ni = get_item((group + '/') if group else '' + new_item_id) if not i or not new_item_id or i.is_destroyed() or \ i.item_type not in ['unit', 'sensor']: raise ResourceNotFound if ni: raise ResourceAlreadyExists(ni.oid) if group and new_item_id.find('/') != -1: raise InvalidParameter('Group specified but item id contains /') if is_oid(new_item_id): if oid_type(new_item_id) != i.item_type: return InvalidParameter('oids should be equal') _ni = oid_to_id(new_item_id) else: _ni = new_item_id if _ni.find('/') == -1: ni_id = _ni _g = i.group if group is None else group else: ni_id = _ni.split('/')[-1] _g = '/'.join(_ni.split('/')[:-1]) ni = create_item(ni_id, i.item_type, _g, start=False, save=False) cfg = i.serialize(props=True) if 'description' in cfg: del cfg['description'] ni.update_config(cfg) if save: ni.save() ni.start_processors() return ni
def get_controller(controller_id): if not controller_lock.acquire(timeout=eva.core.config.timeout): logging.critical('controller_lock locking broken') eva.core.critical() return try: if not controller_id: raise InvalidParameter('controller id not specified') if is_oid(controller_id): tp, i = parse_oid(controller_id) else: tp, i = None, controller_id if i.find('/') > -1: i = i.split('/') if len(i) > 2: raise InvalidParameter('controller type unknown') if i[0] == 'uc' and i[1] in remote_ucs and (tp is None or tp == 'remote_uc'): return remote_ucs[i[1]] if i[0] == 'lm' and i[1] in remote_lms and (tp is None or tp == 'remote_lm'): return remote_lms[i[1]] raise ResourceNotFound finally: controller_lock.release()
def format_job_id(r_id): if is_oid(r_id): r_id = oid_to_id(r_id, required='job') if not isinstance(r_id, str): return None if r_id.find('/') != -1: g, r_id = r_id.split('/') if g != 'jobs': return None return r_id
def format_rule_id(r_id): if is_oid(r_id): r_id = oid_to_id(r_id, required='dmatrix_rule') if not isinstance(r_id, str): return None if r_id.find('/') != -1: g, r_id = r_id.split('/') if g != 'dm_rules': return None return r_id
def get_mu(mu_id): if not mu_id: return None if is_oid(mu_id) and oid_type(mu_id) != 'mu': return None i = oid_to_id(mu_id) if i.find('/') > -1: if i in mu_by_full_id: return mu_by_full_id[i] elif not eva.core.config.enterprise_layout and i in mu_by_id: return mu_by_id[i] return None
def get_unit(unit_id): if not unit_id: return None if is_oid(unit_id) and oid_type(unit_id) != 'unit': return None i = oid_to_id(unit_id) if i.find('/') > -1: if i in units_by_full_id: return units_by_full_id[i] elif not eva.core.config.enterprise_layout and i in units_by_id: return units_by_id[i] return None
def get_lvar(lvar_id): if not lvar_id: return None if is_oid(lvar_id) and oid_type(lvar_id) != 'lvar': return None i = oid_to_id(lvar_id) if i.find('/') > -1: if i in lvars_by_full_id: return lvars_by_full_id[i] elif not eva.core.config.enterprise_layout and i in lvars_by_id: return lvars_by_id[i] return None
def get_sensor(sensor_id): if not sensor_id: return None if is_oid(sensor_id) and oid_type(sensor_id) != 'sensor': return None i = oid_to_id(sensor_id) if i.find('/') > -1: if i in sensors_by_full_id: return sensors_by_full_id[i] elif not eva.core.config.enterprise_layout and i in sensors_by_id: return sensors_by_id[i] return None
def get_item(item_id): if not item_id: return None if is_oid(item_id): tp, i = parse_oid(item_id) else: i = item_id tp = None if tp == 'lmacro': return get_macro(i) elif tp == 'lcycle': return get_cycle(i) elif tp == 'dmatrix_rule': return get_dm_rule(i) elif tp == 'job': return get_job(i) item = None if i.find('/') > -1: if i in items_by_full_id: item = items_by_full_id[i] elif not eva.core.config.enterprise_layout and i in items_by_id: item = items_by_id[i] return None if item and is_oid(item_id) and item.item_type != tp else item
def get_item(i): if is_oid(i): _tp, _i = parse_oid(i) else: return None if _tp == 'unit': gi = eva.sfa.controller.uc_pool.units elif _tp == 'sensor': gi = eva.sfa.controller.uc_pool.sensors elif _tp == 'lvar': gi = eva.sfa.controller.lm_pool.lvars else: return None if not _i in gi: return None return gi[_i]