Unterstützungsgesuch Hygrosens USB bzgl. Cutter + $IPS_VALUE

Hallo zusammen,

da dies mein erstes „Unterstützungsgesuch“ ist, kurzer Background von mir:

ich habe derzeit eine WAGO 750-841 (standalone) zur Hausautomation im Einsatz (dazu kommen noch die normalen Fearture wie AGFEO-TK u. fli4l.de)

bei ips lese ich schon ein ganze Weile (seit ca. 1J) mit, da die Visu von WAGO (bzw. CodeSys) nicht doll ist (benötigt einen JAVA-Client).

Auf Grund der WAGO-Unterstützung u. 1-Wire habe mich für ips entschieden.

So weit - so gut …

Nun kommst - bevor ich mich an die WAGO traue (Verwendung von Merker etc.), dachte ich mir - schließe ich meine Temp-fühler (1-Wire Hygrosens per USB) als Startprojekt an.

Der oben genannte Thread plus Verlinkungen kommen mir sehr entgegen. Jedoch bekomme ich es einfach nicht zum fliegen :frowning:

folgender Status: (gemaess der Anleitung oben)
1x I/O Instanz Comport
1x Splitter Instanz Cutter
1x RegisterVariable (ist das in meinem Falle „Tempwert_Sensor1“ ???)

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

Stand heute:
im Debugfenster von „Cutter_Tempsensoren“ sehe ich auch entsprechende Daten (jedoch bin ich mir nicht sicher - ob die korrekt aussehen …)

ein echo auf $IPS_VALUE ergibt 0 u.U. ist hier das Problem (weitere Suche nach der Methode von Cutter war für mich nicht erfolgreich - sorry)

konkrete Fragen:

  • ist die Zuordnung im Objektbaum richtig (Anfängerfrage)?
  • Sind die Daten im DEBUG-Fenster zur weiteren Verarbeitung korrekt?
  • Was muss man tun, um die Daten auf die entsprechenden Variablen zu bekommen (gemaess Anleitung: mittels $IPS_VALUE, derzeit aber 0)

Vielen Dank schon im Voraus und eine spannende Zeit

<?
/*
*******************************
IP-SYMCON Event Scripting
*******************************
File : Temp_Sensoren_Hygrosens.ips.php
Trigger : OnUpdate Tempwert_Sensor1
Interval :
*/
$buffer_temperatur1 = array();
$separator_temperatur1 = "V01";
// den "gecutteten" String von IPSYMCON "abholen"

echo $IPS_VALUE;     // nur Testzwecke
$rs232bus = $IPS_VALUE;

// die zwei Byte hinter dem Separator (V01) "rausoperieren"
// ++++$buffer_temperatur1 = explode ($separator_temperatur1, $rs232bus, 2);
$buffer_temperatur1 = split ($separator_temperatur1, $rs232bus, 5);

$temperatur1 = $buffer_temperatur1[1];

SetValueString ("44974", $temperatur1); // nur Testzwecke

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

// Export Variable nach IPSYMCON
SetValueFloat ("41986", $temperatur1);
?>

Hallo,

da kann ich leider nicht so roichtig folgen. Ich haenge die Temperatursensoren direkt an den 1-Wire USB Adapter und fertig. Dann gibts den TMEX Treiber und IPS erkennt alle ueber das 1-Wire IPS Modul direkt selbst.

Deine Variante kann ich so nicht nachvollziehen, aber vielleicht gibts jemand hier, das das gleiche hat.

ich hatte mich dabei auf die Umsetzung gemäß orientiert …

http://www.ip-symcon.de/forum/f18/neu-mir-helfen-6521/#post54130

mal schauen ob die Beteiligten sich erinnern können (ist ja noch relativ aktuell der Thread, ich hatte auch direkt im Thread angefragt, aber ein fleißiger Moderator hat es gleich umgehängt - grins)

in diesem Sinne

Hallo wago-pdm,

was hat 1-Wire mit Hygrosens zu tun?

Ich glaube hier liegt eine Verwechslung vor.

Gruß
HJH

Hallo dpm,

möchtest du von hinten durch´s Auge? :slight_smile: Für 1-Wire brauchst du keinen Cutter.

Über die TMEX Verbindung wird der 1-Wire Bus an IPS angebunden. Dann brauchst du nur für jeden Baustein eine Instanz. Über die Instanz frägst du den Bus nach neuen Bausteinen ab. Damit hast du dann die z.B. Temperaturwerte in einer Variable.
Hast du mal in Dokugeschaut?

Mit dem nachfolgenden Script ergänze ich die eingelesenen Werte um das „°C“
für Dashbaord und LCD Display

// Temp Keller_Hausgang

$TempKeller_Hausgang = GetValueFloat(25753);       // abholen aktueller Rohwert

//Hatte der Sensor eine Spannungsunterbrechung? Wenn ja, dann gibt dieser 85°C aus.
if ($TempKeller_Hausgang < 80) //Ist der eingelesene Wert größer 80°C = Sensor hatte Spannungsunterbrechung
   {
	$RoundTempKeller_Hausgang= round ($TempKeller_Hausgang, 1);
	$RoundTempKeller_Hausgang_1 = sprintf("%2.1f", $RoundTempKeller_Hausgang); // Umrechung auf 2+1 Nachkommastelle

	SetValueString(58339 , $RoundTempKeller_Hausgang_1. chr(0x00). "C");  //Wert für 1-Wire LCD Display
	SetValueString(17660, $RoundTempKeller_Hausgang_1. "°C");  //Wert für Dashboard mit °C Zeichen
	SetValueFloat (30906, $RoundTempKeller_Hausgang);  //Wert für mySQL Datenbank
	echo "Temperatur Keller Hausgang:  $RoundTempKeller_Hausgang °C";     //Ausgabe
	}
else
	{
	SetValueString (17660, "--°C");
	echo "Temperatur größer 80°C = Spannungsunterbrechung"; //Ausgabe
	}

?>

Danke für die schnellen Reaktionen:

@Torro: der TMEX-Treiber geht nicht für den Hygrosens bzw. habe ich es nicht hinbekommen unter W2000 (habe auch gegoogelt)

@HJH: nach meinen Verständnis ist das schon 1-WIRE, aber Du kannst natürlich recht haben …

das Protokoll ist hier beschrieben, die Daten kommen ja im Cutter an
http://www.hygrosens.de/fileadmin/user_upload/Shop/Distribution/PC_Feuchte_Temp_Sys/Temperatur/FAQ_Protokollbeschreibung_D.pdf

@andrge leider geht der TMEX nicht …

ist denn der grundsätzlich Aufbau im Baum richtig? (weil Anfänger :wink: )

Danke im Voraus

Wenn Du das Script richtig übernimmst, geht es auch.

<?
/*
*******************************
 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);
 
 
 
?>         

Hallo,

nochmal zum mitschreiben: die einfachste Methode ist folgende:

1-Wire USB Adapter an PC anschliessen (den musst Du Dir noch besorgen - z.B. hier)

die Temperatursensoren an den USB Adapter (also an den 1-Wire BUS) direkt anschliessen. Hier findest Du dazu auch weitere Infos.

Das Hygrosens Geraet brauchst Du dafuer gar nicht mehr.

Hallo wago-pdm,

in diesem Thread geht einiges total durcheinander.

  1. Du behauptest, dass es sich bei Deinem Temperatursensor um ein 1-Wire Device handelt. Soweit ich weiß, hat Hygrosens überhaupt nichts mit 1-Wire zu tun. Mich würde interessieren, wie Du auf diesen Gedanken gekommen bist.
  2. Eine Typenangabe würde die Verwirrung schnell auflösen. Also: wie heißt Dein Sensor?
  3. 1-Wire Devices können in IP-Symcon ausschließlich über die TMEX-Schnittstelle angebunden werden. Andere Möglichkeiten, so wie Du es versuchst, sind ausgeschlossen.
  4. Wenn es sich nicht um ein 1-Wire Device handelt (wovon ich ausgehe), dann musst Du Dich entscheiden, ob Du das Cutting selbst erledigen möchtest, oder dieses dem Cutter-Modul überlassen willst. Ein Mischmasch aus beidem wird niemals zum Zielführen. Also entweder Du verwendest das Skript von RWN (erledigt das Cutting selbst) oder das, welches ich im selben Thread vorgestellt habe (überlässt das Cutting dem Cutter), das darüberhinaus auch noch kürzer ist.

Gruß
HJH

Hallo zusammen,

sorry erstmal für die Verwirrung.
Also die Hardware von Hygrosens http://www.hygrosens.de/deutsch/shop/liste.html?tx_ttproducts_pi1%5Bcat%5D=44&cHash=65a720c377 (USB-Version) ist nicht 1-Wire
–> damit funktioniert natürlich der TMEX-Treiber (mit allen Vorteile der Einbindung in IPS) nicht.

(da war ich auf dem verkehrten „Dampfer“) - Danke :rolleyes:

aber die Verwirrung (Hilflosigkeit) ist jetzt komplett :eek:

(@HJH) was ist der korrekte Weg, die serielle Schnittstelle auszulesen?
mein Verständnis nach stundenlanger Recherche im Forum:

  • am Comport kommen nur „unregelmäßig“ Daten an, der Cutter übernimmt die Aufgabe des Datensammler bzw. das in korrekte Stücke (Strings) schneiden
  • anschließend kommt das Script von oben zum Einsatz, um die korrekten Temp-werte rauszuoperieren und umzurechnen

Frage:
das Script habe ich eingebunden, es wird auch die Variable aktualisiert -> aber immer nur mit „0“.
Kann man die Wert/Status der „$IPS_VALUE“ mit echo oder ähnlichen abfragen? Da bei mir am Ende ja immer nur Null rauskommt, wollte ich den „Eingangsstring“ prüfen (Anmerkung: im DEBUG Fenster der Schnittstelle sind Daten vorhanden)

sorry - ich hoffe, dass ich nicht komplett neben der Spur bin (aber sind meine ersten Gehversuche mit IPS …)

p.s. das ich nur Remote arbeite, hat hoffentlich nix damit zu tun? :cool:

Vielen Dank

Hallo,

ich habe es mal im Thema geaendert und nach Allgemeines verschoben, da ist es, denke ich, besser aufgehoben als im 1-Wire Bereich.

Hallo Wago,

Du kannst in der Registervariable noch mal debuggen.

Wenn ich mir die Daten von deinem Cutter so ansehe, stimmt hier was nicht.

Sieh im Cutter noch mal nach ob deine Trennzeichen noch vorhanden sind. Eventuell noch mal neu setzen und auf Übernehmen klicken.

irgendwie komme ich nicht weiter - sorry

Frage: wie muss denn das DEBUG-Fenster im Cutter aussehen
(ich habe auch den Eindruck, dass die Trennzeichen nicht berücksichtigt werden)

was meinst mit Register-Variable? die Variable „unterhalb“ vom Cutter?

manno - ich lese jetzt schon Stunden, jedoch komme ich nicht wirklich voran (da fehlt noch das „Anfängerglück“) …:cool:

Danke

Im Cutter sollte aufjeden Fall SENDCHUNK auftauchen, das sehe ich bei Dir nicht. Das wären die gecutteten Daten welche an die Registervariable weiter gegeben werden.
Deshalb wollte ich wissen ob die Trennzeichen noch im Cutter vorhanden sind :slight_smile:
Die Registervariable ist deine Übergeordnete Instanz von Cutter, welche deinem Auswertescript zugeordnet ist. Debug diese mal und stell ein Shot hier rein.

Hallo,

als bei mir sieht es im Debug beim Cutter so aus wie ein der Anlage ersichtlich.
Einstellungen siehe auch Anlage.

Als Script verwendei ich das folgende (Stammt natürlich nicht von mir sondern ist hier aus dem Forum. Den Experten und der tollen Hilfe sei Dank).

<?

// hier werden die Konstanten für die IDs der Variablen definiert
// hier muss für jeden Sensor die ID der zugehörigen Float-Variablen hinterlegt werden

define("ID_S01", 54161 /*[Wetter\Außen\Außen]*/);               // ID der Variablen für Sensor  1
define("ID_S02", 47171 /*[Heizung\Pufferspeicher\.Pufferstand\Hz_Speicher_Unten]*/);               // ID der Variablen für Sensor  2
define("ID_S03", 25587 /*[Heizung\Raumheizung\Raumtemperatur]*/);               // ID der Variablen für Sensor  3
define("ID_S04", 26164 /*[Brauchwasser\Ladepumpe\Bw_Ladepumpe]*/);               // ID der Variablen für Sensor  4
define("ID_S05", 44589 /*[Heizung\Raumheizung\Heizkörper]*/);               // ID der Variablen für Sensor  5
define("ID_S06", 55093 /*[Brauchwasser\Solar\Solar_Vl]*/);               // ID der Variablen für Sensor  6
define("ID_S07", 57819 /*[Heizung\Holzkessel\.Holzkesselbetrieb\Holzkessel]*/);               // ID der Variablen für Sensor  7
define("ID_S08", 12938 /*[Heizung\Vorlauf\Hz_Vorlauf]*/);               // ID der Variablen für Sensor  8
define("ID_S09", 14458 /*[Brauchwasser\Rücklauf\Bw_Rücklauf]*/);               // ID der Variablen für Sensor  9
define("ID_S0A", 55003 /*[Heizung\Pufferspeicher\.Pufferstand\Hz_Speicher_Oben]*/);               // ID der Variablen für Sensor 10
define("ID_S0B", 51388 /*[Heizung\Oelkessel\.Oelkesselbetrieb\Oelkessel]*/);               // ID der Variablen für Sensor 11
define("ID_S0C", 58336 /*[Heizung\Pufferspeicher\.Pufferstand\Hz_Speicher_Mitte]*/);               // ID der Variablen für Sensor 12
define("ID_S0D", 30066 /*[Brauchwasser\Puffer Unten\Bw_Puffer-Unten]*/);               // ID der Variablen für Sensor 13
define("ID_S0E", 34820 /*[Brauchwasser\Puffer Oben\Bw_Puffer-Oben]*/);               // ID der Variablen für Sensor 14
define("ID_S0F", 29550 /*[Brauchwasser\Vorlauf\Bw_Vorlauf]*/);               // ID der Variablen für Sensor 15
//define("ID_S0F", 00000 /*[Kein(e)]*/);               // ID der Variablen für Sensor 16

// die Sensornummer steht ab Position 1 mit der Länge 2 zur Verfügung
$snw = substr($IPS_VALUE, 1, 2);                          // liefert die Sensornummer z.B. "02" für Sensor 2

$snc      = constant("ID_S". $snw);       // Sensornummer in den Namen der Konstanten für die ID einbauen, z.B. "ID_S02"

// der Wert steht ab Position 3 mit der Länge 4 zur Verfügung
$tempwert = (float) hexdec(substr ($IPS_VALUE, 3, 4))/100;     // die 4 HEX-Stellen werden extrahier und dezimal gewandelt und danach durch 100 geteilt und als Float-Zahlenwert zugewiesen

// Export Variable nach IPSYMCON
SetValue($snc, $tempwert);          // abspeichern des Zahlenwertes in die zugehörige Variable


?>

Gruß
KH

Einstellung_Cutter.gif

Vielen, vielen Dank (spez. RWN u. KHGE) :slight_smile:

für alle Newbees - also folgende (Denk-)Fehler lagen vor:

  • Hygrosens „is not“ 1-Wire :rolleyes:
  • Cutter nicht korrekt konfiguriert, die Daten die mit SENDCHUNK ausgegeben werden, müssen in die Weiterverarbeitung passen (siehe Post von khge) …
  • Register-Variable hatte ich gar nicht auf dem Schirm! werde noch mal die Doku wälzen (mir ist nach wie vor nicht klar, wie der Objektbaum eigentlich aussehen sollte - siehe Anhang)
  • tja - und dann einfach das Script von khge angepasst

Suuuuuuper - jetzt kann das Wochenende kommen
(die nächste Herausforderung mit der WAGO inkl. Merker u.ä. :confused: warten schon)

nochmals vielen Dank an alle

Wenn du in der Baumansicht auf die „Physikalische Ansicht“ welchselst, sollte dir die Verbindung der einzelnen Instanzen klarer werden. Dann liegen diese nämlich untereinander zugeordnet.

paresy

Hallo wago-pdm,

wie bereits oben erwähnt hätte ich das ohne die Hilfe hier im Forum auch nicht geschafft. Das Script habe ich auch nur abgeändert bzw. ergänzt.

Hygrosens „is not“ 1-Wire

Würde ich mit einem klaren JEIN beantworten. Das Hygrosens-Messsystem - die Blackbox - ist bei mir über den seriellen Port am PC angeschlossen. Aus der Sicht von IPS hängt somit ein Messsystem am Com-Port.
Die Temperaturfühler selbst, bei mir 15 Stück DS1820, sind 1-Wire Bauteile und auch entsprechend über einen 3-adrigen Bus am Hygrosens-Messsystem angeschlossen.

mir ist nach wie vor nicht klar, wie der Objektbaum eigentlich aussehen sollte

Bei gedrückter linker Maustaste lassen sich die einzelen Objekte verschieben und so nach belieben zusammenfassen (In der logischen Baumansicht).

Gruß
KH

Werte Forengemeinde,

entsprechend der Vorgehensweise in diesem Thread hab ich versucht dieses auf meine Anlage zu adaptieren. Das Anlegen der Instanzen, Skript, Variablen etc. hat auch grundlegend geklappt, nur das Ergebnis ist nicht so, wie es sein sollte. Die Temperaturen sind schlichtweg chaotisch. Die Frage ist, wo kann der Fehler liegen? Ich hab dazu im Anhang ein paar Informationen hinterlegt und wäre für jeden hilfreichen Hinweis dankbar, Gruß, Kay.

Hallo Kay,

was stimmt denn mit den Temperaturen nicht, die Zuordnung oder die Anzeige selbst. Wenn Du Bilder von den Daten machst, ist es immer besser wenn diese im Originalformat vor liegen. Hier wäre es besser Ascii zu verwenden.
Noch besser oder zusätzlich ist ein Dump. Im Debug einfach auf Spechern als klicken.