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
    481

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.6k

  • 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.
  • G gjo

    @tueftler17 hatte das mal mit wireshark versucht und dem MEX zuvor eine feste IP zugewiesen ... aus dem was aufgezeichnet wurde bin ich nicht schlau geworden.

    Wenn es da eine bessere Vorgehnesweise gibt gerne melden... ich tüftle dann weiter.

    T Offline
    T Offline
    tueftler17
    schrieb am zuletzt editiert von
    #15

    @gjo Das würde ich genau so machen. Magst Du mir den Dump schicken? Dann schaue ich mit rein.

    G 2 Antworten Letzte Antwort
    0
    • T tueftler17

      @gjo Das würde ich genau so machen. Magst Du mir den Dump schicken? Dann schaue ich mit rein.

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

      @tueftler1 habe den dump via router erschnüffelt ... da stand letztendlich mehr drin.

      MAX Transfer 2x Datenübertragung_2.pcap

      Enthalten sind die Pakete von 2 Datenübertragungen des MAX ins Internet. Übertragen um ~09:00 mit Tankstand 3657l / 98% Füllstand. Durchschnitt etc wird auf der APP noch nicht angezeigt, sprich das wird dann wohl im Netz errechnet (Vermutung).

      T 1 Antwort Letzte Antwort
      0
      • T tueftler17

        @gjo Das würde ich genau so machen. Magst Du mir den Dump schicken? Dann schaue ich mit rein.

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

        @tueftler17 der MEX Sensor ist ja ein in Wahrheit ein Tekelek Sensor:
        Dann könnte das doch von Interesse sein ... https://github.com/seamus-rochford/Tekelek-TcpListener

        1 Antwort Letzte Antwort
        0
        • G gjo

          @tueftler1 habe den dump via router erschnüffelt ... da stand letztendlich mehr drin.

          MAX Transfer 2x Datenübertragung_2.pcap

          Enthalten sind die Pakete von 2 Datenübertragungen des MAX ins Internet. Übertragen um ~09:00 mit Tankstand 3657l / 98% Füllstand. Durchschnitt etc wird auf der APP noch nicht angezeigt, sprich das wird dann wohl im Netz errechnet (Vermutung).

          T Offline
          T Offline
          tueftler17
          schrieb am zuletzt editiert von
          #18

          @gjo Danke! Leider sind verschlüsselte Daten, wohl als JSON, enthalten. Ich hätte akut keine Idee wie man diese entschlüsseln sollte. Daher habe ich keine Idee wie man an die Kommunikation zwischen MEX und der remote-IP herankommen könnte.
          Alternativ sehe ich nur noch regelmäßig die Webseite mit den Messwerten abzrufufen und dort irgendwie die Daten herauszusuchen. Das wäre aber in meinen Augen eine never ending story, da müsste man bei jeder Änderung der Webseite erneut rangehen und da würde ich bei regelmäßigen Änderungen ohne Vorwarnung schnell den Spaß dran verlieren. Das ist mir zu riskant um es in einen Adapter zu stecken und dann vernünftig zu supporten.
          Schade!

          cleexC 1 Antwort Letzte Antwort
          0
          • T tueftler17

            @gjo Danke! Leider sind verschlüsselte Daten, wohl als JSON, enthalten. Ich hätte akut keine Idee wie man diese entschlüsseln sollte. Daher habe ich keine Idee wie man an die Kommunikation zwischen MEX und der remote-IP herankommen könnte.
            Alternativ sehe ich nur noch regelmäßig die Webseite mit den Messwerten abzrufufen und dort irgendwie die Daten herauszusuchen. Das wäre aber in meinen Augen eine never ending story, da müsste man bei jeder Änderung der Webseite erneut rangehen und da würde ich bei regelmäßigen Änderungen ohne Vorwarnung schnell den Spaß dran verlieren. Das ist mir zu riskant um es in einen Adapter zu stecken und dann vernünftig zu supporten.
            Schade!

            cleexC Offline
            cleexC Offline
            cleex
            schrieb am zuletzt editiert von
            #19

            Hab das Ding mal aufgeschaubt und da ist ein Atmel SAM D20 drin. Pinout müsste folgendes sein:
            8f6fea60-eb66-4405-883e-56bc18c1afc7-grafik.png

            Denke das einfachste ist versuchen die Firmware zu ersetzen oder anzupassen, habe aber da leider zu wenig Erfahrung.

            C 1 Antwort Letzte Antwort
            0
            • cleexC cleex

              Hab das Ding mal aufgeschaubt und da ist ein Atmel SAM D20 drin. Pinout müsste folgendes sein:
              8f6fea60-eb66-4405-883e-56bc18c1afc7-grafik.png

              Denke das einfachste ist versuchen die Firmware zu ersetzen oder anzupassen, habe aber da leider zu wenig Erfahrung.

              C Offline
              C Offline
              cainam
              schrieb am zuletzt editiert von
              #20

              ist hier jemand weiter gekommen oder gibt es den adapter oder ein api inzwischen?

              spicerS 1 Antwort Letzte Antwort
              0
              • C cainam

                ist hier jemand weiter gekommen oder gibt es den adapter oder ein api inzwischen?

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

                @cainam
                Habe leider auch noch nichts gehört :(

                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
                • 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
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          346

                                          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