1-Wire Gateway

From KONNEKTING Wiki
Jump to: navigation, search
1-Wire Gateway
1-Wire Gateway Overview Picture.PNG
1-Wire Gateway Overview Picture.PNG
Developer Matthias F.
Status Version 1.0 beta
Microcontroller/Board Cortex M0+ SAMD (Arduino Zero) SAMD mini
KNX connectivity KNX Transceiver on Board
1-Wire Module Ds2482-100
Needed libraries KONNEKTING Lib [1]
Wire (part of Standard Arduino)


Description

Hardware

Block Diagramm

1-Wire Gateway Hardware BlockDiagram.PNG

Firmware

Übersicht aller verfügbarer Firmware-Stände

Firmware10 (FW10)

Belegung: 1-Wire-Bus
* CH1: abfragen Sensor ID
* CH2: Temperatursensoren DS18B20 (max 20)
* CH3: N/A

Bauteilliste (BOM)

HW Bestückung

Link auf GitHub

1-Wire Gateway Firmware10 Overview.PNG

Software Aufbau

XML File Aufbau anhand der FW10

Lest euch zuerst bitte diese Seite durch: Aufbau Konnekting

Was benötige ich:

  • Notepad ++ (kann ich empfehlen und kostet nichts)

Eine Beschreibung der XML Struktur findet ihr hier: | Beschreibung XML

Wenn ihr bei den Punkten unten nicht genau versteht warum ich das so gemacht habe, dann könnt ihr hier noch einmal nachschauen.

Jetzt können wir Anfangen :-) 

Jede XML Datei beginnt mit diesem Kopf. Hier muss man nur anpassen:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<KonnektingDevice xmlns="http://konnekting.de/xml/KonnektingDevice/v0">
    <Device ManufacturerId="57005" DeviceId="8" Revision="10">
        <ManufacturerName>KONNEKTING</ManufacturerName>
        <DeviceName>KNX 1-Wire Gateway</DeviceName>

ManufacturerId: bekommt man zugewiesen wenn man sich eine beantragt hat -> Meine ID ist: 57005 -> in HEX 0xDEAD

DeviceId: kann frei gewählt werden -> alle meine 1-Wire Device haben die ID = 8

Revision: kann frei gewählt werden -> als neue Revision nutze ich 10


Eine XML ist immer so im Grundgerüst aufgebaut:
* Kopf
* Parameter
* CommObjects (GA)



Parameter

Der Kopf ist mit den Änderungen schon fertig, jetzt kommen wir zu den Parametern. Es macht hier Sinn, sich schon im Voraus Gedanken zu machen, welche Parameter benötigt werden. Änderungen in Nachgang sind eher etwas lästig.

Bei den Parametern gibt es auch ein Grundgerüst: 
* ParameterGroup: Hier können Parametergruppen erzeugt werden, die in der Suite dann als eigene Seite dargestellt werden. Hat keinen Einfluß auf die spätere Funktion, es sieht in der Suite 
einfach nur übersichtlicher aus.
* Parameter: Hier werden dann die eigentlichen Parameter/Settings definiert. 

Für die ersten Parameter werde ich folgende Struktur aufsetzen:

ParameterGroup_0:  "Einlesen Sensor IDs"
:: Parameter_0: „zyklisches senden neuer ID  ON / OFF“ 
:: Parameter_1: „neue Sensor ID zyklisch senden alle:  X sek/min“
ParameterGroup_1:  "Temperatur-Sensoren“
:: Parameter_2: „Temperaturwerte zyklisch senden alle:  X sek/min“

Wir haben jetzt zwei getrennte Menüs/Seiten in der Suite und drei Parameter verteilt auf diese zwei Seiten. ParameterGroup_0 definiert den Einlernvorgang neuer Senoren. Parameter_0 bestimmt, ob diese Funktion aktiv ist oder nicht. Parameter_1 definiert die Periodenzeit wie schnell hintereinander die ID auf den KNX Bus geschickt wird.

Die zweite ParameterGroup_1 dient dazu, um alle Parameter für die eigentliche Temperatursensormessung zu bestimmen. Ich habe hier bis jetzt nur einen Parameter_2 und dieser gibt Periodenzeit an wie schnell die Temperaturwerte der Sensoren auf den Bus geschickt werden sollen. Schreibt man all diese Parameter zusammen, dann muss das im XML so aussehen:

<Parameters>
  <ParameterGroup Name="Einlesen Sensor IDs" Id="0">
         <Parameter Id="0" IdName="OnOffZyklischSendenNeuID">
             <Description>zyklisches senden neuer ID</Description>
             <Value Type="uint8" Default="00" Options="00=OFF|01=ON"/>
         </Parameter>
	 <Parameter Id="1" IdName="ZeitZyklischesSendenID">
             <Description>neue Sensor ID zyklisch senden alle:</Description>
             <Value Type="uint8" Default="00" Options="00=30sek|01=1min|02=10min|03=30min|04=60min"/>
          </Parameter>
  </ParameterGroup>
  <ParameterGroup Name="Temperatur-Sensoren" Id="1">
          <Parameter Id="2" IdName="ZeitZyklischesSenden">
              <Description>Temperaturwerte zyklisch senden alle:</Description>
              <Value Type="uint8" Default="03" Options="00=30s|01=1min|02=2min|03=3min|04=5min|05=10min|06=30min|07=60min"/>
          </Parameter>
  </ParameterGroup>

ParameterGroup Name = ist einfach der Name der in der Suite als Seitenüberschrift auftaucht.

ParameterGroup ID = ist eine fortlaufende ID die immer mit „0“ beginnt und nur für die ParameterGroup Gültigkeit besitzt. In dieser Gruppe können dann mehrere Parameter definiert werden. Bold text Parameter Id = ist eine fortlaufende ID die immer mit „0“ beginnt und nur für die Parameter Gültigkeit besitzt.

IdName = Ist ein frei benennbarer Name für diesen Parameter. Es macht Sinn in Selbsterklärend zu bennen, da man mit diesem Namen später im Code arbeiten muss.

Description = Ist die Description wie sie später in der Suite angezeigt wird

Value Type = gibt an um welchen Typen es sich handelt "uint8" oder „unit16“ …

Default = gibt den Wert an, der Default mäßig zuerst in der Suite angezeigt wird. Dieser muss im Bereich des „Value Type“ liegen. Bei „uint8“ wäre das zwischen 0 … 255 Man kann dem Default wert auch noch MIN MAX Werte angeben. Die Suite lässt dann nur Werte zu, die interhalb dieses Bereiches liegen. Z.B.:

Min = "10"

Max = "100"

Ist das nicht gewünscht, dann lässt man Min / Max einfach leer:

Min = ""

Max = ""

Options = hiermit kann man ein Dropdown Menü implementieren wie man es auch aus Excel und so kennt. Die Syntax ist einfach: „Parameter_value1“ = „Text1 des Dropdown Menüs“ | „Parameter_value2“ = „Text2 des Dropdown Menüs“ Wenn man kein Dropdown Menü benötigt, dann lässt man die option einfach weg.

Was jetzt aber noch fehlt sind die Parameter für einzelnen Sensoren. Hier müssen wir die Sensor-ID eintragen, damit der Code später weiß, welcher Sensor auf welche GA geschickt werden muss. Dafür erzeugen wir uns eine weitere Parametergroup und erstellen darin 20 Sensor-IDs.

   <ParameterGroup Name="Temperatur-Sensoren ID" Id="2">
           <Parameter Id="3">
                <Description>Sensor:1 DS18B20 ID</Description>
                <Value Type="raw8" Default="0100AABBCCDDEEFF" Min="" Max=""/>
           </Parameter>
	   <Parameter Id="4">
               <Description>Sensor:2 DS18B20 ID</Description>
               <Value Type="raw8" Default="0100AABBCCDDEEFF" Min="" Max=""/>
           </Parameter>
	…

           <Parameter Id="22" IdName="SensorID20">
               <Description>Sensor:20 DS18B20 ID</Description>
               <Value Type="raw8" Default="0100AABBCCDDEEFF" Min="" Max=""/>
           </Parameter>
   </ParameterGroup>
 </Parameters>



CommObjects

Mit den Parametern sind wir auch schon fertig, jetzt kommt noch die CommObjects. Wir brauchen für die gewünschten Funktionen:

1x CommObject zum Senden der neuen Sensor ID
20x CommObjects für die 20 Temperatursensoren

Im XML File ergänzt man direkt unter den Parametern:

  <CommObjects>
          CommObject Id="0" IdName="ComObNeuID">
                <Name>Nicht registrierter iButton gefunden</Name>
                <Function>Status</Function>
                <DataPointType>16.001</DataPointType>
	        <Flags>52</Flags>
          </CommObject>	
          <CommObject Id="1" IdName="ComObTvalue1">
                <Name>Temperatursenor 1</Name>
                <Function>Temp (°C)</Function>
                <DataPointType>9.001</DataPointType>
                <Flags>52</Flags>
          </CommObject>
          <CommObject Id="2" IdName="ComObTvalue2">
                <Name>Temperatursenor 2</Name>
                <Function>Temp (°C)</Function>
                <DataPointType>9.001</DataPointType>
                <Flags>52</Flags>
          </CommObject>

             …

          <CommObject Id="20" IdName="ComObTvalue20">
                <Name>Temperatursenor 20</Name>
                <Function>Temp (°C)</Function>
                <DataPointType>9.001</DataPointType>
                <Flags>52</Flags>
          </CommObject>
        </CommObjects>
    </Device>
</KonnektingDevice>

CommObject Id = ist eine fortlaufende ID die immer mit „0“ beginnt und nur für die CommObjects Gültigkeit besitzt.

IdName = Ist ein frei benennbarer Name für dieses CommOblect. Es macht Sinn in Selbsterklärend zu bennen, da man mit diesem Namen später im Code arbeiten muss.

Name = Ist der Text der später das CommObject in der Suite beschreibt

Function = hier kann man eine kurze Funktionsbeschreibung des CommObjects ergänzen

DataPointType = hier gibt man den DPT Typ des KNX Busses an.

Flags = hier können die Flags für das jeweilige Commobject gesetzt werden.

Und schon fertig ist die XML :-)

Developer Documentation

Build It

Links