Ja, das Relod von Logiken habe ich implementiert. Einzige Einschränkung ist, dass die etc/logics.conf nicht neu gelesen/ausgewertet wird. Also bleiben die Trigger Szenariwn im Moment gleich.
Ankündigung
Einklappen
Keine Ankündigung bisher.
Logiken: Beispiele als Bausteine ins Release oder kommentiert ins Wiki?
Einklappen
X
-
Zitat von Msinn Beitrag anzeigen... Also bleiben die Trigger Szenarien im Moment gleich.
Es gibt dafür insbesondere einen Blockly-Block, der eine Logik klammert und die Auslösebedingung definiert. (Trigger item, cycle, crontab, etc. ... https://knx-user-forum.de/forum/supp...953#post669953) Umgesetzt selbst als Logik, die vom Editor getriggert wird.
PHP-Code:#!/usr/bin/env python
#
from lib.logic import Logic
logger.info("Blockly Logics aktivieren...")
prio = 3
blockly_logics = {}
code = sh.blockly.python()
bytecode = compile(code, '<string>', 'exec')
s=[]
for name in sh.scheduler:
if name.startswith('blockly_runner'):
logger.info('Blockly Logics: remove '+ name)
s.append(name)
for name in s:
sh.scheduler.remove(name)
for line in code.splitlines():
if line and line.startswith('#?#'):
id, __, trigger = line[3:].partition(':')
by, __, val = trigger.partition('=')
logger.info('Blockly Logics: {} => {} :: {}'.format(id, by, val))
logic = Logic(sh, 'blockly_runner_' + id, {'bytecode' : bytecode,})
by = by.strip()
val = val.strip()
if by == 'cycle':
sh.scheduler.add('blockly_runner_' +id, logic, prio=prio, cron=None, cycle=val)
logger.info('Blockly Logics: cycles => '+ val)
elif by == 'crontab':
sh.scheduler.add('blockly_runner_' +id, logic, prio=prio, cron=val, cycle=None)
logger.info('Blockly Logics: crontabs => '+ val)
elif by == 'watchitem':
logic.watch_item = val
item = sh.return_item(val)
item.add_logic_trigger(logic)
logger.info('Blockly Logics: watchitems => '+ val)
Zuletzt geändert von walldi; 10.08.2016, 08:36.
Kommentar
Kommentar