Brauche dringend Starthilfe!

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

Moderator: Co-Administratoren

Benutzeravatar
Sanys
Beiträge: 270
Registriert: 31.01.2007, 12:29
Wohnort: Wetterau

Re: Brauche dringend Starthilfe!

Beitrag von Sanys » 29.09.2009, 08:24

Hallo Dragonius,

nette Anwendung, die Du da am entwickeln bist.
Ich hätte da vielleicht noch ein paar Anregungen, die ich auch bei mir für ähnliche Fälle eingebaut habe.

Für den Fall, dass Du so wie bisher vorgehen möchtest (d.h. Datei lesen und die letzten 10 Zeilen zur Anzeige bringen) würde ich nicht jedesmal die Datei neu lesen und das Makro ausführen, sondern nur wenn sich etwas geändert hat. Dafür kann man mittels php das Änderungsdatum der Datei auslesen und mit einem in Studio zwischengespeicherten Wert vergleichen. Dazu muß in Studio eine Variable vom Typ Zahl existieren. Beispielhaft habe ich das Objekt, welches das Makro enthält, mal "Alarmobjekt" genannt, dort ist die Variable "LastFileMod" vom Typ Zahl mit Startwert 0 definiert.
Das Makro kann nun alle 5 sek. laufen, die Datei wird aber nur gelesen wenn sie geändert wurde, entsprechend wird auch nur dann die Ausgabe in Studio geändert.
Das würde so aussehen:

Code: Alles auswählen

<?

$datafile = 'c:\feuerwehr-sms\webalarm\alarmierung.txt';

if (File_exists($datafile)) {

	// Letztes Mod-Datum der Datei lesen
	$ModTime =  filemtime($datafile);
	
	//vergleichen des Modifikationsdatums der Datei mit dem in Studio zwischengespeicherten Wert
	if ( $ModTime != $V_Alarmobjekt_LastFileMod ) {
	
		/*
		hier kommt Dein bisheriger php-Code rein
		
		*/
	
                // Makro ist durch, also LastFileMod neu setzen
		$V_Alarmobjekt_LastFileMod = $ModTime;
		}
		
	} else {
	// hier kann etwas stehen, was bei Datei unlesbar ausgeführt wird, z.B. eine Variable in Studio entsprechend schreiben
	}
?>
Beim Studiostart ist der Vergleichswert 0, es wird also auf jeden Fall die Datei gelesen.

Weitere Überlegung: Warum 10 Zeilen lesen und nicht nur die letzte? Einzig nach einem Studio-Start wäre die Liste kurz, erst nach weiteren 9 Meldungen hättest Du wieder die letzten 10 angezeigt.
Vorteil: Die Formatierung in Studio ist einfacher, da Du ja nur

Code: Alles auswählen

Anzeige := NeueMeldung + "<<" + Anzeige
schreiben musst. Dadurch steht die neueste Medung oben, der Rest wandert nach unten.
Ausserdem wäre eine Auswertung nach Wichtigkeit einfacher, da immer nur die letze Meldung verarbeitet werden musst und das wird immer nur getan, wenn sich etwas geändert hat!
Letzte Zeile vom Array bekommst Du mit array_pop.

Da es sein kann, dass Studio Probleme macht, wenn eine Variable (in diesem Fall Anzeige) immer größer wird habe ich hier ein paar php Zeilen geschrieben, die die Ausgabe zeilenweise begrenzt. Das würde ich bei o.g. Vorgehen mit einbauen.

Auswerung nach Wichtigkeit: Kannst Du da mal Beispiele posten, wie sich die Meldungen unterscheiden und was dann jeweils passieren soll. ....riecht so ein bisschen nach regulären Ausdrücken, die da angewendet werden möchten...


Viel Erfolg!


Sanys
FHZ 1350PC Prof. mit HomeputerStudio 100224 + Direktsendebefehle à la tsa (v 8.0)
WIN XP Pro SP3 (neuester Stand) + buempi's Minibrowser + etliche fs20+HMS+FHT Komponenten + nie genug Zeit, das alles fertig zu bekommen ;-)

dragonius
Beiträge: 50
Registriert: 27.09.2009, 09:14

Re: Brauche dringend Starthilfe!

Beitrag von dragonius » 01.10.2009, 20:05

Moin, moin!

Klingt prima was Du da vorschlägst. Gerade die Idee mit dem Datumsabgleich. Hier müsste aber eher die Uhrzeit zur Anwendung kommen, da ja an einem Tag durchaus mehrere Alarmierungen auflaufen können. //Edit: Übersehen, geht ja ums Dateidatum. Das klappt natürlich!!
Ich stehe noch am Anfang von PHP und was so noch alles möglich ist. Ideen gibts da viele. Leider bin ich noch "Programmierer der alten Schule" und habe zu 99% COBOL programmiert (kennt das überhaupt noch einer? :oops: ). Aber man kann alles lernen. :D
Die letzten 10 Einträge sollen angezeigt werden, da zu einem Einsatz durchaus mehrere Wehren alarmiert werden. Ist für mich in sofern wichtig als das man daran schon ungefähr erkennen kann ob nur ein "Notfall: Fisch im Wasser" anliegt oder doch was ernstes. Deine Modifikationen werden ich aber mal genauer betrachten und einbauen.
Wenn ich das dann geschafft habe, soll natürlich innerhalb von Homeputer bei der Alarmierung meiner eigenen 10 Feuerwehren eine bestimmte Aktion ausgeführt werden. Momentan gibt mein Touchscreen noch kein Ton von sich, aber eine schicke "ALARM-Ansicht" mit Ausgabe der entsprechenden Wehr(en) wäre für alle im Haus natürlich hilfreich. Hier bin ich für jede Hilfe und jeden Vorschlag zur Realisierung dankbar (Ich kämpfe da sonst wieder den ganzen Winter dran und das gibt mecker von der Regierung! :D )
Übergeben werden per Errorlevel folgende Daten in eine Textdatei:

Code: Alles auswählen

28.09.2009: 16:13:30,11 Uhr, FF-FLEExxxxx  
28.09.2009: 16:13:32,09 Uhr, GBM-xxxxxL 
28.09.2009: 22:08:42,47 Uhr, FF-xxxxxxxxx  
28.09.2009: 22:08:44,45 Uhr, GBMxxxxxxx
29.09.2009:  8:42:14,38 Uhr, FF-xxxxxx  
Eine Auswertung nach Wichtigkeit kann also über den entsprechenden Namen der Wehr realisiert werden. (Z.B. "FF-Drage").
Eine Frage noch ma Rande: Per Errorlevel wird die komplette Zeit ausgegeben. Ne Idee wie man das auf HH:mm reduzieren kann?

Gruß
Dragonius

dragonius
Beiträge: 50
Registriert: 27.09.2009, 09:14

Re: Brauche dringend Starthilfe!

Beitrag von dragonius » 01.10.2009, 20:37

Ääääähm... Habs nun gerade mal eingebaut. Funktioniert ja auch. Aaaaaaber! :D :

Das MAKRO wird wie beschrieben natürlich nur ausgeführt, wenn das Änderungsdatum der Datei ungleich dessen in der Variablen ist. Im Klartext: Er zeigt die Werte genau 5 Sekunden an.... Danach ist das Datum gleich und er luschert nicht mehr in die Datei, folglich gibts auch nichts auf der Anzeige.....

Der Code sieht nun so aus (ohne "Dateivorhanden" Abfrage):

Code: Alles auswählen

<?

$datafile = 'c:\feuerwehr-sms\webalarm\alarmierung.txt';

   // Letztes Mod-Datum der Datei lesen
   $ModTime =  filemtime($datafile);
   
   //vergleichen des Modifikationsdatums der Datei mit dem in Studio zwischengespeicherten Wert
if ( $ModTime != $V_Alarmobjekt_LastFileMod ) {
   
	//Datei jede Zeile in Array-Element aufteilen
$array = file('c:\feuerwehr-sms\webalarm\alarmierung.txt');
        //Anzahl Zeilen zählen
$count = count($array);
        //Gesamtanzahl minus anzuzeigender Zeilen
$zahler = $count-10;
        //Jede Zeile durchgehen
for($i=$count; $i >= $zahler; $i--)
{
$array[$i] = str_replace("”","ö",$array[$i]);
$array[$i] = str_replace("„","ä",$array[$i]);
$array[$i] = str_replace("","ü",$array[$i]);
$array[$i] = str_replace("\x0d\x0a","<<",$array[$i]);
    echo $array[$i];
}
      
   
                // Makro ist durch, also LastFileMod neu setzen
      $V_Alarmobjekt_LastFileMod = $ModTime;
 }

?>

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

Re: Brauche dringend Starthilfe!

Beitrag von buempi » 03.10.2009, 08:32

Hallo Dragonius

Was das Abschneiden der Sekunden betrifft, kannst du das so machen:

Code: Alles auswählen

@echo off
set Var=16:13:30,11
set Var=%Var:~0,5%
echo %Var%

REM Ausgabe: 16:13

REM oder direkt:
set Var=%Time:~0,5%
Was den PHP-Teil betrifft: Da du bei unverändertem Zeitstempel (eine sehr gute Idee von Sanys!) nichts in Scriptoutput schreibst, wird in dein Anzeige-Objekt mit der Anweisung "Anzeige := Scriptoutput" natürlich "" geschrieben. Das kannst du verhindern, indem du den Homeputer-Teil wie folgt abänderst:

Code: Alles auswählen

wenn Scriptoutput <> "" dann
   Anzeige := Scriptoutput
endewenn
Das Problem mit den Grossalarmen könnte man am elegantesten lösen, wenn dein Programm, welches die Batch startet, bei solchen Alarmen ExecStudioCo.exe starten könnte. Zum Beispiel mit dem Befehl

Code: Alles auswählen

ExecStudioCo sAlarmschalter=1
Damit würde in Homeputer der (virtuelle) Alarmschalter eingeschaltet und über "Ausführen bei Änderung" würde dann das dort hinterlegte Makro alle gewünschten Alarmmassnahmen treffen.

Dazu ist es aber notwendig, dass dein Programm selbst schon eine Auswertung der Alarmmeldungen vornehmen und - je nach Wichtigkeit - den richtigen Startbefehl ausführen kann.

Ansonsten kannst du natürlich auch im PHP-Teil mit SUBSTR() aus "FF-Drage" das "Drage" rausfiltern und gegebenenfalls den Alarmschalter einschalten.

Viele Grüsse
Bümpi

dragonius
Beiträge: 50
Registriert: 27.09.2009, 09:14

Re: Brauche dringend Starthilfe!

Beitrag von dragonius » 04.10.2009, 22:12

Hallo Bümpi,

danke für den Input. Werfe ich mal versuchen umzusetzen. Momentan weile ich allerdings im Urlaub in Dänemark und laß mir kräftig den Wind um die Nase wehen. (Gar nicht so einfach hier in den Dünen Empfang zu erhalten!!!)

Melde mich mal obs geklappt hat.

Gruß aus dem hohen Norden

Dragonius

dragonius
Beiträge: 50
Registriert: 27.09.2009, 09:14

Re: Brauche dringend Starthilfe!

Beitrag von dragonius » 11.10.2009, 20:37

Hallo zusammen,

frisch erholt hab ich mich gleich mal an die Umsetzung gemacht. Funktioniert natürlich alles wunderbar, dank eurer Hilfe. Nach einem Nachmittag Arbeit ist die Alarmausgabe auch realisiert und reagiert auf die unterschiedlichen Alarmierungen. Die alarmierten Feuerwehren werden ggf. angezeigt und Lichterstrecken geschaltet, sollte es duster sein. :wink: . Prima Tipp mit der ExecStudioCo.exe.

Danke Sanys und Bümpi!!

Antworten

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