Hallo Achim,
mal sehen ob ich das hinbekomme.
- Hardware besorgen:
- 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)
-
Bauteile einlöten (DHT22, Steckverbinder 2.54mm und Antennenbuchse s. Fotos)
-
aktuelle Arduino-IDE downloaden und installieren
-
panStamps über den panStick programmieren
- 1x panStamp mit „temphumpress“ für den Sendebaustein
- 1x panStamp mit dem Sketch „modem“ (für den panStick)
- 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:
- 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.
-
SerialPort für panStick anlegen und panStick anstecken
-
Cutter-Instanz anlegen
-
RegisterVariable anlegen und RegVar-Controller-Script verknüpfen
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.
Viele Grüße aus dem Unterallgäu
Harry