Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Hardware
  4. Heizöl24 - MEX

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    11
    1
    87

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    556

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.7k

Heizöl24 - MEX

Geplant Angeheftet Gesperrt Verschoben Hardware
adapteroilfoxheizöltank
37 Beiträge 12 Kommentatoren 8.3k Aufrufe 12 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • G gjo

    @spicer

    das war auch meine Vermutung.

    heidenei ... nach:

    root@DietPi:/home/script# pip install paho-mqtt --upgrade
    Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple/
    Requirement already satisfied: paho-mqtt in /usr/local/lib/python3.7/dist-packages (1.6.1)
    Collecting paho-mqtt
     Downloading https://www.piwheels.org/simple/paho-mqtt/paho_mqtt-2.0.0-py3-none-any.whl (66 kB)
        ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 66.9/66.9 kB 746.1 kB/s eta 0:00:00
    Installing collected packages: paho-mqtt
     Attempting uninstall: paho-mqtt
       Found existing installation: paho-mqtt 1.6.1
       Uninstalling paho-mqtt-1.6.1:
         Successfully uninstalled paho-mqtt-1.6.1
    Successfully installed paho-mqtt-2.0.0
    WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
    
    [notice] A new release of pip is available: 23.3.2 -> 24.0
    [notice] To update, run: python3 -m pip install --upgrade pip
    
    

    kommt jetzt:

    root@DietPi:/home/script# python3 /home/script/mex.py
    Traceback (most recent call last):
      File "/usr/local/lib/python3.7/dist-packages/paho/mqtt/client.py", line 49, in <module>
        from typing import Literal
    ImportError: cannot import name 'Literal' from 'typing' (/usr/lib/python3.7/typing.py)
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/home/script/mex.py", line 38, in <module>
        import paho.mqtt.client as mqtt
      File "/usr/local/lib/python3.7/dist-packages/paho/mqtt/client.py", line 51, in <module>
        from typing_extensions import Literal  # type: ignore
    ModuleNotFoundError: No module named 'typing_extensions'
    root@DietPi:/home/script#
    
    

    also via:

    root@DietPi:/home/script# pip install typing-extensions
    
    Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple/
    Collecting typing-extensions
      Downloading https://www.piwheels.org/simple/typing-extensions/typing_extensions-4.7.1-py3-none-any.whl (33 kB)
    Installing collected packages: typing-extensions
    Successfully installed typing-extensions-4.7.1
    
    
    

    nachinstalliert. dann mit folgendem Ergebnis:

    root@DietPi:/home/script# python3 /home/script/mex.py
    /home/script/mex.py:95: DeprecationWarning: Callback API version 1 is deprecated, update to latest version
      client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION1, "MEX")
    
    
    spicerS Offline
    spicerS Offline
    spicer
    schrieb am zuletzt editiert von spicer
    #28

    @gjo
    Diese Warnung ist ok. Die hab ich auch. Sollte eigentlich funktionieren so.
    Funktioniert's denn?
    Frage: Bist Du als root unterwegs, nicht als pi?

    Edit:
    Warnung ist nun weg. Code nutzt nun aktuelle Parameter ;)

    Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
    (Murphys Gesetz)

    G 1 Antwort Letzte Antwort
    0
    • spicerS spicer

      @gjo
      Diese Warnung ist ok. Die hab ich auch. Sollte eigentlich funktionieren so.
      Funktioniert's denn?
      Frage: Bist Du als root unterwegs, nicht als pi?

      Edit:
      Warnung ist nun weg. Code nutzt nun aktuelle Parameter ;)

      G Offline
      G Offline
      gjo
      schrieb am zuletzt editiert von
      #29

      @spicer
      die Daten kommen an ... wie cool. Danke nochmal.
      ja, auf dem Testsystem hatte ich s mir einfacher gemacht.

      Thomas BraunT 1 Antwort Letzte Antwort
      0
      • spicerS Offline
        spicerS Offline
        spicer
        schrieb am zuletzt editiert von
        #30

        V1.2 auf github

        • DataReceived Punkt hinzugefügt
        • paho-mqtt Versionsabfrage

        Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
        (Murphys Gesetz)

        1 Antwort Letzte Antwort
        0
        • G gjo

          @spicer
          die Daten kommen an ... wie cool. Danke nochmal.
          ja, auf dem Testsystem hatte ich s mir einfacher gemacht.

          Thomas BraunT Online
          Thomas BraunT Online
          Thomas Braun
          Most Active
          schrieb am zuletzt editiert von Thomas Braun
          #31

          @gjo sagte in Heizöl24 - MEX:

          ja, auf dem Testsystem hatte ich s mir einfacher gemacht.

          Das ist aber auch nur vermeintlich einfacher.
          In der Realität ist es nämlich aufwändiger die Rechte richtig zu halten.
          Und deswegen gilt halt: NIE root.

          Die Meldung:

          WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
          

          steht nämlich da auch nicht zum Spaß.

          Linux-Werkzeugkasten:
          https://forum.iobroker.net/topic/42952/der-kleine-iobroker-linux-werkzeugkasten
          NodeJS Fixer Skript:
          https://forum.iobroker.net/topic/68035/iob-node-fix-skript
          iob_diag: curl -sLf -o diag.sh https://iobroker.net/diag.sh && bash diag.sh

          spicerS 1 Antwort Letzte Antwort
          0
          • Thomas BraunT Thomas Braun

            @gjo sagte in Heizöl24 - MEX:

            ja, auf dem Testsystem hatte ich s mir einfacher gemacht.

            Das ist aber auch nur vermeintlich einfacher.
            In der Realität ist es nämlich aufwändiger die Rechte richtig zu halten.
            Und deswegen gilt halt: NIE root.

            Die Meldung:

            WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
            

            steht nämlich da auch nicht zum Spaß.

            spicerS Offline
            spicerS Offline
            spicer
            schrieb am zuletzt editiert von
            #32

            @thomas-braun sagte in Heizöl24 - MEX:

            @gjo sagte in Heizöl24 - MEX:

            ja, auf dem Testsystem hatte ich s mir einfacher gemacht.

            Das ist aber auch nur vermeintlich einfacher.
            In der Realität ist es nämlich aufwändiger die Rechte richtig zu halten.
            Und deswegen gilt halt: NIE root.

            Die Meldung:

            WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
            

            steht nämlich da auch nicht zum Spaß.

            Jep. Dachte ich mir auch, dass das wegen dem root so ist ;)

            Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
            (Murphys Gesetz)

            1 Antwort Letzte Antwort
            0
            • spicerS Offline
              spicerS Offline
              spicer
              schrieb am zuletzt editiert von spicer
              #33

              V1.3 auch auf github.

              mex.py

              #!/usr/bin/python3
              
              ######################################################################################
              ###################################             V1.3               ###################
              ################################### MEX-Daten in ioBroker einlesen ###################
              ###################################    Benötigt den MQTT Adapter   ###################
              ###################################    (C) 2024 Daniel Luginbühl   ###################
              ######################################################################################
              
              ######################################### WICHTIGE INFOS #############################
              ################## Im ioBroker ist der MQTT Broker/Client Adapter zu installieren   ##
              ################## Einstellungen:                                                   ##
              ##################    IP: Server/Broker                                             ##
              ##################    Authentifizierungseinstellungen: Benutzer/Passwort definieren ##
              ################## ---------------------------------------------------------------- ##
              ##################                  Alles als User PI ausführen!                    ##
              ################## ---------------------------------------------------------------- ##
              ################## mex.py Script auf Rechte 754 setzen mit:                         ##
              ################## chmod 754 mex.py                                                 ##
              ################## Dieses Script per Cronjob alle 2 bis 4 Stunden ausführen:        ##
              ################## crontab -e                                                       ##
              ################## 0 */3 * * * /home/pi/mex.py          # Pfad ggf anpassen!        ##
              ################## ---------------------------------------------------------------- ##
              ################## Vorgängig zu installieren (auf Host, wo dieses Script läuft):    ##
              ##################    sudo apt install python3-requests                             ##
              ##################    pip3 install paho-mqtt                                        ##
              ##################    pip3 install typing-extensions                                ##
              ######################################################################################
              
              ######################################################################################
              ################################### Hier Einträge anpassen! ##########################
              
              username = "AAAAA@gmail.com"    # Deine Email Adresse bei HeizOel24
              passwort = "BBBBBBBBB"          # Dein Passwort bei HeizOel24
              
              broker_address = "192.168.1.50" # ioBroker IP, auf welchem der MQTT (Server) Adapter läuft
              mqtt_user = "uuuuuu"            # ioBroker MQTT User     (in Authentifizierungseinstellungen definiert)
              mqtt_pass = "pppppp"            # ioBroker MQTT Passwort (in Authentifizierungseinstellungen definiert)
              
              debug = False                   # True = Debug Infos auf die Konsole
              
              ######################################################################################
              ######################################################################################
              
              
              import requests
              import time
              import json
              import paho.mqtt.client as mqtt
              
              def mqtt_send(client, topic, wert):
                  client.publish("MEX/" + topic, wert)
              
              def login():
                  if debug:
                      print('Login in...')
                  global session_id
                  url = "https://api.heizoel24.de/app/api/app/Login"
                  newHeaders = {'Content-type': 'application/json'}
                  reply = requests.post(url, json = { "Password" : passwort, "Username" : username}, headers=newHeaders)
              
                  return_flag = False
                  if reply.status_code == 200:
                      if debug:
                          print("Login OK")
                      reply_json = json.loads(reply.text)
                      if reply_json['ResultCode'] == 0:
                          session_id = reply_json['SessionId']
                          if debug:
                              print('Session ID: ' + session_id)
                          return_flag = True
                      else:
                          if debug:
                              print('ResultCode nicht 0. Keine Session ID erhalten!')
                  else:
                      if debug:
                          print('Login fehlgeschlagen! Heizoel24 Login Status Code: ' + str(reply.status_code))
                  return return_flag
              
              def mex():  
                  login_status = login()
                  if login_status == False:
                      return "error"
                  if debug:
                      print('Refresh sensor data cache...')
                  url = 'https://api.heizoel24.de/app/api/app/GetDashboardData/'+ session_id + '/1/1/False'
                  reply = requests.get(url)     
                  if reply.status_code == 200:
                      if debug:
                          print("Daten wurden empfangen")
                      sensor_data = reply
                  else:
                      if debug:
                          print('Heizoel24 GetDashboardData Status Code: ' + str(reply.status_code))
                      sensor_data = "error"   # Fehler. Keine Daten empfangen.
                  return sensor_data
              
              def main():
                  topic1 = ['SensorId', 'IsMain', 'CurrentVolumePercentage', 'CurrentVolume', 'NotifyAtLowLevel', 'NotifyAtAlmostEmptyLevel', 'NotificationsEnabled', 'Usage', 'RemainsUntil', 'MaxVolume', 'ZipCode', 'MexName', 'LastMeasurementTimeStamp', 'LastMeasurementWithDifferentValue', 'BatteryPercentage', 'Battery', 'LitresPerCentimeter', 'LastMeasurementWasSuccessfully', 'SensorTypeId', 'HasMeasurements', 'MeasuredDaysCount', 'LastMeasurementWasTooHigh', 'YearlyOilUsage', 'RemainingDays', 'LastOrderPrice', 'ResultCode', 'ResultMessage']
                  topic2 = ['LastOrderPrice', 'PriceComparedToYesterdayPercentage', 'PriceForecastPercentage', 'HasMultipleMexDevices', 'DashboardViewMode', 'ShowComparedToYesterday', 'ShowForecast', 'ResultCode', 'ResultMessage']
                  RemainsUntilCombined = ['MonthAndYear', 'RemainsValue', 'RemainsUnit']
              
                  try:
                      client = mqtt.Client("mex")
                      if debug:
                          print("paho-mqtt version < 2.0")
                  except:
                      client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, "mex")
                      if debug:
                          print("paho-mqtt version >= 2.0")
              
                  if debug:
                      print("---------------------")
                      print("client:", client)
                      print("---------------------")
              
                  client.username_pw_set(mqtt_user, mqtt_pass)
                  client.connect(broker_address)
              
                  daten = mex()
                  if daten == "error":
                      if debug:
                          print("Fehler. Keine Daten empfangen.")
                      mqtt_send(client, "Items/DataReceived", False)
                      client.disconnect()
                      return
              
                  daten = daten.json()
              
                  if debug:
                      print()
                      print("JSON-Daten:")
                      print("===========")
                      print()
                      print(daten)
                      print()
              
                  if debug:
                      print("---------------------")
                      print()
                  for n in range(len(topic2)):
                      if debug:
                          print(topic2[n] + ":", daten[topic2[n]])
                      mqtt_send(client, "PricingForecast/" + topic2[n], daten[topic2[n]])
              
                  daten = daten["Items"]
                  daten = daten[0]
              
                  if debug:
                      print("---------------------")
                  for n in range(len(topic1)):
                      if debug:
                          print(topic1[n] + ":", daten[topic1[n]])
                      mqtt_send(client, "Items/" + topic1[n], daten[topic1[n]])
                  mqtt_send(client, "Items/DataReceived", True)
              
                  daten3 = daten['RemainsUntilCombined']
              
                  if debug:
                      print("---------------------")
                      print('RemainsUntilCombined:')
                  for n in range(len(RemainsUntilCombined)):
                      if debug:
                          print(RemainsUntilCombined[n] + ":", daten3[RemainsUntilCombined[n]])
                      mqtt_send(client, "RemainsUntilCombined/" + RemainsUntilCombined[n], daten3[RemainsUntilCombined[n]])
              
                  client.disconnect()
              
              if __name__ == '__main__':   
                  main()
              

              Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
              (Murphys Gesetz)

              1 Antwort Letzte Antwort
              0
              • spicerS Offline
                spicerS Offline
                spicer
                schrieb am zuletzt editiert von spicer
                #34

                Ich wäre übrigens sehr empfänglich für Hilfe beim Erstellen eines ioBroker Adapters.
                Die Links
                https://iobroker.readthedocs.io/de/latest/development/adapter.html
                und
                https://www.codeconvert.ai/python-to-javascript-converter
                hab ich zwar, aber ohne Hilfe ist das doch etwas schwierig.
                Ich weiss nichtmal, wie ich meinem Code beibringe, Input- und Output vom/zum ioBroker zu senden/empfangen.
                Mit anderen Worten: Die Schnittstelle.
                Bin für jeden Rat dankbar.
                Totaler Anfänger im programmieren bin ich nicht.
                Jedoch Java = 0 Ahnung. Python sieht's anders aus (hoffentlich oben im Py-Script ersichtlich).
                Bin halt ein Basic & Assembler Kind aus den C64 bzw Atari Jahren ^^

                Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
                (Murphys Gesetz)

                mcm1957M 1 Antwort Letzte Antwort
                1
                • spicerS spicer

                  Ich wäre übrigens sehr empfänglich für Hilfe beim Erstellen eines ioBroker Adapters.
                  Die Links
                  https://iobroker.readthedocs.io/de/latest/development/adapter.html
                  und
                  https://www.codeconvert.ai/python-to-javascript-converter
                  hab ich zwar, aber ohne Hilfe ist das doch etwas schwierig.
                  Ich weiss nichtmal, wie ich meinem Code beibringe, Input- und Output vom/zum ioBroker zu senden/empfangen.
                  Mit anderen Worten: Die Schnittstelle.
                  Bin für jeden Rat dankbar.
                  Totaler Anfänger im programmieren bin ich nicht.
                  Jedoch Java = 0 Ahnung. Python sieht's anders aus (hoffentlich oben im Py-Script ersichtlich).
                  Bin halt ein Basic & Assembler Kind aus den C64 bzw Atari Jahren ^^

                  mcm1957M Offline
                  mcm1957M Offline
                  mcm1957
                  schrieb am zuletzt editiert von
                  #35

                  @spicer

                  Hier (aus Zeitgründen) nur eine ganz kurze Info:

                  -) Am besten schaust du dir einen (eher einfachen) Adapter auf github mal an und versuchst zu verstehen was da steht.

                  -) Ein Grundverständnis für javascript (das ist NICHT Java) ist hilfreich. Aber wenn du eine andere Sprache kannst, sollte das nicht das Problem sein.

                  -) Für Testzwecke erstellst du am besten einen neuen Adapter mittels adapter creator.

                  -) Testen tust du am besten mittels dev-server.

                  Ich würde dir empfehlen dich in der telgramm Gruppe adapter-developer-starters anzumelden. Invite Links windest du auf www.iobroker.dev. Dort gibts sicher wen der dir mal ein wenig beim Start helfen kann und wird.

                  P.S: Uns ja, die dokumentation ist (m.E.) eine der größten Baustellen / Schwachstellen von ioB. Wenns es da leite gibt die sowas gener schreiben sind sie sicher gern gesehen. (Viele Code-Entwickler schreiben ungern Dokumentaionen ...)

                  Entwicklung u Betreuung: envertech-pv, hoymiles-ms, ns-client, pid, snmp Adapter;
                  Support Repositoryverwaltung.

                  Wer Danke sagen will, kann nen Kaffee spendieren: https://paypal.me/mcm1957atiobroker

                  LESEN - gute Forenbeitrage

                  1 Antwort Letzte Antwort
                  0
                  • xadoxX Offline
                    xadoxX Offline
                    xadox
                    schrieb am zuletzt editiert von xadox
                    #36

                    Das Script ließt den MEX direkt aus und der Adapter geht über den Heizöl24 Account?
                    Bitte ignorieren wer lesen kann ist im Vorteil :flushed:

                    spicerS 1 Antwort Letzte Antwort
                    0
                    • xadoxX xadox

                      Das Script ließt den MEX direkt aus und der Adapter geht über den Heizöl24 Account?
                      Bitte ignorieren wer lesen kann ist im Vorteil :flushed:

                      spicerS Offline
                      spicerS Offline
                      spicer
                      schrieb am zuletzt editiert von spicer
                      #37

                      @xadox
                      Für den ioBroker hab ich ja einen Adapter erstellt ( https://github.com/ltspicer/ioBroker.heizoel24-mex ) ;)
                      Und hier ist die aktuelle Version vom Script: https://github.com/ltspicer/heizoel24.mex

                      Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
                      (Murphys Gesetz)

                      1 Antwort Letzte Antwort
                      1
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      361

                      Online

                      32.5k

                      Benutzer

                      81.8k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe