ini-Datei auslesen, Parameter an Studio-Anwendung übergeben

Programmierung der FHZ-Zentralen mit contronics homeputer Standard / homeputer Studio & WEB-Server

Moderator: Co-Administratoren

buempi
Ehrenmitglied
Beiträge: 12194
Registriert: 29.07.2006, 15:58
Wohnort: Schweiz
Danksagung erhalten: 5 Mal

Re: ini-Datei auslesen, Parameter an Studio-Anwendung übergeben

Beitrag von buempi » 20.12.2009, 20:06

Hallo Maik

Deine Fehlerbeschreibung ist etwas kurz geraten. Zu welchem Fehler kommt es? Zu "Laufzeitfehler in Modul Exec-Engine.... usw." oder zu "Script-Error in Makro INI_Aquarium: Parse error.... usw."?

Kommt es auch zu einem Fehler, wenn unter dem aktuellen Datum ein Eintrag "WeckerUhrzeitWeckerzeit21 = irgendwas" steht?

Oder nur dann, wenn es das aktuelle Datum in der INI gar nicht gibt bzw. keinen entsprechenden Eintrag?

ACHTUNG: Sobald 1x ein Fehler aufgetreten ist, sind alle weiteren Versuche für die Katz, bis Homeputer ganz neu gestartet wurde! Nach jedem Fehler also Homeputer beenden und neu starten. Erst dann weiter am Makro/Skript herumändern bzw. den fehlenden Eintrag in die INI einfügen!

Du hast meinen Vorschlag

Code: Alles auswählen

If ($ini_array[$date][WeckerUhrzeitWeckerzeit11] <> "")
abgeändert in

Code: Alles auswählen

if ($ini_array)
Damit ist es wieder möglich, dass der Fehler "Script-Error..." auftritt, wenn es keinen zutreffenden Eintrag in der INI gibt (keine Sektion mit dem aktuellen Datum, oder kein Eintrag "WeckerUhrzeitWeckerzeit21 = irgendwas" in der Sektion). Dann kommt mit deiner Änderung ein leerer String zurück. Und das bringt PHP <-> Homeputer zum Absturz. Selbst wenn dann beim nächsten Durchgang was in der INI steht: Bis zum Neustart von Homeputer wird es nie mehr laufen und ev. sogar zum "Exec-Engine"-Fehler mit automatischem Neustart des Projektes (nicht von Homeputer!) führen.

Nochmals: Der Fehler tritt ausschliesslich dann auf, wenn von PHP an Homeputer ein leerer String an eine Zeichenvariable zurückgegeben wird. Und zwar erst beim 2. Durchgang. Dafür dann aber immer und ewig, bis Homeputer neu gestartet wurde. Die Rückgabe eines leeren Strings an eine Zahlenvariable wird ignoriert; die Zahlenvariable behält ihren alten Wert und es tritt kein Fehler auf. Deshalb läuft es auch bei der Wecker.ini.

Viele Grüsse
Bümpi

mfreye
Beiträge: 237
Registriert: 22.12.2007, 08:01

Re: ini-Datei auslesen, Parameter an Studio-Anwendung übergeben

Beitrag von mfreye » 20.12.2009, 20:32

Hallo bümpi,

nett das Du Dir immer so viel Mühe gibst! Danke!
Deine Fehlerbeschreibung ist etwas kurz geraten. Zu welchem Fehler kommt es? Zu "Laufzeitfehler in Modul Exec-Engine.... usw." oder zu "Script-Error in Makro INI_Aquarium: Parse error.... usw."?
Sorry, ja genau der Fehler (in Line 1)
Kommt es auch zu einem Fehler, wenn unter dem aktuellen Datum ein Eintrag "WeckerUhrzeitWeckerzeit21 = irgendwas" steht?
Ja, gleich was ich eintrage.
Oder nur dann, wenn es das aktuelle Datum in der INI gar nicht gibt bzw. keinen entsprechenden Eintrag?
Nein das ist gleich, es kommt immer zu diesem Fehler.
ACHTUNG: Sobald 1x ein Fehler aufgetreten ist, sind alle weiteren Versuche für die Katz, bis Homeputer ganz neu gestartet wurde! Nach jedem Fehler also Homeputer beenden und neu starten. Erst dann weiter am Makro/Skript herumändern bzw. den fehlenden Eintrag in die INI einfügen!
Ja, habe ich immer gemacht!
Du hast meinen Vorschlag...
Ja, dachte das wäre das gleich. Ist aber Blödsinn jetzt wird ja nur geschaut ob überhaupt irgendwas in der Datei steht bzw. ob diese vorhanden ist.
Habe ich wieder Rückgängig gemacht, aber leider brachte das auch kein Erfolg.
Nochmals: Der Fehler tritt ausschliesslich dann auf, wenn von PHP an Homeputer ein leerer String an eine Zeichenvariable zurückgegeben wird. Und zwar erst beim 2. Durchgang. Dafür dann aber immer und ewig, bis Homeputer neu gestartet wurde. Die Rückgabe eines leeren Strings an eine Zahlenvariable wird ignoriert; die Zahlenvariable behält ihren alten Wert und es tritt kein Fehler auf. Deshalb läuft es auch bei der Wecker.ini.
Ja OK.

Habe jetzt das ganze so geändert:

Code: Alles auswählen

wenn uhrzeit =# "00:00:**" dann
 verlassen
endewenn

** PHP Teil
<?

// Uhrzeit und Datum jetzt zuweisen
$timestamp = time();
$date = date("d.m.Y",$timestamp);
$time = date("H:i:s",$timestamp);
$symbole = "-";
$symboletime = "$symbole$time";

// INI Datei lesen und Werte zuweisen
$ini_array = parse_ini_file ("Z:\\HomeStudio\\HomeStudio_Einstellungsverwaltung\\INI\\Aquarium.ini", TRUE);

If ($ini_array[$datum][WeckerUhrzeitWeckerzeit21] <> "")

{

$V_INI_Aquarium_Deckenlampe1 = $ini_array[$date][WeckerUhrzeitWeckerzeit21];

} else {

$V_INI_Aquarium_Deckenlampe1 = "00:00:**"

}
?>

** Deckenlampe 1 Schlafzimmer
wenn uhrzeit =# Deckenlampe1 dann
 EM_SC_DE_1211.EIN_WECKER einschalten
 starte(EM_SC_DE_1211)
endewenn

MfG
MFreye

mfreye
Beiträge: 237
Registriert: 22.12.2007, 08:01

Re: ini-Datei auslesen, Parameter an Studio-Anwendung übergeben

Beitrag von mfreye » 20.12.2009, 21:15

Hey Bümpi,

selbst das für zu dem Fehler:

Code: Alles auswählen

wenn uhrzeit =# "00:00:**" dann
 verlassen
endewenn

** PHP Teil
<?

// Uhrzeit und Datum jetzt zuweisen
$timestamp = time();
$date = date("d.m.Y",$timestamp);
$time = date("H:i:s",$timestamp);
$symbole = "-";
$symboletime = "$symbole$time";

// INI Datei lesen und Werte zuweisen




$V_INI_Aquarium_Deckenlampe1 = "00:00:**"


?>

** Deckenlampe 1 Schlafzimmer
wenn uhrzeit =# Deckenlampe1 dann
 EM_SC_DE_1211.EIN_WECKER einschalten
 starte(EM_SC_DE_1211)
endewenn
MfG
MFreye

buempi
Ehrenmitglied
Beiträge: 12194
Registriert: 29.07.2006, 15:58
Wohnort: Schweiz
Danksagung erhalten: 5 Mal

Re: ini-Datei auslesen, Parameter an Studio-Anwendung übergeben

Beitrag von buempi » 20.12.2009, 22:42

Hallo Maik

Dieses verkürzte Makro führt auch zum Fehler "Script-Error in Makro INI_Aquarium: Parse error.... usw."? Und das, NACHDEM du Homeputer (nicht nur das Projekt!) beendigt und neu gestartet hast? Beim ersten Durchgang, oder beim zweiten oder erst später irgendwann?

Bei mir funktioniert es problemlos, auch mehrmals hintereinander, obwohl eigentlich ein ";" fehlt.

Ich bin jetzt ratlos. Bleibt nur eine ziemlich gewagte Theorie, an die ich eigentlich selbst nicht glaube: Im Makro INI_Wecker werden ja auch leere Strings zurückgegeben. Allerdings an Zahlenvariablen, weshalb dort keine Fehler auftreten. Vielleicht wird dadurch aber in Homeputer trotzdem der Schalter auf "spinnen" umgestellt, und Homeputer spinnt dann tatsächlich beim nächsten Mal, sobald eine Zuweisung an eine Zeichenvariable erfolgt?

Um das auszuschliessen, müsstest du alle Makros deaktivieren, in welchen die Möglichkeit besteht, dass "NICHTS" zurückgegeben wird. Wenn das Problem damit behoben sein sollte, müsstest du in all diesen Makros auch entsprechende IF-Bedingungen einfügen.

Viele Grüsse
Bümpi

PS: Sehe eben noch: Im vorletzten Beitrag hast du die IF-Bedingung zwar abgeändert aber mit $Datum statt $date! Das dürfte aber nicht zum "Leerstring-Fehler" führen, sondern einfach dazu, dass immer "00:00:**" zurückgegeben wird.

mfreye
Beiträge: 237
Registriert: 22.12.2007, 08:01

Re: ini-Datei auslesen, Parameter an Studio-Anwendung übergeben

Beitrag von mfreye » 24.12.2009, 16:35

Hallo!

Also ich bin nochmal von vorne Angefangen. Habe ein neues Test Projekt angelegt und dort nur die INI Aquarium angelegt.
Alles lief, wie es soll und wie Du (Bümpi) es gesagt hat.
Also die INI Wecker hinzugefügt, hier frage ich jetzt auch die Strings ab, ob diese leer sind.
Alles lief, wie es soll.
Also habe ich das ganze jetzt im Projekt angelegt und die Inhalte kopiert.
Alles lief, wie es soll.
Dann habe ich etwas geändert und dadurch einen Fehler verursacht. Wieder rückgängig gemacht und HP neu gestartet.
Nichts ging mehr. Toll!
Also habe ich wieder das Test Projekt genommen und dort einen Fehler eingebaut.
Auch hier lief danach nichts mehr!
Da ich dann keinen Bock mehr hatte, habe ich erst einmal ein paar Überweisungen Online gemacht. Dazu muss ich den Rechner neu starten und auf eine andere Partition wechseln (wegen der Sicherheit).
Dann habe ich noch mal das Test Projekt geladen und es ging alles wieder :roll:
Also wieder einen Fehler eingebaut, HP gestartet, Fehler raus genommen, HP neu gestartet und es ging wieder nichts. Also habe ich den Rechner neu gestartet, danach ging auch das Makro in dem Test Projekt wieder.

Um es kurz zu machen, wenn ich eine Fehler im PHP habe reicht es nicht HP neu zu starten, erst wenn ich den Rechner neu starte, geht auch HP wieder.
Eine andere Möglichkeit ist es, HP über den Taskmanager zu beenden, was aber nicht toll ist.

Zu Info: Wenn ich HP beende finde ich dieses aber auch nicht unter Prozesse, also sollte es doch beendet sein?!

MfG
Maik

Allen schöne Weihnachten!

buempi
Ehrenmitglied
Beiträge: 12194
Registriert: 29.07.2006, 15:58
Wohnort: Schweiz
Danksagung erhalten: 5 Mal

Re: ini-Datei auslesen, Parameter an Studio-Anwendung übergeben

Beitrag von buempi » 24.12.2009, 17:02

Hallo Maik
mfreye hat geschrieben:wenn ich eine Fehler im PHP habe reicht es nicht HP neu zu starten, erst wenn ich den Rechner neu starte, geht auch HP wieder
Das hatte ich noch nie. Bei mir hat es bisher immer genügt, Homeputer neu zu starten. Aber gut zu wissen, dass man bei hartnäckigen "PHP-Homeputer-Leerstring-Fehlern" sogar noch weiter gehen und einen Reboot machen muss!

Und natürlich gut zu wissen, dass das Skript bei dir jetzt läuft, und du auch die Weihnachtsbeleuchtung für die Fische richtig steuern kannst :wink:

In diesem Sinne: Frohes Fest an alle!

Bümpi

Antworten

Zurück zu „homeputer Studio / Standard: Programmierbeispiele“