Ein Problem mit meinen Timern .....

Hallo Leute,

ich habe ein Problem und kann es einfach nicht lösen.
Vielleicht hat jemand von Euch eine gute Idee - ich ware wirklich dankbar.

Ich schalte über Webfront meine Beregnungsanlage. Es gibt dazu verschiedenste Funktionen und Beregnungsmöglichkeiten. Bei der Version 3.0 war alles ok. Seit dem Update zu 3.1 spinnt das Ganze ein wenig rum.
Ich habe SetEventCyclicDateBounds gegen die neuen Befehle ersetzt.

Wenn die folgende Funktion aufgerufen wird, passiert folgendes:
Timer wird richtig gesetzt jedoch bekomme ich am Webfront folgende Fehlermeldungen:

  • Error Trying reconnect in a few seconds
  • Error Connection lost! NullError: Cannot call „Rn,0)“ on null

Danach wird die Verbindung zu Webfront unterbrochen und sofort wieder aufgebaut - fühlt sich an wie ein Refresh im Explorer. Nehme ist testweise die beiden Zeilen IPS_SetEventCyclicTimeFrom und IPS_SetEventCyclicDateFrom raus, dann wird natürlich der Timer nicht richtig gesetzt, aber die Fehlermeldung verschwindet.

:confused::confused:

Das ist meine Funktion:

function Update_Wait_Timer($CircleId, $ProgramNo, $Value, $ControlId, $Time_until_next_Date)
{
	$Parent_ID = IPS_GetParent($ControlId);
   $Parent_ID = IPS_GetParent($Parent_ID);
   $Parent_ID = IPS_GetParent($Parent_ID);
	$Parent_ID = IPS_GetScriptIDByName(c_Bewaesserung_Regelung, $Parent_ID);                                 	// Script Bewässerungs_Regelung suchen

	if ($Value)
	{
		$New_Timer_Name = "Wait_Timer_".$CircleId."_".$ProgramNo;                                                // Namen für neuen Timer festlegen
		$New_Timer = @IPS_GetEventIDByName($New_Timer_Name, $Parent_ID);
      if ($New_Timer === false) 														                                       // wenn Timer noch nicht existiert
		{
			$New_Timer = IPS_CreateEvent(1);                                                                      // zyklisches Event anlegen
			IPS_SetParent($New_Timer, $Parent_ID);                                                                // Timer wird immer in der Root angelegt - Timer ins richtige Verzeichnis verschieben
			IPS_SetName($New_Timer, $New_Timer_Name);                                                             // Timer Name festlegen
		  	IPS_SetEventScript($New_Timer, $Parent_ID);																				// Aktuelles Skript aufrufen wenn Timer abläuft
	  	   IPS_SetEventCyclic($New_Timer, 1, 0, 0, 0, 0, 0);					                                      	// Timer auf Beregnungsdauer einstellen; einmalig - für CyclicDateTo
		}

		$End_Time = 			time() + $Time_until_next_Date;                                                		// Endzeit für Timer ausrechnen, time() = Zeit ins sec. seit 1.1.1970; $Time_until_next Date = Zeit in sec. bis zum Ablauf des Timers
		$End_Time_Hour = 		idate('H', $End_Time);
		$End_Time_Minute = 	idate('i', $End_Time);
		$End_Time_Second = 	idate('s', $End_Time);
		$End_Time_Year = 		idate('Y', $End_Time);
		$End_Time_Month = 	idate('m', $End_Time);
		$End_Time_Day = 		idate('d', $End_Time);

		IPS_SetEventCyclicTimeFrom($New_Timer, (int)$End_Time_Hour, (int)$End_Time_Minute, (int)$End_Time_Second);	// Ablaufzeit des Timers einsteller - Uhrzeit
		IPS_SetEventCyclicDateFrom($New_Timer, (int)$End_Time_Day, (int)$End_Time_Month, (int)$End_Time_Year);		// Ablaufzeit des Timers einstellen - Datum
      IPS_SetEventActive($New_Timer, true);                                                                    // Timer aktivieren

//    ************ Alte Variante - nur möglich bis IPS 3.0 *******************
//    IPS_SetEventCyclicDateBounds($New_Timer, time()+$Time_until_next_Date, time()+$Time_until_next_Date);    // Enddatum für den Timer festlegen - wird das nicht gemacht läuft der Timer vom alten Wert weiter herunter sonderbarerweise auch wenn dieser zwischenzeitlich gelöscht wird
//    IPS_SetEventCyclicTimeBounds($New_Timer, time()+$Time_until_next_Date, time()+$Time_until_next_Date);    // Endzeit festlegen

	}
	else
	{
		$Timer_Name = "Wait_Timer_".$CircleId."_".$ProgramNo;
      if(@IPS_GetEventIDByName($Timer_Name, $Parent_ID) <> false)                                              // wenn Timer existiert löschen
		   IPS_DeleteEvent(@IPS_GetEventIDByName($Timer_Name, $Parent_ID));
	}
	return;
}

Das klingt nach einem Fehler. Kannst du den vielleicht auch mit einem kleineren Skript reproduzieren?

paresy

Hi,

ich habe mir ein Test-Script geschrieben - schon gestern.
Mit diesem Script funktioniert alles (leider).

Komischerweise ist es auch so, dass IPS_SetEventCyclicDateBounds sowie TimeBounds auch denselben Fehler auslösen. Sprich - auch wenn ich gar nichts ändere passiert der Fehler.

Ich bin heute mal auf 3.0 zurückgestiegen - hatte ein komplettes Backup.
Da funktioniert alles ohne Probleme.

:confused::confused:

lg

Thomas

Da der Fehler hier (http://www.ip-symcon.de/forum/threads/12115-Meldungsanzeige-im-WebFront?p=234962#post234962) ähnlich scheint und auf der 3.2 der Fehler nicht mehr auftritt, haben wir das Problem wahrscheinlich mit dem #3500er Build gelöst. Magst du das ggf. ausprobieren?

paresy

Servus,

natürlich probiere ich das aus.
Kann ich am Wochenende machen, da ich aktuell auf Reisen bin.
Was muss ich tun?

lg

Thomas

Hallo,

mit 3.2 ist alles wieder OK.

lg

Thomas