Bigmanekb (обсуждение | вклад) Нет описания правки |
Red (обсуждение | вклад) Нет описания правки |
||
| Строка 17: | Строка 17: | ||
{ | { | ||
"type": "CurrentTemperature", | "type": "CurrentTemperature", | ||
"link": { | "link": [ | ||
{ | |||
"type": "Double", | |||
"topicGet": "(1)/SENSOR", | |||
"inFunc": "JSON.parse(value).DS18B20.Temperature" | |||
} | |||
] | |||
} | } | ||
] | ] | ||
} | } | ||
] | ] | ||
} | } | ||
</syntaxhighlight>{{QuoteYellow|При этом хочется напомнить, что TopicSearch должен быть уникальным для каждого шаблона}} | </syntaxhighlight>{{QuoteYellow|При этом хочется напомнить, что TopicSearch должен быть уникальным для каждого шаблона}} | ||
| Строка 35: | Строка 37: | ||
Второй пример - если у вас есть датчик движения (например у камеры), который умеет отдавать определение движения и значение топика выглядит вот так:<syntaxhighlight lang="json"> | Второй пример - если у вас есть датчик движения (например у камеры), который умеет отдавать определение движения и значение топика выглядит вот так:<syntaxhighlight lang="json"> | ||
{"motion":true,"humanoid":false} | {"motion":true,"humanoid":false} | ||
</syntaxhighlight>соответственно в шаблоне мы можем использовать лишь его части, например motion:<syntaxhighlight lang="json" line="1"> | </syntaxhighlight>соответственно в шаблоне мы можем использовать лишь его части, например motion:<syntaxhighlight lang="json" line="1">{ | ||
"name": "Датчик движения", | "name": "Датчик движения", | ||
"manufacturer": "Xiaomi", | "manufacturer": "Xiaomi", | ||
| Строка 48: | Строка 49: | ||
{ | { | ||
"type": "MotionDetected", | "type": "MotionDetected", | ||
"link": { | "link": [ | ||
{ | |||
"type": "Integer", | |||
"topicGet": "(1)/(2)/alarm", | |||
"inFunc": "JSON.parse(value).motion" | |||
} | |||
] | |||
} | } | ||
] | ] | ||
} | } | ||
] | ] | ||
} | }</syntaxhighlight> | ||
</syntaxhighlight> | |||
Версия от 13:47, 19 июля 2025
Если вы являетесь владельцем DIY устройств с Tasmota или по каким то причинам ваше устройство отдает в MQTT топик значения в виде JSON строки, то можно сделать шаблон для Sprut.hub который сможет разобрать эту строку и использовать значения из нее.
Если вы не знаете куда "приземлить" тот или иной параметр, у хаба есть справочник, в котором перечислены все поддерживаемые сервисы и характеристики.
Разберем пример, когда значение в топике выглядит как:
{"Time":"2022-08-04T13:53:47","DS18B20":{"Temperature":27.2},"TempUnit":"C"}
То в шаблоне нужно будет просто вставить функцию inFunc, которая будет вычленять из строки с JSON нужную часть:
{
"name": "TH16 Temp",
"manufacturer": "Sonoff",
"model": "18B20",
"modelId": "(tele/name)/SENSOR",
"services": [
{
"type": "TemperatureSensor",
"characteristics": [
{
"type": "CurrentTemperature",
"link": [
{
"type": "Double",
"topicGet": "(1)/SENSOR",
"inFunc": "JSON.parse(value).DS18B20.Temperature"
}
]
}
]
}
]
}
При этом хочется напомнить, что TopicSearch должен быть уникальным для каждого шаблона
Если у вас уже где то в других шаблонах есть вероятность совпадения области поиска (в скобках) с другим шаблоном, то нужно сузить области поиска, например добавив туда неизменные текстовые части MQTT топиков чтобы сделать сегмент поиска уникальным.
Второй пример - если у вас есть датчик движения (например у камеры), который умеет отдавать определение движения и значение топика выглядит вот так:
{"motion":true,"humanoid":false}
соответственно в шаблоне мы можем использовать лишь его части, например motion:
{
"name": "Датчик движения",
"manufacturer": "Xiaomi",
"model": "MJSXJ02HL",
"modelId": "(mjsxj02hl_cam[0-9]{1,2})/(cam[0-9]{1,2})/alarm",
"catalogId": -1,
"services": [
{
"type": "MotionSensor",
"characteristics": [
{
"type": "MotionDetected",
"link": [
{
"type": "Integer",
"topicGet": "(1)/(2)/alarm",
"inFunc": "JSON.parse(value).motion"
}
]
}
]
}
]
}