Fragen zur webfront.info Demoseite

Hallo Community,

habe heute die webfront.info Domeseite, aus Interesse, in die IP-Symcon App eingebunden und sah das hier schon ein gewaltiger Unterschied ist zwischen Webbrowser und App. Wie kommt das zustande?

Was ich noch gesehen habe ist das auf der Startseite der App die Räume nicht nur als Menüpunkt angezeigt werden sondern gleich mit deren Inhalt. Was ich gerne hätte wäre eine Gruppierung von Variablen die auch in der App dargestellt werden. Da wenn ich eine Kategorie als Überobjekt nehme, springt die Kategorie in die Menüleiste. Wenn ich eine Variable als Überobjekt nehmen, werden die Variablen unterhalb nicht dargestellt.

Was noch sehr interessant war, war der Heitplan in der App, den ich im Webbrowser nicht finden konnte. Hier konnten Zeiten schon über zwei scroll Buttons eingetragen werden. Dazu konnte außerdem eine vordefinierte Temperatur ausgewählt werden. Wie geht das?

Gruß
almdandi

Hast du das hier gelesen?
Dort werden die meisten deiner Fragen beantwortet:
Mobile — IP-Symcon :: Automatisierungssoftware
Michael

Hallo Nall-chan,

Danke. Habe alles gefunden. Dennoch habe ich noch ein Verständnisproblem.

Ich habe zwei Integer Variablen angelegt, eine für den Startzeitpunkt und eine für den Endzeitpunkt. Beiden haben das Profil „~UnixTimestampTime“. Jetzt setzte ich die beiden über das WebFront auf 12 und 13 Uhr z.B. In den Variablen steht jetzt 39600 und 43200. Wenn ich die beiden Variablenwerte jetzt durch 3600 dividiere kommt 11 und 12 raus. Nur was ist das für eine Zeitzone?

Weil UTC ist es nicht und Europe/Vienna ist es auch nicht, es ist ja Sommerzeit.

Output von timedatectl

Local time: Mon 2017-04-24 10:35:30 CEST
Universal time: Mon 2017-04-24 08:35:30 UTC
RTC time: Mon 2017-04-24 08:35:30
Time zone: Europe/Vienna (CEST, +0200)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: yes
Last DST change: DST began at
    Son 2017-03-26 01:59:59 CET
    Son 2017-03-26 03:00:00 CEST
Next DST change: DST ends (the clock jumps one hour backwards) at
    Son 2017-10-29 02:59:59 CEST
    Son 2017-10-29 02:00:00 CET

Mein Code sieht so aus:


$startVarId = IPS_GetVariableIDByName("Start", $timespan);
$endVarId = IPS_GetVariableIDByName("Ende", $timespan);
                        
$start = GetValueInteger($startVarId); // 39600 (11)
$end = GetValueInteger($endVarId); // 43200 (12)

$secondsOfDay = time() % (24 * 3600); // 34308 (9,31) - Ist UTC

if($start <= $secondsOfDay && $secondsOfDay <= $end) {
    // Do Stuff
}


mfg
almdandi

Was du den vor, aktuell verstehe ich nicht was du erreichen möchtest.
Michael

Ich baue mir einen Heizplan. Jeder Wochentag ist eine eigenen Kategorie. In der Tagskategorie sind Dummy Modul Instanzen. Diese enthalten zwei Integer Variablen mit dem „~UnixTimestampTime“ Profil, eben eine für den Startzeitpunkt und eine für den Endzeitpunkt.

Sieht so aus:
Heizplan.PNG

Mein Code sieht so aus:

<?

const WEEKDAYS = array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
$dw = date("w", time());

// Name des aktuellen Wochentages
$dayName = WEEKDAYS[$dw];

if($heatplanDay = IPS_GetCategoryIDByName($dayName, $CONFIG["headcontrol"]["plan"])) {
	
	// Alle Zeitspannen des aktuellen Tags (alle Dummy Modul Instanzen)
	$timespans = IPS_GetChildrenIDs($heatplanDay);

	// Sotiert alle Zeitspannen, anhand ihrer Position
	$objOrders = array();
	foreach ($timespans as $key => $row) {
		$objOrders[$key] = IPS_GetObject($row)['ObjectPosition'];
	}
	array_multisort($objOrders, SORT_ASC, $timespans);

	// Durchlafen aller Zeitspannen.
	foreach($timespans as $timespan) {

		// Hold die Id's von den Integer Variablen
		$startVarId = IPS_GetVariableIDByName("Start", $timespan);
		$endVarId = IPS_GetVariableIDByName("Ende", $timespan);
		
		// Liest die aktuellen Werte der beiden Variablen aus.
		$start = GetValueInteger($startVarId);
		$end = GetValueInteger($endVarId);
		
		// Sekunden des aktuellen Tags
		$secondsOfDay = time() % (24 * 3600);

		echo "Variable Start: " . $start . "
";
		echo "Variable Ende: " . $end . "
";
		echo "Seconds of Day: " . $secondsOfDay . "
";

		echo "Start (GetValueFormatted): " . GetValueFormatted($startVarId) . "
";
		echo "End (GetValueFormatted): " . GetValueFormatted($endVarId) . "
";

		echo "-----------------------------------------
";

		if($start <= $secondsOfDay && $secondsOfDay <= $end) {
			$presence = true;
			break;
		}
	}
}

Die Ausgabe vom Script ist folgende:

Variable Start: 46800
Variable Ende: 50400
Seconds of Day: 41862
Start (GetValueFormatted): 14:00:00
End (GetValueFormatted): 15:00:00
-----------------------------------------

Wo mein Problem jetzt liegt: Wenn ich den Inhalt der Start und Ende Variable durch 3600 Sekunden definiere kommt immer eine Stunde weniger raus als ich im WebFront eingestellt habe. Nur passt dann das if Statment nicht weil $secondsOfDay ist in UTC. Meine Frage ist jetzt, was ist das für eine Zeitzone für die beiden Integer Variablen. Weil UTC ist es nicht und Localtime ist es auch nicht weil Sommerzeit ist.

Was mir noch aufgefallen ist, dass GetValueFormatted immer die richtige Zeit zurück gibt, die die im WebFront eingestellt ist.

mfg
almdandi

UnixTimestamp sind in IP-Symcon immer UTC/GMT.

paresy

Hast du timedatectl unter dem gleichen User ausgeführt unter welchem IPS läuft?

Wobei ich mich jetzt Frage, warum du den Wochenplan nachbaust, wo IPS doch schon einen mitbringen?

Michael

@Nall-chan

Was meinst du genau. Meinst du die Kalender Kern Instanz? Was ich bräuchte wäre eine Möglichkeit für jeden Tag, Anwesenheitzeiten über das WebFront und App einzutragen.

mfg
almdandi

Nimm den Wochenplan.
Wochenplan — IP-Symcon :: Automatisierungssoftware
Michael