Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - AND Verknüpfung in after Funktion

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

    - √ - AND Verknüpfung in after Funktion

    Hallo zusammen,
    stehe wieder vor der Frage, ob ich mit einer Hilfsvariable arbeiten muß oder ob meine Problemstellung durch eine Funktion erschlagen wird...

    Anforderung:
    Gerät X soll nach einer Zeit t ausgeschalten werden (über SA), wenn der Stromverbrauch von Gerät A und B und C kleiner einem Min.-Wert sind (A,B,C hängen an einem SA mit Strommessung).

    Ich habe das mit folgender Zeile versucht zu realisieren, leider ohne Erfolg (kein Fehler im Compiler, aber halt auch keine Reaktion):
    if after(TV1StromGA<=TV1Stromwert and TV2StromGA<=TV2Stromwert and TV3StromGA<=TV3Stromwert,convert(Minuten,0u64)*600 00u64) then write(AktorGA,AUS) endif

    Denkfehler oder in der After-Funktion einfach nicht zulässig?

    Alternative wäre m.E. ein Auskoppeln der AND Verknüpfung in eine If-Abfrage mit einer Hilfsvariable und diese dann in der After-Funktion abprüfen. Habe das noch nicht geprüft, wollte erst einmal Eure Meinungen hören....
    VG, Oliver

    #2
    600 00u64
    Hast du hier im Programm auch ein Leerzeichen?
    Das gehört da doch nicht hin, oder?
    Gruß
    Volker

    Wer will schon Homematic?

    Kommentar


      #3
      Hallo Volker,
      das Leerzeichen ist nicht im Code, kam anscheinend vom Copy&Paste. Wie gesagt, der Compiler wirft keinen Fehler...
      Viele Grüße, Oliver

      Kommentar


        #4
        Moin,

        ich habe meine Herdsicherung ähnlich aufgebaut:

        [highlight=epc]
        // Herdsteuerung
        // 5 Minuten, nach dem kein Strom mehr entnommen wurde, soll der Herd totgeschaltet werden (Kindersicherung)
        //
        // Herd_Abschaltverzoegerung wird s16
        RemanentVariable( Herd_Abschaltverzoegerung, 30s16, 10s16, 120s16 )

        ms2min = 60u64 * 1000u64

        //Summe der Ströme ermitteln
        Stromaufnahme_Herd = "Küche Herdanschluß L1-1/7/121"u16 + "Küche Herdanschluß L2-1/7/122"u16 + "Küche Herdanschluß L3-1/7/123"u16

        if delay(Stromaufnahme_Herd == 0u16, convert( Herd_Abschaltverzoegerung, 1u64 ) * ms2min ) and Stromaufnahme_Herd == 0u16 then {
        DebugOut_String( $Herd wurde nach Wartezeit automatisch ausgeschaltet$);
        write("Küche Herdanschluß-1/0/120", AUS);
        } endif

        [/highlight]

        Da meine Frau sich beschwert hat, das die Herdfreischaltung nach 10 min den Herd wieder sicherheitshalber abschaltet gehe ich mal davon aus, das das nach wie vor funktioniert. Ich habe den Code allerdings auch lange nicht mehr angeschaut, geschweige denn verifiziert.

        Gruß,
        Bernd

        Kommentar


          #5
          Hi Bernd,
          danke, habe ich mir angesehen, allerdings ist die AND-Anweisung bei Dir außerhalb der After/Delay-Funktion. Mein Problem ist, daß t auch für die Geräte A,B,C gelten soll... Aber: Auch in meinem Fall macht die Delay mehr Sinn; das werde ich verwenden.... Ändert aber nix am Problem... Oder blick ich's grad wieder net??? VG, Oliver

          Kommentar


            #6
            Zitat von Sandman60 Beitrag anzeigen
            if after(TV1StromGA<=TV1Stromwert and TV2StromGA<=TV2Stromwert and TV3StromGA<=TV3Stromwert,convert(Minuten,0u64)*600 00u64) then write(AktorGA,AUS) endif

            Denkfehler oder in der After-Funktion einfach nicht zulässig?
            Das schaut für mich sehr gut aus und sollte funktionieren. Mal mit dem Debugger die Werte kontrollieren und ggf. hier mal das auf diesen Code Begrenzte posten.
            offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
            Enertex Produkte kaufen

            Kommentar


              #7
              Ich glaube dein "Denkfehler" ist die AFTER-Funktion.
              Sobald die Funktion einmal angetriggert ist, schaltet die knallhart ab.
              Du müsstest das so machen:

              if after(TV1StromGA<=TV1Stromwert and TV2StromGA<=TV2Stromwert and TV3StromGA<=TV3Stromwert,convert(Minuten,0u64)*600 00u64) and (TV1StromGA<=TV1Stromwert and TV2StromGA<=TV2Stromwert and TV3StromGA<=TV3Stromwert) then write(AktorGA,AUS) endif
              Gruß
              Volker

              Wer will schon Homematic?

              Kommentar


                #8
                Hallo zusammen,
                danke erst mal für die Rückmeldungen.
                @Michael: Ich entnehme der Aussage, daß die AND in der After-Funktion (oder besser Delay) grundsätzlich zulässig sind; da war ich mir lt. Doku nicht sicher. OK, werde mich dann tiefer in das Debugging aufmachen. Nach einem ersten Blick gestern sah alles ok aus, da alle Werte eine 0.0 lieferten. Prüfe ich nochmal.

                @Volker: Hast natürlich recht, werde den Code später von After auf Delay ändern. Ich hatte die Prüfung am Ende ursprünglich drinnen, aber hier erst einmal herausgenommen, da ich in der Tat erst einmal ein gnadenloses abschalten erzwingen wollte. Leider schaltet sich da nix... P.S.: Mit Delay kann man die "zweite Prüfung" weglassen. Ich habe das bereits für meine TV-Standby-Killer-Routinen im Einsatz, aber eben nur jeweils für ein Gerät und nicht in einer AND-Verknüpfung.
                Viele Grüße, Oliver

                Kommentar


                  #9
                  Gelöst

                  So, nach nochmaliger Prüfung der verwendeten GAs habe ich festgestellt, dass sich ein Typo eingeschlichen hat, sprich einer der Stromwerte war von etwas ganz anderem.... Also Sturm im Wasserglas, sorry.

                  Dennoch ein Vorschlag bzw. Lessons Learnt: Macht es nicht evtl. Sinn in der Doku bei Delay/After einen Hinweis zu geben, dass innerhalb der Funktion auch and/or wie bei normalen IF-Anweisungen mgl. sind?

                  Vielen Dank nochmal an alle! Ich find die Hilfsbereitschaft hier im Forum einfach KLASSE!

                  Kommentar


                    #10
                    Zitat von Sandman60 Beitrag anzeigen
                    Hallo zusammen,
                    danke erst mal für die Rückmeldungen.
                    @Michael: Ich entnehme der Aussage, daß die AND in der After-Funktion (oder besser Delay) grundsätzlich zulässig sind; da war ich mir lt. Doku nicht sicher. OK, werde mich dann tiefer in das Debugging aufmachen. Nach einem ersten Blick gestern sah alles ok aus, da alle Werte eine 0.0 lieferten. Prüfe ich nochmal.
                    Wenn natürlich alle auf 0.0 stehen, wird da nix ausgelöst- erst mal muss einer drüber die Schwelle und wieder runter.
                    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                    Enertex Produkte kaufen

                    Kommentar


                      #11
                      Zitat von Sandman60 Beitrag anzeigen
                      Dennoch ein Vorschlag bzw. Lessons Learnt: Macht es nicht evtl. Sinn in der Doku bei Delay/After einen Hinweis zu geben, dass innerhalb der Funktion auch and/or wie bei normalen IF-Anweisungen mgl. sind?
                      !
                      Kapitel: Befehle und Funktionen, in roter fetter Schrift: Für alle Argumente von Funktionen können anstelle von Variablen auch direkt Gruppenadressen verwendet werden.
                      Das gilt also für alles. Man darf die Funktionen etc. beliebig miteinander verschachteln, solange die Rückgabetypen passen.
                      offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                      Enertex Produkte kaufen

                      Kommentar


                        #12
                        Zitat von enertegus Beitrag anzeigen
                        Wenn natürlich alle auf 0.0 stehen, wird da nix ausgelöst- erst mal muss einer drüber die Schwelle und wieder runter.
                        Schon klar, das war auch der Fall. Wir sind doch ein Viel-TV-Haushalt... Mein Problem war ja leider viel banaler.... Wenn man natürlich eine andere GA in den Code einträgt, als man in der ETS hat, kann's nicht klappen...

                        Kommentar

                        Lädt...
                        X