1-Wire mit LinkTH Seriell Adapter

Hier mal eine Auswertung des oben genannten Adapter.

Der Adapter hat den Vorteil, dass keine Treiber Installation benötigt wird.

Es gibt dafür diverse fertige MS Sensoren. Der Adapter wird über einfache ASCII Kommandos programmiert. Die Daten werden in einem einstellbaren Intervall direkt vom Adapter abgefragt, IPS muss nicht pollen.

Hier mal das Script mit meinen Testadaptern und Bildern zur Einrichtung.

<?
/*
********************** LinkTH Commands ****************************
ASCII Kommandos zum konfigurieren des Adapter.

A=Set AutoReport Period (P) (D=2 minutes)
B=AutoReport On (P)                 b=AutoReport OFF (P)(D)
C=Set TOD Clock (HH:MM:SS.T)        c=Adjust TOD clock rate (+-)
D=Report ALL LinkTH data            d=Reset to factory defaults
E=Echo On (P)                       e=Echo Off (P)(D)
 =Report LinkTH Version             h=Help (This command)
I=Report Sensor Inventory           i=Report Sensor Inventory with Locate
K=Set Sensor Tuning Knob            k=Report Sensor Tuning Knob
R=Report Sensor (OW address)
S=AutoReport Time Stamp On (P)      s=AutoReport Time Stamp Off (P)(D)
T=Report Time of Day
W=Write LinkTH EEPROM page          w=Report LinkTH EEPROM page
X=Aux power on (D)                  x=Aux power off
,=19200 Baud (P)                    `=38400 Baud (P)
^=57600 Baud (P)                    .=9600 Baud (P)(D)
!=Dump Ram and Restart

Command marked (P) are persistent across Power cycle or Restart

Commands marked with (D) are factory default settings

z.B Updateintervall. A200 Autoreport auf 20sec setzen.
*/

if($IPS_SENDER == "Execute")
{
    //COMPort_SetDTR(42295 /*[Seriell LinkTH]*/, true);
    COMPort_SendText(42295 /*[Seriell LinkTH]*/,"A100".chr(13));
}

$sensor = array("2604D0CF00000040 1B" =&gt; array("temp" =&gt; 40831, "ldr" =&gt; 13410), // Sensor MS-TL
                "26B4D5CF00000095 1A" =&gt; array("temp" =&gt; 47201, "volt" =&gt; 17251, "busspannung" =&gt; 43038), // Sensor MS-TV
                "2645D7CF00000053 1A" =&gt; array("temp" =&gt; 38189, "volt" =&gt; 21011)); // Sensor MS-TV


if($IPS_SENDER == "RegisterVariable")
{
    $error = strpos(trim($IPS_VALUE), "?");
    if($error !== false)
    {
        // Fehlermeldung nach logs schreiben
        $log = IPS_GetKernelDir()."logs\\Error LinkTH Adapter.txt";
        $fp = fopen($log, "a");
        $fehlercode = substr($IPS_VALUE, 2);
        fwrite($fp, date("H:i:s ")."CodeNr: ".$fehlercode."
");
        fclose($fp);
        RegVar_SetBuffer($IPS_INSTANCE, "");
    }
    else
    {
       $data = explode(",", trim($IPS_VALUE));
       $sensorID = strstr(trim($IPS_VALUE), ",", true);
       if(isset($sensor[$sensorID]['temp']))
       {
            SetValue($sensor[$sensorID]['temp'], number_format($data[1], 1, ',', ' '));
        }
        if(isset($sensor[$sensorID]['ldr']))
        {
           SetValue($sensor[$sensorID]['ldr'], $data[3]);
        }
        if(isset($sensor[$sensorID]['volt']))
        {
           if($data[4] == 1023)
           {
               SetValue($sensor[$sensorID]['volt'], 0);
            }
            else
            {
                SetValue($sensor[$sensorID]['volt'], $data[4]/100);
            }
        }
        if(isset($sensor[$sensorID]['busspannung']))
        {
           SetValue($sensor[$sensorID]['busspannung'], $data[3]/100);
        }
    }
}

?&gt;