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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.7k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.6k

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.
  • 2 Offline
    2 Offline
    2radtax
    schrieb am zuletzt editiert von
    #22

    Hallo zusammen,

    ich würde ebenso lieber die Daten meines Mex Sensors direkt abfragen und bin bei der Suche auf diesen Forums-thread gekommen. Was eine API Umsetzung seitens des Herstellers angeht, sehe ich da keine Hoffnung mehr.

    Hardware technisch gibt es das (vermutlich) gleiche Teil auch bei anderen Herstellern:

    • TEK 750 Wi-Fi Ultrasonic
    • Proteus EcoFrog WLAN

    Proteus listet auf der Produktseite sogar "API Schnittstelle" als Feature, wobei daraus nicht hervor geht, ob das lokale Gerät einen API Endpoint stellt oder ob die API in der Cloud liegt.

    Ich dachte, ich teile mal meine Recherche-Ergebnisse hier, vielleicht ist ja jemand schon weiter gekommen.

    LG

    spicerS 1 Antwort Letzte Antwort
    0
    • 2 2radtax

      Hallo zusammen,

      ich würde ebenso lieber die Daten meines Mex Sensors direkt abfragen und bin bei der Suche auf diesen Forums-thread gekommen. Was eine API Umsetzung seitens des Herstellers angeht, sehe ich da keine Hoffnung mehr.

      Hardware technisch gibt es das (vermutlich) gleiche Teil auch bei anderen Herstellern:

      • TEK 750 Wi-Fi Ultrasonic
      • Proteus EcoFrog WLAN

      Proteus listet auf der Produktseite sogar "API Schnittstelle" als Feature, wobei daraus nicht hervor geht, ob das lokale Gerät einen API Endpoint stellt oder ob die API in der Cloud liegt.

      Ich dachte, ich teile mal meine Recherche-Ergebnisse hier, vielleicht ist ja jemand schon weiter gekommen.

      LG

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

      @2radtax
      Habe erst vorletzte Woche mal wieder Heizoel24 wegen dem angeschrieben.
      Antwort:
      "leider wird es eine solche Option auf absehbare Zeit nicht geben."

      Frage um Möglichkeit, ID, Cloud Link usw zu erhalten um selber eine Cloud-Abfrage zu schreiben; Antwort:
      "leider gibt es eine solche Möglichkeit noch nicht. Ein entsprechender Featurewunsch wurde allerdings aufgenommen. Ob dieses noch 2024 umgesetzt wird, können wir noch nicht abschätzen."

      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
        #24

        Habe hier ein Python Script erstellt, welches funktioniert!
        Herzlichen Dank an cpatscheider für seine Unterstützung! ( https://github.com/Secret-Lab-Productions/heizoel24-mex/discussions/2 )
        Die Daten sind dann unter mqtt/0/MEX zufinden.
        Cronjob (crontab -e):
        0 */3 * * * /home/pi/mex.py # Pfad anpassen!

        Rechte 754 ( chmod 754 mex.py )

        mex.py

        #!/usr/bin/python3
        
        ##################################
        #             V1.1               #
        # MEX-Daten in ioBroker einlesen #
        #    Benötigt den MQTT Adapter   #
        #    (C) 2024 Daniel Luginbühl   #
        ##################################
        
        ########################### WICHTIGE INFOS ###############################
        #### Dieses Script per Cronjob alle 2 bis 4 Stunden ausführen         ####
        
        #### Im ioBroker ist der MQTT Broker/Client Adapter zu installieren   ####
        #### Einstellungen:                                                   ####
        ####    IP: Server/Broker                                             ####
        ####    Authentifizierungseinstellungen: Benutzer/Passwort definieren ####
        
        #### Zu installieren (auf Host, wo dieses Script läuft):              ####
        ####    sudo apt install python3-requests                             ####
        ####    pip install paho-mqtt                                         ####
        ##########################################################################
        
        #### 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
            global logged_in
            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)
        
            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)
                    logged_in = True
            else:
                print('Login nicht OK! Heizoel24 Login Status Code: ' + str(reply.status_code))
        
        def mex():  
            login()
            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():
            daten = mex()
            if daten == "error":
                print("Fehler. Keine Daten empfangen.")
                return
            daten = daten.json()
            if debug:
                print(daten)
        
            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']
        
            client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION1, "MEX")
            client.username_pw_set(mqtt_user, mqtt_pass)
            client.connect(broker_address)
        
            if debug:
                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]])
        
            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()
        
        #### Beispiel Ausgaben. Diese können dann natürlich auch in Datenpunkte geschrieben werden. ####
        #    print()
        #    print("SensorId:                 ", daten["SensorId"])
        #    print("Aktueller Inhalt in %:    ", daten["CurrentVolumePercentage"])
        #    print("Aktueller Inhalt in Liter:", daten["CurrentVolume"])
        #    print("Max Tankinhalt in Liter:  ", daten["MaxVolume"])
        #    print("MEX Batterie in %:        ", daten["BatteryPercentage"])
        #    print("Letzte Messung in Ordnung:", daten["LastMeasurementWasSuccessfully"])
        #    print("Letzte Messung war am:    ", daten["LastMeasurementTimeStamp"])
        #    print("Reicht noch für Tage:     ", daten["RemainingDays"])        
        
        
        if __name__ == '__main__':   
            main()
        
        

        Auch hier zufinden: https://github.com/ltspicer/iobroker.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)

        G 1 Antwort Letzte Antwort
        0
        • spicerS spicer

          Habe hier ein Python Script erstellt, welches funktioniert!
          Herzlichen Dank an cpatscheider für seine Unterstützung! ( https://github.com/Secret-Lab-Productions/heizoel24-mex/discussions/2 )
          Die Daten sind dann unter mqtt/0/MEX zufinden.
          Cronjob (crontab -e):
          0 */3 * * * /home/pi/mex.py # Pfad anpassen!

          Rechte 754 ( chmod 754 mex.py )

          mex.py

          #!/usr/bin/python3
          
          ##################################
          #             V1.1               #
          # MEX-Daten in ioBroker einlesen #
          #    Benötigt den MQTT Adapter   #
          #    (C) 2024 Daniel Luginbühl   #
          ##################################
          
          ########################### WICHTIGE INFOS ###############################
          #### Dieses Script per Cronjob alle 2 bis 4 Stunden ausführen         ####
          
          #### Im ioBroker ist der MQTT Broker/Client Adapter zu installieren   ####
          #### Einstellungen:                                                   ####
          ####    IP: Server/Broker                                             ####
          ####    Authentifizierungseinstellungen: Benutzer/Passwort definieren ####
          
          #### Zu installieren (auf Host, wo dieses Script läuft):              ####
          ####    sudo apt install python3-requests                             ####
          ####    pip install paho-mqtt                                         ####
          ##########################################################################
          
          #### 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
              global logged_in
              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)
          
              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)
                      logged_in = True
              else:
                  print('Login nicht OK! Heizoel24 Login Status Code: ' + str(reply.status_code))
          
          def mex():  
              login()
              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():
              daten = mex()
              if daten == "error":
                  print("Fehler. Keine Daten empfangen.")
                  return
              daten = daten.json()
              if debug:
                  print(daten)
          
              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']
          
              client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION1, "MEX")
              client.username_pw_set(mqtt_user, mqtt_pass)
              client.connect(broker_address)
          
              if debug:
                  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]])
          
              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()
          
          #### Beispiel Ausgaben. Diese können dann natürlich auch in Datenpunkte geschrieben werden. ####
          #    print()
          #    print("SensorId:                 ", daten["SensorId"])
          #    print("Aktueller Inhalt in %:    ", daten["CurrentVolumePercentage"])
          #    print("Aktueller Inhalt in Liter:", daten["CurrentVolume"])
          #    print("Max Tankinhalt in Liter:  ", daten["MaxVolume"])
          #    print("MEX Batterie in %:        ", daten["BatteryPercentage"])
          #    print("Letzte Messung in Ordnung:", daten["LastMeasurementWasSuccessfully"])
          #    print("Letzte Messung war am:    ", daten["LastMeasurementTimeStamp"])
          #    print("Reicht noch für Tage:     ", daten["RemainingDays"])        
          
          
          if __name__ == '__main__':   
              main()
          
          

          Auch hier zufinden: https://github.com/ltspicer/iobroker.mex

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

          @spicer
          sehr sehr cool .... vielen Dank dafür!!!

          eine Frage zu einer Fehlermedung die ich erhalte:

          root@DietPi:/home/script# python3 /home/script/mex.py
          Traceback (most recent call last):
            File "/home/script/mex.py", line 141, in <module>
              main()
            File "/home/script/mex.py", line 95, in main
              client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION1, "MEX")
          AttributeError: module 'paho.mqtt.client' has no attribute 'CallbackAPIVersion'
          
          

          Was könnte da falsch laufen?

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

            @gjo editiere Zeile 95 nach:
            client = mqtt.Client("MEX")

            Ich vermute, dass Du mqtt Version < 2.0 hast.
            Werde das beim nächsten Update abfangen.

            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 editiere Zeile 95 nach:
              client = mqtt.Client("MEX")

              Ich vermute, dass Du mqtt Version < 2.0 hast.
              Werde das beim nächsten Update abfangen.

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

              @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 1 Antwort Letzte Antwort
              0
              • 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 Online
                              mcm1957M Online
                              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

                                  573

                                  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