BARIX Barionet Anbindung

Hallo zusammen,

ich habe IPS seit zwei Tagen und bin total am verzweifeln :loveips: .

Folgendes möchte ich im IPS darstellen und steuern. Ich habe aber keinen Plan wie vorgehen soll. Leider hat mich die Suche auch nicht weitergebracht.

Ich möchte beim Barionet das Relais 1 ein/auschalten. Mit Putty funktioniert es über Telnet und Port TCP 1302.

Befehle:
getio,1 //Abfrage des Status
setio,1,999 // 999 Toggle, 1 active, 0 inactive

Dokumentation Barionet

Vielen Dank für die Hilfe

Dürfte vom Prinzip ähnlich sein. Habs mir aber nicht durchgelesen. Mach ich aber später.

…vielleicht, kannst Du ja mal die Anleitung anhängen wo die Befehl mit drinnen stehen. Nach 100 Seiten hab ich diese nicht gefunden, wenn man nicht weis welches von den 1000 pdfs das richtige ist.:mad:

vielen Dank für deinen Tipp Rainer. Ich glaube das Barionet müsste man über Client Socket ansteuern!? :confused:

Dokumentation BARIX Barionet - Barionet Family Product Manual 2011.09 (PDF)

Auszug aus der Dokumentation:

4.2 ASCII Command Protocol
The Barionet includes a built-in ASCII command protocol that allows you to send simple English-like commands over TCP/IP. The commands allow you to control Barionet outputs and to get the status of the inputs.

Trag mal deine IP Adresse ein und dann mal ausführen. Was steht im echo.

$setPort = 'http://192.168.0.32/rc.cgi?o=1,1&L=index.html';
$request = Sys_GetURLContent($setPort);
echo $request;

Skriptausgabe:

Warning: HTTP/1.1 404 ERROR in [Test estbarix] on line 3

Das Relais schaltet wunderbar über das Web Server CGI. Leider ist es aber nicht möglich über das Web Server CGI den Wert des Temperatursensor auszulesen.

Also, schaltet es mit diesem Befehl ?

Dann schalten wir mal über Client Socket.

Den Socket mit Port öffnen, eine Registervariable anlegen, diese mit dem Socket verbinden. Der Registervariable dein Script zuweisen.

ID des Socket = InstanzID deines Clientsocket, bitte eintragen. Vor dem Ausführen die Registervariable öffnen und auf Debug klicken und schauen, ob was zurück kommt.

CSCK_SendText(ID des Socket, 'setio,1,1'.chr(13));

Ja, das Relais schaltet mit dem Befehl:

http://192.168.0.32/rc.cgi?o=2,1&L=index.html

Aber so wie ich die Anleitung verstehe kann man über das Web Server CGI nur die I/O setzen aber nicht abfragen.

mach das mal was ich obendrüber noch reingeschrieben habe. Dann sehen wir weiter. Ich hab Zeit. :slight_smile:

das nennt man Community :smiley: !

Ich habe nun folgendes ausprobiert:


<?
CSCK_SendText(14939,'setio,1,999'.chr(13));
?>

das Relais schaltet aber ich bekomme keinen Status retour.

Nimm mal das hier, hatte ich oben noch geändert.

CSCK_SendText(ID des Socket, 'setio,1,1'.chr(13)); 

das sollte so eigentlich funktionieren.

Das hast Du gemacht, sonst kommt nichts zurück.

If the TCP Protocol default Subscriptions parameter is set to „None“, state change messages are not sent by default. Instead, the „TCP Add I/O state Subscriptions“ parameter affects when state change messages are enabled. If the „TCP Add I/O state Subscriptions“ setting is set for „With getio/setio“, every time a getio or setio command is sent, state change messages are automatically enabled on the input or output addressed by the getio or setio command.

Das ganze mal als Script.

Die Ausgabe erfolgt jetzt in den Meldungen.

Wichtig ist, das Du das Script der Registervariable als Zielscript übergibst.

if($_IPS['SENDER'] == "Execute")
{
    CSCK_SendText(14939,'setio,1,999'.chr(13));
}


if($_IPS['SENDER'] == "RegisterVariable")
{
    IPS_LogMessage($_IPS['SELF'], $_IPS['VALUE']);
}

PHP und die IPS Befehle sind für mich noch Fremdwörter :o .

Folgendes Script habe ich nun ausprobiert:


CSCK_SendText(14939,'setio,1,999'.chr(13));

das Relais reagiert wie gewünscht.

Wenn ich das Debugfenster von der Client Socket Verbindung öffne sehe ich folgendes:

07.01.2012 23:34:15.00 - TRANSMITTED - setio,1,999
07.01.2012 23:34:15.00 - RECEIVED - state,1,1

genau wie ich es will.

Wie kann ich nun im Script RECEIVED abfragen?

Danke für deine Geduld :smiley: .

Wo ist denn deine Registervariable ?

Konfiguration der Register Variable:

Ziel Script:

Test estbarix


if($_IPS['SENDER'] == "Execute")
{
    CSCK_SendText(14939,'setio,1,999'.chr(13));
}


if($_IPS['SENDER'] == "RegisterVariable")
{
    echo IPS_LogMessage($_IPS['SELF'], $_IPS['VALUE']);
}

Übergeordnete Instanz:

clientsocket_barionet

Wird das Script ausgeführt schaltet das Relais und im Debugfenster der Register Variable bekomme ich folgendes:

08.01.2012 00:02:48.00 - Received Data - state,1,1

Wenn du dann alles beieinander hast :smiley: Legst dir mal 3 Variablen an, Integer ist nicht schlecht . Und nimmst mal das Script.

if($_IPS['SENDER'] == "Execute") // wenn das Script von Hand ausgeführt wird
{
    CSCK_SendText(14939,'setio,1,999'.chr(13)); // sende Befehl über den Clientsocket
}


if($_IPS['SENDER'] == "RegisterVariable") // wenn das Script von der Registervariable getriggert wurde
{
    IPS_LogMessage($_IPS['SELF'], $_IPS['VALUE']); // Daten der Registervariable in den Meldungen mit den erhaltenen Werten loggen
    $data = explode(",", $_IPS['VALUE']); // daten von Registervariable aufteilen in ein Array. Die Daten stehen in $_IPS['VALUE'] und sind nur zur Laufzeit verfügbar.
    SetValue(12345, $data[0]); // Daten von Array in Variablen schreiben
    SetValue(23456, $data[1]);
    SetValue(45678, $data[2]);
}

Hier findest Du alle IPS Befehle und Erklärungen dazu.

http://www.ip-symcon.de/service/dokumentation/befehlsreferenz/

und die Systemvariablen.

http://www.ip-symcon.de/service/dokumentation/konzepte/skripte/systemvariablen/

Perfekt. :slight_smile: Obendrüber steht wie es weiter geht. Hat sich grad überschnitten.

Perfekt :smiley: die Variabeln werden gefüllt. Vielen Dank.

Kannst du mir mal bei Gelegenheit den PHP Code beschreiben? Es muss aber nicht mehr heute sein :wink: .

Nochmals vielen Dank für deine Bemühungen.

Chrashkurs mit allem was dazu gehört. :smiley:

Jetzt hast ja schon mal eine Grundlage für dein eigenes Script.

Das legst dir jetzt unters Kopfkissen und träumst von PHP. :smiley:

http://php.net/manual/de/index.php

Seh mal zu, wie Du weiter kommst, ansonsten fragen.

Ich beschrifte dir das Script oben mal.

Hallo zur späten Stunde.

Ich benutze schon seit längerem die Barionet 100, und bin recht begeistert von den Möglichkeiten dieses kleinen Teils.

Zu deiner Frage und dem Ganzen Socketwirrwar hier.

Die Barionet unterstützt das Modbus Protokoll und ist somit ganz einfach über das Modbus-Modul seitens IPS einbindbar.
Lediglich musst du bei der Schreib- und Leseadresse im Modbusmodul den jeweiligen Wert (-1) aus der Barionet Doku eintragen. Warum man da eine Adresse abziehen muss weiß ich selbst nicht, jedoch funktioniert alles ohne beanstandung.

Weiter kann in der Barionet auch im Internen Speicher eine .txt angelegt werden die alle benötigten Daten zur verfügung stellt, diese Metode ist aber recht kompliziert umzusetzen.

dei Ascii Methode über die Reg. Variable habe ich aus Gründen der Verarbeitungs- und Logingmöglichkeiten verworfen.

gruß 6mag