mirror of
				https://github.com/thelsing/knx.git
				synced 2025-10-26 10:26:25 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			86 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
| 
 | |
| This example defines three datapoints.
 | |
| The first two are TEMPL type datapoints and have their own callback.
 | |
| When no specific callback is attached to a datapoint, it uses the global callback.
 | |
| 
 | |
| Note the difference in return value between the callbacks:
 | |
| for tempCallback uses value.getFloat() as TEMPL datapoints return a float.
 | |
| globalCallback uses value.getString(char*,size_t). This method is independent of the returned type.
 | |
| 
 | |
| */
 | |
| #include <VitoWiFi.h>
 | |
| #ifdef ARDUINO_ARCH_ESP8266
 | |
| #define SerialDBG Serial1
 | |
| #define SerialVito Serial
 | |
| #endif
 | |
| 
 | |
| 
 | |
| #ifdef ARDUINO_ARCH_SAMD
 | |
| #define SerialDBG SerialUSB
 | |
| #define SerialVito Serial1
 | |
| namespace std {
 | |
|     void __throw_bad_alloc()
 | |
|     {
 | |
|         SerialDBG.println("Unable to allocate memory");
 | |
|     }
 | |
| 
 | |
|     void __throw_length_error(char const*e)
 | |
|     {
 | |
|         SerialDBG.print("Length Error :");
 | |
|         SerialDBG.println(e);
 | |
|     }
 | |
| }
 | |
| #endif
 | |
| 
 | |
| VitoWiFi_setProtocol(P300);
 | |
| 
 | |
| DPTemp outsideTemp("outsideTemp", "boiler", 0x5525);
 | |
| DPTemp boilerTemp("boilertemp", "boiler", 0x0810);
 | |
| DPStat pumpStat("pump", "heating1", 0x2906);
 | |
| 
 | |
| void tempCallbackHandler(const IDatapoint& dp, DPValue value) {
 | |
|     SerialDBG.print(dp.getGroup());
 | |
|     SerialDBG.print(" - ");
 | |
|     SerialDBG.print(dp.getName());
 | |
|     SerialDBG.print(": ");
 | |
|     SerialDBG.println(value.getFloat());
 | |
| }
 | |
| 
 | |
| void globalCallbackHandler(const IDatapoint& dp, DPValue value) {
 | |
|     SerialDBG.print(dp.getGroup());
 | |
|     SerialDBG.print(" - ");
 | |
|     SerialDBG.print(dp.getName());
 | |
|     SerialDBG.print(" is ");
 | |
|     char value_str[15] = { 0 };
 | |
|     value.getString(value_str, sizeof(value_str));
 | |
|     SerialDBG.println(value_str);
 | |
| }
 | |
| 
 | |
| void setup() {
 | |
|     SerialDBG.begin(115200);
 | |
|     delay(5000);
 | |
|     SerialDBG.println("start");
 | |
|     
 | |
|     outsideTemp.setCallback(tempCallbackHandler);
 | |
|     boilerTemp.setCallback(tempCallbackHandler);
 | |
|     
 | |
|     // this callback will be used for all DPs without specific callback
 | |
|     // must be set after adding at least 1 datapoint
 | |
|     VitoWiFi.setGlobalCallback(globalCallbackHandler);    
 | |
|                                                         
 | |
|     VitoWiFi.setup(&SerialVito);
 | |
| 
 | |
|     SerialDBG.println(F("Setup finished..."));
 | |
| }
 | |
| 
 | |
| void loop() {
 | |
|     static unsigned long lastMillis = 0;
 | |
|     if (millis() - lastMillis > 60 * 1000UL) {
 | |
|         // read all values every 60 seconds
 | |
|   lastMillis = millis();
 | |
|         VitoWiFi.readAll();
 | |
|     }
 | |
|     VitoWiFi.loop();
 | |
| }
 |