IPS webserver

da Ihr schon so nett seid, erlaube ich mir, eine weitere Frage zu stellen! Ich versuche, mittels Buttons Geräte an- und abzuschalten. Um zu vermeiden, dass die HTML-Seite immer wieder aufgefrischt wird, habe ich mich entschieden, jQuery zu verwenden.

Ich habe nun eine Test-Seite eingerichtet mit 2 Knöpfen: „Switch on“ und „Switch off“. Switch On funktioniert wunderbar: Der Knopfdruck löst ein PHP-Skript bei IPS aus, und das Licht geht an. Allerdings weiss ich nicht, wie ich den Value von „Switch off“ (oder jedem sonstigen Value) an die .post Methode von jQuery weitergeben kann, so dass die entsprechende Aktion ausgeführt wird. Der untenstehende Code sollte das Problem veranschaulichen:


<!DOCTYPE html>
 <html lang="en">
 <head>
   <meta charset="utf-8">
   <title>jQuery demo</title>
 </head>
<body>

   <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
   <script>
     $(document).ready(function(){
       $("#myform").click(function(event){
	   $.post("ExecuteFS20.php?action=SwitchOnFS20&id=47438", { func: "Einschalten" },
      function(data){
    }, "json");
      event.preventDefault();
       });
     });
   </script>

<form name="myform" id="myform" action="" method="POST">
  <!-- The Submit button -->
  <input type="submit" name="Switchon" value="Switch on"> 
  <br>
  <input type="submit" name="Switchoff" value="Switch off"> 
</form>
<!-- We will output the results from process.php here -->
<div id="results"><div>

</body>
</html>


Ich würde es als erste mit einer zweiten Form (anderer Namen/ID) verwenden und das Script dann kopieren und anpassen (Form ID und SwitchOff)

Ich melde Erfolg! Mittels JavaScript und jQuery habe ich eine allgemeingültige Lösung gebastelt, um Buttons auf Webseiten zu platzieren, welche IPS-Instanzen schalten. Hier eine Html-Seite mit entsprechendem Script als Beispiel, sowie ein dazugehöriger PHP-Script. Die „alert“-Property der $.get-Funktion, sowie die verschiedenen eingestreuten Echos, dienen dem Debugging und kann ausgeschaltet werden.

Allgemeine Webpage (kann beliebig customisiert werden):


<!DOCTYPE html>
 <html lang="en">
 <head>
   <meta charset="utf-8">
   <title>jQuery demo</title>
 </head>

<body>

  <input type="button" onclick="GenericAction('FS20_SwitchMode (23616, true);')" value="Switch on FS20" />
  <input type="button" onclick="GenericAction('FS20_SwitchMode (23616, false);FS20_SwitchMode (23616, false);')"" value="Switch off FS20" />
  <input type="button" onclick="GenericAction('')" value="Generic action" />
</body>
</html>

 
     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
     <script src="http://malsup.github.com/jquery.form.js"></script>  
     <script type="text/javascript"> 

function GenericAction($IpsCommand) {
	 $.get('ControlInstance.php', { action: $IpsCommand, instance: "23616" }, function(data) {
  $('.result').html(data);
  alert('GenericAction was performed' + data);
});
} 
   </script> 

Script: „ControlInstance.php“


<?php 
if(isset($_GET['action'])  )
    { 
        $action = $_GET['action'];
		echo chr(13)."'".$action."'". "wird gleich ausgeführt".chr(13);
		eval($action); 
    } 

echo "ausgeführt!".chr(13);
?> 


Nun, diese Aussage stimmt so nur halb. Ich habe nämlich eine Lösung erarbeitet, welche die Funktionalität des IPS-Webservers wesentlich erweitert. Sie funktioniert und hat allerlei IPS-Updates überstanden.

Andererseits hat Raketenschnecke völlig recht, dass Eingiffe in IPS selbst weder wartbar noch trobleshooting-fähig sind. Wie kann man das denn lösen? Meine Lösung bestand darin, (1) die allgemeine Webserver-Instanz von IPS zu verwenden anstelle von Webfront, und (2) die Webserver-Instanz über einen Reverse Proxy zu leiten, welcher eine flexiblere Authentifizierung und User-Verwaltung erlaubt.