Uhrzeit mit PHP

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: Uhrzeit mit PHP

Beitrag von buempi » 13.03.2009, 20:04

mfreye hat geschrieben:könnte mir aber auch einen schnellere PC zulegen
... das wäre mit Kanonen auf Spatzen geschossen, wenn auf dem Rechner sonst nichts Zeitraubendes läuft.

Ich frage mich nur, wie die Kollegen bei IP-Symcon das gelöst haben. Da läuft doch alles unter PHP. Haben die einen Weg gefunden, wenigstens Syntax-Check usw. bei jedem Durchlauf auszuschalten. Oder wird das Ganze dort irgendwie kompiliert?

Du könntest noch versuchen, den Intervall auf 5x oder sogar 2x pro Sekunde zu reduzieren. Würde kaum einen sichtbaren Unterschied bringen, aber auch kaum eine Reduktion der Prozessorlast, weil der so oft ausgeführte Teil ja im kompilierten "Homeputer-Bereich" abläuft.

Auch das Weglassen von "ImageBW" könnte eine kleine Verbesserung bringen. Bei mir hat das (wie schon früher beschrieben) auf die Qualität der Anzeige kaum eine Auswirkung, wenn man die digitale Schrift verwendet.

Viele Grüsse
Bümpi

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

Re: Uhrzeit mit PHP

Beitrag von mfreye » 14.03.2009, 15:53

Hallo Bümpi.

Also durch die Änderung wird wie gesagt etwas besser aber ich liege im durchschnitt immer noc bei 80% CPU Last. Auch werden nicht alle Befehle empfangen wie es sonst überlich ist. Habe jetzt das
UHR Script wieder deaktiviert und es läuft dann alles.
Du könntest noch versuchen, den Intervall auf 5x oder sogar 2x pro Sekunde zu reduzieren. Würde kaum einen sichtbaren Unterschied bringen, aber auch kaum eine Reduktion der Prozessorlast, weil der so oft ausgeführte Teil ja im kompilierten "Homeputer-Bereich" abläuft.
Das hatte ich schon, aber auch nur ne kleine Besserung.
Auch das Weglassen von "ImageBW" könnte eine kleine Verbesserung bringen. Bei mir hat das (wie schon früher beschrieben) auf die Qualität der Anzeige kaum eine Auswirkung, wenn man die digitale Schrift verwendet.
Ja, nur dann ist wieder das Problem mit dem "transparenten" Hintergrund.
... das wäre mit Kanonen auf Spatzen geschossen, wenn auf dem Rechner sonst nichts Zeitraubendes läuft.
ne der dient sonst nur als noch als Fileserver im eigenen Netzwerk und zeichnet ein paar Daten beim AKKU laden auf.


Werde mal schauen, ob ich dann doch ein jgp nehme oder die erste Variante, mit den einzel Darstellung. :cry:


Aber dennoch müssten andere mit PHP Script auch die Probleme haben, da auch z.B. die Anzeige für die Raumregler eine solch hohe CPU Last verursacht. Es macht sich nur kaum
bemerkbar, da dieses Bild ja nicht jede Sek. erzeugt wird.

MfG
Maik

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

Re: Uhrzeit mit PHP

Beitrag von Sanys » 15.03.2009, 17:55

Hallo Maik,

so ganz scheint es ja immer noch nicht zu laufen. Nun habe ich mal einen Versuch unternommen, das Ganze ausserhalb von Studio laufen zu lassen. Das klappt erst mal prima. Im Moment kann ich auf meinem Laptop die Ram-Disk nicht verwenden, deshalb habe ich einen SD-Karte genommen und dieser den Laufwerksbuchstaben zugewiesen, den sonst meine RAM-Disk hat. Beim Testen der "Uhrzeit-Grafik-Erzeugung" hatte ich dann auch manchmal das Problem, dass die Prozessorlast anstieg, teilweise 100%. Der Process-Explorer hat es dann verraten: Interrupts! Beim Schreiben auf SD-Card werden wohl sehr Harwarenahe Routinen beschäftigt, die viele Interrupts ausgelöst haben. Das hat das System verlangsamt. Ich könnte mir das auch bei Dir vorstellen. Ist aber nur so eine Vermutung. Nun kenne ich Deine RAM-Disk nicht, aber es könnte damit zusammmenhängen. Vielleicht postest Du mal, was Du da installiert hast.

Die 2te Sache, die mir auffiel: Du bestehst ja auf durchsichtigen Hintergund, weshalb jpg als Format nicht geht.
ABER: Du verwendest den ja gar nicht. Ich habe Deinen Code direkt übernommen und nur ein paar Pfade angepasst. Beim testen kam ich dann drauf:
Im Moment erzeugt Dein Code, so wie er 1 Seite vor dieser steht, eine schwarze Schrift auf weißem Hintergrund, durch die imagebw-Funktion ausschließlich schwarz und weiß.

Code: Alles auswählen

        $hintergrund = ImageColorAllocate ($im, 255, 255, 255);
        $vordergrund = ImageColorAllocate ($im, 0, 0, 0);
etwa so:

[Die Dateierweiterung bmp wurde deaktiviert und kann nicht länger angezeigt werden.]

Um die Grafik durchsichtig zu bekommen muss es heißen:

Code: Alles auswählen

        $hintergrund = ImageColorAllocate ($im, 0, 0, 255);
und Du kannst imagebw nicht mehr verwenden. dieses macht ja wieder schwarz/weiß daraus, was bei blauem Hintergrund einfach schwarz wird. Ohne imagebw sieht es dann so aus:

[Die Dateierweiterung bmp wurde deaktiviert und kann nicht länger angezeigt werden.]

und in Studio dann so:

[Die Dateierweiterung bmp wurde deaktiviert und kann nicht länger angezeigt werden.]

Nun gibt es hier wieder diese hässlichen Verläufe, die Du ja mit imagebw wegbekommen wolltest.
Ich habe nun nochmals die Grafikfunktionen nachgelesen und bin nach einigem ausprobieren auf diese Lösung gestoßen:

[Die Dateierweiterung bmp wurde deaktiviert und kann nicht länger angezeigt werden.]

vergrößert:

[Die Dateierweiterung bmp wurde deaktiviert und kann nicht länger angezeigt werden.]

Wie geht das nun:
Statt imagecreatetruecolor verwendest Du nur imagecreate, für imagettftext wird der negative Farbindex verwendet, damit die Schrift ohne Farbverlauf geschrieben wird (AntiAlias).
Anschließend wird der weiße Hintergrund mit blau ausgetauscht. Ich habe versucht, die Schrift gleich auf den blauen Hintergrund zu schreiben, das hat nicht funktioniert. Warum? keine Ahnung.

Das Ganze habe ich wie o.a. so geschrieben, dass es außerhalb von Studio läuft. Es ist ein php-skript mit Endlosschleife!! Allerdings werden die includes nur einmal geladen und nur wenn sich die Uhrzeit ändert wird eine Grafik erzeugt. Das ist sehr resourcenschonend. In Studio brauchst Du nur ein Objekt vom Typ Schalter, im Makro schreibst Du nur rein: ObjektSchalter umschalten und läßt es sekündlich laufen. Den beiden Zuständen verpasst Du die Grafik, die von dem php-Dauerscript erzeugt wird (im selben Verzeichnis wie das Script).
So, das probierst Du mal aus, und wenn es zu Deiner Zufriedenheit läuft machen wir noch etwas, damit das script mit Studio startet und auch wieder beendet wird.
Im Anhang ist ein Zip-File. Den Inhalt kopierst Du in ein beliebiges Verzeichnis .
Dann brauchst Du noch die php5ts.dll der Version 5.2.6.6. Konnte ich leider nicht mit ins Archiv packen, da zu groß. Ich schicke sie Dir per email, oder du folgst meiner Beschreibung hier, um die Dateien selbst zusammenzustellen. Wichtig: Alle Dateien müssen von ein und der selben Version sein, mischen impossible!

Dann öffnest Du ein Dos-Fenster in diesem Verzeichnis und startest das Programm: (Achtung: Es läuft Endlos und läßt sich nur über den Taskmanager abschiessen!!)
php phpGrafikUhr.php
oder Du gibst ein :
phpconsole phpGrafikUhr.php
Dann hast Du die Möglichkeit, das Programm mit Strg+C zu stoppen.


So, nun hoffe ich, daß Du am Ende doch noch zu Deiner phpgrafikuhrinbmpweilhintergrunddurchsichtigseinmuss kommst.

Viel erfolg!!


sanys


P.S. Du kannst natürlich auch erst mal meine Änderungen in Dein Script übernehmen und von Studio aus laufen lassen. Vielleicht klappt das ja auch schon, da die erzeugten Grafiken nunmehr nur 2 kb groß sind.
GrafikUhr.zip
(429.18 KiB) 94-mal heruntergeladen
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 » 15.03.2009, 19:01

Hallo Sanys,

danke für die ausführliche Anleitung.

Werde aber erst im laufe der nächsten Woche das ganze testen können. Also nicht wundern, wenn ich mich nicht so schnell melde :?

Schönen Sonntag noch!

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 » 22.03.2009, 12:00

Hallo zusammen

Ich habe den Vorschlag von Sanys getestet. - Leider mit negativem Ergebnis:

Wenn ich sein Script über PHP.exe starte, ist die CPU-Last tatsächlich geringer. ABER: Das erzeugte Bild wird in Homeputer mit gelbem Hintergrund angezeigt (hatten wir doch schon mal?!). Ich habe auch das oben von Sanys gezeigte Bitmap runtergeladen und von Homeputer anzeigen lassen. Mit dem gleichen Effekt. Ist das bei dir nicht so, Sanys?

Dann habe ich wieder "ImageCreateTrueColor" verwendet. Damit wird der Hintergrund wieder durchsichtig, aber die Schrift ist verschwommen.

Erst nachdem ich Bitmap durch das ANGEPASSTE ImageBW.php gefiltert habe (ist dann eigentlich kein Image "black and white" mehr, sondern eben ein Image "black and blue") ist es wieder sauber. Die Beschreibung zum Anpassen von ImageBW habe ich hier gegeben: http://homematic-forum.de/forum/viewtop ... 30&p=12238 ... Sanys hat diese Anpassung offensichtlich nicht vorgenommen und deshalb schwarze Schrift auf weissem Hintergrund erzeugt.

Grosse Enttäuschung: Die Prozessorlast ist nur minimal geringer gegenüber der Ausführung des Scripts von Maik aus Homeputer heraus... :(

Daraus habe ich folgendes gelernt: PHP-Scripte sind nicht geeignet, auf dem Rechner in kurzen Abständen rund um die Uhr ausgeführt zu werden. Und: Bitmap ist nicht gleich Bitmap bzw. blau ist nicht gleich blau!

Diese Erfahrung musste ich leider auch in einem anderen Zusammenhang machen: Ich habe nämlich versucht, ein solches "Uhr-Bitmap" mit AutoIt zu erstellen. Das ist einiges schwieriger als in PHP, weil AutoIt eigentlich in erster Linie dazu konzipiert ist, direkt mit Tastatur, Bildschirm, Maus usw. zusammenzuarbeiten, und nicht, um Bitmap- und andere Dateien zu generieren. Als ich dann ENDLICH, ENDLICH so weit war, kam die Enttäuschung: Der 100% blaue Hintergrund wird in Homeputer in schönstem Blau angezeigt!

Ich glaube, wir müssen das Projekt mit Bitmap und Umschalten begraben... :(

Vielleicht ist das ja ein kleiner Trost: http://homematic-forum.de/forum/viewtop ... =17&t=2846

Viele Grüsse
Bümpi

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

Re: Uhrzeit mit PHP

Beitrag von Sanys » 22.03.2009, 14:39

Hallo Buempi,
Ich habe auch das oben von Sanys gezeigte Bitmap runtergeladen und von Homeputer anzeigen lassen. Mit dem gleichen Effekt. Ist das bei dir nicht so, Sanys?
Nein, bei mir wird das Bitmap richtig angezeigt. Eben habe ich nochmal Versuche gemacht und die Hintergründe unterschiedlich abgespeichert, also als 24bit unkomprimiert oder 8bit komprimiertes bmp: egel wie, es wird richtig angezeigt. Auch ein Änderung der Bildschirmfarben änderte nichts am Ergebnis.
Daraus habe ich folgendes gelernt: PHP-Scripte sind nicht geeignet, auf dem Rechner in kurzen Abständen rund um die Uhr ausgeführt zu werden.
... eigentlich schon, wenn sie nicht zu umfangreich sind. Deine Aussage trifft eher auf "Grafiken erzeugen mittels php" zu. DAS kostet richtig Rechenzeit, speziell unsere bmp-Variante, da hier keinerlei Grafikroutinen einer Hochsprache verwendet werden, sondern das im Speicher erzeugte Bild quasi bit für bit im richtigen Format als File abgelegt wird.
Und: Bitmap ist nicht gleich Bitmap bzw. blau ist nicht gleich blau!
... da heißt es: ausprobieren! Erklären lässt es sich manchmal nicht.
Ich glaube, wir müssen das Projekt mit Bitmap und Umschalten begraben... :(
... das würde ich nur in diesem speziellen Fall sagen. Vielleicht läßt sich Maik ja noch davon überzeugen, dass er eben die Uhr wie von mir vorgeschlagen realisiert. Er muss halt auf jeder Ansicht die einzelnen Stellen positionieren und einmalig die Grafiken der Einzelstellen in seiner Wunschschrift erzeugen. Das fände ich allemal besser, als den Rechner mit Uhr-Bildchen-erzeugen "warm" zu halten.


Aber es ist noch Hoffnung in diesem Thema: Es gibt noch ImageMagick, eine freie Programmbibliothek für Grafikmanipulation in jeder erdenklichen Form. Erheblich umfangreicher als die GD-Bibliothek. Hiervon gibt es eine Lösung für die Komandozeile sowie eine kompilierte Erweiterung für php: imagick.
Leider ist das ganze in der php-Hilfe so gut wie gar nicht dokumentiert. Immerhin habe ich schon für die externe php-Lösung ein Skript zum laufen bekommen, welches eine Grafik erzeugt. Mehr aber noch nicht, da ich für so etwas zu knapp an Zeit bin. Sollte ich da aber weiterkommen werde ich es posten.


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 » 23.03.2009, 16:22

Hallo zusammen.

Habe das Script mal getestet, es läuft, nur leider bringt es bzgl. der CPU Last nichts. Siehe beigefügte Grafik :( Wie bei Bümpi.
Vielleicht läßt sich Maik ja noch davon überzeugen, dass er eben die Uhr wie von mir vorgeschlagen realisiert.
Oh man, da bekomme ich ja noch ein schlechtes Gewissen. Aber selbst ein jpg erzeugt bei mir die eine recht hohe CPU Last :roll:
Ich glaube, wir müssen das Projekt mit Bitmap und Umschalten begraben... :(
Du gibst auf? Das kann man sich bei Dir ja gar nicht vorstellen :D

Was mir jetzt aufgefallen ist, das HomePuter die erhöhte Last verursacht. Kann es sein, dass nicht das Script die CPU Last erzeugt, sondern HomePuter oder wird das Script HomePuter zu gewiesen.


Und das alles wegen einer Uhr :roll:


Aber evtl. fällt Sanys ja noch etwas ein oder Dir Bümpi.

Gruß
Maik
Dateianhänge
qq.JPG

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

Re: Uhrzeit mit PHP

Beitrag von buempi » 23.03.2009, 17:26

Hallo Maik

Wie kommst du darauf, dass Homeputer die CPU-Last erzeugt? Bei mir steigt sie sofort an, wenn ich das Script von der Kommandozeile starte. Wenn ich dann Homeputer noch dazu starte, ist kaum ein Unterschied festzustellen. Auch bei dir beträgt die vom Task-Manager angegebene Auslastung durch PHP 11%, durch Homeputer nur 2%.

Ist die Uhr, die auf deinem Homeputer-Screenshot angezeigt wird, diejenige, die mit dem Script von Sanys erzeugt wird? Sie weicht von derjenigen auf der Taskleiste um 8 Minuten ab! Oder ist das in Homeputer ein "altes Bitmap"? Mich würde nämlich interessieren, ob bei dir die mit dem Script (mit ImageColorAllocate!) erzeugte Grafik auch mit gelbem Hintergrund angezeigt wird. Habe es auf 3 verschiedenen Rechnern (Win98, WinXP, Vista) ausprobiert: Immer blaue Schrift auf gelbem Hintergrund, wie hier:
Uhr.JPG
Anzeige in Homeputer
Uhr.JPG (18.65 KiB) 2977 mal betrachtet
mfreye hat geschrieben:Du gibst auf?
Nun ja: Aufgegeben habe ich ja nicht; nur einen anderen Weg beschritten. Hast du meine im letzten Beitrag verlinkte "AutoIt-Uhr" nicht angeschaut/getestet?

@Sanys: Ich habe mich wirklich missverständlich ausgedrückt. Natürlich meinte ich mit "Bitmap-Umschaltung begraben" nicht, diese tolle Erfindung generell zu begraben! - Nur in diesem speziellen Fall!

Viele Grüsse
Bümpi

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

Re: Uhrzeit mit PHP

Beitrag von mfreye » 23.03.2009, 18:01

Hallo Bümpi,

erst einmal einen schönen Abend!
Wie kommst du darauf, dass Homeputer die CPU-Last erzeugt? Bei mir steigt sie sofort an, wenn ich das Script von der Kommandozeile starte. Wenn ich dann Homeputer noch dazu starte, ist kaum ein Unterschied festzustellen. Auch bei dir beträgt die vom Task-Manager angegebene Auslastung durch PHP 11%, durch Homeputer nur 2%.
Dort wird das separate Script von Sanys ausgeführt. Deshalb auch die CPU Last. Wenn ich aber das Script über HomePuter ausführe, steigt die CPU Last von HomePuter.
Ist die Uhr, die auf deinem Homeputer-Screenshot angezeigt wird, diejenige, die mit dem Script von Sanys erzeugt wird? Sie weicht von derjenigen auf der Taskleiste um 8 Minuten ab! Oder ist das in Homeputer ein "altes Bitmap"? Mich würde nämlich interessieren, ob bei dir die mit dem Script (mit ImageColorAllocate!) erzeugte Grafik auch mit gelbem Hintergrund angezeigt wird. Habe es auf 3 verschiedenen Rechnern (Win98, WinXP, Vista) ausprobiert: Immer blaue Schrift auf gelbem Hintergrund, wie hier:
Also die Uhrzeit hatte ich vorher deaktiviert um zu testen, aber ja die Uhrzeit wurde von Sanys Script erzeugt. Bei mir ist das Bild zwar gelb wenn ich es dem Schalter zuweise, wird aber wie Du siehst richtig angezeigt.
Hast du meine im letzten Beitrag verlinkte "AutoIt-Uhr" nicht angeschaut/getestet?
Doch und die Uhr läuft auf meinen Laptop jetzt. Das Ding ist super. Aber wenn ich die bei der Visualisierung einsetzte wollte, müsste die Uhr immer an der gleichen Stelle sehen.
Nun ja: Aufgegeben habe ich ja nicht; nur einen anderen Weg beschritten.
Ich habe auch einen neuen Weg, ich lasse die Sekunden weg. :shock: Naja auch keine tolle Lösung.

MfG
MFreye

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

Re: Uhrzeit mit PHP

Beitrag von Sanys » 23.03.2009, 18:45

Hallo Maik,

schön zu hören, dass es klappt (soweit). Die CPU-Last läßt sich wohl nicht wirklich reduzieren. Das liegt zum einen am Rechner, je schwächer dieser ist desto mehr CPU-Power geht für das Script drauf, 2tens liegt es an der Größe des Bildes, denn die Berechnungen erhöhen sich quadratisch zur Seitenlänge.
Anderer Vorschlag: Brauchst Du die Sekunden? Ohne sekündliche Berechnung brauchts nur einmal in der Minute etwas mehr Power. (sehe gerade, dass Du das schon so realisierst.
Oder mach die Uhr aus Studio-Objekten, da kostet quasi nix.


Im letzten Post habe ich ja Versuche mit Imagick beschrieben. Es ist zwar noch "Alpha"-Stadium, aber immerhin geht es. Ich muß nur wieder nachvollziehen, was wo installiert werden muß, damit es funktioniert (von php aus). Ausserdem, wie erwähnt, gibt es quasi keine Beschreibung für php. lediglich eine Befehlsreferenz. Es gibt aber ein paar Beispiele und Beschreibungen für andere Programmiersprachen, womit ich dann doch zu Ergebnissen gekommen bin. Das Ganze ist objektorientiert aufgebaut, ein "Sprachstil" mit dem ich noch nicht wirklich zurecht komme. Ein paar Erfahrungen habe ich mit jpgraph gesammelt, welches vom Aufbau der Skripte gewisse Ähnlichkeit hat.
Genug der Vorreden, die Ausführliche Version wird dann ein eigener Thread (später).
Um beim Beispiel Uhr zu bleiben und weil ich Fan der Schweizer Bahnhofsuhr bin (...und diese Bümpi sicher auch gefällt :lol: ), hier mein Ergebnis:

[Die Dateierweiterung bmp wurde deaktiviert und kann nicht länger angezeigt werden.]

Ich habe mal ein screen-Video erstellt und ins Netz gestellt.
>hier< kann man es runterladen (ca 8MB). Das Passwort lautet "mondaine".
Auf dem Video sieht man auch die CPU-Last: unten auf der Liste, die 2 CLI-Prozesse. Der mit der höheren ist die Schweizer Uhr, der mit der kleineren das Digital-Uhr script, so wie es Maik am laufen hat.

Ich werde die Daten später zur Verfügung stellen. Erst mal muss ich den Code aufräumen und kommentieren, sonst komme ich selber nicht mehr klar.


Viele Grüße


sanys


P.S. die oben gezeigte Uhr ist aber experimentell zu sehen. Grundsätzlich taugt das nicht für Studio, da die CPU-Last einfach zu hoch ist für einen sparsamen Rechner, der vermutlich nur der Haussteuerung dient. Und sollte er noch andere Aufgaben erledigen ist es auch nicht sinnvoll, nur um eine Uhr-Anzeige zu haben (wie viele Stunden am Tag guckt denn da jemand hin?) die Rechenpower zu verschwenden.
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 ;-)

Antworten

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