Hier kommt ein richtiges Goodie! Ich habe eine Möglichkeit ausgelotet, um jegliche IPS-Befehle in eine beliebige HTML-Seite zu integrieren. Ich denke, diese Anleitung könnte für den einen oder anderen vonnutzen sein.
Meine Lösung verwendet eine vereinfachte Schnittstelle zu AJAX namens jquery. Dazu ist notwendig, jquery in die HTML-Seite einzubinden. Das geht mit folgendem Code:
Im obigen Fall soll ein Licht angehen (Instanz 23616), welches durch FS20 kontrolliert wird.
Diese Lösung funktioniert prima für mich, und erweitert die Möglichkeiten des IPS-Einsatzes erheblich. Ich bin aber kein Programmierer, und würde mich freuen über jegliche Kritik/Anregung/Vereinfachung/Verbesserungsvorschlag etc. Ein kleines Caveat ist z.B., dass die Funktion „eval()“ unter PHPlern offenbar verpönt ist („eval is evil“) da ein gewisses Sicherheitsrisiko entsteht. Für mich ist dieses Risiko überschaubar, aber man sollte sich dessen bewusst sein.
Coole Sache
Eben probiert funktioniert einwandfrei.
Vorher muss aber noch jquery.js aus dem Internet geladen werden.
Habs auch mit dem iPhone probiert - geht.
Script zum sofortigen ausfuehren ohne Button zu druecken
ich setze die PHP-Skripte lieber in ein Verzeichnis, welches vom Web aus nicht zugänglich ist - aus Sicherheitsüberlegungen heraus. Bringt aber wahrscheinlich sowieso nicht viel.
Ich verwende einen ähnlichen Code, aber folgende mahnenden Worte seien gesagt:
Du unterläufst damit jegliche IPS-Sicherheitsregeln (Passwortschutz von Webfront usw.) und jeder der Zugriff auf dein Netz hat kann damit dein IPS steuern. Außerdem kann er damit auch mehr tun, z.B. deine Festplatte löschen (oder was man halt sonst so per PHP-Befehl machen kann), denn das PHP wird auf dem IPS-Server ausgeführt und der hat recht weitreichende Möglichkeiten…
Hagbard: Du hast 100% recht, und Deine mahnenden Worte sollten von jedem Leser beherzigt werden! So wie der Skript dargelegt ist, sollte er auf keinen Fall in einer öffentlichen Webseite eingefügt werden.
Es ist aber nicht so, dass dieses Problem nicht gelöst werden kann! In meinem Falle sind die entsprechenden Webseiten nur über ein Apache-Reverse Proxy erreichbar, welches die einzige Aufgabe hat, Sicherheit zu gewähren. Letzteres läuft derzeit mit basic authentication und SSL (als nächstes will ich Digest Authentication einführen; ein erster Versuch war jedoch nicht zielführend).
In der Tat! Jquery ermöglicht, Buttons zu schalten ohne dass die ganze Seite gleich wieder geladen wird. Wenn man keine Buttons will/braucht, dann brauchts auch kein jquery!
Es gibt noch etwasy, was mir nicht gelungen ist. Gerne würde ich den Zustand einer Variable in einer Website darstellen - so wie das auch in Webfront geschieht.
Ich habe verstanden, dass dazu ein Ajax-Poll nötig ist, so dass die Webseite z.B. alle 10 Sekunden die Variable abfragt und allenfalls ändert - ohne dass gleich die ganze Seite wieder geladen wird. Hagbart: hättest Du vielleicht ein Code-Snippet für mich dazu???
Vielen dank! Ich meinte zwar etwas anderes - aber ich hatte mich nicht eindeutig ausgedruckt.
Mein gegenwärtiges Hindernis ist, dass ich nicht weiss, wie ich eine IPS-Variable auf einer Webseite regelmässig updaten kann, ohne jedesmal die ganze Seite neu zu laden. Das geht offenbar nur mit Ajax/jquery, ähnlich zu dem obigen Skript für die Buttons.
Nur: Die Website wird von einem anderen System (das zwar zufällig auf demselben REchner wie IPS läuft, aber eben vielleicht auch mal woanders) „angeboten“ (dynamische Webseite und daher auch authentifiziert etc.).
Frage also:
Was muss auf eine - nennen wir es für dieses Beispiel „externe“ Webesite eingebaut werden, um an IPS (z.B. an einen UDP Socket) einen (oneway, fire&forget) Befehl, oder sagen wir „String“ (wie´der dann interpretiert wird ist ne andere Sache, er soll aber im Socket ankommen) absetzen zu können?
da ich nach jedem Strohhalm greife, der mir evtl. ermöglicht, durch den Klick auf einen Button im WF eine IPS-Funktion bzw. ein IPS-Script auszuführen, hatte ich auch diese Variante versucht. Geht leider auch nicht! Die Buttons werden erstellt, lassen sich aber nicht klicken! Passiert rein gar nichts. Noch nicht einmal eine kleine Bewegung beim Klicken.
Was habe ich gemacht?
Unter webfront\user das File ControlInstance.php mit diesem Inhalt erstellt:
komme erst jetzt dazu.
Feine Sache - geht. Habe mal auf Button umgestellt - alles Bestens. Danke!
Nun würde ich gern damit IPS-Befehle absetzen wollen, z.B. Licht schalten. Der Befehl dazu muss dann ja in der Variable $do1 bzw. $do2 eingebracht werden. Nur wie sorge ich nach Übergabe an der für dessen Ausführung? Derzeit wird übergebene Text angezeigt. Aber wie führe ich den Befehl aus, der per $action übergeben wird?
Anstatt der WFC_SendNotification baust Du dir entweder dort die Befehle deiner Wahl hin oder machst einen Skriptaufruf via IPS_RunScript(Ex)
case 'panik1':
// Hier die Aktionen für Panik-Knopf 1
WFC_SendNotification($id_wfc, "PANIK", $action, "Information", 5);
break;
case 'panik2':
// Hier die Aktionen für Panik-Knopf 1
WFC_SendNotification($id_wfc, "PANIK", $action, "Information", 5);
break;
Ich meinte, wenn der Inhalt von $action folgender íst:
HM_WriteValueBoolean(12345, "STATE", false);
Wie kann ich dann den Inhalt von $action als IPS-Befehl ausführen, so dass es dann thoretisch so aussieht:
case 'panik1':
// Hier die Aktionen für Panik-Knopf 1
HM_WriteValueBoolean(12345, "STATE", false);
WFC_SendNotification($id_wfc, "PANIK", $action, "Information", 5);
break;
case 'panik2':
// Hier die Aktionen für Panik-Knopf 2
HM_WriteValueBoolean(54321, "STATE", true);
WFC_SendNotification($id_wfc, "PANIK", $action, "Information", 5);
break;
Also in $action wird ein kompletter IPS-Befehl bzw. Anweisung übergeben und soll dann an dieser Stelle ausgeführt werden.
EDIT: Mir fällt gerade ein, ob man zur Laufzeit ein neues Sript erstellen lassen kann, als dessen Inhalt den Wert aus $action einfügt und das Script dann ausführen lässt. Anschließend das Script wieder löschen. Quasi nur als temporäres Dasein. Somit enthält $action den Inahlt dieses Scriptes. Man wäre flexibel (könnte also unterschiedliche Befehle z.B. für das Lichtschalten unterbringen HM oder FS20 oder W&T oder …) und … Ich werde diesen Gedanken mal angehen. Nun aber erstmal in die Heia.
Hagbard235
Den reinen Wert kriegst du per einfachem
PHP-Code:
return IPS_GetValue (VariablenID);
Wo genau füge ich diesen „return“-Code ein. Das schreiben von Variablen klappt. Würde jetzt aber noch gerne den Status von Variablen lesen. Habe z.B. zwei Bilder „Light_on.png“ und „Light_off.png“. Diese will ich dann, auf meiner HTML-Seite, je nach Status von einer bestimmten Variablen anzeigen.
Das heißt:
Variable=False ==> Bild=„Light_off.png“
Variable=True ==> Bild=„Light_on.png“
Kann mir da einer auf die Sprünge helfen? Bin noch nicht so Fit in PHP und HTML, alles so bischen „Learning by doing“