Helios KWL EC 300 PRO

Vielleicht kann Paresy mal was dazu sagen wegen dem Modbus? Sonst müsst ich extra win RS485 auf TCP Modul kaufen.
steuern kann ich ja auch über die batch Datei aber werte auslesen nicht :frowning:

Was kann ich hier noch testen?

So funktioniert es endlich :slight_smile:
KWL Helios Easycontrols über Http Auslesen

da ich jetzt auf den raspherry pi umziehe und die Batchdateien mit dem modpoll nicht mehr funktionieren. Brauche ich jetzt eine Lösung wie ich die modbus werte per rtu tcp schicken kann? Damit ich die Lüftungsstufen wieder steuern kann?

würde es euch was bringen wenn ich die kwl mit port 502 von extern erreichbar mache? würde sich dem thema mal jemand vielleicht annehmen wollen?

oder ich hab euch hier mal ein fiddler Paket Log im Anhang angehängt?

könnte ich die Stufen auch über http befehle schicken?
Kann mir bitte jemand den weg aufzeigen

Danke

fiddler_log.zip (77 KB)

habs hinbekommen:

jetzt steuer ich einfach über http wenn modbus so umständlichist

<?

if($_IPS['SENDER'] == "WebFront")
{
SetValue($_IPS["VARIABLE"], $_IPS["VALUE"]);
}
if($_IPS['SENDER'] == "Variable")
{

}

			switch($_IPS['VALUE'])
               {
                  case "0":
                     $befehl = 'v00102=0';
                     IPS_SetScriptTimer(36077 /*[Lüftung\Programm\zurück auf auto]*/ , 12000);
                     setvalue(27010 /*[Lüftung\Lüftungsstufe aktuell]*/ , 0);
                  break;
                  case "1":
                     $befehl = 'v00102=1';
                     IPS_SetScriptTimer(36077 /*[Lüftung\Programm\zurück auf auto]*/ , 18000);
                     setvalue(27010 /*[Lüftung\Lüftungsstufe aktuell]*/ , 1);
                  break;
                  case "2":
                     $befehl = 'v00102=2';
                     IPS_SetScriptTimer(36077 /*[Lüftung\Programm\zurück auf auto]*/ , 18000);
                     setvalue(27010 /*[Lüftung\Lüftungsstufe aktuell]*/ , 2);
                  break;
                  case "3":
                    $befehl = 'v00102=3';
                     IPS_SetScriptTimer(36077 /*[Lüftung\Programm\zurück auf auto]*/ , 18000);
                     setvalue(27010 /*[Lüftung\Lüftungsstufe aktuell]*/ , 3);
                  break;
                  case "4":
                     $befehl = 'v00102=4';
                     IPS_SetScriptTimer(36077 /*[Lüftung\Programm\zurück auf auto]*/ , 18000);
                     setvalue(27010 /*[Lüftung\Lüftungsstufe aktuell]*/ , 4);
                  break;
						case "5":
                     return;
                  break;
                  case "6":
                     $befehl = 'v00102=0';
                     IPS_SetScriptTimer(36077 /*[Lüftung\Programm\zurück auf auto]*/ , 1800);
                     setvalue(27010 /*[Lüftung\Lüftungsstufe aktuell]*/ , 0);
                  break;
                  case "7":
                     $befehl = 'v00102=0';
                     IPS_SetScriptTimer(36077 /*[Lüftung\Programm\zurück auf auto]*/ , 3600);
                     setvalue(27010 /*[Lüftung\Lüftungsstufe aktuell]*/ , 0);
                  break;

					}
 
//$befehl = 'v00102=4';


$kwlip = "192.168.2.31";


    $header[] = "Connection: close";
    $header[] = "Origin: http://" . $kwlip;
    $header[] = "User-Agent: Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36";
    $header[] = "Content-Type: text/plain;charset=UTF-8";
    $header[] = "Accept:  */*";
    $header[] = "Referer: http://" . $kwlip . "/anzeig.htm";
    $header[] = "Accept-Encoding: gzip, deflate";
    $header[] = "Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4";


            $ch = curl_init('http://' . $kwlip . '/data/werte8.xml');
            curl_setopt($ch, CURLOPT_HEADER, false);
            curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
            curl_setopt($ch, CURLOPT_FAILONERROR, false);
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $befehl);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 1000);
            curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
            curl_setopt($ch, CURLOPT_TIMEOUT_MS, 1000);
            //$result = false;
				$result = curl_exec($ch);
            curl_close($ch);
            if ($result === false)
            {
                  //wenn Anmeldung fehlschlägt --> anmelden
                  $header[] = "Connection: close";
    					$header[] = "Origin: http://" . $kwlip;
    					$header[] = "User-Agent: Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36";
    					$header[] = "Content-Type: text/plain;charset=UTF-8";
    					$header[] = "Accept:  */*";
    					$header[] = "Referer: http://" . $kwlip . "/info.htm";
    					$header[] = "Accept-Encoding: gzip, deflate";
    					$header[] = "Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4";


            		$ch = curl_init('http://' . $kwlip . '/info.htm');
            		curl_setopt($ch, CURLOPT_HEADER, false);
		            curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
		            curl_setopt($ch, CURLOPT_FAILONERROR, true);
		            curl_setopt($ch, CURLOPT_POST, true);
		            curl_setopt($ch, CURLOPT_POSTFIELDS, 'v00402=12345678');
		            //curl_setopt($ch, CURLOPT_POSTFIELDS, 'v00102=2');
		            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
		            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 1000);
		            curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
		            curl_setopt($ch, CURLOPT_TIMEOUT_MS, 1000);
		            $result = curl_exec($ch);
		            curl_close($ch);
                  var_dump($result);

				}



?>

Wie sehen Deine Variablen dazu aus?

Lördy

Hallo Thka,

Was muss ich alles tun um dein Skript mit meinem usb 485 Konverter ans laufen zu bekommen? Serialport und Cutter sind angelegt. Ich habe irgendwie Schwierigkeiten die richtig in deinem Skript zu platzieren. Bin noch bei uns unerfahrenen mit ips

Mittlerweile bin ich soweit, dass ich die Registervariable und alles andere angelegt habe, jetzt scheitere ich daran, dass das Skript für IPS 4 nicht mehr funktioniert… Kann mir jemand helfen?

1.) Client Socket oder Serial Port anlegen
2.) Cutter anlegen übergeordnete Instanz ist der Client Socket oder Serial Port
3.) Register Variable anlegen übergeordnete Instanz ist der Cutter, Ziel ist das Script

dann sollte das funktionieren…

was funktioniert denn nicht? bei mir läuft das schon eine gefühlte ewigkeit


if ($IPS_SENDER == "RegisterVariable") 

führt zu dem oben beschriebenen Fehler

if($_IPS['SENDER'] != "RegisterVariable") 

neue Schreibweise verwenden!
if ($_IPS[‚SENDER‘] == „RegisterVariable“)

if($_IPS['SENDER'] != "RegisterVariable")  

Gibt kein Fehler, dafür kommt dann in Zeile 50
das nächste Porblem:


  // bereits im Puffer der Instanz vorhandene Daten in $data kopieren
  $data  = RegVar_GetBuffer($IPS_INSTANCE);
  // neu empfangene Daten an $data anhängen
  $data = $IPS_VALUE; 

Notice: Undefined variable: IPS_INSTANCE in /var/lib/symcon/scripts/35059.ips.php on line 50

Warning: Instanz #0 existiert nicht in /var/lib/symcon/scripts/35059.ips.php on line 50

Notice: Undefined variable: IPS_VALUE in /var/lib/symcon/scripts/35059.ips.php on line 52

Neue Schreibweise gilt für alle $IPS_… ;).

Dokumentation: https://www.symcon.de/service/dokumentation/konzepte/skripte/systemvariablen/

Ich glaub ich stehe auf dem Schlauch:
Skript greift nun auf die Schnitstelle zu, es landen auch Daten im Zwischenspeicher, jedoch werden folgenden Meldungen raus gegeben.

02.05.2016 16:46:02*| Register Variable*| <br />
<b>Warning</b>: Instance does not implement this function in <b>/var/lib/symcon/scripts/35059.ips.php</b> on line <b>163</b><br />

case "\x01\x11\x20\x35": // Zuluft Temperatur
                  $Zuluft=substr($data,4,1);// Temperatur ausfiltern
$ZuluftTemp = ord($Zuluft); // Chr in Dezimal umwandeln
SetValue($ID_Temp , $Temperatur[$ZuluftTemp]); // Wert in temporäre Variable schreiben
$Status = GetValue($ID_Temp); //
$Status1 = GetValue(26273 /*[Schnittstellen\KWL\KWL Zuluft\Zuluft]*/); //
if ($Status <> $Status1)
EIB_Value(17327 /*[Schnittstellen\KWL\KWL Zuluft]*/, $Status);
break;

wobei Zeile 163 die mit dem EIB_value ist. Dies wiederholt sich leider…

Zeig mal was du an Variablen angelegt hast.

so, hier meine Variablen

du hast keinen EIB Bus da kann EIB_Value nicht funktionieren!
versuch es mal mit SetValue https://www.symcon.de/service/dokumentation/befehlsreferenz/variablenzugriff/SetValue/

Hab es soweit geschaft, das die Status Bits teilweise und die Temperaturen gelesen werden.
Leider bekomme ich die Lüftungsstufe nicht zu packen.