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(idbyval))
                  
          logic Logic(sh'blockly_runner_' id, {'bytecode' bytecode,})
                  
          by by.strip()
                  
          val val.strip()
                  if 
          by == 'cycle':
                      
          sh.scheduler.add('blockly_runner_' +idlogicprio=priocron=Nonecycle=val)
                      
          logger.info('Blockly Logics: cycles     => 'val)
                  
          elif by == 'crontab':
                      
          sh.scheduler.add('blockly_runner_' +idlogicprio=priocron=valcycle=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