Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Hardware
    4. Heizöl24 - MEX

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Heizöl24 - MEX

    This topic has been deleted. Only users with topic management privileges can see it.
    • spicer
      spicer @gjo last edited by 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 1 Reply Last reply Reply Quote 0
      • G
        gjo @spicer last edited by

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

        Thomas Braun 1 Reply Last reply Reply Quote 0
        • spicer
          spicer last edited by

          V1.2 auf github

          • DataReceived Punkt hinzugefügt
          • paho-mqtt Versionsabfrage
          1 Reply Last reply Reply Quote 0
          • Thomas Braun
            Thomas Braun Most Active @gjo last edited by 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ß.

            spicer 1 Reply Last reply Reply Quote 0
            • spicer
              spicer @Thomas Braun last edited by

              @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 😉

              1 Reply Last reply Reply Quote 0
              • spicer
                spicer last edited by spicer

                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()
                
                1 Reply Last reply Reply Quote 0
                • spicer
                  spicer last edited by 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 ^^

                  mcm1957 1 Reply Last reply Reply Quote 1
                  • mcm1957
                    mcm1957 @spicer last edited by

                    @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 ...)

                    1 Reply Last reply Reply Quote 0
                    • xadox
                      xadox last edited by 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 😳

                      spicer 1 Reply Last reply Reply Quote 0
                      • spicer
                        spicer @xadox last edited by spicer

                        @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

                        1 Reply Last reply Reply Quote 1
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        929
                        Online

                        31.7k
                        Users

                        79.7k
                        Topics

                        1.3m
                        Posts

                        adapter heizöltank oilfox
                        12
                        37
                        6278
                        Loading More Posts
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes
                        Reply
                        • Reply as topic
                        Log in to reply
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                        The ioBroker Community 2014-2023
                        logo