Temperatur auslesen über Hygrosens

Habe folgendes Problem.

Möchte mein Temperatursystem in IPS integrieren. Schnittstelle wird über Comport emuliert auf USB. Soweit sogut. Daten sind wohl in IPS vorhanden. Allerdings habe ich als Neuling nicht die geringste Ahnung wie ich an die Daten rankomme. Protokoll hänge ich mal dran, geht alles über ASCII.

Für die Profis denke ich mal, die werden sich jetzt einen grinsen:mad:

Allerdings weiss ich nicht wo ich anfangen soll. Vielleicht wäre ja der ein oder andere gütig mir mal unter die Arme zu greifen:confused:

Erst mal Vielen Dank für´s Lesen!

FAQ_Protokollbeschreibung_D.pdf (59.7 KB)

tja …
was soll man daruber erzählen.
Eigentlich könntest du folgendes probieren:
wenn eine ‚@<CR>‘ kommt, heisst dies das du ein block informationene bekommst.
lauft bis zur „$<CR>“
Dazwischen steht alle empfangene (und gesendete) data.
uber eine schleife do … until variable = „$<CR>“
kannst du die info pare rausholen:
config daten :
IKanalnummerKonfigdatenSensor-serienummerCRC<CR>
messwerte:
VKanalnummerNutzdatenCRC<CR>
die schleife wird unterbrochen durch die „$<CR>“

Aber wie die Konfigdaten / Sensor-serienummer / Kanalnummer / Nutzdaten unsw gestalltet sein, das ist in das dokument beschrieben…
also:
VAABBBBCC<CR>
mit AA : 8 bit zb. 10101010 -> kanalnummer
und BBBB : hex wert in 0,01° also hex -> dec / 100 = temp wert
und CC : CRC wert von AABBBB : kontrolwert (ublich in hardware protokolle)

zb: (wie dein dokument)
V0108DA7D<CR>
V : messdaten
01 : kanal nummer 1
08DA : hex wert -> 2266 decimal /100 = 22,66°C
7D : CRC wert von 0108DA

Voila … so einfach liest sich das.
Fur den anfanger vielleicht nicht ganz leicht aber ich hoffe das oberiges vorbild dir genugend anstoss gibt um weiter zu lesen und dabei nach zu denken.

machen wir noch etwas weiter :
erst kommt der I-string
I010110E0223C000000B1<CR>
I: Konfigurationsdaten
01 : -> kanalnummer : hier 1
01 : immer 01 bei diesem gerät
10E0223C000000 : serienummer des dallas sensor (uber eine tabelle könntest du einem namen geben)
B1 : CRC wert

Voila : dein protokoll de-protokoliert :smiley:

jetzt nur noch die data-blocke anständig in eine variablen bekommen (stichwort array) und in IPS-lesbare variablen ruber kopieren (durch die lese-schleiffe).

Good luck - besser - Viel spass :slight_smile:

Hallo,

damit zaeumst Du ja das Pferd von hinten auf. Einfacher ist es doch, die Tempersensoren (1-Wire) direkt zu betreiben, warum erst umstaendlich ueber die serielle Schnittstelle jagen?

Schau mal im Forum bei 1-Wire nach, da finden sich viele Beitraege dazu, auch zu den Temp-Sensoren.

Gruss Torro

Hallo GGGss,

danke für dein Feedback. Das Protokoll habe ich schon verstanden nur nicht wie ich die Daten lesbar bekomme.

jetzt nur noch die data-blocke anständig in eine variablen bekommen (stichwort array) und in IPS-lesbare variablen ruber kopieren (durch die lese-schleiffe).

Genau hier ist bei mir Ende. Mit Array und Schleife kann ich erst mal nichts anfangen. Habe zwar einiges drüber gelesen aber verstanden habe ich es noch nicht.
Ich habe mal eine Register-Variable mit dem Comport verbunden, jetzt sehe ich schon mal die Daten im Debugger.

Hallo Rainer,

hilft Dir das?

Gruss
Otto

Com_Port_Configutation.png

Com_Port_Settings.png

Register_Variable.png

HYGROSENS_Input_konvertieren.txt (916 Bytes)

Hallo Otto,

Tausend Dank dafür:) War genau das was ich gesucht habe.

Habe es angepasst, funktioniert auf Anhieb.

Ich tu mir mit den Scripten noch verdammt weh, irgendwie denke ich auch zu umständlich:mad:

Hi Otto,

hier mal dein Script angepasst für meine Verhältnisse, wird dann noch ausgebaut auf 20 Sensoren.

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : Temp_Sensor_HY.ips.php
Trigger  : OnUpdate Temp_Sensoren_HY
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_HY");
 $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);

?>

Hallo Otto,

Dein Skript funktioniert gut - danke.
Für alle, die ähnliche Aufgabenstellungen haben oder es einmal ausprobieren möchten aber keine passende Hardware haben:
man benötigt lediglich ein „Nullmodem-Kabel“ (z.B. von Reich**t) und folgendes Test-Skript für ein zweites COM-Modul:


COMPort_SendText($id,"@".chr(13).chr(10)."I010110E0223C000000B1".chr(13).chr(10)."V0108DA7D".chr(13).chr(10));
COMPort_SendText($id,"I02011050013C00000021".chr(13).chr(10)."V0208C276".chr(13).chr(10));
COMPort_SendText($id,"I030110B0093C00000017".chr(13).chr(10)."V0308CCF9".chr(13).chr(10)."$".chr(13).chr(10));

Mit dieser Methode lassen sich diverse Labormessgeräte mit einen seriellen Schnittstelle fernsteuern.
Z.B. das Labornetzteil der 4005 Serie (Voltcraft, ELV ect.)
Das Protokoll gibt es hier:

MST

Hallo,

bin Neuling bei IP-Symcon(2.2). Was genau muß ich wo machen, um über USB(im System COM4) meine Hygrosens-Sensoren zuerst anzulegen, Werte auszulesen…loggen…visualisieren…???

Vielen Dank im voraus für jedwede Unterstützung, MFG, kabo63.

Dieser Thread ist für dich hilfreicher.