Kapitel 9

Gasflasche (Mopeka)

Der Mopeka-Sensor ist der aufwendigste von allen — er sendet keinen Füllstand, sondern nur Rohwerte. Die Prozentzahl entsteht erst durch Rechnen. Wir nehmen dafür genau dieselben Formeln, die auch die CampMatic-App verwendet, damit App und Home Assistant denselben Wert zeigen.

12 Minuten Zuletzt geprüft: 22.09.2026 DE EN

Was der Sensor wirklich sendet

Der Mopeka misst mit Ultraschall von unten durch den Flaschenboden. Was bei dir ankommt, ist die Laufzeit dieses Schallimpulses — nicht die Füllhöhe und erst recht kein Prozentwert:

Die Themen des Mopeka text
campmatic/<GERAETE_ID>/mopeka/bottle_<SLOT_MOPEKA>/raw_tof        Laufzeit in Mikrosekunden
campmatic/<GERAETE_ID>/mopeka/bottle_<SLOT_MOPEKA>/raw_t          Temperaturbyte (0–127)
campmatic/<GERAETE_ID>/mopeka/bottle_<SLOT_MOPEKA>/battery_raw    Batterie als Rohbyte
campmatic/<GERAETE_ID>/mopeka/bottle_<SLOT_MOPEKA>/quality        Messgüte 0–3
campmatic/<GERAETE_ID>/mopeka/bottle_<SLOT_MOPEKA>/rssi           Signalstärke in dBm
Warum nicht gleich Prozent?
Aus der Laufzeit wird erst dann eine Höhe, wenn man die Temperatur berücksichtigt — Schall ist bei Kälte langsamer. Und aus der Höhe wird erst dann ein Füllstand, wenn man weiß, wie hoch die Flasche ist. Beides steckt nicht im Sensor. Der Vorteil dieser Aufteilung: Ein neuer Flaschentyp oder eine Nachkalibrierung braucht kein Firmware-Update.

Die Rohwerte anlegen

Häng die folgenden Sensoren unter das bestehende mqtt: sensor: in deiner /config/packages/campmatic.yaml. Ersetze <GERAETE_ID> und <SLOT_MOPEKA> durch deine Werte.

/config/packages/campmatic.yaml — unter mqtt: sensor: yaml Herunterladen
    - name: "Gasflasche Laufzeit"
      unique_id: campmatic_<GERAETE_ID>_mopeka_<SLOT_MOPEKA>_tof
      state_topic: "campmatic/<GERAETE_ID>/mopeka/bottle_<SLOT_MOPEKA>/raw_tof"
      state_class: measurement
      entity_category: diagnostic
      icon: mdi:radar
      expire_after: 2700
      availability_topic: "campmatic/<GERAETE_ID>/status"
      payload_available: "online"
      payload_not_available: "offline"

    - name: "Gasflasche Temperaturbyte"
      unique_id: campmatic_<GERAETE_ID>_mopeka_<SLOT_MOPEKA>_rawt
      state_topic: "campmatic/<GERAETE_ID>/mopeka/bottle_<SLOT_MOPEKA>/raw_t"
      state_class: measurement
      entity_category: diagnostic
      expire_after: 2700
      availability_topic: "campmatic/<GERAETE_ID>/status"
      payload_available: "online"
      payload_not_available: "offline"

    - name: "Gasflasche Temperatur"
      unique_id: campmatic_<GERAETE_ID>_mopeka_<SLOT_MOPEKA>_temp
      state_topic: "campmatic/<GERAETE_ID>/mopeka/bottle_<SLOT_MOPEKA>/raw_t"
      value_template: "{{ value | int - 40 }}"
      unit_of_measurement: "°C"
      device_class: temperature
      state_class: measurement
      expire_after: 2700
      availability_topic: "campmatic/<GERAETE_ID>/status"
      payload_available: "online"
      payload_not_available: "offline"

    - name: "Gasflasche Sensorbatterie"
      unique_id: campmatic_<GERAETE_ID>_mopeka_<SLOT_MOPEKA>_batt
      state_topic: "campmatic/<GERAETE_ID>/mopeka/bottle_<SLOT_MOPEKA>/battery_raw"
      value_template: "{{ (value | float(0) / 32.0) | round(2) }}"
      unit_of_measurement: "V"
      device_class: voltage
      state_class: measurement
      entity_category: diagnostic
      expire_after: 2700
      availability_topic: "campmatic/<GERAETE_ID>/status"
      payload_available: "online"
      payload_not_available: "offline"

    - name: "Gasflasche Messqualität"
      unique_id: campmatic_<GERAETE_ID>_mopeka_<SLOT_MOPEKA>_quality
      state_topic: "campmatic/<GERAETE_ID>/mopeka/bottle_<SLOT_MOPEKA>/quality"
      state_class: measurement
      entity_category: diagnostic
      icon: mdi:signal-cellular-2
      expire_after: 2700
      availability_topic: "campmatic/<GERAETE_ID>/status"
      payload_available: "online"
      payload_not_available: "offline"
Die Temperatur rechnet sich einfach
Das Temperaturbyte ist eine Zahl von 0 bis 127. Vierzig abgezogen ergibt Grad Celsius — aus 59 werden also 19 °C. Beide Werte legen wir an: das Byte brauchen wir gleich für die Füllhöhe, die Gradzahl ist für dich zum Ablesen.

Füllhöhe und Füllstand berechnen

Jetzt kommt die eigentliche Rechnung. Sie gehört unter template: sensor: — falls du diesen Abschnitt noch nicht hast, legst du ihn einmal an.

/config/packages/campmatic.yaml — unter template: yaml Herunterladen
template:
  - sensor:
      - name: "Gasflasche Füllhöhe"
        unique_id: campmatic_<GERAETE_ID>_mopeka_<SLOT_MOPEKA>_mm
        unit_of_measurement: "mm"
        state_class: measurement
        icon: mdi:arrow-expand-vertical
        availability: >-
          {{ states('sensor.gasflasche_laufzeit') not in ['unknown','unavailable']
             and states('sensor.gasflasche_temperaturbyte') not in ['unknown','unavailable'] }}
        state: >-
          {% set tof = states('sensor.gasflasche_laufzeit') | float(0) %}
          {% set t   = states('sensor.gasflasche_temperaturbyte') | float(0) %}
          {{ (tof * (0.573045 - 0.002822 * t - 0.00000535 * t * t)) | round(1) }}

      - name: "Gasflasche Füllstand"
        unique_id: campmatic_<GERAETE_ID>_mopeka_<SLOT_MOPEKA>_level
        unit_of_measurement: "%"
        state_class: measurement
        icon: mdi:propane-tank
        availability: >-
          {{ states('sensor.gasflasche_fullhohe') not in ['unknown','unavailable'] }}
        state: >-
          {% set leer = 38 %}
          {% set voll = 333 %}
          {% set mm = states('sensor.gasflasche_fullhohe') | float(0) %}
          {{ [[((mm - leer) / (voll - leer) * 100), 0] | max, 100] | min | round(0) }}
Das „t" in der Formel ist das Byte, nicht die Gradzahl
In der Formel für die Füllhöhe steht bewusst sensor.gasflasche_temperaturbyte und nicht sensor.gasflasche_temperatur. Wer hier die Grad-Celsius-Zahl einsetzt, bekommt Werte, die plausibel aussehen — aber falsch sind.
Umlaute in den Entitätsnamen
Home Assistant macht aus „Gasflasche Füllhöhe" die Entität sensor.gasflasche_fullhohe — ohne Umlaute. Genauso wird aus „Füllstand" fullstand und aus „Messqualität" messqualitat. Die Formeln oben benutzen bereits die richtigen Schreibweisen. Wer sie ändert, muss darauf achten: Ein falsch geschriebener Entitätsname liefert einfach einen leeren Wert, ohne Fehlermeldung.

Deine Flasche eintragen

Die beiden Zahlen leer und voll in der Füllstandsformel hängen von deiner Flasche ab. Der Wert für leer ist bei allen gleich, nur der Vollwert unterscheidet sich:

Werte je Flaschentyp (mm) text
Flaschentyp                     leer    voll
6 kg Stahl                        38     333
11 kg Stahl                       38     358
14 kg Stahl                       38     408
6 kg Aluminium                    38     300
11 kg Aluminium                   38     460
CampingGaz 907                    38     130
US 20 lb                          38     248
US 30 lb                          38     381
US 40 lb                          38     508
Welche Flasche habe ich?
Den in der App eingestellten Typ hast du im vorigen Kapitel mitgelesen — er steht in der Antwort als tank_type, zum Beispiel EUROPE_6KG für die 6-kg-Stahlflasche.
Warum der Füllstand bei 80 Prozent stehen bleibt
Eine Gasflasche wird aus Sicherheitsgründen nie ganz gefüllt. Der Vollwert in der Tabelle entspricht dem üblichen Füllgrad, nicht der Oberkante. Eine frisch getauschte Flasche zeigt deshalb rund 100 Prozent an, auch wenn physisch noch Luft darüber ist.

Mehrere Flaschen

Hast du zwei Mopeka-Sensoren, legst du den ganzen Block ein zweites Mal an — mit der zweiten Platznummer und anderen Namen. Achte darauf, dass auch die unique_id und die Verweise in den Formeln mitwandern:

Zweite Flasche auf Platz 5 yaml
    - name: "Gasflasche rechts Laufzeit"        # statt "Gasflasche Laufzeit"
      unique_id: campmatic_<GERAETE_ID>_mopeka_5_tof
      state_topic: "campmatic/<GERAETE_ID>/mopeka/bottle_5/raw_tof"
      ...

      # und in der Formel dann auch:
      {% set tof = states('sensor.gasflasche_rechts_laufzeit') | float(0) %}

Nicht vergessen: Nach dem Speichern Konfiguration prüfen und Home Assistant neu starten.

Bevor du weitergehst
  • Die Konfigurationsprüfung meldet keinen Fehler
  • sensor.gasflasche_fullhohe zeigt einen Wert in Millimetern
  • sensor.gasflasche_fullstand zeigt eine plausible Prozentzahl
  • Die Messqualität steht auf 2 oder 3 — bei 0 oder 1 sitzt der Sensor nicht sauber