Um den "Arduino an KNX" Thread nicht zuzuspammen, versuche ich es mal mit einem neuen Thread.
KONNEKTING hat unter den "DKA Lib" Anhängern irgendwie den Ruf furchtbar kompliziert und aufwendig zu sein. Dass dem nicht unbedingt so ist, zeigt @Eugens Beispiel eines einfaches Sketches/Anwendungsfalles, welcher immer mal wieder als Beispiel für die vermeintliche Komplexität von KONNEKTING angeführt wird:
DS18B20 Temperatursensor am Arduino, welcher einfach in Zeitabstand X die Temperatur auf den Bus sendet...
Der Code ist hier zu finden: https://github.com/Adminius/Konnekti...r/SimpleSensor
Ich hab den Code - damit man nicht erst zu Github muss und direkt hier lesen kann - hierher kopiert und mal die vielen ergänzenden Kommentare weggelassen:
"Code-Overhead" durch KONNEKTING ist quasi nicht existent. Aber gehen wir's mal im Detail durch:
* Includen von zwei Header-Files (Die Header-File "kdevice_SimpleSensor.h" muss man nicht selbst basteln, die wird aus der XML heraus generiert.)
* Eine Funktion die eingehende Events verarbeitet (knxEvents), aber in diesem einfachen Beispiel leer bleiben kann
* Eine Zeile zum initialisieren der Lib (Konnekting.init)
* Eine Zeile zum lesen eines Parameters (Sende-Intervall) aus dem EEPROM (Konnekting.getUINT32Param)
* Eine Zeile die KNX Events im Hintergrund bearbeitet (Knx.task()
* Eine Zeile die prüft, ob es gerade passt die Anwendung auszuführen (Konnekting.isReadyForApplication())
* Eine Zeile die die Temperatur auf dem Bus sendet (Knx.write)
So viel weniger hat man mit der DKA Lib dann auch nicht...
Der Rest ist Code betreffend des Sensors.
Die sagenumwobene und als komplex/aufwendig beschriebene XML ist weitgehend übersichtlich (aber für KONNEKTING zwingend notwendig):
Ein Abschnitt der die Parameter, bzw. den einen Parameter beschreibt. Man kann auch komplett ohne Parameter arbeiten und sich im Sketch selbst darum kümmern oder den Wert hart codieren. Aber die paar Zeilen XML für diesen Komfort-Gewinn...
Und ein Abschnitt der das eine KO zum senden der Temperatur bereitstellt. Da kommt man nicht drum herum, da KONNEKTING auf KOs basiert. Der Tag "Name" und Funktion" ist quasi beliebig/Freitext. Wichtig ist der Tag DataPointType und Flags. Das eine definiert den DPT, das andere die KO-Flags. "52" sieht als Flag seltsam aus, aber im Grund gibt es hier nur zwei Standardwerte. Beide kann man der XML Doku entnehmen.
Das meiste kann man per Copy&Paste aus Beispielen ziehen. Das XML Format ist denke ich recht gut in der Doku beschrieben.
Fertig. Mehr ist es nicht. Das einzige "Übel" das ich erkennen kann ist die XML. Aber wenn man bedenkt welchen Komfort man durch die Programmierung via Bus erhält, ist das bisschen XML sicherlich kein Hexenwerk.
Würde mich über Kritik und Kommentare freuen ...
Gruß
Alex
KONNEKTING hat unter den "DKA Lib" Anhängern irgendwie den Ruf furchtbar kompliziert und aufwendig zu sein. Dass dem nicht unbedingt so ist, zeigt @Eugens Beispiel eines einfaches Sketches/Anwendungsfalles, welcher immer mal wieder als Beispiel für die vermeintliche Komplexität von KONNEKTING angeführt wird:
DS18B20 Temperatursensor am Arduino, welcher einfach in Zeitabstand X die Temperatur auf den Bus sendet...
Der Code ist hier zu finden: https://github.com/Adminius/Konnekti...r/SimpleSensor
Ich hab den Code - damit man nicht erst zu Github muss und direkt hier lesen kann - hierher kopiert und mal die vielen ergänzenden Kommentare weggelassen:
Code:
#include <KonnektingDevice.h> #include "kdevice_SimpleSensor.h" // include OneWire library #include <OneWire.h> // https://github.com/PaulStoffregen/OneWire #include <DallasTemperature.h> // https://github.com/milesburton/Arduino-Temperature-Control-Library #define PROG_LED_PIN 13 #define PROG_BUTTON_PIN 7 #define ONE_WIRE 5 #define KNX_SERIAL Serial1 // Leonardo/Micro etc. use Serial1 OneWire oneWire(ONE_WIRE); DallasTemperature sensors(&oneWire);/* Dallas Temperature Library */ long waitTime = 0; long previousTime = 0; float currentTemperature = 0; void knxEvents(byte index) { // unused in this sketch }; void setup() { Konnekting.init(KNX_SERIAL, PROG_BUTTON_PIN, PROG_LED_PIN, MANUFACTURER_ID, DEVICE_ID, REVISION); sensors.begin(); waitTime = (long) Konnekting.getUINT32Param(PARAM_tempPollingTime)*1000; } void loop() { Knx.task(); unsigned long currentTime = millis(); if (Konnekting.isReadyForApplication()) { if ((currentTime - previousTime) >= waitTime) { sensors.requestTemperatures(); currentTemperature = sensors.getTempCByIndex(0); Knx.write(COMOBJ_tempValue, currentTemperature); previousTime = currentTime; } } }
* Includen von zwei Header-Files (Die Header-File "kdevice_SimpleSensor.h" muss man nicht selbst basteln, die wird aus der XML heraus generiert.)
* Eine Funktion die eingehende Events verarbeitet (knxEvents), aber in diesem einfachen Beispiel leer bleiben kann
* Eine Zeile zum initialisieren der Lib (Konnekting.init)
* Eine Zeile zum lesen eines Parameters (Sende-Intervall) aus dem EEPROM (Konnekting.getUINT32Param)
* Eine Zeile die KNX Events im Hintergrund bearbeitet (Knx.task()

* Eine Zeile die prüft, ob es gerade passt die Anwendung auszuführen (Konnekting.isReadyForApplication())
* Eine Zeile die die Temperatur auf dem Bus sendet (Knx.write)
So viel weniger hat man mit der DKA Lib dann auch nicht...
Der Rest ist Code betreffend des Sensors.
Die sagenumwobene und als komplex/aufwendig beschriebene XML ist weitgehend übersichtlich (aber für KONNEKTING zwingend notwendig):
Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <KonnektingDevice xmlns="http://konnekting.de/xml/KonnektingDevice/v0"> <Device ManufacturerId="57005" DeviceId="3" Revision="0"> <ManufacturerName>KONNEKTING</ManufacturerName> <DeviceName>SimpleSensor</DeviceName> <Parameters> <ParameterGroup Name="Temperatur" Id="0"> <Parameter Id="0" IdName="tempPollingTime"> <Description>Cycle [s]</Description> <Value Type="uint32" Default="0000001E" Options="" Min="00000000" Max="000FFFFF"/> </Parameter> </ParameterGroup> </Parameters> <CommObjects> <CommObject Id="0" IdName="tempValue"> <Name>Temperature</Name> <Function>Value</Function> <DataPointType>9.001</DataPointType> <Flags>52</Flags> </CommObject> </CommObjects> </Device> </KonnektingDevice>
Und ein Abschnitt der das eine KO zum senden der Temperatur bereitstellt. Da kommt man nicht drum herum, da KONNEKTING auf KOs basiert. Der Tag "Name" und Funktion" ist quasi beliebig/Freitext. Wichtig ist der Tag DataPointType und Flags. Das eine definiert den DPT, das andere die KO-Flags. "52" sieht als Flag seltsam aus, aber im Grund gibt es hier nur zwei Standardwerte. Beide kann man der XML Doku entnehmen.
Das meiste kann man per Copy&Paste aus Beispielen ziehen. Das XML Format ist denke ich recht gut in der Doku beschrieben.
Fertig. Mehr ist es nicht. Das einzige "Übel" das ich erkennen kann ist die XML. Aber wenn man bedenkt welchen Komfort man durch die Programmierung via Bus erhält, ist das bisschen XML sicherlich kein Hexenwerk.
Würde mich über Kritik und Kommentare freuen ...
Gruß
Alex
Kommentar