Bilder in Studio einbinden (Webcam, Diagramme...)

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

Bilder in Studio einbinden (Webcam, Diagramme...)

Beitrag von Sanys » 08.07.2008, 13:14

Hallo,

die Frage nach Bildern in Studio wurde ja schon mehrfach gestellt, hier nun eine Möglichkeit, dieses zu realisieren. Beim "basteln" mit 7-Segment Anzeigen für Studio (siehe mein anderer Beitrag http://homematic-forum.de/forum/viewtop ... =17&t=1686) bin ich auf eine Möglichkeit gestossen, beliebige Bilder in den Ansichten darzustellen. Bisher dachte ich, daß Studio beim Start den Code erstellt und auch sämtliche anderen Resourcen einbindet, z.B. auch die Bilder(Bitmaps), die in den Typdefinitionen oder Objekten verwendet werden. Das ist aber nicht so! Studio lädt diese Bilder neu, wenn sie sich geändert haben und das Objekt erneut aufgerufen wird. Ebenso lädt Studio auch die Hintergrundbilder der Ansichten immer wenn auf die Ansicht umgeschaltet wird.

Nun habe ich folgendes versucht:
Ich habe eine Webcam im LAN, deren Bild ich so erreichen kann:

Code: Alles auswählen

http://Name:passwort@192.168.0.xx/image.jpg


Mit ein paar Zeilen php lese ich das Bild und speichere es auf einer RAM-Disk. Dieses Bild ist als Bitmap für ein Objekt angegeben, und zwar für einen bestimmten Zustand.
Nach dem speichern wird das Objekt nochmals auf den Zustand gesetzt und das aktuelle Bild erscheint in der Anzeige.

Das selbe klappt auch mit jpgraph, um Diagramme anzuzeigen. Auch hier wird per php das Diagramm erstellt und auf die Ramdisk geschrieben, danach das Objekt erneut aufgerufen und die aktuelle Grafik angezeigt.

Kleines Beispiel:

Ein Objekt Cam01Garten vom Typ Schalter.
Dem Zustand aus wird das Bild zugewiesen (dazu muß es einmal an der richtigen Stelle stehen):
Zustand aus: Bitmap = r:\studio\cam1.jpg
Zustand ein: Bitmap = r:\studio\campause.jpg
(campause.jpg sollte ein belieiges Bild mit der selben Grösse sein. Ich nehme z.B. ein Bild der Camera, welches ich mit einem Grafikprogramm unscharf gemacht habe (blur).
Ausführen bei Änderung ist angeklickt
Der Schalter wird in einer Ansicht angezeigt.

Code: Alles auswählen

<?
  $grafikfile="http://name:password@192.168.0.xx/image.jpg";
  $savefile='r:\\studio\\cam1.jpg';
  

function LoadJpeg ($imgname) {
    $im = @ImageCreateFromJPEG ($imgname); /* Versuch, Datei zu öffnen */
    if (!$im) {                            /* Prüfen, ob fehlgeschlagen */
        $im = ImageCreate (150, 30);       /* Erzeugen eines leeren Bildes */
        $bgc = ImageColorAllocate ($im, 255, 255, 255);
        $tc  = ImageColorAllocate ($im, 0, 0, 0);
        ImageFilledRectangle ($im, 0, 0, 150, 30, $bgc); 
        /* Ausgabe einer Fehlermeldung */
        ImageString($im, 1, 5, 5, "Fehler beim Öffnen von: $imgname", $tc); 
    }
    return $im;
}

$bild = LoadJpeg ($grafikfile);

imagejpeg($bild, $savefile, 95);
imagedestroy($bild);

?>

Cam01Garten:=0
Beschreibung:
Nehem wir an, der Zustand des "Schalters" Cam01Garten ist "aus". Nun wird von irgendwoher der Schalter eingeschaltet (Cam01Garten einschalten). Der Schalter ist nun eingeschaltet und zeigt das Pause-Bild. Ebenso wird das Makro gestartet. Im php-Teil ist eine Funktion erstellt, die das Bild lädt und im Fehlerfall die Fehlermeldung ebenfalls als Bild ausgibt. Nach Aufruf der Funktion kann man übrigens das Bild noch manipulieren, z.B. mit Text versehen, die Größe ändern, Teile kopieren etc. php bietet hier sehr viele Möglichkeiten.
Das neue Bild wird dann in die Ram-Disk geschrieben und das php-Bild freigegeben (imagedestroy..). Dann schaltet der Studio-code den Schalter aus und damit wird das neue Bild geladen und angezeigt.

So, damit sind die Grundzüge beschrieben, dynamisch Bilder in Studio einzubinden. Die Quelle des Bildes ist nahezu beliebig. Ich habe z.B. mit jpgraph ein Diagramm für den Zisterenstand erstellt, der dann alle paar minuten aktualisiert angezeigt wird.
ABER: es darf nicht zu lange dauern, bis das Bild erstellt ist. Leider hält Studio quasi komplett an, solange der php-Teil abgearbeitet wird. Das sorgt für Abstürze. Beim Webcam abfragen ist es auch wichtig, das diese erreichbar ist. Ist sie es nicht versucht php standardmäßig 30 sec, das Bild zu laden. Solange ist Studio blockiert und schmiert normalerweise ab. Es bietet sich an, diese Zeit zu begrenzen.


Viel Spaß damit, vielleicht gibts ja noch ganz tolle Ideen.


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: Bilder in Studio einbinden (Webcam, Diagramme...)

Beitrag von tsa » 08.07.2008, 14:11

...und ich dachte, Du machst Urlaub und erholst Dich... :mrgreen:

Da werde ich nun mal die Real-Visualisierung der Rollladenzustände mit den VIEEELEN Aussenfotos etwas vereinfachen.
Muss mich allerdings noch mal ein wenig in PHP einlesen, wie man in einer Grafik einen bestimmten Bereich mit einer anderen Grafik überschreibt!

Erhol Dich mal!

Gruss
Thomas

PS: das mit der Anleitung für die RSU hat sich erledigt, "JEMAND" hat sich gefunden und gescannt.

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

Re: Bilder in Studio einbinden (Webcam, Diagramme...)

Beitrag von Sanys » 08.07.2008, 23:29

Hallo Thomas
tsa hat geschrieben:...und ich dachte, Du machst Urlaub und erholst Dich...
... das tue ich auch, nur keine Sorge. Aber unser Bauernhof ist online und da kann man die Zeit nutzen, mal liegengebliebenes zu erledigen. Das mit den Bildern wollte ich schon lange mal schreiben, bisher kam aber immer was dazwischen. Und die RSU-Erlebnisse kosteten auch viel mehr Zeit als mir recht war...

tsa hat geschrieben:PS: das mit der Anleitung für die RSU hat sich erledigt, "JEMAND" hat sich gefunden und gescannt.
das freut mich, ich hätte sie Dir aber bestimmt geschickt.


Demnächst kommen noch ein paar mehr Beispiele zu den Bildern. Ich muß nur erst mal den Code aufräumen. Viel ist noch aus der Trial and Error zeit und wurde, nachdem es endlich funktioniert hat, nicht mehr angefasst. Das kann ich aber nicht mit copy-paste veröffentlichen (verstehe ich nach einer Weile selbst nicht mehr....)


Schönen Abend noch!


sanys
(Stephan)


P.S. wie machst Du eigenlich die Links in Deinen Postings? Ich kann immer nur die URL einfügen.
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: Bilder in Studio einbinden (Webcam, Diagramme...)

Beitrag von tsa » 09.07.2008, 09:26

Sanys hat geschrieben:wie machst Du eigenlich die Links in Deinen Postings? Ich kann immer nur die URL einfügen
...lass einfach mal den Mauszeiger auf dem Button "URL" stehen, da wird die Syntax angezeigt...

Gruss
Thomas

strohfeuer
Beiträge: 194
Registriert: 19.09.2006, 12:59

Re: Bilder in Studio einbinden (Webcam, Diagramme...)

Beitrag von strohfeuer » 09.07.2008, 18:31

Hallo Sanys,
du schreibst in deinem Beitrag: "Ich habe z.B. mit jpgraph ein Diagramm für den Zisterenstand erstellt, der dann alle paar minuten aktualisiert angezeigt wird."
Nun meine Frage: Wie wird der Zisternenstand angezeigt??? Voll und leer oder auch in Literangabe ???
Wenn auch die Literangabe, wie hast du das gemacht???
Gruß Strohfeuer

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

Re: Bilder in Studio einbinden (Webcam, Diagramme...)

Beitrag von Sanys » 09.07.2008, 19:05

Hallo Strohfeuer,

"voll und leer" wäre ja wohl wirklich nicht State of the art :D .
Spass beiseite, hier habe ich das mit der Zisterne schon mal ausführlich beschrieben.
Die Daten werden dann in eine MySQL datenbank geschrieben (wie so ziemlich alle anderen Sensordaten auch) und dann mittels SQL-Abfrage an jpgraph übergeben. Das ist für das Verlaufdiagramm. Eine einfache Anzeige für die Liter habe ich auch mal mit jpgraph erstellt, da braucht es nur php.
Das Ganze ist aber ein komplexes Thema, das ich, so wie ich es bei mir gemacht habe, mal in einem anderen Thread vorstellen werde. Vermutlich mal bei einer Projektvorstellung, aber so weit bin ich noch nicht.
In kurzen Worten: Du brauchst einen Server mit php und MySQL (bei mir Apache) sowie jpgraph. Das Zusammenspiel mit Studio ist dann nochmal ein Kapitel.



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

strohfeuer
Beiträge: 194
Registriert: 19.09.2006, 12:59

Re: Bilder in Studio einbinden (Webcam, Diagramme...)

Beitrag von strohfeuer » 09.07.2008, 22:29

Hallo Sanys,
ohne jetzt vom Thema "Bilder in Studio einbinden" abzuweichen,
momentan habe ich mit dem super Mitwirken von Buempi (Macros) eine Testphase mit dem HMS100T als Füllstandmesser laufen. Wenn diese beendet, und mit Einverständnis von Buempi werde ich das Projekt hier im Forum unter "Projektvorstellungen reinstellen.
Ich denke, daß der Ultraschall-Füllstandsmesser mit Server nicht gerade "billig" war.

Viele Grüße
Strohfeuer

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

Re: Bilder in Studio einbinden (Webcam, Diagramme...)

Beitrag von tsa » 09.07.2008, 22:32

Hallo Sanys, hallo Squeeezer, hallo all die anderen,

Stephan hat mich mit seinem ersten Beitrag (und der Funktion ImageString () auf eine Idee gebracht - da hab ich mal ein bisschen im PHP-Manual "geblättert". Ich bin sofort fündig geworden!

Da gibts z.B. auch noch eine Funktion imageloadfont(), mit der man einen selbsterstellten Bitmap-Font reinladen kann...
Und das könnte ja dann ein DIGITALFONT sein...
Vordergrundfarbe lässt sich auch einstellen (und die Hintergrundfarbe vorher über ImageFilledRectangle() auch)...

Klingelt's?

Das revolutioniert Eure Digitalanzeigen aber mächtig gewaltig!
Ausserdem könnte man auch endlich FORMATIERTE Textanzeigen (Tabellen, Listen etc.) schaffen.

Hat jemand Lust mal wieder ein bisschen PHP zu machen? Bümpi?
Ich helfe auch gerne mit...

Gruss
Thomas

Sandomor
Beiträge: 239
Registriert: 07.11.2007, 15:27
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wien
Hat sich bedankt: 1 Mal

Re: Bilder in Studio einbinden (Webcam, Diagramme...)

Beitrag von Sandomor » 10.07.2008, 08:11

Ich muss mal ganz laut DANKE sagen....

Mit diesem Thread ändert sich mein Steuerung gerade komplett....

- Grafische Werte anzeigen (Digitalanzeigen..)
- Überwachungskamera
- MySQL Datenbank für die Wertespeicherung

und vieles mehr. Ich glaube ich warte mit meinem Redisgn noch ein paar Tage, vielleicht finde ich ja noch einige Ideen die ich umsetzen will...

Danke, danke, danke
---------------------------------------------
Auf mehrfachen Wunsch hier keine Inventur meiner Homematic mehr... Viele Komponenten in BEtrieb

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

Re: Bilder in Studio einbinden (Webcam, Diagramme...)

Beitrag von buempi » 10.07.2008, 08:47

Hallo zusammen

@Thomas: Neehh, klingelt überhaupt nicht bei mir. Verstehe im Moment nur Bahnhof :(

Die Funktion imageloadfont() lädt, wenn ich das richtig verstehe, einen Zeichensatz. Aber wie bringen wir Homeputer dann bei, dass es für eine bestimmte Anzeige jetzt diesen Zeichensatz verwenden soll? Oder möchtest du dann mit PHP direkt in den Bildschirm schreiben??? - Vermutlich denke ich da ganz in die falsche Richtung??? Kannst du mir auf die Sprünge helfen?

@Strohfeuer: Das mit der Tankanzeige liesse sich mit einem Trick (allerdings etwas weniger elegant) auch mit Bordermitteln von Homeputer lösen. Du musst dir 10 Bitmaps zeichnen - von voll bis leer. Dann erstellst du eine eigene Typdefinition mit 10 Zuständen und weist jedem Zustand eines dieser Bildchen zu.

Nun erstellst du ein Objekt von diesem Typ. Nachher (nicht vorher!) ein weiteres Objekt vom Typ Zahl, in welchem später die Liter angezeigt werden. In der Ansicht legst du nun das Zahlenobjekt über das Bildchenobjekt, sodass nur noch das Bildchen sichtbar ist und der Titel sowie die Zustandsbezeichnung des Bildchenobjektes verdeckt werden.

Das Makro lautet für einen 8000-Liter-Tank dann einfach:

Code: Alles auswählen

wenn Zahlenobjekt > 7200 dann
   Bildchenobjekt := "Voll10"
endewenn

wenn Zahlenobjekt > 6400 und Zahlenobjekt <= 7200 dann
   Bildchenobjekt := "Voll9"
endewenn
Wichtig ist die Reihenfolge beim Erstellen der Objekte einzuhalten, damit in der Anzeige dann das Zahlenobjekt tatsächlich den linken Teil des Bildchenobjektes überdeckt, und nicht umgekehrt!

Bei vollem Tank (war am einfachsten zu zeichnen) könnte das dann so aussehen:

Viele Grüsse
Bümpi

Antworten

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