Ankündigung

Einklappen
Keine Ankündigung bisher.

Macro Bei_Sonnenuntergang - Anfängerfrage

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

    Macro Bei_Sonnenuntergang - Anfängerfrage

    Liebes enertex Team,

    ich habe ein kleines Problem beim Aufruf des Makros Bei_Sonnenuntergang(). Der dritte Parameter ist die Zeit in ms. Klappt auch alles super wenn ich dort direkt beim Aufruf die Zeit, z.B. 600000 für z.B. 10 Minuten eintrage. Will ich jedoch den Wert einer Variablen übergeben, z.B definiere ich DelayUntergang=600000u64 und rufe dann das Makro mit DelayUntergang als dritten Parameter auf, so bekomme ich die Fehlermeldung:

    ! Variable nicht definiert: >DelayUntergangu64< !

    Ich hab dann mal in den Makro Source-Code geschaut, dort wird an den dritten Parameter "Zeit" wenn ich das richtig verstehe fest "u64" drangehängt:
    [highlight=epc] if after(!sun(), Zeit^u64 + 1u64) and !sun() then write(AktorGA, AktorWert) endif [/highlight]
    Gibt es eine Möglichkeit das orginal Makro zu benutzen und trotzdem die Zeit als Variable zu übergeben?

    Ciao, Peter

    #2
    Hallo Peter,

    hier eine Sourcelösung. Nimm Sonnenauf- /Untergang + eine Vor-/Nachlaufzeit, die dann leicht über die Visu geändert werden kann.
    Wenn Du es über die Konstante lösen willst, evtl. den u08-Zeitwert füllen.

    // Sonnenaufgang
    // Sonnenaufgang
    // EinschaltVerzoegerungMinuten = 0s16
    Einschaltzeitpunkt = convert(sunrisehour(), 0s16) * 60s16 + convert(sunriseminute(), 0s16) + EinschaltVerzoegerungMinuten
    Einschaltstunde = convert(Einschaltzeitpunkt/60s16, 0u08)
    Einschaltminute = convert(Einschaltzeitpunkt - convert(Einschaltstunde, 0s16) * 60s16, 0u08)

    //Sonnenuntergang
    // AusschaltVerzoegerungMinuten = 0s16
    Ausschaltzeitpunkt = convert(sunsethour(), 0s16) * 60s16 + convert(sunsetminute(), 0s16) + AusschaltVerzoegerungMinuten
    Ausschaltstunde = convert(Ausschaltzeitpunkt/60s16, 0u08)
    Ausschaltminute = convert(Ausschaltzeitpunkt - convert(Ausschaltstunde, 0s16) * 60s16, 0u08)

    // bei Sonnenaufgang

    if (chtime(Einschaltstunde, Einschaltminute, 00) and !chtime(Ausschaltstunde, Ausschaltminute, 00)) then \\
    write("Jalousie Wohnbereich Fenster Auf/Ab lang-3/5/0",RAUF); \\
    write("Jalousie Essbereich Fenster Auf/Ab lang-3/4/0",RAUF); \\
    write("Jalousie Essbereich Tuere Auf/Ab lang-3/3/0",RAUF) \\
    endif
    ABAMinutenSet(IDBeschat1,MinUpID,EinschaltVerzoege rungMinuten,Einschaltstunde,Einschaltminute)

    // bei Sonnenuntergang

    if (!chtime(Einschaltstunde, Einschaltminute, 00) or chtime(Ausschaltstunde, Ausschaltminute, 00)) then \\
    write("Jalousie Wohnbereich Fenster Auf/Ab lang-3/5/0",RUNTER); \\
    write("Jalousie Essbereich Fenster Auf/Ab lang-3/4/0",RUNTER); \\
    write("Jalousie Essbereich Tuere Auf/Ab lang-3/3/0",RUNTER) \\
    endif
    ABAMinutenSet(IDBeschat1, MinDownID, AusschaltVerzoegerungMinuten,Ausschaltstunde,Aussc haltminute)


    Minutenset findest Di in den Makros, ich habe nur etwas die Optik im eigenen Makro verändert.

    LG
    Wolfgang

    Kommentar


      #3
      Hallo Wolfgang,

      vielen Dank für den Tipp. Die Verzögerung in der Visu zu ändern wäre sicher der nächste Schritt. Da wollte ich noch etwas warten, bis sich der 3er Firmware stabilisiert hat.
      Mir ging es aber auch grundsätzlich um die Frage, ob ich die Funktionsweise der Markos richtig verstanden habe. Sie funktionieren also im Wesentlichen so wie der Preprozessor bei einem C-Compiler? D.h. an der Stelle darf ich nur die Konstante als Zahl direkt übergeben?

      Ciao, Peter

      Kommentar


        #4
        Zitat von kermit42 Beitrag anzeigen
        . Sie funktionieren also im Wesentlichen so wie der Preprozessor bei einem C-Compiler? D.h. an der Stelle darf ich nur die Konstante als Zahl direkt übergeben?
        ja, das liegt am Makro im Code bei " Zeit^u64"
        Hier bedeutet das ^-Zeichen, eine Ersetzung durch anhängen, also z.B. du schreibst im Code 10002 dann steht da im Code 10002u64. Damit ist im konkreten Fall der Datentyp für die Verzögerungsfunktion after richtig definiert als u64.
        Wenn Du eine Variable nutzen willst, streich einfach das ^u64 im Code. Deine Variable muss dann aber vom Typ u64 sein.
        offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
        Enertex Produkte kaufen

        Kommentar


          #5
          OK, danke. Dann hab ich es richtig verstanden.

          Ciao, Peter

          Kommentar

          Lädt...
          X