HomeMatic Kapazitiver Füllstandsmesser für diesen Tank?

Hallo,
wollt mal fragen ob es machbar ist mit dem HomeMatic Kapazitiver Füllstandsmesser,diesen Tank auszulesen?

Hi Michi,
ich kenne den HM-Füllstandsmesser leider nicht.
Alternativ kann ich dir aber den Ultraschall Leveljet nur empfehlen. Geht problemlos.

Du hängst einfach nur 2 Kabel in den Tank und er misst die Füllhöhe, geht eigentlich immer. (und auch bisher absolut zuverlässig). :smiley:

Egal welche Lösung aber bei der Tankform hast Du ein kleines Problem.

Oh, ein Quiz! :wink:

Lass mich raten, die Umrechnung Füllhöhe in Volumen? Sollte doch aber möglich sein wenn alle Parameter bekannt sind.

Ja klar, :stuck_out_tongue:
aber ich denke nicht, das michl das bedacht hat.:rolleyes:

Deswegen fragt er ja nach :wink: :smiley:

Na bei @michl bin ich mir nicht sicher. :stuck_out_tongue:

Ich meine, jeder Durchschnittdenker würde die Messeinheit kaufen, dann das Teil gezielt füllen und die Messwerte notieren.
OK, man kann es aber auch mathematisch über Annäherung machen. Wer´s braucht.

BTW: So ne Eierform hab ich ja noch nie bei normalen Tanks gesehen - höchstens bei Druckbehältern.

Laut ELV funktioniert der Füllstandsmesser leider nicht mit meiner „Ei“ Form :slight_smile:

…da die Wassermenge bei dieser Bauform nicht proportional zur Höhe ansteigt…

Was hab ich gesagt! :slight_smile: :slight_smile: :slight_smile:

Die haben ja kein IPS.
Selbst wenn das Teil keine Rohdaten rausgibt (Hab so ein Teil nicht), so könntest Du Dir über eine Tabelle die Werte des Sensors in IST-Werte umrechnen lassen.
Es gibt immer Wege.

Du meinst mit Hilfe eines Scriptes umrechnen?
Nun das hört sich etwas Kompliziert an :frowning: ob ich das hinbekomme weis ich nicht.
Der von ProJet ist mir etwas zu teuer…

Einfach mal nachdenken … brauchst Du die genaue Literzahl oder reicht die Füllhöhe ??

Wenn er die Füllhöhe und eine entsprechende Peiltabelle des Herstellers hat ist die Literzahl doch einfach auszurechnen.

Hab beim Hersteller nachgefragt. Leider gibt es für diesen Tank keine Peiltabelle :’(
Somit wird es schwierig werden den Homematic Füllstandsanzeiger zu Verwenden.

Jetzt mal ehrlich Michl. Ich hatte schon zwei mögliche leicht durchführbare Lösungen beschrieben. Warum bist Du immer so kompliziert.
Füll das Ding einmal über ne Wasseruhr auf und trag die Messwerte ein und fertig. Das wäre ne praktisch mögliche Lösung, die auch Du schaffen kannst.

Hallo,
ja werd ich machen :slight_smile:
Soll heissen eine Excel Liste mit:

0cm ist 0Liter
5cm ist 20Liter
Usw…

Danke!

Wenn du die Geschichte am laufen hast und so eine Tabelle hast, schreib ich dir dazu ein Script. Je kleiner die Abstände mit deinen Messungen desto genauer fällt natürlich die Berechnung mit den Zwischenwerten aus. Ich bin auch am überlegen mir so etwas für den Brunnen zu zulegen.

Gruß

Edit: hab mir das Bild gerade nochmal angeguckt, das sollte auch nicht so das Problem sein, das Volumen als Funktion der höhe auszudrücken, ich guck nachher mal.

Ich würde vor allem die Sensorabstände im Mittelbereich enger fassen, damit die „Genauigkeit“ nicht zu sehr leidet.

So, wenn ich das richtig sehe, kann man die Form von dem Tank ziemlich genau, als an den Enden jeweils Halbkugeln und und der mitte ein Stück Zylinder beschreiben. Falls ich das falsch sehe, korrigiere mich. Habe im Anhang mal aufgeschrieben, wie man da an das Volumen als Funktion der höhe kommt. Das Script, wovor du so Angst hast hab ich auch geschrieben, ich hoffe es funktioniert. Die Einheiten sind SI Basiseinheiten. Einige Funktionen sind aus dem Script HM_Heizung_Funktionen von Swifty geklaut. Ich denke man sollte so direkt mit hinreichend guter genauigkeit an den Füllstand kommen. Bitte nochmal nachgucken, ob ich alles richtig umgestellt und eingesetzt habe.

Wäre schon, wenn du berichtest, wie gut der Sensor funktioniert, ich überlege ja wie gesagt auch so einen zu haben.

Gruß und einen schönen Abend noch

Julian

<?

/*---------------------------------------------------------------*/
$L = 0.5; //Länge des Zylindrischen Mittelstücks [Meter]
$R = 2.0; //Innenradius des Zylindrischen Mittelstücks [Meter]
$H = 59758 /*[Scripte\Test\höhe]*/; //HM-Höhenvariablen ID
$Einheit = 1; //Einheit in der das Volumen ausgegeben werden soll "1" = m^3 ; "2" = dm^3
$WFE = 20224; // Ort, wo die Volumenvariable angezeigt werden soll
/*---------------------------------------------------------------*/

If ($_IPS['SENDER'] == "Execute")  // Instalation
		{
		$VarIdVolumen = CreateVariableByName($_IPS['SELF'], "Volumen", 2, "", "Volumen", 0);
		SetTimerByName($_IPS['SELF'], "TriggerHoehe", $H);
		SetLinkByName($WFE, "Tankvolumen", $VarIdVolumen, 0);
		if (!IPS_VariableProfileExists("Tankvolumen"))
		IPS_CreateVariableProfile ( "Tankvolumen" , 2 );
		IPS_SetVariableCustomProfile ( $VarIdVolumen , "Tankvolumen" );
		switch ($Einheit)
						{
						case 1:
        				IPS_SetVariableProfileText("Tankvolumen", "", " m³");
        				IPS_SetVariableProfileDigits("Tankvolumen", 2);
        				break;
        				case 2:
        				IPS_SetVariableProfileText("Tankvolumen", "", " Liter");
        				IPS_SetVariableProfileDigits("Tankvolumen", 0);
        				break;
						}
		}

if($_IPS['EVENT'] == IPS_GetObjectIDByName("TriggerHoehe", $_IPS['SELF']))
		{
		$VarIdVolumen = @IPS_GetObjectIDByName("Volumen", $_IPS['SELF']);
		if(GetValueFloat($H)<=2*$R && GetValueFloat($H)>=0)
				{
				switch ($Einheit)
						{
						case 1:
        				$Volumen = Volumen($L, $R, GetValueFloat($H));
        				break;
        				case 2:
        				$Volumen = pow(10,3)*Volumen($L, $R, GetValueFloat($H));
        				break;
						}
            SetValueFloat ($VarIdVolumen, $Volumen);
				}else
				{
				SetValueFloat ($VarIdVolumen, -1);
				}
		}

function Volumen ($Laenge, $Radius, $Hoehe)
		{
		$Volumen = $Laenge*(pi()*pow($Radius,2)+((1/2)*pow($Radius,2)*(-2*acos(($Hoehe/$Radius)-1)-sin(-2*acos(($Hoehe/$Radius)-1)))))+(1/3)*pi()*pow($Hoehe,2)*(3*$Radius-$Hoehe);
		return $Volumen;
		}

function CreateVariableByName($parentID, $name, $type, $profile, $ident, $position)
    {
        $vid = @IPS_GetVariableIDByName($name, $parentID);
        if($vid === false)
        {
            $vid = IPS_CreateVariable($type);
            IPS_SetParent($vid, $parentID);
            IPS_SetName($vid, $name);
				IPS_SetPosition ($vid, $position);
            IPS_SetInfo($vid, "this variable was created by script #".$_IPS['SELF']);
            if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
				if($ident !=="") {IPS_SetIdent ($vid , $ident );}
			}
	  	  return $vid;
    }

function SetTimerByName($parentID, $name, $ausloeser)
    {
     $eid = @IPS_GetEventIDByName($name, $parentID);
     if($eid === false)
        {
            $eid = IPS_CreateEvent(0);                  //Ausgelöstes Ereignis
				IPS_SetEventTrigger($eid, 1, $ausloeser);        //Bei Änderung von Variable mit ID 15754
				IPS_SetParent($eid, $parentID);         //Ereignis zuordnen
            IPS_SetName($eid, $name);
            IPS_SetInfo($eid, "this timer was created by script #".$_IPS['SELF']);
				IPS_SetEventActive($eid, true);             //Ereignis aktivieren
        }
		return $eid;
    }
    
function SetLinkByName($parentID, $name, $targetID, $position)
    {
	 $lid = @IPS_GetLinkIDByName ($name, $parentID );
	 if($lid === false)
        {
			$LinkID = IPS_CreateLink();       //Link anlegen
			IPS_SetName($LinkID, $name); 		//Link benennen
			IPS_SetLinkTargetID($LinkID, $targetID);
         IPS_SetParent($LinkID, $parentID);
         IPS_SetPosition ($LinkID, $position);
		  }
    return $lid;
	 }
    
?>

Tankvolumen1.pdf (268 KB)

Hallo zusammen,

kann mir einer sagen, welche Daten das Teil an IPS übergibt und wie genau?

Also Füllhöhe in cm, alle 5 alle 10 oder jeden mm?

Gruß Marcel