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).
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!
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; //<DC1>=chr(17) und die Länge voranstellen
$s1 = 0;
for($i = 0; $i < 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->_send($string);
}
/**
* Daten an eDIP senden
* Je nach Instanztyp (Serial oder RegisterVar)
**/
function _send($data){
if($this->_COMINSTNAME=="Serial Port"){
COMPort_SendText($this->_COMPORT,$data);
}elseif($this->_COMINSTNAME=="Register Variable"){
RegVar_SendText($this->_COMPORT,$data);
}
ips_sleep($this->send_delay);
}
/**
*
**/
function _getComType(){
$instinfo =IPS_GetInstance($this->_COMPORT);
$insttypeid =$instinfo['ModuleInfo']['ModuleID'];
$insttypename =$instinfo['ModuleInfo']['ModuleName'];
$this->_COMINSTNAME=$insttypename;
}
function debug($text){
if($this->_DEBUG)
echo $text."
";
}
}
?>