Hallo zusammen,
ich möchte von IPSymcon 3.4 aus ein Relais schalten bzw. Daten an einen Arduino Nano mit ENC28J60 Ethernetmodul und UIPEthernet Lib schicken.
Folgende Seite hat mir schon sehr geholfen und ich kann die Eingänge des Arduino in IPSymcon einlesen.
https://www.symcon.de/forum/threads/24522-Daten-vom-Arduino-an-IPS-%C3%BCbermitteln-Ethernet
Skripte aus Post #8.
Welche Befehle auf Arduino und IPSymcon Seite brauch ich? Ich hab schon versucht im Arduino mit client.read die Daten zu bekommen. Kann mir jemand erklären wie das funktioniert? Ich hab schon einiges dazu gefunden, jedoch hat das nie funktioniert.
Arduino:
byte inputByte = 0;
inputByte = client.read();
Serial.println (inputByte);
IPSymcon:
<?
if($_IPS['SENDER'] == "RegisterVariable") {
$data = RegVar_GetBuffer($_IPS['INSTANCE']);
$data .= $_IPS['VALUE'];
// Daten senden Anfang
RegVar_SendText(44920 /*[System\Arduino Zirkulation\Register Variable]*/, "1");
// Daten senden Ende
if (strpos($data, '{') === false || strpos($data, '}') === false) {
RegVar_SetBuffer($_IPS['INSTANCE'], $data);
} else {
while (strpos($data, '{') !== false && strpos($data, '}') !== false) {
$pos1 = strpos($data, '{');
$pos2 = strpos($data, '}');
$msg = substr($data, $pos1, ($pos2-$pos1)+1);
$json = json_decode($msg);
if ($json) {
foreach($json as $entryName => $entryValue) {
IPS_LogMessage("Arduino", $entry_name.": ".$entryValue);
switch ($entryName) {
case "input_d1":
SetValue(47870 /*[System\Arduino Zirkulation\Status\D1]*/, !$entryValue);
break;
case "input_d2":
SetValue(55630 /*[System\Arduino Zirkulation\Status\D2]*/, !$entryValue);
break;
case "input_d3":
SetValue(33652 /*[System\Arduino Zirkulation\Status\D3]*/, !$entryValue);
break;
case "input_d4":
$var_time = IPS_GetVariable(54316 /*[System\Arduino Zirkulation\Status\D4]*/)['VariableUpdated'];
if (time() - $var_time >= 1) {
SetValue(54316 /*[System\Arduino Zirkulation\Status\D4]*/, !$entryValue);
}
break;
case "input_d5":
$var_time = IPS_GetVariable(40664 /*[System\Arduino Zirkulation\Status\D5]*/)['VariableUpdated'];
if (time() - $var_time >= 1) {
SetValue(40664 /*[System\Arduino Zirkulation\Status\D5]*/, !$entryValue);
}
break;
case "input_d6":
$var_time = IPS_GetVariable(42683 /*[System\Arduino Zirkulation\Status\D6]*/)['VariableUpdated'];
if (time() - $var_time >= 1) {
SetValue(42683 /*[System\Arduino Zirkulation\Status\D6]*/, !$entryValue);
}
break;
case "input_d7":
SetValue(26887 /*[System\Arduino Zirkulation\Status\D7]*/, !$entryValue);
break;
case "input_d8":
$var_time = IPS_GetVariable(28173 /*[System\Arduino Zirkulation\Status\D8]*/)['VariableUpdated'];
if (time() - $var_time >= 1) {
SetValue(28173 /*[System\Arduino Zirkulation\Status\D8]*/, !$entryValue);
}
break;
}
}
}
$data = substr($data, $pos2 + 1);
RegVar_SetBuffer($_IPS['INSTANCE'], $data);
}
}
}
?>
Es kommt immer nur eine 0 an.
IO-Instanz
Register Variable
Symcon
Über eine Unterstützung würde ich mich sehr freuen!
Edit:
-> Kann geschlossen werden. Der ENC28J60 scheidet für mich in Zukunft aus. Hab das weder in dieser Variante noch mit der Mudbus Lib zum laufen bekommen. Zudem kommt noch der viel zu große Speicherbedarf durch die verwendete Lib UIPEthernet hinzu.
Wird trotz höherem Platzbedarf im Gehäuse nun mit UNO und Ethernetschield sowie Mudbus Lib umgesetzt. Das läuft wenigstes von Anfang an sauber und in einem schon vorhandenen MEGA seit Monaten stabil…