Ankündigung

Einklappen
Keine Ankündigung bisher.

Schaltuhr / Schaltzeit

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

    Schaltuhr / Schaltzeit

    Guten Tag, allerseits.
    ich möchte gerne die Schaltuhr ( ohne Tageswahl, nur die reine Schaltzeit, z.b. 6:30 ) in der Visu eingeben.
    Diese soll dann in u_HOUR(u08) und u_Minute(u08) gespeichert werden.
    Das ganze Konstrukt der Schaltuhr geht ja auf irgendeinen Makro.
    Kann ich denn das Eingabefeld "separieren"?
    Gruß Peter
    never fummel a running system...

    #2
    Einfacher ist es vmtl, direkt einen Webinput zu nehmen, die Rückgabe mit split() und convert() zu zerlegen und an htime() weiterzureichen.

    Kommentar


      #3
      gute Idee, danke.
      Gibt es dafür ein Beispiel irgendwo?
      Die Abfrage des Eingabefelds ist kein Problem.
      Die HH und die MM speichere ich dauerhaft unter writeflashvar(XX)
      Aber kann ich auch das Eingabefeld dann mit dem Wert aus Readflashvar(XX) und nach dem Convert auf c14 vorbelegen, z.B. nach dem Neustart des EIB-PC?

      Wenn ja, wie?

      Weiter Frage, kann ich auch einen Zähler von 0-59 mit einem Webinput abbilden?
      Zuletzt geändert von TRex; 12.12.2023, 08:14.
      never fummel a running system...

      Kommentar


        #4
        Hi,

        so in etwa könnte es aussehen.

        Code:
        bSchaltuhrEnable=AUS
        
        zTime=webinput(wiSchaltuhr)
        uHour=convert(split(zTime, 0u16, 1u16), 0)
        uMin=convert(split(zTime, 3u16, 4u16), 0)
        uSec=convert(split(zTime, 6u16, 7u16), 0)
        
        // Durch die geschachtelte if wird nur bei Änderung von chtime() und den Zeiten neu geprüft
        // Änderungen von bSchaltuhrEnable stoßen nicht die Verbeitung an
        if htime(uHour, uMin, uSec) then {
            if bSchaltuhrEnable then {
                // zu schaltende GAs oder Variablen
                write('1/2/3'b01, EIN);
            } endif;
        } endif
        
        if change(zTime) and bSchaltuhrEnable then display(wiSchaltuhr, zTime, ALARMCLOCK, ACTIVE, GREY) endif
        if change(zTime) and bSchaltuhrEnable==AUS then display(wiSchaltuhr, zTime, ALARMCLOCK, INACTIVE, GREY) endif
        
        if SHUTDOWN then {
            writeflashvar(zTime);
            writeflashvar(bSchaltuhrEnable)
        } endif
        if systemstart() then {
            readflashvar(zTime);
            readflashvar(bSchaltuhrEnable);
        } endif​
        Beim Webinput kannst du den Bereich nicht einschränken, aktuell auch nicht auf nur-Ziffern. Zähler 0-59 würde ich als Slider machen, da kannst du die Grenzen festlegen und auch direkt die Zahl eingeben.

        Kommentar


          #5
          Wow, danke!
          noch ne Verständnisfrage....
          Beim zahlenraum von 0-24 (Stunden) und 0-60 (Minuten, Sekunden) würde ja auch eine Variable der Bandbreite u08 ausreichen.
          Warum nimmst eine u16, hat das irgendwelche Vorteile?
          never fummel a running system...

          Kommentar


            #6
            Die u16 sind die Indizes für split, und da ein String max. 65534 Bytes beinhaltet, braucht der 2 Byte.
            uHour usw werden zum Typ von 0 konvertiert, und der ist Standardmäßig u08.

            Ergänzung: wiSchaltuhr ist ein Webinput, mit Experte verknüpft, wiSchaltuhr als Variablenname.
            bSchaltuhrEnable kannst du zB auf einen Button -> Schalten/Umschalten legen. Oder auch zB durch eine GA ersetzen.

            Falls du mehr Schaltuhren brauchst, kannst du den Code auch als Makro umbauen und mehrfach verwenden. Du musst nur bei den Variablennamen für writeflashvar() aufpassen. Makro-lokale variablen haben keinen festen Namen.
            Zuletzt geändert von foobar0815; 12.12.2023, 11:48.

            Kommentar


              #7
              Jetzt muss ich leider nochmal damit kommen. Ich werde aus den Schaltuhren nicht schlau.
              Meine Herausforderung:

              Ich möchte gerne meine Aussenbeleuchtung / Werbung schalten nach folgenden Bedingungen:
              Ein morgens: * frühestens um 6:00 Uhr, nur vor Sonnenaufgang
              Aus morgens: * Sonnenaufgang, spätestens 8:45

              Ein Abends: bei Sonnenuntergang (!SUN()), frühestens um 16:30
              Aus Abends: 22.00 Uhr

              mit den "gedeckelten Schaltuhren" komme ich nicht klar, da fehlt mir die sun().

              ich brech mir einen ab.....


              never fummel a running system...

              Kommentar


                #8
                Code:
                if htime(6,0,0) and !sun() then write('2/2/3'b01, EIN); endif
                if sun() or htime(8,45,0) then write('2/2/3'b01, AUS); endif
                
                if !sun() and chtime(16,30,0) then write('2/2/3'b01, EIN) endif
                if htime(22,0,0) then write('2/2/3'b01, AUS) endif​
                Ggf noch !systemstart() mit aufnehmen, da sun() und chtime beim Start initialisiert werden und damit das jeweilige Schreiben auslösen.

                Kommentar

                Lädt...
                X