Ich habe in der Einfahrt einen 10.000 Liter Erdtank und bin auf der Suche nach einem Digitalen Messgerät um mir immer den aktuellen Ölstand in IPSymcon anzeigen zu lassen.
Könnt ihr mir da Geräte empfehlen mit welchen ich das Umsetzen könnte. Es sollte nach Möglichkeit über Funk gehen. Das verlegen von Kabeln wäre sehr aufwendig.
hast du mir da mal ein Link?
Ich glaube das Problem beim meinem Tank ist das ich oben ein kleines Rohr habe bevor es in der Tank geht. ich denke das könnte für den Ultraschall ein Problem sein
ich spiele auch mit dem Gedanken mir so ein Sensorix Ecometer (https://de.e-sensorix.com) in die Wasserzisterne einzubauen. Von daher die Frage wie hast du (geolin) das Teil in IPS eingebunden. (Bin noch IPS-Neuling und muss noch viele Fragen stellen.)
Das Problem mit dem „kleinen Rohr“ hatte ich auch, habe den Proteus über den Revisionsschacht meines (Stahl)-Tanks angebunden. Kann gerne mal ein paar Fotos machen, wenn du das brauchst.
Hallo, ich habe da ein paar Skripte gebaut, war nicht ganz unaufwändig, wenn ich mich da recht erinnere, kann das gerne mal raussuchen und hier posten…
Das wäre super wenn du das hier Mal posten könntest. Vielleicht kann ich das dann mal auf meine Geschichte ummunzen.
Vielen Dank schonmal im voraus!
Gruß Axel
ich kann euch das Skript zur Verfügung stellen, kann aber leider keinen großartigen Support dafür leisten.Es ist aber im Prinzip selbsterklärend, ihr braucht nur die Variablen anlegen, welche ihr im Bereich „// IDs ab hier anpassen“ findet. Ich habe den Receiver über einen Raspi angebunden und sende die Daten per ser2net an Symcon. Dazu habe ich einen Clientsocket angelegt, welcher per „Register Variable“ das unten aufgeführte Skript triggert, sobald ein neues Telegramm eintrifft. Genauso könnt ihr natürlich auch den Receiver direkt an den Raspi anschließen und den „Register Variable“ per USB triggern.
Wenn Interesse besteht habe ich auch noch ein Skript um die Uhrzeit des Receivers zu setzen, diese ist nämlich übelst ungenau und driftet sehr schnell weg.
Viele Grüße
Georg
<?php
define('CRC16POLYN', 0x1021);
function CRC16Normal($buffer) {
$result = 0xFFFF;
if (($length = strlen($buffer)) > 0) {
for ($offset = 0; $offset < $length; $offset++) {
$result ^= (ord($buffer[$offset]) << 8);
for ($bitwise = 0; $bitwise < 8; $bitwise++) {
if (($result <<= 1) & 0x10000) $result ^= CRC16POLYN;
$result &= 0xFFFF;
}
}
}
return $result;
}
// IDs ab hier anpassen
// --------------------------------------------------------------------------------------------------
$Level_ID = 33518; //Tankinhalt, Integer
$Level_Percent_ID = 57048; //Tankinhalt in Prozent, Float
$MaxLevel_ID = 57777; //Tankkapazität, Float
$Ullage_ID = 39948; // Ullage (gemessene Höhe von der oberen Kante des Behälters)#, Float
$Temp_ID = 51758; //Temperatur, Float
$Time_ID = 42938; //Receiver Zeit, String
$Telegram_ID = 37613; //empfangenes Telegramm, String
// ---------------------------------------------------------------------------------------------------
// wenn das Skript von einem RegisterVariable Event aus aufgerufen worden ist
if ($_IPS['SENDER'] == "RegisterVariable")
{
//$data_raw = $_IPS['VALUE']; //für debug falls nötig
$data_raw = bin2hex($_IPS['VALUE']);
$data=str_split($data_raw, 2); //$data_raw split into array
// Nur Auswerten wenn ein Standard 22 Zeichen Datagram gesendet wurde und
// der CRC Wert wird stimmt. Hier wurde jedoch der CRC16 '9fb4' durch verschiedene Datagramme bestimmt...
if (count($data)==22 && dechex(CRC16Normal(hex2bin($data_raw)))=="9fb4")
{
Setvalue($Telegram_ID,$data_raw); //erhaltenes Telegramm speichern
// Bytes beginnen bei Null (zero based)
// Uhrzeit des Receivers ist Byte 6+7+8 (Stunde,Minute,Sekunde)
// Temperatur ist Byte 13
// Ullage ist Byte 14+15
// Füllstand ist Byte 16+17
// Tankkapzität ist Byte 18+19
$hour = hexdec($data[6]);
$minute = hexdec($data[7]);
$second = hexdec($data[8]);
$hour = str_pad($hour, 2 ,'0', STR_PAD_LEFT); //mit führender Null auffüllen falls nötig
$minute = str_pad($minute, 2 ,'0', STR_PAD_LEFT); //mit führender Null auffüllen falls nötig
$second = str_pad($second, 2 ,'0', STR_PAD_LEFT); //mit führender Null auffüllen falls nötig
$ReceiverTime = $hour.":".$minute.":".$second;
$Temp = (hexdec($data[13])-40-32)/1.8; //-40 wegen Protokollbeschreibung -> °F+40 repräsentiert Byte 13, -32 wegen Umrechnung in °C
$Temp = round($Temp,2);
$Ullage = hexdec($data[14])*256+hexdec($data[15]);
$Level = hexdec($data[16])*256+hexdec($data[17]);
$MaxLevel= hexdec($data[18])*256+hexdec($data[19]);
$LevelPerCent = $Level/$MaxLevel*100;
// Werte in IPS Variablen schreiben
SetValueInteger($Level_ID,$Level);
SetValueFloat($Level_Percent_ID,$LevelPerCent);
SetValueFloat($MaxLevel_ID,$MaxLevel);
if ($data[14] != "00" || $data[15] != "00") { //manchmal kommen nur Nullen für Ullage
SetValueFloat($Ullage_ID,$Ullage);
};
if ($data[13] != "00") { //manchmal kommen keine sinnvollen Daten für die Temperatur
SetValueFloat($Temp_ID,$Temp);
};
SetValueString($Time_ID,$ReceiverTime);
};
};
Hallo @geolin,
zuerst mal vielen Dank und ja, natürlich wäre ich an dem Datums-Script interessiert :).
Heute ist mein Messgerät gekommen und ich habe es über USB an meinen IPS-Server angeschlossen (Windows) - habe also keine Raspi-Lösung. Nach meinem Verständnis müsste ich jetzt doch eine I/O-Instanz anlegen, um auf den USB-Port zuzugreifen, oder ? Oder gibt es da einen andere Lösung über ein USB-Modul. Habe zwar so etwas gefunden, aber dort steht dabei, dass man es ab IPS 6.0 nicht mehr verwenden soll…
So, jetzt bin ich weiter. Ich habe aus dem Internet einen Treiber für die Schnittstelle installiert (CP2102 USB to UART Bridge Controller) und als Serial-Port angelegt und mit einer Registervariablen verknüpft, die dein Script aufruft. Soweit sollte alles passen. Jetzt warte ich im Debug auf die ersten Meldungen - bisher kam nur 00 00 FF.
Da stimmt was nicht. Die Daten kommen bei mir ca. alle halbe Stunde. Hast du den Receiver und die Sonde denn bereits eingerichtet, also das Setup durchgeführt? Ohne sendet der keine Daten…
ja, ist alles eingerichtet und funktioniert (augenscheinlich). so alle halbe Stunde passt bei mir auch - nur inhaltlich kommt noch nicht das, was ich erwarte…also das Script läuft, aber es kann wohl mit dem Inhalt nichts anfangen.
Die letzten beiden Male kam 00 40 FE und 00 40