Seite 12 von 179

Re: SDV V3.08.01B Scripterstellung und Objektinspektor / Changer CCU/RM

Verfasst: 24.04.2019, 19:13
von Xel66
Wollte nur mal wieder einen Dank reinwerfen. Sonst wird das hier ja ein Monolog ohne jegliches Feedback. Nutze SDV zwar relativ selten aber doch regelmäßig. Tolles Engagement.

Gruß Xel66

Re: SDV V3.08.01B Scripterstellung und Objektinspektor / Changer CCU/RM

Verfasst: 24.04.2019, 20:00
von finerider
... ich kann mich den Worten meines "Vorredners" nur anschließen.

Das Tool hat mir bei der Vorbereitung und Umsetzung des Wechsels von CCU2 auf CCU3 sehr geholfen.

Alle Achtung und tolles Engagement ...

Re: SDV V3.08.01B Scripterstellung und Objektinspektor / Changer CCU/RM

Verfasst: 28.04.2019, 19:01
von Black
thnx, aber die "Ruhe" bedeute diesmal wohl das der Version doch recht gut geworden ist. Gab da aber trotzdem noch nen grund, 2 Dinge zu fixen ^^.

Mittlerweile hab ich in Freepascal meine JSON klasse fertig, ebenso die CCU routinen, die dafür sorgen, das die Ergebnisse als JSON verpackt an den SDV gehen. JSon auch, weil ich mir eine Tür nach Jacascript IOBroker da öffnen will.
Das JSON wird benötigt für die Funktion: Backup / restore einzelner Programme: bzw Backup Restore aller Programme.
Das Backup ist komplett Ise-ID unabhängig, es wird vorher ein Code in dem restore Programm erzeugt, der verifiziert das die benötigten geräte beim einspielen des Backups vorhanden sind (SerNr und HSSType) ebenso die benötigten Systemvariablen (name und ValueType müssen passen). zeitmodule erzeugt der SDV selber.
Das Json zerlegt dann Freepascal und baut daraus den programmtext für das restore programm zusammen.
ich habe mich für die Zweipass Lösung entschieden weil: sie ist wesentlich schneller. Das erzeugte Backupprogramm auf der CCU ist recht klein und übersichtlich, der KommLoad ist nur das reine JSON, die Logig ist dann in Freepascal im SDV ausporgrammiert. das ganze ist dann etwas gewaltig schneller als eine scriptversion auf der CCU, ausserdem macht es etwas mehr spass, dies in einer vernünftigen Hochsprache zu schreiben und auch debuggen zu können.

Dabei ebtstehen noch 2, 3 "Abfallprogramme, deren Logig quasi nebenbei abfällt: das erste wird sein: eine möglichkeit, ein zeitmodul in einem programm zu selektieren und der SDV erzeugt im Editor auf wunsch den Code, diess zu adressieren und deren zeitwerte verändern zu können.

Nebenbei hat sich mein internerer Debugger etwas weiter verbessert, ich denke, da wird auch etwas bei rauskommen, wo man sich ein programm aufdröseln lassen kann in Rule, Conditions usw, dabei aber gleichzeitig die Singleconditions aufgelöst werden in die momentanwerte, die die Variablen, Datenpunkte etc des Programmes gerade haben. Wenn ich lust habe, versuch ich eine darstellung wie damals im S5-FUP Editor. (Diejenigen, die Siemens SPS kennen wissen was ich meine) also eine Momentaufnahme der anstehenden Logig (ein compiler solte dies in entsprechende quasi echtzeit hinbekommen, die internen Datenstrukturen im SDV eigentlich auch).

Black

Re: SDV V3.08.01B Scripterstellung und Objektinspektor / Changer CCU/RM

Verfasst: 30.04.2019, 10:21
von Black
Status: ein CCU programm kann nun Konsistent in ein JSON Object zerlegt werden. dieses wird dann von der CCU exportiert.

Beispiel für so ein Konstrukt:

Code: Alles auswählen

{
  "Rules": [
    {
      "RuleOperatorType": 2,
      "ElseIfFlag": true,
      "RuleConditions": [
        {
          "CndOperatorType": 2,
          "SINGLECONDITION": [
            {
              "ConditionType": 1,
              "ConditionType2": 4,
              "OperatorType": 1,
              "ConditionChannel": 65535,
              "LeftValType": 19,
              "RightVal1ValType": 2,
              "RightVal2ValType": 2,
              "RightVal1": false,
              "RightVal2": false
            },
            {
              "ConditionType": 1,
              "ConditionType2": 4,
              "OperatorType": 1,
              "ConditionChannel": 65535,
              "LeftValType": 19,
              "RightVal1ValType": 2,
              "RightVal2ValType": 2,
              "RightVal1": false,
              "RightVal2": false
            },
            {
              "ConditionType": 1,
              "ConditionType2": 4,
              "OperatorType": 1,
              "ConditionChannel": 1465,
              "LeftValType": 18,
              "RightVal1ValType": 16,
              "RightVal2ValType": 16,
              "RightVal1": 0,
              "RightVal2": 0
            }
          ]
        },
        {
          "CndOperatorType": 2,
          "SINGLECONDITION": [
            {
              "ConditionType": 1,
              "ConditionType2": 4,
              "OperatorType": 1,
              "ConditionChannel": 65535,
              "LeftValType": 19,
              "RightVal1ValType": 2,
              "RightVal2ValType": 2,
              "RightVal1": false,
              "RightVal2": false
            },
            {
              "ConditionType": 1,
              "ConditionType2": 4,
              "OperatorType": 1,
              "ConditionChannel": 65535,
              "LeftValType": 19,
              "RightVal1ValType": 2,
              "RightVal2ValType": 2,
              "RightVal1": false,
              "RightVal2": false
            },
            {
              "ConditionType": 3,
              "ConditionType2": 13,
              "OperatorType": 1,
              "ConditionChannel": 65535,
              "LeftValType": 24,
              "RightVal1ValType": 18,
              "RightVal2ValType": 0,
              "RightVal1": 9419,
              "RightVal2": null
            }
          ]
        }
      ],
      "RuleDestination": {
        "BreakOnRestart": true,
        "SingleDestinations": [
          {
            "DestinationParam": 19,
            "DestinationValueType": 2,
            "DestinationChannel": 65535,
            "DestinationDP": 950,
            "DestinationValueParamType": 0,
            "DestinationValueParam": null
          },
          {
            "DestinationParam": 18,
            "DestinationValueType": 19,
            "DestinationChannel": 7467,
            "DestinationDP": 7468,
            "DestinationValueParamType": 0,
            "DestinationValueParam": null
          },
          {
            "DestinationParam": 20,
            "DestinationValueType": 20,
            "DestinationChannel": 65535,
            "DestinationDP": 65535,
            "DestinationValueParamType": 28,
            "DestinationValueParam": "2019-04-30 00:00:10",
            "DestinationValue": "WriteLine (\"Ich bin ein testScript\");"
          }
        ]
      }
    },
    {
      "RuleOperatorType": 2,
      "ElseIfFlag": true,
      "RuleConditions": [
        {
          "CndOperatorType": 2,
          "SINGLECONDITION": [
            {
              "ConditionType": 1,
              "ConditionType2": 4,
              "OperatorType": 1,
              "ConditionChannel": 65535,
              "LeftValType": 19,
              "RightVal1ValType": 2,
              "RightVal2ValType": 2,
              "RightVal1": false,
              "RightVal2": false
            }
          ]
        }
      ],
      "RuleDestination": {
        "BreakOnRestart": true,
        "SingleDestinations": [
          {
            "DestinationParam": 18,
            "DestinationValueType": 2,
            "DestinationChannel": 1465,
            "DestinationDP": 4037,
            "DestinationValueParamType": 0,
            "DestinationValueParam": null
          }
        ]
      }
    },
    {
      "RuleOperatorType": 2,
      "ElseIfFlag": false,
      "RuleConditions": [],
      "RuleDestination": {
        "BreakOnRestart": true,
        "SingleDestinations": [
          {
            "DestinationParam": 19,
            "DestinationValueType": 2,
            "DestinationChannel": 65535,
            "DestinationDP": 8291,
            "DestinationValueParamType": 0,
            "DestinationValueParam": null
          }
        ]
      }
    }
  ],
  "Datapoints": [
    {
      "ID": 1855,
      "Methods": {
        "ENUM": 27,
        "NAME": "AllwaysTrue",
        "ValueType": 2,
        "Type": 1089
      }
    },
    {
      "ID": 3833,
      "Methods": {
        "ENUM": 27,
        "NAME": "Rollo.AstroTag",
        "ValueType": 2,
        "Type": 1089
      }
    },
    {
      "ID": 1490,
      "Methods": {
        "ENUM": 5,
        "NAME": "BidCos-RF.NEQ1478013:1.STATE",
        "ValueType": 16,
        "Type": 393281
      }
    },
    {
      "ID": 950,
      "Methods": {
        "ENUM": 27,
        "NAME": "CCU_BOOT",
        "ValueType": 2,
        "Type": 1089
      }
    },
    {
      "ID": 4079,
      "Methods": {
        "ENUM": 27,
        "NAME": "EN_HeizAnbau",
        "ValueType": 2,
        "Type": 1089
      }
    },
    {
      "ID": 7468,
      "Methods": {
        "ENUM": 5,
        "NAME": "HmIP-RF.001A58A9A2801C:6.ON_TIME",
        "ValueType": 4,
        "Type": 393281
      }
    },
    {
      "ID": 6074,
      "Methods": {
        "ENUM": 27,
        "NAME": "Alarmzone 2",
        "ValueType": 2,
        "Type": 2113
      }
    },
    {
      "ID": 4037,
      "Methods": {
        "ENUM": 27,
        "NAME": "SHOP.AnwahlShopZu",
        "ValueType": 2,
        "Type": 1089
      }
    },
    {
      "ID": 8291,
      "Methods": {
        "ENUM": 27,
        "NAME": "zzz",
        "ValueType": 2,
        "Type": 1089
      }
    }
  ],
  "Program": {
    "Name": "Demo",
    "PrgInfo": "DemoTest",
    "Enabled": true,
    "Visible": true,
    "Internal": false
  },
  "Zeitmodule": [
    {
      "ID": 9419,
      "Methods": {
        "TimerType": 9,
        "Time": 1167679020,
        "CalDuration": 1800,
        "CalRepeatTime": 0,
        "Weekdays": 0,
        "Period": 0,
        "Begin": 1553036400,
        "End": 0,
        "CalRepetitionCount": 0,
        "SunOffsetType": 0
      }
    }
  ]
}
Das datenformat, welches auch noch erweitert werden kann, wenns sich als notwendig herausstellen sollte, bildet ein Programm komplett ab inkl Scritpe, verwendeter Datenpunkte und Zeitmodule.
PRG_JSON.jpg
Auf Wunsch meines Alpha0 testers werd ich auch die möglichkeit vorsehen, den JSON String zu exportieren und zu speichern, ebenso zu importieren.

Nu kommt der letzte Step, dieses in freepascal über meine geschriebene JSON Class in ein programm zu wandeln, welches auf der CCU dann ein programm gemäß des JSON erzeugt. Da aber die Methoden schon in dem JSON definiert sind... ^^ ist es jetzt noch tipparbeit.

Black

so sonne, ab mit den Hunden aufs feld

Re: SDV V3.08.01B Scripterstellung und Objektinspektor / Changer CCU/RM

Verfasst: 30.04.2019, 14:13
von jmaus
Black hat geschrieben:
30.04.2019, 10:21
Nu kommt der letzte Step, dieses in freepascal über meine geschriebene JSON Class in ein programm zu wandeln, welches auf der CCU dann ein programm gemäß des JSON erzeugt. Da aber die Methoden schon in dem JSON definiert sind... ^^ ist es jetzt noch tipparbeit.
Nur so als Angebot/Idee: Ich könnte zumindest als ersten Schritt in RaspberryMatic direkt einen JSON export für Programme in der WebUI implementieren und dann eben auch gleich in dem Format das du dort definiert hast. Und dann könnte man an geeigneter Stelle auch gleich einen Import des selbigen in der WebUI vorsehen. Wenn du mir also die notwendigen Konvertierungsschritte/Routinen diesbzgl. zukommen lässt könnte man das ja versuchen in eine entsprechende Funktionalität in der WebUI der CCU direkt so vorzusehen damit man dort direkt Programme exportieren/importieren kann.

Re: SDV V3.08.02 Scripterstellung und Objektinspektor / Changer CCU/RM

Verfasst: 01.05.2019, 16:00
von Black
so es gibt noch ein kleines PreRelease zum Testen vor dem Wochenende.
Die Program Backups kommen noch, da bin ich noch dran, ein paar Neuerungen sind da aber schon drin.

- ein paar kleinere Fixes in der internen verarbeitung (u.a. Quoting in Hinblick auf die JSON verarbeitung)
- Unter Interfaces werden nun die entsprechenden Geräte mit aufgelistet (inkl der möglichkeit, rekursiv aufzulösen)
- Möglichkeit, alle Verwendeten Varianlen eines Programmes (Sysvar, Alarme, geräte) aufzulösen und diese zum Beobachten in die Favortitenliste zu laden.
devices1.jpg
variablen eines programmes zum beobachten in Favoriten übernehmen
Device2.jpg
Black

und noch ein kleines Beispiel, wie mächtig das kleine Feld: Anwenderspezifischer Filter ist.
mit folgendem Filter

Code: Alles auswählen

Finden von Zeitmodulen in Programmen
<ONCE>
object oOBJ; object oSOBJ; object oRule; boolean b;  
<LOOP>
if (oID.Type () == OT_PROGRAM) {
object oRule= oID.Rule (); b= false;
while (oRule) {
   foreach (s, system.GenerateEnum (0,oRule.RuleConditions().Count () -1)) {
      oOBJ= oRule.RuleCondition (s.ToInteger () );
      foreach (s, system.GenerateEnum (0,oOBJ.CndSingleCount() -1)) {
         oSOBJ= oOBJ.CndSingleCondition (s.ToInteger () );
         if (oSOBJ.LeftValType () == ivtCurrentDate) {b=true; }
      }
   }
oRule= oRule.RuleSubRule ();
}
}     
<COND>
b
Damit lässt sich, wenn ID_PROGRAMS selektiert ist und die internen Object vom Typ OT_PROGRAM sind die Programme filtern, die zeitmodule enthalten. (Die Filter lasen sich natürlich abspeichern und bei Bedarf auch wieder laden, man muss die nicht jedesmal neu klimpern)

Re: SDV V3.08.01B Scripterstellung und Objektinspektor / Changer CCU/RM

Verfasst: 01.05.2019, 16:10
von nicolas-eric
Cooles Tool!
Wird’s das auch mal fürn Mac geben?
Oder läuft das auch in Win10 unter VirtualBox?

Re: SDV V3.08.01B Scripterstellung und Objektinspektor / Changer CCU/RM

Verfasst: 01.05.2019, 16:16
von Black
hi, für native Mac gibts das nicht, da ichs in meiner freizeit für mich schreibe, und da ist mein laptop nun mal eine WIndows Maschine.

Vllt kommt, wenns soweit fertig ist, mal der Versuch dies auf Linux Debian zu portieren.

Zu deiner frage, ich kenne alleine 4 Leute, bei denen der SDV auf einer Win10 VM auf einer Apple Maschine stable läuft. Ich kompliliere eigentlich mti recht konservativen Einstellungen ohne "böse" Tricks was sonderfunktionen angeht.

sollte also bei dir auch laufen

greetz, Black

Re: SDV V3.08.01B Scripterstellung und Objektinspektor / Changer CCU/RM

Verfasst: 01.05.2019, 16:25
von nicolas-eric
Oh das ist ja super!
Das schaue ich mir am WE gleich mal an, wenn ich wieder zu Hause bin.

Re: SDV V3.08.03ALPHA Tester für JSON Funktionalität

Verfasst: 02.05.2019, 19:53
von Black
so, für den nächsten Step: Backup Projekte bräuchte ich ein bisschen Mittesten nun von denjenigen, die mindestens level5 haben:

es geht sich daram, die JSON Erzeugung auf der CCU und meinen JSON Parser im SDV bisschen zu ärgern. Also bei mir läufts stable, heisst aber nix. Zielsetzung ist, entweder zufinden, es läuft in allen Gegebenheiten durch oder einer hat eine Konstellation, wo ich nochmal hingucken sollte.

Parsen geht so: ein programm in der ListView selektieren, dann unter Backup den neuen Menupunkt Programm auswaählen, dann startet die JSOn generierung

Der SDV verändert in dem Lauf nix. er zieht ein angeklicktes programm als JSON in die Zwischenablage. da erscheint eine kurze meldung die quitiert wrden muss. Wenn keine weitere Warnung erscheint, lief mein SDV parser durch. da ich vorsichtig bin, es gibt die Seite: https://jsoneditoronline.org/
wo JSON Strings getestet werden können.

Dort auf dieser Seite Links den String eingeben durch Ctrl-V und versuchen lassen den String zu parsen. Dann sollte eurer Programm dort in logische Einheiten zerlegt wiederzufinden sein. Geht das ohne Systaxerror. Perfekt.

Schwerpunkte sind Scripte, hier vor allem Quotings, und extrem verschachtelte Riesenprogramme. Kurze Programme sollten ihm null schiweirgkeiten machen.

Ich brauche keine Ergebnisse zurück wenn alles durchlief ausser vllt: "x programme getestet, davon y grosse mit scripten. alles ok".
Nur da wo die Seite ein Systaxerror auswirft oder mein parser einen JSON Konvertierungsfehler wirft würde ich mal genauer hinschauen mit euch.

testversion entfernt


(Diese version ist nur für tester mit vorhandener Lizenz, bei allen anderen kommt ein Startabbruch).

ach so, ein paar Methoden mehr kennt er nun auch, Highlighting wurde verbessert, Die Funktion ProgramExecute ist implementiert (rechte Maustaste auf ein programm in der Listenansicht)


Thnk für Mitarbeit,
Black