Wohnmobil Abfrage Gas/Wasser/Battiere

Ich glaube den musst zu per Sync Taste am Sensor anlernen. Und die Werte findest du nicht in Kai’s Modul sondern im MQTT Serverkonfigurator.

HI,

hat geklappt. Ich hatte den Shelly an und die Sync Taste gedrückt, ob das wichtig war - weiß ich nicht.

Dann unter Konfigurator “MQTT Server Konfigurator” hinzugefügt, den hatte ich noch nicht. Der hängt jetzt mit dem dem 1883 Shelly MQTT drauf und dort tauchte dann der Mopeka auf.

Nun die letzte Doofe frage:

Hast du ein Skript was das ganze in normale Werte übersetzt?
Bei mir sieht es so aus:

tankLevel ist der Inhalt in mm, der scheint aber bei dir nicht zu passen, wenn du eine 11kg Flasche hast.
Ich glaube voll war da ~360mm. Eine genaue Umrechnung habe ich noch nicht, lebe mit der mm Angabe…

ps habe gerade auf ALUGas Flaschen umgestellt, da ist es etwas trickreicher den Sensor einzurichten, da Alu nicht magnetisch ist.


Von 9:30 - 16:00 Uhr waren wir mit dem WoMo unterwegs.
Mittagspause um 14:00Uhr.

lg ts

Ich hab mal ChatGPT gefragt, ob er mir nen skript dazu schreibt. Es funktioniert bei mir - für die Werte übernehme ich keine Haftung, stimmen bei mir aber nach aktuellen Tests um +/- 2%

<?php
// --------------------------------------------------------------------------------
// Konfigurationsbereich
// --------------------------------------------------------------------------------
$debug = 1;

// ID der Dummy-Instanz "data" des Mopeka-Sensors
$sensorInstanceId = 59971;

// Zielvariablen zum Speichern der berechneten Werte
$tankLevelPercentID = 41564; // Prozentuale Füllung (z. B. 64 %)
$tankLevelCmID      = 57770; // Füllhöhe in cm (z. B. 19.8 cm)
$temperatureVarID   = 42716; // Temperatur in °C
$qualityVarID       = 42370; // Qualität (Kontakt)
$rssiVarID          = 10860; // RSSI (Signalstärke)

// Kalibrierungswerte für 11kg-Gasflasche
$calibratedFullRaw = 384;    // Rohwert bei voller Flasche (aus Mopeka-„tankLevel“)
$maxHeightCM       = 31.0;   // Maximale Füllhöhe in cm für 11kg Gasflasche

// --------------------------------------------------------------------------------
// Einlesen aller Variablen
// --------------------------------------------------------------------------------
$dataChildren = IPS_GetChildrenIDs($sensorInstanceId);
$tankLevel = null;
$temperatureC = null;
$quality = null;
$rssi = null;

foreach ($dataChildren as $childID) {
    $name = IPS_GetName($childID);
    switch ($name) {
        case 'tankLevel':
            $tankLevel = GetValue($childID);
            break;
        case 'temperatureC':
            $temperatureC = GetValue($childID);
            break;
        case 'quality':
            $quality = GetValue($childID);
            break;
        case 'rssi':
            $rssi = GetValue($childID);
            break;
    }
}

// --------------------------------------------------------------------------------
// Logik und Berechnungen
// --------------------------------------------------------------------------------
$percentage = null;
$heightCm = null;

if ($tankLevel !== null && $calibratedFullRaw > 0) {
    $percentage = round(($tankLevel / $calibratedFullRaw) * 100);
    $heightCm = round(($tankLevel / $calibratedFullRaw) * $maxHeightCM, 1);
}

// --------------------------------------------------------------------------------
// Debug Ausgabe alle Variablen
// --------------------------------------------------------------------------------
if ($debug) {
    echo "tankLevel (raw):        " . var_export($tankLevel, true) . "\n";
    echo "Füllstand in %:         " . var_export($percentage, true) . " %\n";
    echo "Füllhöhe in cm:         " . var_export($heightCm, true) . " cm\n";
    echo "Temperatur (°C):        " . var_export($temperatureC, true) . "\n";
    echo "Qualität (Kontakt):     " . var_export($quality, true) . "\n";
    echo "Signalstärke (RSSI):    " . var_export($rssi, true) . "\n";
}

// --------------------------------------------------------------------------------
// Setzen der Variablen zum Abschluss
// --------------------------------------------------------------------------------
if ($percentage !== null) {
    SetValue($tankLevelPercentID, $percentage);
}
if ($heightCm !== null) {
    SetValue($tankLevelCmID, $heightCm);
}
if ($temperatureC !== null) {
    SetValue($temperatureVarID, $temperatureC);
}
if ($quality !== null) {
    SetValue($qualityVarID, $quality);
}
if ($rssi !== null) {
    SetValue($rssiVarID, $rssi);
}
?>

Bin auf den Langzeittest gespannt, werde das Skript auch mal probieren.
Danke für die Info.

lg Thomas

Ich werde berichten. Ich habe das WoMo jetzt seit April und schon 40% Gas verbraucht auf ca. 40 Nächte.. dauert da halt etwas.
Selbst den Shunt sauber einzustellen ist eine Aufgabe von Wochen.

Das Gasskript war jetzt 20 Sekunden “Arbeit” :slight_smile: .. ich vergleiche und Berichte.

Ich seit März, also auch noch am üben. Gestern Fahrradlift gekauft und angebaut, heute dafür Akku Schrauber gekauft. :rofl: (Man(n) wird ALT und kann nicht mehr so hoch heben :cry:

Morgen

Also falls ihr Womo Fahrer mal Richtung Südeuropa aufbrecht, lass mich wissen.

Wohne hier direkt an der Autobahn, kurz vor der Grenze zu Slo/Ita. Gleich neben einem beliebten Übernachtungsplatz. Vielleicht geht sich ja mal ein Spontantreffen aus.

gruß vom Wohnwagenfahrer
Bernhard

Hab dein Gasskript mal probiert, passt auch hier mit +2%
tankLevel Wert hatte ich vermutet, es ist die Füllhöhe in mm (Sieht in der APP so aus).
Von daher hatte ich zu hohe Werte bei meinen Testskript.

lg Thomas

1 „Gefällt mir“

Ich hatte beim erstellen chatgpt einige Werte mitgeben. den Wert von Symcon und dazu die Prozent aus der App. Damit sollte er erst berechnen welche Werte wieviel Prozent sind.
Bin gespannt. Mittwoch geht es nach Düsseldorf und ich denke da werde ich die Heizung brauchen. Dann kann ich vergleichen.

Hallo Zusammen,

wenn die Flasche leerer wird passt mein Skript nicht mehr. Liegt an der Temperatur vom Gas. Das muss beides berücksichtigt werden.

Ich habe vom Hersteller PDF für Integratoren bekommen, welche die Formeln zum Berechnen enthält.
Da ich ja kein Programmierer bin - sondern nur Grundverständnis habe - habe ich das PDF in den Chat mit ChatGPT geworfen und ihm gesagt: machmal was gutes draus.

Ergebnis: Passt besser!

<?php
// ==============================
// Mopeka Tankauswertung Skript
// Temperaturkompensierte Berechnung nach Herstellerformel
// ==============================

// Konfiguration: IDs deiner Mopeka-Daten
$tankLevelID = 14673;
$temperatureID = 13039;
$tankHeightCM = 31.0; // Volle Höhe der 11kg Gasflasche

// === Werte einlesen ===
$tankLevel = GetValue($tankLevelID);        // Rohwert z.B. 70
$rawTemp    = GetValue($temperatureID);     // Temperatur laut Sensor z.B. 18

// Temperatur extrahieren laut Mopeka: nur untere 7 Bits
$temp = $rawTemp & 0x7F;

// === Mopeka LPG Formel (Datenblatt Seite 6) ===
$c0 = 0.573045;
$c1 = -0.002822;
$c2 = -0.00000535;

// Berechnung der Flüssigkeitshöhe in mm → dann cm
$heightMM = $tankLevel * ($c0 + $c1 * $temp + $c2 * pow($temp, 2));
$heightCM = round($heightMM / 10, 1);

// Prozentwert bezogen auf Tankhöhe
$percentage = round(($heightCM / $tankHeightCM) * 100);

// === Ergebnis unterhalb des Skripts speichern ===
$scriptID = $_IPS['SELF'];

// Funktion: Erstelle oder finde Child-Variablen
function CreateOrUpdateChild($ident, $name, $type, $parentID, $value) {
    $varID = @IPS_GetObjectIDByIdent($ident, $parentID);
    if ($varID === false) {
        $varID = IPS_CreateVariable($type);
        IPS_SetParent($varID, $parentID);
        IPS_SetName($varID, $name);
        IPS_SetIdent($varID, $ident);
    }
    SetValue($varID, $value);
}

// Float = 2, Integer = 1
CreateOrUpdateChild("mopeka_cm", "Füllhöhe (cm)", 2, $scriptID, $heightCM);
CreateOrUpdateChild("mopeka_percent", "Füllstand (%)", 1, $scriptID, $percentage);

// === Debugausgabe ===
echo "tankLevel (raw):       $tankLevel\n";
echo "Temperatur (°C):       $rawTemp → genutzte: $temp\n";
echo "Füllhöhe berechnet:    $heightCM cm\n";
echo "Füllstand geschätzt:   $percentage %\n";

Kannst du mir das mal senden ?

Hallo.

Würde mich auch interessieren da ich das für 5kg-Flaschen umsetzten muss.

Danke vorab.

Passt hier nicht.
Habe ne fast folle Flasche(11kg), APP sagt 85% bei deinem neuen Skript kommt 54%

Ich warte mal auf deine Doku (PDF)…

Hi, die Höhe der Flasche kann man doch im Skript einstellen.

ProCheck_Sensor_integrator_guide.pdf (295,3 KB)

Ich bin gespannt ob du es besser hinbekommst, würde mich freuen.

bei mir passt die Berechnung aktuell. Meine Flasche ist aber auch so gut wie leer. 10% hat Sie aktuell noch.

Danke,
das sind genau die Dinge die in „ble-mopeka.js“ eingebaut sind.

aber die gibt ja keine Prozent-Werte aus.

Genau, und die Formeln für verschiedene Gasflaschen fehlen in dem PDF.

Da fehlenen mir leider noch viele Info’s.