Ich möchte ein Skript hinterlegen, dass bei einer Integervariable mit dem Profil ~UnixTimeStamp das aktuelle Datum setzt (SetValue ($IPS_VARIABLE, time());).
Leider wird dieses Skript aber nicht ausgeführt, wenn ich im Webfront auf die Variable klicke. Mache ich was falsch?
eigentlich kann man da doch gar nichts falsch machen… Ich verstehe es nicht…
das Skript ist auch nicht sonderlich kompliziert:
<?
// Schreibt die aktuelle Zeit in die Variable die dieses Skript ausführt
// und logt dies mit
SetValue ($IPS_VARIABLE, time());
echo ('Zeit setzen gestartet');
?>
die Idee hatte ich auch schon. Aber ich habe mehrere Variablen im Webfront die ich mit diesem Skript zurücksetzen möchte. Dann hatte ich die Idee, ich könnte ja das gleiche Skript mit mehreren Links im Webfront einfügen (jeweils dort wo ich es brauche). Da ich aber in einem Skript keine Variable gibt, die mir zurückmeldet welcher Link das Skript gestartet hat, komme ich so auch nicht weiter. Im Aktionscript hätte ich IPS_VARIABLE dafür gehabt.
Wie kommen denn die Zeitwerte sonst in die Int. Variablen, außer über das klicken im Webfront, sonst könntest Du es evtl. etwas umständlicher über eine Assoziation lösen.
Kann man beliebig formatieren… Man kann natürlich auch nur den timestamp als Integer abspeichern und dann nachher beim Anzeigen in ein beliebiges Anzeigeformat „umwandeln“.
Aktionsscript sollte kein Thema sein, aber normalerweise möchte man ja wissen wann zum letzten mal sich bei EINER zugehörigen Variablen etwas geändert hat (sind also dann mehrere). Und da es im WebFront angezeigt werden soll brauche ich einmal eine ~UnixTimestamp und die Zugehörige Zustandsvariable, welche auch mit einem Profil versehen sein sollte damit´s angezeigt wird.
Also braucht man zum Auslösen ein Ereignis auf die Zustandsvariable, welches dann wiederum so ein globales Script triggert und jetzt kommt das Problem, dort sollten die zugehörigen ~UnixTimestamp ID´s hinterlegt sein. Nächstes Problem, die sollten anzeigemässig schon in der richtigen Reihenfolge sortiert sein.
Für meine IO-Karte004 habe ich ein Installationsscript erstellt, das kennt die ID´s beim Erstellen und trägt sie dann in die Scripte ein.
Ergebnis: 1 Aktionscript welches von 28 Triggern angesprochen wird.
<?
if($_IPS['SENDER'] != "Variable")
return;
$CallerID = $_IPS['VARIABLE'];
switch ($CallerID) {
case 59107: // ist die ID der auslösenden Zustandsvariable
SetValueInteger(14752 /*[Technik\PIC18F4550\Test-8.1\Eingaenge\Pin1 update]*/, time());
break;
case 58004:
SetValueInteger(50174 /*[Technik\PIC18F4550\Test-8.1\Eingaenge\Pin2 update]*/, time());
break;
// usw.
}
?>
Benötige ich eine weitere Relaiskarte lohnt der Zeitaufwand für das Editieren nicht; Installationsscript aufrufen und schon ist nach 100 mS alles erledigt.
Dann hat man zwar zwei Scripte, aber die sind sauber voneinander abgetrennt
mfg
BerndJ
PS: manchmal kann die Zeitanzeige auch schon mal nerven, aus diesem Grunde gibt´s bei mir noch die Möglichkeit die über eine weitere Zustandsvariable weg zu schalten.