Temperatur und Luftfeuchtigkeit über panStamp

Hallo zusammen,

nachdem ich länger ein Funksystem zur Messung von Temperatur und Luftfeuchtigkeit in jedem Raum des Hauses gesucht habe und auch einige Systeme getestet habe (USB-WDE, IPWE-1, Telefunken Joonior, CONRAD), bin ich nun fündig geworden. Natürlich ist die einfache Anbindung an IPS ebenso ein Kriterium wie die Abdeckung des ganzen Hauses.
Bild3.jpg

Ich nutze nun je Raum ein Batteryboard mit einer panStamp und einem DHT22-Sensor.

Als Empänger dient eine panStamp im panStick an einem USB-Port meines IP-Symcon-Rechners.

Die Anbindung an IPS erfolgt über einen seriellen Port mit Cutter-Instanz und Registervariable. Das Controller-Script der RegVar wertet das SWAP-Protokoll der panStamps aus und ermittelt so Temperatur und Luftfeuchte. Gesendet wird alle 15 Minuten und im Endausbau soll es 16 Sender geben.

Programmiert werden die Sender mit der Arduino-IDE und einem Sketch namens „temphumpress“. Im Stick läuft der „modem“-Sketch.

Hat jemand auch schon mit den panStamps gearbeitet und Erfahrungen gesammelt?

Viele Grüße aus dem Unterallgäu
Harry

Hallo Harry
Sieht sehr interessant aus.
Würdest du eine kleine Anleitung und sript schnippsel veröffentlichen.
Würde das gerne mal ausprobieren. Gruß Achim

Hallo Achim,

mal sehen ob ich das hinbekomme.

  1. Hardware besorgen:
  • 1x panStick
  • 2x panStamp
  • 1x Batteryboard
  • 1x DHT22 (gibt es nicht bei panStamp)
  • ausreichend Rasterpins 2.54 mm
  • evt. 2x SMA-Buchse für Antenne (falls keine Drahtantenne)
  • dazu 2x Antenne (falls keine Drahtantenne)
  • evt. 1x Gehäuse
  1. Bauteile einlöten (DHT22, Steckverbinder 2.54mm und Antennenbuchse s. Fotos)

  2. aktuelle Arduino-IDE downloaden und installieren

  3. panStamps über den panStick programmieren

  • 1x panStamp mit „temphumpress“ für den Sendebaustein
  • 1x panStamp mit dem Sketch „modem“ (für den panStick)
  1. in der Arduino-IDE über den seriellen Monitor testen ob am panStick (mit panStamp „modem“) Daten vom Batteryboard ankommen (Reset-Knopf drücken).

Wenn das soweit passt geht es nun zu IP-Symcon:

  1. Die Variablen für die panStamps anlegen

Die IDs habe ich in einem Array $panStamp angelegt

<?
// hier kein INCLUDE

// globale Klima-Funktionen


/* IDs aller panStamps */
//                      Raum                              Nummer      Dummy-Modul        Adresse         Intervall        Temperatur       Luftfeuchte      Batterie         zuletzt ausgelesen Icon                       tmin          tmax          hmin          hmax
$panStamp['C0'] = array('room' => 'HWR'                 , 'nr' =>  0, 'parent' => 11913, 'adr' => 48132, 'time' => 17023, 'temp' => 29702, 'humi' => 14980, 'batt' => 36083, 'update' => 31560, 'icon' => 'Waschmaschine', 'tmin' => 15, 'tmax' => 25, 'hmin' => 30, 'hmax' => 65); // panStamp Sensor  1 HWR
$panStamp['C1'] = array('room' => 'Modellbahnkeller'    , 'nr' =>  1, 'parent' => 12544, 'adr' => 15816, 'time' => 48168, 'temp' => 13349, 'humi' => 41628, 'batt' => 34716, 'update' => 19284, 'icon' => 'Lok'          , 'tmin' => 15, 'tmax' => 27, 'hmin' => 30, 'hmax' => 60); // panStamp Sensor  2 Modellbahn
$panStamp['C2'] = array('room' => 'Heizungsraum'        , 'nr' =>  2, 'parent' => 39239, 'adr' => 38280, 'time' => 41317, 'temp' => 58207, 'humi' => 36590, 'batt' => 41136, 'update' => 48043, 'icon' => 'Heizung'      , 'tmin' => 15, 'tmax' => 27, 'hmin' => 30, 'hmax' => 60); // panStamp Sensor  3 Heizungskeller
$panStamp['C3'] = array('room' => 'Vorratskeller'       , 'nr' =>  3, 'parent' => 50797, 'adr' => 24394, 'time' => 35440, 'temp' => 30550, 'humi' => 59325, 'batt' => 38434, 'update' => 34125, 'icon' => 'Vorratskeller', 'tmin' => 15, 'tmax' => 25, 'hmin' => 30, 'hmax' => 60); // panStamp Sensor  4 Vorratskeller
$panStamp['C4'] = array('room' => 'Werkstatt'           , 'nr' =>  4, 'parent' => 28039, 'adr' => 47497, 'time' => 19145, 'temp' => 51531, 'humi' => 29968, 'batt' => 13518, 'update' => 32049, 'icon' => 'Werkzeug'     , 'tmin' => 15, 'tmax' => 25, 'hmin' => 30, 'hmax' => 60); // panStamp Sensor  5 Werkstatt
$panStamp['C5'] = array('room' => 'Wohnzimmer'          , 'nr' =>  5, 'parent' => 20190, 'adr' => 56639, 'time' => 25771, 'temp' => 56592, 'humi' => 19943, 'batt' => 55818, 'update' => 55177, 'icon' => 'Couch'        , 'tmin' => 15, 'tmax' => 25, 'hmin' => 30, 'hmax' => 60); // panStamp Sensor  6 Wohnzimmer
$panStamp['C6'] = array('room' => 'Esszimmer'           , 'nr' =>  6, 'parent' => 10477, 'adr' => 25628, 'time' => 26929, 'temp' => 23803, 'humi' => 54578, 'batt' => 57229, 'update' => 57240, 'icon' => 'Essen'        , 'tmin' => 15, 'tmax' => 25, 'hmin' => 30, 'hmax' => 60); // panStamp Sensor  7 Esszimmer
$panStamp['C7'] = array('room' => 'Küche'               , 'nr' =>  7, 'parent' => 29794, 'adr' => 36359, 'time' => 12792, 'temp' => 41671, 'humi' => 19736, 'batt' => 10269, 'update' => 51330, 'icon' => 'Kochtopf'     , 'tmin' => 15, 'tmax' => 25, 'hmin' => 30, 'hmax' => 60); // panStamp Sensor  8 Küche
$panStamp['C8'] = array('room' => 'Toilette'            , 'nr' =>  8, 'parent' => 55614, 'adr' => 28311, 'time' => 12279, 'temp' => 16035, 'humi' => 12280, 'batt' => 14455, 'update' => 12704, 'icon' => 'Toilette'     , 'tmin' => 15, 'tmax' => 25, 'hmin' => 30, 'hmax' => 60); // panStamp Sensor  9 Toilette
$panStamp['C9'] = array('room' => 'Diele'               , 'nr' =>  9, 'parent' => 18161, 'adr' => 13475, 'time' => 30444, 'temp' => 10013, 'humi' => 33408, 'batt' => 57274, 'update' => 37952, 'icon' => 'Garderobe2'   , 'tmin' => 15, 'tmax' => 25, 'hmin' => 30, 'hmax' => 60); // panStamp Sensor 10 Diele
$panStamp['CA'] = array('room' => 'Treppenhaus'         , 'nr' => 10, 'parent' => 14877, 'adr' => 35349, 'time' => 27407, 'temp' => 42322, 'humi' => 14161, 'batt' => 26188, 'update' => 41396, 'icon' => 'Treppenhaus'  , 'tmin' => 15, 'tmax' => 25, 'hmin' => 30, 'hmax' => 60); // panStamp Sensor 11 Treppenhaus
$panStamp['CB'] = array('room' => 'Badezimmer'          , 'nr' => 11, 'parent' => 36394, 'adr' => 29133, 'time' => 59988, 'temp' => 38731, 'humi' => 15287, 'batt' => 54110, 'update' => 59691, 'icon' => 'Badezimmer'   , 'tmin' => 15, 'tmax' => 25, 'hmin' => 30, 'hmax' => 60); // panStamp Sensor 12 Badezimmer
$panStamp['CC'] = array('room' => 'Schlafzimmer'        , 'nr' => 12, 'parent' => 59574, 'adr' => 52098, 'time' => 21684, 'temp' => 25888, 'humi' => 13838, 'batt' => 31368, 'update' => 27190, 'icon' => 'Bett1'        , 'tmin' => 15, 'tmax' => 25, 'hmin' => 30, 'hmax' => 60); // panStamp Sensor 13 Schlafzimmer
$panStamp['CD'] = array('room' => 'Dachboden'           , 'nr' => 15, 'parent' => 49674, 'adr' => 52345, 'time' => 25980, 'temp' => 19002, 'humi' => 23901, 'batt' => 56746, 'update' => 26386, 'icon' => 'Bett2'        , 'tmin' => 15, 'tmax' => 27, 'hmin' => 25, 'hmax' => 60); // panStamp Sensor 16 Dachboden

?>

Als nächsten Schritt das Script für die Registervariable:

<?
// Auswerte-Script für die Register Variable panStick

// globale Klima-Funktionen einbinden
// hier sind die panStamp-Variablen im Array $panStamp definiert
include('16321.ips.php');

global $panStamp;

// wer hat das Script aufgerufen?
switch ($_IPS['SENDER']) {
	case "Execute":   // direkter Start des Script
		// panStamp-Array ausgeben
		print_r($panStamp);
		break;
	case "RegisterVariable":   // Auswerten der panStamp Register Variable

		$buf = $_IPS['VALUE'];
		$timestamp = strftime('%d.%m.%y  %H:%M:%S' ,time());

		if (strlen($buf) == 22) {
			$adr = substr($buf, 16, 2);
			$reg = substr($buf, 18, 2);
			if ($reg == '03') {	// ???
				$data1 = substr($buf, 20, 2);
				break;
			}
			if ($reg == '09') {	// Device Address
				$data1 = substr($buf, 20, 2);
				break;
			}
			break;
		}
		if (strlen($buf) == 24) {
			$adr = substr($buf, 16, 2);
			$reg = substr($buf, 18, 2);
			if ($reg == '0A') {	// Periodic Tx interval
				$data1 = substr($buf, 20, 4);
				$time = (float)((256 * hexdec(substr($data1, 0, 2)) + hexdec(substr($data1, 2, 2))));
				// Wegschreiben des Wertes 
				SetValueInteger($panStamp[$adr]['time'], $time);
				break;
			}
			if ($reg == '0B') {	// Battery Voltage
				$data1 = substr($buf, 20, 4);
				$batt = (float)((256 * hexdec(substr($data1, 0, 2)) + hexdec(substr($data1, 2, 2))) / 1000);
				// Wegschreiben des Wertes 
				SetValueFloat($panStamp[$adr]['batt'], $batt);
				break;
			}
			break;
		}
		if (strlen($buf) == 28) {
			$adr = substr($buf, 16, 2);
			$reg = substr($buf, 18, 2);
			if ($reg == '0C') { // Temperatur & Luftfeuchte
				$data1 = substr($buf, 20, 4);
				$data2 = substr($buf, 24, 4);
				$temp = (float)((256 * hexdec(substr($data1, 0, 2)) + hexdec(substr($data1, 2, 2)) - 500) / 10);
				$humi = (float)((256 * hexdec(substr($data2, 0, 2)) + hexdec(substr($data2, 2, 2))) / 10);
				// Wegschreiben der Werte 
				SetValueFloat($panStamp[$adr]['temp'], $temp);
				SetValueFloat($panStamp[$adr]['humi'], $humi);
				SetValueString($panStamp[$adr]['update'], $timestamp);
				break;
			}
			break;
		}
		}
		// bei unbekannter Buffer-Länge wird ins Meldungen-Fenster gedruckt
		echo "
***" . $buf . " LEN=" . strlen($buf) . "***
";;
		break;
	case "TimerEvent":
		break;
	case "Variable":
		break;
	case "WebFront":
		break;
}
?>

Natürlich musst Du alle IDs auf Deine Umgebung anpassen.

  1. SerialPort für panStick anlegen und panStick anstecken
    Bild5.jpg

  2. Cutter-Instanz anlegen

  3. RegisterVariable anlegen und RegVar-Controller-Script verknüpfen
    Bild7.jpg

Nun sollte es so aussehen:

Die Hardware überprüfst Du jeweils mit der Debug-Funktion in den Instanzen, um zu sehen ob überhaupt Daten ankommen.

Im RegVar-Controller lassen sich echos zur Ausgabe von Variablen-Werten einbauen. Wenn man im Meldungsfenster den Filter „Reg“ setzt, sieht man ganz gut was das Script tut.

Auf der panStamp (Sender) den Reset-Knopf drücken und schon sollten Daten in IP-Symcon landen.

Das war jetzt als Gedächtnisprotokoll meine Vorgehensweise. Der Rest ist ausprobieren und Doku lesen. :wink:

Viele Grüße aus dem Unterallgäu
Harry

Etwas offTopic, aber dennoch: was kostet da ein Sensor insgesamt? Laufen die mit Batterien oder brauchts da ein Netzteil?
Suche schon länger nach Alternativen zu IPWE-1. DA hab ich derzeit 8 Sensoren am Start. Das läuft auch einwandfrei seit Jahren…aber es gehen halt nur 8 Sensoren. :frowning:

Gruss
Chris

Hallo Harry
Vielen lieben Dank für die umfangreiche Beschreibung. Ich werde die Sachen mal bestellen und durch kämpfen :). Mal schauen wie ich klar komme.

Gruß Achim

gesendet vom Handy

Hallo Chris,

die Preise gibt es auch auf den panStamp-Internetseiten bzw. dem verlinkten Webshop. Die Artikel kommen aus Spanien, aber der Emailkontakt und der Support sind vorbildlich.

Der Preis hängt von der Austattung aus: ob mit Drahtantenne oder Knick-Modell mit SMA-Buchse (s. Zubehör/Accessories), ob mit oder ohne Gehäuse fürs Batteryboard, usw.
ACHTUNG: Bei der Kalkulation den DHT22 nicht vergessen, der ist auf dem Batteryboard noch nicht drauf - meiner ist von Watterott.

Betrieben wird der Sender-Baustein mit einer Batterie AA (s. Foto). Wie lange die Batterien halten, kann ich noch nicht sagen, da in meinen Sendern noch jeweils die ersten Batterien drin sind.

Sicher sind die Sensoren nicht so günstig wie die von E** oder vom großen C. Aber für mich ist entscheidend, dass man die Firmware selbst im Griff hat, die DHT22 sehr präzise sind und insgesamt mehr als 8 Kanäle möglich sind.

Mit dem IPWE1 habe ich auch experimentiert, aber das Interface stürzte ständig ab. Nach zwei Reparaturversuchen hat E** das Gerät „kulanterweise“ zurückgenommen, allerdings mit dem schriftlichen Hinweis in Zukunft keine Bausätze mehr zu kaufen. Für mich ist eine solche Ansage der Hammer. Ich bin E**-Kunde von Anfang an, habe das Journal seit Nr. 1 und fast 40 Jahre Erfahrung im Löten und Aufbauen von Schaltungen. Seither kaufe ich bei E** nur noch, wenn es sich absolut nicht vermeiden läßt, denn für mich persönlich ist ein solcher Umgang mit dem Kunden nicht akzeptabel.

Doch zurück zu den panStamps: Aktuell habe ich 5 Sender im Einsatz und weitere 3 bestellt. Je nach Hobby-Budget werde ich bis Jahresende auf 16-18 Stück ausbauen. Da auch mein USB-WDE (bzw. wg. Empfangsproblemen zwei Empfänger) nur 8 Kanäle unterstützen konnte und die Funkabdeckung der panStamps im Haus sehr gut ist bin ich umgestiegen. Über die Device-Adresse (ein 2-Byte-Hex-Wert) habe ich mein Parameter-Array indiziert, daher „C0“ bis „CD“ als ID (=Device-Adresse) für die Sendebausteine.

Die panStamps werden auch von FHEM mit dem SWAP-Modul und Autodetect sehr gut unterstützt. Mit FHEM auf einem Raspberry Pi habe ich die Technik vor der Anbindung an IPS getestet und auch die Device-Adressen gesetzt. Mittlerweile setze ich die Sender-Adresse direkt im Arduino-Sketch beim Programmieren der panStamps.

Viele Grüße aus dem Unterallgäu
Harry

Hallo Harry,

ich bin gerade über deinen panStamp Beitrag gestolpert.
Mittlerweile sind ja seit dem ersten Einsatz ca. 1 Jahr vergangen.

Wie sind den jetzt die Erfahrungen zur Batterielebensdauer?

Gab es sonst in der Zwischenzeit irgendwelche Probleme?

Gruss
Michael

Hallo Michael,

ich habe 19 PanStamps im Einsatz und bin voll zufrieden. Vor 2 Wochen habe ich das neue RaspiShield gekauft, auch das funktioniert prima.

Die Batterien halten unterschiedlich lange, aber ich kann im Detail nicht sagen wie lange ein neue Batterie hält. Bei einigen ist noch die erste Batterie drin. Die Empfangsbedingungen sind unterschiedlich, aber insgesamt auch in Ordnung. Ich denke bei 19 Stück gibt es im 900 Sekunden-Fenster ab und an Überschneidungen.

Bei einigen Batteryboards ist die Status-LED abgefallen, aber das stört nicht, da sie von außen nicht sichtbar ist. Sonst gibt es keine Probleme.

Abschließend ist mein Urteil nur positiv. Ich würde das ganze wieder so machen und kann die PanStamps durchweg empfehlen.

Viele Grüße aus dem Unterallgäu
Harry

Wollte gerade mal mein erstes PanStamp Set bestellen (USB Variante + Sensor für TEmp Messung mit Batteriebord).

Ähm, gibt wohl schon neuere Varianten.

Bis Montag gibt’s 15% im PanStamp Onlineshop, daher die Frage wäre auch das richtig?

Scheinbar gibt’s da jetzt Platinchen mit bereits integriertem Temp bzw. Temp + Feuchtesensor, den man mit Batterie betreiben kann? (die heissen dann Minibat)

Gateway + Programmierer:
panStick 4.0 USB

Minibat SI7021 Temp + Feuchte für 10€
AA Batteriebox
Gehäuse
SMA Anschluss + Antenne

Wäre das jetzt richtig, oder hab ich was vergessen oder falsch verstanden?

Hallo Michael,

das scheint von der Zusammenstellung zu passen.

Viele Grüße aus dem Unterallgäu
Harry