pimatic-radiohead ist ein Pimatic-Plugin, das RadioHead in Pimatic integriert.

Mit pimatic-radiohead ist es möglich Pimatic in ein RadioHead-Netzwerk zu integrieren, wobei eine serielle Schnittstelle verwendet wird. Außerdem kann ein kleiner Mikroprozessor (z.B. ein Arduino nano) als Gateway verwendet werden, um Funk-Hardware einzusetzen.

Baue dein eigenes Bus-System basierend auf Pimatic, RS485 und Funk-Geräten!

RadioHead ist eine Open Source paketbasierte Funkmodul-Bibliothek für Mikroprozessoren. Es bietet adressierte, zuverlässige, wiederholt übertragene und bestätigte Nachrichten in variabler Länge.

pimatic-radiohead verwendet das, ebenfalls von mir entwickelte, Node.js-Modul radiohead-serial.

Eine englische Version dieser Beschreibung ist hier zu finden.

 

Build-Status NPM-Version

Der Quellcode ist öffentlich im cryHost GitLab Repository verfügbar. Hier können auch Fehler und Ideen gemeldet werden.

 

Features

  • Empfang von Nachrichten/Befehlen von anderen Knoten im RadioHead-Netzwerk.
  • Senden von Nachrichten/Befehlen an andere Knoten im RadioHead-Netzwerk.
  • Geräte zum Anzeigen und Verarbeiten von Nachrichten, die von anderen Knoten empfangen werden.
  • Geräte zum Senden von Nachrichten an andere Knoten.
  • Regeln werden zum Auslösen von Aktionen und zum Senden von Nachrichten einschließlich Variablen unterstützt.
  • Geräteattribute geben einige Statistiken über gesendete und empfangene Nachrichten.
  • Mehrere RadioHead-Netzwerke werden mit verschiedenen seriellen Schnittstellen unterstützt.

Gerätekonfigurationen sind übersetzt in:

  • de – Deutsch
  • en – Englisch

 

Geräte

Alle Gerätekonfigurationen können mit dem Pimatic Frontend durchgeführt werden.

Eine detaillierte Beschreibung aller Konfigurationsoptionen ist in der Datei device-config-schema.coffee zu finden.

RadioHeadSerialPort

Dies ist ein spezielles Gerät, das die Schnittstelle zur seriellen Hardware bereitstellt.

Ein RadioHeadSerialPort-Gerät wird für alle anderen Geräte benötigt!

Standardmäßig werden nur an diesen Knoten oder die Broadcast-Adresse adressierte Meldungen behandelt. Der Promiscuous-Modus kann aktiviert werden, um Nachrichten mit beliebigen Empfängeradressen zu behandeln.

RadioHeadContactSensor

Ein ContactSensor basierend auf empfangenen Nachrichten.

Es müssen einige Datenbytes definiert werden, die mit einer empfangenen Nachricht für die geschlossen– und geöffnet-Aktion übereinstimmen müssen. Ein automatischer Reset ist auch möglich, wenn das Sendegerät nur eine Aktion ausgibt.

RadioHeadPresenceSensor

Ein PresenceSensor basierend auf empfangenen Nachrichten.

Es müssen einige Datenbytes definiert werden, die mit einer empfangenen Nachricht für die anwesend– und abwesend-Aktion übereinstimmen müssen. Ein automatischer Reset ist auch möglich, wenn das Sendegerät nur eine Aktion ausgibt.

RadioHeadSwitch

Ein Switch der konfigurierbare Nachrichten sendet, wenn er ein oder aus geschaltet wird.

RadioHeadShutter

Ein ShutterController der konfigurierbare Nachrichten sendet, wenn er hochgefahren, runtergefahren oder gestoppt wird. Ein automatischer Stopp ist auch möglich, wenn nach einer bestimmten Zeit gestoppt werden soll.

RadioHeadButtonsDevice

Ein ButtonsDevice das einige Buttons bereitstellen kann. Ein Button kann Nachrichten senden und/oder empfangen.

Dieses Gerät kann genutzt werden, um Nachrichten beim Klicken auf einen Button im Frontend zu senden.

Ebenso kann dieses Gerät genutzt werden, um Nachrichten von beispielsweise die Knöpfe einer Funkfernbedienung auszuwerten.

RadioHeadWeatherStation

Ein Sensor, der verschiedene Wetterdaten empfangen und anzeigen kann.

Es können mehrere Daten-Nachrichten definiert werden, aus denen die einzelnen Werte extrahiert werden.
Jeder wert kann mit einem Ausdruck vorverarbeitet werden, um den empfangenen Wert zu verändern.

Werte die aus mehreren Bytes bestehen können im Little-Endian (LE) oder Big-Endian (BE) format ausgewertet werden.

Unterstützte Datentypen sind: 32bit Float LE, 64bit Double LE, 8bit Integer, 8bit Unsigned Integer, 16bit Integer LE, 16bit Unsigned Integer LE, 32bit Integer LE, 32bit Unsigned Integer LE, 4bit Float BE, 8bit Double BE, 16bit Integer BE, 16bit Unsigned Integer BE, 32bit Integer BE, 32bit Unsigned Integer BE

Die folgenden Indikatoren können verwendet werden, um die Position der Werte in den Daten-Nachrichten zu markieren:

  • t – Temperatur
  • h – Luftfeuchtigkeit
  • r – Regenmenge
  • ws – Windgeschwindigkeit
  • wd – Windrichtung
  • wg – Windböengeschwindigkeit
  • b – Batteriestaus
  • lb – Batterie leer Status

 

RadioHeadCustomSensor

Ein Sensor der verschiedene Zahlen- und Boolean-Daten empfangen und anzeigen kann.

Es können mehrere eigene Zahlen- und Boolean-Sensorwerte definiert werden. Weiterhin können mehrere Daten-Nachrichten definiert werden, aus denen die einzelnen Werte extrahiert werden.
Jeder wert kann mit einem Ausdruck vorverarbeitet werden, um den empfangenen Wert zu verändern.

Werte die aus mehreren Bytes bestehen können im Little-Endian (LE) oder Big-Endian (BE) format ausgewertet werden.

Unterstützte Datentypen sind: 32bit Float LE, 64bit Double LE, 8bit Integer, 8bit Unsigned Integer, 16bit Integer LE, 16bit Unsigned Integer LE, 32bit Integer LE, 32bit Unsigned Integer LE, 4bit Float BE, 8bit Double BE, 16bit Integer BE, 16bit Unsigned Integer BE, 32bit Integer BE, 32bit Unsigned Integer BE

Selbst festgelegte, oder die folgenden Indikatoren können verwendet werden, um die Position der Werte in den Daten-Nachrichten zu markieren:

  • b – Batteriestaus

Regel-Syntax und -Beispiele

Bedingungen (when …)

Die folgenden Bedingungen können verwendet werden, um eine Aktion auszulösen:

radiohead [received] "<dataBytes>" from <senderAddress> [to <recipientAddress>] using <device>

  • received – Optionales Wort für eine bessere Lesbarkeit.
  • dataBytes – Die empfangenen Daten-Bytes in Hex-Schreibweise, getrennt mit Leerzeichen. Es kann * als Platzhalter verwendet werden, um an dieser Stelle jedes Byte zu akzeptieren.
  • senderAddress – Die Adresse des sendenden Knotens im RadioHead-Netzwerk in Hex-Schreibweise. Es kann 0xFF verwendet werden, um alle Absender zu akzeptieren.
  • recipientAddress – Optional. Die Adresse des Empfängerknotens im RadioHead-Netzwerk in Hex-Schreibweise. Wenn nicht angegeben, dann wird die Adresse des RadioHeadSerialPort-Gerätes verwendet. Nützlich für Broadcasts, oder wenn das Gerät im Promiscuous-Modus verwendet wird.
  • device – ID oder Name des verwendeten RadioHeadSerialPort-Gerätes.

Beispiele
radiohead received "0x01 0x02 0xAB" from 0x05 using rh-serial-1

radiohead received "0x01 0x02 0xAB" from 0x05 to 0x01 using rh-serial-1

radiohead "0x63 0x72 0x79 0x43 0x6F 0x64 0x65 * 0x64 0x65" from 0xFF using rh-serial-1

Aktionen (then …)

Die folgenden Aktionen können in einer Regel eingesetzt werden:

[send] radiohead "<dataBytes>" to <recipientAddress> using <device>

  • send – Optionales Wort für eine bessere Lesbarkeit.
  • dataBytes – Die Daten-Bytes in Hex-Schreibweise, die gesendet werden sollen, getrennt mit Leerzeichen. Es können auch, wie unten beschrieben, Variablen verwendet werden.
  • recipientAddress – Die Adresse des Empfängerknotens im RadioHead-Netzwerk in Hex-Schreibweise. Es kann 0xFF für Broadcasts genutzt werden.
  • device – ID oder Name des verwendeten RadioHeadSerialPort-Gerätes.

Beispiele

send radiohead "0x01 0x02 0xAB" to 0x05 using rh-serial-1

radiohead "0x63 0x72 0x79 0x43 0x6F 0x64 0x65" to 0xFF using rh-serial-1

send radiohead "0x55 $my_var d$my_double_var i$my_int_var b$my_boolean_var" to 0x42 using rh-serial-1

Variablen in Aktionen

Es können Pimatic-Variablen in den Daten-Bytes, ebenso wie statische Byte-Werte, eingesetzt werden.

Es gibt einige Modifikatoren, die den Datentyp des gesendeten Variableninhaltes festlegen. Ein Modifikator ist ein einzelner Buchstabe, der dem Variablennamen vorangestellt wird.

Ohne einen Modifikator wird die Variable mit einem Byte gesendet. Diese Byte ist der 8-Bit ganzzahlige Wert der Variable.

  • i – 32-Bit Ganzzahl (integer)
  • I – 16-Bit Vorzeichenlose Ganzzahl (unsigned integer)
  • d – 64-Bit Fließkommazahl (double)
  • f – 32-Bit Fließkommazahl (float)
  • b – Boolean (false=0x00, true=0x01)

Alle Variablen werden unter Verwendung des Little-Endian-Formats gesendet.

Beispiel

"0x01 $my_var d$my_temperature" sendet 10 Bytes: Ein Byte mit dem festen Wert 0x01, ein Byte mit 8-Bit Wert von $my_var und 8 Bytes mit der in $my_temperature enthaltenen Temperatur als Fließkommazahl.

 

Attribute

Die folgenden Attribute werden von jedem RadioHeadSerialPort-Gerät als Pimatic-Variablen bereitgestellt:

  • sentOkCount – Die Anzahl an erfolgreich gesendeten Nachrichten seit dem letzten Start.
  • sentErrorCount – Die Anzahl an fehlerhaft gesendeten Nachrichten seit dem letzten Start.
  • receivedCount – Die Anzahl an empfangenen Nachrichten seit dem letzten Start.
  • retransmissionsCount – Die Anzahl der erneut gesendeten Nachrichten seit dem letzten Start. Hohe Werte deuten auf Probleme hin (z.B. Bus-Kollisionen oder nicht erreichbare Geräte).

 

Debug

Der Debug-Modus kann in der Plugin-Config aktiviert weden.

Im Debug-Modus sind alle empfangenen RadioHead-Nachrichten im Log zu finden. Außerdem werden einige andere Informationen im Log angezeigt, wie zum Beispiel für ein Gerät passende empfangene Daten.

 

Lizenz

Lizenziert unter GPL Version 2

Copyright (c) 2017 Peter Müller

Einige Codeteile des RadioHeadWeatherStation-Gerätes sind inspiriert von pimatic-homeduino.