Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Neues Plugin: Google Blockly als visueller Editor für sh.py Logiken

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

    #46
    Hallo,

    @walldi: Kannst du mir hier helfen?

    Gruß,
    Hendrik

    Kommentar


      #47
      Hallo Hendrik,
      sorry, ich kenne den Fehler und hatte das auch schon irgendwo gefixt. Hoffentlich habe ich zwischen den Tagen etwas Zeit, mich hierum zu kümmern.
      Gruß, Dirk

      Schau mal, ob das mit u.g. Version der shblocks/items.py funktioniert: (Auf die Entw.Umgebung / Git habe ich momentan keinen Zugriff.)
      Es gibt aber wohl noch weitere Bugs.
      Code:
      /**
       * @license
       * Visual Blocks Editor for smarthome.py
       *
       * Copyright 2015 Dirk Wallmeier
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */
      
      /**
       * @fileoverview Variable blocks for Blockly.
       * @author DW
       */
      'use strict';
      
      goog.provide('Blockly.Blocks.sh_items');
      
      goog.require('Blockly.Blocks');
      
      
      
      Blockly.Blocks['sh_item_obj'] = {
        init: function() {
          var hiddenFieldPath = new Blockly.FieldTextInput("Path");
          hiddenFieldPath.setVisible(false);      
          var hiddenFieldType = new Blockly.FieldTextInput("Type");
          hiddenFieldType.setVisible(false);
          var fixedFieldName = new Blockly.FieldTextInput("Name");
          this.appendDummyInput()
              //.appendField("Item: ")
              .appendField(fixedFieldName, "N")
              .appendField(hiddenFieldPath, "P")
              .appendField(hiddenFieldType, "T")
          this.setOutput(true, "shItemType");
          this.setColour(210);
          this.setTooltip(this.getFieldValue('P'));
          this.setHelpUrl('http://www.example.com/');
          this.setEditable(false);   
        }
      };
      
      Blockly.Python['sh_item_obj'] = function(block) {
        var iName = block.getFieldValue('N');
        var iPath = block.getFieldValue('P');
      
        // TODO: Assemble Python into code variable.
        var code = 'sh.return_item("' + iPath + '")';
        // TODO: Change ORDER_NONE to the correct strength.
        return [code, Blockly.Python.ORDER_ATOMIC];
        //return code;
      };
      
      
      
      /*Blockly.Blocks['sh_item'] = {
        /**
         * Block for item
         * @this Blockly.Block
         * /
        init: function() {
          var itemlist = new Blockly.FieldTextInput('0');
          itemlist.setVisible(false);
          var dropdown = new Blockly.FieldDropdown( function () {
                                    var il = new Array();
                                    il = itemlist.getValue();
                                    if (il != '0') { il = eval("(function(){return " + il + ";})()");};
                                    return il;
                                   } );
          this.setColour(340);
          this.appendDummyInput()
              .appendField(itemlist, 'ITEMLIST')
              .appendField('Item')
              .appendField(dropdown, 'ITEM');
          this.setOutput(true, "SHITEM");
          this.setTooltip('Gibt ein Item Objekt zurück.');
        },
      };
      
      Blockly.Python['sh_item'] = function(block) {
        // Variable getter.
        var code = 'sh.' + block.getFieldValue('ITEM');
        return [code, Blockly.Python.ORDER_ATOMIC];
      };
      */
      
      Blockly.Blocks['sh_item_get'] = {
        /**
         * Block for item getter. -> this is a "Sensor"
         * @this Blockly.Block
         */
          init: function() {
              this.setHelpUrl('');
              this.setColour(260);
              this.appendValueInput("ITEMOBJECT")
                  .setCheck("shItemType")
                  .appendField("Wert von");
              this.setInputsInline(true);
              this.setOutput(true);
              this.setTooltip('Gibt den Wert des Items zurück.');
          }
      };
      
      Blockly.Python['sh_item_get'] = function(block) {
          var itemobj = Blockly.Python.valueToCode(block, 'ITEMOBJECT', Blockly.Python.ORDER_ATOMIC) || 'item';
          var code = itemobj + '()';
          return [code, Blockly.Python.ORDER_ATOMIC];
          //return code;
      };
      
      
      Blockly.Blocks['sh_item_set'] = {
        /**
         * Block for item setter.
         * https://blockly-demo.appspot.com/static/demos/blockfactory/index.html#7wv5ve
         */
        init: function() {
          this.setHelpUrl('http://www.example.com/');
          this.setColour(260);
          this.appendValueInput("ITEMOJECT")
              .setCheck("shItemType")
              .appendField("setze");
          this.appendValueInput("VALUE")
              .appendField("auf den Wert");
          this.setInputsInline(true);
          this.setPreviousStatement(true);
          this.setNextStatement(true);
          this.setTooltip('');
        }
      };
      
      Blockly.Python['sh_item_set'] = function(block) {
        var itemobject = Blockly.Python.valueToCode(block, 'ITEMOJECT', Blockly.Python.ORDER_ATOMIC) || 'item';
        var value = Blockly.Python.valueToCode(block, 'VALUE', Blockly.Python.ORDER_ATOMIC) || '0';
        // TODO: Assemble Python into code variable.
        //var code = '...';
        var code = itemobject + '(' + value + ')\n';
        //return [code, Blockly.Python.ORDER_FUNCTION_CALL];
        return code;
      };
      
      
      
      Blockly.Blocks['sh_item_attr'] = {
        init: function() {
          var attrlist = new Blockly.FieldTextInput('0');
          attrlist.setVisible(false);
          var dropdown = new Blockly.FieldDropdown( function () {
                                    var al = new Array();
                                    al = attrlist.getValue();
                                    if (al != '0') { al = eval("(function(){return " + al + ";})()");};
                                    return al;
                                   } );
          this.appendDummyInput()
              .appendField("Attribut")
              .appendField(dropdown, "ATTR")
              .appendField("von Item");
          this.appendValueInput("ITEM")
              .setCheck("shItemType");
          this.setInputsInline(true);
          this.setOutput(true, null);
          this.setColour(120);
          this.setTooltip('');
          this.setHelpUrl('http://www.example.com/');
        }
      };
      
      Blockly.Python['sh_item_attr'] = function(block) {
        var dropdown_attr = block.getFieldValue('ATTR');
        var value_item = Blockly.Python.valueToCode(block, 'ITEM', Blockly.Python.ORDER_ATOMIC);
        // TODO: Assemble Python into code variable.
        var code = '...';
        // TODO: Change ORDER_NONE to the correct strength.
        return [code, Blockly.Python.ORDER_NONE];
      };
      
      
      Blockly.Blocks['sh_item_hasattr'] = {
        init: function() {
          this.appendDummyInput()
              .appendField("das Item");
          this.appendValueInput("ITEM")
              .setCheck("shItemType");
          this.appendDummyInput()
              .appendField("hat das Atribut")
              .appendField(new Blockly.FieldTextInput("default"), "ATTR");
          this.setInputsInline(true);
          this.setOutput(true, "Boolean");
          this.setColour(120);
          this.setTooltip('');
          this.setHelpUrl('http://www.example.com/');
        }
      };
      
      Blockly.Python['sh_item_hasattr'] = function(block) {
        var value_item = Blockly.Python.valueToCode(block, 'ITEM', Blockly.Python.ORDER_ATOMIC);
        var text_attr = block.getFieldValue('ATTR');
        // TODO: Assemble Python into code variable.
        var code = '...';
        // TODO: Change ORDER_NONE to the correct strength.
        var code = 'sh.iHasAttr(' + value_item + ', ' + text_attr +' )';
          return [code, Blockly.Python.ORDER_NONE];
      
      };

      Kommentar


        #48
        walldi wir können also noch mit einem PR Deinerseits rechnen? nur für die weitere releaseplanung? Die Plugins sind mitlerweile in ein separates Unterprojekt ungezogen. Bei Fragen am besten ins Gitter kommen.

        Für Blockly habe ich inzwischen im backend ein Pulldown Menü bei Logiken gebaut. Bzgl Übersetzung ist immer noch mit allen zu besprechen, ob wir nicht doch für das 1.3er Release noch ein SHNG-weites Übersetzungssystem wollen. ich wäre da schon dafür.

        Kommentar


          #49
          Wie gesagt, ich werde mich nochmal eingehend mit dem Plugin beschäftigen. In welcher Form ich das dann teilen werde (was ich sicher vorhabe), will ich dabei aber ebenso zur Disposition stellen, wie einige Designentscheidungen, die die Integration betreffen (insb. das Backend-Plugin). Ich möchte dabei offener für einige neue Ideen bzgl. Logik-Programmierung werden, die ich als zentralen Bestandteil der Konfiguration ansehe. Keine Ahnung, ob das mit der Releaseplanung zu synchronisieren sein wird.

          Kommentar


            #50
            Hallo zusammen wolte nur kurz schreiben das Blockly gut ist und auch gut spielt mit 1.2 . Nur leider wäre es schön wenn er eine abfrage machen würde welche hardware ( raspi, PC, usw ) da wäre b.z.w ob eine rs232 oder usb oder bei Raspi und so die Gpio' s und das zuverfügung stellen würde, oder einfach alles was geht einbauen und man kann denn die schnittstelle sich aussuchen wäre noch so meine idea. Google blockly ist doch fast der gleich code werde mal sehen ob da was geht.
            mfg

            Kommentar


              #51
              Könnte mir jemand erklären, wie ich das überhaupt sauber einbinde? Ich habe den Dev Zweig, ich kann auf die Blockly Seite surfen im Backend, auch wenn ich die URL von Hand eingeben muss, weil es keinen Link in der Menüleiste gibt.

              Nun erstelle ich eine Logic, soweit so gut. Wenn ich aktivieren drücke finde ich meine Logic aber nicht unter dem Menüpunkt Logic. Das haut nicht hin. Übersehe ich was? Gibt es noch was, was man vorher einrichten muss?

              Danke vorab,
              Patrick

              Kommentar


                #52
                Kenne jetzt den Status nicht mehr, inwieweit das noch integriert oder de-integriert ist. Gedacht ist es so, dass die Logik-Datei blockly_logics.py läuft, in der der Py-Code, den Blockly generiert, drin steht. Die sollte beim Speichern automatisch richtig im Scheduler angemeldet werden. Ist aber nicht zum Editieren gedacht.

                Kommentar


                  #53
                  patrickgoll Das Blockly taucht dann im Menü auf, wenn man den Developer Mode des Backends aktiviert. Und das hat auch seinen Grund: Das Ding ist weiterhin frühe Alpha. Es gab im Kernteam aber Interesse, daran weiterzubauen. Daher habe ich bisher verzichtet, das Ding wieder rauszuoperieren und stattdessen nur aus dem Menü für normale User verbannt.

                  Wer sich für eine Weiterentwicklung opfern will ist hiermit natürlich herzlichst eingeladen..

                  Kommentar


                    #54
                    Gibt es denn sowas wie eine Liste von Issues, was noch nicht geht oder was getan werden soll?
                    Immerhin läuft es bei mir.

                    Kommentar


                      #55
                      Nein. Ein erster Anfang wäre aber das Ding lokalisierbar zu machen.

                      Msinn hatte noch Punkte glaube ich. Soweit ich weiss muss dafür aber auch im Core noch mehr passieren.

                      Kommentar


                        #56
                        Also das mal als Beispiel sieht für mich nicht richtig aus. Es fehlt hier doch die komplette Werteabfrage s < 40 sollte soch sowas wie sh.Zentral... sein oder? Außerdem klappt das mit dem Textbaustein im Notification Tool auch nicht so wirklich. Der fehlt komplett.

                        Angehängte Dateien

                        Kommentar


                          #57
                          Hallo,
                          suche den fehler, habe Blockly und die Smart 1.3 bei mir am laufen aber die blockly geschichte taucht im Backend nicht auf. Mit der smart 1.2 hatte ich blockly mit allem am laufen. Also grundsatz geht es weiter oder wo und wie sehen die vorgehensweisen jetzt aus.
                          mfg

                          Kommentar


                            #58
                            pino wie eine auf einer hand abzählbare menge posts weiter oben geschrieben, ist es aktuell nur bei gesetztem developer mode zu sehen, da ich das blockly auf diesem stand nicht supportbar halte. das ding wirklich rund zu schleifen damit es die masse nutzen kann und in das backend matched ist eine sch.. arbeit, daher diese entscheidung. und die plugins sind seit längerem in einem subproject, also unabh. vom release. wenn sich nichts bewegt und ich selber nicht die muße fine dran weiterzubauen, fliegt es mittelfristig raus.

                            man darf sich aber gerne mit PRs beteiligen, wie auch weiter oben geschrieben

                            Kommentar


                              #59
                              Hallo zusammen,

                              da hier schon länger nichts mehr los, ist meine Frage ob ich das Plugin problemlos einfügen und nutzen kann?


                              Danke

                              Kommentar


                                #60
                                Ich glaube schon
                                es sind immer Tester gesucht :-)

                                https://knx-user-forum.de/forum/supp...lugins-gesucht

                                Kommentar

                                Lädt...
                                X