Ankündigung

Einklappen
Keine Ankündigung bisher.

Triggern bei Datum und Uhrzeit: Makro dhtime()

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

    #16
    Die Makro - Expansion hat "einige" lustige Eigenschaften:

    das Makro
    :begin WebLokalVar(ButtonID, PageID, Icon, Variable)
    :info $Eine lokale Anzeige einer Variablen per Webserver$
    :shortinfo $Einfache Anzeige im Webserver$

    if change(Variable) or change(Icon) then {
    pdisplay(ButtonID,convert(Variable,$$c20),Icon,DIS PLAY,GREEN, PageID)
    } endif
    :end​
    funktioniert mit dem Aufruf
    WebLokalVar(12,UrlaubPageID,HOLIDAY,$Urlaub$)
    erwartungsgemäß - wenn du aber das Makro mit
    WebLokalVar(12,UrlaubPageID,HOLIDAY,$Urlaub )$)
    aufrufst, dann expandiert es zu
    Gültig bis Position: {0} STOP--> if change($Urlaub )$)) or change(HOLIDAY) then { pdisplay(12,convert($Urlaub )$),$$c20),HOLIDAY,DISPLAY,GREEN, UrlaubPageID) } endif ID:4 EibParser wurde mit Fehler beendet.
    kann man jetzt lustig finden - oder auch nicht

    EPIX
    ...und möge der Saft mit euch sein...
    Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

    Kommentar


      #17
      Ich denke, die Makro Expansion ist durchaus rudimentär. So kann man mit #define und #ifdef arbeiten, wie im Handbuch für das Debugging beschrieben. Ein

      Code:
      #define HOST 192.168.1.47
      führt aber nicht dazu, dass man HOST verwenden kann.

      Genauso die Frage, warum man Makros nicht direkt in Programmen (direkt zu Beginn) definieren kann oder nicht in Programmen mit #define arbeiten kann, um nur einzelne Programme zu debuggen.

      Der Code im EibStudio ist doch da... Ein paar der "hätten sie nicht noch...?".

      Dennoch denke ich nicht, dass das von mir geschilderte Problem etwas mit der Einfachheit der Makro Expansion zu tun hat. Mein Eindruck ist, dass mein dhtime()-Makro eine nicht vor(her)gesehene Nutzung der Makros ist...
      KNX, openHAB 4.3, EibPC²

      Kommentar


        #18
        Zitat von Tokamak Beitrag anzeigen

        Gut zu wissen.

        Noch ein Punkt: Mein finales Makro ist
        Code:
        :begin dhtime(DatumStr, UhrzeitStr)
        :var ereignis@
        ereignis@ = 0b01; if delay(ereignis@ == 1b01, 10u64) then ereignis@ = 0b01; endif;
        
        if htime(convert(split(UhrzeitStr, 0u16, 1u16), 0u08), convert(split(UhrzeitStr, 3u16, 4u16), 0u08), convert(split(UhrzeitStr, 6u16, 7u16), 0u08)) then {
        if DatumStr == split(localtimeconvert(utctime()), 0u16, 9u16) then ereignis@ = 1b01; endif;
        } endif;
        :return ereignis@
        :end​
        Ich hatte wegen des Problems mit der Hysterese dieses Makro mit debug()/sendUDP-Makros erweitert. Dabei ist mir aufgefallen, dass ich bei Nutzung des Makros in der Form

        Code:
        if dhtime(Datum, Uhrzeit) then ...; endif;
        dieses zwei Mal feuert, das heißt, dass

        Code:
        if htime(convert(split(UhrzeitStr, 0u16, 1u16), 0u08), convert(split(UhrzeitStr, 3u16, 4u16), 0u08), convert(split(UhrzeitStr, 6u16, 7u16), 0u08)) then {
        if DatumStr == split(localtimeconvert(utctime()), 0u16, 9u16) then ereignis@ = 1b01; endif;
        } endif;
        zwei Mal zum besagten Zeitpunkt durchlaufen wird.

        Das ist in diesem Fall nicht tragisch, weil das ereignis@ im zweiten Schritt von 1b01 auf 1b01 geändert wird, was letztlich keine Wirkung hat. Das Zurücksetzen auf 0b01 via delay() erfolgt zum Glück erst danach.

        Da ich aber noch einige Makros schreiben werde, interessiert mich, warum das "if ... then if ... then " zwei Mal durchlaufen wird, wenn ich das Makro nutze, nicht aber, wenn ich den den Code des Makros direkt in das Programm schreibe. Es muss also an der Makro Expansion liegen.
        foobar0815

        Kannst du mir was zu https://knx-user-forum.de/forum/supp...96#post2085496 sagen?

        KNX, openHAB 4.3, EibPC²

        Kommentar

        Lädt...
        X