TCM120 und PTM200

Hallo,

ich musste von IPS auch vom TCM120 Tasten Doppelbelegungen senden können, daher habe ich mir was gebaut :


<?
/*
  sync1       = e_byte1
  sync0       = e_byte2
  h_seq+länge = e_byte3
  org         = e_byte4 = Welcher Sensor Tasten =05
  data[3]     = e_byte5                  Tasten in DEZ 48-112-16-80-55-21-53-23
  data[2]     = e_byte6
  data[1]     = e_byte7
  data[0]     = e_byte8
  id[3]       = e_byte9
  id[2]       = e_byte10
  id[1]       = e_byte11
  id[0]       = e_byte12 = geraeteid 0-255 (00-FF)
  status      = e_byte13 = Taste gedrückt=48 - Taste Los=32 'Enocean Status gedrückt hex 30
  checksum    = e_byte14 = Prüfsumme von e_byte(3 - 13) letztes niederwertige byte aus der Addition
*/
function TCMsenden($org,$data3,$data2,$data1,$data0,$geraeteid,$status)
{
	$e_byte1= "A5";$e_byte2= "5A";$e_byte3= "6b";

	$e_byte4= $org;
	$e_byte5= $data3; //Taster Nr   // Taste5-8 = 37 15 35 17 !
	$e_byte6= $data2;$e_byte7= $data1;$e_byte8= $data0;
	$e_byte13= $status;// Taste gedrückt ?

	// ID vom TCM120 holen
	$baseid = GetValueString(36583 /*[EnOcean Gateway\BaseID]*/);  //[EnOcean Gateway\BaseID]
	//print ($baseid.chr(10));
	$e_byte9 = substr($baseid, -8, 2);
	$e_byte10 = substr($baseid, -6, 2);
	$e_byte11 = substr($baseid, -4, 2);
//	$e_byte12 = substr($baseid, -2, 2);
   $e_byte12 = $geraeteid;

	$e_crc = (hexdec($e_byte3)) + (hexdec($e_byte4)) + (hexdec($e_byte5)) + (hexdec($e_byte6))+ (hexdec($e_byte7))+ (hexdec($e_byte8))+ (hexdec($e_byte9))+ (hexdec($e_byte10))+ (hexdec($e_byte11))+ (hexdec($e_byte12))+ (hexdec($e_byte13));
	$lb = $e_crc&255;
	$lb = str_pad($lb, 3 ,'0', STR_PAD_LEFT);
	$e_crc2 = dechex ($lb );
	$e_byte14= $e_crc2; //Prüfsumme

	$str = "".$e_byte1."".$e_byte2."".$e_byte3."".$e_byte4."".$e_byte5."".$e_byte6."".$e_byte7."".$e_byte8."".$e_byte9."".$e_byte10."".$e_byte11."".$e_byte12."".$e_byte13."".$e_byte14;
	$string='';
	for ($i=0; $i < strlen($str)-1; $i+=2)
	{
	  $string .= chr(hexdec($str[$i].$str[$i+1]));
	}

	$str=$string;
	//		print ($str);
	COMPort_SendText (28271 /*[Serial Port]*/,$str);
}

?>

Aufruf erfolgt von einem anderen Skript , hier Taste A+C:


<?
include IPS_GetKernelDir().'scripts/10670.ips.php';
// TCMsenden($org,$data3,$data2,$data1,$data0,$geraetid,$status)
TCMsenden("05","37","00","00","00","00","30"); 
IPS_Sleep(500); //Warten
TCMsenden("05","00","00","00","00","00","20"); 
?>

In $data 3 steht der TastenCode in hex für die 8 Tasten des PTM200 : 70,50,30,10,37,15, (+ über Kreuz 35 und 17)
In $geraetid übergebe ich einen Wert von 00 bis FF für 255 Geräte (Taster).
Prüfsumme wird auch berechnet, und in $byte14 übergeben.

Somit sollte es auch möglich sein, an andere enocean Geräte die es in IPS noch nicht gibt, zu senden.
Ich habe das für einen enocean Gerät gemacht, welches über die PTM200 Tasten gesteuert wird, und über die Doppelbelegung ein/aus geschaltet wird.

Das ganze laüft bei mir, nur auf einem Raspberry IPS, Windows IPS nicht vorhanden.