Date

Daten werden fast gleich wie Zeiten behandelt. Weiters werden in der verwendeten externen Library Datum und Zeit gleichzeitig verwaltet. Vieles was für die Zeit gegolten hat wird daher hoer der vollständigkeit halber noch einmal gesagt.

Daten werden in KNX mit 3 Byte verwaltet. Für unsere Implementierung verwenden wir eine externe Library, die als Standard im Arduino Bereich bezeichnet werden kann. Mit dieser Library hat man nicht nur jede Menge super Funktionen zur Verfügung, sondern auch gleich eine Hardwar Anbindung an diverse Uhr-Module, GPS-Uhren usw. Auf der Library Seite findet man genauere Infos.

KNXDate eine Tochterklasse von KNXObject macht nichts anderes, als die von der externen Library mit dem KNX abzugleichen. Wenn also über das KNX ein Datum empfangen wird, dann wird das Datum im Arduino danach gesetzt. Wenn man das Datum des KNXDate Objects setzt (mit er Methode setD), dann wird einerseits die interne Uhr des Arduino gesetzt, andererseits wird das Datum ins KNX gesendet. Achtung dies wird normalerweise alle aktuellen Daten der KNX Geräte umstellen. (Falls man so etwas hat)


#include <Arduino.h>

#include "KNXConnection.h"
#include "KNXObjectDefinitions.h"
#include "KNXDate.h"
#include 


KNXDate date(ga(4,3,2));


void setup() {
  Serial.begin(9600);
  Serial.println("Ready ! ");
  objectSettings();
}

void loop() {
  digitalClockDisplay();
  delay(5000);
}

void serialEvent()
{
  char ch = Serial.read();

  if (ch == 'r') date.readRequest(); 
  if (ch == 's') date.setD(22, 4, 17); 
  if (ch == 'p') date.print();
  if (ch == 'l') Serial.println("----------------------------");
  
} // end keyboardInput  


 void digitalClockDisplay(){
  // digital clock display of the time
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.print(" ");
  Serial.print(day());
  Serial.print(" ");
  Serial.print(month());
  Serial.print(" ");
  Serial.print(year()); 
  Serial.println(); 
}

void printDigits(int digits){
  // utility function for digital clock display: prints preceding colon and leading 0
  Serial.print(":");
  if(digits < 10)
    Serial.print('0');
  Serial.print(digits);
}


  

Im Sketch wird alle 5 Sekunden die Zeit & Datum am Serial Monitor ausgegeben. Bei Eingabe von r wird ein readRequest an die Gruppenadresse geschickt. Ich habe ein nettes Touchdisplay, das diesen Read Request mit dem aktuell gesetzten Datum beantwortet. Wenn man so etwas nicht hat, dann kommt natürlich auch kein Wert zurück. Wenn man s eingibt wird das Datum auf 22.4.2017 gesetzt. (Achtung damit wird meist auch die Zeit in den KNX Geräten mit Uhr umgestellt.) Das wars auch schon. Benötigt man für verschiedene Aufgaben Zeitfunktionen, dann wird man bei den zahlreichen Funktionen der externen Library fündig. KNX kann übrigens keine Daten vor 1990 verwalten.