Changes for page BACnet
Last modified by Kilight Cao on 2025/06/03 14:23
From version 11.1
edited by Kilight Cao
on 2023/04/01 11:48
on 2023/04/01 11:48
Change comment:
There is no comment for this version
To version 33.1
edited by Kilight Cao
on 2025/06/03 14:15
on 2025/06/03 14:15
Change comment:
There is no comment for this version
Summary
-
Page properties (1 modified, 0 added, 0 removed)
-
Attachments (0 modified, 13 added, 0 removed)
- LHT65N_TTN_to_BACnet.json
- image-20230401142357-8.png
- image-20230401144525-9.png
- image-20230401144951-10.png
- image-20250603115501-1.png
- image-20250603134617-2.png
- image-20250603134823-3.png
- image-20250603134854-4.png
- image-20250603135033-5.png
- image-20250603140126-6.png
- image-20250603140340-7.png
- image-20250603140746-8.png
- image-20250603141358-9.png
Details
- Page properties
-
- Content
-
... ... @@ -18,142 +18,135 @@ 18 18 === 1.1.2 List supported products and requirements === 19 19 20 20 21 -Gateway model: LPS8v2,LG01v2,MS20 21 +Gateway model: LPS8v2,LG01v2,MS20,MS48-LR 22 22 23 23 24 -= =1.2Downloadand InstalltheBACnet ==24 += 2. Bridge LoRaWAN network to BACnet network = 25 25 26 26 27 -(% class="box infomessage" %) 28 -((( 29 -wget [[http:~~/~~/dragino.vicp.io:6080/bacnet/dragino-bacnet-apps-hp0c-2023-03-01.deb>>url:http://dragino.vicp.io:6080/bacnet/dragino-bacnet-apps-hp0c-2023-03-01.deb]] 30 -dpkg -i dragino-bacnet-apps-hp0c-2023-03-01.deb 31 -))) 27 +By following the steps below in the configuration example, Users can convert the uplink data of the lorawan sensor to BACnet data 32 32 33 - [[image:image-20230401114036-1.png]]29 +LPS8v2 includes a local ChirpStack Server. This example shows how to configure SN50V3_LB to use with BACnet. This example assumes users already have: 34 34 31 +* SN50V3_LB register on LPS8v2 Built-In ChirpStack server already 32 +* The user is able to see the data on the built-in ChirpStack server device page. 35 35 36 - ===1.3Configure BACnet===34 +Below are the steps to configure lps8v2 BACnet. 37 37 38 -After BACnet is installed, run commands to modify BACnet configurations 39 39 40 - **Note:device_portand bacnet_ip_portare notset to the same**37 +== 2.1 Register gateway == 41 41 42 -(% class="box infomessage" %) 43 -((( 44 -nano /etc/config/bacnet 45 -))) 46 46 47 - **Examples:**40 +For information on how to register a gateway connection to chirpstack, please refer to the link: 48 48 49 -(% class="box infomessage" %) 50 -((( 51 -config settings 'general' 52 - option bacnet_ip '10.130.2.80' #The IP address of the BACnetIP network, here basically the same IP as the bbmd address below 53 - option bacnet_ip_port '47808' #As with bbmd_port, the purpose of this is to register a Bacnet Server application as a bbmd registration server 54 - option bbmd_address '10.130.2.80' #bbmd is the BACnet registration server. Only one bbmd server is required in the same ip network 55 - option bbmd_port '47808' #In general, 47808 is used as the default port 56 - option bacnet_dev_count '2' #Here is the number of BACnet devices that need to be simulated, if the number is 2, then the following settings must have 2, which are bacdev_1, bacdev_2 57 -))) 42 +**[[https:~~/~~/wiki.dragino.com/xwiki/bin/view/Main/Notes%20for%20ChirpStack/#H4.A0SemtechUDPforChirpStackv4>>https://wiki.dragino.com/xwiki/bin/view/Main/Notes%20for%20ChirpStack/#H4.A0SemtechUDPforChirpStackv4]]** 58 58 59 -(% class="box infomessage" %) 60 -((( 61 -config settings 'bacdev_1' 62 - option device_name 'LHT65N-1' #The identification name of the bacnet device 63 - option device_id '10001' #The unique identification code in the same network segment of BACnet,Scope is(1 - 4194302) 64 - option device_port '47912' #The IP port occupied by Bacnet when it starts, Scope is (1024 - 65535) 65 -))) 66 66 67 -(% class="box infomessage" %) 68 -((( 69 -config settings 'bacdev_2' 70 - option device_name 'LHT65N-2' 71 - option device_id '10002' 72 - option device_port '47913' 73 -))) 45 +== 2.2 Register Node == 74 74 75 - ===1.4RunBACnet===47 +For information on how to register a Node connection to chirpstack, please refer to the link: 76 76 77 - Afterthe configurationiscomplete, runhellowingcommandstartBACnet, The following aretwo waystoun BACnet:49 +**[[https:~~/~~/wiki.dragino.com/xwiki/bin/view/Main/Notes%20for%20ChirpStack/#H2.A0Nodeusageintroduction>>https://wiki.dragino.com/xwiki/bin/view/Main/Notes%20for%20ChirpStack/#H2.A0Nodeusageintroduction]]** 78 78 79 -(1) With /etc/config/bacnet configuration, and to run the registration server on the current machine, start it with the following command (configure the /etc/config/bacnet file correctly): 80 80 81 -(% class="box infomessage" %) 82 -((( 83 -bacserver -c -s 84 -))) 52 +== 2.3 Configure BACnet == 85 85 86 - (2) Without /etc/config/bacnet, andtorunthe registrationserveronthecurrentmachine, startit with the followingcommand:54 +After completing the steps of registering the gateway and nodes as mentioned above, start configuring BACnet 87 87 88 -(% class="box infomessage" %) 89 -((( 90 -bacserver -s -a 10.130.2.80 -p 47808 91 -))) 56 +Video on the configuration of BACnet: 92 92 93 -This command simulates two devices, with device IDs 47910 and 47911 94 94 95 - Enterbacserver-htooutput help59 +=== Step 1. Enable BACnet === 96 96 97 -(% class="box infomessage" %) 98 -((( 99 -bacserver -h 100 -))) 61 +First, Uesrs need to click "**BACnet~-~->BACnet Server**" in the page 101 101 102 - [[image:image-20230401114458-2.png]]63 +1.(% style="color:blue" %)**Enable BACnet**(%%):enable/ disable the BACnet mode 103 103 104 - === 1.5Readdevicesandmodify devices ===65 +2.(% style="color:blue" %)**Mode**(%%):Configure the UDP mode 105 105 106 - Enteraccli-hto outputhelp67 +3.(% style="color:blue" %)**UDP Port**(%%):UDP/IP port number for BACnet/IP communications. 107 107 108 -(% class="box infomessage" %) 109 -((( 110 -baccli -h 111 -))) 69 +4.(% style="color:blue" %)**Device ID**(%%):This is the unique BACnet device identifier. The user has to be careful to avoid conflicts, by choosing an identifier, that is not currently used on the network. 112 112 71 +5.(% style="color:blue" %)**Device Name**(%%):Determined by the manufacturer, indicating the device model. 113 113 114 - [[image:image-20230401114641-3.png]]73 +6.(% style="color:blue" %)**Enable BBMD**(%%):BBMD is a "BACnet/IP Broadcast Management Device" and is used to distribute BACnet broadcast messages throughout a BACnet/IP network consisting of interconnected TCP/IP sub-networks. A BBMD forwards BACnet/IP broadcast messages sent by devices connected to its subnet to peer BBMDs. Upon arrival at a destination BBMD, the message is then re-broadcast on that subnet. BACnet/IP broadcast messages are also sent to registered BACnet/IP Foreign Devices. 115 115 116 -** Examples:**75 +7.(% style="color:blue" %)**BBMD IP Address**(%%):IPv4 address of BBMD or external device registrar. 117 117 118 -( 1)ListtheentBacnet devices:77 +8.(% style="color:blue" %)**BBMD IP Port**(%%):UDP/IP port number for external device registration 119 119 120 -(% class="box infomessage" %) 121 -((( 122 -baccli -l -a 123 -))) 79 +9.(% style="color:blue" %)**BBMD Subnet Mask**(%%):UDP/IP Subnet Mask number for external device registration 124 124 81 +10.(% style="color:blue" %)**BBMD TimeToLive**(%%):Number of seconds used in Foreign Device Registration. 125 125 126 - [[image:image-20230401114653-4.png]]83 +11.(% style="color:blue" %)**Save&Apply**(%%):Click after the configuration is completed 127 127 128 - (2)Listdeviceinformation basedondevice ID:85 +12.(% style="color:blue" %)**Refresh**(%%):Refresh the configuration 129 129 130 -(% class="box infomessage" %) 131 -((( 132 -baccli -l -i id 133 -))) 87 +[[image:image-20250603115501-1.png]] 134 134 135 135 136 - [[image:image-20230401114706-5.png]]90 +After starting BACnet, use Yabe BACnet tool to check 137 137 138 - (3)List the device detailsbydeviceID:92 +Click the "[[image:image-20250603134823-3.png]]" to configure the connection to BACnet. Note that the Port needs to match the previous step, and the local endpoint is the address of the local host 139 139 140 -(% class="box infomessage" %) 141 -((( 142 -baccli -l -v -i id 143 -))) 94 +[[image:image-20250603134617-2.png||height="795" width="1262"]] 144 144 145 - (4) Modify thespecifiedattributevalue based onthedeviceID:96 +[[image:image-20250603134854-4.png||height="796" width="1262"]] 146 146 147 -(% class="box infomessage" %) 148 -((( 149 -baccli -i id -p prop -w value 150 -))) 151 151 99 +=== Step 2. Configure BACnet Object === 152 152 153 -[[image:image-20230401114720-6.png]] 154 154 155 -The user can checkthedataofthedevice by using the**[[yabeool>>https://sourceforge.net/projects/yetanotherbacnetexplorer/]]**102 +The user returns to the "**BACnet~-~->BACnet Object**" interface to generate object data 156 156 157 - [[image:image-20230401114729-7.png||height="521"width="1077"]]104 +(% style="color:blue" %)**Object Name**(%%):Show the name of the BACnet object already created. 158 158 106 +(% style="color:blue" %)**Object Type**(%%):Show the type of the BACnet object already created. 107 + 108 +(% style="color:blue" %)**Object Value**(%%):Show the Object value of the BACnet object already created. 109 + 110 +(% style="color:blue" %)**Object Units**(%%):Show the units of the BACnet object already created. 111 + 112 +(% style="color:blue" %)**Object Description**(%%):Set the description of the BACnet object. 113 + 114 +(% style="color:blue" %)**Last Seen**(%%):Show the latest update time of the current value of the BACnet object already created. 115 + 116 +[[image:image-20250603135033-5.png]] 117 + 118 + 119 +When the chirpstack built into the gateway can view the decoded data, click "**Create Objects**" in the "**BACnet~-~->BACnet Object**" page to check the sensor data and add it to the BACnet Object. 120 + 121 +[[image:image-20250603140126-6.png||height="656" width="1247"]] 122 + 123 + 124 +For example, configure the BACnet sensor data as follows 125 + 126 +1.(% style="color:blue" %)**Create Objects**(%%):Create Object 127 + 128 +2.(% style="color:blue" %)**LoRa Device**(%%):Select the sensor device DevEUI that needs to be added 129 + 130 +3.(% style="color:blue" %)**Decode key**(%%):Select the required sensor decoding data 131 + 132 +4.(% style="color:blue" %)**Object Name**(%%):Configure object Name 133 + 134 +5.(% style="color:blue" %)**Object Type**(%%):Select Object Type 135 + 136 +6.(% style="color:blue" %)**Object Units**(%%):Select the Object unit 137 + 138 +7.(% style="color:blue" %)**Object Descripyion**(%%):Set the description of the BACnet object. 139 + 140 +8.(% style="color:blue" %)**Create** 141 + 142 +[[image:image-20250603140746-8.png||height="577" width="1342"]] 143 + 144 +=== step 3. Check Result === 145 + 146 +After completing all the above configurations, check the BACnet data 147 + 148 +[[image:image-20250603141358-9.png||height="846" width="1342"]] 149 + 150 + 151 + 159 159
- LHT65N_TTN_to_BACnet.json
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.Kilight - Size
-
... ... @@ -1,0 +1,1 @@ 1 +8.2 KB - Content
-
... ... @@ -1,0 +1,334 @@ 1 +[ 2 + { 3 + "id": "b356382079d5c6a0", 4 + "type": "tab", 5 + "label": "TTN to BACnet", 6 + "disabled": false, 7 + "info": "", 8 + "env": [] 9 + }, 10 + { 11 + "id": "f66b1b60040f4067", 12 + "type": "template", 13 + "z": "b356382079d5c6a0", 14 + "name": "LHT65N-1 10001 battery", 15 + "field": "payload", 16 + "fieldType": "msg", 17 + "format": "handlebars", 18 + "syntax": "mustache", 19 + "template": "baccli -i 10001 -p battery -w {{payload}}\n", 20 + "output": "str", 21 + "x": 590, 22 + "y": 100, 23 + "wires": [ 24 + [ 25 + "d9290c0c62e0f7c0", 26 + "cc39d099b49cf9fe" 27 + ] 28 + ] 29 + }, 30 + { 31 + "id": "d9290c0c62e0f7c0", 32 + "type": "exec", 33 + "z": "b356382079d5c6a0", 34 + "command": "", 35 + "addpay": "payload", 36 + "append": "", 37 + "useSpawn": "false", 38 + "timer": "", 39 + "winHide": false, 40 + "oldrc": false, 41 + "name": "EXEC", 42 + "x": 1050, 43 + "y": 220, 44 + "wires": [ 45 + [ 46 + "af8dbd68b05f6313" 47 + ], 48 + [ 49 + "af8dbd68b05f6313" 50 + ], 51 + [] 52 + ] 53 + }, 54 + { 55 + "id": "cc39d099b49cf9fe", 56 + "type": "debug", 57 + "z": "b356382079d5c6a0", 58 + "name": "Full Script", 59 + "active": true, 60 + "tosidebar": true, 61 + "console": false, 62 + "tostatus": false, 63 + "complete": "payload", 64 + "targetType": "msg", 65 + "statusVal": "", 66 + "statusType": "auto", 67 + "x": 1040, 68 + "y": 100, 69 + "wires": [] 70 + }, 71 + { 72 + "id": "af8dbd68b05f6313", 73 + "type": "debug", 74 + "z": "b356382079d5c6a0", 75 + "name": "output", 76 + "active": true, 77 + "tosidebar": true, 78 + "console": false, 79 + "tostatus": false, 80 + "complete": "payload", 81 + "targetType": "msg", 82 + "statusVal": "", 83 + "statusType": "auto", 84 + "x": 1210, 85 + "y": 220, 86 + "wires": [] 87 + }, 88 + { 89 + "id": "866c4581bd0de190", 90 + "type": "mqtt in", 91 + "z": "b356382079d5c6a0", 92 + "name": "LHT65N-1", 93 + "topic": "v3/5000000@ttn/devices/eui-d0a7a83cc714b96f/up", 94 + "qos": "0", 95 + "datatype": "auto-detect", 96 + "broker": "d1413e55f801d787", 97 + "nl": false, 98 + "rap": true, 99 + "rh": 0, 100 + "inputs": 0, 101 + "x": 120, 102 + "y": 140, 103 + "wires": [ 104 + [ 105 + "09bb2ca9b68d9137", 106 + "3b08d85a66d0c58a" 107 + ] 108 + ] 109 + }, 110 + { 111 + "id": "09bb2ca9b68d9137", 112 + "type": "function", 113 + "z": "b356382079d5c6a0", 114 + "name": "function 3", 115 + "func": "var data = msg.payload\nvar bat = data[\"uplink_message\"][\"decoded_payload\"][\"BatV\"]\nvar tem = data[\"uplink_message\"][\"decoded_payload\"][\"TempC_DS\"]\nvar tem2 = data[\"uplink_message\"][\"decoded_payload\"][\"TempC_SHT\"]\nvar hum = data[\"uplink_message\"][\"decoded_payload\"][\"Hum_SHT\"]\nvar data2 = {payload: bat},data3={payload:tem},data4={payload:tem2},data5={payload:hum}\n//return data2\nreturn[data2,data3,data4,data5]", 116 + "outputs": 4, 117 + "noerr": 0, 118 + "initialize": "", 119 + "finalize": "", 120 + "libs": [], 121 + "x": 340, 122 + "y": 200, 123 + "wires": [ 124 + [ 125 + "f66b1b60040f4067", 126 + "0cf8a6fc743b8619" 127 + ], 128 + [ 129 + "2f48e806d3e4bd5e", 130 + "0cf8a6fc743b8619" 131 + ], 132 + [ 133 + "0cf8a6fc743b8619", 134 + "15c7503d379cb571" 135 + ], 136 + [ 137 + "700c1799a8cd28a1", 138 + "0cf8a6fc743b8619" 139 + ] 140 + ] 141 + }, 142 + { 143 + "id": "0cf8a6fc743b8619", 144 + "type": "debug", 145 + "z": "b356382079d5c6a0", 146 + "name": "debug 5", 147 + "active": true, 148 + "tosidebar": true, 149 + "console": false, 150 + "tostatus": false, 151 + "complete": "payload", 152 + "targetType": "msg", 153 + "statusVal": "", 154 + "statusType": "auto", 155 + "x": 340, 156 + "y": 80, 157 + "wires": [] 158 + }, 159 + { 160 + "id": "3b08d85a66d0c58a", 161 + "type": "debug", 162 + "z": "b356382079d5c6a0", 163 + "name": "debug 6", 164 + "active": true, 165 + "tosidebar": true, 166 + "console": false, 167 + "tostatus": false, 168 + "complete": "false", 169 + "statusVal": "", 170 + "statusType": "auto", 171 + "x": 160, 172 + "y": 240, 173 + "wires": [] 174 + }, 175 + { 176 + "id": "2f48e806d3e4bd5e", 177 + "type": "template", 178 + "z": "b356382079d5c6a0", 179 + "name": "LHT65N-1 10001 temp1", 180 + "field": "payload", 181 + "fieldType": "msg", 182 + "format": "handlebars", 183 + "syntax": "mustache", 184 + "template": "baccli -i 10001 -p temp1 -w {{payload}}\n", 185 + "output": "str", 186 + "x": 590, 187 + "y": 160, 188 + "wires": [ 189 + [ 190 + "046eca291b77ebd3" 191 + ] 192 + ] 193 + }, 194 + { 195 + "id": "15c7503d379cb571", 196 + "type": "template", 197 + "z": "b356382079d5c6a0", 198 + "name": "LHT65N-1 10001 temp2", 199 + "field": "payload", 200 + "fieldType": "msg", 201 + "format": "handlebars", 202 + "syntax": "mustache", 203 + "template": "baccli -i 10001 -p temp2 -w {{payload}}", 204 + "output": "str", 205 + "x": 590, 206 + "y": 220, 207 + "wires": [ 208 + [ 209 + "56c2605dd962c0d4" 210 + ] 211 + ] 212 + }, 213 + { 214 + "id": "56c2605dd962c0d4", 215 + "type": "delay", 216 + "z": "b356382079d5c6a0", 217 + "name": "", 218 + "pauseType": "delay", 219 + "timeout": "4", 220 + "timeoutUnits": "seconds", 221 + "rate": "1", 222 + "nbRateUnits": "1", 223 + "rateUnits": "second", 224 + "randomFirst": "1", 225 + "randomLast": "5", 226 + "randomUnits": "seconds", 227 + "drop": false, 228 + "allowrate": false, 229 + "outputs": 1, 230 + "x": 800, 231 + "y": 220, 232 + "wires": [ 233 + [ 234 + "d9290c0c62e0f7c0" 235 + ] 236 + ] 237 + }, 238 + { 239 + "id": "046eca291b77ebd3", 240 + "type": "delay", 241 + "z": "b356382079d5c6a0", 242 + "name": "", 243 + "pauseType": "delay", 244 + "timeout": "2", 245 + "timeoutUnits": "seconds", 246 + "rate": "1", 247 + "nbRateUnits": "1", 248 + "rateUnits": "second", 249 + "randomFirst": "1", 250 + "randomLast": "5", 251 + "randomUnits": "seconds", 252 + "drop": false, 253 + "allowrate": false, 254 + "outputs": 1, 255 + "x": 800, 256 + "y": 160, 257 + "wires": [ 258 + [ 259 + "d9290c0c62e0f7c0" 260 + ] 261 + ] 262 + }, 263 + { 264 + "id": "700c1799a8cd28a1", 265 + "type": "template", 266 + "z": "b356382079d5c6a0", 267 + "name": "LHT65N-1 10001 humidity", 268 + "field": "payload", 269 + "fieldType": "msg", 270 + "format": "handlebars", 271 + "syntax": "mustache", 272 + "template": "baccli -i 10001 -p humidity -w {{payload}}", 273 + "output": "str", 274 + "x": 590, 275 + "y": 280, 276 + "wires": [ 277 + [ 278 + "9a8f158109d93abb" 279 + ] 280 + ] 281 + }, 282 + { 283 + "id": "9a8f158109d93abb", 284 + "type": "delay", 285 + "z": "b356382079d5c6a0", 286 + "name": "", 287 + "pauseType": "delay", 288 + "timeout": "6", 289 + "timeoutUnits": "seconds", 290 + "rate": "1", 291 + "nbRateUnits": "1", 292 + "rateUnits": "second", 293 + "randomFirst": "1", 294 + "randomLast": "5", 295 + "randomUnits": "seconds", 296 + "drop": false, 297 + "allowrate": false, 298 + "outputs": 1, 299 + "x": 800, 300 + "y": 280, 301 + "wires": [ 302 + [ 303 + "d9290c0c62e0f7c0" 304 + ] 305 + ] 306 + }, 307 + { 308 + "id": "d1413e55f801d787", 309 + "type": "mqtt-broker", 310 + "name": "", 311 + "broker": "eu1.cloud.thethings.network", 312 + "port": "1883", 313 + "clientid": "", 314 + "autoConnect": true, 315 + "usetls": false, 316 + "protocolVersion": "4", 317 + "keepalive": "60", 318 + "cleansession": true, 319 + "birthTopic": "", 320 + "birthQos": "0", 321 + "birthPayload": "", 322 + "birthMsg": {}, 323 + "closeTopic": "", 324 + "closeQos": "0", 325 + "closePayload": "", 326 + "closeMsg": {}, 327 + "willTopic": "", 328 + "willQos": "0", 329 + "willPayload": "", 330 + "willMsg": {}, 331 + "userProps": "", 332 + "sessionExpiry": "" 333 + } 334 +]
- image-20230401142357-8.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.Kilight - Size
-
... ... @@ -1,0 +1,1 @@ 1 +134.1 KB - Content
- image-20230401144525-9.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.Kilight - Size
-
... ... @@ -1,0 +1,1 @@ 1 +47.4 KB - Content
- image-20230401144951-10.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.Kilight - Size
-
... ... @@ -1,0 +1,1 @@ 1 +78.2 KB - Content
- image-20250603115501-1.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.Kilight - Size
-
... ... @@ -1,0 +1,1 @@ 1 +67.0 KB - Content
- image-20250603134617-2.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.Kilight - Size
-
... ... @@ -1,0 +1,1 @@ 1 +70.4 KB - Content
- image-20250603134823-3.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.Kilight - Size
-
... ... @@ -1,0 +1,1 @@ 1 +656 bytes - Content
- image-20250603134854-4.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.Kilight - Size
-
... ... @@ -1,0 +1,1 @@ 1 +77.7 KB - Content
- image-20250603135033-5.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.Kilight - Size
-
... ... @@ -1,0 +1,1 @@ 1 +85.2 KB - Content
- image-20250603140126-6.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.Kilight - Size
-
... ... @@ -1,0 +1,1 @@ 1 +110.7 KB - Content
- image-20250603140340-7.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.Kilight - Size
-
... ... @@ -1,0 +1,1 @@ 1 +104.6 KB - Content
- image-20250603140746-8.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.Kilight - Size
-
... ... @@ -1,0 +1,1 @@ 1 +119.5 KB - Content
- image-20250603141358-9.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.Kilight - Size
-
... ... @@ -1,0 +1,1 @@ 1 +69.2 KB - Content