SWAP: Unterschied zwischen den Versionen

Aus FHEMWiki
(Die Seite wurde neu angelegt: „{{Baustelle}} {{SEITENTITEL:SWAP}} {{Infobox Modul |ModPurpose=Modul zur allgemeinen Ansteuerung sämtlicher PanStamp Boards. |ModType=d |ModCmdRef=SWAP |ModF…“)
 
(1. Auskopplung aus der Diskussion vom Artikel PanStamp)
Zeile 8: Zeile 8:
|ModForumArea=
|ModForumArea=
|ModFTopic=
|ModFTopic=
|ModTechName=
|ModTechName=34_SWAP.pm
|ModOwner=
|ModOwner=André/ justme1968 ({{Link2FU|430|Forum}} / [[Benutzer Diskussion:Justme|Wiki]])
}}
}}


[[Modulname]] ist ... und macht ... (allgemeine Beschreibung, etwas mehr,
 
als unter "ModPurpose" angegeben)
[[SWAP]] ist das Basismodul für die Unterstützung der PanStamp Baugruppen. Zur Kommunikation in einem PanStamp Netzwerk dient das ''Simple Wireless Abstract Protocol'' ([http://code.google.com/p/panstamp/wiki/SWAP 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. Für eine tiefgreifende FHEM Integration können weitere Module (wie z.B. xxxx) vorhanden sein. Diese Module bauen auf das SWAP Modul auf und bedienen im backend ebenfalls die PanStamp Module über die Register. 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".


== Voraussetzungen ==
== Voraussetzungen ==
Um Modul xyz benutzen zu können, muss außerdem ...
Zur Anbindung muss ein PanStamp Modul mit dem Modem Sketch, per USB, angebunden sein. Dieses Interface wird über das 1. Level Modul [[panStamp]] an FHEM angebunden.


== Anwendung ==
== Anwendung ==
[[Datei:SWAP_ 0000000100000005-detail.png|mini|hochkant=2.5|Readings]]
Bei SWAP geht alle Kommunikation über 'Register', dies sind unterschiedlich lange Werte die entweder nur gelesen oder gelesen und geschrieben werden können. Jedes Device hat eine Reihe Systemregister (00-0A) und beliebig viele Userregister die vom jeweiligen Sketch abhängen. Welche Register dies sind, steht unter anderem jeweils im Device Description xml file im Verzeichnis .../FHEM/lib/SWAP.
In den System Registern steht z.b. der productcode, die device adresse und das Übertragungsintervall. Konfigurierbare Register werden im EEPROM gesichert und die Werte gehen auch beim Neustart nicht verloren. Beim aller ersten Starten ist das EEPROM mit "FF" initialisiert und alle konfigurierbaren Register haben diesen Wert. also z.b. Adresse FF und Intervall FFFF (HEX in Sekunden, das wären dann zwischen 18 und 19 Stunden).
Die Inhalte der System Register stehen als INTERNAL im oberen Bereich der Detail Ansicht einer Komponente in FHEM, die user register als Readings im unteren.
Alle low level Dinge wie Register ID oder Register Wert können mit hex Werten direkt angepasst werden. Im Normalbetrieb ist dieses aber nicht notwendig und es kann über 'vereinfachte' Kommandos mit den Registernamen verwenden kann. Diese Funktionalität stellt das eines der Module zur Verfügung.
<pre>
set <device> regSet 0A <intervall in sekunden als 4 stellige hex zahl>
set <device> regSet 08 <netzwerk id als 2 stellige hex zahl>
</pre>
{{Link2Forum|Topic=12487 |Message=87436 }}
[http://forum.fhem.de/index.php?topic=12487.msg87436#msg87436]
Dieses Modul stellt unter anderem folgende grundlegende Funktionalitäten zur Verfügung
* Es wird eine command Liste für Devices im power down Modus gehalten. Sobald das Device online kommt werden die Kommandos automatisch übertragen.
* Die userReadings für 'menschenlesbare' Readings werden anhand des device description files automatisch erzeugt
* Es ist jetzt möglich direkt endpoints (Teile eines Registers) zu schreiben (???)
* (Fast) keine hardkodierte Sonderbehandlung mehr für das RGB-Board. Das SWAP Modul kann mit jedem beliebige Swap Device umgehen.
* Es gibt eine dritte (optionale) Modulschicht neben dem PanStamp modul für die Hardware und dem SWAP Modul für das Protokoll. Mit dem generellen SWAP Modul lasen sich alle SWAP devices 'zu fuss' über die Register ansprechen. Um die register auf einer höheren Ebene auf FHEM Kommandos wie on/off/on-for-timer zu mappen ist dann diese dritte schicht zuständig.
{{Link2Forum|Topic=12487 |Message=78502 }}
[http://forum.fhem.de/index.php/topic=12487.msg78502#msg78502]
=== Define ===
=== Define ===


=== Attribute ===
=== Attribute ===
=== Device Description File ===
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:
<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>
[[Datei:SWAP_ 0000000100000005.png|mini|hochkant=2.5|Resultat eines stateFormat]]
Aus diesen readings kann dann mit stateFormat die gewünschte Darstellung für die Raumübersicht erzeugt werden:
<code>attr temppress stateFormat {sprintf("%.1f",ReadingsVal($name,"temperature",0))."°C ".sprintf("%.1f",ReadingsVal($name,"pressureNN",0))."mbar"}</code>
Ein weiteres Beispiel ist das Description File für das RGB-Board rgbdriver.xml.


== Anwendungsbeispiele ==
== Anwendungsbeispiele ==

Version vom 16. Juli 2015, 19:59 Uhr


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



SWAP
Zweck / Funktion
Modul zur allgemeinen Ansteuerung sämtlicher PanStamp Boards.
Allgemein
Typ Gerätemodul
Details
Dokumentation EN / DE
Modulname 34_SWAP.pm
Ersteller André/ justme1968 (Forum / Wiki)
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref!


SWAP ist das Basismodul für die Unterstützung der PanStamp Baugruppen. Zur Kommunikation in einem PanStamp Netzwerk dient das 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. Für eine tiefgreifende FHEM Integration können weitere Module (wie z.B. xxxx) vorhanden sein. Diese Module bauen auf das SWAP Modul auf und bedienen im backend ebenfalls die PanStamp Module über die Register. 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".

Voraussetzungen

Zur Anbindung muss ein PanStamp Modul mit dem Modem Sketch, per USB, angebunden sein. Dieses Interface wird über das 1. Level Modul panStamp an FHEM angebunden.

Anwendung

Readings

Bei SWAP geht alle Kommunikation über 'Register', dies sind unterschiedlich lange Werte die entweder nur gelesen oder gelesen und geschrieben werden können. Jedes Device hat eine Reihe Systemregister (00-0A) und beliebig viele Userregister die vom jeweiligen Sketch abhängen. Welche Register dies sind, steht unter anderem jeweils im Device Description xml file im Verzeichnis .../FHEM/lib/SWAP.

In den System Registern steht z.b. der productcode, die device adresse und das Übertragungsintervall. Konfigurierbare Register werden im EEPROM gesichert und die Werte gehen auch beim Neustart nicht verloren. Beim aller ersten Starten ist das EEPROM mit "FF" initialisiert und alle konfigurierbaren Register haben diesen Wert. also z.b. Adresse FF und Intervall FFFF (HEX in Sekunden, das wären dann zwischen 18 und 19 Stunden).

Die Inhalte der System Register stehen als INTERNAL im oberen Bereich der Detail Ansicht einer Komponente in FHEM, die user register als Readings im unteren.

Alle low level Dinge wie Register ID oder Register Wert können mit hex Werten direkt angepasst werden. Im Normalbetrieb ist dieses aber nicht notwendig und es kann über 'vereinfachte' Kommandos mit den Registernamen verwenden kann. Diese Funktionalität stellt das eines der Module zur Verfügung.

set <device> regSet 0A <intervall in sekunden als 4 stellige hex zahl>
set <device> regSet 08 <netzwerk id als 2 stellige hex zahl>

Beitrag [1]

Dieses Modul stellt unter anderem folgende grundlegende Funktionalitäten zur Verfügung

  • Es wird eine command Liste für Devices im power down Modus gehalten. Sobald das Device online kommt werden die Kommandos automatisch übertragen.
  • Die userReadings für 'menschenlesbare' Readings werden anhand des device description files automatisch erzeugt
  • Es ist jetzt möglich direkt endpoints (Teile eines Registers) zu schreiben (???)
  • (Fast) keine hardkodierte Sonderbehandlung mehr für das RGB-Board. Das SWAP Modul kann mit jedem beliebige Swap Device umgehen.
  • Es gibt eine dritte (optionale) Modulschicht neben dem PanStamp modul für die Hardware und dem SWAP Modul für das Protokoll. Mit dem generellen SWAP Modul lasen sich alle SWAP devices 'zu fuss' über die Register ansprechen. Um die register auf einer höheren Ebene auf FHEM Kommandos wie on/off/on-for-timer zu mappen ist dann diese dritte schicht zuständig.

Beitrag [2]

Define

Attribute

Device Description File

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:

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)}

Resultat eines stateFormat

Aus diesen readings kann dann mit stateFormat die gewünschte Darstellung für die Raumübersicht erzeugt werden:

attr temppress stateFormat {sprintf("%.1f",ReadingsVal($name,"temperature",0))."°C ".sprintf("%.1f",ReadingsVal($name,"pressureNN",0))."mbar"}

Ein weiteres Beispiel ist das Description File für das RGB-Board rgbdriver.xml.


Anwendungsbeispiele

Links