Der Button kommt aber aus dem Code (Dojo oder wer auch immer)
Meine o.g. Sprechblase IST transparten/freigestellt.
Nur der Code, der mir das hier schlatbarmachen soll auf der HTML-Seite bastelt immer die Buttons drum,
ich kenn mich mit den Attributen leider ned aus…
Hallo…
Da hat sich sicher irgendwo ein Fehler eingeschlichen… Wie erwähnt aktiviere unbedingt die Anzeige von Javascript Errors um zu sehen ob da vielleicht was nicht stimmt. Es genügt ein falsches Zeichen irgendwo an einer Stelle und es geht nichts mehr. Wenn die Statusanzeige stimmt und das schalten nicht geht… dann ist irgendwo im Javascript ein Fehler drinn. Teste auch noch mit dem Paresy html ob die Verbindung überhaupt besteht aber die ist bei mir noch nie verreist, ich denke kaum das da was nicht stimmen würde. IPSymcon $Dienst muss natürlich auch laufen…
Sorry war gestern und heute noch an einem Projekt dran um Kamarabilder analysieren zu können… werd ich hier dann mal auch noch zeigen wenns soweit ist.
Doch das geht… du kannst die Grafik ohne „Buttonhintergrund“ anzeigen lassen. Im Prinzip geht das sehr einfach und ja… es sind schlussendlich CSS Definitionen mit denen du das machen kannst. Bei mir stellte sich diese Frage aber nie, da ich immer einen Rahmen (eben rot grün etc. je nach Status) um die Grafik mache und nicht mit Bubbles arbeite. Die einfachste Lösung, du musst nur ganz am Anfang des Codes diese Zeile
Und sonst… suchen… man kommt immer weiter aber manchmal ist es holt etwas zeitintensiver…
Diese Themen beinhalten CSS Code den du auch auslesen und danach an den Buttons nur das ändern kannst was du willst… . Ein Tipp wäre dann nur noch, du kannst den Pfad vom css oben auch in den Browser eingeben und siehst den Quellcode und was darin gemacht wird und wie es geht zbsp die Transparenz zu setzen.
wie angekündigt hier eine ganz simple Variante des Floorplan Themas:
Features:
Gerät werden bei Klick aufs entsprechede Icon geschaltet (via individuell definierbarem Userscript)
Floorplan wird sofort upgedated
bei Schalten von Geräten via über andere Quellen wird der Floorplan sofort und ohne Verzögerung aktualisiert (kein pollen)
Das hier ist nur ein ganz simples Framework um die Technik der Interaktion zwischen Floorplan und IPS zu zeigen. Gestalterisch stehen euch da noch alle Wege offen.
Bitte eine Kategorie beliebigen Namens erstellen, und das Script unter beliebigem Namen darin abspeichern.
Weiters eine String Variable beliebigen Namens mit dem Profil ~HTMLBox anlegen.
Diese Variable enthält den HTML Code des Floorplanes. Sie ist per Webfront Configurator ins Webfront entsprechend einzubinden.
Die ID dieser Variablen muß im Script eingetragen werden.
/*
* Add a Categorie, name is free of choice
* Add this Script in this categorie, name is your choice
* Add a Variable (string) with profile ~HTMLBox,
* The ID of the Variable need to be put in $id_Floorplan !!
* Create directory in /Webfront/user/Floorplan/ to pt you own icons and floorplan inside
* maintain directory names in case you use different one
*
* Some credits go to user WGreipl and Horst who publishd the technic of this script/
*/
$id_Floorplan = 30670 /*[Floorplan\Floorplan]*/;
$ImgFloorplan = '"user\floorplan est_ohne_icon.png"';
//________________________________________________________________________________________
IF ($_IPS['SENDER'] == 'RunScript') {
switch ($action)
{
case 'FlurInnen':
IPS_RunScriptEx(53579 /*[Programe\Lichtsteuerung\Lichtsteuerung Schalter]*/, Array("WF" => "WF_Flur"));
break;
/*
case 'Your Device Name':
Your script or command to switch your actuator
break;
*/
}
}
IF (($_IPS['SENDER'] == 'Variable') or ($_IPS['SENDER'] == 'Execute')){
// Your Script to get Actuator icon
$BulpFlurInnen = getBulbIcon(39158 /*[Licht\Flur Erdgeschoß\Status]*/);
$ausgabe ='<p>';
$ausgabe.= '<div id="floorplan" style=width:450px; height:450px; position:absolute; left:0px; top:0px; z-index:-1;>';
$ausgabe.='<p><img src='.$ImgFloorplan.'; border="0"></p> </div>';
$ausgabe.='<div style="width:100x; height:100px; position:absolute; left:220px; top:200px; z-index:1";
onclick="dojo.xhrGet({ url: \'user/buttons.php?ts=\' + (new Date()).getTime() + \'&ScriptID='.$IPS_SELF.'&do=FlurInnen\' })";>
<p><img src='.$BulpFlurInnen.' width=13 height=20 border=0</p> </div>';
// $ausgabe.= .... your code to add further device
SetValue($id_Floorplan,$ausgabe);
}
//_______________________________________________________________________________________
function getBulbIcon($idStatus) {
IF ((GetValue($idStatus)) == true) {
$IconPath = 'user\floorplan\BulpOn.png';
}
else{
$IconPath = 'user\floorplan\BulpOff.png';
}
return $IconPath;
}
Für jede zu monitorende Statusvariable ist ein Trigger „Bei Variablenupdate“ auf das Script zu legen.
Dann noch unter /Webfront/User/ ein Directory namens „floorplan“ anlegen und euren Floorplan (oder die beigefügten Demodateien reinkopieren.
Unter /User ein File namens „buttons.php“ anlegen und diesen Code reinkopieren:
Wird ein Gerät geschaltet, so ändert sich dessen Statusvariable.
Diese triggert das Script und der Codeteil: IF (($_IPS[‚SENDER‘] == ‚Variable‘) …
wird aufgerufen.
Darin wird erstmal für alle Geräte das passende Icon ausgewählt und dann mit einem leeren Floorplan zu einer kompletten Darstellung zusammengefügt.
Dem Icon wird das Script „…buttons.php…“ und über "…’&do=FlurInnen’… eine geräteabhängige Konstante mitgegeben.
Wird nun das Icon im Floorplan angelickt, so startet „buttons.php“ und dieses aktiviert seinerseits wieder das Script.
Diesmal ist allerdings der „… IF ($_IPS[‚SENDER‘] == ‚RunScript‘)…“ Codeteil aktiv. Dieser bekommt die vorher erwähnte Konstante ( hier „FlurInnen“ ) übergeben und kann per Auswahl damit den jeweiligen Aktor schalten.
Durch schalten des Aktors ändert sich seine Statusvariable und der Kreis ist geschlossen.
Damit der Schaltvorgang funktioniert musst du entweder ein Script anlegen und die ID oben gegen deine ID tauschen und dort drinn die Schaltvorgänge vornehmen oder du kannst einfacher direkt anstatt der Zeile oben etwas einsetzen wie
<?
/*
* Add a Categorie, name is free of choice
* Add this Script in this categorie, name is your choice
* Add a Variable (string) with profile ~HTMLBox,
* The ID of the Variable need to be put in $id_Floorplan !!
* Create directory in /Webfront/user/Floorplan/ to pt you own icons and floorplan inside
* maintain directory names in case you use different one
*
* Some credits go to user WGreipl and Horst who publishd the technic of this script/
*/
$id_Floorplan = 38955 /*[WebFront\Floorplan\floorplan]*/ ;
$ImgFloorplan = '"user\floorplan est_ohne_icon.png"';
//________________________________________________________________________________________
IF ($_IPS['SENDER'] == 'RunScript') {
switch ($action)
{
case 'FlurInnen':
HM_WriteValueBoolean(24420 /*[Homematic\Geräte\Schalter\Flur LS]*/ , "STATE", true);
// IPS_RunScriptEx(11530 /*[Scripte\Schaltscripte\Flur Licht]*/ , Array("WF" => "WF_Flur"));
break;
/*
case 'Your Device Name':
Your script or command to switch your actuator
break;
*/
}
}
IF (($_IPS['SENDER'] == 'Variable') or ($_IPS['SENDER'] == 'Execute')){
// Your Script to get Actuator icon
$BulpFlurInnen = getBulbIcon(35819 /*[Homematic\Geräte\Schalter\Flur LS\STATE]*/ );
$ausgabe ='<p>';
$ausgabe.= '<div id="floorplan" style=width:450px; height:450px; position:absolute; left:0px; top:0px; z-index:-1;>';
$ausgabe.='<p><img src='.$ImgFloorplan.'; border="0"></p> </div>';
$ausgabe.='<div style="width:100x; height:100px; position:absolute; left:220px; top:200px; z-index:1";
onclick="dojo.xhrGet({ url: \'user/buttons.php?ts=\' + (new Date()).getTime() + \'&ScriptID='.$IPS_SELF.'&do=FlurInnen\' })";>
<p><img src='.$BulpFlurInnen.' width=13 height=20 border=0</p> </div>';
// $ausgabe.= .... your code to add further device
SetValue($id_Floorplan,$ausgabe);
}
//_______________________________________________________________________________________
function getBulbIcon($idStatus) {
IF ((GetValue($idStatus)) == true) {
$IconPath = 'user\floorplan\BulpOn.png';
}
else{
$IconPath = 'user\floorplan\BulpOff.png';
}
return $IconPath;
}
?>
Am Mauszeiger ändert sich beim überfahren auch nichts.
Ich hatte auch einen Fehler welchen ich mit Firefox durch einblenden der „Web-Konsole“ fassen konnte:
Ich hatte die button.php fälschlicherweise in das /User/Floorplan Unterverzeichnis kopiert und nicht in /user.
Über die Webkonsole des Firefox konnte ich den Fehler dann recht schnell lokalisieren (404 Not found…)
Auch wichtig ist, das die Datei button.php heisst und nicht wie in Bernhard’s erstem Post buttons.php.
Das ist ein Superskript, vor allem mit relativ verständlichem Code
Im HTML Teil ist absichtlich nur das mindeste drinnen um die nackte Funktion zu demonstrieren.
Persönliche Verschönerungen und Features wie zb. ein „On_Mouseover“ oder sowas sind dann jedem seine eigen Sache und Geschmack.
So wie Icons oder die Darstellung es Grundriß.
Falls ihr Code gut findet und den HTML Teil schön-bastelt wäre es nett wenn ihr eure Anpassungen oder Resourcen posten würdet.
Optische Anregungen sind immer erwünscht.
Hatte wohl Glück und ging bei mir grad von Anfang an. Vielen Dank fürs posten der Lösung! Die Implementation ist identisch wie bei Sonos die Member-Gruppen Bildung gelöst ist.
Cooler Ansatz, einfach, übersichtlich und vor allem einfacher zu debuggen - da vieles in IPS passiert und man im eigenen Schiff bleibt. Find ich super vielleicht hat jemand noch eine andere Technik oder einen Ansatz mit dem man so einen Floorplan realisieren könnte? Bisher habe ich bei beiden Lösungen viele Vorteile und aber auch Nachteile/Probleme gefunden. Eine Kombination der beiden Techniken wäre für mich aktuell die beste Lösung und je mehr Lösungsansätze wir haben um so besser wird das finish.