Script optimieren

Hallo ich schreibe Temperaturen von verschiedenen Räumen in jeweils eine Logdatei.
Ich muss ja die Dateien jedesmal beim Update öffnen, beschreiben und wieder schliessen.
Kann man das Script nicht irgendwie zusammenfassen. Ist so ja auch recht unübersichtlich.

Gruss René

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
*/
//File: LogTemp
// Trigger: 300 sec
$temp_cz=GetValueFloat("CZ_Heating_Act_Temp");
$temp_wz=GetValueFloat("WZ_Heating_Act_Temp");
$temp_kz=GetValueFloat("KZ_Heating_Act_Temp");
$temp_sz=GetValueFloat("SZ_Heating_Act_Temp");
$temp_aqua=GetValueFloat("Aqua_Act_Temp");
$temp_cz=number_format($temp_cz, 1, ",", "," );
$handle=fopen("C:/Daten/Log/TEMP_CZ.txt", "a");
fwrite($handle, date("d.m.y").";". date("H:i:s").";".$temp_cz."
");
fclose($handle);
$temp_wz=number_format($temp_wz, 1, ",", "," );
$handle=fopen("C:/Daten/Log/TEMP_WZ.txt", "a");
fwrite($handle, date("d.m.y").";". date("H:i:s").";".$temp_wz."
");
fclose($handle);
$temp_kz=number_format($temp_kz, 1, ",", "," );
$handle=fopen("C:/Daten/Log/TEMP_KZ.txt", "a");
fwrite($handle, date("d.m.y").";". date("H:i:s").";".$temp_kz."
");
fclose($handle);
$temp_sz=number_format($temp_sz, 1, ",", "," );
$handle=fopen("C:/Daten/Log/TEMP_SZ.txt", "a");
fwrite($handle, date("d.m.y").";". date("H:i:s").";".$temp_sz."
");
fclose($handle);
$temp_aqua=number_format($temp_aqua, 1, ",", "," );
$handle=fopen("C:/Daten/Log/TEMP_AQUA.txt", "a");
fwrite($handle, date("d.m.y").";". date("H:i:s").";".$temp_aqua."
");
fclose($handle);
?>

Viele wege führen nach Rom. Einer wäre z.b.:


$rooms[0] = "CZ_Heating_Act_Temp";
$rooms[1] = "WZ_Heating_Act_Temp";
$rooms[2] = "KZ_Heating_Act_Temp";
...


foreach $rooms as $data {
  $temp=GetValueFloat($data);
  $temp=number_format($temp, 1, ",", "," );
  $handle=fopen("C:/Daten/Log/".$data.".txt", "a");
  fwrite($handle, date("d.m.y").";". date("H:i:s").";".$temp."
");
  fclose($handle);
}

ungetestet :wink: Und die Dateien heissen dann so wie die Raumvariablen (könnte man auch ändern)

Anti

Danke Anti, sieht gut aus. Das teste ich gleich mal
Gruss René

Hallo Anti,

das geht leider nicht:

Er bringt folgende Fehlermeldung:

Parse error: parse error, unexpected T_VARIABLE, expecting '(' in C:\IP-SYMCON\scripts\.currentscript on line 19

Hier ist der vollständige Code, er bemängelt eine Klammer, aber in Zeile 19 ist ja gar keine solche :confused:

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : TempLogCSV.ips.php
Trigger  : 
Interval :  300 sec
*/

$rooms[0] = "CZ_Heating_Act_Temp";
$rooms[1] = "KZ_Heating_Act_Temp";
$rooms[2] = "SZ_Heating_Act_Temp";
$rooms[3] = "WZ_Heating_Act_Temp";
$rooms[4] = "Aqua_Act_Temp";



  foreach $rooms as $data { // Zeile 19
  $temp=GetValueFloat($data);
  $temp=number_format($temp, 1, ",", "," );
  $handle=fopen("C:/Daten/Log/".$data.".txt", "a");
  fwrite($handle, date("d.m.y").";". date("H:i:s").";".$temp."
");
  fclose($handle);
}

?>

Gruss René

Hi,

ich hab mir einen alten Thread rausgesucht und das ganze nur für float Variablen an die V2 angepaßt.

<?
$separator = ";";  // separate fiels by ; - good for Excel ;-)
$leerzeichen = " ";  // ein Leerzeichen
{
$IPS_Value = round(GetValueFloat($IPS_VARIABLE),1);
$IPS_Value = str_replace( ".", ",", $IPS_Value );

   $handle = fopen("../logs_var/" .$IPS_VARIABLE. ".txt", "a");
   fwrite( $handle,  date("d.m.y").
                     $separator.
                     date("H:i:s").
                     $separator.
                     $IPS_Value.
                     "
");
   fclose($handle);
} ?>

getriggert wird das durch die Zustandsänderung bei einer Variablen und im Unterverzeichnis „logs_var“ (!anlegen unter IP-Symcon) unter der ObjektID (nicht aussagekräftig, aber absolut eindeutig, sprich Redundanzen können nicht vorkommen) abgespeichert, aber das kann´ste ja selbst im Script anpassen.

Vorteil ist, das er nur die Variable anpackt, die er gerade in Bearbeitung hat und ich deshalb mir das ganze Gedöns mit dem einzeln deklarieren sparen kann. Wenn man auf Änderung der Variablen triggert wird überdies der Datensatz auch nicht so groß. Das einzige, was erforderlich ist: Variable zum triggern auswählen und drauf achten, das es auch eine float ist. Falls andere Variablentypen benötigt werden: markieren, kopieren, neuen PHP Script anlegen, einfügen, Variablentyp anpassen usw…

PHP Spezies können das bestimmt noch besser, ich bin diesbezüglich absoluter Anfänger und freue mich auf Optimierungsvorschläge.

mfg

Bernd


foreach ($rooms as $data)

:wink:

Hallo Rene,

es wird eine „(“ erwartet.

foreach ($rooms as $data) {

Gruß

Hallo Thomas, Hallo Attain,
danke schön, so geht es.

@Bernd
Aber ich kann mit dem Code ja auch immer nur den Wert der auslösenden Variable schreiben, dann hab ich doch genau so viel Code wie vorher, oder hab ich da was missverstanden.
Der Code von Anti funktioniert bestens , werde ich für meine nächsten LogDateien berücksichtigen.
Einen schönen Abend

Gruss René

Hallo Schubi,

wenn man das in eine Funktion baut, und das ganze in ein eigenes Script(include ) einfügt, ist der Rest nur noch sehr kurz:

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : TempLogCSV.ips.php
Trigger  : 
Interval :  300 sec
*/ 
include('INC.ips.php');
Log_schreiben("CZ_Heating_Act_Temp");
.
.
?>


<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : INC.ips.php
Trigger  : 

*/ 
function Log_schreiben($IPS_VARIABLE){
  $separator = ";";  // separate fiels by ; - good for Excel ;-)
  $leerzeichen = " ";  // ein Leerzeichen
  $IPS_Value = round(GetValueFloat($IPS_VARIABLE),1);
  $IPS_Value = str_replace( ".", ",", $IPS_Value );
   $handle = fopen("../logs_var/" .$IPS_VARIABLE. ".txt", "a");
   fwrite( $handle,  date("d.m.y").
                     $separator.
                     date("H:i:s").
                     $separator.
                     $IPS_Value.
                     "
");
   fclose($handle);
} ?>

Vorteil: Du kannst die Function sehr einfach in anderen Scripten verwenden.

Gruß

Ah ja jetzt.
So macht das ganze einen Sinn.
Vielen Dank
René

Hallo René,

@Bernd
Aber ich kann mit dem Code ja auch immer nur den Wert der auslösenden Variable schreiben, dann hab ich doch genau so viel Code wie vorher, oder hab ich da was missverstanden.

Du kannst zu diesem Script viele auslösende Ereignisse hinzufügen, er erzeugt dann zu jedem eine Logdatei. Ein gemeinsames Script für alle, willst du eine weitere Logdatei, nur das ausführende Ereignis bei diesen Script hinzufügen.

mfg
Bernd