Da jeg har flyttet inn i ny bolig med flexit og jeg ville styre dette via HS4 så har jeg laget et script i python som leser dataene som er satt opp i en separat fil via en modbusRTU/TCP konverter og sender det ut på MQTT. Det kan også motta kommander for å skrive, foreløpig kun til holding registers. Hvilke som kan skrives til defineres i konfigurasjonsfilen, da har man litt ekstra sikkerhet tilfelle noe galt skulle skje. Grunnen til at jeg har gjort det slik er at det krever minimalt med oppsett i toppsystemet. Feks i HS4 og mcsMQTT så oppdager den alle topicene selv og det er bare å trykke legg til, det kan i prinsippet gjøre at alle toppsystemer som støtter MQTT kan nå lese og skrive til modbus.
I scriptet er den en variabel som må endres og det er "config_file" som for øyeblikket ligger på linje 12. Den skal være til configfilen som er aktiv.
MQTT topic blir som følger "basetopic/{holding_registers/input_registers}/{register nummer}/{register navn}/s" den siste "s" er for "status" når det skal skrives til modbus endres denne til "c".
MQTT settings er ganske selvforklarende
Modbus settings:
server_adress: Adressen til modbusTCP serveren/konverteren
server_port: Porten som er brukt for tilkobling på serveren
unit_id: Normalt er den 1 men kommer til an på implementasjonen av modbus på serversiden
read_delay: Hvor lenge den venter mellom hver gang det leses oppgitt i 1/100. 50 = 500ms = 2Hz
Holding og input register:
"holding_registers":{
"0":{ Register nummer
"name":"Supply_Air_Speed_1", Navn som brukes i MQTT topic
"writeable":"True", True = kan skrives til fra MQTT, brukes kun i holding registers. Scriptet vil kun subscribe til topics hvor denne er "True"
"size":"16", 16 = 16 bit = 1 register & 32 = 32 bit = 2 register
"unit":"%", Foreløpig ikke brukt til noe
"scaling":"1", Skalering. Verdien vil multipliseres med denne verdien før den sendes på MQTT. Og motsatt når den blir sendt fra MQTT til modbus
"signed":"True" Om verdien er en "int" = True, uint = "False"
},
Ting som foreløpig mangler:
- Kunne skrive 32bit verdier og dele disse opp til 16bit og skrive til hvert register
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.
Question
Christoffer
Hei.
Link til Github
Hardware brukt:
Flexit CI66
Usr-Tcp232-410S
Da jeg har flyttet inn i ny bolig med flexit og jeg ville styre dette via HS4 så har jeg laget et script i python som leser dataene som er satt opp i en separat fil via en modbusRTU/TCP konverter og sender det ut på MQTT. Det kan også motta kommander for å skrive, foreløpig kun til holding registers. Hvilke som kan skrives til defineres i konfigurasjonsfilen, da har man litt ekstra sikkerhet tilfelle noe galt skulle skje. Grunnen til at jeg har gjort det slik er at det krever minimalt med oppsett i toppsystemet. Feks i HS4 og mcsMQTT så oppdager den alle topicene selv og det er bare å trykke legg til, det kan i prinsippet gjøre at alle toppsystemer som støtter MQTT kan nå lese og skrive til modbus.
I scriptet er den en variabel som må endres og det er "config_file" som for øyeblikket ligger på linje 12. Den skal være til configfilen som er aktiv.
MQTT topic blir som følger "basetopic/{holding_registers/input_registers}/{register nummer}/{register navn}/s" den siste "s" er for "status" når det skal skrives til modbus endres denne til "c".
MQTT settings er ganske selvforklarende
Modbus settings:
server_adress: Adressen til modbusTCP serveren/konverteren
server_port: Porten som er brukt for tilkobling på serveren
unit_id: Normalt er den 1 men kommer til an på implementasjonen av modbus på serversiden
read_delay: Hvor lenge den venter mellom hver gang det leses oppgitt i 1/100. 50 = 500ms = 2Hz
Holding og input register:
"holding_registers":{ "0":{ Register nummer "name":"Supply_Air_Speed_1", Navn som brukes i MQTT topic "writeable":"True", True = kan skrives til fra MQTT, brukes kun i holding registers. Scriptet vil kun subscribe til topics hvor denne er "True" "size":"16", 16 = 16 bit = 1 register & 32 = 32 bit = 2 register "unit":"%", Foreløpig ikke brukt til noe "scaling":"1", Skalering. Verdien vil multipliseres med denne verdien før den sendes på MQTT. Og motsatt når den blir sendt fra MQTT til modbus "signed":"True" Om verdien er en "int" = True, uint = "False" },
Ting som foreløpig mangler:
- Kunne skrive 32bit verdier og dele disse opp til 16bit og skrive til hvert register
- Lese Discrete inputs
- Lese coils
- Skrive coils
Hvordan det ser ut i HS4 hos meg:
Eksempel konfig for flexit CI66
{ "mqtt_settings":{ "server_adress":"adress", "server_port":"1883", "server_user":"username", "server_password":"password", "basetopic":"82/ventilasjon/" }, "modbus_settings":{ "server_adress":"adress", "server_port":"26", "unit_id":"1", "read_delay":"50" }, "unit_details":{ "type":"Flexit_CI66", "name":"ventilasjon" }, "holding_registers":{ "0":{ "name":"Supply_Air_Speed_1", "writeable":"True", "size":"16", "unit":"%", "scaling":"1", "signed":"True" }, "1":{ "name":"Supply_Air_Speed_2", "writeable":"True", "size":"16", "unit":"%", "scaling":"1", "signed":"True" }, "2":{ "name":"Supply_Air_Speed_3", "writeable":"True", "size":"16", "unit":"%", "scaling":"1", "signed":"True" }, "3":{ "name":"Supply_Air_Speed_4", "writeable":"True", "size":"16", "scaling":"1", "signed":"True" }, "4":{ "name":"Extract_Air_Speed_1", "writeable":"True", "size":"16", "unit":"%", "scaling":"1", "signed":"True" }, "5":{ "name":"Extract_Air_Speed_2", "writeable":"True", "size":"16", "unit":"%", "scaling":"1", "signed":"True" }, "6":{ "name":"Extract_Air_Speed_3", "writeable":"True", "size":"16", "unit":"%", "scaling":"1", "signed":"True" }, "7":{ "name":"Extract_Air_Speed_4", "writeable":"True", "size":"16", "scaling":"1", "signed":"True" }, "8":{ "name":"Set_Air_Temperature", "writeable":"True", "size":"16", "unit":"°C", "scaling":"10", "signed":"True" }, "9":{ "name":"Supply_Air_Min_Temp", "writeable":"True", "size":"16", "unit":"°C", "scaling":"10", "signed":"True" }, "10":{ "name":"Supply_Air_Max_Temp", "writeable":"True", "size":"16", "unit":"°C", "scaling":"10", "signed":"True" }, "11":{ "name":"Cooling_Outdoor_Air_Min_temp", "writeable":"True", "size":"16", "unit":"°C", "scaling":"10", "signed":"True" }, "12":{ "name":"Forced_Vent_Speed", "writeable":"True", "size":"16", "scaling":"1", "signed":"True" }, "13":{ "name":"Forced Vent_Time", "writeable":"True", "size":"16", "unit":"min", "scaling":"1", "signed":"True" }, "14":{ "name":"Air_Regulation_Type", "writeable":"True", "size":"16", "unit":"bool", "scaling":"1", "signed":"True" }, "15":{ "name":"Cooling_Active", "writeable":"True", "size":"16", "unit":"bool", "scaling":"1", "signed":"True" }, "16":{ "name":"Forced_Ventilation", "writeable":"True", "size":"16", "unit":"bool", "scaling":"1", "signed":"True" }, "17":{ "name":"Set_Air_Speed", "writeable":"True", "size":"16", "scaling":"1", "signed":"True" }, "18":{ "name":"Time", "writeable":"False", "size":"32", "unit":"s", "scaling":"1", "signed":"False" }, "21":{ "name":"Fire_Smoke_Mode", "writeable":"True", "size":"16", "scaling":"1", "signed":"True" } }, "input_registers":{ "6":{ "name":"Time_1", "writeable":"False", "size":"32", "signed":"False" }, "8":{ "name":"Filter_Time", "writeable":"False", "size":"16", "signed":"False" }, "9":{ "name":"Supply_Air_temp", "writeable":"False", "size":"16", "unit":"°C", "scaling":"10", "signed":"True" }, "10":{ "name":"Extract_Air_temp", "writeable":"False", "size":"16", "unit":"°C", "scaling":"10", "signed":"True" }, "11":{ "name":"Outdoor_Air_temp", "writeable":"False", "size":"16", "unit":"°C", "scaling":"10", "signed":"True" }, "14":{ "name":"Heat_Exchanger", "writeable":"False", "size":"16", "unit":"%", "signed":"False" }, "17":{ "name":"Operational_Time", "writeable":"False", "size":"16", "unit":"%", "signed":"False" }, "26":{ "name":"Rotor_Alarm", "writeable":"False", "size":"16", "signed":"False" }, "27":{ "name":"Filter_Alarm", "writeable":"False", "size":"16", "signed":"False" }, "28":{ "name":"Heating_Active", "writeable":"False", "size":"16", "signed":"False" }, "32":{ "name":"Speed_1_counter", "writeable":"False", "size":"32", "signed":"False" }, "34":{ "name":"Speed_2_counter", "writeable":"False", "size":"32", "signed":"False" }, "36":{ "name":"Speed_3_counter", "writeable":"False", "size":"32", "signed":"False" }, "42":{ "name":"Total_run_counter", "writeable":"False", "size":"32", "signed":"False" }, "47":{ "name":"Actual_set_air_temperature", "writeable":"False", "size":"16", "scaling":"10", "signed":"True" }, "48":{ "name":"Actual_set_air_speed", "writeable":"False", "size":"16", "signed":"True" } } }
La til bilder
0 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.