Ankündigung

Einklappen
Keine Ankündigung bisher.

Validierungsschema beim Systemstart

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

    Validierungsschema beim Systemstart

    HAllo zusammen,

    das Validierungsschema beim Systemstart habe ich irgendwie immernoch nicht ganz verstanden. Folgender Code sendet eine Mail beim Systemstart, dass will ich aber eigentlich verhindern...

    [highlight=epc]
    if event("Wasseralarm Heizung Dachboden-0/2/15") and !"Wasseralarm Heizung Dachboden-0/2/15" and !systemstart() then {
    sendmail(EMailWasserEmpfaenger, $WASSERALARM ENTWARNUNG - Feuchtigkeit auf dem Dachboden unter der Heizung entfernt$, $WASSERALARM ENTWARNUNG - Feuchtigkeit auf dem Dachboden unter der Heizung entfernt.$);
    } endif
    [/highlight]

    Üblicherweise nimmt der EIBPc nach dem Systemstart ja an, dass alle Zustände valide sind. Die Gruppenadresse "Wasseralarm Heizung Dachboden-0/2/15" wird allerdings mittels [InitGA] beim Systemstart abgefragt. Daher kann ich mir vorstellen, dass diese if Anweisung nach dem Systemstart ausnahmsweise invalidiert wird. Wie verhindere ich dann aber die Mail zum Systemstart? Die and Verknüpfung "!systemstart()" scheint keine Lösung zu sein...

    Anderes Beispiel zur Simulation einer Alarmanlage:

    [highlight=epc]
    if !"Einbruchalarm-0/0/7" then {
    sendmail(EMailAlarmEmpfaenger, $Einbruchalarm quittiert$, $Einbruchalarm quittiert$);
    } endif
    if after(!"Einbruchalarm-0/0/7",00500u64) then write("Aussenlampen Wohnzimmer Zwangsstellung-1/3/6",0b02) endif
    [/highlight]

    Die Gruppenadresse "Einbruchalarm-0/0/7" wird nicht per [InitGA] abgefragt. Der Code sendet zwar nach dem Systemstart keine EMail (erste if-Anweisung) allerdings wird der Schreibbefehl ausgeführt (zweite if-Anweisung). Ich habe auch schon einige Verknüpfungen von !systemstart() und after() versucht, bisher leider erfolglos.

    Hat irgendjemand dazu eine Idee?

    Gruß,
    Boris.

    #2
    Zitat von kuczerek Beitrag anzeigen
    Daher kann ich mir vorstellen, dass diese if Anweisung nach dem Systemstart ausnahmsweise invalidiert wird
    Ja, das ist so richtig.
    Hier werden nun zwei Argumente gleichzeitig invalid, nämlich systemstart und die Initga-Anweisung, die auf die GAs wirkt. Dadurch kommt es zu einer Art "Glitch" in der Verarbeitung. Es hängt hier wohl auch davon ab, wie der Compiler das umsetzt.
    Eine Lösung, das zu umgehen, ist (eben mit meinen GAs hier getestet):
    [highlight=epc]
    Start=AUS
    if after(systemstart(),1u64) then Start=EIN endif
    if event("StatusEsszimmerSteckdose1-1/5/21") and "StatusEsszimmerSteckdose1-1/5/21" and Start then {
    write("TextDebug-0/2/100",$EIN$c14)
    } endif [/highlight]
    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
    Enertex Produkte kaufen

    Kommentar


      #3
      Zitat von enertegus Beitrag anzeigen
      Eine Lösung, das zu umgehen, ist (eben mit meinen GAs hier getestet):
      [highlight=epc]
      Start=AUS
      if after(systemstart(),1u64) then Start=EIN endif
      if event("StatusEsszimmerSteckdose1-1/5/21") and "StatusEsszimmerSteckdose1-1/5/21" and Start then {
      write("TextDebug-0/2/100",$EIN$c14)
      } endif [/highlight]
      Ja, da hätte man wohl auch selber drauf kommen können.
      Ich hatte das allerdings so ähnlich bereits erfolglos probiert. Nachdem das bei Dir geklappt hat, habe ich mal die Zeitspanne der after() Anweisung auf 10s hochgedrecht und --- Hurra es klappt! Vielleicht taktet meine Maschine irgendwie langsamer, so dass sie einfach etwas länger braucht bis der erste Zyklus abgearbeitet und alle Variablen validiert sind...

      Bei meinem zweiten Beispiel mit Alarmanlagensimulation hilft das allerdings nicht weiter. "Einbruchalarm-0/0/7" wird nicht per [InitGA] abgefragt. Nur der EIBPc kann auf die GA "Einbruchalarm-0/0/7" schreiben, was aber nach dem Start nicht passiert (und ja auch nicht passieren soll). Trotzdem wird bei u.a. Code zwar keine EMail gesendet (wie gewünscht), allerdings der Schreibbefehl in der zweiten IF-Anweisung ausgeführt (nicht gewünscht)....

      [highlight=epc]
      if !"Einbruchalarm-0/0/7" then {
      sendmail(EMailAlarmEmpfaenger, $Einbruchalarm quittiert$, $Einbruchalarm quittiert$);
      } endif
      if after(!"Einbruchalarm-0/0/7" and SystemstartVorbei,00500u64) then write("Aussenlampen Wohnzimmer Zwangsstellung-1/3/6",0b02) endif
      [/highlight]

      Kommentar


        #4
        OK, ich habe die zweite if-Anweisung nochmal umgeschrieben

        [highlight=epc]
        if after(!"Einbruchalarm-0/0/7",00500u64) and SystemstartVorbei then write("Aussenlampen Wohnzimmer Zwangsstellung-1/3/6",0b02) endif
        [/highlight]

        Jetzt haut es hin.

        Dennoch bin ich der Meinung, dass die if Anweisung schon beim Programmstart valide sein müsste, denn
        1. "Einbruchalarm-0/0/7" ist nicht in der [InitGA] Sektion abgefragt
        2. Eine if Anweisung die if !"Einbruchalarm-0/0/7" then lautet ist ebenfalls beim Systemstart valide

        Offenbar gibt es hier wechselwirkungen mit der after() Funktion, die zumindest ich mir nicht erklären kann. Die Variable "SystemstartVorbei" ist in meinen Augen eher ein Workaround.

        VG,
        Boris.

        Kommentar


          #5
          Hallo Boris,

          ohne es jetzt selber ausprobiert zu haben, vermute ich, dass in deinem ersten Beispiel (Wasseralarm) ein "change" statt des "event" zu dem erwünschten Ergebnis führen würde. (Die Abfrage auf "systemstart" wäre dann überflüssig.)

          Dein zweites Beispiel kann ich mir - ebenso wie du - nicht erklären. Aber auch hier könnte ein "change" weiter helfen. Nach meiner Ansicht ist das weniger ein Workaround als die Sache mit dem "SystemstartVorbei".

          Gruß,
          Jens.

          Kommentar


            #6
            Hi Jens,

            danke für die Idee, aber ich wollte das unbedingt mit event() realisieren. Bei den Alarmen will ich sicher gehen, das sich jedes Aussenden eines Telegramms im EIBPc verarbeite, unabhängig davon welchen Vorzustand eine GA im EIBPc hat. Mit change() kann ich das nicht erreichen.

            Gruß,
            Boris

            Kommentar

            Lädt...
            X