Inwieweit ist es eigentlich gedacht, Logiken mit in den Release zu nehmen bzw. direkt schon im Code zu verbauen, damit man da evtl. leichter drauf zugreifen kann?
Ich denke hier insbesondere an 2, 3 Sachen, die wirklich jeder brauchen könnte.... die Codeschnipsel stammen primär aus dem Forum hier.
Eine wirklich gute Funktion, die man aber noch ordentlich überarbeiten müsste, um zB Doppel- und Dreifachklicks mit Tastern abzufangen, also ein Multiclick Item:
Bei dieser Logik braucht es aber noch ein, zwei Anpassungen im item.py selbst. Darum denke ich, dass gerade hier eine direkte Implementierung in den Code ganz clever wäre.
Network Plugin Logik, damit ein Item direkt seinen Wert übers Netzwerk zB an eine zweite SmarthomeNG Instanz schicken kann:
Zwangswerte bzw. Prioritäten (knx DPT 2) können derzeit auch nicht über die Visu gesteuert werden, hier muss man sich eines Hilfsobjekts bedienen und das Ganze dann auch mittels Logik raus feuern, damit das klappt.
Bei manchen Plugins wäre auch die Frage, ob nicht gleich eine Beispiellogik mit rein sollte, denn ohne Logik funzt es ja nicht (Mail, Pushbullet, etc.). Klar, die nötigen Infos stehen dann in den Readmes, aber evlt. könnte man hier die Herangehensweise doch auch etwas erleichtern...?
Ich denke hier insbesondere an 2, 3 Sachen, die wirklich jeder brauchen könnte.... die Codeschnipsel stammen primär aus dem Forum hier.
Eine wirklich gute Funktion, die man aber noch ordentlich überarbeiten müsste, um zB Doppel- und Dreifachklicks mit Tastern abzufangen, also ein Multiclick Item:
Code:
#!/usr/bin/env python # -*- coding: utf-8 -*- logger.info(trigger) invalue = trigger['value'] item = sh.return_item(trigger['source']) scitem = sh.return_item(trigger['source']+'.singleclick') mcitem = sh.return_item(trigger['source']+'.multiclick') scheduletask = 'singleclick-'+str(item) logger.debug("Multiclick getriggert durch: {0}".format(item)) #if item() == 1: if 'click_count' in item.conf: count = int(item.conf['click_count']) logger.debug("Previous Age: {0}".format(item.prev_update_age())) if hasattr(logic, 'save_state_' + item.id()): if item.prev_update_age() < 0.8: val = int(getattr(logic, 'save_state_' + item.id())) + 1 setattr(logic, 'save_state_' + item.id(), val) logger.debug("Klickcount: "+str(val)) else: setattr(logic, 'save_state_' + item.id(), 1) else: setattr(logic, 'save_state_' + item.id(), 1) if int(getattr(logic, 'save_state_' + item.id())) > count-1: sh.scheduler.change(scheduletask, active=False) setattr(logic, 'save_state_' + item.id(), 0) logger.debug("Fuehre Multiclickitem aus") mcitem(1) else: logger.debug("Fuehre Singleclickitem aus") next_time = sh.now() + dateutil.relativedelta.relativedelta(seconds=1) sh.scheduler.add(scheduletask, scitem, prio=3, cron=None, cycle=None, value=invalue, offset=None, next=next_time) #setattr(logic, 'save_state_' + item.id(), 0)
Network Plugin Logik, damit ein Item direkt seinen Wert übers Netzwerk zB an eine zweite SmarthomeNG Instanz schicken kann:
Code:
if trigger['by'] == 'Item': lItemName = trigger['source'] lItem = sh.return_item(lItemName) sh.nw.udp('10.0.0.152', 9999, 'item|{0}|{1}'.format(lItemName, lItem())) logger.info("udpSend: {0}, {1}".format(lItemName, lItem())) else: logger.debug("Keine Triggerung udpSend von Item")
Code:
#!/usr/bin/env python # logger.info(trigger) source_item = sh.return_item(trigger['source']) prio = trigger['value'] logger.debug("Trigger Item for Priority Logic: {0}, Value: {1}".format(source_item,prio)) has_zwang = False has_sperrenaus = False has_sperrenwert = False search_id = source_item.id()+".zwangsstellung" for child in source_item.return_children(): if child.id() == search_id: has_zwang = True if has_zwang: if prio == 0: source_item.zwangsstellung([0,0]) elif prio == 1: source_item.zwangsstellung([0,1]) elif prio == 2: source_item.zwangsstellung([1,0]) elif prio == 3: source_item.zwangsstellung([1,1]) else: logger.debug("Kein Zwangsstellungsitem.")
Kommentar