Variable in CCU schreiben mit formular, php

Haussteuerung mittels mediola

Moderator: Co-Administratoren

Antworten
33zdenko
Beiträge: 343
Registriert: 21.12.2013, 16:50
Danksagung erhalten: 4 Mal

Variable in CCU schreiben mit formular, php

Beitrag von 33zdenko » 15.06.2016, 12:33

Für die frage hier im mediola forum
http://answers.mediola.com/2142053/Texteingabe
Hier zwei beispiele wie man eine zeichenkette variable und eine werteliste variable, mit neo in CCU schreibt, mit einer webseite mittels php:

zeichenkette:
in der ccu eine variable vom typ zeichenkette erstellen, name "TriggerTest"

die textform.zip datei laden und
diese zeile in der datei setze_text.php anpassen...also ip der ccu

Code: Alles auswählen

$CCU_IP = "192.168.1.35";
der Variablen name in der ccu steht in dieser zeile

Code: Alles auswählen

$HM_Script = "dom.GetObject('TriggerTest').State(".$status.");"; 
also TriggerTest mit eigenem namen ersetzen
den ordner auf eigenen webserver laden und in neo einen webseitenelement einfügen mit der url
http://ipserver/textform
in das feld klicken, einen wert eingeben und die variable setzen mit submit
hier die datei textform.zip
textform.zip
(2.5 KiB) 198-mal heruntergeladen
mit einer werteliste:
eine variable vom typ werteliste, im format: wert1;wert2;wert3 anlegen, mit dem namen "TriggerWecker" anlegen
wie oben die datei setze_text.php anpassen

Code: Alles auswählen

$CCU_IP = "192.168.1.35";
hier ist die zeile mit dem namen der variable

Code: Alles auswählen

$HM_Script = "dom.GetObject('TriggerWecker').ValueList(".$status.");"; 
also TriggerWecker mit eigenem namen der variable ersetzen
und wie oben den ordner textform1 auf den webserver laden
im inputfeld muss man die variable so befüllen:
text;deintext;wert
der letzte wert ohne ;
die variable hat dann einen wert: text;deintext;wert
hier die datei textform1.zip
textform1.zip
(2.52 KiB) 132-mal heruntergeladen
das funktioniert so nur von eigenem lokalem webserver mit php, aus dem web musste man die ports im router freigeben für die ccu

skiworker
Beiträge: 9
Registriert: 11.12.2016, 13:33

Re: Variable in CCU schreiben mit formular, php

Beitrag von skiworker » 04.02.2018, 11:18

Hallo,

leider funktioniert das php-Program "setze_Text" bei mir leider nicht. Ich bekomme beim direkten Aufruf im Browser (Firefox) den Fehler "400 Bad Request" zurück. Die Variable "$status" habe ich dabei manuell einen Wert gegeben.
Mein angepasstes Script sieht normal so aus:

Code: Alles auswählen

<?php
$CCU_IP = "192.168.168.24";
$status = $_POST['daten'];

$HM_Script = 'dom.GetObject("AQ-Wassertemp-Soll").State('.$status.')'; 
echo $HM_Script;
echo HMRS_HTTP_Post($CCU_IP, $HM_Script);

function HMRS_HTTP_Post($CCU_IP, $HM_Script)
{

// Initialisieren der Socket-Verbindung
$fp = fsockopen ($CCU_IP, 8181, $errno, $errstr, 2);
$res = "";

if (!$fp)
{
    $res = "$errstr ($errno)<br />\n";
}
else
{
    // Zusammenstellen des Header für HTTP-Post
    fputs($fp, "POST /rega.exe HTTP/1.1\r\n");
      fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
      fputs($fp, "Content-length: ". strlen($HM_Script) ."\r\n");
      fputs($fp, "Connection: close\r\n\r\n");
      fputs($fp, $HM_Script);
    while(!feof($fp))
    {
       $res .= fgets($fp, 500);
    }
	fclose($fp);
}

return $res;


}  

?>
Allerdings passiert beim Eingeben des Textes und clicken des Buttons nichts.

Hier der Code, um die Datei "setze_Text" manuell auf zurufen:

Code: Alles auswählen

<?php
$CCU_IP = "192.168.168.24";
$status = "25";								//$_POST['daten'];

$HM_Script = 'dom.GetObject("AQ-Wassertemp-Soll").State('.$status.')'; 
echo $HM_Script;
echo HMRS_HTTP_Post($CCU_IP, $HM_Script);

function HMRS_HTTP_Post($CCU_IP, $HM_Script)
{

// Initialisieren der Socket-Verbindung
$fp = fsockopen ($CCU_IP, 8181, $errno, $errstr, 2);
$res = "";

if (!$fp)
{
    $res = "$errstr ($errno)<br />\n";
}
else
{
    // Zusammenstellen des Header für HTTP-Post
    fputs($fp, "POST /rega.exe HTTP/1.1\r\n");
      fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
      fputs($fp, "Content-length: ". strlen($HM_Script) ."\r\n");
      fputs($fp, "Connection: close\r\n\r\n");
      fputs($fp, $HM_Script);
    while(!feof($fp))
    {
       $res .= fgets($fp, 500);
    }
	fclose($fp);
}

return $res;


}  

?>
Wie gesagt, hier bekomme ich den Fehler "400 Bad Request" zurück.
Ich benutze den Appache2 auf einen Raspi als Webserver.

Hier die Fehlermeldung dazu:
"dom.GetObject("AQ-Wassertemp-Soll").State(25)HTTP/1.1 400 Bad Request Content-Type: text/html Content-Length: 349 Connection: close Date: Sun, 04 Feb 2018 10:09:09 GMT Server: lighttpd/1.4.31
400 - Bad Request"

Was ich dazu sagen muß, ich möchte eine CCU2-Variable vomTyp Integer beschreiben. Deshalb ist die 25 nicht in Anführungszeichen.
Ich sitze schon seit Tagen (mit Hilfe von Google usw.) dran, eine Lösung zu finden. Zu meinem Bedauern komme ich nicht weiter.
Ich hoffe, dass von Euch vielleicht jemand eine Idee hat.
Ich habe in einen anderen Tread gelesen, das dort der Http-Aufruf "http://192.168.168.24:8181/rega.exe?sta ... .State(25)" in eine php-Variable gespeichert wurde. Allerdings fehlt mit hier die Kenntnis, wie ich dann diese php-Variable weiter verwende, um diese per http in php zu senden.

Ich hoffe, ihr könnt mir helfen....


Grüße
skiworker

33zdenko
Beiträge: 343
Registriert: 21.12.2013, 16:50
Danksagung erhalten: 4 Mal

Re: Variable in CCU schreiben mit formular, php

Beitrag von 33zdenko » 05.02.2018, 20:18

Hallo
Weiss ich nicht warum das nicht klappt, hast du raspimatic oder ccu2

mit diesem code kannst du es machen:

Code: Alles auswählen

<?php
//$status = $_POST['daten']; 
//wenn du es mit dem formular machen willst,dann .$var. mit .$status. ersetzen, die zeile $var = 4; löschen und die erste so schreiben, $status = $_POST['daten']; 
$var = 4;
$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_PORT => "8181",
  CURLOPT_URL => "http://192.168.1.35:8181/rega.exe?state=dom.GetObject(%22AQ-Wassertemp-Soll%22).State(".$var.")",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => array(
    "cache-control: no-cache",
    "postman-token: b93e73c7-baa1-3312-0d29-7400f3431b3b"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}

?>
also nochmal, wenn du es über neo machen möchtest musst du dann auch das javascript file anpassen, da es gedacht war zeichen zur ccu zu senden:

script.js:

Code: Alles auswählen

function myFunction() {
    var name1 = document.getElementById("name").value;
 // name1 = "'" + name1 + "'";  
//hier oben wurden die '' zeichen gesetzt zum senden des strings, da du aber eine zahl senden willst ist die zeile deaktiviert
    
    if (name1 == '' )
    {
        alert("Bitte einen Wert eingeben");
    }
    else
    {
//AJAX code formular senden
      // alert("Bitte einen Wert eingeben");
       
        $.ajax({
            type: "POST",
            url: "setze_text.php",
            data: {daten: name1},
            cache: false,
            
        });
    }
    return false;

}
und nochmal der code setze_text.php um über formular/neo zu senden

Code: Alles auswählen

<?php
$status = $_POST['daten'];

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_PORT => "8181",
  CURLOPT_URL => "http://192.168.1.35:8181/rega.exe?state=dom.GetObject(%22AQ-Wassertemp-Soll%22).State(".$status.")",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => array(
    "cache-control: no-cache",
    "postman-token: b93e73c7-baa1-3312-0d29-7400f3431b3b"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}

?>
ganz oben ist der php code um es mit php script direkt zu senden
ich hoffe du hat es verstanden. :)

für solche spielereien ist das addon postman... https://chrome.google.com/webstore/deta ... bncdddomop für den chrome browser sehr nützlich, man gibt eine url und dann kann man den code generieren für alle platformen...php, node usw...

Antworten

Zurück zu „mediola“