/* Copyright (C) 2021 Olli Salonen (gpl-3.0-or-later)
Copyright (C) 2022-2026 Fredrik Öhrström (gpl-3.0-or-later)
Copyright (C) 2026 Hynek Moravec (gpl-3.0-or-later) */
driver {
name = minomess
meter_type = WaterMeter
default_fields = name,id,status,total_m3,target_m3,timestamp
detect {
mvt = ZRI,00,07
mvt = ZRI,01,16
mvt = ZRI,01,06
}
mfct_tpl_status_bits {
mask_bits = 0xf8
default_message = OK
map {
name = PERMANENT_ERROR
value = 0x08
test = Set
}
map {
name = TEMPORARY_ERROR
value = 0x10
test = Set
}
map {
name = WAS_LEAKING
value = 0x20
test = Set
}
map {
name = WAS_TAMPERED
value = 0x40
test = Set
}
map {
name = WAS_REMOVED
value = 0x80
test = Set
}
}
library {
use = total_m3
use = meter_date
use = meter_datetime
use = fabrication_no
use = operating_time_h
use = on_time_h
use = on_time_at_error_h
use = total_backward_m3
use = volume_flow_m3h
}
fields {
field {
name = target
quantity = Volume
info = 'The total water consumption recorded at the beginning of this month.'
match {
measurement_type = Instantaneous
vif_range = Volume
storage_nr = 8
}
}
field {
name = target
quantity = PointInTime
info = 'Date when target water consumption was recorded.'
display_unit = date
match {
measurement_type = Instantaneous
vif_range = Date
storage_nr = 8
}
}
field {
name = target
quantity = Volume
info = 'The total water consumption recorded at the beginning of this month.'
match {
measurement_type = Instantaneous
vif_range = Volume
storage_nr = 1
}
}
field {
name = target
quantity = PointInTime
info = 'Date when target water consumption was recorded.'
display_unit = date
match {
measurement_type = Instantaneous
vif_range = Date
storage_nr = 1
}
}
field {
name = status
quantity = Text
info = 'Status and error flags.'
attributes = STATUS,INCLUDE_TPL_STATUS
match {
difvifkey = 02FD17
}
lookup {
name = ERROR_FLAGS
map_type = BitToString
mask_bits = 0xffff
default_message = OK
// Status byte B (high byte)
map {
name = BURSTING
value = 0x8000
test = Set
}
map {
name = REMOVED
value = 0x4000
test = Set
}
map {
name = LEAKING
value = 0x2000
test = Set
}
map {
name = WAS_BACKFLOWING
value = 0x1000
test = Set
}
map {
name = BACKFLOWING
value = 0x0800
test = Set
}
map {
name = WAS_BLOCKED
value = 0x0400
test = Set
}
map {
name = UNDERSIZED
value = 0x0200
test = Set
}
map {
name = OVERSIZED
value = 0x0100
test = Set
}
// Status byte A (low byte)
map {
name = WAS_REMOVED
value = 0x0080
test = Set
}
map {
name = WAS_TAMPERED
value = 0x0040
test = Set
}
map {
name = WAS_LEAKING
value = 0x0020
test = Set
}
map {
name = TEMPORARY_ERROR
value = 0x0010
test = Set
}
map {
name = PERMANENT_ERROR
value = 0x0008
test = Set
}
map {
name = BATTERY_EOL
value = 0x0004
test = Set
}
map {
name = ABNORMAL_CONDITION
value = 0x0002
test = Set
}
}
}
}
tests {
test {
args = 'Mino minomess 15503451 NOKEY'
telegram = 6644496A1064035514377251345015496A0007EE0050052F2F_0C1359000000026CBE2B82046CA12B8C0413FFFFFFFF8D0493132CFBFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02FD1700002F2F
json = '{"_":"telegram","media":"water","meter":"minomess","name":"Mino","id":"15503451","meter_date":"2021-11-30","total_m3":0.059,"target_date":"2021-11-01","status":"OK","timestamp":"1111-11-11T11:11:11Z"}'
fields = 'Mino;15503451;OK;0.059;null;1111-11-11 11:11.11'
}
test {
args = 'Zenner_cold minomess 21314151 NOKEY'
telegram = 6644496A4425155518377251413121496A0116360050052F2F_0C1355000000026CEC2182046CE1218C0413000000808D0493132C33FE00008000008000008000008000008000008000008000008000008000008000008000008000008000008002FD1700002F2F
json = '{"_":"telegram","media":"cold water","meter":"minomess","name":"Zenner_cold","id":"21314151","meter_date":"2023-01-12","total_m3":0.055,"target_m3":80000,"target_date":"2023-01-01","status":"OK","timestamp":"1111-11-11T11:11:11Z"}'
fields = 'Zenner_cold;21314151;OK;0.055;80000;1111-11-11 11:11.11'
}
test {
args = 'Zenner_warm minomess 51413121 NOKEY'
telegram = 6644496A8753155518377221314151496A0106300050052F2F_0C1357000000026CEC2182046CE1218C0413000000808D0493132C33FE00008000008000008000008000008000008000008000008000008000008000008000008000008000008002FD1700002F2F
json = '{"_":"telegram","media":"warm water","meter":"minomess","name":"Zenner_warm","id":"51413121","meter_date":"2023-01-12","total_m3":0.057,"target_m3":80000,"target_date":"2023-01-01","status":"OK","timestamp":"1111-11-11T11:11:11Z"}'
fields = 'Zenner_warm;51413121;OK;0.057;80000;1111-11-11 11:11.11'
}
}
}