IP-Symcon's Settings seem to be corrupted!

Habe immer beim Start oben genannte Fehlermeldung.:frowning:
Wenn ich beim Start dann eine älteres Backup wähle startet zwar IPS, aber beim Beenden und Neustart kommt die gleiche Fehlermeldung wieder.

Und alle Variablen haben den falschen Wert. Gibt es da eine Lösung, außer eine alte Datensicherung?

Thomas

Finde leider den Fehler nicht, aber vieleicht hat jemand noch eine Idee…
Folgende Vorgehensweise geht immer:

  1. altes Backup aufspielen über aktuelles IPSYMCON Vz.
  2. erster Start fkt. immer
  3. sofortiges Herunterfahren von IPS
  4. zweiter Start bringt wieder Fehlermeldung

Denke beim Herunterfahren muß es mir irgendwie die Settings zerstören.

Aber warum?

Thomas

Ich habe den Fehler auch schon des Öfteren in letzter Zeit gehabt ich konnte ihn aber bisher nie nachstellen.

Kannst du mal ein Logfile anhängen?

paresy

Hallo paresy,

danke das Du dir das Problem mal anschaust. Letztes Log im Anhang.

Thomas

logfile1188764018.rar (127 KB)

Kannst du mal, bevor du IPS beendest, die Variable los_ausgabe und log_text leer machen. Die scheinen mir ein wenig zu lang und werden vermutlich die Settings dadurch verschießen.

paresy

Hallo,

ich habe diese Fehlermeldung mittlerweile jede Nacht gehabt. Ich wollte die ‚Einmal-pro-Nacht-IPS-neu-starten‘-Prozedur wieder einführen, doch jedesmal, wenn IPS per Skript runterfuhr, konnte es es nicht neu starten und blieb dann einfach hängen. Dann habe ich diese Idee eben wieder verworfen

mfG Franz

Hallo paresy,

klingt erstmal gut die Idee, hatte auch mal, ins Log geschaut und mir ist Dort auch der ewig lange Textblock aufgefallen. Werde mein eigenes Loggingscript mal auschalten, die Variablen leeren und es heute zu Hause probieren und melde mich dann.
Vieleicht ist das bei Franz das gleiche, er ist doch auch so ein Logging Fetischist.:smiley:

MfG Thomas

@paresy

:smiley: Super Klasse :smiley:

Das wars, die beiden Variablen waren scheinbar zu lang fürs IPS…

Gibt es da eine Beschränkung?
Muß hier sonst ganz schön mein Loggingscript umstricken.

Thomas

Speichere doch deine Logging Daten in eine Datei… das sollte eigentlich nicht viel ‚umstrickarbeit‘ bereiten. Oder brauchst du sie im Designer? Dann speichere sie im Kontext des IPS-Webservers ab und rufe sie mit dem Designer Webbrowser auf.

Gruss
Olli

Hallo Olli,

speicher das Logg schon in einer Datei, und zusätzlich die letzten 1000 Loggeinträge in einer Variablen die ich dann in ein array wandle und halt wieder zurück um diese mit diversen Filtern besser im Designer anzeigen zu können, vieleicht hast Du eine Idee wie ich das machen kann.
Hier das Script:


include("C:/Programme/IP-Symcon/scripts/Konstanten.ips.php");
  
 //------------- Loggen von wichtigen Variablen- & Scriptänderungen ------------

 if ($IPS_SENDER=="Variable" or  $IPS_COMPONENT == "filter")
 {
 
 $trig_var = $IPS_VARIABLE; // Variable die getriggert hat
 $trig_val = $IPS_VALUE; // Wert der Variablen
 $Datentyp = IPS_GetVariableType($IPS_VARIABLE); // Variablentyp bestimmen
 
 //---------------------- Variablentypen Texte zuweisen ------------------------
 
 if ($Datentyp == "Boolean" and $trig_val =="1")
 {
 $trig_val = "an";
 }
 else
 {
 if ($Datentyp == "Boolean")
 {
 $trig_val = "aus";
 }
 }

 //-------------- Textfile/Variable anlegen für Designer Memo Feld -------------

 //aktelle Meldung
 if($trig_var != "log_menge") // Trigger Anzahl Werte nicht aufzeichnen
 {
 $log_neu = (date("d.m.y")." ". date("H:i:s")." = ".$trig_var." = Wert: "
 .$trig_val." = Typ: ".$Datentyp."
");
 }
 
 $log_text = GetValueString("log_text"); // globale Variable zurückholen
 $log_ausgabe = explode("
", $log_text); // Variable String in array umwandeln
 $werte = count($log_ausgabe); // Werte zählen

 if ($werte == 1000) // max. Anzahl für $log_text Inhalt
 {
 unset ($log_ausgabe[0]); // einen löschen, den ersten
 $log_text = array_merge($log_ausgabe);
 $log_text = implode("
", $log_text); // in String zurück
 }

 if ($IPS_COMPONENT != "filter")
 {
 $log_text = $log_text.$log_neu; //aktuelle Meldung
 SetValueString("log_text", $log_text);
 }
 
 //--------------------- hier wird gefiltert für den Designer -------------------
 
 $log_text = GetValueString("log_text"); // globale Variable zurückholen
 $log_ausgabe = explode("
", $log_text); // Variable String in array umwandeln

 $werte = count($log_ausgabe); // Werte zählen

 for ($i=0; $i<$werte-$log_menge-1; $i++)
 {
 unset ($log_ausgabe[$i]);
 }
 
 // Filter 1
 $Filter_1 = GetValueBoolean("Filter_1");
 If ($Filter_1)
 {
 for ($i=0; $i<1000; $i++)
 {
 if(stristr($log_ausgabe[$i], 'Bewegungsmelder'))
 {
 //nichts machen
 }
 else
 {
 unset ($log_ausgabe[$i]); //löschen
 }
 }
 }

 // Filter 2
 $Filter_2 = GetValueBoolean("Filter_2");
 If ($Filter_2)
 {
 for ($i=0; $i<1000; $i++)
 {
 if(stristr($log_ausgabe[$i], 'Steckdose'))
 {
 //nichts machen
 }
 else
 {
 unset ($log_ausgabe[$i]); //löschen
 }
 }
 }
 
 // Filter 3
 $Filter_3 = GetValueBoolean("Filter_3");
 If ($Filter_3)
 {
 for ($i=0; $i<1000; $i++)
 {
 if(stristr($log_ausgabe[$i], 'Aufloesung'))
 {
 //nichts machen
 }
 else
 {
 unset ($log_ausgabe[$i]); //löschen
 }
 }
 }
 
 // Filter 4
 $Filter_4 = GetValueBoolean("Filter_4");
 If ($Filter_4)
 {
 for ($i=0; $i<1000; $i++)
 {
 if(stristr($log_ausgabe[$i], 'Mail'))
 {
 //nichts machen
 }
 else
 {
 unset ($log_ausgabe[$i]); //löschen
 }
 }
 }
 
 // Filter 5
 $Filter_5 = GetValueBoolean("Filter_5");
 If ($Filter_5)
 {
 for ($i=0; $i<1000; $i++)
 {
 if(stristr($log_ausgabe[$i], 'Touch'))
 {
 //nichts machen
 }
 else
 {
 unset ($log_ausgabe[$i]); //löschen
 }
 }
 }
 
 // Filter 6
 $Filter_6 = GetValueBoolean("Filter_6");
 If ($Filter_6)
 {
 for ($i=0; $i<1000; $i++)
 {
 if(stristr($log_ausgabe[$i], 'script'))
 {
 //nichts machen
 }
 else
 {
 unset ($log_ausgabe[$i]); //löschen
 }
 }
 }
 
 // Filter 7
 $Filter_7 = GetValueBoolean("Filter_7");
 If ($Filter_7)
 {
 for ($i=0; $i<1000; $i++)
 {
 if(stristr($log_ausgabe[$i], 'dimmer'))
 {
 //nichts machen
 }
 else
 {
 unset ($log_ausgabe[$i]); //löschen
 }
 }
 }
 
 $log_ausgabe = implode("
", $log_ausgabe); // in String zurück zum Designer
 SetValueString("log_ausgabe", $log_ausgabe);

 //------ jede neue Meldung in Loggfile schreiben damit nichts verloren geht -------
 
 $handle=fopen("c:/logfile.txt", "a");
 fwrite($handle, $log_neu);
 fclose($handle);

 }

ich habe das Problem auch, wenn ich ips manuell (shutdown) beende und dann wieder starten möchte. Dann muss ich immer das Backup der letzten Nacht nutzen, wodurch natürlich die Werte des aktuellen Tages weg sind.

Tommi

Hast Du denn schon geschaut ob Du auch einen Überlauf einer Variablen hast?
Das war es bei mir, hatte einfach über 1000 Loggeinträge eines arrays in eine Variable abgelegt.

Gruß Thomas

Ich habe auch sehr lange Strong Variablen, doch komischerweise funktionniert das manuelle Runterfahren tadellos, nur das ‚per Skript‘ runterfahren geht nicht mehr, seit…ja, seit wann, ich weis es nicht mehr

mfG Franz

Naja, habe diese Variablen zur Probe einfach mal leer gemacht und dann gings.

@Franz
Mach doch einfach mal eine Datensicherung, fahre per Script mal runter und schicke dann das letzte Logg mal paresy, der findet bestimmt den Fehler.
Sonst ärgerst Du Dich doch nur rum.

MfG Thomas

Ich werde das mal probieren

mfG franz

Ja, habe ich nachgesehen. Nichts zu sehen.Aber auch so ist meine settings.xml 100k gross. Ist das schon zu gross?

Tommi

Tommi, meine ist 600kb gross, dann dürfte dies eine unwesentliche Rolle spielen bei 100kB

mfG Franz