panStamp FensterkontaktSensor
PanStamp FensterkontaktSensor | |
---|---|
Allgemein | |
Protokoll | SWAP |
Typ | Sensor |
Kategorie | HardwareMods |
Technische Details | |
Kommunikation | 868MHz (433/915MHz) |
Kanäle | 1 |
Betriebsspannung | 4-36V |
Leistungsaufnahme | max. 120mW |
Versorgung | permanent, line-powered |
Abmessungen | 50 x 50 mm |
Sonstiges | |
Modulname | 34_panStamp.pm 34_SWAP.pm |
Ersteller | für diesen Sketch: Tobias |
Hersteller | panStamp |
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 Arduino IDE oder mit dem ino Kommandozeilen Binary programmieren. Dieser bildet das Herzstück des Umweltsensors
Dieser Wiki Artikel bezieht auf den panstamp NRG 2 Weiterführende Information zu panStamps und den grundlegenden Modulen um sie mit FHEM zu integrieren finden sich im zugehörigen Wiki Artikel.
Beschreibung
Dieser Sensor ist mit seiner Firmware spezialisert auf die Zustandserfassung von Fenster- und Türkontakten. Es können Gruppen gebildet werden mit Hilfe dessen 3 Zustände erfasst und an FHEM übermittelt werden können:
- Offen (open)
- Angeklappt (tilted)
- Geschlossen (closed)
Der auf dem panStamp NRG2 basierende Fensterkontaktsensor hat die folgenden Eigenschaften:
Hardware:
- 8x ReedkontaktEingänge
- 3 LowCurrent LEDs zur Zustandsanzeige (Rot/Gelb/Grün)
- Eingangsspannung von 4-36V, empfohlen wird eine Eingangsspannung von 5V aufgrund der Verlustleistung des Linearreglers
- passt alles in eine 68mm Unterputzdose
Software:
- Konfiguration des Sendeintervalls
- Konfiguration der Gruppen
- Konfiguration der Blink- und Leuchtintervalls der LEDs
- Übermittlung von allen 8 Eingängen
- Übermittlung des Gruppenstatus
LED Verhalten
Die LEDs zeigen folgende Zustände an, es kann immer nur eine LED gleichzeitig leuchten:
- Rot = mindestens eine definierte Gruppe haben den Status Offen
- Gelb = mindestens eine definierte Gruppe hat den Status Angeklappt, keine Gruppe ist Offen
- Green = alle definierten Gruppen haben den Status Geschlossen
Im Detail: Die Priorität ist die folgende: Offen -> Angeklappt -> Geschlossen Rot -> Gelb -> Grün
Über die Konfiguration kann folgendes eingestellt werden:
- Anzahl in Millisekunden, wie lange eine LED nach einem Event dauerhaft leuchten soll
- Anzahl in Millisekunden, wie lange nach 1) die LED ausgeschaltet ist
- Anzahl in Millisekunden, wie lange nach 1) und 2) die LED eingeschaltet ist
zb: 30000 , 15000, 50
Nach einem Event (Fenster wurde betätigt) leuchtet die passende LED 30sekunden dauerhaft, danach mit einem 50ms Blinken alle 15sek
Alle benötigten Dateien sind [ToDo hier] zu finden:
- Sketch
- EnvironmentSensor.xml
- Target3001 Dateien
Unbestückte Platinen können beim Ersteller, falls vorrätig, angefragt und erworben werden.
WICHTIG! Schaltplan und Platinen sind für den Panstamp NRG 2.
Schaltplan und Bauteilliste
Bauteilliste:
Bauteil | Bezeichnung | Shop | BauteilNr |
---|---|---|---|
C1 | Keramikkondensator Typ:X7R 100nF | Reichelt | X7R-G0805 100N |
X1, X2 | Keramikkondensator Typ:X7R 2,2uF | Reichelt | X7R-G0805 2,2/25 |
IC2 | Linearregler LP2985 | Reichelt | LP 2985 IM5-3,3 |
K1-K9 (9x) | Anreihklemme 3,5mm 2Pol | IT-WNS | AK-3.5-2-GY |
R2, R3, R4 | SMD Widerstand 1k | Reichelt
IT-WNS |
SMD-0805 1K
R-1K-0805-1 |
X3-X10 (8x) | Keramikkondensator Typ:X7R/X5R 4,7uF | Reichelt
IT-WNS |
X7R-G0805 4,7/25
C-4U7-0805 |
J1 | Stiftleiste 1x20 pol. gewinkelt, 2,54mm | IT-WNS | SL-1x20-254-G |
S1 | SMD Mikrotaster, Drucktaster, Print Miniatur 5x5x1,5mm | Ebay | |
IC1 | panStamp NRG2 | panstamp.com | panStamp NRG2 |
Hinweise zum Aufbau
Hinweise zum Betrieb mit FHEM
Configuration
Nach upload des Sketches auf den Panstamp ist zuerst die korrekte Kennung über das Register 09 sowie der gewünschte Sendezyklus über das Register 0A zu setzen (siehe Inbetriebname im Wiki Artikel zum den panStamps). Anschließend ist die Konfiguration mittels Register 0B zu setzen:
Bezeichnung | Länge | Position | Beschreibung |
---|---|---|---|
Gruppe_Pin10 | 1 Byte | 0 | Nummer der Gruppe für den ReedEingang D10, Erlaubt: 1-7, 0 ist deaktiviert |
Gruppe_Pin11 | 1 Byte | 1 | Nummer der Gruppe für den ReedEingang D11, Erlaubt: 1-7, 0 ist deaktiviert |
Gruppe_Pin12 | 1 Byte | 2 | Nummer der Gruppe für den ReedEingang D12, Erlaubt: 1-7, 0 ist deaktiviert |
Gruppe_Pin13 | 1 Byte | 3 | Nummer der Gruppe für den ReedEingang D13, Erlaubt: 1-7, 0 ist deaktiviert |
Gruppe_Pin14 | 1 Byte | 4 | Nummer der Gruppe für den ReedEingang D14, Erlaubt: 1-7, 0 ist deaktiviert |
Gruppe_Pin15 | 1 Byte | 5 | Nummer der Gruppe für den ReedEingang D15, Erlaubt: 1-7, 0 ist deaktiviert |
Gruppe_Pin16 | 1 Byte | 6 | Nummer der Gruppe für den ReedEingang D16, Erlaubt: 1-7, 0 ist deaktiviert |
Gruppe_Pin17 | 1 Byte | 7 | Nummer der Gruppe für den ReedEingang D17, Erlaubt: 1-7, 0 ist deaktiviert |
BlinkOnEvtTime | 2 Byte | 8-9 | Dauer in ms, wie lange die LED nach einem Event dauerleuchten soll |
BlinkOnIdleTime | 2 Byte | 10-11 | Dauer in ms, wie lange die LED im Idle-Modus dauerleuchten soll |
BlinkOffTime | 2 Byte | 12-13 | Dauer in ms, wie lange die LED im Idle-Modus aus sein soll |
Setzen der Konfiguration
Ein Register ist als Hex-Wert zu setzen. Folgende Tabelle zeigt eine exemplarische Konfiguration:
SubRegister | Wert | Binär Wert | Hex Wert | Comments |
---|---|---|---|---|
Gruppe_Pin10 | 1 | 1 | 01 | Zuordnung D10 zur Gruppe 1 |
Gruppe_Pin11 | 1 | 1 | 01 | Zuordnung D11 zur Gruppe 1 |
Gruppe_Pin12 | 2 | 2 | 02 | Zuordnung D12 zur Gruppe 2 |
Gruppe_Pin13 | 2 | 2 | 02 | Zuordnung D13 zur Gruppe 2 |
Gruppe_Pin14 | 3 | 3 | 03 | Zuordnung D14 zur Gruppe 3 |
Gruppe_Pin15 | 0 | 0 | 00 | Deaktivierung D15 |
Gruppe_Pin16 | 0 | 0 | 00 | Deaktivierung D16 |
Gruppe_Pin17 | 0 | 0 | 00 | Deaktivierung D17 |
BlinkOnEvtTime | 5000 | 1001110001000 | 1388 | Bei einem Event leuchtet die LED 5sek dauerhaft |
BlinkOnIdleTime | 50 | 110010 | 0032 | Im Idle Mode leuchtet die LED 50ms |
BlinkOffTime | 10000 | 10011100010000 | 2710 | Im Idle Mode leuchtet die LED nur alle 10sek |
In obigem Fall ist das Konfigurationsregister wie folgt aufgebaut: 2710 0032 1388 00 00 00 03 02 02 01 01
Aufgrunddessen wird die Konfiguration folgendermaßen gesetzt:
set <MySwapDevice> regSet 0B 2710003213880000000302020101
Es ist auch möglich die einzelnen Endpoints unabhängig voneinander zu setzen. z.B.:
set <MySwapDevice> regSet 0B.2 02
Diese Konfiguration bedeutet folgendes:
- D10 und D11 gehören zur Gruppe 01
- D12 und D13 gehören zur Gruppe 02
- D14 gehört alleine zur Gruppe 03
- D15,D16,D17 gehören zur 0-Gruppe ist sind damit deaktiviert. Die Binarstati werden zwar regelmäßig mit übertragen, in der Gruppenauswertung spielen diese Pins aber keine Rolle.
Der Gruppenstatus würde dann wie folgt gesetzt:
- Wenn D10 und D11 offen ist hat die Gruppe ebenfalls den Status Offen
- Wenn D10 und D11 geschlossen ist hat die Gruppe den Status ebenfalls Geschlossen
- Wenn D10 und D11 unterschiedlichen Status haben ist ist die Gruppe Angeklappt
- Analog dazu D12/D13 mit der Gruppe 02
- Wenn D14 offen ist, hat die Gruppe 03 den Status Offen
- Wenn D14 geschlossen ist, hat die Gruppe 03 den Status Geschlossen
- Die Gruppe 03 kann NICHT den Status Angeklappt annehmen, da nur ein Pin dieser Gruppe zugeordnet ist
Die LEDs würden sich dann wie folgt verhalten:
- Nach einem Event leuchtet die entsprechende LED 5sek dauerhaft, danach blinkt sie für 50ms alle 10sek
bereitgestellte Readings
Folgende Readings werden zusätzlich zu den Konfigurations-Readings in FHEM bereitgestellt:
Name des Reading | Datentyp | Beschreibung |
---|---|---|
0C.0-Binary_0 -> 0C.7-Binary_7 | [0-1] | aktueller Status des ReedEingangs D10-D17
0 -> Reedkontakt geschlossen |
0D.0-Gruppe_1 -> 0D.7-Gruppe_8 | [0-2] | aktueller Status der Gruppe 1-7
0 -> Geschlossen |
Beschreibung des Gruppenverhaltens
Mehrere Eingänge können zu einer Gruppe zugeordnet werden. Der Status einer Gruppe wird nach folgendem Verhalten festgelegt:
- Sind alle Reed-Kontakte der zugeordneten Pins einer Gruppe geschlossen, so ist der Status der Gruppe: Geschlossen
- Sind alle Reed-Kontakte der zugeordneten Pins einer Gruppe offen, so ist der Status der Gruppe: Offen
- Sind die einzelnen Stati der Reed-Kontakte der zugeordneten Pins einer Gruppe sowohl geschlossen als auch offen, so ist der Status der Gruppe: Angeklappt
- Wurde nur ein Pin einer Gruppe zugeordnet, so nimmt die Gruppe nur den Status Offen/Geschlossen an
Beschreibung des Sendeverhaltens
Der aktuelle Status der Pins als auch der Status der Gruppen werden bei folgenden Events volständig übertragen:
- gemäß TX-Intervall eingestelltes Sendeintervall
- sofort bei Auftreten eines Events (Änderung eines Status an einem Pin)
Einbindung TabletUI mit lesbarem Status
In der 99_myUtils.pm ist folgender Eintrag einzubinden
##############################################
# Übersetzt den Status der
# SWAP Fensterkontakte in Klarnamen
# und Farbwerte für TabletUI
##############################################
sub
SWAP_WindowStateSensor($$$) {
my ($device, $reading, $value) = @_;
my $state = "??";
my $color = "";
my $group = 0;
$group = $reading;
$group =~ s/.*-Gruppe_(\d)*.*/$1/;
if ($value eq "00") {
$state = "closed";
$color = "#23a013";
} elsif ($value eq "01") {
$state = "tilted";
$color = "#f4d742";
} elsif ($value eq "02") {
$state = "open";
$color = "#F70A0A";
}
readingsBeginUpdate($defs{$device});
readingsBulkUpdate($defs{$device}, "Gruppe".$group, $state);
readingsBulkUpdate($defs{$device}, "Farbwert_Gruppe".$group, $color);
readingsEndUpdate($defs{$device}, 1);
return undef;
}
Anschließend folgenes Notify erstellt:
define NTFY_SWAP_Fensterstatus notify SWAP_.*:0D.*-Gruppe.* {SWAP_WindowStateSensor($NAME, $EVTPART0, $EVTPART1)} attr NTFY_SWAP_Fensterstatus DbLogExclude .* attr NTFY_SWAP_Fensterstatus room SWAP
Damit wird sowohl ein lesbarer Status als auch der in TabletUI anzuzeigende Farbwert gesetzt.
In TabletUI könnte dann zb. zusammen mit dem Rolladenstatus auch der Fensterstatus angeziegt werden. Im Platzhalter "par_SC_dev:par_SC_Reading" wird das Device als auch das Reading des Farbwertes gesetzt
<div data-type="circlemenu" data-direction="bottom-half" data-circle-radius="120" data-item-diameter="67"
style="font-size:130%;">
<ul>
<li>
<div data-type="symbol" data-device="par_RL_dev" data-get="level"
data-icons='["oa-fts_shutter_90","oa-fts_shutter_80","oa-fts_shutter_70","oa-fts_shutter_60","oa-fts_shutter_50",
"oa-fts_shutter_50","oa-fts_shutter_40","oa-fts_shutter_30","oa-fts_shutter_20",
"oa-fts_shutter_10","oa-fts_window_2w"]'
data-states='["0","10","20","30","40","50","60","70","80","90","100"]'
data-on-color="#2A2A2A"
data-on-background-color="par_SC_dev:par_SC_Reading"
data-off-background-color="par_SC_dev:par_SC_Reading"
data-background-icon="fa-circle">
</div>
</li>
<li> <div data-type="push" data-device="par_RL_dev" data-icon="oa-fts_shutter_up" data-set-on="on"></div></li>
<li> <div data-type="push" data-device="par_RL_dev" data-icon="oa-fts_window_1w_tilt" data-set-on="Lueftung"></div></li>
<li> <div data-type="push" data-device="par_RL_auto" data-icon="oa-fts_shutter_automatic" data-set-on="automatic"></div></li>
<li> <div data-type="push" data-device="par_RL_auto" data-icon="oa-fts_shutter_manual" data-set-on="manual"></div></li>
<li> <div data-type="push" data-device="par_RL_dev" data-icon="oa-fts_sunblind" data-set-on="Beschatten"></div></li>
<li> <div data-type="push" data-device="par_RL_dev" data-icon="oa-fts_shutter_down" data-set-on="off"></div></li>
</ul>
</div>
Weitere Hinweise
Keine.