{
"getSRN": "REDACTED",
"getVER": "Safe-Tech V3.56",
"getTYP": "140",
"getCNO": "REDACTED",
"getMAC": "0C:73:EB:XX:XX:XX",
"getAB": "1",
"getPRF": "1",
"getPRN": "2",
"getPN1": "Anwesend", "getPV1": "300", "getPT1": "120", "getPF1": "3500", "getPM1": "1", "getPR1": "0", "getPB1": "1", "getPA1": "1", "getPW1": "1",
"getPN2": "Abwesend", "getPV2": "30", "getPT2": "30", "getPF2": "3500", "getPM2": "1", "getPR2": "0", "getPB2": "1", "getPA2": "1", "getPW2": "0",
"getPN3": "Profile 3", "getPV3": "300", "getPT3": "60", "getPF3": "3500", "getPM3": "1", "getPR3": "0", "getPB3": "1", "getPA3": "0", "getPW3": "0",
"getPN4": "Profile 4", "getPV4": "300", "getPT4": "60", "getPF4": "3500", "getPM4": "1", "getPR4": "0", "getPB4": "1", "getPA4": "0", "getPW4": "0",
"getPN5": "Profile 5", "getPV5": "300", "getPT5": "60", "getPF5": "3500", "getPM5": "1", "getPR5": "0", "getPB5": "1", "getPA5": "0", "getPW5": "0",
"getPN6": "Profile 6", "getPV6": "300", "getPT6": "60", "getPF6": "3500", "getPM6": "1", "getPR6": "0", "getPB6": "1", "getPA6": "0", "getPW6": "0",
"getPN7": "Profile 7", "getPV7": "300", "getPT7": "60", "getPF7": "3500", "getPM7": "1", "getPR7": "0", "getPA7": "0", "getPB7": "1", "getPW7": "0",
"getPN8": "Profile 8", "getPV8": "300", "getPT8": "60", "getPF8": "3500", "getPM8": "1", "getPR8": "0", "getPB8": "1", "getPA8": "0", "getPW8": "0",
"getLWT": "90",
"getTMP": "0",
"getVLV": "20",
"getCEL": "229",
"getBAR": "4100 mbar",
"getFLO": "0",
"getNPS": "91589",
"getALA": "FF",
"getALM": "Alarms:->A4 A4 A4 AD FF FF FF FF",
"getDMA": "1",
"getAVO": "0mL",
"getVOL": "Vol[L]1093",
"getLTV": "4",
"get71": "0",
"getBAT": "9,55",
"getNET": "12,38",
"getBUZ": "1",
"getDBD": "10", "getDBT": "15", "getDST": "60", "getDCM": "3", "getDOM": "60", "getDPL": "10", "getDTC": "3",
"getDRP": "1",
"getWFC": "REDACTED", "getWFS": "2", "getWFR": "88",
"getRTC": "1785194436",
"getIDS": "1",
"getTMZ": "4",
"getFSL": [],
"getCND": "384", "getCNL": "0", "getCNF": "20",
"getSLP": "0", "getSLE": "0", "getSLV": "0", "getSLT": "0", "getSLF": "0",
"getWAD": "0",
"getAPT": "3600",
"getWIP": "REDACTED", "getWGW": "REDACTED",
"getSFV": "0"
}
Happy to run additional endpoints or test a detection patch.
Device report: SafeTech (V3.56, dk=140) not identified — shows "Unknown model" (Local/JSON
/safe-tec)Summary
Reporting an untested device as encouraged in the README. My SafeTech Connect works over the Local (JSON) API on base path
/safe-tec, but the integration does not identify it — the device shows"model": "Unknown model"in diagnostics. Core functionality (incl. the valve) appears to work; this is purely a model-detection gap.Device
getVER)Safe-Tech V3.56getTYP)140getSRN)2136…(masked)/safe-tec(port 5333)Unknown model← the issueWhat works
GET /safe-tec/set/ADM/(2)f→{"setADM(2)f":"FACTORY"}(HTTP 200).GET /safe-tec/get/allreturns a full payload (60 keys).getAB(control) andgetVLV(status) are both present, so the valve entity is created and reflects state correctly.The problem: model detection fails
detect_model()returnsUnknown modelfor this unit. Looking at thedk=140signatures inmodels.py, none match a V3:safetechv4expectsver_prefix "Safe-Tech V4"— this device reportsSafe-Tech V3.56.safetechexpectssrn_prefix "123"— this serial starts2136….safetechpolygonvatro/safetechrwcexpect other SRN prefixes / manufacturers.So a V3 SafeTech on
/safe-tecfalls through toUnknown model. A signature keyed onver_prefix "Safe-Tech V3"withbase_path "/safe-tec"would likely fix it. (Happy to test a patch.)Sanitized
/get/allpayloadSerial (
getSRN), Wi-Fi SSID (getWFC), IP/gateway (getWIP/getWGW),getCNOand the lower MAC bytes have been masked. Full values available privately if needed.{ "getSRN": "REDACTED", "getVER": "Safe-Tech V3.56", "getTYP": "140", "getCNO": "REDACTED", "getMAC": "0C:73:EB:XX:XX:XX", "getAB": "1", "getPRF": "1", "getPRN": "2", "getPN1": "Anwesend", "getPV1": "300", "getPT1": "120", "getPF1": "3500", "getPM1": "1", "getPR1": "0", "getPB1": "1", "getPA1": "1", "getPW1": "1", "getPN2": "Abwesend", "getPV2": "30", "getPT2": "30", "getPF2": "3500", "getPM2": "1", "getPR2": "0", "getPB2": "1", "getPA2": "1", "getPW2": "0", "getPN3": "Profile 3", "getPV3": "300", "getPT3": "60", "getPF3": "3500", "getPM3": "1", "getPR3": "0", "getPB3": "1", "getPA3": "0", "getPW3": "0", "getPN4": "Profile 4", "getPV4": "300", "getPT4": "60", "getPF4": "3500", "getPM4": "1", "getPR4": "0", "getPB4": "1", "getPA4": "0", "getPW4": "0", "getPN5": "Profile 5", "getPV5": "300", "getPT5": "60", "getPF5": "3500", "getPM5": "1", "getPR5": "0", "getPB5": "1", "getPA5": "0", "getPW5": "0", "getPN6": "Profile 6", "getPV6": "300", "getPT6": "60", "getPF6": "3500", "getPM6": "1", "getPR6": "0", "getPB6": "1", "getPA6": "0", "getPW6": "0", "getPN7": "Profile 7", "getPV7": "300", "getPT7": "60", "getPF7": "3500", "getPM7": "1", "getPR7": "0", "getPA7": "0", "getPB7": "1", "getPW7": "0", "getPN8": "Profile 8", "getPV8": "300", "getPT8": "60", "getPF8": "3500", "getPM8": "1", "getPR8": "0", "getPB8": "1", "getPA8": "0", "getPW8": "0", "getLWT": "90", "getTMP": "0", "getVLV": "20", "getCEL": "229", "getBAR": "4100 mbar", "getFLO": "0", "getNPS": "91589", "getALA": "FF", "getALM": "Alarms:->A4 A4 A4 AD FF FF FF FF", "getDMA": "1", "getAVO": "0mL", "getVOL": "Vol[L]1093", "getLTV": "4", "get71": "0", "getBAT": "9,55", "getNET": "12,38", "getBUZ": "1", "getDBD": "10", "getDBT": "15", "getDST": "60", "getDCM": "3", "getDOM": "60", "getDPL": "10", "getDTC": "3", "getDRP": "1", "getWFC": "REDACTED", "getWFS": "2", "getWFR": "88", "getRTC": "1785194436", "getIDS": "1", "getTMZ": "4", "getFSL": [], "getCND": "384", "getCNL": "0", "getCNF": "20", "getSLP": "0", "getSLE": "0", "getSLV": "0", "getSLT": "0", "getSLF": "0", "getWAD": "0", "getAPT": "3600", "getWIP": "REDACTED", "getWGW": "REDACTED", "getSFV": "0" }Notes / observations
getABuses the legacy numeric form ("1"= open), not booleantrue/false;getVLV": "20"(open) agrees.getALA": "FF"= no active alarm (getALMshows historicalA4/ADcodes only).SYR SafeTech Connectentries. One maps tobase_path "/trio"and would 404 for this device; the other two map to/safe-tec. Might be worth disambiguating the labels. (Separate concern from this device report — mentioning in case it's useful.)Happy to run additional endpoints or test a detection patch.