Mein Dashboard

Sammy M
Beiträge: 4
Registriert: Di 12. Mär 2019, 20:44

Fr 15. Mär 2019, 12:05

Hallo Dos.

Bin auf Umwegen zufällig auf Deiner Seite mit dem Dashboard gelandet. Sau stark. Genau so wie ich mir das vorstelle. Leider probiere ich schon die ganze Zeit und kome nicht so recht voran. Meine Kenntnisse bzgl. HTML und Java sind nur marginal und try and error klapt auch nicht so recht.
Meine Bitte wäre nun ein ganz einfaches Beispiel für eine HTML Seite mit einem Button der eine Szene ausführt und evtl. einem Button der den Zustand eines Markers anzeigt.
Dies wenn möglich als Step by Step Anweisung.
Ich hoffe, dass ich dann anhand dieser Beispiele weiter Aufbauen kann.
Für eine Antwort wäre ich sehr sehr dankbar.

Gruß
Sammy M
Benutzeravatar
Christoph
Beiträge: 3
Registriert: Sa 14. Mär 2020, 18:12

Di 29. Dez 2020, 12:43

Hallo @Dos,

ich bin gerade über diesen Post gestoßen und ich muss schon sagen, HUT AB !!
Dein Dashboard gefällt mir sehr gut, leider bin ich programmiertechnisch nicht wirklich begabt, dennoch würde ich gerne nur einzelne meiner Schalter und Lichter auf einem eigenen Dashboard darstellen und steuerbar machen.
Da ich wirklich ein kompletter DAU bin auf diesem Gebiet hätte ich auch gerne einen sehr "basic" Wink mit dem Betonpfeiler wie ich meine Aktoren auslesen und auf einer eigenen Seite darstellen kann. Bis dato bin ich immer wieder daran gescheitert die richtigen Befehle hinter einen Button zu legen ... es hat sich nie etwas getan.
Vielleicht kannst Du mir soweit helfen, dass der Cent fällt und ich mich dann alleine weiter richtig beschäftigen kann.

Danke :)

LG
Christoph
:geek:
Light Manager Air, Philips HUE, Intertechno, KASA, Amazon Alexa, EQ3, FS20, Trust, ... Alles quer durch!
paule26
Beiträge: 535
Registriert: Fr 18. Aug 2017, 18:37

Di 29. Dez 2020, 16:24

Hi Christoph, binzwar nicht @Dos aber ich versuchs mal.
die richtigen Befehle
Meinst Du damit die http-Requests an den Air?
Wenn ja , ist das jetzt richtig einfach geworden durch die neue Funktion im airStudio:
Optionen/Zeige HTTP Request beim testen, dann suchst Du dir den gewünschten Aktor aus und drückst auf Testen.
Somit kannst Du ganz einfach mit dem Browser testen ob es geht.
In den FAQ's steht alles nochmal genauer, auch mit Szenen.

Bei den Buttons kommt es ja drauf an wie Du das programmiert hast Java, php, HTML, dementsprechend ist die Syntax ja immer anders
Gruß Jürgen
Laserlap
Beiträge: 5
Registriert: So 21. Feb 2021, 14:31

So 21. Feb 2021, 14:43

Sammy M hat geschrieben:
Fr 15. Mär 2019, 12:05
Meine Bitte wäre nun ein ganz einfaches Beispiel für eine HTML Seite mit einem Button der eine Szene ausführt und evtl. einem Button der den Zustand eines Markers anzeigt.
Dies wenn möglich als Step by Step Anweisung.
Ich hoffe, dass ich dann anhand dieser Beispiele weiter Aufbauen kann.
Javascript/PHP Lösung:

Code: Alles auswählen

<?php
$response = $_GET['response'];
$status = $_GET['status'];
$variant = $_GET['variant'];
echo "Status: $response";
?>

<script>
    var status = "<?php echo $status ?>";
    if ( status === 'done' || status === '' ) { 
             status = 'open';
             response = 'open';
             url = "http://192.168.0.232/wordpress/javascript/?" + "response=" + response + "&status=" + status;
             document.location.href = url;
    }

    function execute(variant) {   
       var status = "<?php echo $status ?>";
       if ( typeof variant === 'undefined' ) {
          //get variant parameter from php
          var variant = "<?php echo $variant ?>";
       }
       if ( status === 'done' ) {
             //load page in ready state
       }
       else {     
          //Smarthome Steuerung
          var data = 'data';
          var xhr = new XMLHttpRequest();
          var response = 'open';

          switch(variant) {
              case 'light_on':
                    var url = "http://192.168.0.4:91/control?scene=26&user=******&pass=******";
                    break;
              case 'light_off':
                    var url = "http://192.168.0.4:91/control?scene=27&user=******&pass=******";
                    break;
              default:
                    var url = ""
          }
          
          if ( url != '' ) {
            xhr.open("POST", url, true);
            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            xhr.onreadystatechange = function () {
              if ( xhr.status === 200 || xhr.status === 0 ) {
                  response = 'OK';
                  status = 'done'
              } else {
                  response = 'ERROR';
                  status = 'done'
              }
              console.log(xhr.responseText); 
              url = "http://192.168.0.232/wordpress/javascript/?" + "response=" + response + "&status=" + status;
              document.location.href = url;
            };
            xhr.send(data);
         }
      }
    }   
</script>

<table style="width: 100%;" border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td style="background-color: #FFFF00;">
     <form method="post" action="javascript:execute('light_on')" > 
        <p align="center" style="text-align:center"> 
           <input type="submit" name="licht_an_js" value="Light On JS">
        </p>
      </form>
    </td>
    
    <td style="background-color: #191970;">
      <form method="post" action="javascript:execute('light_off')" > 
        <p align="center" style="text-align:center"> 
           <input type="submit" name="licht_aus_js" value="Light Off JS">
         </p>
       </form>
    </td>
  </tr>
</table>

<?php
if ($variant != '') {
  //echo $variant;
  ?>
  <form method='post' action='javascript:execute(<?php $variant ?>)' name='myAutoSubmitForm'>
     <script>document.myAutoSubmitForm.submit();</script> 
  </form>

<?php  
}
?>

Marker auslesen und andere Varianten:

Code: Alles auswählen

<?php


$request1 = file_get_contents("http://192.168.0.4:91/weather.json?user=********&pass=********");
$request2 = file_get_contents("http://192.168.0.4:91/params.json?user=********&pass=********");
$json1 = json_decode($request1, true);
$json2 = json_decode($request2, true);
 
echo 'Werte eines Oregon Scientific Sensors auf Kanal 2:<br>';
echo $json1['channel2']['temperature'] . '°C';
echo " | ";
echo $json1['channel2']['humidity'] . '%<br><br>';
 
echo 'Markerzustände aus der params.json:<br>';
echo $json2['marker state'];

$markerzeile = $json2['marker state'];

$marker1 = substr($markerzeile, 0, -31); // 1. Marker
$marker2 = substr($markerzeile, 1, -30); // 2. Marker
 
echo $marker1;
echo $marker2;


$url = 'http://192.168.0.4:91/control?cmd=typ,it,did,974500,aid,2,acmd,0,seq,6,smk,45,0&user=********&pass=********';
$ch = curl_init($url);

curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
curl_close($ch);

?>


<form method="post" action="javascript:light_on()" > 
<input type="submit" name="licht_an_js" value="Light On JS">
</form>

<form method="post" action="http://192.168.0.4:91/control?user=********&pass=********&cmd=typ,mka,did,5,acmd,1">
<input type="submit" name="marker006_on" value="Marker 6 ein">
</form>

<form method="post" action="http://192.168.0.4:91/control?cmd=typ,mka,did,5,acmd,2&user=********&pass=********">
<input type="submit" name="marker006_off" value="Marker 6 aus">
</form>

<form method="post" action="http://192.168.0.4:91/control?cmd=typ,mka,did,5,acmd,3&user=********&pass=********">
<input type="submit" name="marker006_toggle" value="Marker 6 toggle">
</form>



<form method="post" action="http://192.168.0.4:91/control?cmd=typ,it,did,974500,aid,2,acmd,1,seq,6,smk,45,1&user=********&pass=********">
<input type="submit" name="licht_an" value="Licht an">
</form>

<form method="post" action="http://192.168.0.4:91/control?cmd=typ,it,did,974500,aid,2,acmd,0,seq,6,smk,45,0&user=********&pass=********">
<input type="submit" name="licht_aus" value="Licht aus">
</form>

<form method="post" onSubmit="window.open('http://192.168.0.4:91/control?cmd=typ,it,did,974500,aid,2,acmd,1,seq,6,smk,45,1&user=********&pass=********')">
<input type="submit" name="licht_an_nw" value="Licht an (new window)">
</form>

<form method="post" onSubmit="window.open('http://192.168.0.4:91/control?cmd=typ,it,did,974500,aid,2,acmd,0,seq,6,smk,45,0&user=********&pass=********')">
<input type="submit" name="licht_aus_nw" value="Licht aus (new window)">
</form>

<form method="post" action="http://192.168.0.4:91/control?user=********&pass=********&scene=26">
<input type="submit" name="scene_026" value="Licht an (Scene 26)">
</form>

<form method="post" action="http://192.168.0.4:91/control?user=********&pass=********&scene=27">
<input type="submit" name="scene_027" value="Licht aus (Scene 27)">
</form>


<?php
?>

http://192.168.0.232/wordpress/javascript -->Website auf meine Synlogy NAS + Wordpress PHP AddOn
http://192.168.0.4:91 -->Lightmanager über Portweiterleitung, da dieses sich einen eine Sub-Netzwerk befindet

Marker setzen funktioniert bei mir leider nicht. Weder über Light Manager Studio noch per HTTP Request
LMAir,FB7530,FB7490,DS220 PHP,IPad
1xAWST-9000,1xAWRT-1000,1xAYCT-202,3xAYCT-102, 3xAWMT-230
3xABST-604,5xACST-606,3xAWST-6000,1xThermo, 1xKonsen
5xAPC3-2300R,3xDECT210,1x DECT200
3xASUN-650,2xACM-100,1xACM-2000,1xACM-3500, Nuki
Hue:2xStripsv4,Iris,Bridge
paule26
Beiträge: 535
Registriert: Fr 18. Aug 2017, 18:37

Mo 22. Feb 2021, 14:05

Marker setzen funktioniert bei mir leider nicht. Weder über Light Manager Studio noch per HTTP Request
Das ist im AirStudio falsch ...
http://192.168.0.4:91/control?cmd=typ,smk,1,1 (Marker 2 EIN)
Gruß Jürgen
Laserlap
Beiträge: 5
Registriert: So 21. Feb 2021, 14:31

Mo 22. Feb 2021, 22:36

paule26 hat geschrieben:
Mo 22. Feb 2021, 14:05
Das ist im AirStudio falsch ...
http://192.168.0.4:91/control?cmd=typ,smk,1,1 (Marker 2 EIN)
Vielen Dank, funktioniert super :)

wie würde die toogle Funktion aufgerufen werden?
http://192.168.0.4:91/control?cmd=typ,smk,1,3 funktioniert leider nicht
LMAir,FB7530,FB7490,DS220 PHP,IPad
1xAWST-9000,1xAWRT-1000,1xAYCT-202,3xAYCT-102, 3xAWMT-230
3xABST-604,5xACST-606,3xAWST-6000,1xThermo, 1xKonsen
5xAPC3-2300R,3xDECT210,1x DECT200
3xASUN-650,2xACM-100,1xACM-2000,1xACM-3500, Nuki
Hue:2xStripsv4,Iris,Bridge
Benutzeravatar
rtwl
Beiträge: 1269
Registriert: So 30. Dez 2018, 18:08

Mo 22. Feb 2021, 23:07

Mit der 0 oder der 2 ganz am Ende
Peter
Laserlap
Beiträge: 5
Registriert: So 21. Feb 2021, 14:31

Mo 22. Feb 2021, 23:38

Danke :) Logisch :roll:
Javascript/PHP Lösung:
Kleine Ergänzung noch zum Coding:
http://192.168.0.232/wordpress/javascript/ -->"/javascript/" ist die PHP Seite auf dem das ganze Coding hinterlegt ist und diese muss entsprechende angepasst werden (Zeile 13 und 55), damit nach der Ausführung wieder die gleiche Seite geladen wird

Und eine Funktion kann auch direkt per URL aufgerufen werden:
http://192.168.0.232/wordpress/javascri ... t=light_on


Kopieren der Markerstände in eine Datenbank (MariaDB auf der NAS)

Code: Alles auswählen

<?php
$mysqli = new mysqli("http://192.168.0.232", "**user**", "**password**", "**database**");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

/* change db to smarthome db */
$mysqli->select_db("smarthome");


$request1 = file_get_contents("http://192.168.0.4:91/weather.json?user=********&pass=**********");
$request2 = file_get_contents("http://192.168.0.4:91/params.json?user=*********&pass=**********");
$json1 = json_decode($request1, true);
$json2 = json_decode($request2, true);
 
echo 'Werte eines Oregon Scientific Sensors auf Kanal 2:<br>';
echo $json1['channel2']['temperature'] . '°C';
echo " | ";
echo $json1['channel2']['humidity'] . '%<br><br>';
 
//get Marker states into array
$markerzeile = $json2['marker state'];
for ($i = 0 ; $i < 64; $i++){ 
   $marker[$i] = substr($markerzeile, $i, 1);
   echo $marker[$i];
}
echo " = Markerzeile Array</br>";
echo $markerzeile . " = Markerzeile Original</br>"; 


//get MAC-Address of Lightmanger
$mac_address = $json2['mac addr'];

echo "</br>";
for ($i = 0 ; $i < 64; $i++){ 
   //get other names
   $lightmanager_name = "LM_$mac_address";
   $marker_name = str_pad($i + 1, 3, 0, STR_PAD_LEFT);
 
   //get marker text value
   if ( $marker[$i] === '0') {
      $value = "FALSE";
   }
   else {
      $value = "TRUE";
   }
   
   //update database
   if ($result = $mysqli->query("INSERT INTO marker (source, marker_id, value) VALUES ('$lightmanager_name', '$marker_name', '$value')")) {   
       echo "Marker " . $marker_name . ":</br> $marker[$i] (ins-$i)</br>";
   } else {
           if ($result = $mysqli->query("UPDATE marker SET value = '$value' WHERE source = '$lightmanager_name' AND marker_ID = '$marker_name'")) {
           echo "Marker " . $marker_name . ":</br> $marker[$i] (upd-$i)</br>"; 
       } else {
            printf("Insert and Update failed");
       }
   }
}

$mysqli->close();


?>

Markerausgabe:

Code: Alles auswählen

<?php
$mysqli = new mysqli("http://192.168.0.232", "**user**", "**password**", "**database**");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

/* change db to world db */
$mysqli->select_db("smarthome");


echo "<table><tr><td>Source</td><td>Marker</td><td>Value</td><tr>";
$i = 0;
if ($result = $mysqli->query("SELECT * FROM marker")) {
    
    echo "Returned rows are: " . $result -> num_rows."</br>";
    while ($row = mysqli_fetch_row($result)) {
      print("<td>".$row[0]."</td>");
      $table[$i][0] = $row[0];
      print("<td>".$row[1]."</td>");
      $table[$i][1] = $row[1];
      print("<td>".$row[2]."</td></tr>");
      $table[$i][2] = $row[2];
      $i = $i + 1;
    }   

    $result->close();
}

echo "</table>";

$mysqli->close();

echo "Tableline 52 (Marker 53):" . $table[52][0] . " - " . $table[52][1] . $table[52][2];

echo "<script type='text/javascript'>setTimeout(function () { location.reload(true); }, 5000);</script>";

?>
LMAir,FB7530,FB7490,DS220 PHP,IPad
1xAWST-9000,1xAWRT-1000,1xAYCT-202,3xAYCT-102, 3xAWMT-230
3xABST-604,5xACST-606,3xAWST-6000,1xThermo, 1xKonsen
5xAPC3-2300R,3xDECT210,1x DECT200
3xASUN-650,2xACM-100,1xACM-2000,1xACM-3500, Nuki
Hue:2xStripsv4,Iris,Bridge
wireless-dj
Beiträge: 445
Registriert: Sa 26. Mär 2016, 08:08

So 24. Sep 2023, 15:30

Hallo,

Ich muss diesen Beitrag mal aus der Versenkung holen.

Ich habe bereits einen selbst gebastelten „Home Info Screen“, der mir bislang die Energiezuszände im
Haus anzeigt. Solaranlage, Stromverbrauch, E-Auto laden, usw. Das hab ich mit html und PHP hin gefrickelt,
und läuft soweit gut.

Diesen Screen möchte ich nun um ein paar Schaltflächen erweitern, für einige wichtige Lampen.
Diese werden bei mir über http-Requests geschaltet.

Ich verzweifele gerade daran, diese Requests vernünftig und funktional auf Buttons zu legen.
Letztendlich wird so ein Button ja mit <form> gesendet. Das ist bei mir aber ungünstig.

Hat Jemand eine Quick and Dirty Lösung - möglichst kurz - in Form eines Codeschnipsel, wie man
a) einen http Reuest z.B. „onclick“ absetzen kann, ohne dass danach die ganze Seite neu geladen wird, oder
b) eine Idee, wie ich einzelne Teile der Weboberfläche vom LMAir in die vorhandene Seite mit einbinden kann?

Danke & Gruß,

Volker
Antworten