eDip-PHP-Hilfsklasse

Ich habe mal eine kleine Hilfsklasse für die eDip240 zusammengenagelt.

Die Klasse übernimmt die ausgehende Kommunikation zum eDip und kümmert sich im Prinzip um alles :D.

Benutzte das Teil für mein eDip (Bild unten angehängt). :loveips:

Hier mal ein Beispielcode:


// Klasse einbinden
require_once("edip.class.php");

/* Objektinstanz bauen
 * Man kann dem Objekt sowohl direkt eine Comport-Instanz geben
 * oder eine Registervariable.
 * Das Objekt unterscheidet das dann selbstständig
 */ 
$edip=new edip(55804 /*[edip Com Port]*/ );
// oder
//$edip=new edip(58522  /*[eDip\Register Variable]*/);

// Hier kann die Wartezeit zwischen den einzelnen Kommandos angegeben werden
$edip->send_delay=0;

// Und hier gehts auch schon los:
$edip->DL(); // Display leeren
$edip->YH(80); // helligkeit auf 80
$edip->RT(0,20,240,100,2); // einen Rahmen generieren

//Alle Kommandos können auch in einer Kette angegeben werden (PHP Method Chaining):
$edip->ZF(6)->ZV(3)->ZL(36,34,"~IPS~-eDIP-PHP|Klasse v0.8");

Es können ALLE Kommandos genutzt werden die auch im Datenblatt angegeben sind. (Eigentlich auch alle die da nicht drinstehen :p)

Ich weiss leider nicht mehr von wem hier aus dem Forum die Funktion „edip_send“ ist. Ich möchte aber zumindest darauf hinweisen das diese NICHT von mir ist! :wink:

Hier die Klasse:

<?
// Version 0.8
/*

Installation: Eine neue Scriptinstanz erstellen. Den Dateinamen (!!!) 
(nicht den Scriptnamen) dann auf "edip.class.php" setzen damit der Include funktioniert!

*/
class edip{

	var $_COMPORT=false;
	var $send_delay=0;
	var $_DEBUG=false;

	function edip($com_inst){
		$this->_COMPORT=$com_inst;
		$this->_getComType();
	}
	
	/**
	 * Funktionen für das eOnline-XBEE-eDip-Board
	 * HINWEIS: Bei mir (?) ist es so das die dritte LED auf Port 4 ist.
	 **/
	function led1($state=1){return $this->out(7,$state);}
	function led2($state=1){return $this->out(6,$state);}
	function led3($state=1){return $this->out(4,$state);}

	/**
	 * Setzt den Outputport $port auf den Status $state (0,1,2)
	 **/
	function out($port,$state=1){
		return $this->YW($port,$state);
	}

	/**
	 * PHP Magic ;)
	 **/
	function __call($method,$arguments){
	   foreach($arguments AS $ak=>$av)
	      $arguments[$ak]=(string)$av;
		$call="#".$method.implode(",",$arguments);
		$this->debug($call);
		$this->edip_send($call);
		return $this;
	}
	
	
    function edip_send($string){
    	
    //*********************************************************************
    // Sonderzeichen wandeln
    //*********************************************************************
        $string = str_replace("Ä","Ä",$string);
        $string = str_replace("ä","ä",$string);
        $string = str_replace("Ö","Ö",$string);
        $string = str_replace("ö","ö",$string);
        $string = str_replace("%F6","ö",$string);
        $string = str_replace("%FC","ü",$string);
        $string = str_replace("Ãœ","Ü",$string);
        $string = str_replace("ü","ü",$string);
        $string = str_replace("ß","ß",$string);
        $string = str_replace("Ä", "\x8E", $string);
        $string = str_replace("ä", "\x84", $string);
        $string = str_replace("Ö", "\x99", $string);
        $string = str_replace("ö", "\x94", $string);
        $string = str_replace("ü", "\x81", $string);
        $string = str_replace("Ü", "\x9A", $string);
        $string = str_replace("ß", "\xE1", $string);
        $string = str_replace(",", "\xFB", $string);   // Komma in Sonderzeichen


        $string = $string.chr(13); //`nen Abschlusszeichen ans Ende zufügen
        $string = chr(17).chr(strlen($string)).$string; //&lt;DC1&gt;=chr(17) und die Länge voranstellen
        $s1 = 0;
        for($i = 0; $i &lt; strlen($string); $i++){
				$s1 = $s1 + ord(substr($string, $i, 1));  // Prüfsumme Bilden... hierzu alle Byte Saldieren
			}
         $string .= chr($s1 % 256); // Modulo 256 der Summe aller Byte an den String hängen

			$this-&gt;_send($string);
    }

	/**
	 * Daten an eDIP senden
	 * Je nach Instanztyp (Serial oder RegisterVar)
	 **/
	function _send($data){
	   if($this-&gt;_COMINSTNAME=="Serial Port"){
        COMPort_SendText($this-&gt;_COMPORT,$data);
    	}elseif($this-&gt;_COMINSTNAME=="Register Variable"){
			RegVar_SendText($this-&gt;_COMPORT,$data);
		}
		
		ips_sleep($this-&gt;send_delay);
	}

	/**
	 *
	 **/
	function _getComType(){
      $instinfo		=IPS_GetInstance($this-&gt;_COMPORT);
      $insttypeid		=$instinfo['ModuleInfo']['ModuleID'];
		$insttypename	=$instinfo['ModuleInfo']['ModuleName'];
		$this-&gt;_COMINSTNAME=$insttypename;
	}
	
	
	function debug($text){
		if($this-&gt;_DEBUG)
		   echo $text."
";
	}
}
?&gt;