Michscript V1 zu V2 eDIP => Chromoflex

Ich habe hier mal ein Script, allerdings nur für die Ediper.

Chromoflex.

Es soll nur mal den Unterscheid zeigen von normalen Variablen von V1 zur Übernahme Variablen mit ID und Name Variable V2.

Das Script ist nur Demo, es funktioniert allerdings auch problemlos.

Daher sind auch einige Variablen schon mit automaticher Textübernahme und die anderen noch mit alter Manier von V1.

Erweiterungen sind hier, Übernahme der Bargraphanzeige nach verlassen eines Meues im eDip, sowie direkte Anzeige der Farbwerte.

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : Chromoflex.ips.php
Trigger1 : Dateneingang
Interval : Bei Variablenaktualisierung
Trigger2 : Chromoflex
Interval : Bei Variablenänderung
*/

// Schaltzustand abfragen ob eDip in Chromoflex Steuerung ist
$Zustand = GetValueBoolean(42583 /*[eDIP\Chromoflex]*/);

//wenn Schaltzustand false, Script verlassen(beenden)
if ($Zustand == false)
return;

$Edip       = 42295 /*[eDIP]*/;
$Xbee       = 35024 /*[Chromoflex]*/;           // InstanceID Xbee/Comport

$Chromoflex = GetValueString(46610 /*[eDIP\Dateneingang]*/);   // Datenstring auslesen

// Daten aus empfangenem String extrahieren, Zuweisung der einzelnen Bytes
$Graph       = String2Value($Chromoflex,3,1);
$DatenGraph  = String2Value($Chromoflex,4,1);

$Startbyte   = "\xCA";          // StartByte (Muss nicht verändert werden)
$Adresse     = "\x00\x00\x00";  // Adresse 0,0,0 = Broadcast
$GraphRot    = 1;               // BarGraph 1 Rot
$GraphGruen  = 2;               // BarGraph 2 Gruen
$GraphBlau   = 3;               // BarGraph 3 Blau
$Helligkeit  = 4;               // BarGraph 4 Dimmer


switch ($Chromoflex)
{
// Nach Reset startet das Default Programm
case "Reset":   // Reset
 Reseten();     // Funktion aufrufen
 //return;
break;

case "ChromoflexAus":  // Chromoflex ausschalten(Standby) alle Werte auf 0
 SetValueInteger(40117 /*[Lichtsteuerung\Chromoflex\Rot]*/, 0);
 SetValueInteger(37375 /*[Lichtsteuerung\Chromoflex\Gruen]*/, 0);
 SetValueInteger(31672 /*[Lichtsteuerung\Chromoflex\Blau]*/, 0);
break;

// Programmnummer aufrufen 0-7 und 9. Es erfolgt erst ein Reset,
// danach wird das Programm mit einer kleinen Verzögerung aufgerufen, diese muss sein, sonst startet das Programm nicht.
// Programm = 200+3*Programmnummer. Hier als Beispiel Nr.3, 200 + 3 * 3 = 209 entspricht 0xD1

case "PrgAus":
 Reseten();        // Funktion aufrufen
 IPS_Sleep(1000);  // 1000ms warten, ansonsten starten die Programme nicht(Timing)
 $cmd = chr(0).chr(3).chr(0x7D).chr(0x15).chr(0).chr(0xD1); //Programm. 0xD1 startet Programm 3
 $txt = $Adresse.$cmd;
 $crc = CRC16r($Startbyte.$txt);
 $txt = str_replace(chr(0xCB), chr(0xCB).chr(0x01), $txt);
 $txt = str_replace(chr(0xCA), chr(0xCB).chr(0x00), $txt);
 COMPort_SendText(35024 /*[Chromoflex]*/, $Startbyte.$txt.$crc);
 return;
break;
}

// Werte BarGraph abspeichern 0-100%
if ($GraphRot == $Graph)
  {
  SetValueInteger(40117 /*[Lichtsteuerung\Chromoflex\Rot]*/, $DatenGraph);
  }
  if ($GraphGruen == $Graph)
    {
    SetValueInteger(37375 /*[Lichtsteuerung\Chromoflex\Gruen]*/, $DatenGraph);
    }
    if ($GraphBlau == $Graph)
      {
      SetValueInteger(31672 /*[Lichtsteuerung\Chromoflex\Blau]*/, $DatenGraph);
      }
       if($Helligkeit == $Graph)
       {
       SetValueInteger("Dimmer", $DatenGraph);
       }
       
// Eingangswerte in % 0-100 holen und umrechnen auf Farbwerte max 255
$Rot = GetValueInteger("Rot"); // Wert einlesen
COMPort_SendText(42295 /*[eDIP]*/, chr(27)."BA".chr(1).chr($Rot)); // Bargraphwert in % nach eDIP senden
if ($Rot == 1) {
SetValueInteger("Rot", 0); }
else {
$Rot = $Rot*2.55; // Umrechnug von % nach Farbwert
SetValueInteger("FarbwertRot", $Rot); // Farbwert abspeichern
}
$FWR = GetValueInteger("FarbwertRot"); // Farbwert für eDIP einlesen
if ($FWR <= 99) {  // Wert unter Hundert, letzte Stelle überschreiben
COMPort_SendText(42295 /*[eDIP]*/, chr(27)."ZL".chr(20).chr(16)." ".chr(0));
}
if ($FWR <= 9) {   // Wert unter Zehn, letzte Stelle überschreiben
COMPort_SendText(42295 /*[eDIP]*/, chr(27)."ZL".chr(14).chr(16)." ".chr(0));
}
COMPort_SendText($Edip, chr(27)."ZL".chr(9).chr(16)."$FWR".chr(0)); // Farbwert nach eDIP senden


$Gruen = GetValueInteger("Gruen");
COMPort_SendText($Edip, chr(27)."BA".chr(2).chr($Gruen));
if ($Gruen == 1) {
SetValueInteger("Gruen", 0); }
else {
$Gruen = $Gruen*2.55;
SetValueInteger("FarbwertGruen", $Gruen);
}
$FWG = GetValueInteger("FarbwertGruen");
if ($FWG <= 99) {
COMPort_SendText($Edip, chr(27)."ZL".chr(46).chr(16)." ".chr(0));
}
if ($FWG <= 9) {
COMPort_SendText($Edip, chr(27)."ZL".chr(40).chr(16)." ".chr(0));
}
COMPort_SendText($Edip, chr(27)."ZL".chr(34).chr(16)."$FWG".chr(0));


$Blau = GetValueInteger("Blau");
COMPort_SendText($Edip, chr(27)."BA".chr(3).chr($Blau));
if ($Blau == 1) {
SetValueInteger("Blau", 0); }
else {
$Blau = $Blau*2.55;
SetValueInteger("FarbwertBlau", $Blau);
}
$FWB  = GetValueInteger("FarbwertBlau");
if ($FWB <= 99) {
COMPort_SendText($Edip, chr(27)."ZL".chr(71).chr(16)." ".chr(0));
}
if ($FWB <= 9) {
COMPort_SendText($Edip, chr(27)."ZL".chr(65).chr(16)." ".chr(0));
}
COMPort_SendText($Edip, chr(27)."ZL".chr(59).chr(16)."$FWB".chr(0));


// Dimmereingang von 0-100%
$Dimmer = GetValueInteger("Dimmer");


// Status setzen
$cmd = chr(0).chr(2).chr(0x7E).chr(0x12).chr(0x01);
$txt = $Adresse.$cmd;
$crc = CRC16r($Startbyte.$txt);
$txt = str_replace(chr(0xCB), chr(0xCB).chr(0x01), $txt);
$txt = str_replace(chr(0xCA), chr(0xCB).chr(0x00), $txt);
COMPort_SendText($Xbee, $Startbyte.$txt.$crc);

/*
// Track setzen
$cmd = chr(0).chr(3).chr(0x7E).chr(0x11).chr(0x01).chr(0x01);
$txt = $Adresse.$cmd;
$crc = CRC16r($Startbyte.$txt);
$txt = str_replace(chr(0xCB), chr(0xCB).chr(0x01), $txt);
$txt = str_replace(chr(0xCA), chr(0xCB).chr(0x00), $txt);
COMPort_SendText($Xbee, $Startbyte.$txt.$crc);


//INKREMENTIERUNG FESTLEGEN -> 255 = sofort, 1 = 2,55ms für Änderungen von 0 auf 255
define('Rot',   255);
define('Gruen', 255);
define('Blau',  255);
$cmd = chr(0).chr(5).chr(0x7E).chr(8).chr(Rot).chr(Gruen).chr(Blau).chr(0x64);
$txt = $Adresse.$cmd;
$crc = CRC16r($Startbyte.$txt);
$txt = str_replace(chr(0xCB), chr(0xCB).chr(0x01), $txt);
$txt = str_replace(chr(0xCA), chr(0xCB).chr(0x00), $txt);
COMPort_SendText($Xbee, $Startbyte.$txt.$crc);
*/

//Farben setzen ==> Set
$cmd = chr(0).chr(5).chr(0x7E).chr(4).chr($Rot).chr($Gruen).chr($Blau).chr($Dimmer);
$txt = $Adresse.$cmd;
$crc = CRC16r($Startbyte.$txt);
$txt = str_replace(chr(0xCB), chr(0xCB).chr(0x01), $txt);
$txt = str_replace(chr(0xCA), chr(0xCB).chr(0x00), $txt);
COMPort_SendText($Xbee, $Startbyte.$txt.$crc);

//Level setzen
$cmd = chr(0).chr(5).chr(0x7E).chr(0).chr($Rot).chr($Gruen).chr($Blau).chr($Dimmer);
$txt = $Adresse.$cmd;
$crc = CRC16r($Startbyte.$txt);
$txt = str_replace(chr(0xCB), chr(0xCB).chr(0x01), $txt);
$txt = str_replace(chr(0xCA), chr(0xCB).chr(0x00), $txt);
COMPort_SendText($Xbee, $Startbyte.$txt.$crc);


// Funktion zur Checksummenberechnung von HJH
function CRC16r($s)       // CRC16 reverse
{
 $CRCreg = 0xffff << 1;   // Startwert
 $PLYreg = 0xA001 << 1;   // Polynom
 $len = strlen($s);

 for ($cp=0; $cp<$len; $cp++)
 {
  $CRCreg ^= ord($s[$cp]) << 1;
  for ($bp=0; $bp<8; $bp++)
  {
   $CRCreg >>= 1;
   if ($CRCreg & 0x01) $CRCreg ^= $PLYreg;
  }
 }
 $crc = $CRCreg >> 1;
 $crcLo = $crc & 0xff;
 $crcHi = $crc >> 8;
 return chr($crcHi). chr($crcLo);
}

// Funktion zur Umwandlung eines Teil eines String in eine Zahl, Zählung beginnt bei Null
function String2Value($str, $p, $c) // String, Position, Anzahl Characters
{
 $val = 0;
 for ($i=0; $i<$c; $i++)
 {
  $val <<= 8;
  $val += ord($str[$p+$i]);
 }
 return $val; // Rückgabe: Zahl
}

// Funktion Reseten
function Reseten()
{
 SetValueInteger(26286 /*[Lichtsteuerung\Chromoflex\FarbwertRot]*/, 0);
 SetValueInteger(24058 /*[Lichtsteuerung\Chromoflex\FarbwertGruen]*/, 0);
 SetValueInteger(17343 /*[Lichtsteuerung\Chromoflex\FarbwertBlau]*/, 0);
 SetValueInteger(40117 /*[Lichtsteuerung\Chromoflex\Rot]*/, 0);
 SetValueInteger(37375 /*[Lichtsteuerung\Chromoflex\Gruen]*/, 0);
 SetValueInteger(31672 /*[Lichtsteuerung\Chromoflex\Blau]*/, 0);
 $cmd = chr(0).chr(0).chr(0xFE);
 $txt = "\x00\x00\x00".$cmd;
 $crc = CRC16r("\xCA".$txt);
 $txt = str_replace(chr(0xCB), chr(0xCB).chr(0x01), $txt);
 $txt = str_replace(chr(0xCA), chr(0xCB).chr(0x00), $txt);
 COMPort_SendText(35024 /*[Chromoflex]*/, "\xCA".$txt.$crc);
}

?>