Bin neu hier, wer kann mir helfen.

Guten Tag,
ich habe nun schon Wochen im Forum gelesen und habe mir nun auch Ip.Symcon 2.0 gekauft.

Ich möchte ein keines Projekt zum üben machen.

Ich habe ein Hygrosens Temperatursystem. Schnittstelle wird über Comport emuliert auf USB. Angeschloßen ist ein Temperaturfühler zum testen.

Ich habe auch schon etwas im Forum gefunden. >http://www.ip-symcon.de/forum/f7/temperatur-auslesen-ueber-hygrosens-2820/

Aber ich komme nicht weiter. Wenn ich die i/o Instanz serialPort ( serialPort. habe ich angelegt) anwähle und unter Debug gehe, dann kann ich die Daten sehen.

1 Wie bekomme ich die Daten von der I/O Schnittstelle in die Temp_Sensoren_HY

Es hört sich dumm an, aber ich bin noch Anfänger und habe schon zwei Tage gelesen und weis jetzt garnichts mehr.

Gruß mkass

Hallo mkass,

du mußt eine Registervariable anlegen und mit der Instanz vom Serial Port verbinden, dann landen die Daten auch in deiner Variable.

Gruß
Jens

Hallo Tetrapack, eine Registervariable habe ich angelegt, aber nichts tu sich.
Was muss ich alles anlegen, damit auch ich, als Neuling einmal ein Erfolgserlebnis habe. Wenn du lust hat, könntest du das bitte einmal Schritt für Schritt aufzeigen. Wie ich gelesen habe, bin ich nicht allein, der dieses keine Problem nicht am laufen bekommt.

Angelegt hatte ich:

  1. i/o instanz Serial Port
  2. Registervariable
  3. Skrip HYGROSENS_Temp_Feu
  4. Variable (String) HYGROSENS_TempFeuchte_ASCII
  5. Variable (FLOAT) HYGROSENS_TempFeuchte_TEMP

Gruß
mkass

hallo mkass,

anlegen musst Du so viele Variablen wie Du Sensoren auslesen willst.

Das Script splittet dir die Eingänge auf und verteilt es dann entsprechend auf die Variablen.

Als Beispiel für 3 Sensoren. Für jeden weiteren Sensor dementsprechend erweitern.

Wie was verbunden wird, hat Otto ja schon damals beschrieben.

Da Du die V2 einsetzt, wie ich grad sehe, ist die Zusammensetzung ein wenig anderst.
Du benötigst noch das Cuttermodul.

Meld dich einfach nochmal, wir bekommen das schon zusammen hin :slight_smile:

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : Temp_Sensoren_Hygrosens.ips.php
Trigger  : OnUpdate Temp_Sensoren_Hygrosens
Interval : 
*/

$buffer_temperatur1 = array();
$buffer_temperatur2 = array();
$buffer_temperatur3 = array();
 //$buffer_feuchte = array();


 $separator_temperatur1 = "V01";
 $separator_temperatur2 = "V02";
 $separator_temperatur3 = "V03";

 //$separator_feuchte = "V02";

 $rs232bus = GetValueString ("Temp_Sensoren_Hygrosens");
 $buffer_temperatur1 = explode ($separator_temperatur1, $rs232bus, 2);
 $buffer_temperatur2 = explode ($separator_temperatur2, $rs232bus, 2);
 $buffer_temperatur3 = explode ($separator_temperatur3, $rs232bus, 2);
 //$buffer_feuchte = explode ($separator_feuchte, $rs232bus, 2);

 $temperatur1 = $buffer_temperatur1[1];
 $temperatur2 = $buffer_temperatur2[1];
 $temperatur3 = $buffer_temperatur3[1];
 //$feuchte = $buffer_feuchte[1];

 $temperatur1 = (float) hexdec(substr ($temperatur1, 0, 4))/100;
 $temperatur2 = (float) hexdec(substr ($temperatur2, 0, 4))/100;
 $temperatur3 = (float) hexdec(substr ($temperatur3, 0, 4))/100;
 //$feuchte = (float) hexdec(substr ($feuchte, 0, 4))/200;

 // Export Variable nach IPSYMCON
 SetValueFloat ("heizung_vorlauf", $temperatur1);
 SetValueFloat ("heizung_ruecklauf", $temperatur2);
 SetValueFloat ("kaltwasser", $temperatur3);
 //SetValueFloat ("HYGROSENS_TempFeuchte_FEUCHTE", $feuchte);

?>

Hmm … also ich kenne deine genaue Konfiguration nicht, aber wo genau steht deine RegisterVariable? Hast du sie genau unter dem Serial Port eingefügt, so das sie eine „Child“ Variable vom Serial Port ist? Hast du einen Screenshot?

In der Registervarible müßtest du dann deine ASCII Variable einstellen und darauf dein Script triggern lassen. Also im Script das Ereignis einstellen um bei Update der Variable das Script ausführen zu lassen.

Allerdings sehe ich in dem genannten Thread(http://www.ip-symcon.de/forum/f7/temperatur-auslesen-ueber-hygrosens-2820/#post21815), dass die Daten scheinbar vorher noch gekürzt werden (siehe erstes Bild). Scheinbar muss der empfangene Datensatz noch angepaßt werden … ausschneiden zwischen @ und $.

Edit:
ups … zu spät :wink:

Gruß
Jens

Meine String Varible steht unter Serial Port . Wenn ich in der String Varible einen Datensatz schreibe z.B. I1100FDV01FDF. Werden die Daten auch gefiltert ( V01FDF ) und es wird 40.63 Grad angezeigt. Wenn ich das richtig sehe ( als Anfänger ) muss ich nur die Daten vom Serial Port in die String Varible bekommen. Das andere erledigt mein Skript.

Gruß Manfred

Hallo Manfred,

am besten noch mal von vorne. Alles andere vergess erstmal.

1x I/O Instanz Comport
1x Splitter Instanz Cutter
1x RegisterVariable

Cutter mit Comport verbinden(Übergeordnete Instanz)den passenden Comport auswählen. Im Cutter Benutze Zeichen für Schnitte(Schnitte Benutzerdefiniert)
Links @, Rechts $ eintragen

RegisterVariable mit Cutter verbinden.
RegisterVariable dem Script zuweisen

Im Script diese Zeile ersetzen,

$rs232bus = GetValueString ("Temp_Sensoren_Hygrosens");

mit dieser.

$rs232bus = $IPS_VALUE;

Mehr brauchst Du nicht mehr.

Wenn Du deine Tempvariablen(Float) angelegt hast, sieht Du die Daten darin stehen.

Danke für deine Arbeit. Alles so gemacht, aber immer noch keine Daten. Ich habe auch im Cuttter mit Nur weiterleiten versucht.

Hallo Manfred,

öffne mal die Registervariable und klick mal Debug an.

Was steht drin? mach mal ein Shot davon.

Reicht das so.

@
I01011020AB8601080025V01069803
$
usw…

Hallo mkass

… und jetzt mußt Du noch die zwei Byte hinter „V01“ separieren und in eine „für Dich lesbare“ Zahl umwandeln.

in PHP übersetzt etwa so:

$buffer_temperatur = array();
$separator_temperatur = "V01";
// den "gecutteten" String von IPSYMCON "abholen"
$rs232bus = GetValueString ("deine gecuttete Variable");
// die zwei Byte hinter dem Separator (V01) "rausoperieren"
$buffer_temperatur = explode ($separator_temperatur, $rs232bus, 2);
$temperatur = $buffer_temperatur[1];
// jetzt Hex nach Float; damit Du es lesen kannst
$temperatur = (float) hexdec(substr ($temperatur, 0, 4))/100;
// Export Variable nach IPSYMCON
SetValueFloat ("deine Temperaturvariable", $temperatur);
 

weiterthin viel Spaß mit IP-Symcon - und Erfolg beim lernen
Gruß Otto

Erst einmal Dank an euch. Jetzt aber bin ich ganz durcheinander. Einer schreibt so und der ander so.
Was bis jetzt läuft ( Anfänger-Meinung ) ist:
Wenn ich in der Register Variable unter Debug gehe, dann sehe ich z.B. V0109027. Das sind 15,38 Grad. Allso bis dahin ist doch alles O,K. der Cutter läuft und zeigt mir in der Register Variable die richtig gefilterten Daten.

Aber wie bekomme ich die Daten von der Register Variable in meine xy String Variable. Wenn ich z.B. V0109027 in die xy String Variable schreibe, wird mir die Temperatur angezeigt, so wie ich es möchte.

Gruß Manfred

Hallo Manfred,

Aber wie bekomme ich die Daten von der Register Variable in meine xy String Variable. Wenn ich z.B. V0109027 in die xy String Variable schreibe, wird mir die Temperatur angezeigt, so wie ich es möchte.

Gar nicht !!!

Ich hatte dir geschrieben, Du sollst das Script in der RegisterVariable zuweisen, mehr nicht. Es gibt keine StringVariable mehr!

Wenn Du dir eine FloatVariable angelegt hast und im Script eingebunden, siehst Du den Tempwert in der FloatVariablen.

SetValueFloat ("(ID)deine Temperaturvariable", $temperatur);  

Es läuft nicht. Was habe ich:

1x I/O Instanz Comport
1x Splitter Instanz Cutter
1x RegisterVariable
1X Float Variable „heizung_vorlauf“

Dann den Cutter mit Comport verbunden(Übergeordnete Instanz)den passenden Comport auswählt. Im Cutter Benutze Zeichen für Schnitte(Schnitte Benutzerdefiniert) Links @, Rechts $ eintragen.

RegisterVariable mit dem Cutter verbunden.
RegisterVariable dem Script zuweisen

Im Script die Zeile ersetzt,

$rs232bus = GetValueString („Temp_Sensoren_Hygrosens“);

mit dieser.

$rs232bus = IPS_VALUE;

Das habe ich gemacht und es läuft nicht. Ich glaube, ich sollte lieber Schuhe putzen…

Hallo Manfred,

sei doch so nett und stell mal dein Script hierein.

<?
/*


IP-SYMCON Event Scripting


File : Temp_Sensoren_Hygrosens.ips.php
Trigger : OnUpdate Temp_Sensoren_Hygrosens
Interval :
*/

$buffer_temperatur1 = array();
$separator_temperatur1 = „V01“;

// den „gecutteten“ String von IPSYMCON „abholen“
$rs232bus = IPS_VALUE;

// die zwei Byte hinter dem Separator (V01) „rausoperieren“
$buffer_temperatur1 = explode ($separator_temperatur1, $rs232bus, 2);
$temperatur1 = $buffer_temperatur1[1];

// jetzt Hex nach Float; damit Du es lesen kannst
$temperatur1 = (float) hexdec(substr ($temperatur1, 0, 4))/100;

// Export Variable nach IPSYMCON
SetValueFloat („42740“, $temperatur1);

?>

$rs232bus = IPS_VALUE; <— das sieht aber nicht so richtig aus.

$IPS_VALUE muss es, wenn überhaupt, heißen.

paresy

Danke, du bist der Grüßte. Diese kleinen Fehler. Es läuft.!!!

Asche auf mein Haupt :smiley:

Das $ hab ich unterschlagen.

Danke auch an Rainer, ohne euch hätte ich es, als Anfänger nicht geschaft.
:D:rolleyes::confused::stuck_out_tongue: