Seite 1 von 2

Blockly Rule kopieren

Verfasst: 10. Jul 2022 10:40
von pauliv_de
Ein Blockly Script das ich entwickelt habe besteht aus ca. 20 Blöcken.
Ein ähnliches Script benötige ich mehrmals, deshalb würde ich es gerne kopieren anderswo einfügen und dann entsprechend anpassen.
Kennt jemand einen Trick wie man sowas machen kann ?
Danke im Voraus
Paul

Re: Blockly Rule kopieren

Verfasst: 10. Jul 2022 13:06
von Harka
Hi,
Du kannst den Code der Rule kopieren und in die neue Rule einfügen (das Teil mit dem kryptischen blockSource).
Schau auch mal ob du den wiederholten Teil nicht in ein eigenes Scipt auslagern kannst und in den Regeln aufrufst.

Re: Blockly Rule kopieren

Verfasst: 10. Jul 2022 21:28
von pauliv_de
OK, danke daran hatte ich auch schon gedacht.. da ich verschiedene Blockly Scripte für jemand anderes vorbereiten möchte, bleibt bei dieser Vorgehensweise die "grafische Programmierung" auf der Strecke.

Nun habe ich es auf eine andere Art und Weise versucht...

Die Datei "automation_rules.json" im Verzeichnis \\<servername>\openHAB-userdata\jsondb enthält Rules und Scripte.
Die grafischen Blockly Scripte beginnen jeweils mit "blockSource":
Einen solchen Block habe ich über einen anderen vorhanden "blockSource": kopiert... allerdings kann man das in der UI noch nicht erkennen. Erst nachdem ich openHAB neu gestartet hatte war die Änderung sichtbar und auch einsatzbar !

Es geht also doch - bei dieser Vorgehensweise sind ein Backup zuvor und eine sehr sorgfältige Ausführung unerlässlich !

Wer nicht genau weiß was er tut sollte das NICHT nachmachen !!

Re: Blockly Rule kopieren

Verfasst: 11. Jul 2022 01:31
von udo1toni
Nein, Du kannst einfach den Code-Block einer Blockly Rule kopieren und in eine neue (leere) Blockly Rule einfügen. Du musst lediglich darauf achten, nicht den Namen der Rule zu überschreiben. Anschließend kannst Du wieder in die grafische Ansicht zurück schalten und solltest dort die Blockly Rule als Kopie vorfinden.

Re: Blockly Rule kopieren

Verfasst: 11. Jul 2022 10:38
von pauliv_de
Hallo Udo, so geht's bei mir nicht.

Re: Blockly Rule kopieren

Verfasst: 11. Jul 2022 11:40
von udo1toni
Ich habe das gerade bei mir getestet und es funktioniert einwandfrei.

Im Einzelnen:
  1. eine leere Rule anlegen, Namen vergeben, then-Teil auf Blockly Rule konfigurieren.
  2. Rule speichern.
  3. Codeblock der zu kopierenden Rule markieren und in die Zwischenablage abspeichern (as it is).
  4. In die neue Rule wechseln, dort in die Codeansicht wechseln.
  5. Codeblock einfügen.
  6. Speichern nicht vergessen.
  7. Ansicht auf Blockly wechseln.
Punkt 3. habe ich allerdings als erstes gemacht, aber das spielt keine Rolle, man kann dann nur die Zwischenablage nicht verwenden, bis der Code eingefügt wurde...

Re: Blockly Rule kopieren

Verfasst: 11. Jul 2022 14:56
von pauliv_de
Leider funktioniert es nicht, und zwar kann ich den Punkt 7 nicht ausführen.
Im Normalfall sind sowohl in der Blockly-Ansicht wie auch in der Codeansicht unten rechts zwei Icons mit denen man zwischen den Ansichten umschalten kann.
Diese Icons habe ich bei der kopierten Regel in der Codeansicht leider nicht....
(openHAB 3.3.0 auf piVCCU)

Re: Blockly Rule kopieren

Verfasst: 11. Jul 2022 17:54
von Harka
Versuch das Einfügen mal bitte mit diesem kleinem Beispiel:

Code: Alles auswählen

configuration: {}
triggers:
  - id: "1"
    configuration:
      time: 19:00
    type: timer.TimeOfDayTrigger
conditions: []
actions:
  - inputs: {}
    id: "2"
    configuration:
      blockSource: <xml xmlns="https://developers.google.com/blockly/xml"><block
        type="oh_log" id="eUA8Y#XHaAo]]JhgSuhC" x="4" y="25"><field
        name="severity">info</field><value name="message"><shadow type="text"
        id="]5Mtn@8YajWu=lV1*E/9"><field name="TEXT">es ist 19:00
        Uhr</field></shadow></value></block></xml>
      type: application/javascript
      script: >
        var logger =
        Java.type('org.slf4j.LoggerFactory').getLogger('org.openhab.rule.' +
        ctx.ruleUID);



        logger.info('es ist 19:00 Uhr');
    type: script.ScriptAction
Hier klappt es auf der Rules-Seite mit
(+) Drücken -> Namen vergeben -> rechts oben auf Code gehen -> die 4 vorhanden Zeilen entfernen -> neuen Code einfügen -> speichern

Re: Blockly Rule kopieren

Verfasst: 11. Jul 2022 19:29
von udo1toni
pauliv_de hat geschrieben: 11. Jul 2022 14:56 Leider funktioniert es nicht, und zwar kann ich den Punkt 7 nicht ausführen.
Im Normalfall sind sowohl in der Blockly-Ansicht wie auch in der Codeansicht unten rechts zwei Icons mit denen man zwischen den Ansichten umschalten kann.
Diese Icons habe ich bei der kopierten Regel in der Codeansicht leider nicht....
(openHAB 3.3.0 auf piVCCU)
Nö. Die Umschaltung zwischen grafischer und Code-Ansicht erfolgt in der Main UI oben über die Karteireiter mit der passenden Beschriftung, da gibt es keine Icons.

Notfalls schließt Du das Script komplett und öffnest die Rule anschließend neu. Wenn das nicht funktioniert, hast Du Dich nicht an die Beschreibung gehalten.

Re: Blockly Rule kopieren

Verfasst: 11. Jul 2022 23:28
von pauliv_de
Ja, jetzt habe ich es begriffen....
Im Titel habe ich zwar "Blockly Rule kopieren" geschrieben, im Text aber "Blockly Script" und genau das hatte ich auch versucht, denn beim Anlegen einer Rule hatte ich im THEN-Teil "Run Script" ausgewählt, und zwar ein vorhandenes
Unter Udos Punkt 3 habe ich immer die Javascript-Ansicht kopiert, und das führt eben nicht zum gewünschten Ergebnis. Das Script hatte ich zuerst angelegt, die Rule dazu erst anschließend.
Das bedeutet; ein vorhandenes Blockly-Script kann man nicht so einfach kopieren, wohl aber eine Rule deren Script in einem Arbeitsgang mit der Rule angelegt wird!

Danke an Udo und Harka für eure tatkräftige Unterstüzung.