Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Tester
    4. Test Adapter oekofen-json v0.2.x GitHub

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Test Adapter oekofen-json v0.2.x GitHub

    This topic has been deleted. Only users with topic management privileges can see it.
    • chaozmc
      chaozmc Developer last edited by chaozmc

      Aktuelle Test Version 0.1.0-beta.0 v0.2.0-beta.0
      Veröffentlichungsdatum 26.06.2022
      Github Link https://github.com/chaozmc/ioBroker.oekofen-json

      ACHTUNG
      Mit der Version v0.2.0-beta.0 wurde die mindestens benötigte Version des Admin-Adapters auf 5.2.0 gesetzt. Der Adapter verwendet jetzt die neue Variante der Admin-Config (jsonConfig.json)

      Adapter Beschreibung
      Der Adapter verbindet einen ÖkoFEN Pelletkessel (und dessen AddOns) mit ioBroker. Da die Steuerung ein generisches Interface mit Beschreibung zur Verfügung stellt, versucht der Adapter die Datenpunkte aufgrund der Werte, die von der Steuerung zur Verfügung gestellt werden (min, max, Einheit, Faktor), entsprechend anzulegen. Aufgrund eines Hinweises auf GitHub dürfte der Hersteller irgendwann das Encoding verändert haben, daher ist es auch möglich im Adapter-Admin zwischen latin1 und utf8 zu wählen.

      Leider gibt ÖkoFEN keinen Antwort-Header mit um das Encoding dynamisch festzustellen.

      Allem Anschein nach verwenden die neuen Software-Versionen latin1 weshalb das auch der Standard ist.

      Sollte beim Erstellen der Datenpunkte z.B. die Einheit der Temperatur-Datenpunkte mit ?-Zeichen statt ° gesetzt werden, reicht ein Stoppen des Adapters, löschen aller vom Adapter angelegten Datenpunkte, ändern des Encodings im Admin und Starten des Adapters. Der Adapter legt bei jedem Starten eventuell nicht vorhandene Datenpunkte anhand der Informationen vom Pelletkessel an.

      Touch V3.x Versionen
      Da die Steuerung in früheren Versionen in der JSON-Response alles als String gesendet hat, existiert ein Branch welcher das Problem versucht zu umgehen indem er die Werte explizit nochmal testet damit in ioBroker die Objekte richtig angelegt werden können. Das sollte keine Probleme mit neueren Versionen mit sich bringen welche im JSON den richtigen Datentyp eines Wertes verwenden. Ich teste selbst die Branch-Version mit meiner v4 Steuerung ohne Probleme. Wer interesse hat hier mit zu testen bitte diese Version statt der main installieren.

      Feedback
      Fehler & Feedback gerne hier im Forum und/oder auf GitHub in Form von Issues

      Changelog

      • 0.2.0-beta.0 (2022-07-03)
        • (chaozmc) update to admin v5 config and require min version of admin (>= 5.2.0)
      • 0.1.0-beta.0 (2022-06-26)
        • (chaozmc) selectable response encoding (utf8 & latin1) & bit of debug-logging added
      • 0.0.3
        • (chaozmc) code cleanup, trigger for update & rescan
      • 0.0.2
        • (chaozmc) first working release, fixed 0-value updates
      • 0.0.1
        • (chaozmc) initial build phase, much try and error
      W P 2 Replies Last reply Reply Quote 0
      • W
        wilbur @chaozmc last edited by

        Hallo @chaozmc,

        (ich bin auf github der gttrmnn) und habe gerade die 0.1.0 installiert. Egal ob ich utf8 oder latin1, wird immer das ?-Zeichen angezeigt.

        Ich habe in FHEM eine Anbindung (selbst programmiert) schon länger laufen. Dort allerdings ohne Einheiten. Sonst wäre mir schon viel länger das da auch aufgefallen, denn ich sehe eben auch andere Sonderzeichen (ß und ö) werden dort als ?-Zeichen empfangen. Ich tippe daher klar auf ein Sendeproblem / Bug in der Touch Version 3.x

        W 1 Reply Last reply Reply Quote 0
        • W
          wilbur @wilbur last edited by wilbur

          Im Moment wird das (info) Log recht intentiv mit solchen Meldungen geflutet:

          State value to set for "oekofen-json.0.pe1.L_runtime" has to be type "string" but received type "number"
          

          Alle Typen scheinen bei dir bisher ein String zu sein. Bei werden im JSON auch keine Typen mitgeliefert. Ist vermutlich bei dir auch so, oder?

          Da es vermutlich sinnvoller ist die Typen zu ermitteln statt alle einzeln konfigurierbar zu machen, habe anhand meines JSON mal versucht bestimmte Logiken abzuleiten:
          1 wenn "factor" und/oder "unit" enthalten sind -> number
          2 wenn "format" enthalten ist -> String mit Ersetzung durch die Werte aus dem mitgeliefertem Enum
          3 Rest ist String

          Beispiel 1:

           "L_temp_set":{"val":"650", "unit":"?C", "factor":"0.1", "min":"-32768", "max":"32767"},
          

          Beispiel 2:

          "mode_auto":{"val":"1", "format":"0:Aus|1:Auto|2:Heizen|3:Absenken"},
          

          Beispiel 3:

          "L_statetext":"Betriebsart Aus",
          

          Die Daten im JSON sind aber mMn in sich nicht an allen Stellen konsistent.

          Beispiel F1
          Hier ist der Wert -1 nicht in der Liste. Mir scheint es sowas wie "nicht relevant" zu bedeuten, denn in diesem Fall kommt diese Einstellung nicht zum tragen, da die übergeordnete Einstellung "oekomode" aus ist.

          "autocomfort":{"val":"-1", "format":"0:Aus|1:Ein|2:Morgens|3:Abends"},
          

          Beispiel F2
          Hier wird nicht wie erwartet 0 und 1 geliefert, sondern false und true. Im Grundegenommen wäre dann vielleicht sogar eher eine grundsätzliche Regel zum mappen auf einen boolean, also sowas wie
          wenn format enthalten und val ist false oder true (evtl. noch zusätzliche Prüfung, dass false und true nicht in der format Liste) -> boolean

          "L_pump":{"val":"false", "format":"0:Aus|1:Ein"},
          

          So ich hoffe es war verständlich und hilft dir evtl. sogar bei der Adapter Programmierung. Ein wenig Programmierkenntnisse habe ich auch - ich weiß bloß nicht, ob du es willst wenn ich auf meine Art daran mitprogrammiere 😉

          PS: ich hab einfach mal mein JSON als Beispiel angefügt. Hilft ja bestimmt mal zu sehen wie es bei anderen so aussieht.

          	{
             "system":{
                "system_info":"system global variables",
                "L_ambient":{"val":"242", "unit":"?C", "factor":"0.1", "min":"-32768", "max":"32767"},
                "L_errors":{"val":"0", "factor":"1", "min":"-32768", "max":"32767"},
                "L_usb_stick":{"val":"false", "format":"0:Aus|1:Ein"}
             },
             "hk1":{
                "hk_info":"heating circuit data",
                "L_roomtemp_act":{"val":"0", "unit":"?C", "factor":"0.1", "min":"-32768", "max":"32767"},
                "L_roomtemp_set":{"val":"80", "unit":"?C", "factor":"0.1", "min":"-32768", "max":"32767"},
                "L_flowtemp_act":{"val":"253", "unit":"?C", "factor":"0.1", "min":"-32768", "max":"32767"},
                "L_flowtemp_set":{"val":"80", "unit":"?C", "factor":"0.1", "min":"-32768", "max":"32767"},
                "L_comfort":{"val":"0", "unit":"K", "factor":"0.1", "min":"-32768", "max":"32767"},
                "L_state":{"val":"8", "factor":"1"},
                "L_statetext":"Betriebsart Aus",
                "L_pump":{"val":"false", "format":"0:Aus|1:Ein"},
                "remote_override":{"val":"0", "unit":"K", "factor":"0.1", "min":"-32768", "max":"32767"},
                "mode_auto":{"val":"1", "format":"0:Aus|1:Auto|2:Heizen|3:Absenken"},
                "time_prg":{"val":"0", "format":"0:Zeit 1|1:Zeit 2"},
                "temp_setback":{"val":"180", "unit":"?C", "factor":"0.1", "min":"100.0", "max":"400.0"},
                "temp_heat":{"val":"220", "unit":"?C", "factor":"0.1", "min":"100.0", "max":"400.0"},
                "temp_vacation":{"val":"150", "unit":"?C", "factor":"0.1", "min":"100.0", "max":"400.0"},
                "name":{"val":"", "length":"20"},
                "oekomode":{"val":"0", "format":"0:Aus|1:Komfort|2:Minimum|3:?kologisch"},
                "autocomfort":{"val":"-1", "format":"0:Aus|1:Ein|2:Morgens|3:Abends"},
                "autocomfort_sunset":{"val":"0", "unit":"min", "factor":"1", "min":"-120.0", "max":"120.0"},
                "autocomfort_sunrise":{"val":"0", "unit":"min", "factor":"1", "min":"-120.0", "max":"120.0"}
             },
             "ww1":{
                "ww_info":"domestic hot water data",
                "L_temp_set":{"val":"650", "unit":"?C", "factor":"0.1", "min":"-32768", "max":"32767"},
                "L_ontemp_act":{"val":"694", "unit":"?C", "factor":"0.1", "min":"-32768", "max":"32767"},
                "L_offtemp_act":{"val":"694", "unit":"?C", "factor":"0.1", "min":"-32768", "max":"32767"},
                "L_pump":{"val":"false", "format":"0:Aus|1:Ein"},
                "L_state":{"val":"8208", "factor":"1"},
                "L_statetext":"Zeit innerhalb Zeitprogramm|Anforderung Aus",
                "time_prg":{"val":"0", "format":"0:Zeit 1|1:Zeit 2"},
                "sensor_on":{"val":"0", "format":"0:WW|1:TPO|2:TPM|3:SpUnten"},
                "sensor_off":{"val":"0", "format":"0:WW|1:TPO|2:TPM|3:SpUnten"},
                "mode_auto":{"val":"1", "format":"0:Aus|1:Auto|2:Ein"},
                "mode_dhw":{"val":"1", "format":"0:Aus|1:Auto|2:Ein"},
                "heat_once":{"val":"false", "format":"0:Aus|1:Ein"},
                "temp_min_set":{"val":"400", "unit":"?C", "factor":"0.1", "min":"80.0", "max":"800.0"},
                "temp_max_set":{"val":"700", "unit":"?C", "factor":"0.1", "min":"80.0", "max":"800.0"},
                "name":{"val":"", "length":"20"},
                "smartstart":{"val":"0", "unit":"min", "factor":"1", "min":"0.0", "max":"90.0"},
                "use_boiler_heat":{"val":"0", "format":"0:Aus|1:Ein"},
                "oekomode":{"val":"0", "format":"0:Aus|1:Komfort|2:Minimum|3:?kologisch"}
             },
             "sk1":{
                "sk_info":"solar circuit data",
                "L_koll_temp":{"val":"458", "unit":"?C", "factor":"0.1", "min":"-32768", "max":"32767"},
                "L_spu":{"val":"640", "unit":"?C", "factor":"0.1", "min":"-32768", "max":"32767"},
                "L_pump":{"val":"0", "unit":"%", "factor":"1", "min":"0.0", "max":"100.0"},
                "L_state":{"val":"32", "factor":"1"},
                "L_statetext":"Differenz Kollektor-Speicher zu niedrig",
                "mode":{"val":"1", "format":"0:Aus|1:Ein"},
                "cooling":{"val":"0", "format":"0:Aus|1:?kologisch|2:Ein"},
                "spu_max":{"val":"850", "unit":"?C", "factor":"0.1", "min":"200.0", "max":"900.0"},
                "name":{"val":"", "length":"20"}
             },
             "pe1":{
                "pe_info":"pellematic data",
                "L_temp_act":{"val":"693", "unit":"?C", "factor":"0.1", "min":"-32768", "max":"32767"},
                "L_temp_set":{"val":"80", "unit":"?C", "factor":"0.1", "min":"-32768", "max":"32767"},
                "L_ext_temp":{"val":"-32768", "unit":"?C", "factor":"0.1", "min":"-32768", "max":"32767"},
                "L_frt_temp_act":{"val":"707", "unit":"?C", "factor":"0.1", "min":"-32768", "max":"32767"},
                "L_frt_temp_set":{"val":"80", "unit":"?C", "factor":"0.1", "min":"-32768", "max":"32767"},
                "L_br":{"val":"false", "format":"0:Aus|1:Ein"},
                "L_ak":{"val":"false", "format":"0:Aus|1:Ein"},
                "L_not":{"val":"true", "format":"0:Aus|1:Ein"},
                "L_stb":{"val":"true", "format":"0:Aus|1:Ein"},
                "L_modulation":{"val":"0", "unit":"%", "factor":"1", "min":"-32768", "max":"32767"},
                "L_uw_speed":{"val":"0", "unit":"%", "factor":"1", "min":"-32768", "max":"32767"},
                "L_state":{"val":"99", "format":"0:Dauerlauf|1:Start|2:Zuendung|3:Softstart|4:Leistungsbrand|5:Nachlauf|6:Aus|7:Saugen|8:! Asche !|9:! Pellets !|10:Pell Switch|11:St?rung|12:Einmessen|13:1|14:1|15:1|16:1|17:1|18:1|19:1|20:1|21:1|22:1|23:1|24:1|25:1|26:1|27:1|28:1|29:1|30:1|31:1|32:1|33:1|34:1|35:1|36:1|37:1|38:1|39:1|40:1|41:1|42:1|43:1|44:1|45:1|46:1|47:1|48:1|49:1|50:1|51:1|52:1|53:1|54:1|55:1|56:1|57:1|58:1|59:1|60:1|61:1|62:1|63:1|64:1|65:1|66:1|67:1|68:1|69:1|70:1|71:1|72:1|73:1|74:1|75:1|76:1|77:1|78:1|79:1|80:1|81:1|82:1|83:1|84:1|85:1|86:1|87:1|88:1|89:1|90:1|91:1|92:1|93:1|94:1|95:1|96:1|97:Aus|98:Aus|99:Aus|100:Aus|101:Aus"},
                "L_statetext":"Aus",
                "L_type":{"val":"7", "format":"0:PE|1:PES|2:PEK|3:PESK|4:SMART V1|5:SMART V2|6:CONDENS|7:SMART XS|8:SMART V3|9:COMPACT|10:AIR"},
                "L_starts":{"val":"13288", "factor":"1"},
                "L_runtime":{"val":"8629", "unit":"h", "factor":"1"},
                "L_avg_runtime":{"val":"38", "unit":"min", "factor":"1"},
                "L_uw_release":{"val":"650", "unit":"?C", "factor":"0.1", "min":"-32768", "max":"32767"},
                "L_uw":{"val":"0", "unit":"%", "factor":"1", "min":"-32768", "max":"32767"},
                "L_storage_fill":{"val":"0", "unit":"kg", "factor":"1"},
                "L_storage_min":{"val":"400", "unit":"kg", "factor":"1", "min":"0.0", "max":"4000.0"},
                "L_storage_max":{"val":"6000", "unit":"kg", "factor":"1", "min":"150.0", "max":"30000.0"},
                "L_storage_popper":{"val":"0", "unit":"kg", "factor":"1", "min":"-32768", "max":"32767"},
                "storage_fill_today":{"val":"0", "unit":"kg", "factor":"1", "min":"-32768", "max":"32767"},
                "storage_fill_yesterday":{"val":"0", "unit":"kg", "factor":"1", "min":"-32768", "max":"32767"},
                "mode":{"val":"1", "format":"0:Aus|1:Auto|2:Ein"}
             },
             "error":{
             }
          }
          [/s]
          
          
          chaozmc 1 Reply Last reply Reply Quote 0
          • chaozmc
            chaozmc Developer @wilbur last edited by

            Hi @wilbur,

            danke für dein Input! Es sieht tatsächlich nach einem Thema in der älteren Software Version aus.

            Dass der Adapter bei dir überall Strings generiert dürfte daran liegen, dass in deinem all-JSON die Werte (auch wenn sie Zahlen sind) als Strings gesendet werden (erkennbar am " ")

            Hier zum Vergleich ein Ausschnitt aus meiner all-JSON:

            {
             "system":{
              "system_info":"system global variables",
              "L_ambient":{"val":313, "unit":"°C", "factor":0.1, "min":-32768, "max":32767}, 
              "L_errors":{"val":0, "factor":1, "min":-32768, "max":32767}, 
              "L_usb_stick":{"val":0, "format":"0:Aus|1:Ein"}, 
              "L_existing_boiler":{"val":0, "unit":"°C", "factor":0.1, "min":-32768, "max":32767}
             }
            

            Im Falle der ENUM Felder sollte es eine Zahl mit states sein, hier ein Beispiel wie er die Datenpunkte bei mir anlegt wenn States definiert sind:

            {
              "type": "state",
              "common": {
                "name": "autocomfort",
                "type": "number",
                "role": "state",
                "read": true,
                "write": true,
                "states": {
                  "0": "Aus",
                  "1": "Ein",
                  "2": "Morgens",
                  "3": "Abends"
                }
              },
              "native": {},
              "from": "system.adapter.oekofen-json.0",
              "user": "system.user.admin",
              "ts": 1656180439445,
              "_id": "oekofen-json.0.hk1.autocomfort",
              "acl": {
                "object": 1636,
                "state": 1636,
                "owner": "system.user.admin",
                "ownerGroup": "system.group.administrator"
              }
            }
            

            ioBroker verlangt soweit ich es vom Datenmodell verstanden habe in diesem Fall ein Number Field und mittels states werden dann spezielle Werte (oder alle Werte) für die Anzeige aufgehübscht. Ein Replace wäre fatal, aber auch nicht notwendig wenn die Datenpunkte korrekt angelegt werden würden.

            Vermutlich müsste man für jedes Feld einen convert mit Number() durchführen und zusätzlich checken ob NaN rauskommt, damit man sicher weiß, dass es ein String ist der erzeugt werden soll. Derzeit habe ich mich darauf verlassen mit typeof zu arbeiten (siehe main.js, Zeile 189) da ich mich auf mein jsonfile gestützt habe, das hier die Datentypen korrekt sendet (Number/ String)

            Bei mir sendet er auch keine -1 Werte hab ich grade nachgesehen und die diskrepanz mit true/false 0/1 hab ich auch nicht.

            Gibt deine Steuerung wenn du die /all ohne ? aufrufst dann wenigstens konsistent auch Zahlen als String aus, oder schickt er dann dort doch wieder "echte" Zahlen ohne die anführungszeichen drumherum?

            Hier mal zum vergleich meine vollständige /all? Datei:

            {
             "system":{
              "system_info":"system global variables",
              "L_ambient":{"val":313, "unit":"°C", "factor":0.1, "min":-32768, "max":32767}, 
              "L_errors":{"val":0, "factor":1, "min":-32768, "max":32767}, 
              "L_usb_stick":{"val":0, "format":"0:Aus|1:Ein"}, 
              "L_existing_boiler":{"val":0, "unit":"°C", "factor":0.1, "min":-32768, "max":32767}
             },
             "weather":{
              "weather_info":"current weather data",
              "L_temp":{"val":320, "unit":"°C", "factor":0.1, "min":-32768, "max":32767}, 
              "L_clouds":{"val":38, "unit":"%", "factor":1, "min":-32768, "max":32767}, 
              "L_forecast_temp":{"val":300, "unit":"°C", "factor":0.1, "min":-32768, "max":32767}, 
              "L_forecast_clouds":{"val":38, "unit":"%", "factor":1, "min":-32768, "max":32767}, 
              "L_forecast_today":{"val":1, "format":"0:Heute|1:Morgen"}, 
              "L_starttime":{"val":630, "factor":1, "min":-32768, "max":32767}, 
              "L_endtime":{"val":1810, "factor":1, "min":-32768, "max":32767}, 
              "L_source":{"val":"http://www.openweathermap.org", "length":20}, 
              "L_location":{"val":"Fallbach|AT|2779814", "length":20}, 
              "cloud_limit":{"val":35, "unit":"%", "factor":1, "min":0, "max":100}, 
              "hysteresys":{"val":-40, "unit":"K", "factor":0.1, "min":-200, "max":0}, 
              "offtemp":{"val":-300, "unit":"°C", "factor":0.1, "min":-300, "max":200}, 
              "lead":{"val":180, "unit":"min", "factor":1, "min":0, "max":600}, 
              "refresh":{"val":0}, 
              "oekomode":{"val":1, "format":"0:Aus|1:Ein"}
             },
             "forecast":{
              "forecast_info":"date|temp|cloud|speed|image|code|unit[|sunrise|sunset] code see https://openweathermap.org/weather-conditions",
              "L_w_0":{"val":"Mo, 27 Jun 15:52|32|38|21 km/h|03d|802|C|04:53|21:00", "length":20}, 
              "L_w_1":{"val":"Mo, 27 Jun 17:00|32|38|21 km/h|03d|802|C", "length":20}, 
              "L_w_2":{"val":"Mo, 27 Jun 20:00|28|38|11 km/h|03d|802|C", "length":20}, 
              "L_w_3":{"val":"Mo, 27 Jun 23:00|22|15|10 km/h|10n|500|C", "length":20}, 
              "L_w_4":{"val":"Di, 28 Jun 02:00|19|58|19 km/h|10n|500|C", "length":20}, 
              "L_w_5":{"val":"Di, 28 Jun 05:00|19|100|11 km/h|10d|500|C", "length":20}, 
              "L_w_6":{"val":"Di, 28 Jun 08:00|21|100|16 km/h|04d|804|C", "length":20}, 
              "L_w_7":{"val":"Di, 28 Jun 11:00|26|85|12 km/h|04d|804|C", "length":20}, 
              "L_w_8":{"val":"Di, 28 Jun 14:00|26|93|8 km/h|04d|804|C", "length":20}, 
              "L_w_9":{"val":"Di, 28 Jun 17:00|29|73|8 km/h|04d|803|C", "length":20}, 
              "L_w_10":{"val":"Di, 28 Jun 20:00|26|73|12 km/h|04d|803|C", "length":20}, 
              "L_w_11":{"val":"Di, 28 Jun 23:00|20|100|11 km/h|10n|500|C", "length":20}, 
              "L_w_12":{"val":"Mi, 29 Jun 02:00|19|97|7 km/h|10n|500|C", "length":20}, 
              "L_w_13":{"val":"Mi, 29 Jun 05:00|19|99|10 km/h|10d|500|C", "length":20}, 
              "L_w_14":{"val":"Mi, 29 Jun 08:00|22|99|13 km/h|10d|500|C", "length":20}, 
              "L_w_15":{"val":"Mi, 29 Jun 11:00|29|58|20 km/h|04d|803|C", "length":20}, 
              "L_w_16":{"val":"Mi, 29 Jun 14:00|34|51|23 km/h|04d|803|C", "length":20}, 
              "L_w_17":{"val":"Mi, 29 Jun 17:00|34|19|23 km/h|02d|801|C", "length":20}, 
              "L_w_18":{"val":"Mi, 29 Jun 20:00|30|12|16 km/h|02d|801|C", "length":20}, 
              "L_w_19":{"val":"Mi, 29 Jun 23:00|22|8|6 km/h|10n|500|C", "length":20}, 
              "L_w_20":{"val":"Do, 30 Jun 02:00|20|17|9 km/h|10n|500|C", "length":20}, 
              "L_w_21":{"val":"Do, 30 Jun 05:00|18|4|10 km/h|10d|500|C", "length":20}, 
              "L_w_22":{"val":"Do, 30 Jun 08:00|21|7|10 km/h|10d|500|C", "length":20}, 
              "L_w_23":{"val":"Do, 30 Jun 11:00|28|36|7 km/h|03d|802|C", "length":20}, 
              "L_w_24":{"val":"Do, 30 Jun 14:00|31|57|14 km/h|04d|803|C", "length":20}
             },
             "hk1":{
              "hk_info":"heating circuit data",
              "L_roomtemp_act":{"val":260, "unit":"°C", "factor":0.1, "min":-32768, "max":32767}, 
              "L_roomtemp_set":{"val":80, "unit":"°C", "factor":0.1, "min":-32768, "max":32767}, 
              "L_flowtemp_act":{"val":260, "unit":"°C", "factor":0.1, "min":-32768, "max":32767}, 
              "L_flowtemp_set":{"val":80, "unit":"°C", "factor":0.1, "min":-32768, "max":32767}, 
              "L_comfort":{"val":0, "unit":"K", "factor":0.1, "min":-32768, "max":32767}, 
              "L_state":{"val":1056, "factor":1}, 
              "L_statetext":"Heizbetrieb aktiv|Außentemp über Heizgrenze",
              "L_pump":{"val":0, "format":"0:Aus|1:Ein"}, 
              "remote_override":{"val":0, "unit":"K", "factor":0.1, "min":-32768, "max":32767}, 
              "mode_auto":{"val":1, "format":"0:Aus|1:Auto|2:Heizen|3:Absenken"}, 
              "time_prg":{"val":0, "format":"0:Zeit 1|1:Zeit 2"}, 
              "temp_setback":{"val":200, "unit":"°C", "factor":0.1, "min":100, "max":400}, 
              "temp_heat":{"val":200, "unit":"°C", "factor":0.1, "min":100, "max":400}, 
              "temp_vacation":{"val":150, "unit":"°C", "factor":0.1, "min":100, "max":400}, 
              "name":{"val":"", "length":20}, 
              "oekomode":{"val":0, "format":"0:Aus|1:Komfort|2:Minimum|3:Ökologisch"}, 
              "autocomfort":{"val":0, "format":"0:Aus|1:Ein|2:Morgens|3:Abends"}, 
              "autocomfort_sunset":{"val":0, "unit":"min", "factor":1, "min":-120, "max":120}, 
              "autocomfort_sunrise":{"val":0, "unit":"min", "factor":1, "min":-120, "max":120}
             },
             "ww1":{
              "ww_info":"domestic hot water data",
              "L_temp_set":{"val":500, "unit":"°C", "factor":0.1, "min":-32768, "max":32767}, 
              "L_ontemp_act":{"val":690, "unit":"°C", "factor":0.1, "min":-32768, "max":32767}, 
              "L_offtemp_act":{"val":690, "unit":"°C", "factor":0.1, "min":-32768, "max":32767}, 
              "L_pump":{"val":0, "format":"0:Aus|1:Ein"}, 
              "L_state":{"val":8208, "factor":1}, 
              "L_statetext":"Zeit innerhalb Zeitprogramm|Anforderung Aus",
              "time_prg":{"val":0, "format":"0:Zeit 1|1:Zeit 2"}, 
              "sensor_on":{"val":0, "format":"0:WW|1:TPO|2:TPM|3:SpUnten"}, 
              "sensor_off":{"val":0, "format":"0:WW|1:TPO|2:TPM|3:SpUnten"}, 
              "mode_auto":{"val":1, "format":"0:Aus|1:Auto|2:Ein"}, 
              "mode_dhw":{"val":1, "format":"0:Aus|1:Auto|2:Ein"}, 
              "heat_once":{"val":0, "format":"0:Aus|1:Ein"}, 
              "temp_min_set":{"val":80, "unit":"°C", "factor":0.1, "min":80, "max":800}, 
              "temp_max_set":{"val":600, "unit":"°C", "factor":0.1, "min":80, "max":800}, 
              "name":{"val":"", "length":20}, 
              "smartstart":{"val":90, "unit":"min", "factor":1, "min":0, "max":90}, 
              "use_boiler_heat":{"val":1, "format":"0:Aus|1:Ein"}, 
              "oekomode":{"val":3, "format":"0:Aus|1:Komfort|2:Minimum|3:Ökologisch"}
             },
             "pe1":{
              "pe_info":"pellematic data",
              "L_temp_act":{"val":229, "unit":"°C", "factor":0.1, "min":-32768, "max":32767}, 
              "L_temp_set":{"val":80, "unit":"°C", "factor":0.1, "min":-32768, "max":32767}, 
              "L_ext_temp":{"val":-32768, "unit":"°C", "factor":0.1, "min":-32768, "max":32767}, 
              "L_frt_temp_act":{"val":259, "unit":"°C", "factor":0.1, "min":-32768, "max":32767}, 
              "L_frt_temp_set":{"val":80, "unit":"°C", "factor":0.1, "min":-32768, "max":32767}, 
              "L_frt_temp_end":{"val":80, "unit":"°C", "factor":0.1, "min":-32768, "max":32767}, 
              "L_br":{"val":0, "format":"0:Aus|1:Ein"}, 
              "L_ak":{"val":0, "format":"0:Aus|1:Ein"}, 
              "L_not":{"val":1, "format":"0:Aus|1:Ein"}, 
              "L_stb":{"val":1, "format":"0:Aus|1:Ein"}, 
              "L_modulation":{"val":0, "unit":"%", "factor":1, "min":-32768, "max":32767}, 
              "L_runtimeburner":{"val":0, "unit":"zs", "factor":0.01}, 
              "L_resttimeburner":{"val":0, "unit":"zs", "factor":0.01}, 
              "L_currentairflow":{"val":0, "unit":"%", "factor":1, "min":-32768, "max":32767}, 
              "L_lowpressure":{"val":32766, "unit":"EH", "factor":0.1, "min":-32768, "max":32767}, 
              "L_lowpressure_set":{"val":800, "unit":"EH", "factor":0.1, "min":-32768, "max":32767}, 
              "L_fluegas":{"val":0, "unit":"%", "factor":1, "min":-32768, "max":32767}, 
              "L_uw_speed":{"val":10, "unit":"%", "factor":1, "min":-32768, "max":32767}, 
              "L_state":{"val":99, "format":"0:Dauerlauf|1:Start|2:Zuendung|3:Softstart|4:Leistungsbrand|5:Nachlauf|6:Aus|7:Saugen|8:! Asche !|9:! Pellets !|10:Pell Switch|11:Störung|12:Einmessen|13:1|14:1|15:1|16:1|17:1|18:1|19:1|20:1|21:1|22:1|23:1|24:1|25:1|26:1|27:1|28:1|29:1|30:1|31:1|32:1|33:1|34:1|35:1|36:1|37:1|38:1|39:1|40:1|41:1|42:1|43:1|44:1|45:1|46:1|47:1|48:1|49:1|50:1|51:1|52:1|53:1|54:1|55:1|56:1|57:1|58:1|59:1|60:1|61:1|62:1|63:1|64:1|65:1|66:1|67:1|68:1|69:1|70:1|71:1|72:1|73:1|74:1|75:1|76:1|77:1|78:1|79:1|80:1|81:1|82:1|83:1|84:1|85:1|86:1|87:1|88:1|89:1|90:1|91:1|92:1|93:1|94:1|95:1|96:1|97:Aus|98:Aus|99:Aus|100:Aus|101:Aus"}, 
              "L_statetext":"Aus",
              "L_type":{"val":1, "format":"0:PE|1:PES|2:PEK|3:PESK|4:SMART V1|5:SMART V2|6:CONDENS|7:SMART XS|8:SMART V3|9:COMPACT|10:AIR"}, 
              "L_starts":{"val":1151, "factor":1}, 
              "L_runtime":{"val":1768, "unit":"h", "factor":1}, 
              "L_avg_runtime":{"val":92, "unit":"min", "factor":1}, 
              "L_uw_release":{"val":600, "unit":"°C", "factor":0.1, "min":-32768, "max":32767}, 
              "L_uw":{"val":10, "unit":"%", "factor":1, "min":-32768, "max":32767}, 
              "L_storage_fill":{"val":0, "unit":"kg", "factor":1}, 
              "L_storage_min":{"val":400, "unit":"kg", "factor":1, "min":0, "max":4000}, 
              "L_storage_max":{"val":6000, "unit":"kg", "factor":1, "min":150, "max":30000}, 
              "L_storage_popper":{"val":0, "unit":"kg", "factor":1, "min":-32768, "max":32767}, 
              "storage_fill_today":{"val":0, "unit":"kg", "factor":1, "min":-32768, "max":32767}, 
              "storage_fill_yesterday":{"val":0, "unit":"kg", "factor":1, "min":-32768, "max":32767}, 
              "mode":{"val":1, "format":"0:Aus|1:Auto|2:Ein"}
             },
               "error":{
               }
            }
            

            Scheint so, als hätten die Entwickler der ÖkoFEN-Software erst mit der Zeit ein "echtes" JSON interface kreiert 😄

            W 1 Reply Last reply Reply Quote 0
            • W
              wilbur @chaozmc last edited by

              @chaozmc said in Test Adapter oekofen-json v0.1.x GitHub:

              Scheint so, als hätten die Entwickler der ÖkoFEN-Software erst mit der Zeit ein "echtes" JSON interface kreiert

              Genau der Gedanke kam mir schon beim "Durcharbeiten" meiner JSON Struktur.

              /all ohne ? liefert bei mir auch die gleichen Werte, auch inkl. der Anführungszeichen.

              Für den Adapter ist das eine gute Erkenntnis. Ich denke der arbeitet richtig. Auch die Einstellmöglichkeit mit der Codierung ist wahrscheinlich nicht nötig.
              Für mich heißt es wohl, dass der Adapter (aktuell) nicht nutzbar ist. Ich musste sogar von der Version 4.x auf 3.x wieder runter gehen, weil die Heizung sich mit der 4.x mehrmals am Tag aufhängte.

              chaozmc 1 Reply Last reply Reply Quote 0
              • chaozmc
                chaozmc Developer @wilbur last edited by

                @wilbur sagte in Test Adapter oekofen-json v0.1.x GitHub:

                Für mich heißt es wohl, dass der Adapter (aktuell) nicht nutzbar ist. Ich musste sogar von der Version 4.x auf 3.x wieder runter gehen, weil die Heizung sich mit der 4.x mehrmals am Tag aufhängte.

                Vermutlich wirst du nicht der Einzige sein der noch eine ältere Version am Laufen hat...? Ich kann ja' probieren ob ich das in den bestehenden Code dazu packen kann in Form von extra Prüfungen und dann, beim Anlegen der Objekte bzw. beim Befüllen der Daten, jedes Mal einen cast auf number dazu packen. Dann wären zumindest die Objekte in ioBroker korrekt. Beim zurück-schreiben an den Ofen sollte der Datentyp zumindest egal sein, da es am Ende ein URL Aufruf wird und die URL in jedem Fall ein String ist. Lediglich bei true/false 0/1 frag ich mich ob die Steuerung dann wie im Format angegeben "0" oder "1" erwartet, oder doch wie im val ausgegeben "true" und "false". Auch wenn es hauptsächlich Read-Only Werte sind, zumindest der heat_once Datenpunkt bei ww1 wäre dann gesondert zu behandeln da ioBroker dann 0 oder 1 in den Objekten hätte, und das in "true" / "false" beim Aufruf übersetzt werden muss. Keinen Plan ob's dann noch irgendwelche Stolperfallen gibt die mir momentan nicht einfallen bzw. ob das zu neuen/anderen Problemen führt 🤔

                Weißt du, ob man in ioBroker gezielt einen Branch eines repo's auch installieren kann? Weil dann würde ich das in einem neuen Branch ausprobieren und bei Erfolg in den master übernehmen

                W 1 Reply Last reply Reply Quote 0
                • W
                  wilbur @chaozmc last edited by

                  Eine Möglichkeit einen Schalter zu aktivieren, so unter dem Motto "ich hab die alte buggy V3-Schnittstelle" würde ich natürlich sehr begrüßen.

                  Ich habe das zurückschreiben mit heat_one über Postman getestet. Und siehe da: schreiben mit 1 und mit true wird angenommen und jeweils beides ignoriert.

                  Schreiben anderer Werte z.B. ww1.name (Text) und hk1.temp_vacation (Zahl) geht, weshalb ich hier auf einen Bug tippe.

                  Ich konnte den Adapter über die Branch-URL (https://github.com/chaozmc/ioBroker.oekofen-json/tree/touch-v3-compatibility) installieren. Sollte eigentlich geklappt haben, dass es der "richtige" ist. Kann ich das irgendwo dran feststellen?

                  chaozmc 1 Reply Last reply Reply Quote 0
                  • chaozmc
                    chaozmc Developer @wilbur last edited by chaozmc

                    @wilbur ok gut zu wissen, dass das geht - also Branches installieren. Ich hab in dem Branch jedoch noch keine änderungen. Der einzige Branch der bis jetzt eine änderung und einen Commit hat ist der von dem Issue das ich dafür angelegt hab um das Thema zu tracken. Ich bin heut aber nicht dazu gekommen einen Testwebserver einzurichten um dein JSON damit zu delivern und zu schauen wie sich die Änderung des Codes verhält. Wenn ich recht habe mit meiner Idee, ist kein "Schalter" nötig sondern der gleiche Code ist für beide Varianten anwendbar. Mein Plan war den Workaround dann in dem v3-Branch den du Verlinkt hast zu mergen und den dann gegen V3.10d und weitere Versionen zu testen (sofern sich noch andere Testern hier melden) und wenn das funktioniert das in den Masterbranch einfach zu übernehmen.

                    Auf die Art kann ich die das Parallel pflegen (da wir wissen, dass der Code im master bei 2 Leuten mit neueren Versionen stabil funktionieren dürfte).

                    Ich hoffe ich komm morgen zwischendurch mal dazu den Code aus dem Issue-Branch gegen einen simplen webserver mit deinem JSON File zu testen. Du kannst natürlich den Code auch testen, jedoch sag ich gleich dazu, ich hab ihn noch nicht laufen lassen und weiß nicht ob er startet bzw Fehler produziert beim einlesen oder setzen der Werte.

                    @wilbur sagte in Test Adapter oekofen-json v0.1.x GitHub:

                    Ich habe das zurückschreiben mit heat_one über Postman getestet. Und siehe da: schreiben mit 1 und mit true wird angenommen und jeweils beides ignoriert.

                    Das ist natürlich ganz doof, sie bieten den Datenpunkt an und nehmen dann kein Set mehr an. Auch eine Möglichkeit... 🤦‍♂️ 😆

                    W 1 Reply Last reply Reply Quote 0
                    • W
                      wilbur @chaozmc last edited by

                      @chaozmc Hab gerade die 0.2.0 vom Branch installiert und mich gefreut, dass das mit dem Anzeigen der Einheit bei "°C" funktioniert. Top!

                      1 Reply Last reply Reply Quote 0
                      • G
                        grueni2 last edited by

                        Gestern habe ich den Adapter installiert.
                        Auf github habe ich ein Issue erzeugt.

                        Nach einigen Änderungen läuft der Adapter ohne Probleme.
                        Ich habe diese Version: V3.00a 01052019.

                        In main.js steht als query-Parameter /all??.
                        Das bedeutet bei mir Ignorieren. Als reponse kommt dann die Ausgabe wie ohne query-Parameter.
                        Änderung: "/all?"
                        Damit wird dann der richtige object tree erstellt.

                        Mit der Version gibt es dann noch das Umlautproblem.
                        in parseDataOnStartupAndCreateObjects
                        const cleanInput = input.replace(/#./g, "|")
                        .replace(/St?rung/g,'Störung')
                        .replace(/?kologisch/g,'Ökologisch');
                        in parseDataAndSetValues
                        tNewVal = String(jsonData[key][innerKey])
                        .replace(/Sch?nwetterprognose/g,'Schönwetterprognose')
                        .replace(/?kologisch/g,'Ökologisch')
                        .replace(/au?erhalb/g,'außerhalb')
                        .replace(/St?rung/g,'Störung');
                        liefert dann korrekte deutsche Texte.
                        Die Korrektur kann man natürlich auch in eine Funktion legen und dort dann versuchen, die Sprache zu erkennen. Geht aber auch ohne Erkennung, da die diversen replace sich ja unterscheiden zwischen den Sprachen.

                        1 Reply Last reply Reply Quote 0
                        • M
                          maki2003 last edited by

                          Hallo,

                          ich bin gerade dabei mich in ioBroker (v6.3.5) einzuarbeiten.
                          Daher möchte ich auch meine Ökofen Pellematic (Touch V3.00b) mit einbinden.
                          Der Abruf über Modbus funktioniert, bzw. setzte ich aktuell Edomi ein und rufe dort die Daten der Pellematic ab.

                          Den Adapter in der Version 0.2.0 habe ich installiert und alle notwendigen Daten eigetragen.
                          Der Adapter startet auch und alle Verbindungen gehen auf grün. Nach einer gewissen Zeit (ca. 30s) werden mir jedoch folgende Fehlermeldungen ausgegeben (Auszug da sich die Fehlermeldungen wiederholen) und der Adapter startet neu.
                          Wie gesagt arbeite ich mich gerade in ioBroker ein und hab aktuell keine Ahnung wo ich hier angreifen soll.
                          Danke.

                          2023-01-04 12_58_56-logs - iobroker.png

                          1 Reply Last reply Reply Quote 0
                          • P
                            PetersenLA @chaozmc last edited by

                            @chaozmc
                            Hallo habe den Adapter ebenfalls getestet.
                            Der Adapter schließt sich immer wieder.
                            Alle Details unter diesem Vorgang ganz unten beschrieben:
                            https://forum.iobroker.net/topic/63120/oekofen/12?_=1684751834380

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

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            942
                            Online

                            31.7k
                            Users

                            79.7k
                            Topics

                            1.3m
                            Posts

                            oekofen pellematic ökofen
                            5
                            12
                            1312
                            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