Konfiguration - Doku
Der Komplettumbau der Konfiguration war doch eine größere Sache als gedacht, ist aber inzwischen einigermaßen abgeschlossen. Inhaltlich werde ich nichts Großartiges mehr daran verändern, es kann aber passieren, dass der eine oder andere gesetzte Wert auch tatsächlich Berücksichtigung findet
Bis auf das Setzen der Kommunikationsflags habe ich versucht, zum BCU2 nach der Doku von Martin Kögler kompatibel zu bleiben. Getestet ist das ganze mit den eibd-Tools, funktioniert einwandfrei (außer dass writeaddress am Schluss noch eine Speicherstelle schreiben will, deren Bedeutung sich mir nicht erschließt).
Bei weitem nicht alle Parameter werden in der Applikation auch unterstützt/verwendet. Die Konfiguration kann trotzdem damit umgehen.
1. Schnittstelle zum Bus
2. Verwendung durch den User
Die allermeisten o.g. Werte muss man nie anfassen. Es genügt, die GAs und die Flags zu setzen und das Gerät zu parametrieren. Dafür reichen die eibd-Tools mpropwrite und writeaddress. Ich beschreibe die Prozedur exemplarisch für den KNX-Multisensor (von einem Gerät mit lokal laufendem eibd aus).
3. Verwendung in der Applikation
Dazu schreibe ich einen separaten Post.
Max
Der Komplettumbau der Konfiguration war doch eine größere Sache als gedacht, ist aber inzwischen einigermaßen abgeschlossen. Inhaltlich werde ich nichts Großartiges mehr daran verändern, es kann aber passieren, dass der eine oder andere gesetzte Wert auch tatsächlich Berücksichtigung findet

Bis auf das Setzen der Kommunikationsflags habe ich versucht, zum BCU2 nach der Doku von Martin Kögler kompatibel zu bleiben. Getestet ist das ganze mit den eibd-Tools, funktioniert einwandfrei (außer dass writeaddress am Schluss noch eine Speicherstelle schreiben will, deren Bedeutung sich mir nicht erschließt).
Bei weitem nicht alle Parameter werden in der Applikation auch unterstützt/verwendet. Die Konfiguration kann trotzdem damit umgehen.
1. Schnittstelle zum Bus
- Access Control mit den Leveln ACCESS_NONE, ACCESS_FREE, ACCESS_USER und ACCESS_CONFIG. Die Schlüssel dazu sind allerdings hart kodiert. Konsequenz: man braucht zum Setzen der meisten Werte und zum Speicher schreiben den entsprechenden Key, bei mpropwrite & Co ist das der Parameter -k.
- Verfügbare Standardparameter (BCU2):
- Object 0, Property 0x01: Device Object Type (PT_UNSIGNED_INT, RO)
- Object 0, Property 0x0E: Device Control (PT_GENERIC01)
- Object 0, Property 0x08: Device Service_control (PT_UNSIGNED_INT)
- Object 0, Property 0x09: Device Firmware_revision (PT_UNSIGNED_CHAR, readonly)
- Object 0, Property 0x0B: Device Serial Number (PT_GENERIC06)
- Object 0, Property 0x0C: Device Manufacturer ID (PT_UNSIGNED_INT)
- Object 0, Property 0x0F: Device Order Info (PT_GENERIC10)
- Object 0, Property 0x10: Device PEI Type (PT_UNSIGNED_CHAR, readonly)
- Object 0, Property 0x12: Device Poll Group Settings (PT_POLL_GROUP_SETTING)
- Object 0, Property 0x11: Device Port Addressing (PT_UNSIGNED_CHAR)
- Object 0, Property 0x13: Device Manufacture ID (PT_GENERIC04)
- Object 1, Property 0x01: Address Table Object Type (PT_UNSIGNED_INT, readonly)
- Object 1, Property 0x05: Address Table Load State Control. (PT_CONTROL). Ist eigentlich nicht notwendig, Schreibzugriffe auf die Tabelle beeinflussen das Geräteverhalten sofort.
Object 0x01, Property 0x07: Address Table Reference (PT_UNSIGNED_INT). Liefert einen (einstellbaren) Dummy-Wert zurück, der dann bei einem anschließenden Speicherzugriff entsprechend behandelt wird. - Object 2, Property 0x01: Association Table Object Type (PT_UNSIGNED_INT, readonly)
- Object 2, Property 0x05: Association Table Load State Control. (PT_CONTROL). Ist eigentlich nicht notwendig, Schreibzugriffe auf die Tabelle beeinflussen das Geräteverhalten sofort.
- Object 0x02, Property 0x07: Association Table Reference (PT_UNSIGNED_INT, readonly). Liefert einen (einstellbaren) Dummy-Wert zurück, der dann bei einem anschließenden Speicherzugriff entsprechend behandelt wird.
- Object 3, Property 0x01: Application Object Type (PT_UNSIGNED_INT, readonly)
- Object 3, Property 0x05: Application Load State Control (PT_CONTROL). Wert ist eigentlich nur bei der klassischen Trennung BCU/Applikation sinnvoll, bei integriertem Busankoppler weniger.
- Object 3, Property 0x06: Application Run State Control (PT_CONTROL)
- Object 3, Property 0x10: Application PEI type (PT_UNSIGNED_CHAR, readonly). Auch nur für getrennte BCU sinnvoll.
- Object 3, Property 0x0D: Application Version (PT_GENERIC05, readonly)
- Object 3, Property 0x07: Application Table Reference (PT_UNSIGNED_INT). Faktisch nicht unterstützt, die Konfiguration der Applikation geschieht rein über Properties.
- Applikationsspezifische Parameter
Hier herrschen natürlich mehr Freiheitsgrade. Als Konvention gesetzt und implementiert ist der feste Zusammenhang zwischen Kommunikationsobjekt und Property Object, und zwar wie folgt:- Object x, Property 0, Index 0: Flags (PT_UNSIGNED_CHAR). Es gilt: K=1, L=2, S=4, A=8, Ü=16 (enstprechend BCU2)
- Object x, Property 0, Indizes 1...n: assoziierte GA (PT_UNSIGNED_INT). Dies ist eine alternative (und m.E. einfachere) Zugriffsmöglichkeit auf Address und Association Table. Zugriffe über dieses Interface werden auf die beiden Tables transparent umgesetzt.
- Object 255: Debug Object. Verwendet, um interne Statuswerte oder Rohdaten auszulesen.
2. Verwendung durch den User
Die allermeisten o.g. Werte muss man nie anfassen. Es genügt, die GAs und die Flags zu setzen und das Gerät zu parametrieren. Dafür reichen die eibd-Tools mpropwrite und writeaddress. Ich beschreibe die Prozedur exemplarisch für den KNX-Multisensor (von einem Gerät mit lokal laufendem eibd aus).
- PA setzen: Gerät an den Bus, Programmierknopf drücken, LED leuchtet. Auf der Kommandozeile writeaddress local:/tmp/eib 1.2.34 eingeben, warten. Wenn die LED ausgeht, ist die Adresse geschrieben. Eine Fehlermeldung von writeaddress kann man ignorieren - wenn die LED ausgeht, ist alles i.O.
- Flags für das KO 10 setzen. Das geht mit mpropwrite und dem entsprechenden Key, hier 0xDEADBEEF:
mpropwrite -k 0xDEADBEEF local:/tmp/eib 1.2.34 10 0 0 1 1F - setze bei Object 10, Property 0, Index 0 genau einen Wert, nämlich 1F (alle Flags gesetzt) - Gruppenadressen setzen, beispielhaft 3/4/56 und 4/5/67. Dazu müssen diese erst mal in Hex umgerechnet werden, dabei hilft der Rechner von Fa. Tapko (Umstellen auf "3 level addresses" nicht vergessen). 3/4/56 gibt 1C38, 4/5/67 gibt 2543.
Diese Werte können nun mittels mpropwrite an Object 10, Property 0, Indizes 1 und 2 gesetzt werden. Das geht so:
mpropwrite -k DEADBEEF local:/tmp/eib 1.2.34 10 0 1 2 1C 38 25 43 - setze Object 10, Property 0, ab Index 1 zwei Werte, nämlich 1C 38 und 25 43. - Applikation parametrieren. Der KNXMS hat bei Object 10, Property 1 sein Sendeintervall (in Sekunden). Hier muss man ein bisschen aufpassen, denn der verwendete µC hat Little Endian, d.h. erst das kleinere Byte, dann das größere Byte. Das ist ziemlich unintuitiv.
60 Sekunden sind 0x3C, als Integer 003C - bzw. als Little Endian 3C00. Das wird nun zu
mpropwrite -k DEADBEEF local:/tmp/eib 1.2.34 10 1 0 1 3C 00 - Fertig, Baustein sendet und antwortet.
3. Verwendung in der Applikation
Dazu schreibe ich einen separaten Post.
Max
Kommentar