Интеграция в Fibaro Home Center 2
Рассмотрим формат API HTTP-GET запроса чтения значений счетчиков и датчиков.
http://ip_address/get/m2m/inputs?type=input_type&number=input_channel&hash=HASH
-
- ip_address – IP-адрес модуля в локальной сети
- input_type:
- analog
- digital
- oneWire
- specific
- input_channel: (0..N-1, где N - количество каналов данного типа) или 'All'
- HASH - дайджест (результат) хэширования пароля пользователя алгоритмом MD5 (может быть получен, например, на online-ресурсе http://www.sha1-online.com
Полный список и формат поддерживаемых модулем запросов можно посмотреть на вкладке API в WEB-интерфейсе модуля и на сайте производителя.
На запрос вида (запрашивается телеметрическая информация со счетчика электроэнергии):
http://192.168.XXX.YYY/get/m2m/inputs?type=specific&number=All&hash=21232f297a57a5a743894a0e4a801fc3
Модуль PCR-6.0.1-E отвечает в JSON-формате:
{
"inputs":
{
"type":"specific",
"total_numbers":1,
"data":[{
"type":"Mercury",
"phaseQnty":1,
"connect":1,
"addr":35618596,
"sn":35618596,
"manufacture":"12.08.18",
"version":"1.0",
"Vbat":3.6,
"lastRestore":"16.01.19 (12:38:02)",
"lastFail":"15.01.19 (10:20:20)",
"tarifQnty":2,
"values":{
"U":231,
"I":0,
"W":1,
"F":49.99,
"energy":{
"T1":1.67,
"T2":0.06,
"sum":1.73},
"energyBeginMonth":{
"Jan":"1.49/0.06/0.00/0.00",
"Feb":"1.67/0.06/0.00/0.00",
"Mar":"0.00/0.00/0.00/0.00",
"Apr":"0.00/0.00/0.00/0.00",
"May":"0.00/0.00/0.00/0.00",
"Jun":"0.00/0.00/0.00/0.00",
"Jul":"0.00/0.00/0.00/0.00",
"Aug":"0.00/0.00/0.00/0.00",
"Sep":"0.59/0.00/0.00/0.00",
"Oct":"0.59/0.00/0.00/0.00",
"Nov":"0.59/0.00/0.00/0.00",
"Dec":"1.47/0.06/0.00/0.00"},
"T":1}
}
]},
"error_device":0
}
В главном цикле VD_Счетчики вначале производится настройка параметров TCP соединения
local thisDevice = fibaro:getSelfId();
local ip = fibaro:getValue(thisDevice, 'IPAddress');
local port = fibaro:getValue(thisDevice, 'TCPPort');
local hash = "21232f297a57a5a743894a0e4a801fc3"
Обращение к модулю PCR-6.0.1-E выполняется в функции processDevice():
function processDevice()
HC2 = Net.FHttp(ip, port);
response = HC2:GET("/get/m2m/inputs?type=specific&number=All&hash="..hash)
meterJSON = processJSON(response)
if meterJSON ~= nil then
processMeter(meterJSON)
end
response = HC2:GET("/get/m2m/inputs?type=digital&number=All&hash="..hash)
digitalJSON = processJSON(response)
if digitalJSON ~= nil then
processDigital(digitalJSON)
end
response = HC2:GET("/get/m2m/inputs?type=analog&number=All&hash="..hash)
analogJSON = processJSON(response)
if analogJSON ~= nil then
processAnalog(analogJSON)
end
response = HC2:GET("/get/m2m/inputs?type=oneWire&number=All&hash="..hash)
oneWireJSON = processJSON(response)
if oneWireJSON ~= nil then
processOneWire(oneWireJSON)
end
end
А обработка JSON-ответов модуля реализована в функции processJSON(responseJSON):
function processJSON(responseJSON)
if #responseJSON == 0 then
fibaro:debug("Empty response from API. Check ID.")
return nil
end
local jsonTbl= json.decode(responseJSON)
if jsonTbl==nil then
-- Oeps... Decode is empty...
if #responseJSON == 0 then
fibaro:debug("HC2 response is valid, but empty")
return nil
end
fibaro:debug("JSON decode failed for: "..responseJSON)
return nil
end
return jsonTbl
end
Скачать готовое виртуальное устройство VD_Счетчики для Fibaro HC2 можно в разделе "Документация" на устройство
После установки виртуального устройства в контроллер Fibaro HC2 надо в настройках этого виртуального устройства задать IP-адрес модуля PCR-6.0.1-E, порт 80, а в тексте главного цикла программы локальной переменной hash присвоить значение реального hash от установленного пароля пользователя. После сохранения модифицированного виртуального устройства оно начнет получение данных от модуля и отображение их в WEB-интерфейсе автоматики Fibaro HC2, а так же в мобильных приложениях для iOS и Android.