Gå til innhold
  • Bli medlem
Støtt hjemmeautomasjon.no!
  • 0

modbus2mqtt - Med eksempel for flexit


Christoffer

Spørsmål

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:

image.thumb.png.0f23dc6a4d517e30d3d9437429026400.png

 

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"
	}

}
}

 

Endret av Christoffer
La til bilder
Lenke til kommentar
Del på andre sider

0 svar til spørsmålet

Anbefalte innlegg

Ingen har svart på dette spørsmålet ennå

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.

Gjest
Svar på spørsmålet...

×   Du har limt inn tekst med formatering.   Lim inn uten formatering i stedet

  Du kan kun bruke opp til 75 smilefjes.

×   Lenken din har blitt bygget inn på siden automatisk.   Vis som en ordinær lenke i stedet

×   Tidligere tekst har blitt gjenopprettet.   Tøm tekstverktøy

×   Du kan ikke lime inn bilder direkte. Last opp eller legg inn bilder fra URL.

×
×
  • Opprett ny...

Viktig informasjon

Vi har plassert informasjonskapsler/cookies på din enhet for å gjøre denne siden bedre. Du kan justere dine innstillinger for informasjonskapsler, ellers vil vi anta at dette er ok for deg.