Heizöltank Messen

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.

Taugt der BayWa Oilfox 2 etwas?

Hallo,

nutze den Proteus Ecometer und habe diesen in IPS eingebunden.

Gruß Georg

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

Moin Moin,

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.)

Gruß Michael

Proteus EcoMeter - Füllstandsanzeige für Heizöltanks (proteus-sensor.de)

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.

ich frage mich eben ob diese Ultraschallsensoren funktionieren wenn ich oben noch ein stück Rohr drauf habe.
Bei mir sieht das etwa so aus

@tissenm

hallo Michael, hast du den „Frog“ in IPS eingebunden bekommen ?

Moin Axel,
nein, ich habe auch noch keinen gekauft. Befasse mich z.Zt. mit Gartenbewässerung. Weiß auch noch nicht wann ich dazu komme.

@tissenm
danke

@geolin
wie hast du deinen Proteus Ecometer in IPS eingebunden ?

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

Hallo, ich wäre hier auch sehr interessiert an den Scripten zum abkupfern :slight_smile:
Vielen Dank, Roland

Mit einem ToF Laser-Sensor soll es auch gut klappen. Wenn es ums selbst basteln geht.

Hallo @geolin,

ich würde mich gerne anschließen und hätte auch Interesse an deiner Lösung.

Grüße Frank

Hallo zusammen,

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…

Grüße Frank

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.

hm … nach 2 Stunden nur 00 00 oder 00 00 FF. Weiß jemand, wie oft richtige Informationen übermittelt werden ?

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