Aller au contenu principal

Configuration

Prérequis

ÉlémentDétail
MatérielEwon Flexy 201
FirmwareVersion 14.0 ou supérieure
RéseauLe port 8883 (MQTTS) doit être accessible en sortie vers streams-mqtt.magicbuilder.io
Compte IoT magic BuilderAPI Key et Device Developer ID (voir ci-dessous)

Étape 1 : Récupérer les identifiants IoT magic Builder

Depuis la plateforme IoT magic Builder, vous devez récupérer deux informations :

  • API Key : clé d'authentification de votre projet
  • Device Developer ID : identifiant unique de l'équipement sur la plateforme utilisé lors de la transmission des données
Comment les obtenir ?

Connectez-vous à votre espace IoT magic Builder, créez un équipement (ou sélectionnez un équipement existant) et récupérez l'API Key et le Device Developer ID depuis l'interface d'administration.


Étape 2 : Configurer les tags sur l'Ewon Flexy

Depuis l'interface web de votre Ewon Flexy, configurez vos tags (capteurs / variables) et assignez-les à un ou plusieurs groupes (A, B, C ou D).

info

Le script détecte automatiquement tous les tags configurés sur l'Ewon.

astuce

Les groupes permettent de regrouper les tags et de définir des fréquences d'envoi différentes pour chaque groupe.


Étape 3 : Déployer le script sur le Flexy

Installation

  1. Copiez le script eWON BASIC ci-dessous
  2. Modifiez les 3 lignes de configuration avec vos identifiants Magic Builder :
    • CONF_MQTTBrokerURL$ — URL du broker (ne pas modifier sauf indication contraire)
    • CONF_APIKey$ — votre API Key Magic Builder
    • CONF_DeviceDevID$ — le Device Developer ID de votre équipement
  3. Connectez-vous à l'interface web de votre Ewon Flexy
  4. Allez dans Setup > BASIC IDE
  5. Copiez-collez l'intégralité du script dans l'éditeur
  6. Cliquez sur Run

Script complet

Afficher / masquer le script eWON BASIC
Rem --- eWON start section: Init Section
eWON_init_section:
Rem --- eWON user (start)
//-->NAME : Magic Builder MQTTS - Flexy 201
//-->VERSION : 1.0
//-->DESCRIPTION
//This program pushes Tag values from Flexy 201 to IoT Magic Builder platform via MQTTS.
//Based on i4connected template, adapted for Magic Builder JSON v2 format.
//Supports full push (periodic) and on-change push per tag group (A, B, C, D).
//Includes local file buffer in case of communication loss.
//-->END DESCRIPTION
//
//-->REQUIREMENTS
//- Flexy 201 with firmware >= 14.0
//- Internet connection (Port 8883 must be open for MQTTS)
//- Tags configured and assigned to groups A, B, C or D
//-->END REQUIREMENTS
//-->CONFIGURATION MAGIC BUILDER (à personnaliser par Flexy)
//
//
CONF_MQTTBrokerURL$="streams-mqtt.magicbuilder.io" // <-- À MODIFIER
CONF_APIKey$="xxxxxx" // <-- À MODIFIER
CONF_DeviceDevID$="xxxxxxx" // <-- À MODIFIER
//
//
// Paramètres dérivés (ne pas modifier)
CONF_Username$ = CONF_APIKey$
CONF_Password$=""
CONF_Topic$ = CONF_APIKey$ + "/streams"
CONF_ClientID$ = "Flexy_" + GETSYS PRG, "SERNUM"
//-->TAG GROUPS CONFIGURATION
CONF_GROUPA$ = "1"
CONF_FullPushTime_GroupA$ = "300"
CONF_ChangePushTime_GroupA$ = "5"
CONF_GROUPB$ = "1"
CONF_FullPushTime_GroupB$ = "300"
CONF_ChangePushTime_GroupB$ = "5"
CONF_GROUPC$ = "1"
CONF_FullPushTime_GroupC$ = "300"
CONF_ChangePushTime_GroupC$ = "5"
CONF_GROUPD$ = "1"
CONF_FullPushTime_GroupD$ = "300"
CONF_ChangePushTime_GroupD$ = "5"
//-->END CONFIGURATION
// Convert string configs to integers
CONF_FullPushTime_GroupA% = VAL CONF_FullPushTime_GroupA$
CONF_ChangePushTime_GroupA% = VAL CONF_ChangePushTime_GroupA$
CONF_FullPushTime_GroupB% = VAL CONF_FullPushTime_GroupB$
CONF_ChangePushTime_GroupB% = VAL CONF_ChangePushTime_GroupB$
CONF_FullPushTime_GroupC% = VAL CONF_FullPushTime_GroupC$
CONF_ChangePushTime_GroupC% = VAL CONF_ChangePushTime_GroupC$
CONF_FullPushTime_GroupD% = VAL CONF_FullPushTime_GroupD$
CONF_ChangePushTime_GroupD% = VAL CONF_ChangePushTime_GroupD$
// Buffer configuration
MsgDBPath$ = "/usr/mqttbuffer/"
FS "mkdir", MsgDBPath$
MaxNumberBufferFiles% = 20000
indexbufferfile% = @MQTT_CheckLastFileNameOfBuffer%
IF CONF_ClientID$ = "" THEN CONF_ClientID$ = GETSYS PRG , "SerNum"
CLS
// Temp Variables
Last_ConnStatus% = -1
FullPushLastTimeSec_GroupA% = 0
ChangePushLastTimeSec_GroupA% = 0
FullPushLastTimeSec_GroupB% = 0
ChangePushLastTimeSec_GroupB% = 0
FullPushLastTimeSec_GroupC% = 0
ChangePushLastTimeSec_GroupC% = 0
FullPushLastTimeSec_GroupD% = 0
ChangePushLastTimeSec_GroupD% = 0
TempGroupsToPush_All$ = ""
TempGroupsToPush_OnChange$ = ""
// Quote character for JSON
Q$ = CHR$(34)
//START THE SCRIPT
@LOG("Generate CA Certificate for Magic Builder")
@Generate_CA_Certificate()
@LOG("Initialize MQTT, connect to broker: " + CONF_MQTTBrokerURL$)
MQTT "OPEN", CONF_ClientID$ , CONF_MQTTBrokerURL$
MQTT "SETPARAM", "Username", CONF_Username$
MQTT "SETPARAM", "Password", CONF_Password$
MQTT "SETPARAM", "PORT", "8883"
MQTT "SETPARAM", "KEEPALIVE", "10"
MQTT "SETPARAM", "TLSVersion", "tlsv1.2"
MQTT "SETPARAM", "CAFile", "/usr/MagicBuilderCA.crt"
SETSYS PRG,"RESUMENEXT",1
MQTT "CONNECT"
ErrorReturned% = GETSYS PRG,"LSTERR"
IF ErrorReturned% = 28 THEN @Log("WAN interface not yet ready. MQTT Launched anyway...")
SETSYS PRG,"RESUMENEXT",0
// Record Tag ONCHANGE events into an array
NB%= GETSYS PRG,"NBTAGS"
DIM a(NB%,2)
FOR i% = 0 TO NB%-1
k%=i%+1
SETSYS Tag, "load",-i%
a(k%,1)=-i%
a(k%,2) = 0
GroupA$= GETSYS TAG,"IVGROUPA"
GroupB$= GETSYS TAG,"IVGROUPB"
GroupC$= GETSYS TAG,"IVGROUPC"
GroupD$= GETSYS TAG,"IVGROUPD"
IF GroupA$ = "1" And CONF_GroupA$= "1" THEN Onchange -i%, "a("+ STR$ k%+",2)= 1"
IF GroupB$ = "1" And CONF_GroupB$= "1" THEN Onchange -i%, "a("+ STR$ k%+",2)= 1"
IF GroupC$ = "1" And CONF_GroupC$= "1" THEN Onchange -i%, "a("+ STR$ k%+",2)= 1"
IF GroupD$ = "1" And CONF_GroupD$= "1" THEN Onchange -i%, "a("+ STR$ k%+",2)= 1"
NEXT i%
// Set and Start Timer
MQTTProcess_CycleTime% = 1
ONTIMER 4, "GOTO MqttProcess"
TSET 4, MQTTProcess_CycleTime%
END
//============================================================================
// MQTT PUBLISH FUNCTION
//============================================================================
FUNCTION MQTT_Publish($json$)
$ConnStatus% = MQTT "STATUS"
IF $ConnStatus% = 5 THEN
MQTT "PUBLISH", CONF_Topic$, $json$, 2, 0
PRINT "Message sent to topic " + CONF_Topic$
ELSE
@MQTT_SaveMQTTEvent($json$)
ENDIF
ENDFN
//============================================================================
// CONNECTION CHECK - Send buffered messages when reconnected
//============================================================================
FUNCTION MQTT_CheckConnection()
$ConnStatus% = MQTT "STATUS"
IF Last_ConnStatus% <> $ConnStatus% THEN
IF $ConnStatus% = 5 THEN
@Log("Flexy connected to Magic Builder broker")
@MQTT_SendSavedEvents()
ELSE
@Log("Flexy disconnected from broker")
ENDIF
Last_ConnStatus% = $ConnStatus%
ENDIF
ENDFN
//============================================================================
// BUFFER FUNCTIONS - Save messages when offline
//============================================================================
FUNCTION MQTT_SaveMQTTEvent($Msg$)
IF indexbufferfile% < MaxNumberBufferFiles% THEN
CLOSE 1
OPEN "file:" + MsgDBPath$ + STR$ indexbufferfile% + ".txt" FOR BINARY OUTPUT AS 1
PUT 1, $Msg$
CLOSE 1
indexbufferfile% = indexbufferfile% + 1
@LOG("Flexy not connected - event saved to buffer")
ELSE
@LOG("Flexy not connected - buffer full, event not saved")
ENDIF
ENDFN
FUNCTION MQTT_SendSavedEvents()
@Log("Checking messages buffer...")
$FileCount% = FS "count", MsgDBPath$
$FlagExist% = 0
@Log(STR$ $FileCount% + " files to send.")
IF $FileCount% = 0 THEN RETURN
FOR $i% = 0 To MaxNumberBufferFiles%
$Exist% = -1
$FilePath$ = MsgDBPath$ + STR$ $i% + ".txt"
$Exist% = FS "size", $FilePath$
IF $Exist% <> -1 THEN
IF $FlagExist% = 0 THEN $FlagExist% = 1 : @Log("Starting with file " + $FilePath$)
$ConnStatus% = MQTT "STATUS"
IF $ConnStatus% = 5 THEN
CLOSE 2
OPEN "file:" + $FilePath$ FOR BINARY INPUT AS 2
$Msg$ = GET 2
MQTT "PUBLISH", CONF_Topic$, $Msg$, 2, 0
ERASE $FilePath$
CLOSE 2
$NbrMsg% = $NbrMsg% + 1
ELSE
RETURN
ENDIF
ELSE
IF $FlagExist% = 1 THEN
@LOG("All saved messages (" + STR$ $NbrMsg% + ") published.")
indexbufferfile% = 0
RETURN
ENDIF
ENDIF
NEXT $i%
@LOG("All saved messages (" + STR$ $NbrMsg% + ") published.")
indexbufferfile% = 0
ENDFN
FUNCTION MQTT_CheckLastFileNameOfBuffer%
$MQTT_CheckLastFileNameOfBuffer% = 0
@Log("Checking buffer last filename...")
$FileCount% =FS "count", MsgDBPath$
$FlagExist% = 0
IF $FileCount% = 0 THEN RETURN
FOR $i% = 0 To MaxNumberBufferFiles%
$Exist% = -1
$FilePath$ = MsgDBPath$ + STR$ $i% + ".txt"
$Exist% = FS "size", $FilePath$
IF $Exist% <> -1 THEN
$MQTT_CheckLastFileNameOfBufferTemp$ = $FilePath$
ENDIF
NEXT $i%
$MQTT_CheckLastFileNameOfBuffer% = VAL $MQTT_CheckLastFileNameOfBufferTemp$(16 To LEN($MQTT_CheckLastFileNameOfBufferTemp$)-4)
$MQTT_CheckLastFileNameOfBuffer% =$MQTT_CheckLastFileNameOfBuffer% + 1
ENDFN
FUNCTION GetUnixTimestamp%
TmpTime$ = Time$
TmpStr$ = TmpTime$(1 To 2)
TmpDay% = VAL TmpStr$
TmpStr$ = TmpTime$(4 To 5)
TmpMonth% = VAL TmpStr$
TmpStr$ = TmpTime$(7 To 10)
TmpYear% = VAL TmpStr$
TmpStr$ = TmpTime$(12 To 13)
TmpHour% = VAL TmpStr$
TmpStr$ = TmpTime$(15 To 16)
TmpMin% = VAL TmpStr$
TmpStr$ = TmpTime$(18 To 19)
TmpSec% = VAL TmpStr$
TmpDays% = (TmpYear% - 1970) * 365
TmpDays% = TmpDays% + ((TmpYear% - 1969) / 4)
IF TmpMonth% > 1 THEN TmpDays% = TmpDays% + 31
IF TmpMonth% > 2 THEN TmpDays% = TmpDays% + 28
IF TmpMonth% > 3 THEN TmpDays% = TmpDays% + 31
IF TmpMonth% > 4 THEN TmpDays% = TmpDays% + 30
IF TmpMonth% > 5 THEN TmpDays% = TmpDays% + 31
IF TmpMonth% > 6 THEN TmpDays% = TmpDays% + 30
IF TmpMonth% > 7 THEN TmpDays% = TmpDays% + 31
IF TmpMonth% > 8 THEN TmpDays% = TmpDays% + 31
IF TmpMonth% > 9 THEN TmpDays% = TmpDays% + 30
IF TmpMonth% > 10 THEN TmpDays% = TmpDays% + 31
IF TmpMonth% > 11 THEN TmpDays% = TmpDays% + 30
// Gérer le 29 février pour les années bissextiles
IF TmpMonth% > 2 THEN
$IsLeap% = 0
IF (TmpYear% MOD 4) = 0 THEN $IsLeap% = 1
IF (TmpYear% MOD 100) = 0 THEN $IsLeap% = 0
IF (TmpYear% MOD 400) = 0 THEN $IsLeap% = 1
TmpDays% = TmpDays% + $IsLeap%
ENDIF
TmpDays% = TmpDays% + TmpDay% - 1
$GetUnixTimestamp% = (TmpDays% * 86400) + (TmpHour% * 3600) + (TmpMin% * 60) + TmpSec%
ENDFN
//============================================================================
// JSON BUILDING - Magic Builder v2 Format
//============================================================================
// Build a single dataset entry for Magic Builder
FUNCTION BuildDatasetEntry$($group$, $index%, $tagname$, $value$, $timestamp%)
$ref$ = "Group_" + $group$ + "|" + STR$($index%) + "|" + $tagname$
$BuildDatasetEntry$ = "{" + Q$ + "ref" + Q$ + ":" + Q$ + $ref$ + Q$ + ","
$BuildDatasetEntry$ = $BuildDatasetEntry$ + Q$ + "type" + Q$ + ":" + Q$ + "Measure" + Q$ + ","
$BuildDatasetEntry$ = $BuildDatasetEntry$ + Q$ + "at" + Q$ + ":" + STR$($timestamp%) + ","
$BuildDatasetEntry$ = $BuildDatasetEntry$ + Q$ + "value" + Q$ + ":" + $value$ + "}"
ENDFN
// Get tag group letter (A, B, C, or D)
FUNCTION GetTagGroup$($negIndex%)
SETSYS Tag, "LOAD", $negIndex%
$GroupA$ = GETSYS TAG,"IVGROUPA"
$GroupB$ = GETSYS TAG,"IVGROUPB"
$GroupC$ = GETSYS TAG,"IVGROUPC"
$GroupD$ = GETSYS TAG,"IVGROUPD"
IF $GroupA$ = "1" THEN $GetTagGroup$ = "A" : RETURN
IF $GroupB$ = "1" THEN $GetTagGroup$ = "B" : RETURN
IF $GroupC$ = "1" THEN $GetTagGroup$ = "C" : RETURN
IF $GroupD$ = "1" THEN $GetTagGroup$ = "D" : RETURN
$GetTagGroup$ = ""
ENDFN
// Build complete JSON for all tags in specified groups
FUNCTION MQTT_ComputeJsonAllTags$($Group$)
$timestamp% = @GetUnixTimestamp%
$dataset$ = ""
$NBTags% = GETSYS PRG,"NBTAGS"
$first% = 1
FOR $i% = 0 TO $NBTags% - 1
SETSYS TAG, "LOAD", -$i%
$Tagname$ = GETSYS TAG,"NAME"
$GroupA$ = GETSYS TAG,"IVGROUPA"
$GroupB$ = GETSYS TAG,"IVGROUPB"
$GroupC$ = GETSYS TAG,"IVGROUPC"
$GroupD$ = GETSYS TAG,"IVGROUPD"
$TagValue$ = GETSYS TAG, "TAGVALUE"
$publish% = 0
$tagGroup$ = ""
$PosGroupA% = INSTR 1, $Group$, "A"
$PosGroupB% = INSTR 1, $Group$, "B"
$PosGroupC% = INSTR 1, $Group$, "C"
$PosGroupD% = INSTR 1, $Group$, "D"
IF $PosGroupA% <> 0 AND $GroupA$ = "1" AND CONF_GroupA$ = "1" THEN $publish% = 1 : $tagGroup$ = "A"
IF $PosGroupB% <> 0 AND $GroupB$ = "1" AND CONF_GroupB$ = "1" THEN $publish% = 1 : $tagGroup$ = "B"
IF $PosGroupC% <> 0 AND $GroupC$ = "1" AND CONF_GroupC$ = "1" THEN $publish% = 1 : $tagGroup$ = "C"
IF $PosGroupD% <> 0 AND $GroupD$ = "1" AND CONF_GroupD$ = "1" THEN $publish% = 1 : $tagGroup$ = "D"
IF $publish% = 1 THEN
IF $first% = 0 THEN $dataset$ = $dataset$ + ","
$dataset$ = $dataset$ + @BuildDatasetEntry$($tagGroup$, 0, $Tagname$, $TagValue$, $timestamp%)
$first% = 0
ENDIF
NEXT $i%
// Build complete Magic Builder JSON v2
$json$ = "{" + Q$ + "protocol" + Q$ + ":" + Q$ + "v2" + Q$ + ","
$json$ = $json$ + Q$ + "device" + Q$ + ":" + Q$ + CONF_DeviceDevID$ + Q$ + ","
$json$ = $json$ + Q$ + "at" + Q$ + ":" + STR$($timestamp%) + ","
$json$ = $json$ + Q$ + "data" + Q$ + ":{"
$json$ = $json$ + Q$ + "ver" + Q$ + ":" + Q$ + "S1" + Q$ + ","
$json$ = $json$ + Q$ + "dataset" + Q$ + ":[" + $dataset$ + "]}}"
$MQTT_ComputeJsonAllTags$ = $json$
ENDFN
// Build JSON for tags that have changed
FUNCTION MQTT_ComputeJsonChangeTags$($Group$)
$counter% = 0
$timestamp% = @GetUnixTimestamp%
$dataset$ = ""
$NB% = GETSYS PRG,"NBTAGS"
$first% = 1
FOR $r% = 1 TO $NB%
IF a($r%,2) = 1 THEN
$negIndex% = a($r%,1)
SETSYS Tag, "LOAD", $negIndex%
$GroupA$ = GETSYS TAG,"IVGROUPA"
$GroupB$ = GETSYS TAG,"IVGROUPB"
$GroupC$ = GETSYS TAG,"IVGROUPC"
$GroupD$ = GETSYS TAG,"IVGROUPD"
$PosGroupA% = INSTR 1, $Group$, "A"
$PosGroupB% = INSTR 1, $Group$, "B"
$PosGroupC% = INSTR 1, $Group$, "C"
$PosGroupD% = INSTR 1, $Group$, "D"
$publish% = 0
$tagGroup$ = ""
IF $PosGroupA% <> 0 AND $GroupA$ = "1" THEN $publish% = 1 : $tagGroup$ = "A"
IF $PosGroupB% <> 0 AND $GroupB$ = "1" THEN $publish% = 1 : $tagGroup$ = "B"
IF $PosGroupC% <> 0 AND $GroupC$ = "1" THEN $publish% = 1 : $tagGroup$ = "C"
IF $PosGroupD% <> 0 AND $GroupD$ = "1" THEN $publish% = 1 : $tagGroup$ = "D"
IF $publish% = 1 THEN
a($r%,2) = 0
$Tagname$ = GETSYS TAG, "NAME"
$TagValue$ = GETSYS TAG, "TAGVALUE"
IF $first% = 0 THEN $dataset$ = $dataset$ + ","
$dataset$ = $dataset$ + @BuildDatasetEntry$($tagGroup$, 0, $Tagname$, $TagValue$, $timestamp%)
$first% = 0
$counter% = $counter% + 1
ENDIF
ENDIF
NEXT $r%
IF $counter% <> 0 THEN
$json$ = "{" + Q$ + "protocol" + Q$ + ":" + Q$ + "v2" + Q$ + ","
$json$ = $json$ + Q$ + "device" + Q$ + ":" + Q$ + CONF_DeviceDevID$ + Q$ + ","
$json$ = $json$ + Q$ + "at" + Q$ + ":" + STR$($timestamp%) + ","
$json$ = $json$ + Q$ + "data" + Q$ + ":{"
$json$ = $json$ + Q$ + "ver" + Q$ + ":" + Q$ + "S1" + Q$ + ","
$json$ = $json$ + Q$ + "dataset" + Q$ + ":[" + $dataset$ + "]}}"
$MQTT_ComputeJsonChangeTags$ = $json$
ELSE
$MQTT_ComputeJsonChangeTags$ = ""
ENDIF
ENDFN
//============================================================================
// LOG FUNCTION
//============================================================================
FUNCTION Log($Msg$)
LOGEVENT "[Magic Builder MQTT] " + $Msg$, 100
PRINT "[Magic Builder] " + $Msg$
ENDFN
//============================================================================
// CA CERTIFICATE FOR MAGIC BUILDER (ISRG Root X1 - Let's Encrypt)
//============================================================================
FUNCTION Generate_CA_Certificate()
$CACRT$ = "-----BEGIN CERTIFICATE-----" + CHR$(13) + CHR$(10)
$CACRT$ = $CACRT$ +"MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw" + CHR$(13) + CHR$(10)
$CACRT$ = $CACRT$ +"TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh" + CHR$(13) + CHR$(10)
$CACRT$ = $CACRT$ +"cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4" + CHR$(13) + CHR$(10)
$CACRT$ = $CACRT$ +"WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu" + CHR$(13) + CHR$(10)
$CACRT$ = $CACRT$ +"ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY" + CHR$(13) + CHR$(10)
$CACRT$ = $CACRT$ +"MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc" + CHR$(13) + CHR$(10)
$CACRT$ = $CACRT$ +"h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+" + CHR$(13) + CHR$(10)
$CACRT$ = $CACRT$ +"0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U" + CHR$(13) + CHR$(10)
$CACRT$ = $CACRT$ +"A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW" + CHR$(13) + CHR$(10)
$CACRT$ = $CACRT$ +"T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH" + CHR$(13) + CHR$(10)
$CACRT$ = $CACRT$ +"B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC" + CHR$(13) + CHR$(10)
$CACRT$ = $CACRT$ +"B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv" + CHR$(13) + CHR$(10)
$CACRT$ = $CACRT$ +"KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn" + CHR$(13) + CHR$(10)
$CACRT$ = $CACRT$ +"OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn" + CHR$(13) + CHR$(10)
$CACRT$ = $CACRT$ +"jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw" + CHR$(13) + CHR$(10)
$CACRT$ = $CACRT$ +"qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI" + CHR$(13) + CHR$(10)
$CACRT$ = $CACRT$ +"rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV" + CHR$(13) + CHR$(10)
$CACRT$ = $CACRT$ +"HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq" + CHR$(13) + CHR$(10)
$CACRT$ = $CACRT$ +"hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL" + CHR$(13) + CHR$(10)
$CACRT$ = $CACRT$ +"ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ" + CHR$(13) + CHR$(10)
$CACRT$ = $CACRT$ +"3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK" + CHR$(13) + CHR$(10)
$CACRT$ = $CACRT$ +"NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5" + CHR$(13) + CHR$(10)
$CACRT$ = $CACRT$ +"ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur" + CHR$(13) + CHR$(10)
$CACRT$ = $CACRT$ +"TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC" + CHR$(13) + CHR$(10)
$CACRT$ = $CACRT$ +"jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc" + CHR$(13) + CHR$(10)
$CACRT$ = $CACRT$ +"oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq" + CHR$(13) + CHR$(10)
$CACRT$ = $CACRT$ +"4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA" + CHR$(13) + CHR$(10)
$CACRT$ = $CACRT$ +"mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d" + CHR$(13) + CHR$(10)
$CACRT$ = $CACRT$ +"emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=" + CHR$(13) + CHR$(10)
$CACRT$ = $CACRT$ +"-----END CERTIFICATE-----"
OPEN "file:/usr/MagicBuilderCA.crt" FOR BINARY OUTPUT AS 1
PUT 1, $CACRT$
CLOSE 1
ENDFN
//============================================================================
// MAIN PROCESS - Timer based publishing
//============================================================================
MqttProcess:
TSET 4,0
@MQTT_CheckConnection()
TimeSecTemp% = GETSYS PRG, "TIMESEC"
// Publish ALL Tags according to group timers
IF TimeSecTemp% - FullPushLastTimeSec_GroupA% >= CONF_FullPushTime_GroupA% THEN
FullPushLastTimeSec_GroupA% = TimeSecTemp%
TempGroupsToPush_All$ = TempGroupsToPush_All$ + "A"
ENDIF
IF TimeSecTemp% - FullPushLastTimeSec_GroupB% >= CONF_FullPushTime_GroupB% THEN
FullPushLastTimeSec_GroupB% = TimeSecTemp%
TempGroupsToPush_All$ = TempGroupsToPush_All$ + "B"
ENDIF
IF TimeSecTemp% - FullPushLastTimeSec_GroupC% >= CONF_FullPushTime_GroupC% THEN
FullPushLastTimeSec_GroupC% = TimeSecTemp%
TempGroupsToPush_All$ = TempGroupsToPush_All$ + "C"
ENDIF
IF TimeSecTemp% - FullPushLastTimeSec_GroupD% >= CONF_FullPushTime_GroupD% THEN
FullPushLastTimeSec_GroupD% = TimeSecTemp%
TempGroupsToPush_All$ = TempGroupsToPush_All$ + "D"
ENDIF
IF TempGroupsToPush_All$ <> "" THEN
@MQTT_Publish(@MQTT_ComputeJsonAllTags$(TempGroupsToPush_All$))
PRINT "[Magic Builder] Full push for Group(s) " + TempGroupsToPush_All$
TempGroupsToPush_All$ = ""
ENDIF
// Publish Tags that have changed according to group timers
IF TimeSecTemp% - ChangePushLastTimeSec_GroupA% >= CONF_ChangePushTime_GroupA% THEN
ChangePushLastTimeSec_GroupA% = TimeSecTemp%
TempGroupsToPush_OnChange$ = TempGroupsToPush_OnChange$ + "A"
ENDIF
IF TimeSecTemp% - ChangePushLastTimeSec_GroupB% >= CONF_ChangePushTime_GroupB% THEN
ChangePushLastTimeSec_GroupB% = TimeSecTemp%
TempGroupsToPush_OnChange$ = TempGroupsToPush_OnChange$ + "B"
ENDIF
IF TimeSecTemp% - ChangePushLastTimeSec_GroupC% >= CONF_ChangePushTime_GroupC% THEN
ChangePushLastTimeSec_GroupC% = TimeSecTemp%
TempGroupsToPush_OnChange$ = TempGroupsToPush_OnChange$ + "C"
ENDIF
IF TimeSecTemp% - ChangePushLastTimeSec_GroupD% >= CONF_ChangePushTime_GroupD% THEN
ChangePushLastTimeSec_GroupD% = TimeSecTemp%
TempGroupsToPush_OnChange$ = TempGroupsToPush_OnChange$ + "D"
ENDIF
IF TempGroupsToPush_OnChange$ <> "" THEN
Json$ = @MQTT_ComputeJsonChangeTags$(TempGroupsToPush_OnChange$)
IF Json$ <> "" THEN
@MQTT_Publish(Json$)
PRINT "[Magic Builder] OnChange push for Group(s) " + TempGroupsToPush_OnChange$
ENDIF
TempGroupsToPush_OnChange$ = ""
ENDIF
TSET 4, MQTTProcess_CycleTime%
END

Rem --- eWON user (end)
End
Rem --- eWON end section: Init Section
Interface BASIC IDE de l'Ewon Flexy avec le script Magic Builder en cours d'exécution
Interface BASIC IDE de l'Ewon Flexy avec le script Magic Builder en cours d'exécution
Cliquer pour ouvrir
info

Le script démarre automatiquement au redémarrage de l'Ewon.

Configuration optionnelle des groupes

Vous pouvez ajuster les intervalles d'envoi pour chaque groupe. Les valeurs sont en secondes :

ParamètreDescriptionValeur par défaut
CONF_GROUPA$Activer le groupe A ("1" = actif, "0" = inactif)"1"
CONF_FullPushTime_GroupA$Intervalle d'envoi complet (toutes les valeurs)"300" (5 min)
CONF_ChangePushTime_GroupA$Intervalle d'envoi sur changement"5" (5 sec)
astuce

Les mêmes paramètres existent pour les groupes B, C et D.

Vous ne trouvez pas la réponse à votre question ?

Contactez nous via notre outil de support