Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Zeitschaltuhr mit Serialzeit Kategorie: Programmierung (von ChristianS - 9.04.2010 10:25)
Als Antwort auf Zeitschaltuhr mit Serialzeit von ChristianS - 8.04.2010 8:47
Ich nutze:
C-Control II Station, OSOPT V3.1
Hallo zusammen,

@Andreas:
danke für die Antworten, aber das mit dem Schalter ist nicht ganz korrekt. Wird das Licht über die
Zeitschaltuhr eingeschaltet, so deaktiviert man mit dem ersten Druck die Zeitschaltuhr und das
Licht schaltet ab. Nun funktioniert der Taster wie ein ganz normaler Taster und das Licht kann
ein/bzw. ausgetastet werden. Die Schalterfunktion hat einen autoaus-Mechanismus,
der über einen Parameter aktiviert wird. (siehe Code). Dieser Mechanismus sorgt dafür, dass der
Schalter nach 7200s sich selber abschaltet und das schalter_busy zurücksetzt.
Die Zeitschaltuhr bleibt dann jedoch deaktiviert und wird erst am nächsten Tag (ich mache das morgens
um 4Uhr, damit ich keine Sommer-/Winterzeitumstellungsprobleme bekomme) wieder aktiviert und mit
den neuen tagesaktuellen Zeiten bestückt. Wird der Taster nun au�erhalb der Zeitschaltuhrdaten betätigt,
sagen wir mal mittags um 14:00Uhr, hat dies kein Einfluss auf die Zeitschaltuhrdaten und der Schalter/Taster
arbeitet wie beschrieben mit eben dieser autoaus-Funktion.

@nitraM
ich habe jetzt mal DeinenCode eingebaut. Das funktioniert auch supergut, allerdings hat
die Sache doch noch einen Haken:
Die Einschaltzeit des Zeitschalters wird duch den Sonnenuntergang +offset bestimmt. (der offset ist
notwendig, da es bei SU teilweise noch zu hell ist, der Effekt ist zur Winterzeit anders, als zur
Sommerzeit, deshalb benutze ich zwei verschiedene Offsets).
Wertags wird gegen 21:00Uhr die Beleuchtung abgeschaltet. Jetzt wird es aber irgendwann so sein,
dass der SU+Offset nach 21:00Uhr liegt. Dann funktioniert meine Routine nicht mehr, da dann der
Abschnitt.

if gartenlicht_on > gartenlicht_off // Schaltzeit über 0:00Uhr hinaus

greift. Der darf allerdings nur kommen, wenn nach 0:00Uhr abgeschaltet wird und das ist an speziellen
Tagen der Fall. Ich nehme man an, das ich komplett umdenken muss und mir eine eigene Uhr baue,
die nicht um 0:00Uhr mit der Serialzeit 0 beginnt, sondern morgens um 04:00Uhr, dann habe ich das
Problem nicht. Und Ausschaltzeiten nach 03:00Uhr gibt es auch nicht. Das ist aber auch wieder von hinten
durch die Brust...

function Gartenlicht ()
{
 byte Licht_per_zeitschaltuhr_an; // Zwischenspeicher
 byte Licht_ein;
  Licht_per_zeitschaltuhr_an  = 0; // Variable wird immer zu Beginn gelöscht
  Licht_ein=0;
 if gartenlicht_on > gartenlicht_off // Schaltzeit über 0:00Uhr hinaus
  {
   gartenlicht_duration = 86400 - gartenlicht_on + gartenlicht_off; // Gesamteinschaltzeit ermitteln
    if gartenlicht_duration >=  gartenlicht_offset // nur weiter prüfen wenn min. Einschaltzeit erreicht
     {
       if timeserial >= gartenlicht_on or timeserial < gartenlicht_off  // prüfen auf Uhrzeit "ein" => wichtig  _oder_ !
       {
        Licht_per_zeitschaltuhr_an = 1; // wenn die Bedingung erfüllt => merken!
       }
     }
    else  //wenn gartenlicht_duration<gartenlicht_offset
     {
      gartenlicht_on=-1;
      gartenlicht_off=-1;
     }
  }
 else
  {
   gartenlicht_duration = gartenlicht_off - gartenlicht_on; // Gesamteinschaltzeit ermitteln
    if gartenlicht_duration >=  gartenlicht_offset // nur weiter prüfen wenn min. Einschaltzeit erreicht
     {
      if timeserial >= gartenlicht_on and timeserial < gartenlicht_off  // prüfen auf Uhrzeit "ein" => wichtig _und_ !
       {
        Licht_per_zeitschaltuhr_an = 1; // wenn die Bedingung erfüllt => merken!
       }
     }
    else
     {
      gartenlicht_on=-1;
      gartenlicht_off=-1;
     }
  }

 if Licht_per_zeitschaltuhr_an == 1 or Schalter(4,1)
  {
   if schalter_busy[4] and Licht_per_zeitschaltuhr_an == 1
    {
     gartenlicht_off=-1;    //Ausschaltzeit löschen
     gartenlicht_on=-1;
     Licht_ein=1;
     schalter_busy[4]=0;
     schalter_flag[4]=0;
    }
   Licht_ein=1;
   }
 else
  Licht_ein=0;
 if Licht_ein==1
   max7311.set(0,Relais7,1);
 else
   max7311.set(0,Relais7,0);

}

GruÃ?,
Christian.


    Antwort schreiben


Antworten:

Re: Zeitschaltuhr mit Serialzeit (von Andreas - 12.04.2010 9:45)
Re: Zeitschaltuhr mit Serialzeit (von nitraM - 9.04.2010 11:33)