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
Was kann ich hier noch testen?
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_… ;).
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.
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/