Uhrzeit mit PHP

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

Moderator: Co-Administratoren

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

Re: Uhrzeit mit PHP

Beitrag von mfreye » 27.02.2009, 16:37

Hallo Thomas,
Was hälst Du davon?...
Hört sich gut an! Kannst Du mir sagen wie ich den Code ändern muss, damit nur bei einer Änderung das Bild neu erzeugt wird? danke!

MfG
Maik

tsa
Beiträge: 725
Registriert: 03.01.2008, 17:42
Hat sich bedankt: 3 Mal
Danksagung erhalten: 1 Mal

Re: Uhrzeit mit PHP

Beitrag von tsa » 27.02.2009, 16:49

Ich weiss ja nicht, wie Dein Code mittlerweile aussieht, aber am einfachsten für Dich ist sicher, das ganze einfach aussen herum um den PHP-Code mit herkömmlichen Studio-Mitteln zu tun, z.B.:

Uhrzeitvariabe "AlteUhrzeit" vom Typ Zeichen anlegen, Startwert "???"

Code: Alles auswählen

WENN UHRZEIT <> AlteUhrzeit
DANN
  AlteUhrzeit := UHRZEIT 
  <?
    //Dein PHP-Kot ;-)
  ?>
ENDEWENN
Gruss
Thomas

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

Re: Uhrzeit mit PHP

Beitrag von mfreye » 27.02.2009, 17:11

Hallo Thomas,

also so werden nur alle 5 Sekunden angezeigt, ob wohl 10x/sek eingestellt ist.

Aber ich dachte, dass es ein Möglichkeit im PHP geben würde, sonst macht das x/sek doch keine Sinn, oder?

MfG
Maik

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

Re: Uhrzeit mit PHP

Beitrag von buempi » 27.02.2009, 17:13

Hallo zusammen

@tsa Deine Idee ist genial! Ich ohrfeige mich, dass ich nicht selber drauf gekommen bin!

@mfraye Ganz so mit dem Makro geht es leider nicht. Auch wieder so eine kleine Stolperfalle von Homeputer: UHRZEIT gibt in einem Vergleich eine auf 5 Sekunden gerundete Uhrzeit zurück; in einer Zuweisung aber die genaue Uhrzeit. Deshalb würde dein Script nur noch alle 5 Sekunden ausgeführt.

Du musst deshalb eine Zeit-Variable verwenden. Der besseren Übersicht wegen würde ich es so lösen:

Code: Alles auswählen

** ZeitAlt ist eine Variable vom Typ Zeit
wenn Zeit = ZeitAlt dann
   verlassen
endewenn

ZeitAlt := Zeit

<?
    // Pfade festlegen ...... usw.
Die Prozessorlast wird dadurch eher minimal höher sein als bei 1x pro Sekunde. Aber du erreichst genau das, was du willst. Vermutlich genügen auch 5x pro Sekunde; wird aber kaum einen Unterschied machen. Ausserdem hast du deinen Computer ja gekauft, damit er etwas tut und sich nicht den ganzen Tag bei weniger als 10% auf den Lorbeeren ausruht?

Viele Grüsse
Bümpi

Uff: Sehe eben, dass du das mit den 5 Sekunden schon selbst bemerkt hast....

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

Re: Uhrzeit mit PHP

Beitrag von Sanys » 01.03.2009, 10:34

Hallo Thomas,

eine Frage zu Deinem Vorschlag: Wenn das Makro 10 mal pro Sekunde aufgerufen wird: Was passiert wenn z.B. der php-Teil länger als 1/10 sek braucht, um fertig zu werden? Meines Wissens würde das Makro weiterlaufen und nicht erneut gestartet werden. Somit würde das Makro nicht immer 10 x pro Sekunde laufen (ist für diesen Fall ja unerheblich).
Was passiert, wenn im Code irgendwo ein warte eingebaut ist (wenn die Bedingung erfüllt ist, um das Bild zu erzeugen)? Verhält sich das Makro dann wie bei Starte(), würde also abgebrochen und neu gestartet?
Natürlich macht ein warte() in diesem Makro keinen Sinn, mir geht es nur grundsätzlich um das Verhalten von Studio.

@Maik: wie bringst Du Studio dazu, das Uhr-Bild anzuzeigen? Umschalten je sekunde oder so? Und beiden Zuständen der Anzeige das gleiche Bild zugewiesen?
Dann vermute ich mal, Du bekommst eine Uhrzeit, die eine Sekunde nachgeht (Klingt jetzt ein wenig pingelich, soll es aber gar nicht sein. Mir geht es nur ums Verständnis). Du kannst ja mal die normale Zeit daneben anzeigen lassen.
Ich sehe das so: In deinem Makro ist irgendwann (nämlich wenn sich die Zeit ändert) die Bedingung erfüllt, das Uhr-Bild zu erzeugen. Am Anfang des Codes wird sehr früh einer Variablen die Uhrzeit zugewiesen, die dann "später" per imagettftext auf das erzeugte Bild geschrieben wird. Bis das Bild erzeugt und gespeichert ist vergeht eine gewisse Zeit. Studio hat aber quasi zum Zeitpunkt, als das Makro gestartet wurde, das Bild umgeschaltet. Nun dauert es (wenn Du umschalten 1 x pro sek gewählt hast) den Rest dieser Sekunde bis wieder umgeschaltet wird und das neue Bild angezeigt wird. Auf dem Bild steht aber die Zeit vor einer Sekunde.

Falls da so ist kannst Du Dir behelfen, indem Du der Zeit, die angezeigt werden soll, einfach eine Sekunde dazuzählst.

Code: Alles auswählen

<?
$JetztPlusEineSekunde = strtotime ("+1 second");
?>

Viele Grüße


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 ;-)

tsa
Beiträge: 725
Registriert: 03.01.2008, 17:42
Hat sich bedankt: 3 Mal
Danksagung erhalten: 1 Mal

Re: Uhrzeit mit PHP

Beitrag von tsa » 02.03.2009, 17:24

@Bümpi:
Ja Bümpi, an die fünf Sekunden hätte ich denken sollen... :oops:

@Sanys:
Homeputer führt seine Makros alle der Reihe nach in EINEM Thread aus, d.h. solange noch ein Makro läuft kann kein zweites gestartet werden (und sei es das selbe).

Nur wenn ein Makro mittels WARTE die Prozessorzeit abgibt (bzw. nach dem letzen Befehl), wird das nächste Makro aus der Ausführungswarteschlange ausgeführt.
In die Ausführungswarteschlange kommen alle Makros, die...:
- noch nicht in der Ausführungswarteschlange stehen
- mittels Befehl STARTE (oder MAKRO STARTEN),
- einlaufendem Funktelegram bei aktivem "Ausführung bei Empfang"
- einer Änderung des Zustandes bei aktivem "Ausführung bei Änderung"
- abgelaufenem Intervalltimer
- abgelaufener Zeit des WARTE-Befehls (Besonderheit hier: der Einsprungpunkt liegt direkt hinter dem WARTE-Befehl)
...zur Ausführung "vorgesehen" werden.

Speziell für Deine Frage heisst das: solange der PHP-Code den Thread an sich bindet, kann ein abgelaufener Intervalltimer das Makro nicht erneut starten.
Wenn Du ein WARTE (egal mit welcher Wartezeit) einbaust, wird das laufende Makro sofort unterbrochen, und es kommt das am längsten in der Ausführungswarteschlange stehende Makro an die Reihe. Das ursprüngliche Makro wird erst nach Ablauf der Wartezeit an das Ende der Warteschlange gestellt. Wenn irgend eine der o.g. Bedingungen vor dem "Weitermachen" eintritt, erfolgt ein Neustart des Makros, wenn es dann an der Reihe ist.

Bei WARTE("00:00:00") heisst das zum Beispiel: Makro wird unterbrochen und sofort an das Ende der Warteschlange gestellt - sofern nicht bereits ein Neustart des Makros in der Warteschlange vorgemerkt ist.

Hoffe damit Deine Fragen zu Deiner Zufriedenheit beantwortet zu haben :wink:

Gruss
Thomas

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

Re: Uhrzeit mit PHP

Beitrag von Sanys » 03.03.2009, 15:31

Hi Thomas,

danke für Deine ausführliche Antwort. Dann scheine ich ja mit meiner Annahme richtig zu liegen. Maik kann ja mal berichten wie es läuft bei 10 x pro Sekunde und php-code.

@Maik: wenn Du wissen möchtest, wie lange der Ablauf des php-codes dauert kannst Du ja mal folgendes einbauen:

direkt hinter den php-Anfang:

Code: Alles auswählen

<?
$time_start = microtime(1);

... und dann Dein Code...
und ans Ende:

Code: Alles auswählen

....
....

$time_end = microtime(1);
$laptime = round(($time_end - $time_start),4);

// nur noch die gemessene Zeit an Studio übergeben
$V_Objekt_Variable = $laptime;
?>
"Variable" ist vom Typ Zeichen innerhalb des Objekts "Objekt" und wird in Sekunden mit 4 Nachkommastellen ausgegeben.
Natürlich kosten auch diese Anweisungen etwas Zeit, aber im Vergleich zu den Grafik-befehlen wohl nur sehr wenig.
Du könntest damit mal die Laufzeiten der verschiedenen Möglichkeiten austesten (bmp / jpg / Imagebw etc...)

viele Grüße

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 ;-)

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

Re: Uhrzeit mit PHP

Beitrag von mfreye » 06.03.2009, 17:44

Hallo zusammen!

Könnte leider früher nicht schreiben bzw. antworten. *schäm*
@Maik: wie bringst Du Studio dazu, das Uhr-Bild anzuzeigen? Umschalten je sekunde oder so? Und beiden Zuständen der Anzeige das gleiche Bild zugewiesen?
Dann vermute ich mal, Du bekommst eine Uhrzeit, die eine Sekunde nachgeht (Klingt jetzt ein wenig pingelich, soll es aber gar nicht sein. Mir geht es nur ums Verständnis). Du kannst ja mal die normale Zeit daneben anzeigen lassen.
Ich sehe das so: In deinem Makro ist irgendwann (nämlich wenn sich die Zeit ändert) die Bedingung erfüllt, das Uhr-Bild zu erzeugen. Am Anfang des Codes wird sehr früh einer Variablen die Uhrzeit zugewiesen, die dann "später" per imagettftext auf das erzeugte Bild geschrieben wird. Bis das Bild erzeugt und gespeichert ist vergeht eine gewisse Zeit. Studio hat aber quasi zum Zeitpunkt, als das Makro gestartet wurde, das Bild umgeschaltet. Nun dauert es (wenn Du umschalten 1 x pro sek gewählt hast) den Rest dieser Sekunde bis wieder umgeschaltet wird und das neue Bild angezeigt wird. Auf dem Bild steht aber die Zeit vor einer Sekunde.
Also ich lasse den Zustand 2x pro Sekunde umschalten, aber in der Tat, dadurch geht die Uhr ca. 0,5 Sekunden nach. Durch deinen Code geht die Uhr jetzt Sekunden genau (also fast)!
@Maik: wenn Du wissen möchtest, wie lange der Ablauf des php-codes dauert kannst Du ja mal folgendes einbauen:
Danke, die Zeit ist jedoch stark unterschiedlich, der Wert liegt immer um die 0,2 (0,1 - 0,4) Sekunden. Es macht jedoch kaum einen Unterschied zwischen BMP oder JPG. Das BMP braucht in der Regel immer etwas länger.
Alternativ geht das auch mit dem FastStone Image Viewer, ein kostenloser Bildbetrachter à la ACDSee mit einigen tollen Manipulier-möglichkeiten.
Danke, sehr nettes Programm, habe jetzt nur noch Bilder von max. 40kb :D

Also insgesamt läuft es jetzt gut. Das PHP wird 10 mal die Sekunde ausgeführt und die Anzeige lasse ich 2 mal in der Sekunde aktualisieren. Außerdem kann ich die Uhr jetzt einfach absetzen und sie ist transparent :D Bin halt faul!

Außerdem habe ich inzwischen eine RAM DISK und muss sagen, echt geil. Lasse jetzt alles in der RAM DISK laufen. Hier hätte ich noch ne Frage. Ich lasse die RAM DISK mit dem Start von homeputer neu erstellen (also die Dateien werden kopiert), jetzt ist es aber so, das homeputer in der Regel schneller ist und es sind noch nicht alle BMP in die RAM DISK kopiert. Kann man dort eine Verzögerung einbauen?

Code: Alles auswählen

** ----------------------------------------------
** allgemeine Einstellungen

** RamDisk erzeugen
   Startwin(",C:\Programme\contronics\homeputer Studio\Scripte\RamDisk\,C:\Programme\contronics\homeputer Studio\Scripte\RamDisk\RamDiskErzeugen.bat")

** Daten laden
   LADEN("*ALL")
   LADEN("*ALLV")

** Ansicht Startbildschirm laden
   Ansicht("Startbildschirm_800x600")

** Variable setzen
   Automodus_Raumregler.Merker_Pumpe ausschalten


** ----------------------------------------------
** Automodus Aussenbelechtung

** Variable setzen
   Automodus_Aussenbeleuchtung.TIME_RANGE_1 ausschalten
   Automodus_Aussenbeleuchtung.TIME_DELAY_1 ausschalten
   Automodus_Aussenbeleuchtung.TIME_RANGE_2 ausschalten
   Automodus_Aussenbeleuchtung.TIME_DELAY_2 ausschalten
   Automodus_Aussenbeleuchtung.TIME_RANGE_3 ausschalten
   Automodus_Aussenbeleuchtung.TIME_DELAY_3 ausschalten

** Befehl senden
   ** EM_SC_AU_2_4212 ausschalten
   EM_SC_AU_3_4213 ausschalten
   EM_SC_AU_4_4214 ausschalten
   EM_SC_AU_5_4221 ausschalten


** ----------------------------------------------
** Automodus Bewegungsmelder

** Variable setzen
   SE_BE_AU_S311_T1.Merker ausschalten
   SE_BE_AU_S311_T1 ausschalten
   SE_BE_AU_S311_T2.Merker ausschalten
   SE_BE_AU_S311_T2 ausschalten
   SE_BE_AU_S312_T1.Merker ausschalten
   SE_BE_AU_S312_T1 ausschalten
   SE_BE_AU_S312_T2.Merker ausschalten
   SE_BE_AU_S312_T2 ausschalten


** ----------------------------------------------
** Datum erstellen

   <?
     include("c:\\Programme\\contronics\\homeputer Studio\\PHP\\Datum_heute.php");
   ?>

Ein warte("00:00:10") hatte leider keinen Erfolg :roll:

Code: Alles auswählen

]** ----------------------------------------------
** allgemeine Einstellungen

** RamDisk erzeugen
   Startwin(",C:\Programme\contronics\homeputer Studio\Scripte\RamDisk\,C:\Programme\contronics\homeputer Studio\Scripte\RamDisk\RamDiskErzeugen.bat")
   warte("00:00:10")

** Daten laden
   LADEN("*ALL")

An alle: DANKE! Finde es super wie hier einem geholfen wird. :P

Gruß
Maik

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

Re: Uhrzeit mit PHP

Beitrag von buempi » 06.03.2009, 18:42

Hallo Maik

Was machst du.....???? Du lässt das Bild 2x pro Sekunde aktualisieren????

Warum nicht einfach am Schluss des Makros? Dann wird es sofort aktualisiert, wenn es neu ist! Und sonst nicht!

Das mit dem RamDisk erzeugen solltest du im Autostart-Ordner lösen. Und zwar indem du eine Batchdatei dort rein machst, die etwas folgendes enthält:

Code: Alles auswählen

start /wait "C:\Programme\contronics\homeputer Studio\Scripte\RamDisk\RamDiskErzeugen.bat"
"C:\Programme\contronics\homeputer Studio\HomeputerStudio.exe"
Wichtig ist, dass am Ende der RamDiskErzeugen.bat ein EXIT steht.

Dann ist die Ramdisk (und alles andere, was in RamDiskErzeugen.bat so abläuft) erledigt, bis Homeputer startet.

Viele Grüsse
Bümpi

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

Re: Uhrzeit mit PHP

Beitrag von mfreye » 07.03.2009, 09:28

Hallo Bümpi,
Was machst du.....???? Du lässt das Bild 2x pro Sekunde aktualisieren????
Ist geändert :oops: Danke!
Das mit dem RamDisk erzeugen solltest du im Autostart-Ordner lösen. Und zwar indem du eine Batchdatei dort rein machst, die etwas folgendes enthält:
Ja das würde gehen, aber bei meiner Testumgebung möchte ich nicht immer HomeStudio komplett neu starten. Schöner wäre es wenn, dieses vor dem Ausführen gestartet würde.
Habe jetzt mir ein Button auf dem Desktop gelegt und führe dann das kopieren manuell aus.

Habe aber noch ein Problem, ich bekomme keine andere Schriftart eingestellt. HomeStudio habe ich nach eintragen der neuen Schrift, neu gestartet.

Code: Alles auswählen

    <?
        // Pfade festlegen
        $Objectname = Uhrzeit_jetzt;
        include ("Z:\\contronics\\homeputer Studio\\php\\bmp.php"); 
        include ("Z:\\contronics\\homeputer Studio\\php\\imagebw.php");   
        $filejpg = "Z:\\contronics\\homeputer Studio\\BMP\\".$Objectname.".bmp";
        $fontdir = "C:\\WINDOWS\\Fonts\\";
       
        //Variablen festlegen
        $SizeX = 110;
        $SizeY = 35;
        //$Font = $fontdir."DS-DIGIB.ttf"; //DS-DIGIB.ttf  geht
        $Font = $fontdir."tahoma.ttf; //comic.ttf geht nicht
        $FontSize_1 = 30;
        $FontSize_2 = 16;
        $FontSize_3 = 24;
        $Uhrzeit_Temp = date("H:i:s");  //Uhrzeit hh:mm:ss (24Std.)
$Font = $fontdir."DS-DIGIB.ttf"; // geht
$Font = $fontdir."tahoma.ttf; // geht nicht

habe schon einige Schriften ausprobiert, mmmhh :roll:

Gruß
Maik

Antworten

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