<
From version < 44.1 >
edited by David Huang
on 2022/10/24 09:08
To version < 38.1 >
edited by Edwin Chen
on 2022/10/22 23:49
>
Change comment: There is no comment for this version

Summary

Details

Page properties
Author
... ... @@ -1,1 +1,1 @@
1 -XWiki.David
1 +XWiki.Edwin
Content
... ... @@ -70,6 +70,7 @@
70 70  * Pulse meter application
71 71  * Dry Contact Detection
72 72  
73 +
73 73  == **1.6 Mechanical** ==
74 74  
75 75  ​[[image:image-20221021110415-3.png]]
... ... @@ -101,6 +101,7 @@
101 101  
102 102  Press to reboot the device.
103 103  
105 +== ==
104 104  
105 105  === **1.7.5 LED** ===
106 106  
... ... @@ -110,44 +110,41 @@
110 110  1. Boot the device in flash mode
111 111  1. Send an uplink packet
112 112  
115 +
113 113  = **2.  Use CPN01 to communicate with IoT Server** =
114 114  
115 115  == **2.1  How it works** ==
116 116  
117 -The CPN01 is equipped with an NB-IoT module, the pre-loaded firmware in CPN01 will get **Open/Close Event or Count** from sensor and send the value to the NB-IoT network. The NB-IoT network will forward this value to IoT server via the protocol defined by CPN01.
120 +The CPN01 is equipped with a NB-IoT module, the pre-loaded firmware in CPN01 will get environment data from sensors and send the value to local NB-IoT network via the NB-IoT module.  The NB-IoT network will forward this value to IoT server via the protocol defined by CPN01.
118 118  
119 -The diagram below shows the working flow in the default firmware of CPN01:
122 +The diagram below shows the working flow in default firmware of CPN01:
120 120  
121 121  [[image:image-20221021110615-5.png]]
122 122  
126 +== **2.2 ​ Configure the CPN01** ==
123 123  
124 -== **2.2 ​ Configure CPN01** ==
125 -
126 126  === **2.2.1 Test Requirement** ===
127 127  
128 -To use CPN01 in your city, make sure to meet below requirements:
130 +To use CPN01 in your city, make sure meet below requirements:
129 129  
130 -* Your local operator has already distributed an NB-IoT Network.
132 +* Your local operator has already distributed a NB-IoT Network there.
131 131  * The local NB-IoT network used the band that CPN01 supports.
132 132  * Your operator is able to distribute the data received in their NB-IoT network to your IoT server.
133 133  
134 -Below figure shows our testing structure. Here we have NB-IoT network coverage by China Mobile, the band they use is B8.  The CPN01 will use CoAP(120.24.4.116:5683) or raw UDP(120.24.4.116:5601) or MQTT(120.24.4.116:1883)or TCP(120.24.4.116:5600)protocol to send data to the test server.
136 +Below figure shows our testing structure. Here we have NB-IoT network coverage by China Mobile, the band they use is B8.  The CPN01 will use CoAP(120.24.4.116:5683) or raw UDP(120.24.4.116:5601) or MQTT(120.24.4.116:1883)or TCP(120.24.4.116:5600)protocol to send data to the test server
135 135  
136 -[[image:image-20221023000439-3.png]]
137 -
138 138   ​
139 139  
140 -=== **2.2.2 Insert NB-IoT SIM card** ===
140 +=== **2.2.2 Insert SIM card** ===
141 141  
142 142  Insert the NB-IoT Card get from your provider.
143 143  
144 -User needs to take out the NB-IoT module and insert the SIM card like below:
144 +User need to take out the NB-IoT module and insert the SIM card like below:
145 145  
146 146  [[image:image-20221021110745-6.png]] ​
147 147  
148 +=== **2.2.3 Connect USB – TTL to CPN01 to configure it** ===
148 148  
149 -=== **2.2.3 Connect USB – TTL to CPN01 and configure it** ===
150 -
151 151  User need to configure CPN01 via serial port to set the **Server Address** / **Uplink Topic** to define where and how-to uplink packets. CPN01 support AT Commands, user can use a USB to TTL adapter to connect to CPN01 and use AT Commands to configure it, as below.
152 152  
153 153  **Connection:**
... ... @@ -166,44 +166,36 @@
166 166  * Parity:  **None**
167 167  * Flow Control: **None**
168 168  
169 -Make sure the switch is in FLASH position, then power on CPN01 by connecting the (% style="color:orange" %)**Yellow Jumper**(%%).
168 +Make sure the switch is in FLASH position, then power on device by connecting the jumper on CPN01. CPN01 will output system info once power on as below, we can enter the **password: 12345678** to access AT Command input.
170 170  
171 171  ​[[image:image-20221021110817-7.png]]
172 172  
173 -CPN01 will output system info once powered on as below, we can enter the **password: 12345678** to access AT Command input.
174 -
175 -
176 176  **Note: the valid AT Commands can be found at:  **[[**https:~~/~~/www.dropbox.com/sh/351dwor6joz8nwh/AADn1BQaAAxLF_QMyU8NkW47a?dl=0**>>url:https://www.dropbox.com/sh/351dwor6joz8nwh/AADn1BQaAAxLF_QMyU8NkW47a?dl=0]]
177 177  
178 -
179 179  === **2.2.4 Use CoAP protocol to uplink data** ===
180 180  
181 -**Note: if you don't have a CoAP server, you can refer this link to set up a CoAP server: **[[**http:~~/~~/wiki.dragino.com/xwiki/bin/view/Main/Set%20up%20CoAP%20Server/**>>url:http://wiki.dragino.com/xwiki/bin/view/Main/Set%20up%20CoAP%20Server/]]
176 +**Note: if you don't have CoAP server, you can refer this link to set up one: **[[**http:~~/~~/wiki.dragino.com/xwiki/bin/view/Main/Set%20up%20CoAP%20Server/**>>url:http://wiki.dragino.com/xwiki/bin/view/Main/Set%20up%20CoAP%20Server/]]
182 182  
178 +**Use below commands:**
183 183  
184 -**Use below commands in CPN01:**
185 -
186 186  * **AT+PRO=1**   ~/~/ Set to use CoAP protocol to uplink
187 -* **AT+SERVADDR=120.24.4.116,5683   ** ~/~/ Set CoAP server address and port
188 -* **AT+URI=5,11,"mqtt",11,"coap",12,"0",15,"c=text1",23,"0" ** ~/~/Set CoAP resource path
181 +* **AT+SERVADDR=120.24.4.116,5683   ** ~/~/ to set CoAP server address and port
182 +* **AT+URI=5,11,"mqtt",11,"coap",12,"0",15,"c=text1",23,"0" ** ~/~/Set COAP resource path
189 189  
190 190  For parameter description, please refer to AT command set
191 191  
192 192  [[image:image-20221021110948-8.png]]
193 193  
188 +After configure the server address and **reset the device** (via AT+ATZ ), CPN01 will start to uplink sensor values to CoAP server.
194 194  
195 -After configuring the server address and **reset CPN01** (via AT+ATZ ), CPN01 will start to uplink sensor values to the CoAP server.
196 -
197 197  [[image:image-20221021110956-9.png]] ​
198 198  
199 -
200 200  === **2.2.5 Use UDP protocol to uplink data(Default protocol)** ===
201 201  
194 +This feature is supported since firmware version v1.0.1
202 202  
203 -**AT Commands:**
204 -
205 205  * **AT+PRO=2   ** ~/~/ Set to use UDP protocol to uplink
206 -* **AT+SERVADDR=120.24.4.116,5601   ** ~/~/ Set UDP server address and port
197 +* **AT+SERVADDR=120.24.4.116,5601   ** ~/~/ to set UDP server address and port
207 207  * **AT+CFM=1       ** ~/~/If the server does not respond, this command is unnecessary
208 208  
209 209  ​ [[image:image-20221021111025-10.png]]
... ... @@ -214,9 +214,8 @@
214 214  
215 215  === **2.2.6 Use MQTT protocol to uplink data** ===
216 216  
208 +This feature is supported since firmware version v110
217 217  
218 -**AT Commands:**
219 -
220 220  * **AT+PRO=3   ** ~/~/Set to use MQTT protocol to uplink
221 221  * **AT+SERVADDR=120.24.4.116,1883   ** ~/~/Set MQTT server address and port
222 222  * **AT+CLIENT=CLIENT       ** ~/~/Set up the CLIENT of MQTT
... ... @@ -231,15 +231,14 @@
231 231  
232 232  ​
233 233  
234 -MQTT protocol has a much higher power consumption compare with UDP / CoAP protocol. Please check the power analyze document and adjust the uplink period to a suitable interval.
224 +MQTT protocol has a much higher power consumption compare vs UDP / CoAP protocol. Please check the power analyze document and adjust the uplink period to a suitable interval.
235 235  
236 -
237 237  === **2.2.7 Use TCP protocol to uplink data** ===
238 238  
239 -**AT Commands**
228 +This feature is supported since firmware version v110
240 240  
241 241  * **AT+PRO=4   ** ~/~/ Set to use TCP protocol to uplink
242 -* **AT+SERVADDR=120.24.4.116,5600   ** ~/~/ Set TCP server address and port
231 +* **AT+SERVADDR=120.24.4.116,5600   ** ~/~/ to set TCP server address and port
243 243  
244 244  ​ [[image:image-20221021111125-14.png]]
245 245  
... ... @@ -251,25 +251,23 @@
251 251  
252 252  User can use below command to change the **uplink interval**.
253 253  
254 -* **AT+TDC=7200      ** ~/~/ Set Update Interval to 7200s (2 hours)
243 +* **AT+TDC=600      ** ~/~/ Set Update Interval to 600s
255 255  
256 256  **NOTE:**
257 257  
258 258  **~1. By default, the device will send an uplink message every 1 hour.**
259 259  
260 -
261 261  == **2.3  Uplink Payload** ==
262 262  
263 -The uplink payload includes 123 bytes in total by default.
251 +In this mode, uplink payload includes 87 bytes in total by default.
264 264  
265 265  Each time the device uploads a data package, 8 sets of recorded data will be attached. Up to 32 sets of recorded data can be uploaded.
266 266  
267 -|**Size(bytes)**|**8**|**2**|**2**|**1**|**1**|**1**|**1**|**1**|**3**
268 -|**Value**|[[Device ID>>path:#H2.4.1A0A0DeviceID]]|[[Ver>>path:#H2.4.2A0VersionInfo]]|[[BAT>>path:#H2.4.3A0BatteryInfo]]|[[Signal Strength>>path:#H2.4.4A0SignalStrength]]|MOD|[[ Calculate Flag>>path:#H2.4.8A0DigitalInterrupt]]|Contact Status|Alarm|Total pulse
255 +|**Size(bytes)**|**8**|**2**|**2**|**1**|**1**|**1**|**2**|**2**|4
256 +|**Value**|[[Device ID>>path:#H2.4.1A0A0DeviceID]]|[[Ver>>path:#H2.4.2A0VersionInfo]]|[[BAT>>path:#H2.4.3A0BatteryInfo]]|[[Signal Strength>>path:#H2.4.4A0SignalStrength]]|MOD|[[Interrupt>>path:#H2.4.8A0DigitalInterrupt]]|[[Soil P>>path:#H2.4.7A0SoilConductivity28EC29]]H|[[Soil Temperature>>path:#H2.4.6A0SoilTemperature]]|Time stamp
269 269  
270 -(% style="width:1201px" %)
271 -|**3**|**4**|**1**|**3**|**1**|**3**|4|**8 group**|(% style="width:1px" %)
272 -|The last open duration|Time stamp|Contact Status|Total pulse|Calculate Flag|The last open duration|Time stamp|...|(% style="width:1px" %)
258 +|2|2|4|8 group
259 +|[[Soil Temperature>>path:#H2.4.6A0SoilTemperature]]|[[Soil P>>path:#H2.4.7A0SoilConductivity28EC29]]H|Time stamp|...
273 273  
274 274  If we use the MQTT client to subscribe to this MQTT topic, we can see the following information when the CPN01 uplink data.
275 275  
... ... @@ -290,9 +290,9 @@
290 290  
291 291  *(% style="color:#037691" %) **Mod:**(%%) 0x01 = 1
292 292  
293 -*(% style="color:#037691" %) **Calculate Flag:**(%%) 0x00=0
280 +*(% style="color:#037691" %) **Calculate Flag:**(%%) 0x00= 0
294 294  
295 -*(% style="color:#037691" %) **Contact Status:**(%%) 0x00=0
282 +*(% style="color:#037691" %) **Contact Status:**(%%) 0x00= 0
296 296  
297 297  *(% style="color:#037691" %) **Alarm:**(%%)0x00 =0
298 298  
... ... @@ -300,18 +300,17 @@
300 300  
301 301  *(% style="color:#037691" %) **The last open duration:**(%%)0x02 =2
302 302  
303 -*(% style="color:#037691" %)** Time stamp :**(%%) 0x6315537b =1662342011 (Unix Time)
290 +*(% style="color:#037691" %)**Time stamp :**(%%) 0x6315537b =1662342011
304 304  
305 -*(% style="color:#037691" %) **Contact Status, Total pulse, Calculate Flag, The last open duration ,Time stamp :**(%%) 01  00000b  02  000026  63510fed
292 +*(% style="color:#037691" %) **Contact Status, Total pulse, Calculate Flag, The last open duration ,Time stamp :**(%%) 0100000b0200002663510fed
306 306  
307 307  *(% style="color:#037691" %) **8 sets of recorded data: Contact Status, Total pulse, Calculate Flag, The last open duration ,Time stamp :**(%%) 0100000e0200002663510f39,.......
308 308  
309 -
310 310  == **2.4  Payload Explanation and Sensor Interface** ==
311 311  
312 312  === **2.4.1  Device ID** ===
313 313  
314 -By default, the Device ID is equal to the last 15 bits of IMEI.
300 +By default, the Device ID equal to the last 15 bits of IMEI.
315 315  
316 316  User can use **AT+DEUI** to set Device ID
317 317  
... ... @@ -319,16 +319,14 @@
319 319  
320 320  AT+DEUI=868411056754138
321 321  
322 -The Device ID is stored in a non-erase area, Upgrade the firmware or run AT+FDR won't erase the Device ID.
308 +The Device ID is stored in a none-erase area, Upgrade the firmware or run AT+FDR won't erase Device ID.
323 323  
324 -
325 325  === **2.4.2  Version Info** ===
326 326  
327 -Specify the software version: 0x64=100, which means firmware version 1.00.
312 +Specify the software version: 0x64=100, means firmware version 1.00.
328 328  
329 -For example 0x00 64 : This device is CPN01 with firmware version 1.0.0.
314 +For example: 0x00 64 : this device is CPN01 with firmware version 1.0.0.
330 330  
331 -
332 332  === **2.4.3  Battery Info** ===
333 333  
334 334  Check the battery voltage for CPN01.
... ... @@ -337,7 +337,6 @@
337 337  
338 338  Ex2: 0x0B49 = 2889mV
339 339  
340 -
341 341  === **2.4.4  Signal Strength** ===
342 342  
343 343  NB-IoT Network signal Strength.
... ... @@ -354,10 +354,9 @@
354 354  
355 355  **99**    Not known or not detectable
356 356  
357 -
358 358  === **2.4.5 Calculate Flag** ===
359 359  
360 -The calculate flag is a user defined field, IoT server can use this filed to handle different meters with different pulse factors. For example, if there are 100 water meters, meter 1~~50 are 1 liter/pulse and meter 51 ~~ 100 has 1.5 liter/pulse.
342 +The calculate flag is a user define field, IoT server can use this filed to handle different meter with different pulse factor. For example, if there are 100 water meters, meter 1 ~~50 are 1 liter/pulse and meter 51 ~~ 100 has 1.5 liter/pulse.
361 361  
362 362  User can set calculate flag to 1 for meter 1~~50 and 2 for meter 51 ~~ 100, So IoT Server can use this field for calculation.
363 363  
... ... @@ -365,12 +365,10 @@
365 365  
366 366  Range (6 bits): (b)000000 ~~ (b) 111111
367 367  
368 -
369 369  === **2.4.6  Alarm** ===
370 370  
371 371  See [[Alarm Base on Timeout>>url:http://wiki.dragino.com/xwiki/bin/view/Main/User%20Manual%20for%20LoRaWAN%20End%20Nodes/CPL01%20LoRaWAN%20Outdoor%20PulseContact%20%20Sensor%20Manual/#H3.5AlarmBaseonTimeout]]
372 372  
373 -
374 374  === **2.4.7 Contact Status** ===
375 375  
376 376  0: Open
... ... @@ -377,14 +377,12 @@
377 377  
378 378  1: Close
379 379  
380 -
381 381  === **2.4.8 Total pulse** ===
382 382  
383 -Total pulse/counting based on dry [[contact trigger event>>url:http://wiki.dragino.com/xwiki/bin/view/Main/User%20Manual%20for%20LoRaWAN%20End%20Nodes/CPL01%20LoRaWAN%20Outdoor%20PulseContact%20%20Sensor%20Manual/#H2.3.2SensorConfiguration2CFPORT3D4]]
362 +Total pulse/counting base on dry [[contact trigger event>>url:http://wiki.dragino.com/xwiki/bin/view/Main/User%20Manual%20for%20LoRaWAN%20End%20Nodes/CPL01%20LoRaWAN%20Outdoor%20PulseContact%20%20Sensor%20Manual/#H2.3.2SensorConfiguration2CFPORT3D4]]
384 384  
385 385  Range (3 Bytes) : 0x000000 ~~ 0xFFFFFF . Max: 16777215
386 386  
387 -
388 388  === **2.4.9 The last open duration** ===
389 389  
390 390  Dry Contact last open duration.
... ... @@ -396,7 +396,7 @@
396 396  
397 397  === **2.4.10  Timestamp** ===
398 398  
399 -Timestamp : 0x6315537b =1662342011
377 +Time stamp : 0x6315537b =1662342011
400 400  
401 401  Convert Unix timestamp to time 2022-9-5 9:40:11.
402 402  
... ... @@ -428,7 +428,7 @@
428 428  
429 429  == **2.6  ​LED Indicator** ==
430 430  
431 -The CPN01 has an internal LED which is to show the status of different states.
409 +The CPN01 has an internal LED which is to show the status of different state.
432 432  
433 433  * When power on, CPN01 will detect if sensor probe is connected, if probe detected, LED will blink four times. (no blinks in this step is no probe)
434 434  * Then the LED will be on for 1 second means device is boot normally.
... ... @@ -437,7 +437,7 @@
437 437  
438 438  == **2.7  Alarm Base on Timeout** ==
439 439  
440 -CPN01 can monitor the timeout for a status change, this feature can be used to monitor some events such as door opening too long etc. Related Parameters are:
418 +CPL01 can monitor the timeout for a status change, this feature can be used to monitor some events such as door opening too long etc. Related Parameters are:
441 441  
442 442  
443 443  **~1. Keep Status: Status to be monitor**
... ... @@ -458,11 +458,10 @@
458 458  
459 459  **AT Command** to configure:
460 460  
461 -**AT+TTRIG=1,30**  ~-~-> When the **Keep Status** change from connected to disconnect, and device remains in disconnect status for more than 30 seconds. CPN01 will send an uplink packet, the [[Alarm bit>>url:http://wiki.dragino.com/xwiki/bin/view/Main/User%20Manual%20for%20LoRaWAN%20End%20Nodes/CPL01%20LoRaWAN%20Outdoor%20PulseContact%20%20Sensor%20Manual/#H2.3.3Real-TimeOpen2FCloseStatus2CUplinkFPORT3D2]] (the second bit of 1^^st^^ byte of payload) on this uplink packet is set to 1.
439 +**AT+TTRIG=1,30**  ~-~-> When the **Keep Status** change from connect to disconnect, and device remains in disconnect status for more than 30 seconds. CPL01 will send an uplink packet, the [[Alarm bit>>url:http://wiki.dragino.com/xwiki/bin/view/Main/User%20Manual%20for%20LoRaWAN%20End%20Nodes/CPL01%20LoRaWAN%20Outdoor%20PulseContact%20%20Sensor%20Manual/#H2.3.3Real-TimeOpen2FCloseStatus2CUplinkFPORT3D2]] (the second bit of 1^^st^^ byte of payload) on this uplink packet is set to 1.
462 462  
463 463  **AT+TTIG=0,0 ** ~-~-> Default Value, disable timeout Alarm.
464 464  
465 -
466 466  == **2.8 Set debug mode** ==
467 467  
468 468  Feature: Enable or Disable debug mode
... ... @@ -534,11 +534,11 @@
534 534  
535 535  === **2.16.1  ​Battery Type** ===
536 536  
537 -The CPN01 battery is a combination of an 8500mAh Li/SOCI2 Battery and a Super Capacitor. The battery is non-rechargeable battery type with a low discharge rate (<2% per year). This type of battery is commonly used in IoT devices such as water meter.
514 +The CPN01 battery is a combination of an 8500mAh Li/SOCI2 Battery and a Super Capacitor. The battery is none-rechargeable battery type with a low discharge rate (<2% per year). This type of battery is commonly used in IoT devices such as water meter.
538 538  
539 -The battery is designed to last for several years depends on the actual use environment and update interval. 
516 +The battery is designed to last for several years depends on the actually use environment and update interval. 
540 540  
541 -The battery-related documents as below:
518 +The battery related documents as below:
542 542  
543 543  * [[Battery Dimension>>url:http://www.dragino.com/downloads/index.php?dir=datasheet/Battery/ER26500/]]
544 544  * [[Lithium-Thionyl Chloride Battery datasheet>>url:http://www.dragino.com/downloads/index.php?dir=datasheet/Battery/ER26500/]]
... ... @@ -572,7 +572,6 @@
572 572  
573 573  The default battery pack of CPN01 includes a ER26500 plus super capacitor. If user can't find this pack locally, they can find ER26500 or equivalence without the SPC1520 capacitor, which will also work in most case. The SPC can enlarge the battery life for high frequency use (update period below 5 minutes).
574 574  
575 -
576 576  = **3. ​ Access NB-IoT Module** =
577 577  
578 578  Users can directly access the AT command set of the NB-IoT module.
... ... @@ -672,9 +672,12 @@
672 672  
673 673  Please see this link for how to upgrade:  [[http:~~/~~/wiki.dragino.com/xwiki/bin/view/Main/Firmware%20Upgrade%20Instruction%20for%20STM32%20base%20products/#H2.HardwareUpgradeMethodSupportList>>url:http://wiki.dragino.com/xwiki/bin/view/Main/Firmware%20Upgrade%20Instruction%20for%20STM32%20base%20products/#H2.HardwareUpgradeMethodSupportList]]
674 674  
675 -**Notice, **CPN01 **and **CPL01 **share the same mother board. They use the same connection and method to update.**
651 +**Notice, **CPN01 **and **CPN01 **share the same mother board. They use the same connection and method to update.**
676 676  
653 +== **5.2  Can I calibrate CPN01 to different soil types?** ==
677 677  
655 +CPN01 is calibrated for saline-alkali soil and loamy soil. If users want to use it for other soil, they can calibrate the value in the IoT platform base on the value measured by saline-alkali soil and loamy soil. The formula can be found at [[this link>>url:https://www.dragino.com/downloads/downloads/LoRa_End_Node/LSE01/Calibrate_to_other_Soil_20220605.pdf]].
656 +
678 678  = **6.  Trouble Shooting** =
679 679  
680 680  == **6.1  ​Connection problem when uploading firmware** ==
... ... @@ -681,22 +681,19 @@
681 681  
682 682  **Please see: **[[http:~~/~~/wiki.dragino.com/xwiki/bin/view/Main/Firmware%20Upgrade%20Instruction%20for%20STM32%20base%20products/#H3.3Troubleshooting>>url:http://wiki.dragino.com/xwiki/bin/view/Main/Firmware%20Upgrade%20Instruction%20for%20STM32%20base%20products/#H3.3Troubleshooting]]
683 683  
684 -
685 685  == **6.2  AT Command input doesn't work** ==
686 686  
687 687  In the case if user can see the console output but can't type input to the device. Please check if you already include the **ENTER** while sending out the command. Some serial tool doesn't send **ENTER** while press the send key, user need to add ENTER in their string.
688 688  
689 -
690 690  = **7. ​ Order Info** =
691 691  
692 692  Part Number**:** CPN01
693 693  
694 -
695 695  = **8.  Packing Info** =
696 696  
697 697  **Package Includes**:
698 698  
699 -* CPN01 Open/Close Sensor x 1
675 +* CPN01 NB-IoT Soil Moisture & EC Sensor x 1
700 700  * External antenna x 1
701 701  
702 702  **Dimension and weight**:
image-20221023000439-3.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.Edwin
Size
... ... @@ -1,1 +1,0 @@
1 -82.1 KB
Content
Copyright ©2010-2024 Dragino Technology Co., LTD. All rights reserved
Dragino Wiki v2.0