Code-Review: Methode um Wochenplan (7 Tage) abzufragen

Hallo.

Ich habe mir eine kleine Funktion geschrieben die mir zu einem 7-Tage Wochenplan die aktuell gültige ActionId zurück liefern soll.

Meistens funktioniert das, aber manchmal passt das Ergebnis nicht. Da ich leider vom vielen draufschauen etwas „Betriebsblind“ bin wäre es toll, wenn vielleicht jemand von euch auch draufschauen könnte.

Thx :slight_smile:

function T_GetWochenplanAction($EventID)
{
	$a = IPS_GetEvent($EventID);
	
	$tag = date('N') - 1;
	$stunde = date('G');
	$minute = date('i');
	
	if(count($a['ScheduleGroups']) == 7)
	{
		// Wochenplan für jeden Tag
		$heute = $a['ScheduleGroups'][$tag]['Points'];
		foreach($heute as $heuteDetails)
		{
			if($stunde >= $heuteDetails['Start']['Hour'])
			{
				if($minute >= $heuteDetails['Start']['Minute'])
				{
					$actionID = $heuteDetails['ActionID'];
				}
			}
				
		}
		
		// Den "spätesten" treffenden Wert ausgeben
		return $actionID;
	}
}

Hintergrund der Logik ist: Bspw. wenn ich nach einer Abwesenheit wieder nach Hause komme, dann möchte ich die Solltemperaturen auf den Wert stellen die sie zu dieser Zeit haben sollte und nicht pauschal auf den Wert vor der Abwesenheit.

Gruß
Thorsten

Hallo Thorsten,

du gehst in deinem Code davon aus, dass die Elemente von $a[‚ScheduleGroups‘] nach Wochentagen sortiert sind. Dem muss aber nicht so sein. Der Wochentag steht in dem Element [Days] der ScheduleGroup. Du musst die passende Gruppe erst suchen.

Gruß

Burkhard

Argh! Super Hinweis.
Das sollte erklären, warum es manchmal stimmt und manchmal nicht.

Danke & Gruß
Thorsten

Gesendet von meinem NEM-L51 mit Tapatalk

Bin mir jetzt doch nicht mehr ganz so sicher.

$heute = $a['ScheduleGroups'][[b]$tag[/b]]['Points'];

Das Array liefert mir die Werte 0-6 bei einem 7-Tage Wochenplan zurück. Da ging ich davon aus, dass das der Wochentag (Mo-So) ist.
Daher wollte ich damit den heutigen Tag einschränken.

$tag = date('N') - 1; 

Das Element [Days] scheint mir eine Bitmaske zu sein - siehe „Tabelle Tageswerte“ unter IPS_SetEventCyclic — IP-Symcon :: Automatisierungssoftware).
Allerdings würde das dazu passen. Die Werte unter „Days“ gehen von 1 bis 64 und passen zu dem Wochentag 0-6 (siehe oben).

Irgendwie bin ich etwas verwirrt :confused:

Gruß
Thorsten

Hier ist es beschrieben: IPS_SetEventScheduleGroup — IP-Symcon :: Automatisierungssoftware