New integration for REMKO Heatpump

Can someone confirm this can be used with remko wifi sticks and https://smartweb.remko.media ?

I am still not getting any MQTT messages :frowning:

@metabubble your post is confusing me. there is no connection between smartweb.remko.media and your mqtt broker. smartweb is a web service. you can access your remko from anywhere with a browser. sure there will be a way to get data over this portal but this way isn’t instructed by this thread. try to gather informations locally. there will be no big difference between a wlan or lan connection on your remko.

Hi Haemmerl. Hast du weitere Sensoren in den HA eingebunden bekommen? Ich besitze ebenfalls die Version 4.28 und wĂŒrde gerne weitere Sensoren integrieren. Könntest du mir da weiterhelfen? Auch in Bezug was ich genau zu tun habe! VG und vielen Dank vorweg.

No need to be so condescending.

  • I have never said there is a connection between smartweb.remko.media and my mqtt broker
  • Show me the post that specifically says this is not where you get your mqtt username and password, if you go there, you will in fact see the same javascript file
  • Unfortunately I can’t gather information locally. The integrator fucked up and didn’t lay the cables for the Smart Control unit. I am left with two options now. Infrared Control Emulation or Remko Wifi Sticks.

Now here is the thing. If I go with the wifi sticks, I won’t be able to do anything locally. They don’t expose a single port and only communicate with remko.smartweb.media. If you follow the guide of this integration on remko.smartweb.media, and you put a “similar enough” Client ID in MQTT broker, you are in fact able to connect to mqtt://smartweb.remko.media:1883, but you will not get any topics. So I hope you understand my confusion why I didn’t get any information through it even though I managed to connect.

Now that being said, maybe someone is reading here that was in the same situation and figured out what to do to make the smartweb.remo.media mqtt server talk, because I bet my butt it is using the exact same backend, just with more “security”

You wrote “there will be no big difference between a wlan or lan connection on your remko”. That makes me think you don’t even know what product I am talking about. Just to be on the safe side: https://www.remko.de/artikel/smarte-steuerung-fuer-remko-klimageraete-einfach-nachruesten/

I don’t wanna hurt your feelings
sorry <3
Your wifi stick must be connected to your wlan router. Did you find out the ip adress of the stick? If yes, what will happen when you try to open a browser and enter this ip adress?

Nothing happens. I also scanned all ports with nmap. No open ports on it. Wireshark shows it connecting to remko and that’s it.

I can only control it through smartweb. No local control. :frowning:

It seems to be an absolute trash product.

Hallo buma153,
ich habe folgendes in der configuration.yaml:

mqtt:
  sensor:
    - state_topic: "V04P28/SMTID/HOST2CLIENT"
      name: RemkoTemperaturPufferspeicher
      value_template: '{{ value_json["values"]["5039"] | int(base=16) / 10 }}'
      unit_of_measurement: °C
      
    - state_topic: "V04P28/SMTID/HOST2CLIENT"
      name: RemkoTemperaturHeizkreis
      value_template: '{{ value_json["values"]["5034"] | int(base=16) / 10 }}'
      unit_of_measurement: °C

    - state_topic: "V04P28/SMTID/HOST2CLIENT"
      name: RemkoArbeitsmodus
      value_template: >
         {% set mode = value_json["values"]["5001"] | int(base=16) %}
         {% if mode == 1 %} Störung
         {% elif mode == 2 %} Abtauen
         {% elif mode == 3 %} Abtaupuffer
         {% elif mode == 4 %} WW Puffer
         {% elif mode == 5 %} Speicherenergie
         {% elif mode == 6 %} Heizen
         {% elif mode == 7 %} KĂŒhlen
         {% elif mode == 8 %} Pool
         {% elif mode == 9 %} UmwÀlzung
         {% elif mode == 10 %} Standby
         {% elif mode == 11 %} Estrichtrockung
         {% elif mode == 12 %} Frostschutz
         {% elif mode == 13 %} PrĂŒfbetrieb
         {% elif mode == 14 %} Sperrsignal
         {% elif mode == 15 %} Hygienefunktion
         {% elif mode == 16 %} Silent Modus
         {% else %} Unbekannter Modus
         {% endif %}
      
    - state_topic: "V04P28/SMTID/HOST2CLIENT"
      name: RemkoPufferspeicherWWSoll
      value_template: '{{ value_json["values"]["1082"] | int(base=16) / 10 }}'
      unit_of_measurement: °C
      
    - state_topic: "V04P28/SMTID/HOST2CLIENT"
      name: RemkoVorlaufInPuffer
      value_template: '{{ value_json["values"]["5132"] | int(base=16) / 10 }}'
      unit_of_measurement: °C
      
    - state_topic: "V04P28/SMTID/HOST2CLIENT"
      name: RemkoRuecklaufAusPuffer
      value_template: '{{ value_json["values"]["5581"] | int(base=16) / 10 }}'
      unit_of_measurement: °C
      
    - state_topic: "V04P28/SMTID/HOST2CLIENT"
      name: RemkoGemischteAussentemperatur
      value_template: '{{ value_json["values"]["5055"] | int(base=16) }}'
      unit_of_measurement: °C
   
    - state_topic: "V04P28/SMTID/HOST2CLIENT"
      name: RemkoZusatzwaermeerzeugerGrundaktivierung
      value_template: '{{ value_json["values"]["1020"] | int(base=16) }}'
      
#    - state_topic: "V04P28/SMTID/HOST2CLIENT"
#      name: ZusatzwÀrmeerzeuger Stufe
#      value_template: '{{ value_json["values"]["5008"] | int(base=16) }}'
      
    - state_topic: "V04P28/SMTID/HOST2CLIENT"
      name: RemkoZustandWaermepumpe
      value_template: '{{ value_json["values"]["1003"] | int(base=16) }}'

    - state_topic: "V04P28/SMTID/HOST2CLIENT"
      name: RemkoZustandTrinkwassererwaermung
      value_template: >
         {% set mode = value_json["values"]["1079"] | int(base=16) %}
         {% if mode == 0 %} Automatik Komfort
         {% elif mode == 1 %} Automatik Eco
         {% elif mode == 2 %} nur Solar / PV
         {% elif mode == 3 %} Aus
         {% else %} Unbekannter Modus
         {% endif %}

    - state_topic: "V04P28/SMTID/HOST2CLIENT"
      name: RemkoZustandHeizmodus
      value_template: >
         {% set mode = value_json["values"]["1951"] | int(base=16) %}
         {% if mode == 1 %} Automatik
         {% elif mode == 2 %} Heizen
         {% elif mode == 3 %} Standby
         {% else %} Unbekannter Modus
         {% endif %}
      
    - state_topic: "V04P28/SMTID/HOST2CLIENT"
      name:  RemkoAbwesenheitsmodus
      value_template: '{{ value_json["values"]["1893"] | int(base=16) }}'
      
    - state_topic: "V04P28/SMTID/HOST2CLIENT"
      name:  RemkoPartymodus
      value_template: '{{ value_json["values"]["1894"] | int(base=16) }}'
      
    - state_topic: "V04P28/SMTID/HOST2CLIENT"
      name:  RemkoVolumenstrom
      value_template: '{{ value_json["values"]["5582"] | int(base=16) / 10 }}'
      unit_of_measurement: l/m
      
    - state_topic: "V04P28/SMTID/HOST2CLIENT"
      name: RemkoLaufzeitMinuten
      value_template: '{{ value_json["values"]["5823"] | int(base=16) / 10 }}'
      unit_of_measurement: Min
      
    - state_topic: "V04P28/SMTID/HOST2CLIENT"
      name: RemkoLaufzeitStunden
      value_template: '{{ value_json["values"]["5824"] | int(base=16)  }}'
      unit_of_measurement: Hrs
      
    - state_topic: "V04P28/SMTID/HOST2CLIENT"
      name: RemkoLeistungElektrisch
      value_template: '{{ (value_json["values"]["5320"] | int(base=16) / 10) }}'
      unit_of_measurement: kW

    - state_topic: "V04P28/SMTID/HOST2CLIENT"
      name: RemkoFluessigkeitstemperatur
      value_template: '{{ value_json["values"]["5139"] | int(base=16) }}'
      unit_of_measurement: °C

    - state_topic: "V04P28/SMTID/HOST2CLIENT"
      name: RemkoLufttemperaturAussenmodul
      value_template: '{{ value_json["values"]["5145"] | int(base=16) }}'
      unit_of_measurement: °C
      
    - state_topic: "V04P28/SMTID/HOST2CLIENT"
      name: RemkoHeissgastemperatur
      value_template: '{{ value_json["values"]["5146"] | int(base=16) / 10 }}'
      unit_of_measurement: °C

    - state_topic: "V04P28/SMTID/HOST2CLIENT"
      name: RemkoRegistertemperatur
      value_template: '{{ value_json["values"]["5200"] | int(base=16) }}'
      unit_of_measurement: °C

    - state_topic: "V04P28/SMTID/HOST2CLIENT"
      name: RemkoVerdichterfrequenz
      value_template: '{{ value_json["values"]["5205"] | int(base=16) }}'
      unit_of_measurement: Hz

    - state_topic: "V04P28/SMTID/HOST2CLIENT"
      name: RemkoSauggastemperatur
      value_template: '{{ value_json["values"]["5612"] | int(base=16) }}'
      unit_of_measurement: °C

    - state_topic: "V04P28/SMTID/HOST2CLIENT"
      name: RemkoExpansionsventil
      value_template: '{{ value_json["values"]["5615"] | int(base=16) }}'
      unit_of_measurement: "%"

    - state_topic: "V04P28/SMTID/HOST2CLIENT"
      name: RemkoLeistungThermisch
      value_template: '{{ value_json["values"]["5321"] | int(base=16) / 10 }}'
      unit_of_measurement: kW

    - state_topic: "V04P28/SMTID/HOST2CLIENT"
      name: RemkoWaermerKaelterOhneVorzeichen
      value_template: '{{ value_json["values"]["1946"] | int(base=16) }}'
      unit_of_measurement: °C

FĂŒr die Temperaturwerte, die negativ werden können hab ich ĂŒber Helfer noch je ein Sensor-Template angelegt.
Zum Beispiel so:

{% if states('sensor.remkolufttemperaturaussenmodul') | int >= 32768 %}
            {{ ( states('sensor.remkolufttemperaturaussenmodul') | float - 65536 ) * 0.1 }}
          {% else %}
            {{ ( states('sensor.remkolufttemperaturaussenmodul') | float ) * 0.1 }}
          {% endif %}

Wenn Du Fragen hast, meld Dich gern.

1 Like

Hi @haemmerl , hi @buma153

wenn man die negativen Werte direkt im “value_template” richtig verarbeiten möchte, wĂ€re es beispielhaft ĂŒber den folgenden Code möglich.

    - state_topic: "V04P26/SMTID/HOST2CLIENT"
      name: Außentemperatur
      unique_id: Aussentemperatur
      value_template: >
        {% set hex_value = value_json["values"]["5055"] | int(base=16) %}
        {% if hex_value > 32767 %}
          {% set signed_value = hex_value - 65536 %}
        {% else %}
          {% set signed_value = hex_value %}
        {% endif %}
        {{ signed_value / 10 }}
      state_class: measurement
      device_class: temperature
      icon: mdi:home-thermometer-outline
      unit_of_measurement: °C

Das wĂ€re die “all in one” Lösung.

VG Oliver

1 Like

Hi @metabubble,

sorry to hear that there is no local way to grab data. If you are still interested in solving the problem, try grab the data from the smartweb portal. It should be possible too but this way won’t be easy. My thoughts
try to code it with AppDeamon. It is a Python App bases Add-on. You can emulate a headless browser with a selenium python package und than you need a chromium-chromdriver and a chromium system package at least.

import appdaemon.plugins.hass.hassapi as hass

import logging
import time

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains

class remko_wp(hass.Hass):

  def initialize(self):
     self.run_every(self.run_every_minute, "now+10", 60)

  def run_every_minute(self, kwargs):
     chrome_options = Options()
     chrome_options.add_argument('--headless')
     chrome_options.add_argument('--no-sandbox')
     chrome_options.add_argument('--disable-gpu')
     chrome_options.add_argument('--disable-dev-shm-usage')
     driver = webdriver.Chrome('chromedriver', options=chrome_options)
     driver.get("https://smartweb.remko.media/")
     ...

After you passed the login you can grab the data too. You need to analyse every step that you do manually in the browser. Remember that everything you can access manually with a browser you can grab with a script too. It should be possible.
I dunno if a python sensor would work which you can add direct in the configuration.yaml. This way could be a little bit easier but Im not sure if this will work.

command_line:
  - sensor:
        name: remko_json
        command: 'python3 /config/python_scripts/remko_wp/remko_wp.py'
        unique_id: remko_wp
        json_attributes:
          - abc
          - def
        scan_interval: 30
#!/usr/bin/python3
import requests

with requests.Session() as s:
    response = s.get("https://smartweb.remko.media/")
...

die Idee ist gut. Ich habe es versucht mit dem Außensensor, bekomme dann aber keine Werte angezeigt.

 - state_topic: "V04P28/SMTID/HOST2CLIENT"
  name: RemkoLufttemperaturAussenmodul
  value_template: >
    {% set hex_value = value_json["values"]["5154"] | int(base=16) %}
    {% if hex_value > 32767 %}
      {% set signed_value = hex_value - 65536 %}
    {% else %}
        {% set signed_value = hex_value %}
    {% endif %}
    {{ signed_value / 10 }}
  state_class: measurement
  device_class: temperature
  icon: mdi:home-thermometer-outline
  unit_of_measurement: °C
  unique_id: RemkoLufttemperaturAussenmodul

Die Zeile {{ signed_value / 10 }} soll dann eigentlich die Ausgabe sein oder fehlt da noch was?

Ja die Zeile {{ signed_value / 10 }} ist die Ausgabe. Dein Code sieht sonst ok aus. Funktioniert denn die Ausgabe des Registers 5154 ohne den zusÀtzlichen Code?

      value_template: '{{ value_json["values"]["5154"] | int(base=16) / 10 }}'

ja die funktioniert 


  - state_topic: "V04P28/SMTID/HOST2CLIENT"
    name: RemkoLufttemperaturAussenmodul
    value_template: '{{ value_json["values"]["5145"] | int(base=16) / 10 }}'
    unit_of_measurement: °C
    unique_id: RemkoLufttemperaturAussenmodul

  - state_topic: "V04P28/SMTID/HOST2CLIENT"
    name: RemkoLufttemperaturAussenmodul_2
    value_template: >
      {% set hex_value = value_json["values"]["5154"] | int(base=16) %}
      {% if hex_value > 32767 %}
        {% set signed_value = hex_value - 65536 %}
      {% else %}
        {% set signed_value = hex_value %}
      {% endif %}
      {{ signed_value / 10 }}
    state_class: measurement
    device_class: temperature
    icon: mdi:home-thermometer-outline
    unit_of_measurement: °C
    unique_id: RemkoLufttemperaturAussenmodul_2

Außenmodul zeigt einen Wert an, Außenmodul_2 nicht

Den Fehler sehe ich nicht. Was ist wenn du auf https://dein-home-assistant/developer-tools/template gehst und dann den Code prĂŒfst?
Hier ein Beispiel

{% set hex_value = 0xf0 | int(base=16) %}
{% if hex_value > 32767 %}
  {% set signed_value = hex_value - 65536 %}
{% else %}
  {% set signed_value = hex_value %}
{% endif %}
{{ signed_value / 10 }}

Und nun versuchen wir einen negativen Wert

{% set hex_value = 0xFFF6 | int(base=16) %}
{% if hex_value > 32767 %}
  {% set signed_value = hex_value - 65536 %}
{% else %}
  {% set signed_value = hex_value %}
{% endif %}
{{ signed_value / 10 }}

Im ersten Script mĂŒsste der Wert 24 angezeigt werden und im zweiten Script mĂŒsste der Wert -1 angezeigt werden.

Has anyone here tried to transmit the current feed-in / grid consumption to the Remko via mqtt? In other words, to emulate the meter constant S29 / meter constant S26?

//

Hat sich hier schon jemand daran versucht die momentane Einspeisung / Netzbezug per mqtt an die Remko zu ĂŒbermitteln? Also quasi die ZĂ€hlerkonstante S29 / ZĂ€hlerkonstante S26 zu emulieren?

Das wĂ€re schön, wenn es ĂŒber MQTT gehen wĂŒrde. Soweit ich weiß, kannst du die Informationen nur ĂŒber Impulse (500imp je kWh) ĂŒbertragen. Es gibt dazu auch Workaround AnsĂ€tze z.B. mit Shelly Ansteuerung Heizstab einer Remko WĂ€rmepumpe mit ZĂ€hlerimplusen eines SMA Tripower - #21 von mrgonso - Allgemeine Elektrik - Akkudoktor Forum