Letzter Ausführungszeitpunkt eines Scriptes

Hallo,

wie kann ich denn in einem Script abfragen, wann es zuletzt ausgeführt wurde?
Im Objektbaum steht es ja im Feld „Aktualisiert“.

Habe gesucht, aber leider nichts passendes gefunden.
Ich könnte mir das auch selber in einer Variable festhalten, aber ich gehe fast davon aus, dass ich es auch einfach abfragen kann.

Danke & Gruß
Thorsten

Hallo Thorsten,

der Befehl ist IPS_GetScript()

Gruß

Vielen Dank Attain,

bin durch Try’n Error (Autovervollständigen mit Strg+Space) schon über das Kommando gefallen, aber war verwirrt weil ein Array zurückgegeben wird. Ich dachte es gäbe was, wo direkt ein Unix Timestamp zurück kommt. :rolleyes:

Gruß
Thorsten

Hast du doch mit „LastExecute“.

Ist mir dann auch gedämmert.

Ich hatte nur nicht weit genug gedacht, als ich als Rückgabetyp von IPS_GetScript Array gesehen habe.
Jetzt ist alles klar und schon fast erfolgreich in mein Script eingebaut :loveips:.

hallo zusammen,
das ist genau das was ich gerade gesucht habe. Leider blick ich nicht wie ich einen bestimmten Rückgabewert in eine Variable schreibe. Der Code ist das was ich gerade aktiv habe.

$LastExec = IPS_GetScript(29256);
setvalue(55190  /*[Float]*/ , $LastExec);

Danke für Eure Hilfe,

Hallo Wolfgang, hallo Thorsten!!

Ich könnt mich irren, aber ich denke, so klappts… :slight_smile:

$return = IPS_GetScript(29256);
setvalue(55190  , $return['LastExecute']);

Vergl. auch IPS_GetScript: IP-Symcon :: Automatisierungssoftware

Der Unix Timestamp sollte in $return[‚LastExecute‘] sein bzw. dann auch in der Var. 55190. :slight_smile:

Grüße, Benjamin

Hallo Benjamin,
Danke für Deine schnelle Hilfe. Habs mittlerweile auch fast selbst hinbekommen. Allerdings noch mit einem Fehler. Wollte gerade Posten. Des Rätsels Lösung waren die Hochkommas um LastExecute. Die Doku hab ich schon zu Rate gezogen, aber da fehlen die Hochkommas.

Aktuell speichere ich die Daten noch zum testen in 2 Variablen eine Int und eine Float (wie in der Doku beschrieben). Welche ist die bessere/richtigere um später damit zu arbeiten?

Die Int zeigt mir direkt das Datum und die Zeit. Wie kann ich die auf die Zeit cutten (oder auf das Datum)?

Wie wandle ich den Floatwert in eine Zeit um?

Danke für Deine Hilfe,

Hallo Wolfgang,
schön das ich Dir helfen konnte!

Bei PHP muss man sich nicht vorher für ein Format entscheiden - die Hochkommatas sind auch nur eine Möglichkeit einen Teil in einem Array anzusprechen!

Hast Du eigentlich Erfahrung mit Skriptsprachen wie PHP/ Perl oder Programmiersprachen wie C /C++ /CPP oder C#/ Java?

Lg, Benjamin

Hallo Benjamin,
danke für Deine Antwort.
Leider nein. Absolut 0. kann ein bischen VB (selbst beigebracht) für den Hausgebrauch. Aber wie es aussieht kann ich davon nicht viel gebrauchen. Z.B hab ich gelernt variablen sauber zu deklarieren bevor ich sie verwende. Bei PHP scheint das nicht nötig zusein?
Bin hier im Forum (und in der Doku) gerade unterwegs und versuche an hand von einfachen Beispielen die Grundlagen nachzuvollziehen. Rainer RWN war/ist auch schon eine grosse (und geduldige) Hilfe.
Wie ich auch schon in einem anderen Thema geschrieben habe, habe ich eigentlich aktuell (ausser der einbindung eines IPswitch) kein Projekt am laufen sondern versuche mich mit den Möglichkeiten von IPsymcon vertraut zu machen.
Beruflich komme ich aus der IT, kann ein wenig Datenbanken, aber scripten und programmieren ausser VB sind mir fachfremd.

Hallo Wolfgang,

ich komme auch aus der IT Branche und habe beruflich eigentlich fast nichts mit Programmieren zu tun. Ab und zu Skripte ich mal in cmd / bash / Vbscript um etwas zu automatisieren. PHP / C / Java waren auch immer ein Hobby bei mir und ich habe es mir ebenfalls selbst beigebracht - das klappt meist ganz gut.

Variablen brauchst Du in PHP im Normallfall nicht vor der Benutzung deklarieren, es gibt aber einige wenige Situationen in denen dies Probleme vermeidet.

Ich habe gerade mal mit einem Skript herumgespielt, ich denke das ist in etwa das was Du suchst:

<?

$return = IPS_GetScript(50366);
// setvalue(55190  , $return['LastExecute']);

$lastdate = date("d.m.Y",$return['LastExecute']);
$lasttime = date("H:i:s",$return['LastExecute']);
$lastday = date("w",$return['LastExecute']);

$days = array("Anfang der Woche","Dienst","Mitte der Woche","Donnerstag","Letzter Arbeitstag vor dem Wochendende","Saturday","Sonnentag");
echo "!!!DEBUG!!! Date: " . $lastdate," Time: " . $lasttime. " Day of week: ". $days[$lastday];
setvalue(21457 /*[Test\lastdate]*/  , $lastdate);

?>

Ausgabe:

!!!DEBUG!!! Date: 16.01.2012 Time: 18:51:29 Day of week: Dienst

Am Ende des Skriptes wird außerdem als Beispiel eine IPS Variable mit dem Datum der letzten Ausführung befüllt.

[EDIT: Schau am Besten mal in die PHP Dokumentation zu date() und getdate();[/EDIT]

Viele Grüße, Benjamin

Hallo zusammen,
@Benjamin, danke für Deine Hilfe. Hab den Code an meinen angepasst und läuft.
Neue Fragen:

  1. Mein Script läuft alle 15 Min. In das Script habe ich IPS_GetScript()… erfolgreich eingfügt und schreibe den Wert in eine String-Variable. So, nun wird mir aber immer die Zeit der Ausführung des Scripts vor der aktuellen Ausführung angezeigt. In meinem Fall sind das 15 Minuten Differenz. Auf Empfehlung von Bengie hab ich mal nach PHP date() gegoogelt. Hab auch das richtige gefunden. strftime. leider zieht bei mir die setLocale nicht. Ich bekomme geschriebene Tage und Monate immer in englisch.
$LastExec2 = strftime("%a %c");
setlocale (LC_TIME, "de_DE");
/*habe auch noch "de"; "g"; "ge"; "gw" wie unter http://www.phpbox.de/php_befehle/setlocale.php beschrieben erfolglos getestet */
echo "$LastExec2";
SetValue(46741 /*[Test\Test_DateTime\Test_DateTime]*/ , $LastExec2);

Auch mit anderen TestScripts mit deutschen Ländereinstellungen bekomme ich immer nur englische Ausgaben. Hat jemand einen Tipp? irgend ein Eintrag in eine *.ini? Irgend eine fehlende *.dll?
Danke für Eure Antworten,

hallo zusammen,
für alle die es interessiert,

habs nach einigem suchen in verscheidenen PHP-Foren/Anleitungen gefunden.
Des Rätsels Lösung ist setlocale (LC_TIME, „deu_deu“). Funktioniert getestet unter Windows 7 x64. In den vorangegangen Suchen kam „deu_deu“ nicht vor.
Auch die Ermittlung des Betriebssystems und der damit verbunden Ländereistellungen mit:

if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN')
    $localeCode = 'ge';
else
    $localeCode = 'de_DE';

hat nicht funktioniert. Lösung? Auch nicht mit anpassen der Beriebssystemziffer.
Letzten Endes hab ich unter PHP: setlocale - Manual noch die funktionierene „deu_deu“ Einstellung gefunden. Der Code wurde für PHP 4.3 geschrieben. Mit der funktionierts unter Win7 u. PHP 5.x
Folgender Code zeigt die aktuelle Zeit wann das Script zuletzt/aktuell ausgeführt wurde/wird.

setlocale (LC_TIME, 'deu_deu');
$TimeNow = strftime('%A'.' '.'%d'."."."%m"."."."%Y"." "."%H".":"."%M".":"."%S");
//SetValue(VariablenID , $TimeNow);
Echo $TimeNow

Weitere Einstellungen für andere Betriebssyteme findet ihr unter z.B.
Datumsangaben in Deutsch anzeigen

setlocale ist böse. Les dir bitte die Warnung auf der PHP Doku Seite durch. Der Befehl wirkt sich nicht nur in deinem Skript aus, sonder auf alle Skripte innerhalb von IP-Symcon.

Wenn also lustige Fehler auftreten… Liegt es vielleicht daran :eek:

paresy

PS: = Nicht nutzen.
PPS: Die allgemeine Lösung ist ein Array zu haben, dass die Wochentage einfach übersetzt.

hallo parsey,

vielen Dank für Deine Aufmerksamkeit. Erspart mir in Zukunft bestimmt viel Ärger. Hab ich mit der Ausführung des Scripts jetzt schon irgend wo was festgelegt? Wenn sichs auf alle Scripte auswirkt? Wenn ja wie kann ichs wieder rückgängig machen?

@all
Hab mir ein Script zusammengegoogelt das mir die Wochentage und Monate je kurz und ausgeschrieben übersetzt.
Da’s ziemlich lang geworden ist und ich das nicht bei jeder Nutzung neu schreiben will, stellt sich für mich jetzt die Frage, ob man die 4 Ergebnisvariablen nicht „globalisieren“ kann, so dass man aus jedem Script darauf zugreifen kann. Hab schon die $Globals gefunden, blick aber nicht wie ich richtig damit umgehe. Muss ich das in eine Funktion packen?
Wo „sammelt“ man am besten solche $Globals?

Danke für Eure Antworten,

Hallo Wolfgang,

leg Dir ein Script mit Namen:"__autoload.php" an.
Alle darin enthaltenen Funktionen und Variablen, stehen Dir automatisch in allen Scripten zur Verfügung.

Gruß

Die auto_prepend_file Funktion in der php.ini wird von IP-Symcon intern genutzt. Falls eine PHP-Datei automatisch geladen werden soll, so muss diese im Skript Ordner liegen und __autoload.php heißen.

Hallo Attain,
Danke für Deine Hilfe.
Habe die Datei ./scripts/__autoload.php angelegt und u.g. Code eingefügt. Neues Script angelegt das nur echo $wotaku enthält. Rückgabe:Notice: Undefined variable: wokatu in [Test\Test_DateTime\Test_DateDe_autoLoad] on line 5.

__autoload.php:

<?
//Array und Variablen zur Übersetzung von englischen Tagen und Monaten ins deutsche
$trans = array(
    'Monday'    => 'Montag',
    'Tuesday'   => 'Dienstag',
    'Wednesday' => 'Mittwoch',
    'Thursday'  => 'Donnerstag',
    'Friday'    => 'Freitag',
    'Saturday'  => 'Samstag',
    'Sunday'    => 'Sonntag',
    'Mon'       => 'Mo',
    'Tue'       => 'Di',
    'Wed'       => 'Mi',
    'Thu'       => 'Do',
    'Fri'       => 'Fr',
    'Sat'       => 'Sa',
    'Sun'       => 'So',
    'January'   => 'Januar',
    'February'  => 'Februar',
    'March'     => 'März',
    'May'       => 'Mai',
    'June'      => 'Juni',
    'July'      => 'Juli',
    'October'   => 'Oktober',
    'December'  => 'Dezember',
    'Jan'   	 => 'Jan',
    'Feb'  		 => 'Feb',
    'Mar'    	 => 'Mär',
    'May'       => 'Mai',
    'Jun'       => 'Jun',
    'Jul'       => 'Jul',
    'Oct'  		 => 'Okt',
    'Dec' 		 => 'Dez'
);

$wotaku = strtr(date("D"), $trans);
$wotala = strtr(date("l"), $trans);
$monku = strtr(date("M"), $trans);
$monla = strtr(date("F"), $trans);
?>

meine PHP.ini sieht so aus:


max_execution_time=30
register_globals=off
error_reporting=E_ALL
extension_dir="D:\IP-Symcon\ext"
auto_prepend_file="D:\IP-Symcon\scripts\__autoinclude.inc.php"
extension = php_curl.dll
extension = php_gd2.dll
extension = php_gettext.dll
extension = php_soap.dll
[DATE]
date.timezone="Europe/Berlin"

Was muss ich ändern? Oder wie greife ich auf die Variablen zu?

Danke für Deine/Eure Antwort,

Undefined variable: wokatu in [Test\Test_DateTime\Test_DateDe_autoLoad] on line 5.

Du hast einen Schreibfehler bei Deiner Variablen!

$wotaku != $wokatu

PS: wer denkt sich auch solche Abkürzungen aus^^

Gruß

Hallo Attain,
Danke für Deine Analyse. Mit der Korrektur funktionierts im Test.
Wäre wahrscheinlich lange nicht drauf gekommen.
Die Abkürzung ist WOchenTAKUrz. Scheint für mich logisch.
Danke noch mal,