PanStamp: Unterschied zwischen den Versionen

Aus FHEMWiki
(Ankündigung einer Neufassung)
(Inhalt auf neue Artikel ausgegliedert.)
Zeile 23: Zeile 23:
[http://www.panstamp.com/home panStamps] sind [[Arduino]] Clones, die ein CC1101 Funkmodul beinhalten. Mit ihnen lassen sich Sensoren und Aktoren drahtlos an FHEM anbinden. Sie lassen sich genau wie Arduinos über die Ardunio IDE oder mit dem ino Kommandozeilen Binary programmieren.
[http://www.panstamp.com/home panStamps] sind [[Arduino]] Clones, die ein CC1101 Funkmodul beinhalten. Mit ihnen lassen sich Sensoren und Aktoren drahtlos an FHEM anbinden. Sie lassen sich genau wie Arduinos über die Ardunio IDE oder mit dem ino Kommandozeilen Binary programmieren.


Der panStamp Software Stack unterstützt einen stromsparenden Power-Down- oder Sleep-Modus für batteriebetriebene Sensoren, aus dem diese dann nur zur eigentlichen Messung und Übertragung "aufwachen".
Dieser Artikel beschreibt zu einem das FHEM Modul panStamp, was das Funkinterface zu FHEM bildet und die dazugehörige Hardware panStamps der spanischen Firma panStamp S.L.U.
Der Focus liegt natürlich auf die Integration mit FHEM. Zu der Hardware panStamp gibt es Herstellerseitig eine eigenen community mit Forum und Wiki, sowie SourceCodes auf Github.
 
 
 
 
== Systemübersicht ==
Zum besseren Verständnis der Begrifflichkeiten und Zusammenhänge ist hier eine Systemübersicht dargestellt.
[[Datei:Panstamp-Systemoverview.jpg|200px|thumb|panStamp Systemübersicht]]
 
Die Kommunikationskette ist wie folgt:
FHEM -> Host-hardware/OS -> USB -> [[panStick]] -> panStamp (Modem-Sketch) -> Funkstrecke ([[SWAP]]) -> panStamp (angepasster Sketch) -> Board -> Sensoren/LED-Strip/etc.
(Ein Panshield ersetzt "USB -> Panstick" durch "IO's am Rpi-> Panshield")
Zum Betrieb werden mindestens 2 Module benötigt, [[panStamp]] FHEM-Modul als IO-Device für FHEM und [[SWAP]] zur Integration des Funkprotokoll der panStamps. Optional kann es noch weitere Module geben als 3. Ebene, die nach dem Schema SWAP_XXXXXXXXXXXXXXXX benannt sind. Besonders bei Aktoren ist oft eine engere FHEM-Integration sinnvoll, um FHEM Konzepte wie on/off/on-for-timer direkt abzubilden und nicht mehr nur auf die [[SWAP]] Registerebene und regSet und regGet Kommandos beschränkt zu sein.
Um per autocreate automatisch das passende Modul laden zu können, müssen diese Module nach dem Schema SWAP_XXXXXXXXXXXXXXXX.pm benannt sein wobei XXXXXXXXXXXXXXXX für den jeweiligen productCode steht.
 
Es gibt bereits selbstentwickelte Hardware und Software auf Basis der panStamp Hardware und dem SWAP Protokoll:
* [[PanStamp Umweltsensor]]
* [[Bodenfeuchtesensor]]
* [[Panstamp Innenraumsensor]]
* [[PanStamp RGBWW Board mit DMX und IR]]
 
 
 
== Das FHEM Modul panStamp ==
=== Allgemein ===
Die Integration in FHEM erfolgt über eine Reihe von Modulen die im folgenden und anderen Artikel genauer beschrieben sind. Das Modul panStamp erstellt dabei das IO-Device in FHEM.
 
=== Voraussetzungen ===
Als Schnittstelle zwischen FHEM und einem panStamp Netzwerk dient entweder ein panStick (USB Stick mit aufgestecktem panStamp) oder ein panStamp Shield mit integriertem panStamp an einem Raspberry Pi. Der so angebundene panStamp wird mit einem (bei Auslieferung des PanStamps vorinstallierten) Modem-Sketch als RF Modem verwendet und über das FHEM Modul panStamp angesprochen. Die USB Anbindung kann ggf. auch von einer remote Hardware aus per TCP/IP (ser2net oder FHEM2FHEM mit RAW) an FHEM angebunden werden.
 
=== Anwendung ===
==== Define ====
Das Device "panStick" wird derzeit (01.05.2015) nicht durch autocreate angelegt. Daher muss er manuell entsprechend folgendem Befehl angelegt werden:
<pre>define panStick panStamp /dev/ttyUSBx@38400</pre>
Die Schnittstelle muss entsprechend der Installation des Pansticks anzupassen werden. Für die Einrichtung des Pansticks innerhalb des OS siehe [[panstamp#unter Linux|Installation Panstick]]
 
Dieses panStamp Device versucht dann alle panStamps im Netz zu finden und per autocreate anzulegen, wenn dieses aktiv sind. Die weitere Funktion übernimmt das Modul [[SWAP]], was das Funkprotokoll der panStamp Module in FHEM implementiert.


Zur Kommunikation in einem panStamp Netzwerk dient das ''Simple Wireless Abstract Protocol'' ([http://code.google.com/p/panstamp/wiki/SWAP SWAP]).
'''Betrieb an der Fritzbox'''
Spezialitäten zum Betrieb an einer Fritzbox sind hier [http://forum.fhem.de/index.php/topic,12487.msg87778.html#msg87778] und hier [http://forum.fhem.de/index.php/topic,12487.msg95914.html#msg95914] beschrieben. Es scheint nur der hintere USB-Anschluss für die Verwendung zu laufen. Außerdem muss der USB-Fernaschluss deaktiviert sein.


Um einen panStamp in Betrieb zu nehmen muss er unbedingt mit einer Antenne oder einem stück Draht in der [https://code.google.com/p/panstamp/wiki/antennalengths richtigen Länge] bestückt sein. Ohne Antenne funktioniert die Übertragung nicht. Auch nicht auf kurze Distanzen.
==== Attribute ====
Für den "panStick" gibt es keine modulspezifischen Attribute.


== Simple Wireless Abstract Protocol (SWAP) ==
==== set-Befehle ====
Die komplette SWAP- Kommunikation ist registerbasiert und erfolgt mit Nachrichten um diese Register abzufragen, zu setzen und deren Inhalt zu senden. Alle Register lassen sich lesen, manche auch beschreiben.


Jeder panStamp stellt elf Systemregister (00-0A) [http://code.google.com/p/panstamp/wiki/SWAPregisters] und beliebig viele sketchabängige Userregister (0B-)bereit. Die Beschreibung der jeweils von einem Sketch bereitgestellten Userregister erfolgt in ''Device Description Files'', die in .../FHEM/lib/SWAP zu finden sind. Die Identifikation der Art eines panStamp und die Zuordnung zu einem bestimmten Device Description File erfolgt über den productCode der aus ''Hersteller''- und ''Produkt''-Id gebildet wird.
* discover?
Mit diesem Befehl wird eine Broadcast SWAP-Message abgesetzt, die alle empfangenden panStamps dazu veranlassen, sich zu melden. Batteriebetriebenen panStamps können systembedingt nur identifiziert werden, wenn diese Empfangsbereit sind und sich nicht im Schlafmodus befinden.


In den Systemregistern steht z.&nbsp;B. der productCode, die Deviceadresse und das Übertragungsintervall. Konfigurierbare Register werden im EEPROM gesichert, so dass die Werte auch bei einem Neustart nicht verlorengehen. Beim ersten Starten eines panStamp ist das EEPROM mit FF initialisiert und alle konfigurierbaren Register haben diesen Wert, also z.&nbsp;B. die Adresse FF und das Intervall FFFF (zwischen 18 und 19 Stunden).
* raw
Ist der Panstick ersteinmal eingerichtet und meldet "Initialized", kann über das panStick device direkt eine raw Message abgesetzt werden. Diese ist zur Zeit eigentlich immer eine SWAP Nachricht wie z.b.  
<pre>
set panStick raw 00010000010000
</pre>
In diesem Beispiel wird ein broadcast an alle abgesetzt, damit diese ihre ID und ihren productcode zurück senden.
Das macht der panStick nach dem Initialisieren auch ein mal automatisch um alle nicht schlafenden Devices per autocreate anlegen zu können.


Die Systemregister werden in der Device Detailansicht bei den InternalValues im oberen Bereich angezeigt und die User-Register als reading im unteren Bereich.
Mit diesem Befehl "raw" lassen sich SWAP-Messages direkt absetzten, was vor allen Dingen dann hilfreich sein kann, wenn man vermutet, dass die Kommunikation über die modulgestützten Befehle fehlschlägt.


Jeder panStamp durchläuft beim Start eine definierte Einschaltsequenz und überträgt als erstes seinen productCode. Batteriebetriebene panStamps warten anschließend drei Sekunden auf Konfigurationskommandos. Danach werden bestimmte Systemregister und aktuelle Messwerte gesendet.
=== Anwendungsbeispiele ===


== FHEM Integration ==
=== Links ===
Die Integration in FHEM erfolgt über eine reihe von Modulen die im folgenden genauer beschrieben werden.


=== panStamp ===
Als Schnittstelle zwischen FHEM und einem panStamp Netzwerk dient entweder ein panStick (USB Stick mit aufgestecktem panStamp) oder ein panStamp Shield mit integriertem panStamp an einem Raspberry Pi. Der so angebundene panStamp wird mit einem (bei Auslieferung des PanStamps vorinstallierten) Modem-Sketch als RF Modem verwendet und über das FHEM Modul panStamp angesprochen. Hierzu ist in FHEM ein entsprechendes Device anzulegen: <pre>define panStick panStamp /dev/ttyUSBx@38400</pre>


Dieses panStamp Device versucht dann als erstes alle panStamps im Netz zu finden und per autocreate anzulegen.
== Die Hardware panStamp ==
=== Allgemein ===
[http://www.panstamp.com/home panStamps] sind [[Arduino]] Clones, die ein CC1101 Funkmodul beinhalten. Mit ihnen lassen sich Sensoren und Aktoren drahtlos an FHEM anbinden. Sie lassen sich genau wie Arduinos über die Ardunio IDE oder mit dem ino Kommandozeilen Binary programmieren.


=== SWAP ===
Der panStamp Software Stack unterstützt einen stromsparenden Power-Down- oder Sleep-Modus für batteriebetriebene Sensoren, aus dem diese dann nur zur eigentlichen Messung und Übertragung "aufwachen".
[[Datei:SWAP_ 0000000100000005-detail.png|mini|hochkant=2.5|Readings]]
Das SWAP Modul ermöglicht die generische Integration beliebiger panStamp Sensoren und Aktoren in FHEM. Mit Hilfe der im jeweiligen Device Description File hinterlegten Beschreibung werden hierzu automatisch userReadings angelegt die neben den reinen Registerwerten in hex auch 'menschenlesbare' readings der Sensorwerte erzeugen. Damit dies funktioniert, muss das Attribut ProductCode korrekt gesetzt sein. Das geschieht normalerweise automatisch beim Anlegen des Device.


Hier Beispielhaft anhand eines BMP085 Temperatur- und Luftdrucksensors dargestellt:
Zur Kommunikation in einem panStamp Netzwerk dient das ''Simple Wireless Abstract Protocol'' ([http://code.google.com/p/panstamp/wiki/SWAP SWAP]).


:<code>attr temppress userReadings voltage:0B-Voltage {hex(ReadingsVal($name,"0B-Voltage","0"))*0.001}, temperature:0C.0-Temperature {hex(ReadingsVal($name,"0C.0-Temperature","0"))*0.1-50}, pressure:0C.1-Pressure {hex(ReadingsVal($name,"0C.1-Pressure","0"))*0.01}, pressureNN:0C.1-Pressure {sprintf("%.2f",hex(ReadingsVal($name,"0C.1-Pressure","0"))*0.01 + AttrVal("global", "altitude", 0)/8.5)}</code>
Um einen panStamp in Betrieb zu nehmen muss er unbedingt mit einer Antenne oder einem stück Draht in der [https://code.google.com/p/panstamp/wiki/antennalengths richtigen Länge] bestückt sein. Ohne Antenne funktioniert die Übertragung nicht. Auch nicht auf kurze Distanzen.


[[Datei:SWAP_ 0000000100000005.png|mini|hochkant=2.5|Resultat eines stateFormat]]
=== Simple Wireless Abstract Protocol (SWAP) ===
Aus diesen readings kann dann mit stateFormat die gewünschte Darstellung für die Raumübersicht erzeugt werden:
Die komplette SWAP- Kommunikation ist registerbasiert und erfolgt mit Nachrichten um diese Register abzufragen, zu setzen und deren Inhalt zu senden. Alle Register lassen sich lesen, manche auch beschreiben.


:<code>attr temppress stateFormat {sprintf("%.1f",ReadingsVal($name,"temperature",0))."°C ".sprintf("%.1f",ReadingsVal($name,"pressureNN",0))."mbar"}</code>
Jeder panStamp stellt elf Systemregister (00-0A) [http://code.google.com/p/panstamp/wiki/SWAPregisters] und beliebig viele sketchabängige Userregister (0B-)bereit. Die Beschreibung der jeweils von einem Sketch bereitgestellten Userregister erfolgt in ''Device Description Files'', die in .../FHEM/lib/SWAP zu finden sind. Die Identifikation der Art eines panStamp und die Zuordnung zu einem bestimmten Device Description File erfolgt über den productCode der aus ''Hersteller''- und ''Produkt''-Id gebildet wird.


In den Systemregistern steht z.&nbsp;B. der productCode, die Deviceadresse und das Übertragungsintervall. Konfigurierbare Register werden im EEPROM gesichert, so dass die Werte auch bei einem Neustart nicht verlorengehen. Beim ersten Starten eines panStamp ist das EEPROM mit FF initialisiert und alle konfigurierbaren Register haben diesen Wert, also z.&nbsp;B. die Adresse FF und das Intervall FFFF (zwischen 18 und 19 Stunden).


Sobald ein SWAP Device mit dem productCode korrekt angelegt wurde, können die Userregister bzw. alle Register aufgelistet werden:
Die Systemregister werden in der Device Detailansicht bei den InternalValues im oberen Bereich angezeigt und die User-Register als reading im unteren Bereich.
get <device> regList
get <device> regListALL


und einzelne Register abgefragt und gesetzt werden:
Jeder panStamp durchläuft beim Start eine definierte Einschaltsequenz und überträgt als erstes seinen productCode. Batteriebetriebene panStamps warten anschließend drei Sekunden auf Konfigurationskommandos. Danach werden bestimmte Systemregister und aktuelle Messwerte gesendet.
set <device> regGet <ID>
set <device> regSet <ID> <value>
Für die Systemregister kann hierzu statt der RegisterID auch der Registername (siehe regListAll) verwendet werden.


==== Neue panStamps in Betrieb nehmen ====
=== Neue panStamps in Betrieb nehmen ===
'''Info: Das SWAP Modul unterstützt autocreate. Bei der Inbetriebnahme ist autocreate zu aktivieren!'''
'''Info: Das SWAP Modul unterstützt autocreate. Bei der Inbetriebnahme ist autocreate zu aktivieren!'''


Zeile 90: Zeile 128:
Automatisch gesetzte Werte sollten danach manuell auf die jeweilige Installation angepasst werden.
Automatisch gesetzte Werte sollten danach manuell auf die jeweilige Installation angepasst werden.


==== Beispiele ====
 
===== Bodenfeuchte =====
=== Beispiele ===
==== Bodenfeuchte ====
Der panStamp soilmoisture Sketch aus dem examples Verzeichnis ist mit dem Standard SWAP Modul kompatibel.  
Der panStamp soilmoisture Sketch aus dem examples Verzeichnis ist mit dem Standard SWAP Modul kompatibel.  


Zeile 113: Zeile 152:
Die folgenden Bilder zeigen eine panStamp/Vegetronix Außeneinheit im IP65-Gehäuse. Dieser Aufbau wird ganzjährig den Witterungseinflüssen ausgesetzt. Die auf den Stab aufgesetzte Antenne muss nicht verwendet werden, bei kürzeren Funkstrecken ist eine innenliegende Drahtantenne ausreichend. Bitte in FHEM den RSSI- und LQI-Wert sowie die Gleichmäßigkeit des Empfangens der 5 Minuten Sendeintervalle dementsprechend beobachten.
Die folgenden Bilder zeigen eine panStamp/Vegetronix Außeneinheit im IP65-Gehäuse. Dieser Aufbau wird ganzjährig den Witterungseinflüssen ausgesetzt. Die auf den Stab aufgesetzte Antenne muss nicht verwendet werden, bei kürzeren Funkstrecken ist eine innenliegende Drahtantenne ausreichend. Bitte in FHEM den RSSI- und LQI-Wert sowie die Gleichmäßigkeit des Empfangens der 5 Minuten Sendeintervalle dementsprechend beobachten.


=== SWAP_XXXXXXXXXXXXXXXX ===
Besonders bei Aktoren ist oft eine engere FHEM-Integration sinnvoll, um FHEM Konzepte wie on/off/on-for-timer direkt abzubilden und nicht mehr nur auf die Registerebene und regSet und regGet Kommandos beschränkt zu sein.
Um per autocreate automatisch das passende Modul laden zu können, müssen diese Module nach dem Schema SWAP_XXXXXXXXXXXXXXXX.pm benannt sein wobei XXXXXXXXXXXXXXXX für den jeweiligen productCode steht.
==== SWAP_0000002200000003 ====
[[Datei:SWAP_0000002200000003.png|mini|rechts|hochkant=2.5|RGB LED Driver Board]]
Ein FHEM Modul für das modifizierte panStamp RGB LED Driver Board.
Das Board unterstützt RGBW LEDs und lässt sich per Infrarot Fernbedienung, DMX Controller (z.&nbsp;B. als Unterputz Touchpanel) und FHEM bedienen.
Der Funktionsumfang wird in diesem [http://forum.fhem.de/index.php/topic,12487.msg81923.html#msg81923 Forenthread] vorgestellt. Die Hardware für das Board wird [http://forum.fhem.de/index.php/topic,13890.0.html  hier] im FHEM Forum vorgestellt und ein Prototyp ist [http://forum.fhem.de/index.php/topic,12487.msg85777.html#msg85777 hier] zu sehen.
=====Upate 2014-01-11=====
Zur Zeit ist Version 2 des Boards in Vorbereiteung. Die Projektseite zur Hardware findet sich [http://itse.homeip.net/projekte/12/6/ hier].
Demnächst wird eine aktualisiert Version des Fhem Moduls und panStamp Sketches eingecheckt. Eine Übersicht über die dann vorhandene Funktionalität:
was geht:
* bis zu vier led kanäle (je nach kombination von ir und soft pwm)
* ir senden
* ir empfangen
* messen ob die led versorgung an ist
* helligkeit eines an A2 angeschlossenen helligkeits sensors
* konfiguration der dmx basis adresse über das swap register 0x12
* optional soft on auf letzten wert
* alles was auch vorher schon ging: dimmen, faden, ir fernbedienungen anlernen, ...
wichtig zu wissen:
* wenn ir aktiv ist und kein soft pwm lässt sich der 4. kanal nur ein und aus schalten
* wenn ir aktiv ist muss soft pwm aktiv sein um den 4. kanäle auch zu dimmen
* es wird nur ein zusätzlicher kanal tatsächlich schon unterstützt. der fünfte kommt noch
* bei ir senden sind nur die aufrufe für sony und nec tatsächlich eingebaut. die anderen sind aber einfach zu ergänzen
* beim ir senden sind noch keine Wiederholungen eingebaut. die müssen laut protokoll aber eigentlich sein
was noch kommt:
* besseres soft pwm
* mehr konfiguration bezüglich default verhalten. ramp zeiten, delays, ...
* hsv farb modell um besser zu faden und vor allem um den weiss anteil automatisch auf die weiss leds zu legen
* die virtuellen channel
* fhem kompatibles ir senden
* sofortiges senden von helligkeit und led spannung bei änderung
* andere ir lib mit sehr viel besserer geräte unterstützung
wie gehabt muss alles über config.h konfiguriert werden.
===== weitrere Screenshots =====
<gallery>
File:SWAP_0000002200000003-internal.png|InternalValues
File:SWAP_0000002200000003-readings.png|Readings
File:SWAP_0000002200000003-attributes.png|Attributes
</gallery>
== Arduino Sketches ==
Zum Flashen der panStamps wird die Arduino IDE benötigt. Eine Installationsanleitung ist unter folgendem Link zu finden:
:https://code.google.com/p/panstamp/wiki/firststeps
Für den RGB-Driver sketch sind je nach gewünschtem Funktionsumfang noch folgende libs zu installieren:
* IR lib - https://github.com/shirriff/Arduino-IRremote
* DMX lib- http://www.mathertel.de/Arduino/DMXSerial.aspx
Die Librarys sollten entweder mit dem entsprechenden Menüpunkt in die IDE integriert werden oder jeweils nach auspacken des zip files als als kompletten Ordner im Arduino libraries verzeichnis abgelegt werden (siehe [http://www.arduino.cc/en/Hacking/Libraries)]).
Die aktuelle Version des RGB-Driver Sketches findet sich auf [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ sourceforge].
Dieser muss in Arduino\libraries\panstamp\examples\sketches entpackt und die rbgdriver.ino gestartet werden. In der Arduino IDE sollte unter Tools->Board "Arduino Pro or Pro Mini (3.3V, 8MHz) w/ Atmega328" eingestellt sein. Wenn man das boards.txt file von [http://code.google.com/p/panstamp/downloads/detail?name=boards.txt&can=2&q= hier] installiert kann man in der IDE auch direkt panStamp als Plattform auswählen.
Welche Features der sketch bietet lässt sich im config.h file durch ein- oder auskommentieren der #define ENABLE_... Zeilen festlegen.
'''Besonderheiten bei der Nutzung einiger Funktionen'''
* #define ENABLE_DMX
Hierbei ist darauf zu achten, dass in der DMX-Lib in der Datei DMXSerial.h die Zeile
<nowiki>#define DmxModePin 2    // Arduino pin 2 for controlling the data direction</nowiki>
in
<nowiki>#define DmxModePin 7    // Arduino pin 7 for controlling the data direction</nowiki>
abgeändert werden muss.
* #define HAS_SENSOR (ermöglicht die Nutzung eines DHT22 Sensors zur Auswerung von Temperatur und Luftfeuchtigkeit)
USE_SOFT_PWM;
ENABLE_IR_SEND;
ENABLE_REPEATER;
sollte hierfür auskommentiert sein.
In der IRremote.cpp Datei in der Irremote Library muss die Zeile
void IRrecv::disableIRIn()
{
TIMER_DISABLE_INTR;
}
sowie die Irremote.h Datei unter Public: um die Zeile
void disableIRIn();
erweitert werden.
Der Daten-Pin des DHT22 Sensors muss hierfür an A2 des panStamps angeschlossen werden.


== Weblinks ==
== Weblinks ==
* [http://www.panstamp.com/home panStamp] panStamp Hersteller
* [http://www.panstamp.com/home panStamp] panStamp Hersteller
* [http://itse.homeip.net/projekte/12/6/ Projektseite] für das RGB-Multi-Board.
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ rgbdriver sketch] auf sourceforge
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ soilmoisture sketch]  auf sourceforge
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ soilmoisture sketch]  auf sourceforge



Version vom 17. Juli 2015, 19:49 Uhr


Clock - Under Construction.svg An dieser Seite wird momentan noch gearbeitet.



PanStamp
panStamp
Allgemein
Protokoll SWAP
Typ Sender, Empfänger, Sensor, Interface
Kategorie
Technische Details
Kommunikation 868MHz (433/915MHz)
Kanäle
Betriebsspannung 3.3V (panStick: 5V USB)
Leistungsaufnahme
Versorgung Battery (panStick: USB)
Abmessungen 17.7 x 30.5 mm
Sonstiges
Modulname 34_panStamp.pm 34_SWAP.pm
Ersteller Andre / justme1968
Hersteller panStamp


Auf der Diskussionsseite dieses Artikels habe ich eine Neufassung dieses Artikels eingestellt mit der Bitte um Korrektur direkt hier oder konstruktive Kritik [1]

panStamps sind Arduino Clones, die ein CC1101 Funkmodul beinhalten. Mit ihnen lassen sich Sensoren und Aktoren drahtlos an FHEM anbinden. Sie lassen sich genau wie Arduinos über die Ardunio IDE oder mit dem ino Kommandozeilen Binary programmieren.

Dieser Artikel beschreibt zu einem das FHEM Modul panStamp, was das Funkinterface zu FHEM bildet und die dazugehörige Hardware panStamps der spanischen Firma panStamp S.L.U. Der Focus liegt natürlich auf die Integration mit FHEM. Zu der Hardware panStamp gibt es Herstellerseitig eine eigenen community mit Forum und Wiki, sowie SourceCodes auf Github.



Systemübersicht

Zum besseren Verständnis der Begrifflichkeiten und Zusammenhänge ist hier eine Systemübersicht dargestellt.

panStamp Systemübersicht

Die Kommunikationskette ist wie folgt: FHEM -> Host-hardware/OS -> USB -> panStick -> panStamp (Modem-Sketch) -> Funkstrecke (SWAP) -> panStamp (angepasster Sketch) -> Board -> Sensoren/LED-Strip/etc. (Ein Panshield ersetzt "USB -> Panstick" durch "IO's am Rpi-> Panshield") Zum Betrieb werden mindestens 2 Module benötigt, panStamp FHEM-Modul als IO-Device für FHEM und SWAP zur Integration des Funkprotokoll der panStamps. Optional kann es noch weitere Module geben als 3. Ebene, die nach dem Schema SWAP_XXXXXXXXXXXXXXXX benannt sind. Besonders bei Aktoren ist oft eine engere FHEM-Integration sinnvoll, um FHEM Konzepte wie on/off/on-for-timer direkt abzubilden und nicht mehr nur auf die SWAP Registerebene und regSet und regGet Kommandos beschränkt zu sein. Um per autocreate automatisch das passende Modul laden zu können, müssen diese Module nach dem Schema SWAP_XXXXXXXXXXXXXXXX.pm benannt sein wobei XXXXXXXXXXXXXXXX für den jeweiligen productCode steht.

Es gibt bereits selbstentwickelte Hardware und Software auf Basis der panStamp Hardware und dem SWAP Protokoll:


Das FHEM Modul panStamp

Allgemein

Die Integration in FHEM erfolgt über eine Reihe von Modulen die im folgenden und anderen Artikel genauer beschrieben sind. Das Modul panStamp erstellt dabei das IO-Device in FHEM.

Voraussetzungen

Als Schnittstelle zwischen FHEM und einem panStamp Netzwerk dient entweder ein panStick (USB Stick mit aufgestecktem panStamp) oder ein panStamp Shield mit integriertem panStamp an einem Raspberry Pi. Der so angebundene panStamp wird mit einem (bei Auslieferung des PanStamps vorinstallierten) Modem-Sketch als RF Modem verwendet und über das FHEM Modul panStamp angesprochen. Die USB Anbindung kann ggf. auch von einer remote Hardware aus per TCP/IP (ser2net oder FHEM2FHEM mit RAW) an FHEM angebunden werden.

Anwendung

Define

Das Device "panStick" wird derzeit (01.05.2015) nicht durch autocreate angelegt. Daher muss er manuell entsprechend folgendem Befehl angelegt werden:

define panStick panStamp /dev/ttyUSBx@38400

Die Schnittstelle muss entsprechend der Installation des Pansticks anzupassen werden. Für die Einrichtung des Pansticks innerhalb des OS siehe Installation Panstick

Dieses panStamp Device versucht dann alle panStamps im Netz zu finden und per autocreate anzulegen, wenn dieses aktiv sind. Die weitere Funktion übernimmt das Modul SWAP, was das Funkprotokoll der panStamp Module in FHEM implementiert.

Betrieb an der Fritzbox Spezialitäten zum Betrieb an einer Fritzbox sind hier [2] und hier [3] beschrieben. Es scheint nur der hintere USB-Anschluss für die Verwendung zu laufen. Außerdem muss der USB-Fernaschluss deaktiviert sein.

Attribute

Für den "panStick" gibt es keine modulspezifischen Attribute.

set-Befehle

  • discover?

Mit diesem Befehl wird eine Broadcast SWAP-Message abgesetzt, die alle empfangenden panStamps dazu veranlassen, sich zu melden. Batteriebetriebenen panStamps können systembedingt nur identifiziert werden, wenn diese Empfangsbereit sind und sich nicht im Schlafmodus befinden.

  • raw

Ist der Panstick ersteinmal eingerichtet und meldet "Initialized", kann über das panStick device direkt eine raw Message abgesetzt werden. Diese ist zur Zeit eigentlich immer eine SWAP Nachricht wie z.b.

set panStick raw 00010000010000

In diesem Beispiel wird ein broadcast an alle abgesetzt, damit diese ihre ID und ihren productcode zurück senden. Das macht der panStick nach dem Initialisieren auch ein mal automatisch um alle nicht schlafenden Devices per autocreate anlegen zu können.

Mit diesem Befehl "raw" lassen sich SWAP-Messages direkt absetzten, was vor allen Dingen dann hilfreich sein kann, wenn man vermutet, dass die Kommunikation über die modulgestützten Befehle fehlschlägt.

Anwendungsbeispiele

Links

Die Hardware panStamp

Allgemein

panStamps sind Arduino Clones, die ein CC1101 Funkmodul beinhalten. Mit ihnen lassen sich Sensoren und Aktoren drahtlos an FHEM anbinden. Sie lassen sich genau wie Arduinos über die Ardunio IDE oder mit dem ino Kommandozeilen Binary programmieren.

Der panStamp Software Stack unterstützt einen stromsparenden Power-Down- oder Sleep-Modus für batteriebetriebene Sensoren, aus dem diese dann nur zur eigentlichen Messung und Übertragung "aufwachen".

Zur Kommunikation in einem panStamp Netzwerk dient das Simple Wireless Abstract Protocol (SWAP).

Um einen panStamp in Betrieb zu nehmen muss er unbedingt mit einer Antenne oder einem stück Draht in der richtigen Länge bestückt sein. Ohne Antenne funktioniert die Übertragung nicht. Auch nicht auf kurze Distanzen.

Simple Wireless Abstract Protocol (SWAP)

Die komplette SWAP- Kommunikation ist registerbasiert und erfolgt mit Nachrichten um diese Register abzufragen, zu setzen und deren Inhalt zu senden. Alle Register lassen sich lesen, manche auch beschreiben.

Jeder panStamp stellt elf Systemregister (00-0A) [4] und beliebig viele sketchabängige Userregister (0B-)bereit. Die Beschreibung der jeweils von einem Sketch bereitgestellten Userregister erfolgt in Device Description Files, die in .../FHEM/lib/SWAP zu finden sind. Die Identifikation der Art eines panStamp und die Zuordnung zu einem bestimmten Device Description File erfolgt über den productCode der aus Hersteller- und Produkt-Id gebildet wird.

In den Systemregistern steht z. B. der productCode, die Deviceadresse und das Übertragungsintervall. Konfigurierbare Register werden im EEPROM gesichert, so dass die Werte auch bei einem Neustart nicht verlorengehen. Beim ersten Starten eines panStamp ist das EEPROM mit FF initialisiert und alle konfigurierbaren Register haben diesen Wert, also z. B. die Adresse FF und das Intervall FFFF (zwischen 18 und 19 Stunden).

Die Systemregister werden in der Device Detailansicht bei den InternalValues im oberen Bereich angezeigt und die User-Register als reading im unteren Bereich.

Jeder panStamp durchläuft beim Start eine definierte Einschaltsequenz und überträgt als erstes seinen productCode. Batteriebetriebene panStamps warten anschließend drei Sekunden auf Konfigurationskommandos. Danach werden bestimmte Systemregister und aktuelle Messwerte gesendet.

Neue panStamps in Betrieb nehmen

Info: Das SWAP Modul unterstützt autocreate. Bei der Inbetriebnahme ist autocreate zu aktivieren!

Neue panStamps sollten nur Einer nach dem Anderen in Betrieb genommen werden, da sie zuerst mit einer eindeutigen Device-Adresse (ungleich FF und grösser 01) versehen werden müssen. Bei batteriebetriebenen Sensoren sollte auch das Sendeintervall auf einen sinnvollen Wert gesetzt werden:

set <device> regSet 09 <device adresse als 2 stellige hex zahl>
set <device> regSet 0A <intervall in sekunden als 4 stellige hex zahl>

Für Devices im Power-Down-Modus werden diese Kommandos in eine Warteschlange gestellt und übertragen, sobald das Device seine Initialisierungssequenz durchläuft. Hierzu ist nach Absetzen der Kommandos Reset zu drücken oder die Stromquelle erneut zu verbinden.

Das SWAP modul versucht, ein Device mit der default Adresse FF automatisch auf die erste freie Adresse im Bereich F0-FE zu ändern.

Für batteriebetriebene Devices (genauer: Devices die den Power-Down-Modus unterstützen) wird das Default Sendeintervall von FFFF zu 0384 (900 Sekunden) geändert. Es gibt mit bestimmten panStamp lib Versionen das Problem das ein wert von FFFF in 0A zum Überlauf führt und dann ununterbrochen gesendet wird. Im fhem Modul wird versucht das abzufangen. Das funktioniert auf manchen langsamen host systemen (z.B. FritzBox) nicht, weil der panStamp so schnell sendet, dass fhem so mit dem Abarbeiten beschäftigt ist, dass es selber nicht zum senden kommt. Zur Abhilfe kann im sketch in setup() ganz am Anfang ein

 EEPROM.write(EEPROM_TX_INTERVAL, 0x55);
 EEPROM.write(EEPROM_TX_INTERVAL+1, 0x55);

eingefügt werden und noch mal flashen. Wenn der Sketch damit ein mal durchgelaufen ist können diese beiden Zeilen wieder entfernen und der panStamp noch mal geflasht.

Automatisch gesetzte Werte sollten danach manuell auf die jeweilige Installation angepasst werden.


Beispiele

Bodenfeuchte

Der panStamp soilmoisture Sketch aus dem examples Verzeichnis ist mit dem Standard SWAP Modul kompatibel.

Ein Artikel über ein selbstentwickeltes PanStamp Batterieboard zum Anschluss von Analogsensoren/1Wire und Solarversorgung ist hier Bodenfeuchtesensor beschrieben. Die Weiterentwicklung zum Umweltsensor ist hier PanStamp_Umweltsensor beschrieben.

Eine für einen Vegetronix sensor angepasste Version kann von sourceforge heruntergeladen werden. Das Übertragungsintervall ist wie üblich über das regsiter 0A konfigurierbar. Der Sensor wird and GND, D7 für die Versorgungsspannung und A4 für den Messwert angeschlossen. Erfahrungen haben gezeigt, dass bei einem fünfminütigen Übertragungsintervall nach 12 Monaten Laufzeit die Batteriespannung von 1.55V auf 1.4V abfällt. Das würde bedeuten, dass eine Batterie im Batterieboard mindestens eine Laufzeit von drei Jahren haben sollte.

set <MyBodenfeuchte> stateFormat VWC_A%
set <MyBodenfeuchte> userReadings Level0_Voltage {hex(ReadingsVal($name,"0C.0-Moisture_level_0","0"))*(3.3/1024)}, 
    VWC_A:0C.0-Moisture_level_0 {sprintf("%.0f",(11.6552 * (ReadingsVal($name,"Level0_Voltage","0"))**4 + 7.10835 * 
       (ReadingsVal($name,"Level0_Voltage","0"))**2 - 0.569557) / ((ReadingsVal($name,"Level0_Voltage","0"))**2 + 1))}, 
    voltage:0B-Voltage {hex(ReadingsVal($name,"0B-Voltage","0"))*0.001}, 
    battery:0B-Voltage {(ReadingsVal($name,"voltage","0")<1?"low":"ok")}
Bodenfeuchte
Vegetronix Bodenfeuchtesensor an panStamp
Vegetronix Bodenfeuchtesensor an panStamp

Mit einem entsprechend erweiterten Sketch lassen sich auch mehrere Sensoren an einem panStamp auslesen.

Die folgenden Bilder zeigen eine panStamp/Vegetronix Außeneinheit im IP65-Gehäuse. Dieser Aufbau wird ganzjährig den Witterungseinflüssen ausgesetzt. Die auf den Stab aufgesetzte Antenne muss nicht verwendet werden, bei kürzeren Funkstrecken ist eine innenliegende Drahtantenne ausreichend. Bitte in FHEM den RSSI- und LQI-Wert sowie die Gleichmäßigkeit des Empfangens der 5 Minuten Sendeintervalle dementsprechend beobachten.


Weblinks