Open AgentP38 opened 2 years ago
Hi, anfänglich habe ich tatsächlich mal mit einem Python Script gespielt, das die Kommunikation zu Home Assistant per MQTT hergestellt hat. Später ist mir dann aufgefallen, dass Home Assistant eine eigene Modbus Integration hat. Die nutze ich im Moment und es funktioniert problemlos und zuverlässig. Mein Server auf dem Home Assistant läuft steht im Technikraum im Keller, wo auch meine Proxon Anlage steht. Ich musste also nur ein USB Verlängerungskabel kaufen um den RS 485 Stick anzuschließen.
In den configuration.yaml Datei von Home Assistant habe ich dann folgende Zeile hinzugefügt:
# Modbus (Proxon) Konfiguration
modbus: !include modbus.yaml
Dann habe ich eine neue Datei "modbus.yaml" angelegt und wie folgt befüllt:
- name: proxon
type: serial
delay: 5
baudrate: 19200
bytesize: 8
method: rtu
parity: E
port: /dev/ttyUSB0
stopbits: 1
switches:
- name: "Heizelemente Global"
unique_id: proxon_heizelemente_global
scan_interval: 15
slave: 41
address: 325
verify:
delay: 1
- name: "Heizelement Wohnzimmer (Zone1)"
unique_id: proxon_heizelement_wohnzimmer_zone1
scan_interval: 15
slave: 41
address: 187
verify:
delay: 1
- name: "Heizelement Büro KG (Zone2)"
unique_id: proxon_heizelement_buero_kg_zone2
scan_interval: 15
slave: 41
address: 253
verify:
delay: 1
- name: "Heizelement Küche"
unique_id: proxon_heizelement_kueche
scan_interval: 15
slave: 41
address: 254
verify:
delay: 1
- name: "Heizelement Diele"
unique_id: proxon_heizelement_diele
scan_interval: 15
slave: 41
address: 255
verify:
delay: 1
- name: "Heizelement Büro EG"
unique_id: proxon_heizelement_buero_eg
scan_interval: 15
slave: 41
address: 256
verify:
delay: 1
- name: "Heizelement Schlafzimmer"
unique_id: proxon_heizelement_schlafzimmer
scan_interval: 15
slave: 41
address: 257
verify:
delay: 1
- name: "Heizelement Martha"
unique_id: proxon_heizelement_martha
scan_interval: 15
slave: 41
address: 258
verify:
delay: 1
- name: "Heizelement Marlene"
unique_id: proxon_heizelement_marlene
scan_interval: 15
slave: 41
address: 259
verify:
delay: 1
- name: "Heizelement Keller 2"
unique_id: proxon_heizelement_keller2
scan_interval: 15
slave: 41
address: 261
verify:
delay: 1
- name: "Heizelement Keller 3"
unique_id: proxon_heizelement_keller3
scan_interval: 15
slave: 41
address: 262
verify:
delay: 1
- name: "Heizelement Wasser"
unique_id: proxon_heizelement_wasser
scan_interval: 15
slave: 41
address: 2001
verify:
delay: 1
- name: "Kühlung Global"
unique_id: proxon_kuehlung_global
scan_interval: 15
slave: 41
address: 62
verify:
delay: 1
sensors:
- name: "Temperatur Wohnzimmer (Zone1)"
unique_id: proxon_temperatur_wohnzimmer_zone1
scan_interval: 30
slave: 41
address: 41
input_type: input
scale: 0.01
precision: 1
unit_of_measurement: °C
data_type: uint16
- name: "Temperatur Büro KG (Zone2)"
unique_id: proxon_temperatur_buero_gg_zone2
scan_interval: 30
slave: 41
address: 40
input_type: input
scale: 0.01
precision: 1
unit_of_measurement: °C
data_type: uint16
- name: "Temperatur Küche"
unique_id: proxon_temperatur_kueche
scan_interval: 30
slave: 41
address: 593
input_type: input
scale: 0.1
precision: 1
unit_of_measurement: °C
data_type: int16
- name: "Temperatur Diele"
unique_id: proxon_temperatur_diele
scan_interval: 30
slave: 41
address: 596
input_type: input
scale: 0.1
precision: 1
unit_of_measurement: °C
data_type: int16
- name: "Temperatur Büro EG"
unique_id: proxon_temperatur_buero_eg
scan_interval: 30
slave: 41
address: 599
input_type: input
scale: 0.1
precision: 1
unit_of_measurement: °C
data_type: int16
- name: "Temperatur Schlafzimmer"
unique_id: proxon_temperatur_schlafzimmer
scan_interval: 30
slave: 41
address: 602
input_type: input
scale: 0.1
precision: 1
unit_of_measurement: °C
data_type: int16
- name: "Temperatur Martha"
unique_id: proxon_temperatur_martha
scan_interval: 30
slave: 41
address: 605
input_type: input
scale: 0.1
precision: 1
unit_of_measurement: °C
data_type: int16
- name: "Temperatur Marlene"
unique_id: proxon_temperatur_marlene
scan_interval: 30
slave: 41
address: 608
input_type: input
scale: 0.1
precision: 1
unit_of_measurement: °C
data_type: int16
- name: "Temperatur Keller 2"
unique_id: proxon_temperatur_keller2
scan_interval: 30
slave: 41
address: 614
input_type: input
scale: 0.1
precision: 1
unit_of_measurement: °C
data_type: int16
- name: "Temperatur Keller 3"
unique_id: proxon_temperatur_keller3
scan_interval: 30
slave: 41
address: 617
input_type: input
scale: 0.1
precision: 1
unit_of_measurement: °C
data_type: int16
- name: "Temperatur Wasser"
unique_id: proxon_temperatur_wasser
scan_interval: 30
slave: 41
address: 814
input_type: input
scale: 0.1
offset: -100
precision: 1
unit_of_measurement: °C
data_type: uint16
- name: "CO2 Wohnzimmer"
unique_id: proxon_co2_wohnzimmer
scan_interval: 30
slave: 41
address: 21
input_type: input
device_class: aqi
unit_of_measurement: ppm
data_type: int16 #das muss noch verifiziert werden
- name: "Luftfeuchte Wohnzimmer"
unique_id: proxon_luftfeuchte_wohnzimmer
scan_interval: 30
slave: 41
address: 22
input_type: input
device_class: humidity
unit_of_measurement: "%"
data_type: int16 #das muss noch verifiziert werden
- name: "Lüftungsstufe Ventilator Zuluft"
unique_id: proxon_lueftungsstufe_ventilator_zuluft
scan_interval: 30
slave: 41
address: 154
input_type: input
data_type: int16
- name: "Betriebsart"
unique_id: proxon_betriebsart
scan_interval: 30
slave: 41
address: 16
input_type: holding
data_type: uint16
- name: "Soll-Temperatur Wohnzimmer (Zone1)"
unique_id: proxon_soll_temperatur_wohnzimmer_zone1
scan_interval: 30
slave: 41
address: 70
input_type: holding
scale: 0.01
precision: 1
unit_of_measurement: °C
data_type: int16
- name: "Soll-Temperatur Büro KG (Zone2)"
unique_id: proxon_soll_temperatur_buero_kg_zone2
scan_interval: 30
slave: 41
address: 75
input_type: holding
scale: 0.01
precision: 1
unit_of_measurement: °C
data_type: int16
- name: "Soll-Temperatur Wasser"
unique_id: proxon_soll_temperatur_wasser
scan_interval: 30
slave: 41
address: 2000
input_type: holding
scale: 0.1
precision: 1
unit_of_measurement: °C
data_type: int16 #das muss noch verifiziert werden
- name: "Temperatur-Schwelle Heizstab Wasser"
unique_id: proxon_temperatur_schwelle_heizstab_wasser
scan_interval: 30
slave: 41
address: 2003
input_type: holding
scale: 0.1
precision: 1
unit_of_measurement: °C
data_type: int16 #das muss noch verifiziert werden
- name: "Restzeit Intensivlüftung"
unique_id: proxon_restzeit_intensivlueftung
scan_interval: 30
slave: 41
address: 133
input_type: holding
unit_of_measurement: min
data_type: uint16
- name: "Zeit FWT Online"
unique_id: proxon_zeit_fwt_online
scan_interval: 30
slave: 41
address: 467
input_type: holding
unit_of_measurement: std
data_type: uint16
- name: "Standzeit FWT Gerätefilter"
unique_id: proxon_standzeit_fwt_geraetefilter
scan_interval: 30
slave: 41
address: 460
input_type: holding
unit_of_measurement: std
data_type: uint16
- name: "Nutzzeit FWT Gerätefilter"
unique_id: proxon_nutzzeit_fwt_geraetefilter
scan_interval: 30
slave: 41
address: 469
input_type: holding
unit_of_measurement: std
data_type: uint16
- name: "Mitteltemperatur HNBP Keller 1"
unique_id: proxon_mitteltemperatur_hnbp_keller1
scan_interval: 30
slave: 41
address: 233
input_type: holding
unit_of_measurement: °C
data_type: int16
- name: "Mitteltemperatur NBP Küche"
unique_id: proxon_mitteltemperatur_nbp_kueche
scan_interval: 30
slave: 41
address: 234
input_type: holding
unit_of_measurement: °C
data_type: int16
- name: "Mitteltemperatur NBP Diele"
unique_id: proxon_mitteltemperatur_nbp_diele
scan_interval: 30
slave: 41
address: 235
input_type: holding
unit_of_measurement: °C
data_type: int16
- name: "Mitteltemperatur NBP Büro EG"
unique_id: proxon_mitteltemperatur_nbp_buero_eg
scan_interval: 30
slave: 41
address: 236
input_type: holding
unit_of_measurement: °C
data_type: int16
- name: "Mitteltemperatur NBP Schlafzimmer"
unique_id: proxon_mitteltemperatur_nbp_schlafzimmer
scan_interval: 30
slave: 41
address: 237
input_type: holding
unit_of_measurement: °C
data_type: int16
- name: "Mitteltemperatur NBP Martha"
unique_id: proxon_mitteltemperatur_nbp_martha
scan_interval: 30
slave: 41
address: 238
input_type: holding
unit_of_measurement: °C
data_type: int16
- name: "Mitteltemperatur NBP Marlene"
unique_id: proxon_mitteltemperatur_nbp_marlene
scan_interval: 30
slave: 41
address: 239
input_type: holding
unit_of_measurement: °C
data_type: int16
- name: "Mitteltemperatur NBP Keller 2"
unique_id: proxon_mitteltemperatur_nbp_keller2
scan_interval: 30
slave: 41
address: 241
input_type: holding
unit_of_measurement: °C
data_type: int16
- name: "Mitteltemperatur NBP Keller 3"
unique_id: proxon_mitteltemperatur_nbp_keller3
scan_interval: 30
slave: 41
address: 242
input_type: holding
unit_of_measurement: °C
data_type: int16
- name: "Offsettemperatur HNBP Keller 1"
unique_id: proxon_offsettemperatur_hnbp_keller1
scan_interval: 30
slave: 41
address: 213
input_type: holding
unit_of_measurement: °C
data_type: int16
- name: "Offsettemperatur NBP Küche"
unique_id: proxon_offsettemperatur_nbp_kueche
scan_interval: 30
slave: 41
address: 214
input_type: holding
unit_of_measurement: °C
data_type: int16
- name: "Offsettemperatur NBP Diele"
unique_id: proxon_offsettemperatur_nbp_diele
scan_interval: 30
slave: 41
address: 215
input_type: holding
unit_of_measurement: °C
data_type: int16
- name: "Offsettemperatur NBP Büro EG"
unique_id: proxon_offsettemperatur_nbp_buero_eg
scan_interval: 30
slave: 41
address: 216
input_type: holding
unit_of_measurement: °C
data_type: int16
- name: "Offsettemperatur NBP Schlafzimmer"
unique_id: proxon_offsettemperatur_nbp_schlafzimmer
scan_interval: 30
slave: 41
address: 217
input_type: holding
unit_of_measurement: °C
data_type: int16
- name: "Offsettemperatur NBP Martha"
unique_id: proxon_offsettemperatur_nbp_martha
scan_interval: 30
slave: 41
address: 218
input_type: holding
unit_of_measurement: °C
data_type: int16
- name: "Offsettemperatur NBP Marlene"
unique_id: proxon_offsettemperatur_nbp_marlene
scan_interval: 30
slave: 41
address: 219
input_type: holding
unit_of_measurement: °C
data_type: int16
- name: "Offsettemperatur NBP Keller 2"
unique_id: proxon_offsettemperatur_nbp_keller2
scan_interval: 30
slave: 41
address: 221
input_type: holding
unit_of_measurement: °C
data_type: int16
- name: "Offsettemperatur NBP Keller 3"
unique_id: proxon_offsettemperatur_nbp_keller3
scan_interval: 30
slave: 41
address: 222
input_type: holding
unit_of_measurement: °C
data_type: int16
Die Register und deren Namen sind in dem Beispiel natürlich auf mein Haus ausgelegt, aber ein Großteil bleibt natürlich gleich.
Damit ich die einzelnen Register auch regelkonform schalten konnte habe ich dann in Node-Red noch einige Automationen gebaut, z.B. um die Offset-Temperaturen der Bedienpanels korrekt anzusteuern.
Ich denke im ersten Schritt solltest du aber erstmal Home Assistant mit deiner Proxon verbinden um eine Grundlage zu haben. Alles weitere ist dann irgendwie nur noch Fleißarbeit. Gerne kann ich dir dazu später auch nochmals ein paar Hinweise geben.
Grüße
Wahnsinnnnnn vielen lieben Dank!!!
Hast du eine Idee, wie man erkennt welcher Raum welche ID hat?
Ich habe einfach die ausgegebenen Werte (Temperaturen) mit den Werten aus der Android App verglichen, dann war es bei mir recht schnell eindeutig.
Guten Tag zusammen, da geselle ich mich kurz zur Diskussion. Ich habe deine Beispiel Config auch bei mir als Starthilfe in Home Assistant genutzt und kann auch wunderbar die Temperaturen auslesen sowie die Heizelemente schalten an meinerProxon Anlage. Meine Frage, wie genaue wäre den die Syntax um Werte in die Holding Register zu schreiben? Also zum Beispiel wie kann ich die Solltemperatur für einen Raum setzen? Danke für die ausführlichen Infos hier!
Ich mache mal ein Beispiel, wie ich die Temperatur in einem Zimmer setze.
Erstmal die Grundlagen:
Um die Aktuell eingestellte Temperatur für einen Raum zu bestimmen muss man als die Summe der Mittel- und Offset-Temperatur addieren. Ich mache das via eines Template Sensors...
Hier ein Beispiel:
# Template Konfiguration
template:
- sensor:
- name: "Soll Temperatur Küche"
unique_id: template_soll_temperatur_kueche
unit_of_measurement: °C
state: "{{ states.sensor.mitteltemperatur_nbp_kuche.state | int + states.sensor.offsettemperatur_nbp_kuche.state | int }}"
Wenn ich nun die Soll-Temperatur in Abhängigkeit zur Mittel-Temperatur ändern möchte, dann mache ich das über die Offset-Temperatur.
Die Home Assistant Automations-Möglichkeiten fand ich ein wenig zu kompliziert und habe daher via Node-Red noch eine Automation gebaut, die bei einer Änderung in der UI, diese auch an Modbus weitergibt.
So ich habe meine Heizung jetzt verbunden und kann die Werte auslesen. Die entities habe ich auch raus gefunden und den Zimmern zugeordnet.
Vielen Dank schon einmal dafür war eine Riesen Hilfe...
Jetzt stellt sich mir die Frage, wie ich die Sensor Werte per Bus dann in die Heizung schreibe. Reicht es wenn ich den Sensorwert einfach ändere, oder muss dass speziell gesendet werden?
Habe ein wenig versucht über nodered Modbus zu konfigurieren...
Scheitere aber schon an der Connection...
Welches setup muss ich da nehmen?
Ich spreche die Proxon Anlage nicht direkt aus Node-Red via Modbus an, sondern rufe einen Home Assistant Service auf, der die Modbus Änderung durchführt.
Nachfolgend habe ich den Node-Red Flow kopiert, der folgendes macht:
Mithilfe dieser beiden Abfragen, kann ich Home Assistant und Proxon syncron halten (mit wenigen Sekunden versatz, aber das ist nicht kritisch).
[
{
"id": "a5815ba7c7afa2f9",
"type": "tab",
"label": "HA-Proxon - Offset Temp",
"disabled": false,
"info": "",
"env": []
},
{
"id": "1dde0404bec1be4b",
"type": "server-state-changed",
"z": "a5815ba7c7afa2f9",
"name": "State Changed: Helfer Offset Temperatur",
"server": "d0108cd6.fca61",
"version": 4,
"exposeToHomeAssistant": false,
"haConfig": [
{
"property": "name",
"value": ""
},
{
"property": "icon",
"value": ""
}
],
"entityidfilter": "input_number.helper_offset_temperatur_",
"entityidfiltertype": "regex",
"outputinitially": false,
"state_type": "str",
"haltifstate": "",
"halt_if_type": "str",
"halt_if_compare": "is",
"outputs": 1,
"output_only_on_state_change": true,
"for": 0,
"forType": "num",
"forUnits": "minutes",
"ignorePrevStateNull": false,
"ignorePrevStateUnknown": false,
"ignorePrevStateUnavailable": false,
"ignoreCurrentStateUnknown": false,
"ignoreCurrentStateUnavailable": false,
"outputProperties": [
{
"property": "payload",
"propertyType": "msg",
"value": "",
"valueType": "entityState"
},
{
"property": "data",
"propertyType": "msg",
"value": "",
"valueType": "eventData"
},
{
"property": "topic",
"propertyType": "msg",
"value": "",
"valueType": "triggerId"
}
],
"x": 200,
"y": 100,
"wires": [
[
"1a0e6540159b5b15",
"bdc76933e880cc01",
"7f464108edc8b158",
"24eb724af6d3cf94"
]
]
},
{
"id": "1a0e6540159b5b15",
"type": "debug",
"z": "a5815ba7c7afa2f9",
"name": "",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 630,
"y": 60,
"wires": []
},
{
"id": "574595b4df5539b0",
"type": "api-call-service",
"z": "a5815ba7c7afa2f9",
"name": "Modbus Write Register - Offset Temperatur",
"server": "d0108cd6.fca61",
"version": 5,
"debugenabled": false,
"domain": "modbus",
"service": "write_register",
"areaId": [],
"deviceId": [],
"entityId": [],
"data": "",
"dataType": "jsonata",
"mergeContext": "",
"mustacheAltTags": false,
"outputProperties": [],
"queue": "none",
"x": 250,
"y": 260,
"wires": [
[
"6e704344fa4e3552"
]
]
},
{
"id": "6e704344fa4e3552",
"type": "debug",
"z": "a5815ba7c7afa2f9",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"statusVal": "",
"statusType": "auto",
"x": 630,
"y": 260,
"wires": []
},
{
"id": "bed845048dd67674",
"type": "debug",
"z": "a5815ba7c7afa2f9",
"name": "",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"statusVal": "",
"statusType": "auto",
"x": 630,
"y": 180,
"wires": []
},
{
"id": "62f42978d07d6714",
"type": "server-state-changed",
"z": "a5815ba7c7afa2f9",
"name": "State Changed: Proxon Offset Temperatur",
"server": "d0108cd6.fca61",
"version": 4,
"exposeToHomeAssistant": false,
"haConfig": [
{
"property": "name",
"value": ""
},
{
"property": "icon",
"value": ""
}
],
"entityidfilter": "sensor.offsettemperatur_*",
"entityidfiltertype": "regex",
"outputinitially": false,
"state_type": "str",
"haltifstate": "",
"halt_if_type": "str",
"halt_if_compare": "is",
"outputs": 1,
"output_only_on_state_change": true,
"for": 0,
"forType": "num",
"forUnits": "minutes",
"ignorePrevStateNull": false,
"ignorePrevStateUnknown": false,
"ignorePrevStateUnavailable": false,
"ignoreCurrentStateUnknown": false,
"ignoreCurrentStateUnavailable": false,
"outputProperties": [
{
"property": "payload",
"propertyType": "msg",
"value": "",
"valueType": "entityState"
},
{
"property": "data",
"propertyType": "msg",
"value": "",
"valueType": "eventData"
},
{
"property": "topic",
"propertyType": "msg",
"value": "",
"valueType": "triggerId"
}
],
"x": 200,
"y": 460,
"wires": [
[
"4c68d7c05eacc222",
"b370e59684aa2b9d",
"d32431e66787d95f",
"8ca40248c2e832c3"
]
]
},
{
"id": "4c68d7c05eacc222",
"type": "debug",
"z": "a5815ba7c7afa2f9",
"name": "",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"statusVal": "",
"statusType": "auto",
"x": 630,
"y": 420,
"wires": []
},
{
"id": "bdc76933e880cc01",
"type": "debug",
"z": "a5815ba7c7afa2f9",
"name": "",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "topic",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 620,
"y": 100,
"wires": []
},
{
"id": "7f464108edc8b158",
"type": "debug",
"z": "a5815ba7c7afa2f9",
"name": "",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "data",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 620,
"y": 140,
"wires": []
},
{
"id": "5fcfe3ca85664ac8",
"type": "api-call-service",
"z": "a5815ba7c7afa2f9",
"name": "HA Wert setzen - Helfer Offset Temperatur",
"server": "d0108cd6.fca61",
"version": 5,
"debugenabled": true,
"domain": "input_number",
"service": "set_value",
"areaId": [],
"deviceId": [],
"entityId": [],
"data": "",
"dataType": "jsonata",
"mergeContext": "",
"mustacheAltTags": false,
"outputProperties": [],
"queue": "none",
"x": 240,
"y": 620,
"wires": [
[
"462290644894afdb"
]
]
},
{
"id": "462290644894afdb",
"type": "debug",
"z": "a5815ba7c7afa2f9",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"statusVal": "",
"statusType": "auto",
"x": 630,
"y": 620,
"wires": []
},
{
"id": "b370e59684aa2b9d",
"type": "debug",
"z": "a5815ba7c7afa2f9",
"name": "",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "data",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 620,
"y": 500,
"wires": []
},
{
"id": "d32431e66787d95f",
"type": "debug",
"z": "a5815ba7c7afa2f9",
"name": "",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "topic",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 620,
"y": 460,
"wires": []
},
{
"id": "24eb724af6d3cf94",
"type": "function",
"z": "a5815ba7c7afa2f9",
"name": "Modbus Address & Register Value bestimmen",
"func": "//16Bit -> 65536 \n//With 16 bits, you have 2^16 possibilities = 65536.\n//half of them are used for negative numbers, which have the most significant bit set to 1 (negative). So the range goes from -32768 to (and including) +32767. Note that the ‘positive’ numbers start at 0.\n\n\n//{\t \n// \"address\":msg.payload.address,\n// \"unit\":\"41\",\n// \"value\": msg.payload.value,\n// \"hub\":\"proxon\"\n// }\nvar inputTopic = msg.topic;\nvar outputAddress = \"\";\n\nswitch (inputTopic) {\n case \"input_number.helper_offset_temperatur_buero_kg_zone2\": outputAddress = 213; break;\n case \"input_number.helper_offset_temperatur_kueche\": outputAddress = 214; break;\n case \"input_number.helper_offset_temperatur_diele\": outputAddress = 215; break;\n case \"input_number.helper_offset_temperatur_buero\": outputAddress = 216; break;\n case \"input_number.helper_offset_temperatur_schlafzimmer\": outputAddress = 217; break;\n case \"input_number.helper_offset_temperatur_martha\": outputAddress = 218; break;\n case \"input_number.helper_offset_temperatur_marlene\": outputAddress = 219; break;\n case \"input_number.helper_offset_temperatur_keller2\": outputAddress = 221; break;\n case \"input_number.helper_offset_temperatur_keller3\": outputAddress = 222; break;\n default: fail;\n}\n\n\nvar inputValue = msg.payload | 0;\nvar outputValue = 0;\n\nswitch (inputValue) {\n case -3: outputValue = 65533; break;\n case -2: outputValue = 65534; break;\n case -1: outputValue = 65535; break;\n default: outputValue = inputValue; break;\n}\n\nmsg.payload = {\n \"data\": {\n \"address\": outputAddress,\n \"unit\":\"41\",\n \"value\": outputValue,\n \"hub\":\"proxon\"\n }\n}\n\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 240,
"y": 180,
"wires": [
[
"bed845048dd67674",
"574595b4df5539b0"
]
]
},
{
"id": "9236b01255486a4d",
"type": "comment",
"z": "a5815ba7c7afa2f9",
"name": "Setzen der Offset Temperatur via HA",
"info": "",
"x": 160,
"y": 40,
"wires": []
},
{
"id": "febee0a47b390b45",
"type": "comment",
"z": "a5815ba7c7afa2f9",
"name": "Setzen der Offset Temperatur via Proxon",
"info": "",
"x": 180,
"y": 400,
"wires": []
},
{
"id": "8ca40248c2e832c3",
"type": "function",
"z": "a5815ba7c7afa2f9",
"name": "HA Entity & Wert bestimmen",
"func": "var inputEntity = JSON.parse(JSON.stringify(msg.data)).entity_id;\nvar inputValueOld = JSON.parse(JSON.stringify(msg.data)).old_state.state;\nvar inputValueNew = JSON.parse(JSON.stringify(msg.data)).new_state.state;\n\n\nvar outputEntity = \"\";\n\nswitch (inputEntity) {\n case \"sensor.offsettemperatur_hnbp_keller_1\": outputEntity = \"input_number.helper_offset_temperatur_buero_kg_zone2\"; break;\n case \"sensor.offsettemperatur_nbp_kuche\": outputEntity = \"input_number.helper_offset_temperatur_kueche\"; break;\n case \"sensor.offsettemperatur_nbp_diele\": outputEntity = \"input_number.helper_offset_temperatur_diele\"; break;\n case \"sensor.offsettemperatur_nbp_buro_eg\": outputEntity = \"input_number.helper_offset_temperatur_buero\"; break;\n case \"sensor.offsettemperatur_nbp_schlafzimmer\": outputEntity = \"input_number.helper_offset_temperatur_schlafzimmer\"; break;\n case \"sensor.offsettemperatur_hnbp_martha\": outputEntity = \"input_number.helper_offset_temperatur_martha\"; break;\n case \"sensor.offsettemperatur_nbp_marlene\": outputEntity = \"input_number.helper_offset_temperatur_marlene\"; break;\n case \"sensor.offsettemperatur_nbp_keller_2\": outputEntity = \"input_number.helper_offset_temperatur_keller2\"; break;\n case \"sensor.offsettemperatur_nbp_keller_3\": outputEntity = \"input_number.helper_offset_temperatur_keller3\"; break;\n default: fail;\n}\n\n\n//var outputValue = 0;\n\nif (inputValueOld == inputValueNew) {\n fail;\n} else {\n var outputValue = inputValueNew;\n}\n\n\nmsg.payload = {\n \"data\": {\n \"entity_id\": outputEntity,\n \"value\": outputValue\n }\n}\n\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 180,
"y": 540,
"wires": [
[
"f2f8d8d3a8615481",
"5fcfe3ca85664ac8"
]
]
},
{
"id": "f2f8d8d3a8615481",
"type": "debug",
"z": "a5815ba7c7afa2f9",
"name": "",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"statusVal": "",
"statusType": "auto",
"x": 630,
"y": 540,
"wires": []
},
{
"id": "d0108cd6.fca61",
"type": "server",
"name": "Home Assistant",
"version": 2,
"addon": true,
"rejectUnauthorizedCerts": true,
"ha_boolean": "y|yes|true|on|home|open",
"connectionDelay": true,
"cacheJson": true,
"heartbeat": false,
"heartbeatInterval": "30"
}
]
´´´´
Super schaue ich mir an!!
WelchenHelfer hast du benutzt?
So habe es geschafft...
vielen lieben Dank für die Unterstützung...
So jetzt habe ich wieder ein kleines Problem...
Wie hast du das Write der Temperaturwerre für die T300 gelöst?
Auslesen kann ich die Werte... aber alles was geschrieben werden soll wenn ich auf 48 Grad stellen will ist falsch... entweder ein Integer mit 48 ohne 0 oder wenn ich einen String setze geht es auch nicht...
Hast du eine Idee??
Die Temperatur der T300 lese ich im Moment nur aus, das einzige was ich verändere ich Heizstab an/aus. Hier kann ich dir leider nicht helfen.
Danke habe es auch gerade geschafft... wichtig ist, dass man für 40 Grad eine 400 setzen muss dann klappt es...und natürlich den Payload von String auf Number Umstellen muß
Hi m4dmin, ich bin ein ziemlicher Noob was die Einbindung von Skripten in den ioBroker geht. Könntest du mir helfen? Wie bzw. wo muss ich die Ordner-Struktur anlegen? Bisher habe ich alles über Blockly automatisiert. Auch den Modbus von meiner PV-/Batterieanlage konnte ich auslesen. Nun fehlt nur noch meine Proxon-Heizung. Über den Modbus-RTU habe ich einige Daten manuell ausgelesen, aber ich glaube mit deinem Skript könnte es besser gehen.
Freue mich von dir zu hören!
Hi @pantanis007 , beim ioBroker kann ich dir leider nicht helfen, ich nutze den Home Assistant. Dort habe ich auch die Proxon via Modbus nativ integriert. Das Script von mir entwickle ich nicht weiter und nutze es auch nicht mehr. Gerne kannst du es dir forken und weiterentwickeln :) Grüße
Danke für die Config, das meiste läuft. Hat jemand eine schöne Möglichkeit gefunden die Betriebsmodis für WP+T300 sauber in der GUI zu schalten?
Ich mache mal ein Beispiel, wie ich die Temperatur in einem Zimmer setze.
Erstmal die Grundlagen:
- Für jeden Raum gibt es einen Wert für die Mittel-Temperatur (das stellt die Proxon Anlage irgendwie ein, vermutlich in Zusammengang mit der für die Zone gesetzte Temperatur, diesen Wert lasse ich unangetastet)
- Für jeden Raum gibt es einen Wert für die Offset-Temperatur (dieser Wert gibt die Plus oder Minus Werte Am Wand Panel wieder. Dieser Wert passe ich via Home Assistant an, das spiegelt sich dann auch direkt am Wand Panel wieder)
Um die Aktuell eingestellte Temperatur für einen Raum zu bestimmen muss man als die Summe der Mittel- und Offset-Temperatur addieren. Ich mache das via eines Template Sensors...
Hier ein Beispiel:
# Template Konfiguration template: - sensor: - name: "Soll Temperatur Küche" unique_id: template_soll_temperatur_kueche unit_of_measurement: °C state: "{{ states.sensor.mitteltemperatur_nbp_kuche.state | int + states.sensor.offsettemperatur_nbp_kuche.state | int }}"
Wenn ich nun die Soll-Temperatur in Abhängigkeit zur Mittel-Temperatur ändern möchte, dann mache ich das über die Offset-Temperatur.
Die Home Assistant Automations-Möglichkeiten fand ich ein wenig zu kompliziert und habe daher via Node-Red noch eine Automation gebaut, die bei einer Änderung in der UI, diese auch an Modbus weitergibt.
Hallo @fabi9163, in diesem Post hatte ich die Integration der Wärmepumpe für die einzelnen Räume beschrieben. Die T300 habe ich nur mit einem Schalter den heizstab und einer Temperaturanzeige für das Wasser integriert...
Danke habe es auch gerade geschafft... wichtig ist, dass man für 40 Grad eine 400 setzen muss dann klappt es...und natürlich den Payload von String auf Number Umstellen muß
Hallo @AgentP38 wäre es möglich den Code/den NodeRed-Flow (falls damit realisiert) hochzuladen? Soweit läuft die Steuerung bei mir komplett - einzig die Wassertemperatur bekomme ich nicht hin.
@m4dmin Vielen Dank für die Erstellung des Projekts, das hätte ich sonst nie hinbekommen!
Hallo Baeumchen30,
Der Flow ist in meiner Repro
Tausend Dank dir, läuft einwandfrei!
Hi ,
vielen Dank, dass du mich unterstützen magst... Wie hast du das aufgebaut? über einen 2. Pi und MQTT?