Ankündigung

Einklappen
Keine Ankündigung bisher.

Logiken: Beispiele als Bausteine ins Release oder kommentiert ins Wiki?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #16
    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.
    Viele Grüße
    Martin

    There is no cloud. It's only someone else's computer.

    Kommentar


      #17
      Blockly im Backend wäre auch in meinen Augen der richtige Ansatz.

      Kommentar


        #18
        Wegen des Editors: MIT License wäre ok.. wenn das jemand einbaut halt bitte die Seite mit den Lizenzen erweitern alles aber für die 1.3 erst bitte und nur im DEV Branch. Blockly wäre dann Step 2 meines Erachtens.

        Kommentar


          #19
          Zitat von Msinn Beitrag anzeigen
          ... Also bleiben die Trigger Szenarien im Moment gleich.
          In meinem Blocky Code werden die Logiken im laufenden System reloaded und dabei auch die Scheduler bzw. Trigger aktualisiert.
          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) 
          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?)
          Zuletzt geändert von walldi; 10.08.2016, 08:36.

          Kommentar

          Lädt...
          X