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
Spørsmål
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 svar til spørsmålet
Anbefalte innlegg
Bli med i samtalen
Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.