Aus Raspberry Pi Geek 04/2022

Den RasPi mit dem KNX-Bus verbinden (Seite 2)

Listing 4

Ausgabe von BaosSerial

$ ./sample_BaosSerial
17:07:30:216 [] Console Logger Started
17:07:30:281 [BaosSerial] Serial Number: 00 C5 01 01 8E E0
17:07:30:964 [BaosSerial] 0 items found

Falls Sie keinen funktionierenden KNX-Bus an das Modul angeschlossen haben, bekommen Sie die Fehlermeldung Timeout: PEI_Identify.Con missing. Sonst erhalten Sie die Information, dass kein Datenpunkt auf dem Modul definiert ist. Um diesen zu definieren, wechseln Sie zu ETS und fügen dem Projekt das Weinzierl-Gerät unter dem Namen KNX BAOS 830 hinzu (Abbildung 4). Nach dem Einbinden des Geräts ins Projekt definieren Sie im Reiter Parameter einen zusätzlichen Datenpunkt (Abbildung 5). Als Typ dafür wählen Sie Binär-1 Bit. Dann fügen Sie den Datenpunkt der vorhandenen Gruppenadresse hinzu.

Abbildung 4: Fügen Sie das kBerry-Modul in ETS dem Projekt hinzu.

Abbildung 4: Fügen Sie das kBerry-Modul in ETS dem Projekt hinzu.

Abbildung 5: Haben Sie das Modul ins Projekt integriert, fügen Sie der Hardware anschließend einen Datenpunkt hinzu.

Abbildung 5: Haben Sie das Modul ins Projekt integriert, fügen Sie der Hardware anschließend einen Datenpunkt hinzu.

Zum Abschluss laden Sie das angepasste Programm ins kBerry-Modul. Beim ersten Upload ins Modul müssen Sie die KNX-Geräteadresse ins Modul laden, wozu Sie den Knopf am Modul einmal drücken. Die ETS-Software gibt Ihnen einen entsprechenden Hinweis. Starten Sie nun das Beispielprogramm sample_BaosSerial noch einmal, findet es den Datenpunkt (Listing 5). Anschließend können Sie über den RasPi eine Nachricht auf den KNX-Bus schicken und damit die LEDs ein- und ausschalten.

Listing 5

Ausgabe mit Datenpunkt

$ ./sample_BaosSerial
17:41:45:295 [] Console Logger Started
17:41:45:359 [BaosSerial] Serial Number: 00 C5 01 01 8E E0
17:41:46:081 [BaosSerial] 1 items found
17:41:46:081 [BaosSerial] Id: 1, Datapoint type 1, Size: 1 Bits

Dazu lässt sich sogar eins der vorhandenen Beispiele nutzen: Das Programm sample_BaosSerialLightSwitcher macht ziemlich genau das Gewünschte. Es definiert allerdings keine Wartezeit zwischen dem Ein- und Ausschalten, was zur Folge hat, dass die LEDs nur kurz flackern. Für eine etwas längere Wartezeit fügen Sie vor dem Kommando switchLight(connector, false); die Anweisung Thread::sleep(Wartezeit); ein, wobei Sie die Wartezeit in Millisekunden angeben. Vergessen Sie nicht, das Programm vor dem Ausführen wie oben beschrieben zu kompilieren. Die Ausgabe von ./sample_BaosSerialLightSwitcher bei einer Wartezeit von 5000 Millisekunden sehen Sie in Listing 6.

Listing 6

Ausgabe mit Wartezeit

$ ./sample_BaosSerialLightSwitcher
13:07:35:204 [] Console Logger Started
13:07:35:205 [kdrive.baos.BaosConnection] Connect /dev/ttyAMA0
13:07:35:218 [kdrive.baos.ProtocolDecoder] Tx : A7
13:07:35:237 [kdrive.baos.ProtocolDecoder] Rx : A8 11 0C 00 C5 01 01 8E E0 00 04
13:07:35:247 [kdrive.baos.ProtocolDecoder] Tx : RequestFunctions::GetDatapointDescription
F0 03 00 01 00 01
13:07:35:269 [kdrive.baos.ProtocolDecoder] Rx : ResponseFunctions::GetDatapointDescription
F0 83 00 01 00 01 00 01 00 57 01
13:07:35:280 [kdrive.baos.ProtocolDecoder] Tx : RequestFunctions::GetDatapointValue
F0 05 00 01 00 01 00
13:07:35:299 [kdrive.baos.ProtocolDecoder] Rx : ResponseFunctions::GetDatapointValue
F0 85 00 01 00 01 00 01 10 01 00
13:07:35:299 [LightSwitcher] Switching DP number 1 : on
13:07:35:312 [kdrive.baos.ProtocolDecoder] Tx : RequestFunctions::SetDatapointValue
F0 06 00 01 00 01 00 01 03 01 01
13:07:35:331 [kdrive.baos.ProtocolDecoder] Rx : ResponseFunctions::SetDatapointValue
F0 86 00 01 00 00 00
13:07:35:341 [kdrive.baos.ProtocolDecoder] Tx : RequestFunctions::GetParameterByte
F0 07 00 01 00 01
13:07:35:361 [kdrive.baos.ProtocolDecoder] Rx : ResponseFunctions::GetParameterByte
F0 87 00 01 00 01 00
13:07:35:361 [LightSwitcher] Timeout is 0 ms
13:07:40:372 [kdrive.baos.ProtocolDecoder] Tx : RequestFunctions::GetDatapointValue
F0 05 00 01 00 01 00
13:07:40:393 [kdrive.baos.ProtocolDecoder] Rx : ResponseFunctions::GetDatapointValue
F0 85 00 01 00 01 00 01 10 01 01
13:07:40:393 [LightSwitcher] Switching DP number 1 : off
13:07:40:406 [kdrive.baos.ProtocolDecoder] Tx : RequestFunctions::SetDatapointValue
F0 06 00 01 00 01 00 01 03 01 00
13:07:40:424 [kdrive.baos.ProtocolDecoder] Rx : ResponseFunctions::SetDatapointValue
F0 86 00 01 00 00 00
13:07:40:424 [kdrive.baos.BaosConnection] Disconnect

Damit wissen Sie nun, wie Sie den Raspberry Pi an einen KNX-Bus anbinden. Die hier gezeigten Beispielprogramme bieten eine gute Basis für eigene Experimente. Falls Sie den Mini-Rechner nicht als Controller verwenden möchten, um auf den KNX-Bus zuzugreifen, setzen Sie stattdessen etwa die generischen KNX-Module der Firma Weinzierl [9] ein. Sie arbeiten prinzipiell genau wie das kBerry-Modul.

Fazit

Auf den ersten Blick verursacht es eine Menge Aufwand, um via KNX mit einem Taster eine LED zu schalten. Für derart simple Steuerungsaufgaben wurde KNX jedoch auch nicht konzipiert. Wollen Sie aber bei einer Sturmwarnung alle Jalousien an einem großen Gebäude in eine sichere Position bringen oder dafür sorgen, dass sich am Abend alle nicht benötigten Lichter im Bürohochhaus ausschalten, sieht die Sache schon anders aus. Im Beispiel ging es lediglich darum, zu zeigen, dass man auch im Bereich der professionellen Gebäudeautomation nutzbringend mit dem Raspberry Pi arbeiten kann. (agr)

Der Autor

Martin Mohr hat die komplette Entwicklung der modernen Computertechnik live miterlebt. Nach dem Studium entwickelte er überwiegend Java-Applikationen. Mit dem RasPi erwachte seine alte Liebe zur Elektronik wieder.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 5 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben