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
-
In meinem Blocky Code werden die Logiken im laufenden System reloaded und dabei auch die Scheduler bzw. Trigger aktualisiert.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.
Evtl. würde man das bei einem im Backend eingebundenen Editor dem "einbindenden HTML Code" überlassen. Damit wäre es für Text- und Grafik-Editor gleichermaßen verwendbar. (Meinungen?)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


alles aber für die 1.3 erst bitte und nur im DEV Branch. Blockly wäre dann Step 2 meines Erachtens.
Kommentar