Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Frage zu comobject

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

    [Codebeispiel] - √ - Frage zu comobject

    Hallo,

    zur Generierung einer Anforderung bin ich wie folgt vorgegangen:
    [highlight=epc]
    Anforderung=Adresse1 or Adresse2 or mtime(02,00)
    if (Anforderung) then ...
    [/highlight]

    Wunsch ist, dass jedes EIN-Telegramm, sei es von Adresse1 oder Adresse2 sowie stündlich, die Anforderung invalidiert, damit sie von Folgeabfragen ausgewertet werden kann.

    Wenn also z.B Adresse1 EIN ist und Adresse2 auf EIN geht, soll die Abfrage in der zweiten Zeile erneut durchgeführt werden.

    Ist das so richtig umgesetzt oder sollte ich da eher "comobject" verwenden?

    Da ich die Anforderung in einem Makro als Parameter verwende, würde ich nur ungern die einzelnen Gruppenadressen übergeben.

    Gruss
    Arno

    #2
    Nein, so wie Du Dir das vorstellst, wird Dein aktueller Code nicht funktionieren.

    Gemäß Validierungsschema wird ein Ausdruck nur erneut ausgewertet wenn sich mindestens einer der Parameter geändert hat.

    Das gilt unabhängig voneinander für Deinen ersten Ausdruck als auch für die if-Bedingung.

    Mit event() kann man auf ein Update triggern. Allerdings invalidiert event() einen Ausdruck bei jedem update, im vorligenden Beispiel also nicht nur bei 'EIN', sondern eben auch bei 'AUS'. Ob die Funktion dabei wirklich auf einzelne GAs beschränkt ist, oder auch auf interne Variablen oder comobject()angewendet werden kann, habe ich noch nicht ausprobiert. Das Handbuch erwähnt nur GAs.

    Bei einem comobject ist das Resultat immer der zuletzt zugewiesene Wert eines der beteiligten Parameter.
    Das Ergebnis wäre nicht dasselbe wie bei Deinem logischen Ausdruck.

    Leider sehe ich jetzt auch keine triviale Lösung des Problems. 'Anforderung' enthält nun einmal keine Information darüber, wann einer der zu seiner Bestimmung herangezogenen Parameter das letzte Mal auf 'EIN' gesetzt wurde.
    Tessi

    Kommentar


      #3
      [QUOTE=pernozzoli;160266]
      Ist das so richtig umgesetzt oder sollte ich da eher "comobject" verwenden?
      Comobject ist da eher die Abbildung einer StatusGA im EibPC, wie es Tessi schon richtig beschrieben hat.
      Du müsstest einfach
      [highlight=epc]
      Anforderung=(Adresse1 and event(Adresse1)) or (Adresse2 and event(Adresse2)) or mtime(02,00)
      if (Anforderung) then ...
      [/highlight]
      coden. Da geht Anforderung immer nur kurz auf EIN und gewährleistet durch das folgende AUS, dass die if-Bedingung genau 1x invalidiert wird.
      offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
      Enertex Produkte kaufen

      Kommentar


        #4
        Hallo,

        ok, habe das anders gelöst... Ich setze die Anforderung zurück (AUS), so dass bei der nächsten Zustandsänderung (auf EIN) einer der angegebenen Bedingungen die Variable neu gesetzt und damit invalidiert wird.

        Danke für die Hinweise!
        Arno

        Kommentar


          #5
          Zitat von pernozzoli Beitrag anzeigen
          ok, habe das anders gelöst... Ich setze die Anforderung zurück (AUS), so dass bei der nächsten Zustandsänderung (auf EIN) einer der angegebenen Bedingungen die Variable neu gesetzt und damit invalidiert wird.
          Das geht???

          Wenn der Code jetzt ungefähr so aussieht:
          [highlight=epc]
          Anforderung=Adresse1 or Adresse2 or mtime(02,00)
          if (Anforderung) then Anforderung=AUS ... [/highlight]dann würde ich jetzt erwarten, das im Falle von Adresse1=EIN und Adresse2=EIN beim nächsten Telegramm mit EIN an Adresse1 oder Adresse2 keine erneute Zuweisung von EIN an Anforderung mehr erfolgt, da sich kein Parameter im Ausdruck geändert hat. Damit aber bliebe Anforderung=AUS, so wie zuletzt durch das if gesetzt - was so ja nicht gewünscht war.

          Oder habe ich da das Validierungsschema falsch verstanden?
          Tessi

          Kommentar


            #6
            grmpfff
            Also doch für alle 10 Gruppenadressen, die ich prüfe wie folgt:

            [highlight=epc]
            if event(Adresse1) or event(Adresse2) or ... then {
            Anforderung = Adresse1 or Adresse2 ...
            }

            ...

            if (Anforderung) then Anforderung = AUS ...
            [/highlight]

            lt. Handbuch sollte innerhalb des if-Zweigs eine Invalidierung stattfinden...

            Was sagen denn die enertex-Spezialisten dazu?

            Kommentar


              #7
              Zitat von pernozzoli Beitrag anzeigen
              [highlight=epc]
              if event(Adresse1) or event(Adresse2) or ... then {
              Anforderung = Adresse1 or Adresse2 ...
              }
              if (Anforderung) then Anforderung = AUS ...
              [/highlight]
              lt. Handbuch sollte innerhalb des if-Zweigs eine Invalidierung stattfinden...

              Das wird klappen, da ja event immer nur kurz auf EIN geht. Tessi hat aber recht, was den ursprünglichen Code betrifft.
              offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
              Enertex Produkte kaufen

              Kommentar

              Lädt...
              X