8.5 Publisher-Plattform
IoTBoX unterstützt benutzerdefinierte Push-Protokolle zu Cloud-Plattformen
8.5.1 Integrierte Variablen
g: Globale Tabelle, kann in jeder Funktion aufgerufen und geändert werdenpublisher: Aktuelle Publisher-Plattform, der Typ ist Publisher
8.5.2 Grundarchitektur
Minimaler Code wie folgt
--@return number 初始化返回 固定为0
---@description Wird aufgerufen, wenn das Programm zum ersten Mal gestartet wird
---@usage Wird verwendet, um den für die Veröffentlichung erforderlichen Inhalt zu initialisieren, einschließlich Push-Protokoll, Protokollkonfiguration usw.
function Init()
return 0
end
---@return number 推送状态 0为OK,非零为推送失败
---@description Wird intern in einer Schleife zum Senden von Daten aufgerufen
---@usage Daten nach Format senden
function Push()
return 0
end
---@return number 格式化返回 固定返回0
---@description Wird intern in einer Schleife zur Datenformatierung aufgerufen
---@usage Das System ruft diese Funktion zur Datenformatierung auf, bevor Daten gesendet werden
function Format()
return 0
end
---@return number 连接状态 0表示连接成功,其他值表示未连接
---@description Das System ruft die Verbindungsfunktion auf, wenn die Verbindung fehlschlägt
---@usage Diese Funktion wird automatisch aufgerufen
function Connect()
return 0
end
---@return number 连接状态 0表示连接成功,其他值表示未连接
---@description Wird intern in einer Schleife aufgerufen, um den MQTT-Verbindungsstatus zu überprüfen
---@usage Rufen Sie diese Funktion in Szenarien, in denen die MQTT-Verbindung sichergestellt werden muss, wiederholt auf, um den Verbindungsstatus zu überwachen
function CheckConnect()
return 0
end- IoTBoX ruft während der Initialisierung die
Init-Funktion auf, um die Initialisierung der Publisher-Plattform abzuschließen - Nach der Initialisierung wird die
Connect-Funktion aufgerufen, um eine Verbindung zur Cloud-Plattform herzustellen. Gibt 0 zurück, wenn die Verbindung erfolgreich ist, sonst einen Wert ungleich 0 - IoTBoX ruft intern die
CheckConnect-Funktion in einer Schleife auf. Wenn sie einen Wert ungleich 0 zurückgibt, wird dieConnect-Funktion zur Wiederverbindung aufgerufen - IoTBoX führt in jedem Push-Zyklus die
Format-Funktion aus, um die erfassten Daten zu formatieren, gibt 0 zurück - Nach der Formatierung wird die
Push-Funktion aufgerufen, um Daten an die Cloud-Plattform zu senden. Gibt 0 zurück, wenn der Push erfolgreich ist, sonst einen Wert ungleich 0
8.5.3 Beispiel für MQTT-Plattformverbindung
function on_connect()
-- Nach der Verbindung behandeln
box.log("info","mqtt服务器已连接")
g.mqtt:Subscribe(g.control_topic,0)
init={};
init["device_id"] = publisher.gateway_id;
init["device_type"] = "gateway";
init["online"] = true;
g.mqtt:PushMessage(cjson.encode(init), g.data_topic,0,0);
end
function on_disconnect()
-- Nach der Trennung behandeln
box.log("warn","mqtt服务器离线")
end
function on_message(topic,message)
-- Empfangene Daten behandeln
box.log("debug",topic,message)
end
function Init()
-- Push initialisieren
g.control_topic="control_topic"
g.data_topic="data_topic"
g.mqtt=MqttClient()
g.mqtt.address=config.address;
if config.username ~=nil and #config.username~=0 then
g.mqtt.username=config.username
end
if config.password ~=nil and #config.password~=0 then
g.mqtt.password=config.password
end
g.mqtt.client_id=box.fingerprint;
g.mqtt.on_connect=on_connect
g.mqtt.on_disconnect=on_disconnect
g.mqtt.on_message=on_message
will={}
will["device_id"] = publisher.gateway_id
will["device_type"] = "gateway";
will["online"] = false;
g.mqtt.will_msg=cjson.encode(will)
g.mqtt.will_topic=g.data_topic
return 0
end
function Push()
box.log("debug","aaaaa push")
return g.mqtt:PushMessage(cjson.encode(publisher:GetMessage()),g.data_topic,0,0)
end
function Format()
box.log("debug","aaaaa format")
local origin_messages=publisher:GetOriginMessage()
local result_messages={}
for i, origin_message in ipairs(origin_messages) do
local one_message={}
one_message.device_id=origin_message.device_id
one_message.device_name=origin_message.device_name
one_message.device_state=origin_message.device_state
one_message.device_type=origin_message.device_type
one_message.ts=origin_message.ts
one_message.values={}
local index=1
for name, value in pairs(origin_message.values) do
value.name = name;
value.id = nil;
one_message.values[index]=value
index=index+1
end
result_messages[i]=one_message
end
publisher:SetMessage(result_messages)
return 0
end
--- 2
function Connect()
return g.mqtt:Connect()
end
function CheckConnect()
local r= g.mqtt:CheckConnect()
return r
end