// Copyright (C) 2024 Fredrik Öhrström (gpl-3.0-or-later)
driver {
name = kampress
default_fields = name,id,status,pressure_bar,max_pressure_bar,min_pressure_bar,timestamp
meter_type = PressureSensor
detect {
mvt = KAM,01,18
}
compact_frame_formats {
difvif = 22691269026905FF0905FF0A02FD17
}
fields {
field {
name = status
quantity = Text
info = status_and_error_flags
match {
measurement_type = Instantaneous
vif_range = ErrorFlags
}
lookup {
name = ERROR_FLAGS
map_type = BitToString
mask_bits = 0xffff
default_message = OK
map {
name = DROP
info = 'Unexpected drop in pressure in relation to average pressure.'
value = 0x01
test = Set
}
map {
name = SURGE
info = 'Unexpected increase in pressure in relation to average pressure.'
value = 0x02
test = Set
}
map {
name = HIGH
info = 'Average pressure has reached configurable limit. Default 15 bar.'
value = 0x04
test = Set
}
map {
name = LOW
info = 'Average pressure has reached configurable limit. Default 1.5 bar.'
value = 0x08
test = Set
}
map {
name = TRANSIENT
info = 'Pressure changes quickly over short timeperiods. Average is fluctuating.'
value = 0x10
test = Set
}
map {
name = COMM_ERROR
info = 'Cannot measure properly or bad internal communication.'
value = 0x20
test = Set
}
}
}
field {
name = pressure
quantity = Pressure
info = 'The measured pressure.'
match {
measurement_type = Instantaneous
vif_range = Pressure
}
}
field {
name = max_pressure
quantity = Pressure
info = 'The maximum pressure measured during ?'
match {
measurement_type = Maximum
vif_range = Pressure
}
}
field {
name = min_pressure
quantity = Pressure
info = 'The minimum pressure measured during ?'
match {
measurement_type = Minimum
vif_range = Pressure
}
}
field {
name = alfa
info = 'We do not know what this is.'
quantity = Dimensionless
vif_scaling = None
match {
difvifkey = 05FF09
}
}
field {
name = beta
info = 'We do not know what this is.'
quantity = Dimensionless
vif_scaling = None
match {
difvifkey = 05FF0A
}
}
}
tests {
test {
comment = 'Long Frame'
args = 'Pressing kampress 77000317 NOKEY'
telegram = 32442D2C1703007701188D280080E39322DB8F78_22696600126967000269660005FF091954A33A05FF0A99BD823A02FD170800
json = '{"_":"telegram","media":"pressure","meter":"kampress","name":"Pressing","id":"77000317","status":"LOW","pressure_bar":1.02,"max_pressure_bar":1.03,"min_pressure_bar":1.02,"alfa_counter":0.001246,"beta_counter":0.000997,"timestamp":"1111-11-11T11:11:11Z"}'
fields = 'Pressing;77000317;LOW;1.02;1.03;1.02;1111-11-11 11:11.11'
}
test {
comment = 'Compact Frame'
args = 'Pressing kampress 77000317 NOKEY'
telegram = 27442D2C1703007701188D28FE48E39322E8F179DE735DD3660066006600E007883AA7F738BA0800
json = '{"_":"telegram","media":"pressure","meter":"kampress","name":"Pressing","id":"77000317","status":"LOW","pressure_bar":1.02,"max_pressure_bar":1.02,"min_pressure_bar":1.02,"alfa_counter":0.001038,"beta_counter":-0.000706,"timestamp":"1111-11-11T11:11:11Z"}'
fields = 'Pressing;77000317;LOW;1.02;1.02;1.02;1111-11-11 11:11.11'
}
}
}