Urlaub - Datum im Webfron eingeben

Hallo,

ich habe folgendes vor:

Ich möchte im Webfront ein Datum „von“ „bis“ eingeben können und somit eine Variable steuern lassen.
Ich würde gerne mein Urlaub eingeben können.Gibt es da schon was fertiges? Ich habe mir schon die Calendar Instanz angeschaut, aber wie kann ich diese im Webfron einbinden? Oder gibt es vielleicht eine Andere Möglichkeit?

Vielen Dank schon Mal für Eure Hilfe

Gruß

dark99

Das kommt drauf an wie Du Dir das genau vom Layout vorstellt. Im einfachsten Fall hast Du einfach zwei Variablen die Du Dir anlegst, eine von und eine bis. Typ der Variable ist Integer, Variablenprofil ist ~UnixTimestampDate und unter eigene Aktion ein Aktion Skript zuweisen. Im einfachsten Fall


<?
 SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
?>

Dann hast Du zwei Variablen im Webfront in die Du ein Datum eingeben kannst, mit dem Inhalt der Varibalen kannst Du dann weitere Dinge anstellen.

Hi,

für was ist das Aktion Script eigentlich?
Sorry bin noch nicht so fit.
Wenn ich es ausführe, dann bekomme ich folgende Fehlermeldung.

Notice: Undefined index: VARIABLE in C:\IP-Symcon\scripts\15786.ips.php on line 3

Notice: Undefined index: VALUE in C:\IP-Symcon\scripts\15786.ips.php on line 3

Warning: Variable #0 existiert nicht in C:\IP-Symcon\scripts\15786.ips.php on line 3

Hallo,
die Schritte wie Fonzo es geschrieben hat:

Anlegen der Variablen

Datum von bis 1.PNG

Skript anlegen wie Fonzo es beschrieben hat und als Aktionskript auswählen

Datum von bis 2.PNG

Anzeige im Webfront

Auswählen des Datums im Webfront

Datum von bis 4.PNG

Guten Morgen dark99,
ich hab es bei mir mit Hilfe eines Freundes so lösen können.

IPSView:


Objektbaum:

Script Urlaub:

<?

// Urlaub
$VAR_Urlaub = 52151 /*[Scripte & Variablen\Kalender & Termine\Urlaub\Urlaub\Urlaub]*/;
$VAR_Sind_Dann_Mal_Weg = 54416 /*[Scripte & Variablen\Kalender & Termine\Urlaub\Urlaub\Sind dann mal Weg!]*/;
$VAR_Dauer_des_Urlaubs = 28439 /*[Scripte & Variablen\Kalender & Termine\Urlaub\Urlaub\Dauer des Urlaubs]*/;

// Integer Variablen um Tag, Monat, Jahr in IPSView einzutragen
$VAR_Beginn_Minute = GetValue(42190 /*[Scripte & Variablen\Kalender & Termine\Urlaub\Urlaub\Beginn Minute]*/);
$VAR_Beginn_Stunde = GetValue(25991 /*[Scripte & Variablen\Kalender & Termine\Urlaub\Urlaub\Beginn Stunde]*/);
$VAR_Beginn_Tag = GetValue(15574 /*[Scripte & Variablen\Kalender & Termine\Urlaub\Urlaub\Beginn Tag]*/);
$VAR_Beginn_Monat = GetValue(28140 /*[Scripte & Variablen\Kalender & Termine\Urlaub\Urlaub\Beginn Monat]*/);
$VAR_Beginn_Jahr = GetValue(13063 /*[Scripte & Variablen\Kalender & Termine\Urlaub\Urlaub\Beginn Jahr]*/);

$VAR_Ende_Minute = GetValue(57410 /*[Scripte & Variablen\Kalender & Termine\Urlaub\Urlaub\Ende Minute]*/);
$VAR_Ende_Stunde = GetValue(54984 /*[Scripte & Variablen\Kalender & Termine\Urlaub\Urlaub\Ende Stunde]*/);
$VAR_Ende_Tag = GetValue(14166 /*[Scripte & Variablen\Kalender & Termine\Urlaub\Urlaub\Ende Tag]*/);
$VAR_Ende_Monat = GetValue(35661 /*[Scripte & Variablen\Kalender & Termine\Urlaub\Urlaub\Ende Monat]*/);
$VAR_Ende_Jahr = GetValue(12857 /*[Scripte & Variablen\Kalender & Termine\Urlaub\Urlaub\Ende Jahr]*/);

$VAR_StartTime = 57192 /*[Scripte & Variablen\Kalender & Termine\Urlaub\Countdown_Timer_Urlaub\StartTime]*/;

$startTime = mktime($VAR_Beginn_Stunde, $VAR_Beginn_Minute, 0, $VAR_Beginn_Monat, $VAR_Beginn_Tag, $VAR_Beginn_Jahr); //Stunde, Minute, Sekunde, Monat, Tag, Jahr;
$endTime = mktime($VAR_Ende_Stunde, $VAR_Ende_Minute, 0, $VAR_Ende_Monat, $VAR_Ende_Tag, $VAR_Ende_Jahr);
SetValue($VAR_StartTime, $startTime);

$Urlaub_Beginn = "$VAR_Beginn_Jahr-$VAR_Beginn_Monat-$VAR_Beginn_Tag";
$Urlaub_Ende = "$VAR_Ende_Jahr-$VAR_Ende_Monat-$VAR_Ende_Tag";


$Tage = array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
$VAR_Urlaub_Beginn = $Tage[date("w", $startTime)] .", ".date("d.m.Y", $startTime);
$VAR_Urlaub_Ende = $Tage[date("w", $endTime)] .", ".date("d.m.Y", $endTime);

$DateNow = strtotime("now");


	IF ($DateNow <= $startTime)
	{
		SetValue($VAR_Urlaub, $VAR_Urlaub_Beginn ." - " .$VAR_Urlaub_Ende);
		SetValue($VAR_Sind_Dann_Mal_Weg, "");
		SetValue($VAR_Dauer_des_Urlaubs,Dauer($Urlaub_Beginn, $Urlaub_Ende));
		
		IPS_SetEventActive(29968 /*[Scripte & Variablen\Kalender & Termine\Urlaub\Countdown_Timer_Urlaub\Täglich alle 1 Sekunden]*/, true);
	}
	ELSEIF ($DateNow > $startTime and $DateNow < $endTime)
	{
		SetValue($VAR_Sind_Dann_Mal_Weg, "Wir sind dann mal weg!");
		
		IPS_SetEventActive(29968 /*[Scripte & Variablen\Kalender & Termine\Urlaub\Countdown_Timer_Urlaub\Täglich alle 1 Sekunden]*/, false);
	}
	ELSEIF ($DateNow > $endTime)
	{
		SetValue($VAR_Urlaub, "Kein Urlaub geplant");
		SetValue($VAR_Sind_Dann_Mal_Weg, "");
		SetValue($VAR_Dauer_des_Urlaubs, "");
	}


function Dauer($Urlaub_Beginn, $Urlaub_Ende)
{
	// Urlaubsdauer berechnen
	$durationtime1 = date_create($Urlaub_Beginn);
	$durationtime2 = date_create($Urlaub_Ende);
	$durationdiff = date_diff($durationtime1, $durationtime2);
	
	$Dauer = $durationdiff -> format('%a Tage');
	#echo $durationdiff -> format('%R%a Tage');
		
	return $Dauer;
}

?>

Script Countdown_Timer_Urlaub

<?
	
// Integer Variablen um Tag, Monat, Jahr in IPSView einzutragen
$VAR_Minute_Start = GetValue(42190 /*[Scripte & Variablen\Kalender & Termine\Urlaub\Urlaub\Beginn Minute]*/);
$VAR_Stunde_Start = GetValue(25991 /*[Scripte & Variablen\Kalender & Termine\Urlaub\Urlaub\Beginn Stunde]*/);
$VAR_Tag_Start = GetValue(15574 /*[Scripte & Variablen\Kalender & Termine\Urlaub\Urlaub\Beginn Tag]*/);
$VAR_Monat_Start = GetValue(28140 /*[Scripte & Variablen\Kalender & Termine\Urlaub\Urlaub\Beginn Monat]*/);
$VAR_Jahr_Start = GetValue(13063 /*[Scripte & Variablen\Kalender & Termine\Urlaub\Urlaub\Beginn Jahr]*/);

$VAR_Countdown = 15530 /*[Scripte & Variablen\Kalender & Termine\Urlaub\Countdown_Timer_Urlaub\Countdown]*/;

$startTime = GetValue(57192 /*[Scripte & Variablen\Kalender & Termine\Urlaub\Countdown_Timer_Urlaub\StartTime]*/);


	include "include_Countdown_Timer.ips.php";
	
?>

Script include_Countdown_Timer

<?

// Countdown Timer
// include_Countdown_Timer.ips.php

SetValue($VAR_Countdown,Countdown($startTime));


	function Countdown($startTime)
	{	
		// Countdown berechnen
		//Aktuellezeit des microtimestamps nach PHP5, für PHP4 muss eine andere Form genutzt werden.
		$timeNow = microtime(true);
		
		//Berechnet differenz von der Endzeit vom jetzigen Zeitpunkt aus.
		$diffTime = $startTime - $timeNow;
		SetValue(30016 /*[Scripte & Variablen\Kalender & Termine\Urlaub\Countdown_Timer_Urlaub\DiffTime]*/, $diffTime);
		
		//Zerlegt $diffTime am Dezimalpunkt, rundet vorher auf 2 Stellen nach dem Dezimalpunkt und gibt diese zurück.
		$milli = explode(".", round($diffTime, 2));
		$millisec = round($milli[1]);
		
		//Berechnung für Tage, Stunden, Minuten
		$day = floor($diffTime / (24*3600));
		$diffTime = $diffTime % (24*3600);
		$hours = floor($diffTime / (60*60));
		$diffTime = $diffTime % (60*60);
		$minutes = floor($diffTime / 60);
		$seconds = $diffTime % 60;
		
		$Countdown = $day." Tag(e) " .$hours." Stunde(n) " .$minutes." Minute(n) " .$seconds." Sekunde(n)";
								
		IF ($diffTime > 0)
		{
			return $Countdown;
		}
	}

?>

Leider konnte ich bisher noch keine andere Lösung finden, ein Datum in IPSView einzutragen. Deshalb der Weg über mehrere Integer Variablen.

Vielleicht kannst du damit etwas anfangen.

Beste Grüße
Kai

Das Aktionskript ist dazu da um festzulegen was passieren soll, wenn man die Variable im Webfront anklickt. Ohne ein Aktionskript, bei einer selbst erzeugten Variable, kannst Du diese auch nicht im Webfront ändern, siehe auch Dokumentation Aktionskript.

Du kannst das Skript in dem Fall nicht selbst ausführen, da es sich um Systemvariablen handelt. Lies Dir hierzu mal die Dokumentation Systemvariablen durch. Auslöser ist in dem Fall der Webfront, dieser übergibt den Wert, den Du im Webfront eingestellt hast, an das Skript in die Systemvariable und das Skript legst fest, was dannsmit dem Wert weiter passieren soll, in dem Fall wird lediglich der Wert, den Du im Webfront ausgewählt hast, in die Variable geschrieben. Wenn Du das Skript so ausführst, gibt es aber keinen Wert der Variable, da dieser Wert ja vom Webfront erst übergeben wird, daher kommt es in dem Fall zu einer Fehlermeldung, wenn Du versuchst das Skript einzeln auszuführen.

Damit über das Webfront eine Aktion ausgeführt wird

… Wenn ich es ausführe, dann bekomme ich folgende Fehlermeldung. …

Da sollst Du auch nicht dran rumspielen, das funktioniert nur bei Betätigung über das Webfront.

… Sorry bin noch nicht so fit. …

So man die Doku bemüht hätte
Aktionsskripte — IP-Symcon :: Automatisierungssoftware

Gruß
Bruno

Vielen Dank für die Hilfe,

@Kalinho das sieht auch gut aus, ich glaube, ich werde das mal probieren.
Eine Frage hätte ich da noch zu dem anderen Lösungsansatz.
Ich habe jetzt die Variablen angelegt, kann es auch schon über Webfront bedienen, die Variablen werden mit dem Datum versehen. Wie kann ich nun aber über diese Variablen „von“ - „bis“ eine Anwesenheitsvariable steuern? Muss ich dann ein Ereignis hinzufügen? Wie prüfe ich wann das Datum fällig ist, damit ich dann meine Anwesenheit ändern kann.

Gruß

Darius

Dazu braucht es ein Programm, sieh Kai’s „Script Urlaub“, welches die beiden Variablen umrechnet, vergleicht und dann die entsprechende Variable (Abwesenheit) steuert. (Programmteil „Wir sind dann mal weg!“)

Gestartet wird das Programm über ein zeitgesteuertes Ereignis (ein Mal täglich) und vielleicht auch ein zweites Ereignis über die Änderung der Variablen des Urlaubsdatums (falls mal „heute bin ich kurzfristig weg“).

Wo muss den diese include_Countdown_Timer Skript hin?

Irgendwo ins Skriptverzeichnis, nur der Dateiname muss passen.

…so hatte ich mir das auch gedacht, aber irgendwie funktioniert das nicht. Habe das Skript include_Countdown_Timer.ips.php bzw. include_Countdown_Timer.ips benannt.

Die Skript-Instanz oder die Datei?

Die Datei habe ich so benannt.

Screenshot von der Zeile im Symcon bitte. Welche Fehlermeldung kommt im Log?

Welche Zeile meinst du?
Urlaub eintragen.PNG

Meldung:

Notice: Undefined offset: 1 in C:\IP-Symcon\scripts\include_Countdown_Timer.ips.php on line 21

Die Zeile vom angelegten include-Skript. Oder hast Du einfach eine Textdatei erstellt und die dann umbenannt?

Irgendeinen Fehler hast Du in Zeile 1 eingebaut. Leerstelle, …??

Ich habe in Symcon ein Skript erstellt und dann die ID umbenannt

Keine Ahnung woran das liegt.

Hier die Zeile des Skriptes:

Urlaub eintragen 1.PNG

…und der inhalt des skriptes:

<? 

// Countdown Timer 
// include_Countdown_Timer.ips.php 

SetValue($VAR_Countdown,Countdown($startTime)); 


    function Countdown($startTime) 
    {     
        // Countdown berechnen 
        //Aktuellezeit des microtimestamps nach PHP5, für PHP4 muss eine andere Form genutzt werden. 
        $timeNow = microtime(true); 
         
        //Berechnet differenz von der Endzeit vom jetzigen Zeitpunkt aus. 
        $diffTime = $startTime - $timeNow; 
        SetValue(53951 /*[Scripte & Variablen\Kalender & Termine\Urlaub\Countdown_Timer_Urlaub\DiffTime]*/, $diffTime); 
         
        //Zerlegt $diffTime am Dezimalpunkt, rundet vorher auf 2 Stellen nach dem Dezimalpunkt und gibt diese zurück. 
        $milli = explode(".", round($diffTime, 2)); 
        $millisec = round($milli[1]); 
         
        //Berechnung für Tage, Stunden, Minuten 
        $day = floor($diffTime / (24*3600)); 
        $diffTime = $diffTime % (24*3600); 
        $hours = floor($diffTime / (60*60)); 
        $diffTime = $diffTime % (60*60); 
        $minutes = floor($diffTime / 60); 
        $seconds = $diffTime % 60; 
         
        $Countdown = $day." Tag(e) " .$hours." Stunde(n) " .$minutes." Minute(n) " .$seconds." Sekunde(n)"; 
                                 
        IF ($diffTime > 0) 
        { 
            return $Countdown; 
        } 
    } 

?>

Na wenn Du denn Kommentar // nicht in Zeile 4 wegmachst, wird auch nichts included, da die Zeile ja gar nicht verarbeitet wird :eek:.
Außerdem ist include eine Funktion muss also lauten


include("include_Countdown_Timer.ips.php");