da meine UDP-Verbindung auch dann und wann abbricht wollte ich meine Controller auf TCP umstellen.
Hierzu gibt es im Download Bereich auch schon einen Baustein Link Allerdings kann ich mit diesem nur Empfangen aber keine Befehle senden.
Da der Baustein auf dem Baustein 19001220 aufbaut, habe ich mit meinen limitierten PHP Kenntnissen versucht einfach den fehlenden Teil zum senden einzufügen und den Baustein wieder erweitert. Der Code zum senden sieht nun wie folgt aus:
// if EXEC daemon is running, send messages
if (logic_getVar($id, 1) == 1) {
if ($E[46]['refresh'] == 1) {
$chr_ch1 = $E[46]['value']; // Zu sendener Befehl
$tcp_string = $chr_ch1;
$msg['sendinput'] = $tcp_string;
}
}
// send message to EXEC daemon
if (count($msg)) {
LB_LBSID_logging($id, "Message:", $msg);
$msg_queue_id = logic_getVar($id, 2);
LB_LBSID_logging($id, "MSGQID used: $msg_queue_id");
$msg_queue = msg_get_queue($msg_queue_id);
msg_send($msg_queue, 1, $msg);
}
if (logic_getVar($id, 1) == 1) {
if ($E[46]['refresh'] == 1) {
$chr_ch1 = $E[46]['value']; // Zu sendener Befehl
$tcp_string = $chr_ch1;
$msg['sendinput'] = $tcp_string;
}
}
// send message to EXEC daemon
if (count($msg)) {
LB_LBSID_logging($id, "Message:", $msg);
$msg_queue_id = logic_getVar($id, 2);
LB_LBSID_logging($id, "MSGQID used: $msg_queue_id");
$msg_queue = msg_get_queue($msg_queue_id);
msg_send($msg_queue, 1, $msg);
}
Ein Befehlt in Hercules sieht zum Beispiel so aus: set,sys,out,1,0<cr>
Ich glaube mein Problem ist CR gescheint dahinter zu bekommen. In der Hilfe zu dem Controller steht folgendes:
- Jeder Befehl an den 1-Wire Controller / 1-Wire Gateway muss mit einem „Carriage Return“ (CR, hexadezimal 0D) beendet werden.
- Jede Datenausgabe des 1-Wire Controller / 1-Wire Gateway wird mit einem „Carriage Return“ (CR, hexadezimal 0D bzw. dezimal 13) und „Line Feed“ (LF, hexadezimal 0A bzw. dezimal 10) abgeschlossen.
Vielleicht hat ja jemand von euch eine Idee hierzu.
Gruß Michael



Einen Kommentar schreiben: