Arduino mit OneWireFirmata: Unterschied zwischen den Versionen

Aus FHEMWiki
KKeine Bearbeitungszusammenfassung
KKeine Bearbeitungszusammenfassung
 
(23 dazwischenliegende Versionen von 7 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
= OneWireFirmata (ConfigurableFirmata) =
= Einleitung =
<p>mit dem Modul 10_FRM.pm kann man einen Arduino als OneWire-Busmaster für das Modul 00_OWX.pm benutzen.
Ein Adruino mit der Firmware ConfigurableFirmata kann als 1-Wire-Busmaster eingesetzt werden. Dafür kommen fast alle Arduino-Boards in Frage. Bei Boards mit wenig Speicher (z.B. MEGA168P) bzw. beim Einbinden großer Programmbibliotheken (z.B. für den ENC28J60) muss man jedoch einige Features von ConfigurableFirmata deaktivieren, um die Firmware installieren zu können.
Auf dem Arduino muss dazu eine erweiterte Version der Firmata-Firmware geladen werden. Unterstützt werden im prinzip alle Arduino-Versionen. Auf Arduinos mit nur 16kb RAM (MEGA168P) muss man die Zahl der eingebauten Features reduzieren, auf allen Arduinos mit mehr als 16kb Ram (MEGA328P aufwärts) läuft die Firmware unverändert.</p>
<p>Die aktuelle Arduino-IDE bringt zwar schon eine Version der StandardFirmata mit, diese enthält aber noch keine Unterstützung für OneWire. Diese findet man [https://github.com/firmata/arduino/tree/configurable/examples/ConfigurableFirmata im 'configurable'-branch des Firmata repositories]. Den kompletten Branch kann man sich auch bequem [https://github.com/firmata/arduino/archive/configurable.zip als zip-Archiv herunterladen]</p>
<p>Wenn man die in dieser neuen Firmataversion eingebauten Features reduzieren möchte (weil man nur eine MEGA168P verwenden will und z.B. gar keine Servos ansteuern möchte), muss man nur im 'ConfigurableFirmata'-sketch die entsprechenden includes auskommentieren.</p>
<p>Die ConfigurableFirmata kommuniziert mit FHEM über den USB-anschluss oder Ethernet (sowohl original EthernetShield, 'Arduino Ethernet' als auch ENC28J60 basierte Boards werden unterstützt, letztere unter Verwendung der [https://github.com/ntruchsess/arduino_uip UIPEthernet-library]).</p>
<p>Alternativ kann man einen DS2482 als 1-Wire-Busmaster an den I2C-Bus des Arduino anschließen. Die nötige ConfigurableFirmata mit DS2482-Unterstützung [https://github.com/ntruchsess/arduino/tree/DS2482/examples/ConfigurableFirmata findet sich hier].</p>


= Arduino IDE =
Alternativ kann man auch einen DS2482 als 1-Wire-Busmaster an den I2C-Bus eines Arduinos anschließen. Ein ConfigurableFirmata-Sketch mit DS2482-Unterstützung findet sich [https://github.com/ntruchsess/arduino/tree/DS2482/examples/ConfigurableFirmata hier] bzw kann man sich [https://github.com/ntruchsess/arduino/archive/DS2482.zip hier als zip] herunterladen.
Zur Installation auf den Arduino wird natürlich erst mal die Arduino-IDE benötigt ([http://arduino.cc/en/Guide/Libraries http://arduino.cc/en/Guide/Libraries]))
hat man das 'libraries' Verzeichnis seiner Arduino-ide-installation gefunden (unter Ubuntu z.B. unter /usr/share/arduino/libraries/), gibt es dort normalerweise schon ein Verzeichnis 'Firmata'. Falls nicht, muss dieses angelegt werden. Die in dem Verzeichniss befindlichen Dateien 'Firmata.h', 'Firmata.cpp' und 'Boards.h' müssen durch die im onewire-scheduler.zip-file enthaltenen Versionen ersetzt werden. Am besten kopiert man einfach den gesammten Inhalt des Ordners 'arduino-onewire_scheduler' in das 'libraries/Firmata'-Verzeichnis (mitsammt des Unterordners 'examples'. Macht man das so, dann findet man nach einem Neustart der IDE den OneWireFirmata-sketch unter 'Datei'-&gt;'Beispiele'-&gt;'Firmata'-&gt;'OneWireSchedulerFirmata'. (Natürlich kann man den Unterordner 'OneWireSchedulerFirmata' auch in sein Sketchbook Unterverzeichnis kopieren. Solange man das Verzeichnis nicht umbenennt (so dass es nicht mehr so wie die darin befindliche 'OneWireSchedulerFirmata.ino'-datei heißt, erkennt die Arduino-IDE das Verzeichnis als korrekten Sketch und man kann es unter 'Datei'-&gt;'Sketchbook'-&gt;'OneWireSchedulerFirmata' finden.


Naja - hat man es erst mal geschafft, dann muss man nur noch unter 'Tools'-&gt;'Board' den eigenen Arduino auswählen und mit dem Upload-knopf (der Rechtspfeil im Kreis oben links) den geladenen Sketch compilieren und auf das Board hochladen. Falls man unter Windows Probleme hat den Arduino über USB zu connecten findet sich hier weitere Informatation: [http://arduino.cc/en/Guide/Windows#toc2 http://arduino.cc/en/Guide/Windows#toc2]
ConfigurableFirmata kann, abhängig von den Möglichkeiten des Boards, mit FHEM wahlweise seriell (z.B. über den USB-Anschluss), über Ethernet (sowohl über Ethernet Shields mit W5100 oder ENC28J60 Chip, letztere unter Verwendung der [https://github.com/ntruchsess/arduino_uip UIPEthernet Library]) oder über WiFi kommunizieren.


= FRM =
In FHEM ist ein Firmata-Device vom Typ FRM anzulegen, das dann als IODev für ein Device vom Typ OWX oder OWX_ASYNC dient.
Der Arduino wird in FHEM über das Modul 10_FRM.pm angesprochen (dazu bitte die aktuelle Development-version herunterladen ([http://www.dhs-computertechnik.de/downloads/fhem-cvs.tgz http://www.dhs-computertechnik.de/downloads/fhem-cvs.tgz]) aus dem SVN auschecken oder per updatefhem aktualisieren).


<nowiki># definiere FRM als IO-Device - Baudrate 57600 ist default in der Standardfirmata
= Allgemeine Funktionsweise =
define Arduino FRM /dev/ttyUSB0@57600
ConfigurableFirmata führt auf dem Arduino bestimmte 1-Wire-Kommandofolgen selbstständig aus. Der Firmata-Client OWX(_ASYNC) fordert z.B. von Firmata an: 'mache eine 1-Wire-Bussuche'. Die wird auf dem Arduino ausgeführt und der schickt das Ergebniss (alle gefundenen Devices) an den Firmata-Client zurück. Oder es wird angefordert: 'mache einen Bus-Reset, sprich ein bestimmtest Device mit der Adresse XXX an, schicke folgende Bytes dorthin und lese anschließend YY Bytes'. Der Arduino tut das und wenn er fertig ist, schickt er die YY Bytes an den Firmata-Client zurück. Nach dem Abarbeiten einer 1-Wire-Kommandfolge und dem Verschicken des Ergebnisses vergisst er, was er getan hat, weiß also z.B. nicht, welche 1-Wire Devices am Bus gefunden wurden. Solche Funktionen wären bei der Speicherknappheit einiger Arduinos auch nicht realisierbar. Dieser Funktionsumfang ist aber schon deutlich höher als der von anderen Busmasterchips (wie z.B. DS2480 oder DS2482). Denen muss man jedes Kommando in der Abfolge einzeln vorgeben und dabei noch auf das korrekte Timing achten. Bei ConfigurableFirmata bedeutet das Starten einer Bussuche, dass OWX nur 4 Bytes versendet und dann auf das Ergebnis wartet. Das FHEM Modul OWX wartet dabei und blockiert solange FHEM, das Modul OWX_ASYNC wartet dagegen in einem Protothread während FHEM weiter arbeitet und der Arduino parallel dazu über den 1-Wire Bus kommuniziert.


# definiere FRM als IO-Device über Ethernet ('global' bindet an alle IP-Addressen des Servers)
Wenn man zusätzlich einen DS2482 als Busmaster an den Arduino anschließt, dann ändert sich am oben Gesagtem nichts. Mit dem DS2482 hat der Arduino ein elektrisch etwas besser an 1-Wire angepasstes Interface und muss weniger Timing per Software machen. Dies erlaubt z.T. mehr Devices bei längerem 1-Wire Bus als es ohne zusätzlichen Busmaster möglich ist.
define Arduino FRM <port> global</nowiki>


siehe dazu auch [http://fhem.de/commandref.html#FRM die commendref]
= Mögliche Funktionserweiterung =
= OWX =
Die Funktion "FirmataScheduler" von ConfigurableFirmata wird zur Zeit von den FHEM-Modulen FRM und OWX nicht unterstützt. Damit könnte man z.B. iButtons über OWID mit einer schnellen, arduinoseitig getriggerten Bussuche versorgen. Der Scheduler ist in der Lage Firmata-Kommandoabfolgen zu speichern und zeitversetzt (auch zyklisch) abzuspielen. Damit könnte man sich auch das Senden der genannten 4 Bytes zum Starten der Bussuche ersparen. Der Arduino würde die Ergebnisse selbstständig im vorgegebenen Interval verschicken. Je nach Arduino kann man wegen des begrenzten Speichers jedoch keine komplexeren Aufgaben im FirmataScheduler unterbringen, insbesondere kann man nicht die Kommandofolgen für mehrere Devices unterbringen (eine DS18B20 Abfrage braucht z.B. ca. 30 Bytes pro Device. Das klingt nach wenig, ist aber eine ganze Menge, wenn nur wenige 100kb verfügbar sind). Ist der Speicher zu Ende stürzt der Arduino einfach ab bzw. resettet sich.
Ein im Anschluss daran definiertes [[FHEM und 1-Wire]]-device kann dann einfach einen der Arduino-pins als OneWireBusmaster nutzen. Das funktioniert an allen Pins, die digital-io unterstützen. Wenn man das FRM device schon definiert hat, findet man im laufenden FHEM unter den FRM-attributen einen Eintrag: 'onewire-pins', dieser listet alle Pins auf, die OneWire unterstützen:


<nowiki>define OWX &lt;arduino-pin&gt;</nowiki>
= Arduino IDE und ConfigurableFirmata =
Nach dem definieren des OWX-Moduls fängt dieses selbsttätig an über den Arduino-pin nach OneWire-devices zu suchen und im Raum 'OWX' automatisch anzulegen.
Die Installation der Arduino-IDE sowie das Auswählen und das prinzipielle Kompilieren von ConfigurableFirmata wird auf der Seite [[Arduino Firmata]] beschrieben.


Wenn man die [https://github.com/ntruchsess/arduino/tree/DS2482/examples/ConfigurableFirmata DS2482-Firmata] benutzt, dann findet man beim FRM-device unter 'onewire-pins' nur die I2C-Pins. Das sind z.B. bei einem Uno/Nano die Pins 18 und 19 (das entspricht den Analogpins 4 und 5). Einen der beiden muss man dann bei der Definition des OWX-Moduls angeben um die DS2482-Unterstützung zu aktivieren:
Will man den DS2482 als Busmaster einsetzen, verwendet man statt eines der Standardbeispiele von ConfigurableFirmata die oben aufgeführte DS2482-ConfigurableFirmata als Sketch.
  <nowiki>define OWX 18</nowiki>
 
'''Hinweis''': Dieser Sketch basiert auf einer älteren Version von ConfigurableFirmata. Sollte er mit der aktuellen Version von ConfigurableFirmata nicht mehr kompatibel sein, müsste man die relevanten Teile für den DS2482 manuell in die neue Version übertragen.
 
= ConfigurableFirmata Features =
Wenn man die Features von ConfigurableFirmata reduzieren möchte (z.B. weil man einen MEGA168P verwenden will und gar keine Servos ansteuern möchte), muss man im ConfigurableFirmata-Sketch die entsprechenden includes mit zwei vorgestellen Schrägstrichen auskommentieren.
 
Kommt es nach dem Auskommentiert zu Fehlern bei der ersten Kompilierung, sollte man den Sketch zunächst mit allen Features kompilieren und anschließend schrittweise wieder reduzieren.
 
Für 1-Wire muss neben OneWireFirmata auf jeden Fall auch FirmataExt aktiviert werden, denn ohne FirmataExt ist nur Digital- und Analog-I/O möglich.
 
Es wird empfohlen nur die erforderlichen Features zu aktivieren. Beispielsweise passen I2C und 1Wire nicht gleichzeitig mit UIPEthernet ins RAM eines ATMega328. Das lässt sich zwar flashen, es stürzt aber mangels ausreichend Heap-Speichers sofort ab.
 
Außerdem sollte man eine feste IP-Adresse vergeben statt DHCP zu verwenden. Bei UIPEthernet kann man dann UDP in der uipethernet-conf.h abstellen und das spart ca. 5kb Flash und einige 100 Bytes RAM.
 
= Arduino Firmware Flashen =
Ist das Kompilieren erfolgreich, muss man noch unter 'Tools'-&gt;'Programmer' den verwendeten Programmieradapter sowie unter 'Tools'-&gt;'serieller Port' den korrekten Port auswählen und mit dem 'Upload'-Knopf (der mit dem Rechspfeil oben link in der Arduino IDE) den geladenen Sketch auf das Board hochladen. Je nach Arduino Board sind andere Einstellungen als die hier aufgeführten und ggf. auch zusätzliche Aktionen erforderlich (z.B. zu einem bestimmten Zeitpunkt bestimmte Buttons auf dem Board drücken oder bestimmte Pins verbinden).
 
Falls man unter Windows Probleme hat, den Arduino über USB zu verbinden, finden sich z.B. hier weitere Informationen: [http://arduino.cc/en/Guide/Windows#toc2 http://arduino.cc/en/Guide/Windows#toc2]
 
= Einbinden eines Arduinos mit Firmata in FHEM =
Ein Arduino mit Firmata wird in FHEM über das Modul 10_FRM.pm angesprochen. Dazu sollte mindestens die FRM Modul in der Version 15941 vom 20.01.2018 verwendet werden (ggf. FHEM update durchführen).
 
<nowiki># definiere FRM mit USB-Schnittstelle /dev/ttyUSB0, Baudrate 57600 ist Default für StandardFirmata
define FIRMATA FRM /dev/ttyUSB0@57600</nowiki>
 
<nowiki># definiere FRM mit TCP/IP-Schnittstelle auf Port 3030
define FIRMATA FRM 3030 global</nowiki>
FRM macht bei Netzwerkverbindungen FHEM-seitig einen Serverport auf (dieser wird in der define-Zeile angegeben). 'global' muss zusätzlich angegeben werden, damit der Serversocket an alle IP-addressen gebunden wird. (Sonst wird nur 'localhost' verwendet, was nicht funktionieren würde). Der Arduino verbindet sich aktiv zu diesem Port, sonst gilt im Prinzip alles was auch für den über USB angebunden Arduino gilt.
 
Siehe dazu auch die {{Link2CmdRef|Anker=FRM}}.
 
= Einbinden der 1-Wire Devices in FHEM =
Nachdem das FRM Device angelegt wurde, kann ein danach definiertes OWX Device einen der Arduino-Pins als 1-Wire-Busmaster nutzen. Das funktioniert bei den meisten Boards an allen Pins, die Digital-IO unterstützen. Wenn sich das Firmata Device schon verbunden hat, findet man im laufenden FHEM bei den Internals des FRM Devices den Eintrag: 'onewire-pins'. Dieser listet alle Pins auf, die 1-Wire unterstützen. Damit kann das OWX-Device angelegt werden:
 
<nowiki>define &lt;device-name&gt; OWX <Firmata-Device>:&lt;arduino-pin&gt;</nowiki>
 
Z.B. ist beim Arduino Mini Pro der D9 = Pin 9 gut geeignet.
 
<nowiki>define OWio1 OWX Arduino:9</nowiki>
 
Nach dem Definieren des OWX Devices fängt dieses selbsttätig an über den Arduino-Pin nach 1-Wire Devices zu suchen und im Raum 'OWX' automatisch anzulegen.
 
Wenn man die [https://github.com/ntruchsess/arduino/tree/DS2482/examples/ConfigurableFirmata DS2482-ConfigurableFirmata] benutzt, dann findet man beim FRM-Device unter 'onewire-pins' nur die I2C-Pins. Das sind z.B. bei einem Uno bzw. Nano die Pins 18 und 19 (das entspricht den Analogpins 4 und 5). Einen der beiden muss man dann bei der Definition des OWX-Moduls angeben um die DS2482-Unterstützung zu aktivieren:
  <nowiki>define &lt;device-name&gt; OWX 18</nowiki>
[[Kategorie:1-Wire]]
[[Kategorie:1-Wire]]
[[Kategorie:Arduino_Firmata]]
[[Kategorie:Arduino]]
[[Kategorie:HOWTOS]]
[[Kategorie:HOWTOS]]
[[Kategorie:Interface]]
[[Kategorie:Interfaces]]

Aktuelle Version vom 3. März 2018, 21:03 Uhr

Einleitung

Ein Adruino mit der Firmware ConfigurableFirmata kann als 1-Wire-Busmaster eingesetzt werden. Dafür kommen fast alle Arduino-Boards in Frage. Bei Boards mit wenig Speicher (z.B. MEGA168P) bzw. beim Einbinden großer Programmbibliotheken (z.B. für den ENC28J60) muss man jedoch einige Features von ConfigurableFirmata deaktivieren, um die Firmware installieren zu können.

Alternativ kann man auch einen DS2482 als 1-Wire-Busmaster an den I2C-Bus eines Arduinos anschließen. Ein ConfigurableFirmata-Sketch mit DS2482-Unterstützung findet sich hier bzw kann man sich hier als zip herunterladen.

ConfigurableFirmata kann, abhängig von den Möglichkeiten des Boards, mit FHEM wahlweise seriell (z.B. über den USB-Anschluss), über Ethernet (sowohl über Ethernet Shields mit W5100 oder ENC28J60 Chip, letztere unter Verwendung der UIPEthernet Library) oder über WiFi kommunizieren.

In FHEM ist ein Firmata-Device vom Typ FRM anzulegen, das dann als IODev für ein Device vom Typ OWX oder OWX_ASYNC dient.

Allgemeine Funktionsweise

ConfigurableFirmata führt auf dem Arduino bestimmte 1-Wire-Kommandofolgen selbstständig aus. Der Firmata-Client OWX(_ASYNC) fordert z.B. von Firmata an: 'mache eine 1-Wire-Bussuche'. Die wird auf dem Arduino ausgeführt und der schickt das Ergebniss (alle gefundenen Devices) an den Firmata-Client zurück. Oder es wird angefordert: 'mache einen Bus-Reset, sprich ein bestimmtest Device mit der Adresse XXX an, schicke folgende Bytes dorthin und lese anschließend YY Bytes'. Der Arduino tut das und wenn er fertig ist, schickt er die YY Bytes an den Firmata-Client zurück. Nach dem Abarbeiten einer 1-Wire-Kommandfolge und dem Verschicken des Ergebnisses vergisst er, was er getan hat, weiß also z.B. nicht, welche 1-Wire Devices am Bus gefunden wurden. Solche Funktionen wären bei der Speicherknappheit einiger Arduinos auch nicht realisierbar. Dieser Funktionsumfang ist aber schon deutlich höher als der von anderen Busmasterchips (wie z.B. DS2480 oder DS2482). Denen muss man jedes Kommando in der Abfolge einzeln vorgeben und dabei noch auf das korrekte Timing achten. Bei ConfigurableFirmata bedeutet das Starten einer Bussuche, dass OWX nur 4 Bytes versendet und dann auf das Ergebnis wartet. Das FHEM Modul OWX wartet dabei und blockiert solange FHEM, das Modul OWX_ASYNC wartet dagegen in einem Protothread während FHEM weiter arbeitet und der Arduino parallel dazu über den 1-Wire Bus kommuniziert.

Wenn man zusätzlich einen DS2482 als Busmaster an den Arduino anschließt, dann ändert sich am oben Gesagtem nichts. Mit dem DS2482 hat der Arduino ein elektrisch etwas besser an 1-Wire angepasstes Interface und muss weniger Timing per Software machen. Dies erlaubt z.T. mehr Devices bei längerem 1-Wire Bus als es ohne zusätzlichen Busmaster möglich ist.

Mögliche Funktionserweiterung

Die Funktion "FirmataScheduler" von ConfigurableFirmata wird zur Zeit von den FHEM-Modulen FRM und OWX nicht unterstützt. Damit könnte man z.B. iButtons über OWID mit einer schnellen, arduinoseitig getriggerten Bussuche versorgen. Der Scheduler ist in der Lage Firmata-Kommandoabfolgen zu speichern und zeitversetzt (auch zyklisch) abzuspielen. Damit könnte man sich auch das Senden der genannten 4 Bytes zum Starten der Bussuche ersparen. Der Arduino würde die Ergebnisse selbstständig im vorgegebenen Interval verschicken. Je nach Arduino kann man wegen des begrenzten Speichers jedoch keine komplexeren Aufgaben im FirmataScheduler unterbringen, insbesondere kann man nicht die Kommandofolgen für mehrere Devices unterbringen (eine DS18B20 Abfrage braucht z.B. ca. 30 Bytes pro Device. Das klingt nach wenig, ist aber eine ganze Menge, wenn nur wenige 100kb verfügbar sind). Ist der Speicher zu Ende stürzt der Arduino einfach ab bzw. resettet sich.

Arduino IDE und ConfigurableFirmata

Die Installation der Arduino-IDE sowie das Auswählen und das prinzipielle Kompilieren von ConfigurableFirmata wird auf der Seite Arduino Firmata beschrieben.

Will man den DS2482 als Busmaster einsetzen, verwendet man statt eines der Standardbeispiele von ConfigurableFirmata die oben aufgeführte DS2482-ConfigurableFirmata als Sketch.

Hinweis: Dieser Sketch basiert auf einer älteren Version von ConfigurableFirmata. Sollte er mit der aktuellen Version von ConfigurableFirmata nicht mehr kompatibel sein, müsste man die relevanten Teile für den DS2482 manuell in die neue Version übertragen.

ConfigurableFirmata Features

Wenn man die Features von ConfigurableFirmata reduzieren möchte (z.B. weil man einen MEGA168P verwenden will und gar keine Servos ansteuern möchte), muss man im ConfigurableFirmata-Sketch die entsprechenden includes mit zwei vorgestellen Schrägstrichen auskommentieren.

Kommt es nach dem Auskommentiert zu Fehlern bei der ersten Kompilierung, sollte man den Sketch zunächst mit allen Features kompilieren und anschließend schrittweise wieder reduzieren.

Für 1-Wire muss neben OneWireFirmata auf jeden Fall auch FirmataExt aktiviert werden, denn ohne FirmataExt ist nur Digital- und Analog-I/O möglich.

Es wird empfohlen nur die erforderlichen Features zu aktivieren. Beispielsweise passen I2C und 1Wire nicht gleichzeitig mit UIPEthernet ins RAM eines ATMega328. Das lässt sich zwar flashen, es stürzt aber mangels ausreichend Heap-Speichers sofort ab.

Außerdem sollte man eine feste IP-Adresse vergeben statt DHCP zu verwenden. Bei UIPEthernet kann man dann UDP in der uipethernet-conf.h abstellen und das spart ca. 5kb Flash und einige 100 Bytes RAM.

Arduino Firmware Flashen

Ist das Kompilieren erfolgreich, muss man noch unter 'Tools'->'Programmer' den verwendeten Programmieradapter sowie unter 'Tools'->'serieller Port' den korrekten Port auswählen und mit dem 'Upload'-Knopf (der mit dem Rechspfeil oben link in der Arduino IDE) den geladenen Sketch auf das Board hochladen. Je nach Arduino Board sind andere Einstellungen als die hier aufgeführten und ggf. auch zusätzliche Aktionen erforderlich (z.B. zu einem bestimmten Zeitpunkt bestimmte Buttons auf dem Board drücken oder bestimmte Pins verbinden).

Falls man unter Windows Probleme hat, den Arduino über USB zu verbinden, finden sich z.B. hier weitere Informationen: http://arduino.cc/en/Guide/Windows#toc2

Einbinden eines Arduinos mit Firmata in FHEM

Ein Arduino mit Firmata wird in FHEM über das Modul 10_FRM.pm angesprochen. Dazu sollte mindestens die FRM Modul in der Version 15941 vom 20.01.2018 verwendet werden (ggf. FHEM update durchführen).

# definiere FRM mit USB-Schnittstelle /dev/ttyUSB0, Baudrate 57600 ist Default für StandardFirmata
define FIRMATA FRM /dev/ttyUSB0@57600
# definiere FRM mit TCP/IP-Schnittstelle auf Port 3030
define FIRMATA FRM 3030 global

FRM macht bei Netzwerkverbindungen FHEM-seitig einen Serverport auf (dieser wird in der define-Zeile angegeben). 'global' muss zusätzlich angegeben werden, damit der Serversocket an alle IP-addressen gebunden wird. (Sonst wird nur 'localhost' verwendet, was nicht funktionieren würde). Der Arduino verbindet sich aktiv zu diesem Port, sonst gilt im Prinzip alles was auch für den über USB angebunden Arduino gilt.

Siehe dazu auch die commandref/FRM.

Einbinden der 1-Wire Devices in FHEM

Nachdem das FRM Device angelegt wurde, kann ein danach definiertes OWX Device einen der Arduino-Pins als 1-Wire-Busmaster nutzen. Das funktioniert bei den meisten Boards an allen Pins, die Digital-IO unterstützen. Wenn sich das Firmata Device schon verbunden hat, findet man im laufenden FHEM bei den Internals des FRM Devices den Eintrag: 'onewire-pins'. Dieser listet alle Pins auf, die 1-Wire unterstützen. Damit kann das OWX-Device angelegt werden:

define <device-name> OWX <Firmata-Device>:<arduino-pin>

Z.B. ist beim Arduino Mini Pro der D9 = Pin 9 gut geeignet.

define OWio1 OWX Arduino:9

Nach dem Definieren des OWX Devices fängt dieses selbsttätig an über den Arduino-Pin nach 1-Wire Devices zu suchen und im Raum 'OWX' automatisch anzulegen.

Wenn man die DS2482-ConfigurableFirmata benutzt, dann findet man beim FRM-Device unter 'onewire-pins' nur die I2C-Pins. Das sind z.B. bei einem Uno bzw. Nano die Pins 18 und 19 (das entspricht den Analogpins 4 und 5). Einen der beiden muss man dann bei der Definition des OWX-Moduls angeben um die DS2482-Unterstützung zu aktivieren:

define <device-name> OWX 18