Antis FHT Skript Umstieg V2

Sorry, bin neu und habe folgendes Problem:
Habe m.E. Anti´s Skript korrekt umgesetzt nach V2, funktioniert leider mit folgender Fehlermeldung nicht:

Fatal error: Cannot redeclare checkinterval() (previously declared in C:\IP-Symcon\scripts\40245.ips.php:99) in C:\IP-Symcon\scripts\40245.ips.php on line 106

Wer hat einen Tipp, wie kann ich diesen beseitigen??

Da hast Du wohl die Funktion checkinterval doppelt drin. Eine Variante musst Du löschen.

Leider eben nicht, das ist ja das problem
:mad:

Tja, dann kannst Du entweder warten, bis wir unsere Glaskugeln wiedergefunden haben, oder Dein Skript posten.

<?php
// Bei forcewrite schreibt er immer seine ermittelte Temp. Heisst Rädchendrehen ist mehr oder weniger wirkungslos
$fht_forcewrite = false;
// bei Debug nur Echo ausgaben statt zu senden
$fht_debug = false;
// Wenn true wird ein mal am Tag die Zeit gesetzt
$fht_settime = true;

/* IPS Variablen

"fht_profileoverride" , wenn vorhanden und einen Namen eines vorhanden Profils enthält, wird das genommen
"fht_save"    , wird anleget dient zur zwischenspeicherung alter Tempraturen

*/


include_once 'reader.php';
// ExcelFile($filename, $encoding);
$data = new Spreadsheet_Excel_Reader();
// Set output Encoding.
$data->setOutputEncoding('CP1251');


$data->read('c:/IP-Symcon/scripts/Temps.xls');

error_reporting(E_ALL ^ E_NOTICE);


// $tableNum enthält dannach auf dem Namen den Index der Tabelle also z.b. $tableNum["config"] = 1 , heisst config is Tabelle 1
foreach( $data->boundsheets as $key => $worksheet )  {
    $tableNum[$worksheet["name"]] = $key;
}

$configNr = $tableNum["config"];
$configTable = $data->sheets[$configNr]['cells']; // Das ist nun die config-Tabelle

// Set Punkt Temp zuordung [x]=temp
for ($x=2; $x <= 11; $x++) {
    $tempTable [$configTable[$x][1]]= $configTable[$x][2];
}

// Aktives Profil lesen
$aktProfil =  $configTable[4][5];

// Profil Liste lesen
$newdata = "new";$profiles = array();
for ($x=11; !empty ($newdata); $x++) {
    $newdata = $configTable[2][$x];
    if (!empty ($newdata)) {
      $profiles[] = $newdata;
      $newdata2 = "new";
      // Und nebenbei prüfen ob bei dem Profil das heutige Datum eingetragen ist
      for ($y=3; !empty ($newdata2); $y++) { // Daten drin ?
      $newdata2 = $configTable[$y][$x];
          if (!empty ($newdata2)) {
            $tmp  = explode("/", $newdata2);
                $daybefore  = mktime(0, 0, 0, $tmp[1]  , $tmp[0]-1, $tmp[2]); // Fix, das Ding liest 1 tag später aus
            // Ein Datum überschreibt das aktive Profil !
            if ($daybefore ==  mktime(0, 0, 0))  {
               $aktProfil = $newdata;
                }
         }
      }
   }
}

// In IPS ein Override gesetzt ?
//Fehlermeldung mit @ unterdrücken
$VarID = @IPS_GetVariableID("fht_profileoverride");
if ($VarID === false)
  echo "Variable fht_profileoverride nicht gesetzt, nehme Standardprofil!";
else {
  echo "Die Variablen-ID lautet: ". $VarID;
//if (IPS_VariableExists("fht_profileoverride")){
  $tmp = GetValueString ($VarID);
  if (in_array ($tmp, $profiles)) $aktProfil = $tmp;
}


// Room´s auslesen (ID setzen)
$newdata = "new";$rooms = array();
for ($x=25; !empty ($newdata); $x++) {
   $newdata = $configTable[$x][1];
   if (!empty ($newdata)) {
      $rooms[$newdata][id]= $configTable[$x][2];
      $rooms[$newdata][target]= $configTable[$x][3];
      $rooms[$newdata][time1]= $configTable[$x][4];
      $rooms[$newdata][time2]= $configTable[$x][5];

      // test
      //echo (checkInterval ($rooms[$newdata][time1], -10, 6)) ? "ja": "nein";

      // Interval in dem wir das Ding auf Manuell schalten?
$rooms[$newdata][gotoman]= checkInterval ($rooms[$newdata][time1], -10, 6) || checkInterval ($rooms[$newdata][time2], -10, 6);
      // Interval in dem wir das Ding wieder auf Auto schalten?
$rooms[$newdata][gotoauto]= checkInterval ($rooms[$newdata][time1], 4, 6) || checkInterval ($rooms[$newdata][time2], 4, 6);
   }
}
// True wenn aktuelle Zeit im Bereich (time+offset) bis (time+offset+duration) ist
function checkInterval ($time, $offset, $duration) {
   $std = substr($time,0,2);
   $min = substr($time,3,2);
   $von = mktime ($std,$min+$offset);
    $bis = mktime ($std,$min+$offset+$duration);
   //echo "$std:$min -> ".time(). " $von $bis
";
   return  (time() >= $von && time() <= $bis);
}

//print_R($rooms);

$profilNum = array_search($aktProfil, $profiles)+1;
$ProfileName ="Profiles".$profilNum;
$ProfileNr = $tableNum[$ProfileName];


$ProfileTable = $data->sheets[$ProfileNr]['cells'];
//    print_r($profiles);
//  echo  $ProfileTable[3][1]; // Zeile, Spalter
// zumidnest im englischen PHP okay
$days = array ("Mon", "Tue", "Wed", "Thu", "Fri", "Sat","Sun");
$dayindex = array_search( date("D",  mktime(0, 0, 0)), $days);    // 0-6
$timeindex = date("H")*4 + floor( date("i")/15);
  //echo "

".$dayindex;
$y = $dayindex+3;
$x =  $timeindex+2;
$allSoll = $ProfileTable[$y][$x];

foreach ($rooms as $key => $data) {
   $rooms[$key][soll] = $allSoll;
}

// Extra Räume ?
$start =12;
while ($ProfileTable[$start][1] != "") {
   $Room = $ProfileTable[$start][1];
   $x =  $timeindex+2;
   $y = $dayindex+$start+1;
   $rSoll = $ProfileTable[$y][$x];
   $rooms[$Room][soll] = $rSoll;
   //echo $Room;
   $start+=9;
}
//print_r ($rooms);

// So sämtliche Soll Temperaturen sind erfasst *juhu* nun vergleichen mit alter Temp und setzen der alten Temp

// Alte Tempraturem lesen:
//Fehlermeldung mit @ unterdrücken
$VarID = @IPS_GetVariableID("fht_datasave");
if ($VarID === false)
 { echo "Variable fht_datasave nicht gefunden!";
   $VarID = IPS_CreateVariable(3);  //Variable Typ String anlegen
    IPS_SetName($VarID,"fht_datasave"); // Variable benennen
}
else {
  echo "Die Variablen-ID lautet: ". $VarID;
//if (IPS_VariableExists("fht_datasave")) {
   $tmp = wddx_deserialize (GetValueString ($VarID));
   $oldTemp = $tmp[oldTempNeu];
}

// Ein Ressend angefordert ?
$boolTemp = false;

//Fehlermeldung mit @ unterdrücken
$VarID = @IPS_GetVariableID("fht_resend");
if ($VarID === false)
{
   $VarID=IPS_CreateVariable(0); //Variable Typ Boolean anlegen
   IPS_SetName($VarID,"fht_resend"); // Variable benennen
   SetValueBoolean ($VarID, false);
  echo "Variable nicht gefunden , neu angelegt!". $VarID;
  }
else {
  echo "Die Variablen-ID lautet: ". $VarID;
//if (IPS_VariableExists("fht_resend")) {
   $boolTemp =  GetValueBoolean ($VarID);
   SetValueBoolean ($VarID, false);
}

foreach ($rooms as $key => $data1) {
   // Umlaute mag er nicht
   $key2= str_ireplace (Array("ü","ö","ä","ß"), Array("ue","oe","ae","ss"), $key);
   $oldTempNeu[$key2][soll] = $tempTable[$data1[soll]];
   $oldTempNeu[$key2][setTime] = $oldTemp[$key2][setTime];

  //wm if (IPS_ModuleInstanceExists (intval ($data1[id]))) {
      // WIe siehts aus mit automatischem auto/manuell umschalten ?
      if ($data1[gotoman]) if ($fht_debug) echo "Goto Man $key
";
      else FHT_SetMode(intval($data1[id]),1);
      if ($data1[gotoauto]) if ($fht_debug) echo "Goto Auto $key
";
      else FHT_SetMode(intval($data1[id]),0);

      if ($fht_settime) {
         // if ($fht_debug) echo "setze $data[id] to ".$tempTable[$data['soll']]."
";
          //  else FHT_SetTemperature($data[id], $tempTable[$data[soll]]);
      }

 //wm  }

   if ($oldTemp[$key2][soll] != $tempTable[$data1[soll]] || $fht_forcewrite || $boolTemp) { // Schreibn Meister

//wm      if (!IPS_ModuleInstanceExists (intval ($data1[id]))) {
         Echo "Das Modul $data1[id] gibts nicht!";
//wm      } else {
         if ($fht_debug) echo "setze $key to ".$tempTable[$data1['soll']]."
";
         else {
            FHT_SetTemperature(intval($data1[id]), floatval ($tempTable[$data1[soll]]));
            IPS_LogMessage("Antis_FHT", "$key wurde auf ".$tempTable[$data1['soll']]." Grad gesetzt");
            $oldTempNeu[$key2][setTime]=time(); // Merken wir uns den Zeitpunkt der Sendung
         }
//wm      }
   }
   if ($oldTempNeu[$key2][setTime]+ 360 < time() && !$fht_debug) { // Update wurde vor mehr als 6 Min gesendet
      if ($oldTempNeu[$key2][setTime]+ 660 >= time()) { // Und nach weniger als 11 Min
         // Senden wir den letzen Befehl noch mal, zur erhöhung der Sicherheit
         FHT_SetTemperature(intval($data1[id]), floatval ($tempTable[$data1[soll]]));
      }
      if (IPS_VariableExists($data1[target])){ // Nur wenn die IPS Var existiert (empfolen)
         $updTime = IPS_GetUpdatetime($data1[target]);
         if ($updTime > $oldTempNeu[$key2][setTime]) {
            //echo "alles im grünen Bereich $updTime > ".$oldTempNeu[$key2][setTime];
         } else {
            echo "$key2 ist nicht gesetzt !! -> retry";
            IPS_LogMessage("Antis_FHT", "$key2 ist nicht gesetzt !! -> retry");
            fht_alert ( "$key2 ist nicht gesetzt !! -> retry");
            // FHT_SetTemperature(intval($data1[id]), floatval ($tempTable[$data1[soll]])); // Sinnlos
           // echo $data1[id].",". $tempTable[$data1[soll]];
            //$oldTempNeu[$key2][setTime]=time(); // Merken wir uns den Zeitpunkt der Sendung
         }
      }
   }
}
//print_r ($oldTempNeu);
//IPS_LogMessage("Antis_FHT", "$key wurde auf ".$tempTable[$data1['soll']]." Grad gesetzt");
// Neue Alte Temperaturen (und sontiges) speichern
SetValueString ("fht_datasave", wddx_serialize_vars("oldTempNeu"));
Echo  "Aktives Profil: $aktProfil
";
// Solltemp: $tempTable[$allSoll]";
foreach ($rooms as $key => $data1) {
echo $key." soll: ".$tempTable[$data1['soll']]."° Celsius
";
}


function fht_alert ($hint) {
   if (!IPS_VariableExists("fht_noalert")) {
    IPS_CreateVariable("fht_noalert", "Boolean");
   }
   if (!IPS_VariableExists("fht_alertMSG")) {
    IPS_CreateVariable("fht_alertMSG", "String");
   }
   SetValueString ("fht_alertMSG",$hint);
   SetValueBoolean ("fht_noalert",false);
}
?>

Klicke ich das Skript an, so erscheint zusätzlich in den Meldungen der Hinweis:
ExecuteThreadID #„Nummer“; Fehler beim Ausführen des Skripts (40245.ips.php): Floating point overflow