VILP puu-öljy tilalle ( edullinen) - tuli Rotenso

  • Viestiketjun aloittaja Viestiketjun aloittaja Jalapa
  • Aloituspäivämäärä Aloituspäivämäärä
minulla liki kaikki menee mqtt serverille ja tällä poimin ne, on niin raaka vielä ja finglish kaiken lisäksi

.yaml
. . .
# Rotenso
# -------------------------

- name: "Rotenso ulkolämpötila"
unique_id: rotenso_ulkolampotila
state_topic: "rotenso/ulkolampotila"
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement

- name: "Rotenso sisäilman lämpötila"
unique_id: rotenso_sisailman_lampotila
state_topic: "rotenso/sisailman_lampotila"
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement

- name: "Rotenso tuloveden lämpötila"
unique_id: rotenso_tuloveden_lampotila
state_topic: "rotenso/tuloveden_lampotila"
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement

- name: "Rotenso lähtevän veden lämpötila"
unique_id: rotenso_lahtoveden_lampotila
state_topic: "rotenso/lahtoveden_lampotila"
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement

- name: "Rotenso kylmäaine T2B"
unique_id: rotenso_kylmaaine_t2b
state_topic: "rotenso/kylmaaine_t2b"
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement

- name: "Rotenso purkauslämpötila"
unique_id: rotenso_purkauslampotila
state_topic: "rotenso/purkauslampotila"
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement

- name: "Rotenso ilmanvaihtimen lämpötila T3"
unique_id: rotenso_ilmanvaihtimen_lampotila_t3
state_topic: "rotenso/ilmanvaihtimen_lampotila_t3"
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement

- name: "Rotenso kompressorin taajuus"
unique_id: rotenso_kompressorin_taajuus
state_topic: "rotenso/kompressorin_taajuus"
unit_of_measurement: "Hz"
state_class: measurement

- name: "Rotenso pumpun nopeus"
unique_id: rotenso_pumpun_nopeus
state_topic: "rotenso/pumpun_nopeus"
state_class: measurement

- name: "Rotenso veden virtaus"
unique_id: rotenso_water_flow
state_topic: "rotenso/water_flow"
unit_of_measurement: "L/h"
state_class: measurement

- name: "Rotenso puhaltimen nopeus"
unique_id: rotenso_fan_speed
state_topic: "rotenso/fan_speed"
state_class: measurement

- name: "Rotenso lämpöteho"
unique_id: rotenso_lampoteho
state_topic: "rotenso/lampoteho"
unit_of_measurement: "kW"
device_class: power
state_class: measurement

- name: "Rotenso tila"
unique_id: rotenso_tila
state_topic: "rotenso/power"
icon: mdi:heat-pump

- name: "Rotenso käyntitila"
unique_id: rotenso_kayntitila
state_topic: "rotenso/running_mode"
icon: mdi:heat-pump

switch:
- name: "Rotenso"
unique_id: rotenso_power
command_topic: "rotenso/set_power"
state_topic: "rotenso/power"
payload_on: "ON"
payload_off: "OFF"
state_on: "ON"
state_off: "OFF"
retain: false
icon: mdi:heat-pump

template:
- sensor:
- name: "Rotenso lämpöteho"
unique_id: rotenso_lampoteho
unit_of_measurement: "kW"
device_class: power
state_class: measurement
state: >
{% set flow = states('sensor.rotenso_veden_virtaus') | float(0) %}
{% set out = states('sensor.rotenso_lahtevan_veden_lampotila') | float(0) %}
{% set inp = states('sensor.rotenso_tuloveden_lampotila') | float(0) %}
{{ (1.163 * flow * (out - inp) / 100) | round(2) }}

- name: "Rotenso tila"
unique_id: rotenso_tila
icon: mdi:heat-pump
state: >
{% set power = states('sensor.rotenso_power') %}
{% set mode = states('sensor.rotenso_running_mode') | int(-1) %}

{% if power == 'OFF' %}
Pois (OFF)
{% elif mode == 0 %}
OFF
{% elif mode == 1 %}
COOL
{% elif mode == 2 %}
DHW
{% elif mode == 4 %}
HEAT
{% elif mode == 7 %}
Defrost
{% elif mode == 20 %}
Home Anti-Freeze
{% else %}
ON / tila {{ mode }}
{% endif %}

pythonilla tarjoilen
--- Rotenso ---
MQTT rotenso/ulkolampotila: 13.0
MQTT rotenso/sisailman_lampotila: 28.6
MQTT rotenso/tuloveden_lampotila: 53.3
MQTT rotenso/lahtoveden_lampotila: 55.6
MQTT rotenso/kylmaaine_t2b: 30.5
MQTT rotenso/purkauslampotila: 30.0
MQTT rotenso/ilmanvaihtimen_lampotila_t3: 14.5
MQTT rotenso/kompressorin_taajuus: 0.0
MQTT rotenso/pumpun_nopeus: 0
MQTT rotenso/water_flow: 0
MQTT rotenso/fan_speed: 0
MQTT rotenso/power: OFF
Setting mode 0x002C: 0
MQTT rotenso/running_mode: 0
Running mode 0x002D: 0
 
Viimeksi muokannut moderaattori:
from pymodbus.client import ModbusSerialClient as ModbusClient
import subprocess
import time
import threading

# ==========================================
# MQTT-asetukset
# ==========================================

MQTT_BROKER = '192.168.0.160'
MQTT_TOPIC_BASE = 'rotenso'

MQTT_USER = 'root'
MQTT_PASSWORD = 'salasana'


# ==========================================
# Modbus
# ==========================================

client = ModbusClient(
port='/dev/ttyUSB1',
baudrate=9600,
bytesize=8,
parity='N',
stopbits=1,
timeout=1
)

SLAVE = 11
INTERVAL = 30

# Estetään yhtäaikaiset Modbus-käskyt
modbus_lock = threading.Lock()


# ==========================================
# MQTT julkaisu
# ==========================================

def publish_mqtt(topic_suffix, value):

topic = f"{MQTT_TOPIC_BASE}/{topic_suffix}"

try:
subprocess.run([
'mosquitto_pub',
'-h', MQTT_BROKER,
'-u', MQTT_USER,
'-P', MQTT_PASSWORD,
'-t', topic,
'-m', str(value),
'-r'
], check=True)

print(f"MQTT {topic}: {value}")

except subprocess.CalledProcessError as e:
print(f"MQTT ERROR {topic}: {e}")


# ==========================================
# Modbus rekisterin luku
# ==========================================

def read_register(register_address):

try:

with modbus_lock:

result = client.read_holding_registers(
register_address,
1,
slave=SLAVE
)

if result.isError():
return None

return result.registers[0]

except Exception as e:

print(f"Modbus READ ERROR 0x{register_address:04X}: {e}")
return None

# ==========================================
# Mittaus + MQTT
# ==========================================

def read_and_publish(register_address, topic_suffix, value_type):

try:

value = read_register(register_address)

if value is None:
print(f"Modbus ERROR: {topic_suffix}")
return

# Lämpötila /10
if value_type == 'temperature':

if value >= 32768:
value -= 65536

value = value / 10.0

# Kompressorin taajuus /10
elif value_type == 'frequency':

value = value / 10.0

# Water flow
elif value_type == 'flow':

value = value

publish_mqtt(topic_suffix, value)

except Exception as e:

print(f"ERROR {topic_suffix}: {e}")


# ==========================================
# Luetaan kaikki mittaukset
# ==========================================

def read_all():

print("\n--- Rotenso ---")

read_and_publish(
0x00CE,
"varaaja",
'temperature'
)

read_and_publish(
0x0001,
"ulkolampotila",
'temperature'
)

read_and_publish(
0x0002,
"sisailman_lampotila",
'temperature'
)

read_and_publish(
0x0003,
"tuloveden_lampotila",
'temperature'
)

read_and_publish(
0x0004,
"lahtoveden_lampotila",
'temperature'
)

read_and_publish(
0x0005,
"kylmaaine_t2b",
'temperature'
)

read_and_publish(
0x000A,
"purkauslampotila",
'temperature'
)

read_and_publish(
0x000B,
"ilmanvaihtimen_lampotila_t3",
'temperature'
)

read_and_publish(
0x0017,
"kompressorin_taajuus",
'frequency'
)

read_and_publish(
0x0055,
"pumpun_nopeus",
'normal'
)

read_and_publish(
0x102A,
"water_flow",
'flow'
)

read_and_publish(
0x1005,
"fan_speed",
'normal'
)

# ======================================
# Setting mode 0x002C
# ======================================

setting_mode = read_register(0x002C)

if setting_mode is not None:

if setting_mode == 0:
publish_mqtt("power", "OFF")

elif setting_mode == 4:
publish_mqtt("power", "ON")

else:
publish_mqtt("power", "ON")

print(f"Setting mode 0x002C: {setting_mode}")

# ======================================
# Running mode 0x002D
# ======================================

running_mode = read_register(0x002D)

if running_mode is not None:

publish_mqtt(
"running_mode",
running_mode
)

print(f"Running mode 0x002D: {running_mode}")

print("--- Seuraava mittaus 30 s kuluttua ---")


# ==========================================
# Rotenson käynnistys / sammutus
# ==========================================

def set_power(command):

command = command.strip().upper()

if command == "ON":

value = 4
print(">>> Rotenso KÄYNNISTYS")

elif command == "OFF":

value = 0
print(">>> Rotenso SAMMUTUS")

else:

print(f"Virheellinen komento: {command}")
return

try:

with modbus_lock:

result = client.write_register(
0x002C,
value,
slave=SLAVE
)

if result.isError():

print(
f"Modbus WRITE ERROR 0x002C = {value}"
)
return

print(
f"Modbus OK: 0x002C = {value}"
)

# Julkaistaan HA:lle uusi tila
publish_mqtt(
"power",
command
)

except Exception as e:

print(f"Modbus WRITE ERROR: {e}")

# ==========================================
# MQTT-komentojen kuuntelu
# ==========================================

def mqtt_listener():

print("MQTT-komentojen kuuntelu käynnistetty")

while True:

try:

process = subprocess.Popen(
[
'mosquitto_sub',
'-h', MQTT_BROKER,
'-u', MQTT_USER,
'-P', MQTT_PASSWORD,
'-t', 'rotenso/set_power'
],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True
)

for line in process.stdout:

command = line.strip()

if command:

print(
f"MQTT komento: {command}"
)

set_power(command)

except Exception as e:

print(
f"MQTT listener ERROR: {e}"
)

print(
"MQTT-yhteys katkesi, "
"yritetään uudelleen 5 s kuluttua..."
)

time.sleep(5)


# ==========================================
# KÄYNNISTYS
# ==========================================

if not client.connect():

print("Modbus-yhteys epäonnistui")
exit(1)

print("Modbus-yhteys OK")
print("Mittausväli: 30 sekuntia")


# Käynnistetään MQTT-kuuntelu omassa säikeessä

listener_thread = threading.Thread(
target=mqtt_listener,
daemon=True
)

listener_thread.start()


# ==========================================
# Pääohjelma
# ==========================================

try:

while True:

read_all()

time.sleep(INTERVAL)

except KeyboardInterrupt:

print("\nOhjelma lopetetaan")

finally:

client.close()

print(
"Modbus-yhteys suljettu"
)
 
Viimeksi muokannut moderaattori:
miten on, keinoäly väittää että varaajaan menee 6kW teholla.
on kait täällä joku jolla on monoblock vilppi

1789918273177.webp
 
miten on, keinoäly väittää että varaajaan menee 6kW teholla.
on kait täällä joku jolla on monoblock vilppi

Minulla on... en oikein saa selvää mikä on ongelmasi. Terminologiamuuri ehkä.

Itselle olen tehnyt Excel kaavan, jossa on lämpötilaero ja virtausnopeus. Se laskee veteen siirtyvän energian.
 
rotenso näyttää siirtyvän energian suoraan joka on tuossa kuvassa 3,03kw, ongelmani on teminologiamuuri
onko tuohon 3,03kw laskettu verkosta otettu enegia minkä mittaan kiskomittarilla, 2,9kw
onko tuon laitteen hyöty vajaat 100W kuvan tilanteessa? vai
meneekö varaajaan ~6kw teholla?
 
Ensimmäisessä kuvassa meni 5,96 KW ja nyt 3,03 kW ja COP on jälkimmäisessä kuvassa n. yksi.
Miten kuumaa kone tekee, kun hyötysuhde on n. yksi?
 
Monokoneen käyttäjä/mittaaja ilmoittautuu !
Mitattavia suureita ovat lämpöteho ja sähköteho. Lämpöpumpun ilmaisenergia on VILPin tapauksessa aina laskennallinen suure. Vain maalämpöpumpun keruupiiristä tuon voi mitata suoraan ja jotkut ovat sitä jopa tainneet kokeillakin.

Softa nyt tietysti voi laskea mitä tahansa ulos heikolaatuisistakin mittaustuloksista. En muista koskaan kenenkään raportoineen, että kone ilmoittaisi ilmasta kiinniottamansa ilmaisenergian määrää energiana tai tehona.
 
rotenso näyttää siirtyvän energian suoraan joka on tuossa kuvassa 3,03kw, ongelmani on teminologiamuuri
onko tuohon 3,03kw laskettu verkosta otettu enegia minkä mittaan kiskomittarilla, 2,9kw
onko tuon laitteen hyöty vajaat 100W kuvan tilanteessa? vai
meneekö varaajaan ~6kw teholla?

Omassa Kiinalaitteessa "ottoteho" ilmoitetaan pelkillä Ampeereilla ja jännitteellä. Niistä ei saa kuin suuntaa antavan tiedon. Se ei edes laske niistä watteja. Mutta minulla on oma mittari, joka kertoo watit.

Jos kiskomittarisi antaa samaa luokkaa olevaa lukemaa niin ehdottaisin että kyse on samasta suureesta eli ottotehosta. Antotehoa se ei voi mitata ellei siinä ole virtausmittaria tai sellaista KV-pumppua josta se saa toteutuneen virtausnopeuden.
 
Juurikin näin ymmärrän.
Mistä tuo ”rotenso lämpöteho” mittaus tulee? Onko jossain energiamittari, joka mittaa menevän ja palaavan veden lämmön sekä virtauksen?
 
Omassa Kiinalaitteessa "ottoteho" ilmoitetaan pelkillä Ampeereilla ja jännitteellä. Niistä ei saa kuin suuntaa antavan tiedon. Se ei edes laske niistä watteja. Mutta minulla on oma mittari, joka kertoo watit.

Jos kiskomittarisi antaa samaa luokkaa olevaa lukemaa niin ehdottaisin että kyse on samasta suureesta eli ottotehosta. Antotehoa se ei voi mitata ellei siinä ole virtausmittaria tai sellaista KV-pumppua josta se saa toteutuneen virtausnopeuden.
1789927583238.webp


1789927720960.webp


tuo lämpöteho on ollut ylimmillään ~15kw, ottoteho on aika vakio ~4kw
 
Viimeksi muokattu:
miten on, keinoäly väittää että varaajaan menee 6kW teholla.
on kait täällä joku jolla on monoblock vilppi

Näytä liitetiedosto 117608


Jos tuota aikaisemmin laittamaasi kuvaa katsoo niin "Rotenso lämpöteho" näyttäisi siltä mitä väraajaan menee. Tuo veden virtaus on todennäköisesti 840 L/h. Tuo lähtevän veden lämpötila on ainakin edellisessä kuvassa niin korkea että ei siinä kovin hyvä COP voi enään olla. Nuo pumpun omat ilmoitukset ainakin itsellä aika vaihtelevia.

1789927212733.webp
 
Virtausnopeus ei voi olla 84 kuutiota tunnissa

Mutta jos se on 840 litraa tunnissa niin lämmitysteho 6,1 asteen nousulla on 5,96 kW kuten laite itsekin laskee.
 
Viimeksi muokattu:
Pumppu laskee lämpötehon "oikein" mutta HA näyttää erillisen vedenvirtauksen pilkkuvirheellä. Näin ainakin itsellä oli allekirjoituksen pumpussa.
 
Teen yöllä vertailevan testin kun oma pumppu tuottaa yhtä kuumaa ja virtausmäärän saa kv-pumpun omasta näytöstä. Mielestäni hyötysuhde voisi olla lähempänä kakkosta kuin ykköstä.
 
U-Energy eli Power Worldin 6 kW on nyt käymässä ja hetken käytyään se pääsi samoihin lämpötiloihin.

Ulkolämpötila 12,5°C
Vesi sisään 53,1°C
Vesi ulos 61,1°C
ΔT+8,0°C
Mitattu sähköteho 2817 W
Virtaus 730 l/h
Tuotto 7,6 kW
COP 2,7

Vähän myöhemmin se alkoi jo rajoittamaan kierroksia kun sähköteho nousi 2900W yli ja sitten laite pysähtyi. Juuri sitä ennen mittaukset oli

Ulkolämpötila 12,5°C
Vesi sisään 56,3°C
Vesi ulos 63,5°C
ΔT+7,2°C
Mitattu sähköteho 2895 W
Virtaus 730 l/h
Tuotto 6,1 kW
COP 2,1

Tämä on siis R32 laite ja 55 asteen pyynnillä se pystyy käymään siihen asti kunnes tulolämpö saavuttaa 57 asteen rajan. Lämpötilat mittaan erikseen molemista putkista omalla mittarilla. Sähköt Shellyllä ja virtaus on pumpun ilmoittamana.

Tuollaisia tuloksia siis voisi odottaa muiltakin R32 laitteilta.

Tässä vielä ottotehokäyrää (sininen) ja kierrosmäärä (harmaa) Vihreä on COP. Lämmitys alkoi 50 asteisesta vedestä. Käyrän kyykkäys johtuu siitä, että paisunta ei ollut valmiiksi riittävän paljon auki. Meni liian kuumaksi ja joutui hetken hellittämään kierroksia.
1789939289214.webp
 
Viimeksi muokattu:
No nyt on tuo Rotenso vihdoin HomeAssist perässä ja alkoi samaan käppyrää pihalle. Nuo arvot eivät ole vielä ihan valmiita, kun vasta muutaman tunnin kerännyt dataa, mutta suuntaa antavia.
 

Liitetiedostot

  • Screenshot_20260921_231026_io_homeassistant_companion_android_WebViewActivity.webp
    Screenshot_20260921_231026_io_homeassistant_companion_android_WebViewActivity.webp
    20,1 KB · Lukukerrat: 1
  • Screenshot_20260921_231012_io_homeassistant_companion_android_WebViewActivity.webp
    Screenshot_20260921_231012_io_homeassistant_companion_android_WebViewActivity.webp
    20,1 KB · Lukukerrat: 1
Takaisin
Ylös Bottom