Difference between revisions of "CLI Reference Guide AIO"

From OpenMotics
Jump to navigation Jump to search
(230 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 +
Information about the All In One (AIO) can be found in [[AIO General Information]].
 +
 
The Gateway has 2 computer systems built-in: A Master Controller (Microchip DSPIC33) and a Gateway Controller (Linux Based Beagle Bone). The Master controller is connected with the Gateway Controller over RS232. The Master Controller has a built-in CLI interface allowing the user to configure and control the Master controller to his full extend.
 
The Gateway has 2 computer systems built-in: A Master Controller (Microchip DSPIC33) and a Gateway Controller (Linux Based Beagle Bone). The Master controller is connected with the Gateway Controller over RS232. The Master Controller has a built-in CLI interface allowing the user to configure and control the Master controller to his full extend.
  
Line 18: Line 20:
 
# Every successful instruction will return the requested information (or perform requested action) followed by OK, otherwise ERROR is returned (wrong format, wrong parameters,…). All error codes are listed in the [[Error Codes AIO]] section.
 
# Every successful instruction will return the requested information (or perform requested action) followed by OK, otherwise ERROR is returned (wrong format, wrong parameters,…). All error codes are listed in the [[Error Codes AIO]] section.
 
# An instruction will only be executed if the Master has responded with “OK”
 
# An instruction will only be executed if the Master has responded with “OK”
 +
 +
For the Release Notes of the AIO, please see [[AIO Release Notes]].
  
 
===Notation===
 
===Notation===
Line 42: Line 46:
 
==Instruction Set==
 
==Instruction Set==
 
===General instructions===
 
===General instructions===
 +
====change debug off====
  
====? ====
+
:''This instruction will disable the debug function for changes. When the debug function is activate, every time a sensor value changes (but could also be output or validation bit etc), the changed device number (like sensor) and the new value will be printed.''
 
 
:''This instruction will list all available CLI instructions''
 
  
 
:;Returns
 
:;Returns
::The full list of CLI instructions
+
::<code>OK</code>
  
----
+
Example: Deactivate change debug mode
  
====?? ====
+
:;Instruction:
 
+
::<code>change debug off</code>
:''This instruction will list all available Basic Actions''
 
  
 
:;Returns
 
:;Returns
::The full list of Basic Actions
+
::<code>OK</code>
  
 
----
 
----
  
====time read====
+
====change debug on====
  
:''This instruction will read the time of the internal Real Time Clock.''
+
:''This instruction will enable the debug function for changes. When the debug function is activate, every time a sensor value changes (but could also be output or validation bit etc), the changed device number (like sensor) and the new value will be printed.''
  
 
:;Returns
 
:;Returns
:: The time
 
 
::<code>OK</code>  
 
::<code>OK</code>  
  
Example:
+
Example: Activate change debug mode
  
 
:;Instruction:
 
:;Instruction:
::<code>time read</code>
+
::<code>change debug on</code>
  
 
:;Returns
 
:;Returns
::<code>20:13:19</code>
 
 
::<code>OK</code>  
 
::<code>OK</code>  
  
 
----
 
----
 +
====error list ====
 +
====el ====
 +
:''This instruction will list all configured modules, their ID's, the number off errors on this module and the status of each module (Good, Degraded1, Degraded2, Degraded3, Offline, Forced Offline)''
  
====time write [hours][minutes][seconds]====
+
:;Returns
  
:''This instruction will write the time in the Real Time Chip''
+
--- Total Uptime: 000334 Hours, Last Startup: 20:23:50 07/12/20  ---
 +
--- Module Type: BRAIN, RS485 mode: 0, Board: 26'C  --.--V --.--A ---
 +
--- PWR RS485/CAN/12V: 1/1/1, CANTERM: 1, BB debug: 0, Fw: 1.0.70 ---
 +
-------Output------------ID---------Err-------Status-------
 +
  00 (l I 000->007) 108.000.000.000 00000  GOOD      (000)
 +
  01 (O E 008->015) 079.222.189.122 00000  GOOD      (000)
 +
  02 (D E 016->023) 068.072.145.035 00000  GOOD      (000)
 +
-------Input-------------ID---------Err-------Status-------
 +
  00 (i I 000->007) 105.000.000.000 00000  GOOD      (000)
 +
  01 (b C 008->015) 098.000.000.001 00000  GOOD      (000)
 +
  02 (b C 016->023) 098.000.000.002 00000  GOOD      (000)
 +
  03 (b C 024->031) 098.000.000.003 00000  GOOD      (000)
 +
  04 (I E 032->039) 073.195.134.013 00000  GOOD      (144)
 +
-------Sensor------------ID---------Err-------Status-------
 +
  00 (s C 000->007) 115.000.000.000 00000  GOOD      (000)
 +
  01 (T E 008->015) 084.001.003.007 00000  GOOD      (080)
 +
-------CAN Control-------ID---------Err-------Status-------
 +
  00 (C E 000->000) 067.131.006.013 00000  GOOD      (016)
 +
-------Micro CAN---------ID---------Err-------Status-------
 +
  00 (m C 000->000) 000.100.154.092 00215  DEGRADED 2 (000)
 +
  01 (m C 001->001) 100.030.245.232 00000  GOOD      (000)
 +
  02 (m C 006->006) 100.232.121.136 00000  GOOD      (000)
 +
OK
  
:;[hours]
+
:Below, you can find a short explanation what the different items mean:
::Value 0 to 23
+
:*First parenthesis first character: module type1 ('O'->RS485 module, 'D'->RS485 dim (0-10V) module, 'l'->Brain(+) internal open collector output, 'i'->Input module, 'o'->output module, 'b'->Micro Can virtual input module, 's'-> Can virtual sensor module, 'T'->RS485 temperature module, 'R'->RS485 output module fully configured as Roller/Shutter module, 'm'->Micro Can module)
:;[minutes]
+
:*First parenthesis second character: module type2 ('I'-> Internal inputs/outputs of the Brain(+), 'E'->External RS485 module, 'C'->Linked to External Micro CAN module, 'V'->Virtual module)
::Value 0 to 59
+
:*First parenthesis 000->007: indicate from for example which input nr is the first and last input of that module
:;[seconds]
+
:*ID: this is the unique ID of this module
::Value 0 to 99
+
:*Err: Number of errors for each of the modules. CLI instruction "error clear" can be used to reset all errors
 +
:*Status: 4 status possibilities (GOOD, DEGRADED 1, DEGRADED 2, DEGRADED 3, OFFLINE)
 +
:*Second parenthesis: indicates the type of scanning the module will have.
 +
:*BB debug: When 1, debug mode is ON and all BA's that are executed will also be forwarded to the BB over UART API
 +
:In the list, you'll also see the health status of the connected Micro CAN's (directly via the internal CAN bus of the Brain(+) or externally via the CAN Control). Each Micro CAN has 3 bytes as an address and as you can see in the above example, you see 4 Bytes:
 +
:* The first byte of the 4 bytes address of the Micro CAN in the above list is the Bus number:
 +
:** 100: Internal CAN Bus
 +
:** 000: CAN bus of the first CAN Control
 +
:** 001: CAN bus of the second CAN Control
 +
:** 002: CAN bus of the third CAN Control
 +
:** ...
 +
----
  
:;Returns
+
====error clear====
::<code>OK</code>  
+
 
 +
:''This instruction will delete all the errors and will start communicating again with the RS485 modules at the normal pace''
 +
 
 +
:;Returns
 +
::<code>OK</code>  
  
 
Example:
 
Example:
  
 
:;Instruction:
 
:;Instruction:
::<code>time write 19 25 57</code>
+
::<code>error clear</code>
  
 
:;Returns
 
:;Returns
Line 104: Line 144:
 
----
 
----
  
====date read====
+
====firmware version====
  
:''This instruction will read the date of the internal Real Time Clock.''
+
:''This instruction will display the firmware of the Master and all connected slaves. The firmware version of slaves is requested directly via the RS485 bus in other words, when a slave is not online, the firmware version will not be displayed''
 
 
:;Returns
 
:: The date
 
::<code>OK</code>
 
  
 
Example:
 
Example:
  
 
:;Instruction:
 
:;Instruction:
::<code>date read</code>
+
::<code>firmware version</code>
  
 
:;Returns
 
:;Returns
::<code>2 25-12-18</code>  
+
--- Fw version Brain(+): V1.0.68 ---
::<code>OK</code>
+
Output:
 +
  00 (l I) 108.000.000.000 -> Internal/Virtual
 +
  01 (O E) 079.222.189.122 -> V6.0.7
 +
  02 (D E) 068.072.145.035 -> V6.0.7
 +
Input:
 +
  00 (i I) 105.000.000.000 -> Internal/Virtual
 +
  01 (b C) 098.000.000.001 -> Internal/Virtual
 +
  02 (b C) 098.000.000.002 -> Internal/Virtual
 +
  03 (I E) 073.195.134.013 -> V6.0.12
 +
Sensor:
 +
  00 (s C) 115.000.000.000 -> Internal/Virtual
 +
  01 (s C) 115.000.000.001 -> Internal/Virtual
 +
  02 (T E) 084.001.003.007 -> V6.0.6
 +
Can:
 +
  00 (C E) 067.131.006.013 -> V6.0.27
 +
OK
 +
  
 
----
 
----
  
====date write [day of the week][day][month][year]====
+
====health debug off ====
 
 
:''This instruction will write the date in the Real Time Chip''
 
  
:;[day of the week]
+
:''This instruction will disable the CLI console debug function for health related matters. When for example a sensor is not responding for 2 minutes, a debug message will appear when this debug function is enabled''
::Value 1 to 7 represents Monday to Sunday.
 
:;[day]
 
::Value 1 to 31, day of the month.
 
:;[month]
 
::Value 1 to 12
 
:;[year]
 
::Value 0 to 99
 
  
 
:;Returns
 
:;Returns
::<code>OK</code>
+
::OK
  
Example:
+
----
 +
 
 +
====health debug on ====
  
:;Instruction:
+
:''This instruction will enable the CLI console debug function for health related matters. When for example a sensor is not responding for 2 minutes, a debug message will appear when this debug function is enabled''
::<code>date write 2 25 12 18</code>
 
  
 
:;Returns
 
:;Returns
::<code>OK</code>
+
::OK
  
 
----
 
----
  
====error list ====
+
====logging list [number of lines*]====
 +
 
 +
:''* is an optional value, if the optional value is not used, the system will print the last 32 lines of the FRAM logging''
  
:''This instruction will list all configured modules, their ID's, the number off errors on this module and the status of each module (Good, Degraded1, Degraded2, Degraded3, Offline, Forced Offline)''
+
:''This instruction will print the FRAM logging. Events, Errors and BA's can be logged depending on the settings in Eeprom, see Memory Model Page0/Byte13''
  
 
:;Returns
 
:;Returns
 +
logging list
 +
0000(P056/B048): 21/04/19 17:22:11 BA 001 000 000 027 000 000 000 000
 +
0001(P056/B032): 21/04/19 17:22:11 BA 000 016 000 010 000 000 000 000
 +
0002(P056/B016): 21/04/19 17:22:11 BA 001 001 000 027 000 000 000 000
 +
0003(P056/B000): 21/04/19 17:22:10 BA 001 000 000 027 000 000 000 000
 +
0004(P055/B240): 21/04/19 17:22:10 BA 000 016 000 010 000 000 000 000
 +
0005(P055/B224): 21/04/19 17:22:10 BA 001 001 000 027 000 000 000 000
 +
0006(P055/B208): 21/04/19 17:22:10 BA 001 000 000 027 000 000 000 000
 +
0007(P055/B192): 21/04/19 17:22:10 BA 000 016 000 010 000 000 000 000
 +
0008(P055/B176): 21/04/19 17:22:10 BA 001 001 000 027 000 000 000 000
 +
0009(P055/B160): 21/04/19 17:22:10 BA 001 000 000 027 000 000 000 000
 +
0010(P055/B144): 21/04/19 17:22:09 BA 000 016 000 010 000 000 000 000
 +
0011(P055/B128): 21/04/19 17:22:09 BA 001 001 000 027 000 000 000 000
 +
0012(P055/B112): 21/04/19 17:22:08 BA 001 000 000 027 000 000 000 000
 +
0013(P055/B096): 21/04/19 17:22:08 BA 000 016 000 010 000 000 000 000
 +
0014(P055/B080): 21/04/19 17:22:08 BA 001 001 000 027 000 000 000 000
 +
0015(P055/B064): 21/04/19 17:22:07 BA 001 000 000 027 000 000 000 000
 +
0016(P055/B048): 21/04/19 17:22:07 BA 000 016 000 010 000 000 000 000
 +
0017(P055/B032): 21/04/19 17:22:07 BA 001 001 000 027 000 000 000 000
 +
0018(P055/B016): 21/04/19 17:21:49 BA 001 000 000 027 000 000 000 000
 +
0019(P055/B000): 21/04/19 17:21:49 BA 001 001 000 027 000 000 000 000
 +
0020(P054/B240): 21/04/19 17:21:31 BA 000 000 000 010 000 000 000 000
 +
0021(P054/B224): 21/04/19 17:21:22 BA 000 001 000 011 000 000 000 000
 +
0022(P054/B208): 21/04/19 17:21:15 BA 000 001 000 010 000 000 000 000
 +
0023(P054/B192): 21/04/19 17:20:22 BA 000 255 000 255 000 000 000 000
 +
0024(P054/B176): 21/04/19 17:17:05 EV 254 003 000 000 002 004 000 000
 +
0025(P054/B160): 21/04/19 17:16:11 EV 254 002 000 000 000 000 000 000
 +
0026(P054/B144): 21/04/19 16:35:16 ER 005 001 000 004 000 000 000 000
 +
0027(P054/B128): 21/04/19 16:24:07 ER 005 001 000 004 000 000 000 000
 +
0028(P054/B112): 21/04/19 14:40:59 ER 005 001 000 004 000 000 000 000
 +
0029(P054/B096): 21/04/19 13:57:05 ER 005 001 000 004 000 000 000 000
 +
0030(P054/B080): 21/04/19 13:53:07 ER 006 001 011 083 011 083 000 000
 +
0031(P054/B064): 21/04/19 12:48:39 ER 006 001 011 083 011 083 000 000
 +
OK
  
    Output------------ID---------Err---Suc/Fail------Status-------
 
00 (o 000->007) 111.000.000.000 00000 (000/000)  GOOD      (000)
 
01 (o 008->015) 111.000.000.001 00000 (000/000)  GOOD      (000)
 
02 (o 016->023) 111.000.000.002 00000 (000/000)  GOOD      (000)
 
      Input-------------ID---------Err---Suc/Fail------Status-------
 
00 (i 000->007) 105.000.000.000 00000 (000/000)  GOOD      (000)
 
01 (i 008->015) 105.000.000.001 00000 (000/000)  GOOD      (000)
 
02 (i 016->023) 105.000.000.002 00000 (000/000)  GOOD      (000)
 
03 (b 024->031) 098.000.000.003 00000 (000/000)  GOOD      (000)
 
      Sensor------------ID---------Err---Suc/Fail------Status-------
 
00 (s 000->007) 115.000.000.000 00000 (000/000)  GOOD      (000)
 
  
 
----
 
----
  
====error clear====
+
====pid debug off ====
  
:''This instruction will delete all the errors and will start communicating again with the RS485 modules at the normal pace''
+
:''This instruction will disable the CLI console debug function for PID related matters (only used in combination with HVAC module).
  
 
:;Returns
 
:;Returns
::<code>OK</code>
+
::OK
 +
 
 +
----
  
Example:
+
====pid debug on ====
  
:;Instruction:
+
:''This instruction will enable the CLI console debug function for PID related matters (only used in combination with HVAC module).
::<code>error clear</code>
 
  
 
:;Returns
 
:;Returns
::<code>OK</code>
+
::OK
 +
 
 +
To enable debugging, use following instruction:
 +
pid debug on
 +
When a PID filter is enabled (when disabled, nothing will be displayed) on 1 of the connected HVAC modules, following will appear on the console (example):
 +
17:51:15 084.075.215.000 pid:0 En:1(H) sensor:19.0(3) setpt:22.5 Err:7 P:49 I:0 D:0 Drive=49 Out=49(0)
 +
Explanation:
 +
* 17:51:15 -> Time
 +
* 084.075.215.000 -> ID of the HVAC module (important when more then 1 HVAC module is connected)
 +
* pid:0 -> PID 0 of the HVAC module is used
 +
* En:1(H) -> Module is enabled (=1) and PÏD filter is in Heating(H) mode. Cooling(C) is also possible
 +
* sensor:19:0(3) -> Sensor is measuring 19.0 degree celsius en Sensor (3) of this HVAC module is used for this PID filter
 +
* sept:22.5 -> The thermostat setpoint is now set at 22.5 degree Celsius
 +
* Err: 7 -> The calculated PID error is 7
 +
* P:49 -> The calculated P result is 49
 +
* I:0 -> The calculated I result is 0
 +
* D:0 -> The calculated D result is 0
 +
* Drive=49 -> The calculated PID drive (P+I+D) is 49
 +
* Out=49(0) -> Analog output (0) will be driven with value 49 (0-255)
 +
 
 +
When the display rate of the debug information is not high enough, the sampling frequency of the HVAC module can be increased by using eeprom memory location 0/4. For example, increase the speed to display every 8 seconds the PID information:
 +
eeprom write 0 4 10
  
 
----
 
----
Line 188: Line 279:
 
====register list ====
 
====register list ====
  
:''This instruction will list all processor registers and the present values''
+
:''This instruction will list all processor registers and the present values. This is for debug purposes''
 +
 
 +
:;Returns
 +
 
 +
---Register Values---
 +
  00 00000 00000 00000 00087 00064 00658 16385 00128 00514 00000 00000 00000
 +
  01 00003 00000 00000 00000 00000 00000 32776 32776 32776 32776 01296 01040
 +
  02 01040 01296 00131 00272 15376 00960 08252 00000 00195 26115 13088 12290
 +
  03 00390 00129 00129 00129 16400 00000 00004 00000 00064 00000 00000 00000
 +
  04 00064 00000 00000 00000 00000 06280 49154 00008 00004 00000 00780 00000
 +
  05 00000 00000 05188 05188 25668 01089 17476 17476 17476 04676 17476 17476
 +
  06 17476 16452 17476 17476 17476 01028 17472 16448 00064 05952 16384 17429
 +
  07 17408 17476 17408 17472 17472 01092 00271 32768 32768 00000 00000 00000
 +
  08 00000 00000 00000 00000 36896 36896 00016 00016 00000 32768 00000 00000
 +
  09 00046 00000 00010 00010 00000 00000 00000 00000 00006 00006
 +
OK
 +
 
 +
 
 +
----
 +
 
 +
====reset ====
 +
 
 +
:''reset the CAN stack see https://wiki.openmotics.com/index.php/AIO_Release_Notes#Factory_Reset_of_a_full_installation_can_be_done_with_following_guideline''
  
 
:;Returns
 
:;Returns
Register---Value--|--Register---Value--|--Register---Value--|--Register---Value--
+
::OK
C1CTRL1    00000  |  C2CTRL1    01152  |  C1EC      00002  |  C2EC      00000
 
C1CTRL2    00000  |  C2CTRL2    00000  |  C1CFG1    00087  |  C2CFG1    00000
 
C1VEC      00064  |  C2VEC      00064  |  C1CFG2    00658  |  C2CFG2    00000
 
C1FCTRL    16385  |  C2FCTRL    00000  |  C1TR01CON  00128  |  C2TR01CON  00000
 
C1FIFO    00257  |  C2FIFO    00000  |  C1TR23CON  00000  |  C2TR23CON  00000
 
C1INTF    00128  |  C2INTF    00000  |  C1TR45CON  00000  |  C2TR45CON  00000
 
C1INTE    00003  |  C2INTE    00000  |  C1TR67CON  00000  |  C2TR67CON  00000
 
C1RXFUL1  00000  |  C2RXFUL1  00000  |  C1RXFUL2  00000  |  C2RXFUL2  00000
 
C1RXOVF1  00000  |  C2RXOVF1  00000  |  C1RXOVF2  00000  |  C2RXOVF2  00000
 
U1MODE    32776  |  U2MODE    32776  |  U3MODE    32776  |  U4MODE    32776
 
U1STA      01040  |  U2STA      01296  |  U3STA      01296  |  U4STA      01284
 
U1BRG      00130  |  U2BRG      00130  |  U3BRG      00130  |  U4BRG      00130
 
IFS0      16400  |  IFS1      00000  |  IFS2      00004  |  IFS3      00000
 
IFS4      00064  |  IFS5      00130  |  IFS6      00000  |  IFS8      00000
 
IFS9      00000  |  IEC0      06280  |  IEC1      49154  |  IEC2      00008
 
IEC3      00004  |  IEC4      00000  |  IEC5      00780  |  IEC6      00000
 
IEC8      00000  |  IEC9      00000  |  IPC0      17476  |  IPC1      17476
 
IPC2      17476  |  IPC3      01090  |  IPC4      17476  |  IPC5      17476
 
IPC6      17476  |  IPC7      09284  |  IPC8      17476  |  IPC9      17476
 
IPC10      17476  |  IPC11      16452  |  IPC12      17476  |  IPC13      17476
 
IPC14      17476  |  IPC15      01028  |  IPC16      17472  |  IPC18      16448
 
IPC19      00064  |  IPC20      09280  |  IPC21      16384  |  IPC22      17444
 
IPC23      17408  |  IPC24      17476  |  IPC35      17408  |  IPC36      17472
 
IPC36      17472  |  IPC37      01092  |  INTTREG    00532  |  T1CON      32768
 
T2CON      00000  |  T3CON      00000  |  T4CON      00000  |  T5CON      00000
 
T6CON      00000  |  T7CON      00000  |  T8CON      00000  |  T9CON      00000
 
I2C1CON    36896  |  I2C2CON    36896  |  I2C1STAT  00016  |  I2C2STAT  00016
 
INTCON1    00000  |  INTCON2    32768  |  INTCON3    00000  |  INTCON4    00000
 
OSCCON    13088  |  CLKDIV    12288  |  PLLFBD    00058  |  REFOCON    00000
 
RCON      00131  |  PORTA      01280  |  PORTB      05136  |  PORTC      00832
 
PORTD      00064  |  PORTE      00000  |  PORTF      00067  |  PORTG      00003
 
  
  
Line 265: Line 347:
 
----
 
----
  
====startup read====
+
====module discover start====
  
:''A group Action can be defined that needs to be executed when the system starts. This instruction will read the group nr that will be executed at startup.''
+
:''This instruction will start the discovery mode of the RS485 Bus for the non-energy modules. When this instruction is executed, the normal function of the bus is stopped to be able to add new modules.''
  
 
:;Returns
 
:;Returns
::<code>group nr</code>
 
 
::<code>OK</code>  
 
::<code>OK</code>  
  
Line 276: Line 357:
  
 
:;Instruction:
 
:;Instruction:
::<code>startup read</code>
+
::<code>module discover start</code>
  
 
:;Returns
 
:;Returns
::<code>5</code>
 
 
::<code>OK</code>  
 
::<code>OK</code>  
  
 
----
 
----
  
====startup write [group nr]====
+
====module discover stop====
  
:''A group Action can be defined that needs to be executed when the system starts. This instruction will write the group nr that will be executed at startup.''
+
:''This instruction will stop the discovery mode of the RS485 Bus for the non-energy modules''
 
 
:;[group nr]
 
::Indicates which group nr that needs to be executed at startup.
 
  
 
:;Returns
 
:;Returns
Line 297: Line 374:
  
 
:;Instruction:
 
:;Instruction:
::<code>startup write 5</code>
+
::<code>module discover stop</code>
  
:;Returns  
+
:;Returns
 
::<code>OK</code>  
 
::<code>OK</code>  
  
 
----
 
----
  
===Input instructions===
+
====startup group read====
====input link read [input nr]====
 
  
:''This instruction will read, for an input, which output or action is linked to it.''
+
:''A group Action can be defined that needs to be executed when the system starts. This instruction will read the group nr (0-254) that will be executed at startup.''
 
 
:;[input nr]
 
::Indicates which input that the link has to be read.
 
  
 
:;Returns
 
:;Returns
::<code>output nr or link</code>
+
::<code>group nr</code>
 
::<code>OK</code>  
 
::<code>OK</code>  
  
Line 319: Line 392:
  
 
:;Instruction:
 
:;Instruction:
::<code>input link read 15</code>
+
::<code>startup group read</code>
  
 
:;Returns
 
:;Returns
::<code>12</code>  
+
::<code>5</code>  
 
::<code>OK</code>  
 
::<code>OK</code>  
  
 
----
 
----
  
====input link write [input nr][output link nr]====
+
====startup group write [group nr]====
  
:''This instruction will write, for an input, which output or action is linked to it.''
+
:''A group Action can be defined that needs to be executed when the system starts. This instruction will write the group nr (0-254) that will be executed at startup.''
  
:;[input nr]
+
:;[group nr]
::Indicates which input that the link has to be written.
+
::Indicates which group nr that needs to be executed at startup.
  
 
:;Returns
 
:;Returns
 
::<code>OK</code>  
 
::<code>OK</code>  
  
Example: Link input 15 with output 12
+
Example:
  
 
:;Instruction:
 
:;Instruction:
::<code>input link write 15 12</code>
+
::<code>startup group write 5</code>
  
:;Returns
+
:;Returns  
 
::<code>OK</code>  
 
::<code>OK</code>  
  
 
----
 
----
  
====input list ====
+
====queue list====
  
:''This instruction will display the list of inputs, the status (0-> release state, 1-> press state), the link (is an action configured or an output linked) and the name of each input''
+
:''This instruction will print on console the immediate buffer queue. This instruction can also be used to see what's been happening recently and see the instruction that have just been executed.''
  
 
:;Returns
 
:;Returns
::The input list
+
:: Full list of the immediate queue including values of all pointers used
 +
::<code>OK</code>
 +
 
 +
Example:
 +
 
 +
:;Instruction:
 +
::<code>queue list</code>
 +
 
 +
:;Returns
 +
:: Queue list
 +
::<code>OK</code>
  
 
----
 
----
  
====input release [input nr]====
+
===Time & Date instructions===
 +
====days group follow read====
  
:''Switch input to release state for virtual modules.''
+
:''A group Action can be defined that needs to be executed when the date (day) changes. This instruction will read the group nr (0-254) that will be executed at day change.''
 
 
:;[input nr]
 
::Indicates which input that needs to be put in release state, a maximum of 480 (0 - 479) inputs can be used.
 
  
 
:;Returns
 
:;Returns
 +
::<code>group nr</code>
 
::<code>OK</code>  
 
::<code>OK</code>  
  
Line 369: Line 451:
  
 
:;Instruction:
 
:;Instruction:
::<code>input release 28</code>
+
::<code>days group follow read</code>
  
 
:;Returns
 
:;Returns
 +
::<code>5</code>
 
::<code>OK</code>  
 
::<code>OK</code>  
  
 
----
 
----
  
====input press [input nr]====
+
====days group follow write [group nr]====
  
:''Switch input to press state for virtual modules.''
+
:''A group Action can be defined that needs to be executed when the date (day) changes. This instruction will write the group nr (0-254) that will be executed at day change.''
  
:;[input nr]
+
:;[group nr]
::Indicates which input that needs to be put in press state, a maximum of 480 (0 - 479) inputs can be used.
+
::Indicates which group nr that needs to be executed at day change.
  
 
:;Returns
 
:;Returns
Line 389: Line 472:
  
 
:;Instruction:
 
:;Instruction:
::<code>input press 28</code>
+
::<code>days group follow write 6</code>
  
:;Returns
+
:;Returns  
 
::<code>OK</code>  
 
::<code>OK</code>  
  
 
----
 
----
 +
----
 +
====hours group follow read====
  
====input name write [input nr][input name]====
+
:''A group Action can be defined that needs to be executed when the time (hour) changes. This instruction will read the group nr (0-254) that will be executed at hour change.''
  
:''Write the name of an input, max 16 characters.''
+
:;Returns
 +
::<code>group nr</code>
 +
::<code>OK</code>
  
:;[input nr]
+
Example:
::Indicates which input the name has to be written.
 
 
 
:;[input name]
 
::the ascii name of the input (maximum 16 characters).
 
 
 
:;Returns
 
::<code>OK</code>
 
 
 
Example:
 
  
 
:;Instruction:
 
:;Instruction:
::<code>input name write 28 Bedroom parents</code>
+
::<code>hours group follow read</code>
  
 
:;Returns
 
:;Returns
 +
::<code>5</code>
 
::<code>OK</code>  
 
::<code>OK</code>  
  
 
----
 
----
  
====input name read [input nr]====
+
====hours group follow write [group nr]====
  
:''Read the name of an input''
+
:''A group Action can be defined that needs to be executed when the time (hour) changes. This instruction will write the group nr (0-254) that will be executed at hour change.''
  
:;[input nr]
+
:;[group nr]
::Indicates which input the name has to be displayed.
+
::Indicates which group nr that needs to be executed at hour change.
  
 
:;Returns
 
:;Returns
::<code>Input Name</code>
 
 
::<code>OK</code>  
 
::<code>OK</code>  
  
Line 433: Line 511:
  
 
:;Instruction:
 
:;Instruction:
::<code>input name read 28</code>
+
::<code>hours group follow write 6</code>
  
 
:;Returns  
 
:;Returns  
::<code>Bedroom Parents</code>
 
 
::<code>OK</code>  
 
::<code>OK</code>  
  
 
----
 
----
 +
====minutes group follow read====
  
====input number modules read====
+
:''A group Action can be defined that needs to be executed when the time (minutes) changes. This instruction will read the group nr (0-254) that will be executed at minute change.''
 
 
:''Read the number of input modules that are programmed and active''
 
  
 
:;Returns
 
:;Returns
::<code>Number Of Input Modules</code>  
+
::<code>group nr</code>
 
::<code>OK</code>  
 
::<code>OK</code>  
  
Line 452: Line 528:
  
 
:;Instruction:
 
:;Instruction:
::<code>input number modules read</code>
+
::<code>minutes group follow read</code>
  
:;Returns  
+
:;Returns
::<code>6</code>  
+
::<code>5</code>  
 
::<code>OK</code>  
 
::<code>OK</code>  
  
 
----
 
----
  
====input number modules write [number of input modules]====
+
====minutes group follow write [group nr]====
  
:''Writes the number of input modules that are programmed and active. This instruction will, after the write is performed, activate the instruction eeprom activate so all values from eeprom are read and copied in RAM''
+
:''A group Action can be defined that needs to be executed when the time (minutes) changes. This instruction will write the group nr (0-254) that will be executed at minute change.''
  
:;[number of input modules]
+
:;[group nr]
::Indicates the number of input modules that are active and programmed.
+
::Indicates which group nr that needs to be executed at minute change.
  
 
:;Returns
 
:;Returns
Line 473: Line 549:
  
 
:;Instruction:
 
:;Instruction:
::<code>input number modules write 7</code>
+
::<code>minutes group follow write 6</code>
  
 
:;Returns  
 
:;Returns  
 
::<code>OK</code>  
 
::<code>OK</code>  
  
----
+
====time read====
 +
 
 +
:''This instruction will read the time of the internal Real Time Clock.''
 +
 
 +
:;Returns
 +
:: The time
 +
::<code>OK</code>
  
===Output instructions===
+
Example:
====output list ====
 
  
:''This instruction will display the list of outputs, the status (On or Off), the dim value, the configured timer value, the timer type (Off, , 100ms timer, 1s timer or 1m timer) and the name of each output''
+
:;Instruction:
 +
::<code>time read</code>
  
 
:;Returns
 
:;Returns
::The output list
+
::<code>20:13:19</code>
 +
::<code>OK</code>
  
 
----
 
----
  
====output on [output nr] [dimmer value*] [timer value*]====
+
====time write [hours][minutes][seconds]====
  
:''Switch ON an output. * are optional values''
+
:''This instruction will write the time in the Real Time Chip''
  
:;[output nr]
+
:;[hours]
::Indicates which output that needs to be switched ON, a maximum of 480 (0 - 479) outputs can be used.
+
::Value 0 to 23
 
+
:;[minutes]
:;[dimmer value*]
+
::Value 0 to 59
::Optional parameter to set the dimmer value (0-255)
+
:;[seconds]
 
+
::Value 0 to 99
:;[timer value*]
 
::Optional parameter to set the timer value (0-65535s)
 
  
 
:;Returns
 
:;Returns
 
::<code>OK</code>  
 
::<code>OK</code>  
  
Examples:
+
Example:
  
 
:;Instruction:
 
:;Instruction:
:<code>output on 127</code>  
+
::<code>time write 19 25 57</code>
::will switch ON output 127.
 
  
:;Returns  
+
:;Returns
 
::<code>OK</code>  
 
::<code>OK</code>  
  
:;Instruction:
+
----
::<code>output on 127 56</code>
+
 
::will switch ON output 127 with dimmer value 56.
+
====date read====
 +
 
 +
:''This instruction will read the date of the internal Real Time Clock.''
  
:;Returns  
+
:;Returns
 +
:: The date
 
::<code>OK</code>  
 
::<code>OK</code>  
 +
 +
Example:
  
 
:;Instruction:
 
:;Instruction:
::<code>output on 127 56 3600</code>  
+
::<code>date read</code>
::will switch ON output 127 with dimmer value 56 for 3600 seconds.
 
  
:;Returns  
+
:;Returns
 +
::<code>2 25-12-18</code>
 
::<code>OK</code>  
 
::<code>OK</code>  
  
 
----
 
----
  
====output off [output nr]====
+
====date write [day of the week][day][month][year]====
  
:''Switch OFF an output.''
+
:''This instruction will write the date in the Real Time Chip''
  
:;[output nr]
+
:;[day of the week]
::Indicates which output that needs to be switched OFF, a maximum of 480 (0 - 479) outputs can be used.
+
::Value 1 to 7 represents Monday to Sunday.
 +
:;[day]
 +
::Value 1 to 31, day of the month.
 +
:;[month]
 +
::Value 1 to 12
 +
:;[year]
 +
::Value 0 to 99
  
 
:;Returns
 
:;Returns
Line 544: Line 635:
  
 
:;Instruction:
 
:;Instruction:
::<code>output off 127</code> will switch OFF output 127.
+
::<code>date write 2 25 12 18</code>
  
 
:;Returns
 
:;Returns
Line 551: Line 642:
 
----
 
----
  
====output name write [output nr][output name]====
+
===Basic Action instructions===
 
+
====basic action debug off====
:''Write the name of an output, max 16 characters.''
 
  
:;[input nr]
+
:''This instruction will disable the debug function for Basic Actions. When the debug function is activate, every time a Basic Action is executed, the Basic Action Number and Basic Action explanation will be printed on the console.''
::Indicates which output the name has to be written.
 
 
 
:;[output name]
 
::the ascii name of the output (maximum 16 characters).
 
  
 
:;Returns
 
:;Returns
 
::<code>OK</code>  
 
::<code>OK</code>  
  
Example:
+
Example: Deactivate Basic Action debug mode
  
 
:;Instruction:
 
:;Instruction:
::<code>output name write 24 Bedroom 4</code>
+
::<code>basic action debug off</code>
  
 
:;Returns
 
:;Returns
Line 574: Line 660:
 
----
 
----
  
====output name read [output nr]====
+
====basic action debug on====
 
 
:''Read the name of an output''
 
  
:;[output nr]
+
:''This instruction will enable the debug function for Basic Actions. When the debug function is activate, every time a Basic Action is executed, the Basic Action Number and Basic Action explanation will be printed on the console.''
::Indicates which output the name has to be displayed.
 
  
 
:;Returns
 
:;Returns
::<code>output Name</code>
 
 
::<code>OK</code>  
 
::<code>OK</code>  
  
Example:
+
Example: Activate Basic Action debug mode
  
 
:;Instruction:
 
:;Instruction:
::<code>output name read 24</code>
+
::<code>basic action debug on</code>
  
:;Returns  
+
:;Returns
::<code>Bedroom 4</code>
 
 
::<code>OK</code>  
 
::<code>OK</code>  
  
 
----
 
----
  
====output number modules read====
+
====basic action activate [Type] [Action] [Device Nr] [Extra parameter]====
 +
 
 +
:''This instruction will execute a Basic Action. For a full list of basic actions, see [[Action Types AIO]]''
 +
 
 +
:;[Type]
 +
::This is the Type of a Basic Action, see [Action Types AIO]].
 +
 
 +
:;[Action]
 +
::This is the Action of a Basic Action, see [Action Types AIO]].
 +
 
 +
:;[Device Nr]
 +
::This is the Device Nr of a Basic Action, see [Action Types AIO]].
  
:''Read the number of output modules that are programmed and active''
+
:;[Extra Parameter]
 +
::This is the Extra Parameter of a Basic Action, see [Action Types AIO]].
  
 
:;Returns
 
:;Returns
::<code>Number Of Output Modules</code>
 
 
::<code>OK</code>  
 
::<code>OK</code>  
  
Example:
+
Example: Toggle output 12
  
 
:;Instruction:
 
:;Instruction:
::<code>output number modules read</code>
+
::<code>basic action activate 0 16 12 0</code>
  
:;Returns  
+
:;Returns
::<code>6</code>
 
 
::<code>OK</code>  
 
::<code>OK</code>  
  
 
----
 
----
  
====output number modules write [number of output modules]====
+
====basic action activate [Type] [Action] [Device Nr.MSB] [Device Nr.LSB] [Extra parameter.MSB] [Extra parameter.LSB]====
  
:''Writes the number of output modules that are programmed and active. This instruction will, after the write is performed, activate the instruction eeprom activate so all values from eeprom are read and copied in RAM''
+
:''This instruction will execute a Basic Action. Since Device Nr and Extra Parameter contains word value, it's sometime needed for ease of use to be able to use the MSB (Most Significant Byte) and LSB (Least Significant Byte) values. For a full list of basic actions, see [[Action Types AIO]]''
  
:;[number of output modules]
+
:;[Type]
::Indicates the number of output modules that are active and programmed.
+
::This is the Type of a Basic Action, see [Action Types AIO]].
  
:;Returns
+
:;[Action]
::<code>OK</code>
+
::This is the Action of a Basic Action, see [Action Types AIO]].
  
Example:
+
:;[Device Nr.MSB]
 +
::This is the MSB Device Nr of a Basic Action, see [Action Types AIO]].
 +
 
 +
:;[Device Nr.LSB]
 +
::This is the LSB Device Nr of a Basic Action, see [Action Types AIO]].
 +
 
 +
:;[Extra Parameter.MSB]
 +
::This is the MSB Extra Parameter of a Basic Action, see [Action Types AIO]].
  
:;Instruction:
+
:;[Extra Parameter.LSB]
::<code>output number modules write 7</code>
+
::This is the LSB Extra Parameter of a Basic Action, see [Action Types AIO]].
  
:;Returns  
+
:;Returns
 
::<code>OK</code>  
 
::<code>OK</code>  
  
----
+
Example: Program in the uCAN (ID 26 88 120) for Sensor0 the sensor nr 15
  
===Sensor instructions===
+
:;Instruction:
====sensor list ====
+
::<code>basic action activate 20 18 26 88 120 15</code>
 
 
:''This instruction will display the list of sensors, the temperature, the humidity, the brightness and the name of each sensor''
 
  
 
:;Returns
 
:;Returns
::The input list
+
::<code>OK</code>
  
 
----
 
----
  
====sensor name write [sensor nr][sensor name]====
+
===Eeprom & Fram instructions===
 +
====eeprom erase [start page][end page][security code]====
 +
 
 +
:''This instruction will erase 1 or more pages of the eeprom. With the start and end page, you can indicate which pages must be erased''
  
:''Write the name of a sensor, max 16 characters.''
+
:;[start page]
 +
::Indicates the start page (0-511) of the pages that must be erased.
  
:;[sensor nr]
+
:;[end page]
::Indicates which sensor the name has to be written.
+
::Indicates the end page (0-511) of the pages that must be erased.
  
:;[sensor name]
+
:;[security code]
::the ascii name of the sensor (maximum 16 characters).
+
::Security code "28883" must be used to be able to activate the erase function
  
 
:;Returns
 
:;Returns
 +
::delete progress information
 
::<code>OK</code>  
 
::<code>OK</code>  
  
Example:
+
Example: Delete eeprom page 256
  
 
:;Instruction:
 
:;Instruction:
::<code>sensor name write 12 Bedroom 1</code>
+
::<code>eeprom erase 256 256 28883</code>
  
 
:;Returns
 
:;Returns
 
::<code>OK</code>  
 
::<code>OK</code>  
  
 +
Important: It's NOT possible to undo this instruction. Once the erase is executed, the data is erased and can't be retrieved anymore.
 
----
 
----
  
====sensor name read [sensor nr]====
+
====eeprom read [page][byte][Opt: Nr of byte]====
 +
 
 +
:''This instruction will read 1 of more bytes from eeprom. Maximum 30 bytes can be read''
 +
 
 +
:;[page]
 +
::This is the page (0-511) of the eeprom to be read.
  
:''Read the name of a sensor''
+
:;[byte]
 +
::This is the byte nr to be read (or the start byte when more then 1 byte is requested)
  
:;[sensor nr]
+
:;[Opt: Nr of byte]
::Indicates which sensor the name has to be displayed.
+
::This optional parameter (2-30) can be added when more then 1 byte must be read
  
 
:;Returns
 
:;Returns
::<code>Sensor Name</code>  
+
::<code>eeprom read bytes</code>
 
::<code>OK</code>  
 
::<code>OK</code>  
  
Example:
+
Example: Read from page 0 start at byte 2 the next 10 bytes
  
 
:;Instruction:
 
:;Instruction:
::<code>sensor name read 12</code>
+
::<code>eeprom read 0 2 20</code>
  
:;Returns  
+
:;Returns
::<code>Bedroom 1</code>  
+
::<code>0 2 -> 5 ( )</code>
 +
::<code>0 3 -> 1 ( )</code>
 +
::<code>0 4 -> 255 ( )</code>
 +
::<code>0 5 -> 13 ( )</code>
 +
::<code>0 6 -> 7 ( )</code>
 +
::<code>0 7 -> 4 ( )</code>
 +
::<code>0 8 -> 255 ( )</code>
 +
::<code>0 9 -> 255 ( )</code>
 +
::<code>0 10 -> 255 ( )</code>
 +
::<code>0 11 -> 255 ( )</code>
 +
::<code>0 12 -> 255 ( )</code>
 +
::<code>0 13 -> 255 ( )</code>
 +
::<code>0 14 -> 255 ( )</code>
 +
::<code>0 15 -> 255 ( )</code>
 +
::<code>0 16 -> 255 ( )</code>
 +
::<code>0 17 -> 255 ( )</code>
 +
::<code>0 18 -> 255 ( )</code>
 +
::<code>0 19 -> 255 ( )</code>
 +
::<code>0 20 -> 255 ( )</code>
 
::<code>OK</code>  
 
::<code>OK</code>  
  
 
----
 
----
 +
====eeprom read [Id0][Id1][Id2][location]====
 +
:''CLI instruction "eeprom read" also supports reading the eeprom of uCAN slave modules. This function requires uCAN Firmware Version 6.0.21 or higher. Instead of 2 or 3 arguments being used (for internal eeprom read), 4 arguments are used to read the eeprom of a uCAN.''
 +
eeprom read Id0 Id1 Id2 location
  
====sensor number modules read====
+
:;[Id0..Id2]
 +
::This is the 3 bytes ID (without CAN Bus number) of the uCAN
  
:''Read the number of sensor modules that are programmed and active''
+
:;[location]
 +
::Indicates the eeprom memory read location (0-1023) of the uCAN
  
 
:;Returns
 
:;Returns
::<code>Number Of Sensor Modules</code>  
+
::Read Byte
::<code>OK</code>
+
::<code>OK</code>
 +
Example: Read the value of eeprom location 29 of the uCAN with ID 91.59.166
 +
el
 +
--- Total Uptime: 000216 Hours, Last Startup: 08:02:09 02/09/21  ---
 +
--- Module Type: BRAIN, RS485 mode: 0, Board: 27'C  --.--V --.--A ---
 +
--- PWR RS485/CAN: 1/1, CANTERM: 1, BB Debug: 255, Fw: 1.0.109      ---
 +
-------Output------------ID---------Err-------Status--------Pwr---
 +
  00 (l I 000->007) 108.000.000.000 00000  GOOD      (000)  1
 +
-------Input-------------ID---------Err-------Status--------Pwr---
 +
  00 (i I 000->007) 105.000.000.000 00000  GOOD      (000)  1
 +
  01 (b C 008->015) 098.000.000.001 00000  GOOD      (000)  1
 +
  02 (b C 016->023) 098.000.000.002 00000  GOOD      (000)  1
 +
  03 (b C 024->031) 098.000.000.003 00000  GOOD      (000)  1
 +
  04 (b C 032->039) 098.000.000.004 00000  GOOD      (000)  1
 +
-------Sensor------------ID---------Err-------Status--------Pwr---
 +
  00 (s C 000->007) 115.000.000.000 00000  GOOD      (000)  1
 +
-------Micro CAN---------ID---------Err-------Status--------Pwr---
 +
  00 (m C 000->000) 100.069.253.220 00001  GOOD      (000)  1
 +
  01 (m C 001->001) 100.052.078.228 00000  GOOD      (000)  1
 +
  02 (m C 002->002) 100.135.225.126 00000  GOOD      (000)  1
 +
  03 (m C 003->003) 100.091.059.166 00000  GOOD      (000)  1
 +
OK
 +
eeprom read 91 59 166 29
 +
15
 +
OK
 +
----
 +
====eeprom read [Id0][Id1][Id2][Id3][location]====
 +
:''CLI instruction "eeprom read" also supports reading the internal processor eeprom of RS485 slave modules. Instead of 2 or 3 arguments being used (for internal eeprom read) or 4 arguments (reading uCAN), 5 arguments are used to read the eeprom of a RS485 slave module.''
 +
eeprom read Id0 Id1 Id2 Id3 location
 +
 
 +
:;[Id0..Id3]
 +
::This is the 4 bytes ID of the RS485 slave module
  
Example:
+
:;[location]
 +
::Indicates the eeprom memory read location (0-1023) of the RS485 slave
  
:;Instruction:
+
:;Returns
::<code>sensor number modules read</code>
+
::Location -> Read Byte
 +
::<code>OK</code>
 +
Example: Read the value of eeprom location 2 of input module with ID 73.20.51.10
 +
eeprom read 73 20 51 10 2
 +
2 -> 20
 +
OK
 +
----
  
:;Returns
+
====eeprom write [page][byte][data byte]====
::<code>6</code>
 
::<code>OK</code>
 
  
----
+
:''This instruction will write 1 byte in eeprom.''
  
====sensor number modules write [number of sensor modules]====
+
:;[page]
 +
::Indicates the eeprom page (0-511) where the byte will be written.
  
:''Writes the number of sensor modules that are programmed and active. This instruction will, after the write is performed, activate the instruction eeprom activate so all values from eeprom are read and copied in RAM''
+
:;[byte]
 +
::Indicates the eeprom byte (0-255) where the byte will be written.
  
:;[number of sensor modules]
+
:;[data byte]
::Indicates the number of sensor modules that are active and programmed.
+
::This is the byte that will be written
  
 
:;Returns
 
:;Returns
 
::<code>OK</code>  
 
::<code>OK</code>  
  
Example:
+
Example: Write at page 10 byte 200 value 33
  
 
:;Instruction:
 
:;Instruction:
::<code>sensor number modules write 7</code>
+
::<code>eeprom write 10 200 33</code>
  
:;Returns  
+
:;Returns
 
::<code>OK</code>  
 
::<code>OK</code>  
  
 +
Note: Your full configuration is stored in eeprom. Programming bytes in eeprom can make your system non-functional so please be careful using this instruction unless you know what you're doing.
 
----
 
----
 +
====eeprom write [Id0][Id1][Id2][location][data_byte]====
 +
:''CLI instruction "eeprom write" also supports writing the eeprom of RS485 slave modules. Instead of 3 arguments used (for internal eeprom write), 5 arguments are used to write the eeprom of a uCAN.''
 +
eeprom write Id0 Id1 Id2 location data_byte
 +
 +
:;[Id0..Id2]
 +
::This is the 3 bytes ID (without CAN Bus number) of the uCAN
  
===CAN module instructions===
+
:;[location]
====eeprom can list ====
+
::Indicates the eeprom memory location (0-1023) of the uCAN where the byte will be written.
  
:''This instruction will display the list of all the CAN modules that has been programmed in the master. Following information will be returned:''
+
:;[data byte]
:''* Nr: Line Nr and order in which the module has been programmed''
+
::This is the byte (0-255) that will be written in the eeprom of the uCAN
:''* ID: The unique ID (ID2,ID1&ID0) of the programmed micro CAN''
 
:''* Inp.link0..5: This will indicate, for the 6 inputs a micro CAN has, the link to the system input. The value between brackets is the internal input CAN numbering''
 
:''* Tem.link0..1: This will indicate, for the 2 sensors a micro CAN can have, the link to the system sensor number. The value between brackets is the internal sensor CAN numbering''
 
:''When 255 is used for input or sensor link means that the sensor is not in use or the input is not configured
 
  
 
:;Returns
 
:;Returns
  Nr-ID2.ID1.ID0--Inp.link0-Inp.link1-Inp.link2-Inp.link3-Inp.link4-Inp.link5-Tem.link0-Tem.link1
+
::Written Byte
  00 140.162.190 024(000) 255(255255(255) 255(255) 255(255255(255) 000(000)  255(255)
+
::<code>OK</code>
01 062.063.159  255(255255(255) 255(255255(255) 255(255025(001) 001(001) 255(255)
+
Example: Write a value (20) in eeprom location 29 of the eeprom of the uCAN with ID 91.59.166
02 075.144.045  026(002255(255) 255(255) 255(255255(255) 255(255255(255)  002(002)
+
el
03 140.151.125  255(255027(003) 255(255255(255) 028(004) 255(255) 003(003004(004)
+
--- Total Uptime: 000216 Hours, Last Startup: 08:02:09 02/09/21  ---
 +
--- Module Type: BRAIN, RS485 mode: 0, Board: 27'C --.--V --.--A ---
 +
  --- PWR RS485/CAN: 1/1, CANTERM: 1, BB Debug: 255, Fw: 1.0.109      ---
 +
  -------Output------------ID---------Err-------Status--------Pwr---
 +
  00 (l I 000->007) 108.000.000.000 00000  GOOD      (0001
 +
  -------Input-------------ID---------Err-------Status--------Pwr---
 +
  00 (i I 000->007) 105.000.000.000 00000  GOOD      (0001
 +
  01 (b C 008->015) 098.000.000.001 00000  GOOD      (000)  1
 +
  02 (b C 016->023) 098.000.000.002 00000  GOOD      (0001
 +
  03 (b C 024->031) 098.000.000.003 00000  GOOD      (0001
 +
  04 (b C 032->039) 098.000.000.004 00000  GOOD      (0001
 +
  -------Sensor------------ID---------Err-------Status--------Pwr---
 +
  00 (s C 000->007) 115.000.000.000 00000  GOOD      (0001
 +
  -------Micro CAN---------ID---------Err-------Status--------Pwr---
 +
  00 (m C 000->000) 100.069.253.220 00001  GOOD      (0001
 +
  01 (m C 001->001) 100.052.078.228 00000  GOOD      (0001
 +
  02 (m C 002->002) 100.135.225.126 00000  GOOD      (0001
 +
  03 (m C 003->003) 100.091.059.166 00000  GOOD      (0001
 +
OK
 +
eeprom write 91 59 166 29 20
 +
20
 +
OK
 +
  eeprom read 91 59 166 29
 +
  20
 +
  OK
 +
----
 +
 
 +
====eeprom write [Id0][Id1][Id2][Id3][location][data_byte]====
 +
:''CLI instruction "eeprom write" also supports writing the eeprom of RS485 slave modules. Instead of 3 arguments used (for internal eeprom write) or 5 arguments are used to write the eeprom of a uCAN, this instruction uses 6 arguments to write the eeprom of a RS485 slave module.''
 +
  eeprom write Id0 Id1 Id2 Id3 location data_byte
  
----
+
:;[Id0..Id3]
 +
::This is the 4 bytes ID of the RS485 slave module
  
====ping can list ====
+
:;[location]
 +
::Indicates the eeprom memory location (0-1023) of the RS485 slave module where the byte will be written.
  
:''This instruction will ping all the programmed micro CAN modules and list the response of all the CAN modules including the configuration that has been saved in the eeprom of those modules. Following information will be returned:''
+
:;[data byte]
:''* Nr: Line Nr and order in which the module has been programmed''
+
::This is the byte (0-255) that will be written in the eeprom of the RS485 slave module
:''* ID: The unique ID (ID2,ID1&ID0) of the programmed micro CAN. This information is retrieved from the eeprom of the master''
 
:''* Inp.link0..5: This is the response of the micro CAN that indicates, for the 6 inputs a micro CAN has, the link to the system input. The value between brackets is the internal input CAN numbering''
 
:''* Tem.link0..1: This is the response of the micro CAN that indicates, for the 2 sensors a micro CAN can have, the link to the system sensor number. The value between brackets is the internal sensor CAN numbering''
 
:''* Type: This will indicate the type of sensor that is connected:
 
:'' ** 0: Sensor of the DS1820 family is connected on the first output
 
:'' ** 1: Sensor of the DS1820 family is connected on the second output
 
:'' ** 2: 2 sensors of the DS1820 family are connected (on both outputs)
 
:'' ** 3: Honeywell Temp/humidity Sensor is connected
 
:'' ** 4: TSL2561 LUX sensor is connected
 
:'' ** 5: Honeywell Temp/humidity Sensor & TSL2561 LUX sensor are connected
 
:'' ** 255: No sensors are currently connected
 
:''* Firmware: This gives the firmware version that is loaded on the micro CAN module
 
:''* Delay: This value will indicate the delay between the message that has been sent to the micro CAN module and the 6 received messages from the micro CAN with the configuration.
 
:''When 255 is used for input or sensor link means that the sensor is not in use or the input is not configured. When NA is returned, the sensor is not responding.
 
  
 
:;Returns
 
:;Returns
Nr-ID2.ID1.ID0--Inp.link0-Inp.link1-Inp.link2-Inp.link3-Inp.link4-Inp.link5-Tem.link0-Tem.link1-Type-Firmware-delay--
+
::Written Byte
00 140.162.190  024(000) 255(255)  255(255)  255(255)  255(255)  255(255)  000(000)  255(255)  004  F2.0.10 010ms
+
::<code>OK</code>
01 062.063.159  255(255)  255(255) 255(255)  255(255)  255(255)  025(001)  001(001)  255(255)  000  F2.0.10 011ms
+
Example: Write a value (20) in eeprom location 29 of the eeprom of the input module with ID 73.10.22.58
  02 075.144.045  026(002255(255)  255(255)  255(255)  255(255) 255(255)  255(255)  002(002)  001  F2.0.10 023ms
+
  eeprom write 73 10 22 58 29 20
  03 140.151.125  255(255027(003)  255(255)  255(255)  028(004)  255(255)  003(003)  004(004)  002  F2.0.10  065ms
+
  20 (29)
 +
  OK
 +
  eeprom read 73 10 22 58 29
 +
  20 (29)
 +
  OK
 +
----
 +
 
 +
====eeprom search [start page][stop page][data byte0][Opt: data byte1][Opt: data byte2][Opt: data byte3][Opt: data byte4][Opt: data byte5]====
  
 +
:''This instruction will read search for data bytes in eeprom. The data bytes will indicate which bytes are being searched. The start and end page defines in which pages of the eeprom the search instruction has to be performed. The eeprom has 512 pages (0-511), each page contains 256 bytes of data. You can select 1 or more (up to 6) data bytes to be searched.''
  
----
+
:;[start page]
 +
::This is the start page (0-511) of the eeprom where the search will start.
  
====can config delete ====
+
:;[stop page]
 +
::This is the stop page (0-511) of the eeprom where the search will stop.
  
:''This instruction will perform a factory reset of the CAN config in the master as well as in the micro CAN slaves. After this instruction, the micro CAN config is deleted from the eeprom of the master and the micro CAN slaves. 
+
:;[data byte0..5]
 +
::This is the data byte that will be searched in eeprom
  
 
:;Returns
 
:;Returns
::<code>can config delete</code>  
+
::<code>eeprom search result</code>
 
::<code>OK</code>  
 
::<code>OK</code>  
  
Example:
+
Example: (search page 0 to 10 in eeprom to find the location where 7 or 13 is written)
  
 
:;Instruction:
 
:;Instruction:
::<code>can config delete</code>
+
::<code>eeprom search 0 10 7 13</code>
 +
 
 +
:;Returns
 +
::<code> 0 5 -> 13</code>
 +
::<code> 0 6 -> 7 </code>
 +
::<code>OK</code>  
  
:;Returns
+
As you can see, on page 0 Byte 5 and 6, the system did found results.
::<code>OK</code>
 
  
 
----
 
----
 +
====fram erase [start page][end page][security code]====
 +
 +
:''This instruction will erase 1 or more pages of the FRAM. With the start and end page, you can indicate which pages must be erased''
 +
 +
:;[start page]
 +
::Indicates the start page (0-127) of the pages that must be erased.
  
====can module number read====
+
:;[end page]
 +
::Indicates the end page (0-127) of the pages that must be erased.
  
:''Read the number of CAN modules that are programmed and active''
+
:;[security code]
 +
::Security code "28883" must be used to be able to activate the erase function
  
 
:;Returns
 
:;Returns
::<code>Number Of CAN Modules</code>
+
::delete progress information
 
::<code>OK</code>  
 
::<code>OK</code>  
  
Example:
+
Example: Delete fram page 30 till 35 (including 35)
  
 
:;Instruction:
 
:;Instruction:
::<code>can module number read</code>
+
::<code>fram erase 30 35 28883</code>
  
:;Returns  
+
:;Returns
::<code>6</code>
 
 
::<code>OK</code>  
 
::<code>OK</code>  
  
 +
Important: It's NOT possible to undo this instruction. Once the erase is executed, the data is erased and can't be retrieved anymore.
 
----
 
----
  
====can module number write [number of CAN modules]====
+
====fram read [page][byte][Opt: Nr of byte]====
 +
 
 +
:''This instruction will read 1 of more bytes from FRAM. Maximum 30 bytes can be read''
 +
 
 +
:;[page]
 +
::This is the page (0-127) of the FRAM to be read.
  
:''Writes the number of CAN modules that are programmed and active. This instruction will, after the write is performed, activate the instruction eeprom activate so all values from eeprom are read and copied in RAM''
+
:;[byte]
 +
::This is the byte nr to be read (or the start byte when more then 1 byte is requested)
  
:;[number of CAN modules]
+
:;[Opt: Nr of byte]
::Indicates the number of CAN modules that are active and programmed.
+
::This optional parameter (2-30) can be added when more then 1 byte must be read
  
 
:;Returns
 
:;Returns
 +
::<code>Fram read bytes</code>
 
::<code>OK</code>  
 
::<code>OK</code>  
  
Example:
+
Example: Read from page 0 start at byte 2 the next 10 bytes
  
 
:;Instruction:
 
:;Instruction:
::<code>can module number write 7</code>
+
::<code>fram read 0 2 20</code>
  
:;Returns  
+
:;Returns
 +
::<code>0 2 -> 5 ( )</code>
 +
::<code>0 3 -> 1 ( )</code>
 +
::<code>0 4 -> 255 ( )</code>
 +
::<code>0 5 -> 13 ( )</code>
 +
::<code>0 6 -> 7 ( )</code>
 +
::<code>0 7 -> 4 ( )</code>
 +
::<code>0 8 -> 255 ( )</code>
 +
::<code>0 9 -> 255 ( )</code>
 +
::<code>0 10 -> 255 ( )</code>
 +
::<code>0 11 -> 255 ( )</code>
 +
::<code>0 12 -> 255 ( )</code>
 +
::<code>0 13 -> 255 ( )</code>
 +
::<code>0 14 -> 255 ( )</code>
 +
::<code>0 15 -> 255 ( )</code>
 +
::<code>0 16 -> 255 ( )</code>
 +
::<code>0 17 -> 255 ( )</code>
 +
::<code>0 18 -> 255 ( )</code>
 +
::<code>0 19 -> 255 ( )</code>
 +
::<code>0 20 -> 255 ( )</code>
 
::<code>OK</code>  
 
::<code>OK</code>  
  
 
----
 
----
  
====can input number read====
+
====fram write [page][byte][data byte]====
 +
 
 +
:''This instruction will write 1 byte in FRAM.''
 +
 
 +
:;[page]
 +
::Indicates the FRAM page (1-127) where the byte will be written.
 +
 
 +
:;[byte]
 +
::Indicates the FRAM byte (0-255) where the byte will be written.
  
:''Read the number of CAN inputs that are programmed and active''
+
:;[data byte]
 +
::This is the byte that will be written
  
 
:;Returns
 
:;Returns
::<code>Number Of CAN inputs</code>
 
 
::<code>OK</code>  
 
::<code>OK</code>  
  
Example:
+
Example: Write at page 10 byte 200 value 33
  
 
:;Instruction:
 
:;Instruction:
::<code>can input number read</code>
+
::<code>fram write 10 200 33</code>
  
:;Returns  
+
:;Returns
::<code>12</code>
 
 
::<code>OK</code>  
 
::<code>OK</code>  
  
 +
Note: Please note that page 0 is protected and can't be written by the user.
 
----
 
----
  
====can input number write [number of CAN inputs]====
+
===Input instructions===
 +
====add virtual input module [id1] [id2] [id3] ====
 +
 
 +
:''This instruction will add a virtual input module (id0="i") with id1, id2 and id3. When using this instruction, please make sure that the combination id1, id2 and id3 for the input list is unique and not yet used.''
 +
:Example:
 +
el
 +
--- Total Uptime: 000259 Hours, Last Startup: 16:26:54 24/10/21  ---
 +
--- Module Type: BRAIN, RS485 mode: 0, Board: 27'C  --.--V --.--A ---
 +
--- PWR RS485/CAN: 1/1, CANTERM: 1, BB Debug: 255, Fw: 1.0.113      ---
 +
-------Output------------ID---------Err-------Status--------Pwr---
 +
  00 (l I 000->007) 108.000.000.000 00000  GOOD      (000)  1
 +
-------Input-------------ID---------Err-------Status--------Pwr---
 +
  00 (i I 000->007) 105.000.000.000 00000  GOOD      (000)  1
 +
  01 (b C 008->015) 098.000.000.001 00000  GOOD      (000)  1
 +
-------Sensor------------ID---------Err-------Status--------Pwr---
 +
  00 (s C 000->007) 115.000.000.000 00000  GOOD      (000)  1
 +
-------CAN Control-------ID---------Err-------Status--------Pwr---
 +
  00 (C E 000->000) 067.001.230.000 00000  GOOD      (016)  1
 +
-------Micro CAN---------ID---------Err-------Status--------Pwr---
 +
  00 (m C 000->000) 000.248.090.233 00000  GOOD      (000)  1
 +
OK
 +
add virtual input module 0 0 2
 +
OK
 +
el
 +
--- Total Uptime: 000259 Hours, Last Startup: 16:26:54 24/10/21  ---
 +
--- Module Type: BRAIN, RS485 mode: 0, Board: 27'C  --.--V --.--A ---
 +
--- PWR RS485/CAN: 1/1, CANTERM: 1, BB Debug: 255, Fw: 1.0.113      ---
 +
-------Output------------ID---------Err-------Status--------Pwr---
 +
  00 (l I 000->007) 108.000.000.000 00000  GOOD      (000)  1
 +
-------Input-------------ID---------Err-------Status--------Pwr---
 +
  00 (i I 000->007) 105.000.000.000 00000  GOOD      (000)  1
 +
  01 (b C 008->015) 098.000.000.001 00000  GOOD      (000)  1
 +
  02 (i V 016->023) 105.000.000.002 00000  GOOD      (000)  0
 +
-------Sensor------------ID---------Err-------Status--------Pwr---
 +
  00 (s C 000->007) 115.000.000.000 00000  GOOD      (000)  1
 +
-------CAN Control-------ID---------Err-------Status--------Pwr---
 +
  00 (C E 000->000) 067.001.230.000 00000  GOOD      (016)  1
 +
-------Micro CAN---------ID---------Err-------Status--------Pwr---
 +
  00 (m C 000->000) 000.248.090.233 00000  GOOD      (000)  1
 +
OK
  
:''Writes the number of CAN inputs that are programmed and active. This instruction will, after the write is performed, activate the instruction eeprom activate so all values from eeprom are read and copied in RAM''
+
====input action read [input nr] ====
  
:;[number of CAN inputs]
+
:''This instruction will read the BA's that are linked to an input''
::Indicates the number of CAN inputs that are active and programmed.
+
 
 +
:Following input actions with associated BA can be linked to an input:
 +
:*Action 0: Press Action
 +
:*Action 1: Release Action
 +
:*Action 2: 1 Sec Press
 +
:*Action 3: 2 Sec Press
 +
:*Action 4: Double Press
  
 
:;Returns
 
:;Returns
::<code>OK</code>  
+
::<code>----------------Act--Inp-Cnf-Typ-Act---x--(MSB.LSB)---y--(MSB.LSB)-------BA Description----</code>
 +
::<code>0-  PRESS              : Yes  001  0  255 255 65535(255.255) 65535(255.255) ->  Instruction not in use</code>
 +
::<code>1-  RELEASE            : Yes  001  1  255 255 65535(255.255) 65535(255.255) ->  Instruction not in use</code>
 +
::<code>2- 1SEC PRESS : No  001  2  255 255 65535(255.255) 65535(255.255) ->  Instruction not in use</code>
 +
::<code>3- 2SEC PRESS : No  001  3  255 255 65535(255.255) 65535(255.255) ->  Instruction not in use</code>
 +
::<code>4-DOUBLE PRESS: No  001  4  255 255 65535(255.255) 65535(255.255) ->  Instruction not in use</code>
 +
::<code>OK</code>
 +
 
 +
----
 +
====input action write [input nr] [input action] [BA Type] [BA Action] [BA Device Nr] [BA Extra parameter] ====
  
Example:
+
:''This instruction will program for an input and for a certain input action the associated BA''
  
:;Instruction:
+
:Input Nr: This is the input number to be programmed
::<code>can input number write 13</code>
+
:Input action: Following input actions can be used
 +
:*0: Press Action
 +
:*1: Release Action
 +
:*2: 1 Sec Press
 +
:*3: 2 Sec Press
 +
:*4: Double Press
 +
:BA type, BA action, BA device etc: This is the BA to be executed when an input action occurs, see [[Action Types AIO]]
  
:;Returns  
+
:;Returns
::<code>OK</code>  
+
::<code>OK</code>
  
 
----
 
----
 +
====input action write [input nr] [input action] [BA Type] [BA Action] [BA Device Nr.MSB] [BA Device Nr.LSB] [BA Extra parameter.MSB] [BA Extra parameter.LSB]====
  
====can sensor number read====
+
:''This instruction will program for an input and for a certain input action the associated BA. This instruction is equal then the above instruction excepts that BA Device Nr and BA Extra Parameter are split in a MSB byte and a LSB byte''
  
:''Read the number of CAN sensors that are programmed and active''
+
:Input Nr: This is the input number to be programmed
 +
:Input action: Following input actions can be used
 +
:*0: Press Action
 +
:*1: Release Action
 +
:*2: 1 Sec Press
 +
:*3: 2 Sec Press
 +
:*4: Double Press
 +
:BA type, BA action, BA device etc: This is the BA to be executed when an input action occurs, see [[Action Types AIO]]
  
 
:;Returns
 
:;Returns
::<code>Number Of CAN sensors</code>  
+
::<code>OK</code>
::<code>OK</code>
+
 
 +
----
  
Example:
+
====input debug off ====
  
:;Instruction:
+
:''This instruction will disable the CLI console debug function for inputs. When an input is pressed or released, a debug message will appear when this debug function is enabled''
::<code>can sensor number read</code>
 
  
:;Returns  
+
:;Returns
::<code>4</code>
+
::OK
::<code>OK</code>
 
  
 
----
 
----
  
====can sensor number write [number of CAN sensors]====
+
====input debug on ====
  
:''Writes the number of CAN sensors that are programmed and active. This instruction will, after the write is performed, activate the instruction eeprom activate so all values from eeprom are read and copied in RAM''
+
:''This instruction will enable the CLI console debug function for inputs. When an input is pressed or released, a debug message will appear when this debug function is enabled''
  
:;[number of CAN inputs]
+
:;Returns
::Indicates the number of CAN sensors that are active and programmed.
+
::OK
 +
 
 +
----
 +
 
 +
====input link read [input nr]====
 +
 
 +
:''This instruction will read, for an input, which output or action is linked to it.''
 +
 
 +
:;[input nr]
 +
::Indicates which input (0-631) that the link has to be read.
  
 
:;Returns
 
:;Returns
 +
::<code>output nr or link</code>
 
::<code>OK</code>  
 
::<code>OK</code>  
  
Line 905: Line 1,228:
  
 
:;Instruction:
 
:;Instruction:
::<code>can sensor number write 6</code>
+
::<code>input link read 15</code>
  
:;Returns  
+
:;Returns
 +
::<code>12</code>
 
::<code>OK</code>  
 
::<code>OK</code>  
  
 
----
 
----
  
===GROUP instructions===
+
====input link write [input nr][output link nr]====
  
A group action is composed of multiple actions that can be executed. Each group action can call other group actions. Group actions can be nested up to 16 levels deep, if you go deeper, those group actions will be ignored. IF THEN ENDIF instructions used inside a group can be nested as well up to 16 levels deep.
+
:''This instruction will write, for an input (0-479), which output (0-479) or action is linked to it.''
The most easy way, when nested group actions including IF THEN ENDIF instructions are used is to use the CLI instruction "group simulate" which gives you a CLI representation of the result of a group action with the included nested group actions (if any).
 
  
A group action doesn't have a fixed length, the length and thus the number of group action can be defined at creation. In total, 4200 (BA0 to BA4199) actions can be placed in 254 (0-253) different groups. Each group has a start address, the start address of the next group action defines the end address of the previous one.
+
:;[input nr]
 +
::Indicates which input that the link has to be written.
  
Start address (and thus end addresses) can be changed even when a group has been programmed. The start addresses will just determine which group actions are linked to a group action number.
+
:;Returns
 +
::<code>OK</code>
  
Example:
+
Example: Link input 15 with output 12
Start address of group 5 is BA55 en start address of group 6 is BA72 then group 5 contains BA55-BA71.
 
  
How does group actions work: A normal group action with format 19 0 x y will be added to the queue of immediate action. This queue will process this group action immediately. A group action with format 19 1 x y will not be executed but only simulated and the result will be printed in the CLI screen which is easy to troubleshoot complex group actions.
+
:;Instruction:
 +
::<code>input link write 15 12</code>
  
Group actions can also be delayed in time and only be executed when the defined time trigger has expired (expired seconds or day/hour/minute reached). For example, delayed group action BA 18 0 15 240 will execute BA19 0 15 0 after 240 seconds.
+
:;Returns
 +
::<code>OK</code>
 +
 
 +
To unconfigure an input from an output:
 +
 
 +
input link read 32
 +
Input 32 is linked to Output 14
 +
OK
 +
 
 +
input link write 32 65535
 +
OK
 +
 
 +
input link read 32
 +
Input 32 has no Output nor any action(s) linked
 +
OK
 +
 
 +
----
 +
 
 +
====input list ====
  
It’s important to note that delayed group actions will be put in the delay queue until the time trigger expires, then this delayed group action will be deleted from the delayed group queue (after executing the related group action). When for example a group action must be executed every 120 seconds, the group delay BA instruction (BA18) that adds the group action to be executed after 120 seconds must be added in the original group action.
+
:''This instruction will display the list of inputs, the status (0-> release state, 1-> press state), the link (is an action configured or an output linked) and the name of each input''
  
When a time trigger occurred and the group action has been executed, the delayed group action is removed from the queue so if you want an action to be executed on a certain hour every day of the week, the delayed group action must be added on the delayed queue after every execution in the group action. The easiest way to do this is to create a group action with a list of instructions including the instruction to put this group on the delayed group. To get the delayed action in the queue for the first time, you can use the startup group action which executes at each processor start or reset.
+
:;Returns
 +
::The input list
  
 
----
 
----
  
====group list====
+
====input release [input nr]====
 +
 
 +
:''Switch input to release state for virtual modules.''
  
:''This instruction will display the list of all programmed group actions (group actions with a valid begin and end address) with their name.''
+
:;[input nr]
 +
::Indicates which input that needs to be put in release state, a maximum of 632 (0 - 631) inputs can be used.
  
 
:;Returns
 
:;Returns
::List of programmed group actions
 
 
::<code>OK</code>  
 
::<code>OK</code>  
  
Example:
+
Example:
  
 
:;Instruction:
 
:;Instruction:
::<code>group list</code>
+
::<code>input release 28</code>
  
:;Returns  
+
:;Returns
::<code>-Group---------Name---------</code>
+
::<code>OK</code>  
::<code> 000  ->  test</code>
 
::<code> 001  -></code>
 
::<code> 002  -></code>
 
::<code> 003  -></code>
 
::<code> 004  -></code>
 
::<code> 139  -></code>
 
::<code> 167  -></code>
 
::<code> 170  -></code>
 
::<code> 173  -></code>
 
::<code> 176  -></code>
 
::<code> 179  -></code>
 
::<code> 182  -></code>
 
::<code> 185  -></code>
 
::<code> 188  -></code>
 
::<code>OK</code>
 
  
 
----
 
----
  
====group name read [group nr]====
+
====input press [input nr]====
 +
 
 +
:''Switch input to press state for virtual modules.''
  
:''This instruction will read the name of a group action.''
+
:;[input nr]
 +
::Indicates which input that needs to be put in press state, a maximum of 632 (0 - 631) inputs can be used.
  
 
:;Returns
 
:;Returns
:: name of group action
 
 
::<code>OK</code>  
 
::<code>OK</code>  
  
Example:  
+
Example:
  
 
:;Instruction:
 
:;Instruction:
::<code>group name read 0</code>
+
::<code>input press 28</code>
  
 
:;Returns
 
:;Returns
::<code>test</code>
+
::<code>OK</code>  
::<code>OK</code>
 
  
 
----
 
----
  
====group name write [group nr] [group name]====
+
====input name write [input nr][input name]====
 +
 
 +
:''Write the name of an input, max 16 characters.''
 +
 
 +
:;[input nr]
 +
::Indicates which input (0-631) the name has to be written.
  
:''This instruction will program the name of group action.''
+
:;[input name]
 +
::the ascii name of the input (maximum 16 characters).
  
 
:;Returns
 
:;Returns
 
::<code>OK</code>  
 
::<code>OK</code>  
  
Example:  
+
Example:
  
 
:;Instruction:
 
:;Instruction:
::<code>group name write 0 test</code>
+
::<code>input name write 28 Bedroom parents</code>
  
 
:;Returns
 
:;Returns
::<code>OK</code>
+
::<code>OK</code>  
 +
 
 
----
 
----
  
====group start list====
+
====input name read [input nr]====
 +
 
 +
:''Read the name of an input''
  
:''This instruction will list all the start addresses of each group action.''
+
:;[input nr]
 +
::Indicates which input (0-631) the name has to be displayed.
  
 
:;Returns
 
:;Returns
:: List of all start addresses of each group action
+
::<code>Input Name</code>
 
::<code>OK</code>  
 
::<code>OK</code>  
  
Example:  
+
Example:
  
 
:;Instruction:
 
:;Instruction:
::<code>group start list</code>
+
::<code>input name read 28</code>
  
:;Returns
+
:;Returns  
-Group nr---BA Start--BA Stop-----Name---------
+
::<code>Bedroom Parents</code>  
::<code>   000      0000      0022  ->  test</code>
+
::<code>OK</code>  
::<code>  001      0023      0029  -></code>
 
::<code>  002      0030      0034  -></code>
 
::<code>  003      0035      0041  -></code>
 
::<code>  004      0042      0061  -></code>
 
::<code>  005      0062      ----  -></code>
 
::<code>  006      ----      ----  -></code>
 
::<code>  007      ----      ----  -></code>
 
::<code>  008      ----      ----  -></code>
 
::<code>  009      ----      ----  -></code>
 
::<code>  010      ----      ----  -></code>
 
::<code>  011      ----      ----  -></code>
 
::<code>  012      ----      ----  -></code>
 
::<code>  013      ----      ----  -></code>
 
::<code>  014      ----      ----  -></code>
 
::<code>  015      ----      ----  -></code>
 
::<code>  016      ----      ----  -></code>
 
::<code>  017      ----      ----  -></code>
 
::<code>  018      ----      ----  -></code>
 
::<code>  019      ----      ----  -></code>
 
::<code>  020      ----      ----  -></code>
 
::<code>  ...</code>
 
::<code>OK</code>
 
  
 
----
 
----
  
====group start write [group nr] [ba nr]====
+
====pulse counter read [input nr]====
  
:''This instruction will write the start address of group nr x. To have also an end address, the start address of group nr x+1 needs to be written as well.''
+
:''Read the pulse counter number of an input''
 +
 
 +
:;[input nr]
 +
::Indicates which input (0-631) the pulse counter number has to be displayed.
  
 
:;Returns
 
:;Returns
 +
::<code>pulse counter number</code>
 
::<code>OK</code>  
 
::<code>OK</code>  
  
Example: write start address BA35 of group nr 5
+
Example:
  
 
:;Instruction:
 
:;Instruction:
::<code>group start write 5 35</code>
+
::<code>pulse counter read 3</code>
  
 
:;Returns  
 
:;Returns  
::<code>OK</code>
+
::<code>2546678</code>
 +
::<code>OK</code>  
  
 
----
 
----
  
====group read [group nr]====
+
====input number modules read====
  
:''This instruction will read a group action and display all BA's that this group action contains.''
+
:''Read the number of input modules that are programmed and active''
  
 
:;Returns
 
:;Returns
 +
::<code>Number Of Input Modules</code>
 
::<code>OK</code>  
 
::<code>OK</code>  
  
Line 1,070: Line 1,396:
  
 
:;Instruction:
 
:;Instruction:
::<code>group read 0</code>
+
::<code>input number modules read</code>
  
 
:;Returns  
 
:;Returns  
::<code>-Grp--BA Nr---Typ-Act--x--(MSB.LSB)--y--(MSB.LSB)-------BA Description----</code>
+
::<code>6</code>  
::<code> 000  0000(00)  000 007 00013(000.013) 00000(000.000) ->  Output 13 ON and only overrule timer with value 0 (0x1s) when output is not yet on</code>
+
::<code>OK</code>  
::<code> 000  0001(01)  000 016 00005(000.005) 00000(000.000) ->  Toggle output 5 with std timer/dimmer</code>
+
 
::<code> 000  0002(02)  000 004 00011(000.011) 00020(000.020) ->  Output 11 ON and overrule timer with value 20 (20x1s)</code>
+
----
::<code> 000  0003(03)  100 000 00000(000.000) 00000(000.000) ->  IF</code>
+
 
::<code> 000  0004(04)  100 010 00012(000.012) 00000(000.000) ->  Output 12 is ON</code>
+
====input number modules write [number of input modules]====
::<code> 000  0005(05)  100 150 00000(000.000) 00000(000.000) ->  THEN</code>
+
 
::<code> 000  0006(06)  000 001 00005(000.005) 00000(000.000) ->  Output 5 ON with std timer/dimmer</code>
+
:''Writes the number of input modules that are programmed and active. This instruction will, after the write is performed, activate the instruction eeprom activate so all values from eeprom are read and copied in RAM''
::<code> 000  0007(07)  100 200 00000(000.000) 00000(000.000) ->  ELSE</code>
+
 
::<code> 000  0008(08)  019 000 00001(000.001) 00000(000.000) ->  Execute Group Action 1</code>
+
:;[number of input modules]
::<code> 000  0009(09)  100 255 00000(000.000) 00000(000.000) ->  ENDIF</code>
+
::Indicates the number of input modules that are active and programmed.
::<code> 000  0010(10)  000 016 00015(000.015) 00000(000.000) ->  Toggle output 15 with std timer/dimmer</code>
 
::<code> 000  0011(11)  255 255 65535(255.255) 65535(255.255) ->  Instruction not in use</code>
 
::<code> 000  0012(12)  255 255 65535(255.255) 65535(255.255) ->  Instruction not in use</code>
 
::<code> 000  0013(13)  255 255 65535(255.255) 65535(255.255) ->  Instruction not in use</code>
 
::<code> 000  0014(14)  255 255 65535(255.255) 65535(255.255) ->  Instruction not in use</code>
 
::<code> 000  0015(15)  255 255 65535(255.255) 65535(255.255) ->  Instruction not in use</code>
 
::<code> 000  0016(16)  255 255 65535(255.255) 65535(255.255) ->  Instruction not in use</code>
 
::<code> 000  0017(17)  255 255 65535(255.255) 65535(255.255) ->  Instruction not in use</code>
 
::<code> 000  0018(18)  255 255 65535(255.255) 65535(255.255) ->  Instruction not in use</code>
 
::<code> 000  0019(19)  255 255 65535(255.255) 65535(255.255) ->  Instruction not in use</code>
 
::<code> 000  0020(20)  255 255 65535(255.255) 65535(255.255) ->  Instruction not in use</code>
 
::<code> 000  0021(21)  255 255 65535(255.255) 65535(255.255) ->  Instruction not in use</code>
 
::<code> 000  0022(22)  255 255 65535(255.255) 65535(255.255) ->  Instruction not in use</code>
 
::<code>OK</code>
 
 
 
----
 
 
 
====group ba write [ba nr] [Type] [Action] [Device Nr] [Extra parameter]====
 
 
 
:''This instruction will write the Basic Action (Type, Action, Device Nr & Extra Parameter) of BA nr. for a list of the different BA types that can be used, see [[Action Types AIO]].''
 
  
 
:;Returns
 
:;Returns
 
::<code>OK</code>  
 
::<code>OK</code>  
  
Example: write BA 35 with instruction output 17 off
+
Example:
  
 
:;Instruction:
 
:;Instruction:
::<code>group ba write 35 0 0 17 0</code>
+
::<code>input number modules write 7</code>
  
 
:;Returns  
 
:;Returns  
::<code>OK</code>
+
::<code>OK</code>  
 +
 
 +
----
  
Remark:
+
===Output instructions===
::* This instruction exist in a 5 and 7 parameter version
+
====add virtual dimmer module [id1] [id2] [id3] ====
::* The 5 parameter version has following format: "group ba write [ba nr] [Type] [Action] [Device Nr] [Extra parameter]"
+
 
::* The 7 parameter version has following format: "group ba write [ba nr] [Type] [Action] [Device Nr.MSB] [Device Nr.LSB] [Extra parameter.MSB] [Extra parameter.LSB]"
+
:''This instruction will add a virtual dimmer module (id0="d") with id1, id2 and id3. When using this instruction, please make sure that the combination id1, id2 and id3 for the output list is unique and not yet used.''
::* In the 7 parameter version, you split Device Nr and Extra parameter is his Most significant Byte (MSB) and his Least Significant Byte.
+
:Important Note: id1..id3 0.0.0, 0.0.1, 0.0.2 and 0.0.3 are reserved for internal use and cannot be used.
 +
:Example:
 +
el
 +
--- Total Uptime: 000259 Hours, Last Startup: 16:26:54 24/10/21  ---
 +
--- Module Type: BRAIN, RS485 mode: 0, Board: 27'C  --.--V --.--A ---
 +
--- PWR RS485/CAN: 1/1, CANTERM: 1, BB Debug: 255, Fw: 1.0.113      ---
 +
-------Output------------ID---------Err-------Status--------Pwr---
 +
  00 (l I 000->007) 108.000.000.000 00000  GOOD      (000)  1
 +
-------Input-------------ID---------Err-------Status--------Pwr---
 +
  00 (i I 000->007) 105.000.000.000 00000  GOOD      (000)  1
 +
  01 (b C 008->015) 098.000.000.001 00000  GOOD      (000)  1
 +
  02 (i V 016->023) 105.000.000.002 00000  GOOD      (000)  0
 +
-------Sensor------------ID---------Err-------Status--------Pwr---
 +
  00 (s C 000->007) 115.000.000.000 00000  GOOD      (000)  1
 +
  01 (s C 008->015) 115.000.000.001 00000  GOOD      (000)  1
 +
-------CAN Control-------ID---------Err-------Status--------Pwr---
 +
  00 (C E 000->000) 067.001.230.000 00000  GOOD      (016)  1
 +
-------Micro CAN---------ID---------Err-------Status--------Pwr---
 +
  00 (m C 000->000) 000.248.090.233 00000  GOOD      (000)  1
 +
OK
 +
add virtual dimmer module 0 0 4
 +
OK
 +
el
 +
--- Total Uptime: 000259 Hours, Last Startup: 16:26:54 24/10/21  ---
 +
--- Module Type: BRAIN, RS485 mode: 0, Board: 27'C  --.--V --.--A ---
 +
--- PWR RS485/CAN: 1/1, CANTERM: 1, BB Debug: 255, Fw: 1.0.113      ---
 +
-------Output------------ID---------Err-------Status--------Pwr---
 +
  00 (l I 000->007) 108.000.000.000 00000  GOOD      (000)  1
 +
  01 (d V 008->015) 100.000.000.004 00000  GOOD      (000)  1
 +
-------Input-------------ID---------Err-------Status--------Pwr---
 +
  00 (i I 000->007) 105.000.000.000 00000  GOOD      (000)  1
 +
  01 (b C 008->015) 098.000.000.001 00000  GOOD      (000)  1
 +
  02 (i V 016->023) 105.000.000.002 00000  GOOD      (000)  0
 +
-------Sensor------------ID---------Err-------Status--------Pwr---
 +
  00 (s C 000->007) 115.000.000.000 00000  GOOD      (000)  1
 +
  01 (s C 008->015) 115.000.000.001 00000  GOOD      (000)  1
 +
-------CAN Control-------ID---------Err-------Status--------Pwr---
 +
  00 (C E 000->000) 067.001.230.000 00000  GOOD      (016)  1
 +
-------Micro CAN---------ID---------Err-------Status--------Pwr---
 +
  00 (m C 000->000) 000.248.090.233 00000  GOOD      (000)  1
 +
OK
  
----
+
====add virtual output module [id1] [id2] [id3] ====
  
====group simulate [group nr] ====
+
:''This instruction will add a virtual dimmer module (id0="o") with id1, id2 and id3. When using this instruction, please make sure that the combination id1, id2 and id3 for the output list is unique and not yet used.''
 +
:Important Note: id1..id3 0.0.0, 0.0.1, 0.0.2 and 0.0.3 are reserved for internal use and cannot be used.
 +
:Example:
 +
el
 +
--- Total Uptime: 000259 Hours, Last Startup: 16:26:54 24/10/21  ---
 +
--- Module Type: BRAIN, RS485 mode: 0, Board: 27'C  --.--V --.--A ---
 +
--- PWR RS485/CAN: 1/1, CANTERM: 1, BB Debug: 255, Fw: 1.0.113      ---
 +
-------Output------------ID---------Err-------Status--------Pwr---
 +
  00 (l I 000->007) 108.000.000.000 00000  GOOD      (000)  1
 +
  01 (d V 008->015) 100.000.000.004 00000  GOOD      (000)  1
 +
-------Input-------------ID---------Err-------Status--------Pwr---
 +
  00 (i I 000->007) 105.000.000.000 00000  GOOD      (000)  1
 +
  01 (b C 008->015) 098.000.000.001 00000  GOOD      (000)  1
 +
  02 (i V 016->023) 105.000.000.002 00000  GOOD      (000)  0
 +
-------Sensor------------ID---------Err-------Status--------Pwr---
 +
  00 (s C 000->007) 115.000.000.000 00000  GOOD      (000)  1
 +
  01 (s C 008->015) 115.000.000.001 00000  GOOD      (000)  1
 +
-------CAN Control-------ID---------Err-------Status--------Pwr---
 +
  00 (C E 000->000) 067.001.230.000 00000  GOOD      (016)  1
 +
-------Micro CAN---------ID---------Err-------Status--------Pwr---
 +
  00 (m C 000->000) 000.248.090.233 00000  GOOD      (000)  1
 +
OK
 +
add virtual output module 0 0 5
 +
OK
 +
el
 +
--- Total Uptime: 000259 Hours, Last Startup: 16:26:54 24/10/21  ---
 +
--- Module Type: BRAIN, RS485 mode: 0, Board: 27'C  --.--V --.--A ---
 +
--- PWR RS485/CAN: 1/1, CANTERM: 1, BB Debug: 255, Fw: 1.0.113      ---
 +
-------Output------------ID---------Err-------Status--------Pwr---
 +
  00 (l I 000->007) 108.000.000.000 00000  GOOD      (000)  1
 +
  01 (d V 008->015) 100.000.000.004 00000  GOOD      (000)  1
 +
  02 (o V 016->023) 111.000.000.005 00000  GOOD      (000)  1
 +
-------Input-------------ID---------Err-------Status--------Pwr---
 +
  00 (i I 000->007) 105.000.000.000 00000  GOOD      (000)  1
 +
  01 (b C 008->015) 098.000.000.001 00000  GOOD      (000)  1
 +
  02 (i V 016->023) 105.000.000.002 00000  GOOD      (000)  0
 +
-------Sensor------------ID---------Err-------Status--------Pwr---
 +
  00 (s C 000->007) 115.000.000.000 00000  GOOD      (000)  1
 +
  01 (s C 008->015) 115.000.000.001 00000  GOOD      (000)  1
 +
-------CAN Control-------ID---------Err-------Status--------Pwr---
 +
  00 (C E 000->000) 067.001.230.000 00000  GOOD      (016)  1
 +
-------Micro CAN---------ID---------Err-------Status--------Pwr---
 +
  00 (m C 000->000) 000.248.090.233 00000  GOOD      (000)  1
 +
OK
  
:''This instruction will simulate the result of a group action including nested group actions. Below is an example of 4 nested group actions. As you can see in the below example, abstraction is made of the different group action and everything is represented in one consolidated view.''
+
====output all off====
 +
====aoff====
 +
:''Switch all outputs off.''
  
 
:;Returns
 
:;Returns
::Consolidated view of the group action
 
 
::<code>OK</code>  
 
::<code>OK</code>  
  
Line 1,135: Line 1,527:
  
 
:;Instruction:
 
:;Instruction:
::<code>group simulate 0</code>
+
::<code>output all off</code> will switch all outputs OFF.
 +
 
 +
:;Returns
 +
::<code>OK</code>
 +
 
 +
:;Instruction:
 +
::<code>oaoff</code> will switch all outputs OFF.
 +
 
 +
:;Returns
 +
::<code>OK</code> 
 +
 
 +
----
 +
====output status on====
 +
====oso====
 +
:''Returns the list of all outputs that are ON.''
  
:;Returns  
+
:;Returns
::<code>15:15:23 BA 000 007 00013(000.013) 00000(000.000) EXEC SIM -> Output 13 ON and only overrule timer with value 0 (0x1s) when output is not yet on</code>
+
::List of outputs that are ON  
::<code>15:15:23 BA 000 016 00005(000.005) 00000(000.000) EXEC SIM -> Toggle output 5 with std timer/dimmer</code>
 
::<code>15:15:23 BA 000 004 00011(000.011) 00020(000.020) EXEC SIM -> Output 11 ON and overrule timer with value 20 (20x1s)</code>
 
::<code>15:15:23 BA 100 000 00000(000.000) 00000(000.000)                      IF</code>
 
::<code>15:15:23 BA 100 010 00012(000.012) 00000(000.000)              Output 12 is ON</code>
 
::<code>15:15:24 BA 100 150 00000(000.000) 00000(000.000)            THEN</code>
 
::<code>15:15:24 BA 000 001 00005(000.005) 00000(000.000) SKIP INSTR    Output 5 ON with std timer/dimmer</code>
 
::<code>15:15:24 BA 100 200 00000(000.000) 00000(000.000)            ELSE</code>
 
::<code>15:15:24 BA 000 001 00004(000.004) 00000(000.000) EXEC SIM ->  Output 4 ON with std timer/dimmer</code>
 
::<code>15:15:24 BA 100 000 00000(000.000) 00000(000.000)              IF</code>
 
::<code>15:15:24 BA 100 011 00013(000.013) 00000(000.000)                Output 13 is OFF</code>
 
::<code>15:15:24 BA 100 150 00000(000.000) 00000(000.000)              THEN</code>
 
::<code>15:15:24 BA 100 000 00000(000.000) 00000(000.000)                IF</code>
 
::<code>15:15:24 BA 100 010 00014(000.014) 00000(000.000)                  Output 14 is ON</code>
 
::<code>15:15:24 BA 100 150 00000(000.000) 00000(000.000)                THEN</code>
 
::<code>15:15:24 BA 100 000 00000(000.000) 00000(000.000)                  IF</code>
 
::<code>15:15:24 BA 100 010 00007(000.007) 00000(000.000)                    Output 7 is ON</code>
 
::<code>15:15:24 BA 100 090 00000(000.000) 00000(000.000)                    AND</code>
 
::<code>15:15:24 BA 100 011 00008(000.008) 00000(000.000)                    Output 8 is OFF</code>
 
::<code>15:15:24 BA 100 150 00000(000.000) 00000(000.000)                  THEN</code>
 
::<code>15:15:24 BA 000 255 00255(000.255) 00000(000.000) SKIP INSTR          Switch OFF all Outputs(x=0), Lights(x=1) or Lights&Outputs(x>1)</code>
 
::<code>15:15:24 BA 100 200 00000(000.000) 00000(000.000)                  ELSE</code>
 
::<code>15:15:24 BA 000 001 00010(000.010) 00000(000.000) EXEC SIM ->        Output 10 ON with std timer/dimmer</code>
 
::<code>15:15:24 BA 000 001 00009(000.009) 00000(000.000) EXEC SIM ->        Output 9 ON with std timer/dimmer</code>
 
::<code>15:15:24 BA 100 255 00000(000.000) 00000(000.000)                  ENDIF</code>
 
::<code>15:15:24 BA 100 200 00000(000.000) 00000(000.000)                ELSE</code>
 
::<code>15:15:24 BA 000 001 00003(000.003) 00000(000.000) SKIP INSTR        Output 3 ON with std timer/dimmer</code>
 
::<code>15:15:24 BA 100 255 00000(000.000) 00000(000.000)                ENDIF</code>
 
::<code>15:15:24 BA 100 255 00000(000.000) 00000(000.000)              ENDIF</code>
 
::<code>15:15:24 BA 000 000 00020(000.020) 00000(000.000) EXEC SIM ->  Output 20 OFF</code>
 
::<code>15:15:24 BA 100 255 00000(000.000) 00000(000.000)            ENDIF</code>
 
::<code>15:15:25 BA 000 016 00015(000.015) 00000(000.000) EXEC SIM -> Toggle output 15 with std timer/dimmer</code>
 
 
 
:Some remarks:
 
:- SKIP INSTR: This instruction in the consolidated group view will not be executed when running in execution mode ("group activate") due to the conditions being set (IF THEN ENDIF)
 
:- EXEC SIM: This instruction will be executed when the group will be running in execution mode
 
  
 
----
 
----
  
====group activate [group nr] ====
+
====output list ====
  
:''This instruction will execute a group action (execution mode). If you want to see what's happening during execution, you can activate verbose mode by using instruction "basic action debug on". Please note that the instruction "basic action debug on" can slow down the processor due to more console printing that needs to be done.''
+
:''This instruction will display the list of outputs, the status (On or Off), the dim value, the configured timer value, the timer type (Off, , 100ms timer, 1s timer or 1m timer) and the name of each output''
  
 
:;Returns
 
:;Returns
::<code>OK</code>
+
::The output list
  
Example:
+
----
  
:;Instruction:
+
====output on [output nr] [dimmer value*] [timer value*]====
::<code>group activate 5</code>
+
====on [output nr] [dimmer value*] [timer value*]====
 +
:''Switch ON an output. * are optional values''
  
:;Returns
+
:;[output nr]
::<code>OK</code>
+
::Indicates which output that needs to be switched ON, a maximum of 640 (0 - 639) outputs can be used.
  
----
+
:;[dimmer value*]
 +
::Optional parameter to set the dimmer value (0-255)
  
====temperature group follow read [Sensor Nr] ====
+
:;[timer value*]
 
+
::Optional parameter to set the timer value (0-65535s)
: ''A sensor can trigger a group action when one of their values changes. With this instruction, you can read, for Sensor Nr, when a temperature change occurs, which Group Action will be executed. ''
 
  
 
:;Returns
 
:;Returns
::Group Nr
+
::<code>OK</code>  
::<code>OK</code> 
 
  
Example: Read the group linked to sensor 17
+
Examples:
  
 
:;Instruction:
 
:;Instruction:
::<code>temperature group follow read 17</code>
+
:<code>output on 127</code>  
 +
::will switch ON output 127.
  
:;Returns 
+
:;Returns
::<code>3</code>
+
::<code>OK</code>  
::<code>OK</code>
 
  
----
+
:;Instruction:
 +
::<code>output on 127 56</code>
 +
::will switch ON output 127 with dimmer value 56.
  
====temperature group follow write [Sensor Nr] [Group Nr] ====
+
:;Returns
 +
::<code>OK</code>
  
: ''A sensor can trigger a group action when one of their values changes. With this instruction, you can write, for Sensor Nr, when a temperature change occurs, which Group Action will be executed. ''
+
:;Instruction:
 +
::<code>output on 127 56 3600</code> 
 +
::will switch ON output 127 with dimmer value 56 for 3600 seconds.
  
:;Returns
+
:;Returns  
::<code>OK</code> 
+
::<code>OK</code>  
 
 
Example: Write group nr 3 must be linked to sensor 17
 
  
 
:;Instruction:
 
:;Instruction:
::<code>temperature group follow write 17 3</code>
+
::<code>oon 127 56 3600</code>  
 +
::will switch ON output 127 with dimmer value 56 for 3600 seconds.
  
:;Returns 
+
:;Returns
::<code>OK</code>
+
::<code>OK</code>  
  
 
----
 
----
  
====temperature group follow list ====
+
====output off [output nr]====
 +
====off [output nr]====
 +
:''Switch OFF an output.''
  
: ''A sensor can trigger a group action when one of their values changes. With this instruction, you can list, for all sensor in use, which Group Actions are linked. ''
+
:;[output nr]
 +
::Indicates which output that needs to be switched OFF, a maximum of 640 (0 - 639) outputs can be used.
  
 
:;Returns
 
:;Returns
:;List
+
::<code>OK</code>  
::<code>OK</code>
 
  
 +
Example:
  
 
:;Instruction:
 
:;Instruction:
::<code>temperature group follow list</code>
+
::<code>output off 127</code> will switch OFF output 127.
  
 
:;Returns
 
:;Returns
::list 
 
 
::<code>OK</code>
 
::<code>OK</code>
 
 
----
 
  
====humidity group follow read [Sensor Nr] ====
+
:;Instruction:
 
+
::<code>ooff 127</code> will switch OFF output 127.
: ''A sensor can trigger a group action when one of their values changes. With this instruction, you can read, for Sensor Nr, when a humidity change occurs, which Group Action will be executed. ''
 
  
 
:;Returns
 
:;Returns
::Group Nr
+
::<code>OK</code>
::<code>OK</code> 
 
  
Example: Read the group linked to sensor 17
+
----
  
:;Instruction:
+
====output name write [output nr][output name]====
::<code>humidity group follow read 17</code>
 
  
:;Returns 
+
:''Write the name of an output, max 16 characters.''
::<code>4</code>
 
::<code>OK</code>
 
  
----
+
:;[output nr]
 +
::Indicates which output (0-639) the name has to be written.
  
====humidity group follow write [Sensor Nr] [Group Nr] ====
+
:;[output name]
 
+
::the ascii name of the output (maximum 16 characters).
: ''A sensor can trigger a group action when one of their values changes. With this instruction, you can write, for Sensor Nr, when a humidity change occurs, which Group Action will be executed. ''
 
  
 
:;Returns
 
:;Returns
::<code>OK</code> 
+
::<code>OK</code>  
  
Example: Write group nr 4 must be linked to sensor 17
+
Example:
  
 
:;Instruction:
 
:;Instruction:
::<code>humidity group follow write 17 4</code>
+
::<code>output name write 24 Bedroom 4</code>
  
:;Returns 
+
:;Returns
::<code>OK</code>
+
::<code>OK</code>  
  
 
----
 
----
  
====humidity group follow list ====
+
====output name read [output nr]====
 +
 
 +
:''Read the name of an output''
  
: ''A sensor can trigger a group action when one of their values changes. With this instruction, you can list, for all sensor in use, which Group Actions are linked. ''
+
:;[output nr]
 +
::Indicates which output (0-639) the name has to be displayed.
  
 
:;Returns
 
:;Returns
:;List
+
::<code>output Name</code>
::<code>OK</code>
+
::<code>OK</code>  
  
 +
Example:
  
 
:;Instruction:
 
:;Instruction:
::<code> humidity group follow list</code>
+
::<code>output name read 24</code>
 +
 
 +
:;Returns
 +
::<code>Bedroom 4</code>
 +
::<code>OK</code>  
  
:;Returns
 
::list 
 
::<code>OK</code>
 
 
 
 
----
 
----
  
====brightness group follow read [Sensor Nr] ====
+
====output number modules read====
  
: ''A sensor can trigger a group action when one of their values changes. With this instruction, you can read, for Sensor Nr, when a brightness change occurs, which Group Action will be executed. ''
+
:''Read the number of output modules that are programmed and active''
  
 
:;Returns
 
:;Returns
::Group Nr
+
::<code>Number Of Output Modules</code>
::<code>OK</code> 
+
::<code>OK</code>  
  
Example: Read the group linked to sensor 17
+
Example:
  
 
:;Instruction:
 
:;Instruction:
::<code> brightness group follow read 17</code>
+
::<code>output number modules read</code>
  
:;Returns 
+
:;Returns
::<code>5</code>
+
::<code>6</code>  
::<code>OK</code>
+
::<code>OK</code>  
  
 
----
 
----
  
==== brightness group follow write [Sensor Nr] [Group Nr] ====
+
====output number modules write [number of output modules]====
 +
 
 +
:''Writes the number of output modules that are programmed and active. This instruction will, after the write is performed, activate the instruction eeprom activate so all values from eeprom are read and copied in RAM''
  
: ''A sensor can trigger a group action when one of their values changes. With this instruction, you can write, for Sensor Nr, when a brightness change occurs, which Group Action will be executed. ''
+
:;[number of output modules]
 +
::Indicates the number of output modules that are active and programmed.
  
 
:;Returns
 
:;Returns
::<code>OK</code> 
+
::<code>OK</code>  
  
Example: Write group nr 5 must be linked to sensor 17
+
Example:
  
 
:;Instruction:
 
:;Instruction:
::<code> brightness group follow write 17 5</code>
+
::<code>output number modules write 7</code>
  
:;Returns 
+
:;Returns
::<code>OK</code>
+
::<code>OK</code>  
  
 
----
 
----
  
==== brightness group follow list ====
+
====output group follow read [Output Nr] ====
  
: ''A sensor can trigger a group action when one of their values changes. With this instruction, you can list, for all sensor in use, which Group Actions are linked. ''
+
: ''An output activation (switch on, off or change dimmer value) can be programmed to trigger a group action. With this instruction, you can read, for Output Nr, when an output activation occurs, which Group Action will be executed. ''
  
 
:;Returns
 
:;Returns
:;List
+
::Group Nr
::<code>OK</code>
+
::<code>OK</code> 
  
 +
Example: Read the group linked to output 35
  
 
:;Instruction:
 
:;Instruction:
::<code> brightness group follow list</code>
+
::<code>output group follow read 35</code>
  
:;Returns
+
:;Returns 
::list 
+
::<code>10</code>
 
::<code>OK</code>
 
::<code>OK</code>
 
+
 
 
----
 
----
  
====airquality group follow read [Sensor Nr] ====
+
====output group follow write [Output Nr] [Group Nr] ====
  
: ''A sensor can trigger a group action when one of their values changes. With this instruction, you can read, for Sensor Nr, when an air quality change occurs, which Group Action will be executed. ''
+
: ''An output activation (switch on, off or change dimmer value) can be programmed to trigger a group action. With this instruction, you can write, for Output Nr, when an output activation occurs, which Group Action will be executed. ''
  
 
:;Returns
 
:;Returns
::Group Nr
 
 
::<code>OK</code> 
 
::<code>OK</code> 
  
Example: Read the group linked to sensor 17
+
Example: Write group nr 10 must be linked to output 35
  
 
:;Instruction:
 
:;Instruction:
::<code> airquality group follow read 17</code>
+
::<code>output group follow write 35 10</code>
  
 
:;Returns 
 
:;Returns 
::<code>6</code>
 
 
::<code>OK</code>
 
::<code>OK</code>
  
 
----
 
----
  
==== airquality group follow write [Sensor Nr] [Group Nr] ====
+
====output group follow list ====
  
: ''A sensor can trigger a group action when one of their values changes. With this instruction, you can write, for Sensor Nr, when an air quality change occurs, which Group Action will be executed. ''
+
: ''An output activation (switch on, off or change dimmer value) can be programmed to trigger a group action. With this instruction, you can list, for all outputs in use, which Group Actions are linked. ''
  
 
:;Returns
 
:;Returns
::<code>OK</code> 
+
:;List
 +
::<code>OK</code>
  
Example: Write group nr 6 must be linked to sensor 17
 
  
 
:;Instruction:
 
:;Instruction:
::<code> airquality group follow write 17 6</code>
+
::<code>output group follow list</code>
  
:;Returns 
+
:;Returns
 +
::list 
 
::<code>OK</code>
 
::<code>OK</code>
 
+
 
 
----
 
----
  
==== airquality group follow list ====
+
====output all off group follow read ====
  
: ''A sensor can trigger a group action when one of their values changes. With this instruction, you can list, for all sensor in use, which Group Actions are linked. ''
+
: ''An output all off instruction (like BA????) can be programmed to trigger a group action. With this instruction, you can read which Group Action will be executed. ''
  
 
:;Returns
 
:;Returns
:;List
+
::Group Nr
::<code>OK</code>
+
::<code>OK</code> 
  
 +
Example:
  
 
:;Instruction:
 
:;Instruction:
::<code> airquality group follow list</code>
+
::<code>output all off group follow read</code>
  
:;Returns
+
:;Returns 
::list 
+
::<code>30</code>
 
::<code>OK</code>
 
::<code>OK</code>
 
+
 
 +
Remark:
 +
::* When an output all off instruction is executed, only the all off group nr will be executed and not all the individual output group follow actions.
 +
 
 
----
 
----
  
====output group follow read [Output Nr] ====
+
====output all off group follow write [Group Nr] ====
  
: ''An output activation (switch on, off or change dimmer value) can be programmed to trigger a group action. With this instruction, you can read, for Output Nr, when an output activation occurs, which Group Action will be executed. ''
+
: ''An output all off instruction (like BA????) can be programmed to trigger a group action. With this instruction, you can write which Group Action will be executed. ''
  
 
:;Returns
 
:;Returns
::Group Nr
 
 
::<code>OK</code> 
 
::<code>OK</code> 
  
Example: Read the group linked to output 35
+
Example:  
  
 
:;Instruction:
 
:;Instruction:
::<code>output group follow read 35</code>
+
::<code>output all off group follow write 30</code>
  
 
:;Returns 
 
:;Returns 
::<code>10</code>
 
 
::<code>OK</code>
 
::<code>OK</code>
 +
 +
Remark:
 +
::* When an output all off instruction is executed, only the all off group nr will be executed and not all the individual output group follow actions.
  
 
----
 
----
  
====output group follow write [Output Nr] [Group Nr] ====
+
===Sensor instructions===
 +
====add virtual sensor module [id1] [id2] [id3] ====
 +
 
 +
:''This instruction will add a virtual sensor module (id0="t") with id1, id2 and id3. When using this instruction, please make sure that the combination id1, id2 and id3 for the sensor list is unique and not yet used.''
 +
:Example:
 +
el
 +
--- Total Uptime: 000259 Hours, Last Startup: 16:26:54 24/10/21  ---
 +
--- Module Type: BRAIN, RS485 mode: 0, Board: 27'C  --.--V --.--A ---
 +
--- PWR RS485/CAN: 1/1, CANTERM: 1, BB Debug: 255, Fw: 1.0.113      ---
 +
-------Output------------ID---------Err-------Status--------Pwr---
 +
  00 (l I 000->007) 108.000.000.000 00000  GOOD      (000)  1
 +
-------Input-------------ID---------Err-------Status--------Pwr---
 +
  00 (i I 000->007) 105.000.000.000 00000  GOOD      (000)  1
 +
  01 (b C 008->015) 098.000.000.001 00000  GOOD      (000)  1
 +
  02 (i V 016->023) 105.000.000.002 00000  GOOD      (000)  0
 +
-------Sensor------------ID---------Err-------Status--------Pwr---
 +
  00 (s C 000->007) 115.000.000.000 00000  GOOD      (000)  1
 +
-------CAN Control-------ID---------Err-------Status--------Pwr---
 +
  00 (C E 000->000) 067.001.230.000 00000  GOOD      (016)  1
 +
-------Micro CAN---------ID---------Err-------Status--------Pwr---
 +
  00 (m C 000->000) 000.248.090.233 00000  GOOD      (000)  1
 +
OK
 +
add virtual sensor module 0 0 1
 +
OK
 +
el
 +
--- Total Uptime: 000259 Hours, Last Startup: 16:26:54 24/10/21  ---
 +
--- Module Type: BRAIN, RS485 mode: 0, Board: 27'C  --.--V --.--A ---
 +
--- PWR RS485/CAN: 1/1, CANTERM: 1, BB Debug: 255, Fw: 1.0.113      ---
 +
-------Output------------ID---------Err-------Status--------Pwr---
 +
  00 (l I 000->007) 108.000.000.000 00000  GOOD      (000)  1
 +
-------Input-------------ID---------Err-------Status--------Pwr---
 +
  00 (i I 000->007) 105.000.000.000 00000  GOOD      (000)  1
 +
  01 (b C 008->015) 098.000.000.001 00000  GOOD      (000)  1
 +
  02 (i V 016->023) 105.000.000.002 00000  GOOD      (000)  0
 +
-------Sensor------------ID---------Err-------Status--------Pwr---
 +
  00 (s C 000->007) 115.000.000.000 00000  GOOD      (000)  1
 +
  01 (t V 008->015) 116.000.000.001 00000  GOOD      (000)  1
 +
-------CAN Control-------ID---------Err-------Status--------Pwr---
 +
  00 (C E 000->000) 067.001.230.000 00000  GOOD      (016)  1
 +
-------Micro CAN---------ID---------Err-------Status--------Pwr---
 +
  00 (m C 000->000) 000.248.090.233 00000  GOOD      (000)  1
 +
OK
 +
 
 +
====sensor extra list ====
  
: ''An output activation (switch on, off or change dimmer value) can be programmed to trigger a group action. With this instruction, you can write, for Output Nr, when an output activation occurs, which Group Action will be executed. ''
+
:''This instruction will display the list of Extra Sensors. Extra Sensors (max 64, 0-63) can be freely used for example to store the wind direction, windspeed etc of a weather station, power measurement and others. Extra Sensors can also trigger group actions and can be used with IF THEN instructions. The values are being set by using BA instructions. Sensor value used are 16bits.''
  
 
:;Returns
 
:;Returns
::<code>OK</code> 
+
::The sensor extra list
  
Example: Write group nr 10 must be linked to output 35
+
----
  
:;Instruction:
+
====sensor extra name write [sensor nr][sensor name]====
::<code>output group follow write 35 10</code>
 
  
:;Returns 
+
:''Write the name of an extra sensor, max 16 characters.''
::<code>OK</code>
 
  
----
+
:;[sensor nr]
 +
::Indicates which sensor (0-63) the name has to be written.
  
====output group follow list ====
+
:;[sensor name]
 
+
::the ascii name of the sensor (maximum 16 characters).
: ''An output activation (switch on, off or change dimmer value) can be programmed to trigger a group action. With this instruction, you can list, for all outputs in use, which Group Actions are linked. ''
 
  
 
:;Returns
 
:;Returns
:;List
+
::<code>OK</code>  
::<code>OK</code>
 
  
 +
Example:
  
 
:;Instruction:
 
:;Instruction:
::<code>output group follow list</code>
+
::<code>sensor extra name write 15 Windspeed</code>
  
 
:;Returns
 
:;Returns
::list 
+
::<code>OK</code>  
::<code>OK</code>
+
 
 
 
 
----
 
----
  
====output all off group follow read ====
+
====sensor extra name read [sensor nr]====
 +
 
 +
:''Read the name of an extra sensor''
  
: ''An output all off instruction (like BA????) can be programmed to trigger a group action. With this instruction, you can read which Group Action will be executed. ''
+
:;[sensor nr]
 +
::Indicates which sensor (0-63) the name has to be displayed.
  
 
:;Returns
 
:;Returns
::Group Nr
+
::<code>Sensor Name</code>
::<code>OK</code> 
+
::<code>OK</code>  
  
Example:  
+
Example:
  
 
:;Instruction:
 
:;Instruction:
::<code>output all off group follow read</code>
+
::<code>sensor extra name read 15</code>
  
:;Returns 
+
:;Returns
::<code>30</code>
+
::<code>Windspeed</code>  
::<code>OK</code>
+
::<code>OK</code>  
 
 
Remark:
 
::* When an output all off instruction is executed, only the all off group nr will be executed and not all the individual output group follow actions.
 
  
 
----
 
----
  
====output all off group follow write [Group Nr] ====
+
====sensor extra group follow read [Sensor Nr] ====
  
: ''An output all off instruction (like BA????) can be programmed to trigger a group action. With this instruction, you can write which Group Action will be executed. ''
+
: ''A sensor can trigger a group action when one of their values changes. With this instruction, you can read, for Sensor extra Nr (0-63), when a value change occurs, which Group Action will be executed. ''
  
 
:;Returns
 
:;Returns
 +
::Group Nr
 
::<code>OK</code> 
 
::<code>OK</code> 
  
Example:  
+
Example: Read the group linked to sensor extra 30
  
 
:;Instruction:
 
:;Instruction:
::<code>output all off group follow write 30</code>
+
::<code>sensor extra group follow read 30</code>
  
 
:;Returns 
 
:;Returns 
 +
::<code>20</code>
 
::<code>OK</code>
 
::<code>OK</code>
 
Remark:
 
::* When an output all off instruction is executed, only the all off group nr will be executed and not all the individual output group follow actions.
 
  
 
----
 
----
  
====queue group delay list====
+
====sensor extra group follow write [Sensor Nr] [Group Nr] ====
  
:''With BA17 and BA18, Group Actions can be executed at a later stage. This instruction give you an overview which group actions are planned to be executed in the future.  
+
: ''A sensor can trigger a group action when one of their values changes. With this instruction, you can write, for Sensor Extra Nr (0-63), when a value change occurs, which Group Action will be executed. ''
  
 
:;Returns
 
:;Returns
:;List
 
 
::<code>OK</code> 
 
::<code>OK</code> 
 +
 +
Example: Write group nr 20 must be linked to sensor extra 30
  
 
:;Instruction:
 
:;Instruction:
::<code>queue group delay list</code>
+
::<code>sensor extra group follow write 30 20</code>
  
:;Returns
+
:;Returns 
::list 
 
 
::<code>OK</code>
 
::<code>OK</code>
  
 
----
 
----
  
===VALIDATION Bit instructions===
+
====sensor extra group follow list ====
  
====validation bit list====
+
: ''A sensor can trigger a group action when one of their values changes. With this instruction, you can list, for all Extra Sensors, which Group Actions are linked. ''
 
 
:''This instruction will display the list of Validation Bits and their name.''
 
  
 
:;Returns
 
:;Returns
::List of Validation Bits
+
:;List
::<code>OK</code>  
+
::<code>OK</code>
 
 
Example: 
 
  
 
:;Instruction:
 
:;Instruction:
::<code>Validation bit list</code>
+
::<code>sensor extra group follow list</code>
  
:;Returns  
+
:;Returns
::Validation Bit List
+
::list 
 
::<code>OK</code>
 
::<code>OK</code>
 
 
----
 
----
  
====validation bit name read [Validation Bit Nr] ====
+
====sensor list ====
  
: ''With this instruction, you can read, for validation bit nr, the name of this validation bit ''
+
:''This instruction will display the list of sensors, the temperature, the humidity, the brightness and the name of each sensor''
  
 
:;Returns
 
:;Returns
::Validation Bit Name
+
::The sensor list
::<code>OK</code> 
 
  
Example: validation bit name read
+
----
  
:;Instruction:
+
====sensor name write [sensor nr][sensor name]====
::<code>validation bit name read 10</code>
 
  
:;Returns 
+
:''Write the name of a sensor, max 16 characters.''
::<code>test bit name1</code>
 
::<code>OK</code>
 
  
----
+
:;[sensor nr]
 +
::Indicates which sensor (0-127) the name has to be written.
  
====validation bit name write [Validation Bit Nr] [Validation Bit Name]====
+
:;[sensor name]
 
+
::the ascii name of the sensor (maximum 16 characters).
: ''With this instruction, you can write the name of a validation bit ''
 
  
 
:;Returns
 
:;Returns
::<code>OK</code> 
+
::<code>OK</code>  
 +
 
 +
Example:
 +
 
 +
:;Instruction:
 +
::<code>sensor name write 12 Bedroom 1</code>
 +
 
 +
:;Returns
 +
::<code>OK</code>
 +
 
 +
----
 +
 
 +
====sensor name read [sensor nr]====
 +
 
 +
:''Read the name of a sensor''
 +
 
 +
:;[sensor nr]
 +
::Indicates which sensor (0-127) the name has to be displayed.
 +
 
 +
:;Returns
 +
::<code>Sensor Name</code>
 +
::<code>OK</code>
  
Example: Write the name "test123" for validation bit nr 10
+
Example:
  
 
:;Instruction:
 
:;Instruction:
::<code>validation bit name write 10 test123</code>
+
::<code>sensor name read 12</code>
  
:;Returns 
+
:;Returns
 +
::<code>Bedroom 1</code>
 +
::<code>OK</code>
 +
 
 +
----
 +
 
 +
====sensor number modules read====
 +
 
 +
:''Read the number of sensor modules that are programmed and active''
 +
 
 +
:;Returns
 +
::<code>Number Of Sensor Modules</code>
 +
::<code>OK</code>
 +
 
 +
Example:
 +
 
 +
:;Instruction:
 +
::<code>sensor number modules read</code>
 +
 
 +
:;Returns
 +
::<code>6</code>
 +
::<code>OK</code>
 +
 
 +
----
 +
 
 +
====sensor number modules write [number of sensor modules]====
 +
 
 +
:''Writes the number of sensor modules that are programmed and active. This instruction will, after the write is performed, activate the instruction eeprom activate so all values from eeprom are read and copied in RAM''
 +
 
 +
:;[number of sensor modules]
 +
::Indicates the number of sensor modules that are active and programmed.
 +
 
 +
:;Returns
 +
::<code>OK</code>
 +
 
 +
Example:
 +
 
 +
:;Instruction:
 +
::<code>sensor number modules write 7</code>
 +
 
 +
:;Returns
 +
::<code>OK</code>
 +
 
 +
----
 +
 
 +
====temperature group follow read [Sensor Nr] ====
 +
 
 +
: ''A sensor can trigger a group action when one of their values changes. With this instruction, you can read, for Sensor Nr (0-127), when a temperature change occurs, which Group Action will be executed. ''
 +
 
 +
:;Returns
 +
::Group Nr
 +
::<code>OK</code> 
 +
 
 +
Example: Read the group linked to sensor 17
 +
 
 +
:;Instruction:
 +
::<code>temperature group follow read 17</code>
 +
 
 +
:;Returns 
 +
::<code>3</code>
 
::<code>OK</code>
 
::<code>OK</code>
 +
 +
----
 +
 +
====temperature group follow write [Sensor Nr] [Group Nr] ====
 +
 +
: ''A sensor can trigger a group action when one of their values changes. With this instruction, you can write, for Sensor Nr (0-127), when a temperature change occurs, which Group Action will be executed. ''
 +
 +
:;Returns
 +
::<code>OK</code> 
 +
 +
Example: Write group nr 3 must be linked to sensor 17
 +
 +
:;Instruction:
 +
::<code>temperature group follow write 17 3</code>
 +
 +
:;Returns 
 +
::<code>OK</code>
 +
 +
----
 +
 +
====temperature group follow list ====
 +
 +
: ''A sensor can trigger a group action when one of their values changes. With this instruction, you can list, for all sensor in use, which Group Actions are linked. ''
 +
 +
:;Returns
 +
:;List
 +
::<code>OK</code>
 +
 +
 +
:;Instruction:
 +
::<code>temperature group follow list</code>
 +
 +
:;Returns
 +
::list 
 +
::<code>OK</code>
 +
----
 +
 +
====humidity group follow read [Sensor Nr] ====
 +
 +
: ''A sensor can trigger a group action when one of their values changes. With this instruction, you can read, for Sensor Nr (0-127), when a humidity change occurs, which Group Action will be executed. ''
 +
 +
:;Returns
 +
::Group Nr
 +
::<code>OK</code> 
 +
 +
Example: Read the group linked to sensor 17
 +
 +
:;Instruction:
 +
::<code>humidity group follow read 17</code>
 +
 +
:;Returns 
 +
::<code>4</code>
 +
::<code>OK</code>
 +
 +
----
 +
 +
====humidity group follow write [Sensor Nr] [Group Nr] ====
 +
 +
: ''A sensor can trigger a group action when one of their values changes. With this instruction, you can write, for Sensor Nr (0-127), when a humidity change occurs, which Group Action will be executed. ''
 +
 +
:;Returns
 +
::<code>OK</code> 
 +
 +
Example: Write group nr 4 must be linked to sensor 17
 +
 +
:;Instruction:
 +
::<code>humidity group follow write 17 4</code>
 +
 +
:;Returns 
 +
::<code>OK</code>
 +
 +
----
 +
 +
====humidity group follow list ====
 +
 +
: ''A sensor can trigger a group action when one of their values changes. With this instruction, you can list, for all sensor in use, which Group Actions are linked. ''
 +
 +
:;Returns
 +
:;List
 +
::<code>OK</code>
 +
 +
 +
:;Instruction:
 +
::<code> humidity group follow list</code>
 +
 +
:;Returns
 +
::list 
 +
::<code>OK</code>
 +
----
 +
 +
====brightness group follow read [Sensor Nr] ====
 +
 +
: ''A sensor can trigger a group action when one of their values changes. With this instruction, you can read, for Sensor Nr (0-127), when a brightness change occurs, which Group Action will be executed. ''
 +
 +
:;Returns
 +
::Group Nr
 +
::<code>OK</code> 
 +
 +
Example: Read the group linked to sensor 17
 +
 +
:;Instruction:
 +
::<code> brightness group follow read 17</code>
 +
 +
:;Returns 
 +
::<code>5</code>
 +
::<code>OK</code>
 +
 +
----
 +
 +
==== brightness group follow write [Sensor Nr] [Group Nr] ====
 +
 +
: ''A sensor can trigger a group action when one of their values changes. With this instruction, you can write, for Sensor Nr (0-127), when a brightness change occurs, which Group Action will be executed. ''
 +
 +
:;Returns
 +
::<code>OK</code> 
 +
 +
Example: Write group nr 5 must be linked to sensor 17
 +
 +
:;Instruction:
 +
::<code> brightness group follow write 17 5</code>
 +
 +
:;Returns 
 +
::<code>OK</code>
 +
 +
----
 +
 +
==== brightness group follow list ====
 +
 +
: ''A sensor can trigger a group action when one of their values changes. With this instruction, you can list, for all sensor in use, which Group Actions are linked. ''
 +
 +
:;Returns
 +
:;List
 +
::<code>OK</code>
 +
 +
:;Instruction:
 +
::<code> brightness group follow list</code>
 +
 +
:;Returns
 +
::list 
 +
::<code>OK</code>
 +
----
 +
 +
====airquality group follow read [Sensor Nr] ====
 +
 +
: ''A sensor can trigger a group action when one of their values changes. With this instruction, you can read, for Sensor Nr (0-127), when an air quality (CO2) change occurs, which Group Action will be executed. ''
 +
 +
:;Returns
 +
::Group Nr
 +
::<code>OK</code> 
 +
 +
Example: Read the group linked to sensor 17
 +
 +
:;Instruction:
 +
::<code> airquality group follow read 17</code>
 +
 +
:;Returns 
 +
::<code>6</code>
 +
::<code>OK</code>
 +
 +
----
 +
 +
==== airquality group follow write [Sensor Nr] [Group Nr] ====
 +
 +
: ''A sensor can trigger a group action when one of their values changes. With this instruction, you can write, for Sensor Nr (0-127), when an air quality (CO2) change occurs, which Group Action will be executed. ''
 +
 +
:;Returns
 +
::<code>OK</code> 
 +
 +
Example: Write group nr 6 must be linked to sensor 17
 +
 +
:;Instruction:
 +
::<code> airquality group follow write 17 6</code>
 +
 +
:;Returns 
 +
::<code>OK</code>
 +
 +
----
 +
 +
==== airquality group follow list ====
 +
 +
: ''A sensor can trigger a group action when one of their values changes. With this instruction, you can list, for all sensor in use, which Group Actions are linked. ''
 +
 +
:;Returns
 +
:;List
 +
::<code>OK</code>
 +
 +
:;Instruction:
 +
::<code> airquality group follow list</code>
 +
 +
:;Returns
 +
::list 
 +
::<code>OK</code>
 +
----
 +
 +
===CAN module instructions===
 +
====can control number modules read====
 +
 +
:''Read the number of CAN Control modules that are programmed and active''
 +
 +
:;Returns
 +
::<code>Number Of CAN Control Modules</code>
 +
::<code>OK</code>
 +
 +
Example:
 +
 +
:;Instruction:
 +
::<code>can control number modules read</code>
 +
 +
:;Returns
 +
::<code>2</code>
 +
::<code>OK</code>
 +
 +
----
 +
 +
====can control number modules write [number of can control modules]====
 +
 +
:''Writes the number of CAN Control modules that are programmed and active. This instruction will, after the write is performed, activate the instruction eeprom activate so all values from eeprom are read and copied in RAM''
 +
 +
:;[number of CAN Control modules]
 +
::Indicates the number of CAN Control modules that are active and programmed.
 +
 +
:;Returns
 +
::<code>OK</code>
 +
 +
Example:
 +
 +
:;Instruction:
 +
::<code>can control number modules write 2</code>
 +
 +
:;Returns
 +
::<code>OK</code>
 +
 +
----
 +
====can debug off====
 +
 +
:''This instruction will disable the debug function for CAN messages sent and received on the CAN bus.''
 +
 +
:;Returns
 +
::<code>OK</code>
 +
 +
Example: Deactivate CAN debug mode
 +
 +
:;Instruction:
 +
::<code>can debug off</code>
 +
 +
:;Returns
 +
::<code>OK</code>
 +
 +
----
 +
 +
====can debug on====
 +
 +
:''This instruction will enable the debug function for CAN messages sent and received on the CAN bus.''
 +
 +
:;Returns
 +
::<code>OK</code>
 +
 +
Example: Activate CAN debug mode
 +
 +
:;Instruction:
 +
::<code>can debug on</code>
 +
 +
:;Returns
 +
::<code>OK</code>
 +
 +
----
 +
====can eeprom list====
 +
 +
:''This instruction will list the programmed configuration stored in the Brain(+) of all connected Micro CAN's.''
 +
 +
:;Returns
 +
::Configuration list of all programmed Micro CAN's
 +
 +
Example:
 +
 +
:;Instruction:
 +
::<code>can eeprom list</code>
 +
 +
:;Returns
 +
-Nr-Bus-ID2.ID1.ID0--Inp.link0-Inp.link1-Inp.link2-Inp.link3-Inp.link4-Inp.link5-Tem.link0-Tem.link1-Modbus-Type
 +
  00 000 100.154.092  009(001)  008(000)  255(255)  255(255)  255(255)  255(255)  000(000)  255(000)  255  255
 +
  01 100 030.245.232  255(255)  255(255)  010(002)  011(003)  012(004)  013(005)  255(100)  255(255)  255  255
 +
  02 100 232.121.136  255(255)  255(255)  036(020)  037(021)  035(019)  034(018)  006(100)  255(006)  255  255
 +
OK
 +
 +
:As you can see in the above example, 1 Micro Can is not responding. If you still want to know the configuration of this Micro Can, you can use the CLI instruction <code>can eeprom list</code>
 +
 +
:These are the explanations of the different items in the "can ping list":
 +
:* Nr: Micro CAN number
 +
:* Bus: This is the Bus number on which the Micro CAN is connected
 +
:** 100: Internal CAN Bus
 +
:** 000: CAN bus of the first CAN Control
 +
:** 001: CAN bus of the second CAN Control
 +
:** 002: CAN bus of the third CAN Control
 +
:** ...
 +
:* Inp.link0-5: This is system input nr of the Brain(+) that is linked to the input (0-5) of the Micro CAN. The value between parenthesis is the input number on that bus and is for developer purposes only and thus can be ignored.
 +
:* Tem.link0-1: This is the system sensor nr of the Brain(+) that is linked to the sensor (0-1) of the Micro CAN. The value between parenthesis is the sensor number on that bus and is for developer purposes only and thus can be ignored.
 +
:* Modbus: Modbus address (255-> not configured)
 +
:* Type:
 +
:**.BIT7: =0->Modbus VOC is used, =1->uCAN VOC is used
 +
:**.BIT6: =0->Modbus CO2 is used, =1->uCAN CO2 is used
 +
:**.BIT5: =0->Modbus humidity is used, =1->uCAN humidity is used
 +
:**.BIT4: =0->Modbus temp is used, =1->uCAN temp is used
 +
:**.BIT3: =0->Modbus LUX is used, =1->uCAN LUX is used
 +
----
 +
====can ping list====
 +
 +
:''This instruction will request to all connected Micro CAN's the full status and configuration.''
 +
 +
:;Returns
 +
::The detailed answers of the connected Micro CAN's
 +
 +
Example:
 +
 +
:;Instruction:
 +
::<code>can ping list</code>
 +
 +
:;Returns
 +
Nr-Bus-ID2.ID1.ID0-Inp.link0-Inp.link1-Inp.link2-Inp.link3-Inp.link4-Inp.link5-Tem.link0-Tem.link1-Type-Firmware-Boot-ID_NE-Modbus-Type-Model-Speed-Stat1-Stat2-Min-MAX-delay--Volt--
 +
00 000 100.154.092  NA(NA)    NA(NA)    NA(NA)    NA(NA)    NA(NA)    NA(NA)    NA(NA)    NA(NA)    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA  NA  NA >500ms  NA
 +
01 100 030.245.232 255(255)  255(255)  010(002)  011(003)  012(004)  013(005)  255(255)  255(255)  000  F06.00.06 255  069  255  255  255  255  000  255  000 255  001ms 23.48V
 +
02 100 232.121.136 255(255)  255(255)  028(020)  029(021)  027(019)  026(018)  006(006)  255(255)  060  F06.00.08 255  069  255  255  255  255  000  255  000 255  001ms 23.18V
 +
OK
 +
 +
:As you can see in the above example, 1 Micro Can is not responding. If you still want to know the configuration of this Micro Can, you can use the CLI instruction <code>can eeprom list</code>
 +
 +
:These are the explanations of the different items in the "can ping list":
 +
:* Nr: Micro CAN number
 +
:* Bus: This is the Bus number on which the Micro CAN is connected
 +
:** 100: Internal CAN Bus
 +
:** 000: CAN bus of the first CAN Control
 +
:** 001: CAN bus of the second CAN Control
 +
:** 002: CAN bus of the third CAN Control
 +
:** ...
 +
:* Inp.link0-5: This is system input nr of the Brain(+) that is linked to the input (0-5) of the Micro CAN. The value between parenthesis is the input number on that bus and is for developer purposes only and thus can be ignored.
 +
:* Tem.link0-1: This is the system sensor nr of the Brain(+) that is linked to the sensor (0-1) of the Micro CAN. The value between parenthesis is the sensor number on that bus and is for developer purposes only and thus can be ignored.
 +
:* Type: This is the type sensors connected on the Micro CAN:
 +
:** BIT0=1: Temperature sensor DS1820 1wire found on the first sensor connection
 +
:** BIT1=1: Temperature sensor DS1820 1wire found on the second sensor connection
 +
:** BIT2=1: Honeywell HIH8121 Temp/humidity sensor I2C found
 +
:** BIT3=1: TSL2591 I2C lux sensor found
 +
:** BIT4=1: CCS811 I2C air quality sensor found
 +
:** BIT5=1: T67xx I2C air quality sensor found
 +
:* Firmware: This is the current firmware version
 +
:* Boot: Bootloader mode for next startup
 +
:* ID_NE: 78->New Micro Can, 69->Existing Micro Can
 +
:* CanP1: =1->CanP parameters are validated and ready to be used
 +
:* CanP2: BRGCON1 (18F46K80)
 +
:* CanP3: BRGCON2 (18F46K80)
 +
:* CanP4: BRGCON3 (18F46K80)
 +
:* CanP5: CRC8 of CanP2-CanP4
 +
:* Stat: Led/Buzzer status
 +
:**.BIT0->Buzzer ON(1)/OFF(0) for all functions
 +
:**.BIT1->Buzzer ON(1)/OFF(0) for non-linked switches
 +
:**.BIT2->TriColor status led ON(1)/OFF(0)
 +
:* Min: Minimum led brightness
 +
:* Max: Maximum led brightness
 +
:* Delay: Trip Round time between request and response
 +
:* Volt: This is the voltage the Micro CAN is measuring. This is an interesting value, when long cables are used, to see how much voltage drop the cables are generating
 +
----
 +
====can config delete ====
 +
 +
:''This instruction will perform a factory reset of the CAN config in the master as well as in the micro CAN slaves. After this instruction, the micro CAN config is deleted from the eeprom of the master and the micro CAN slaves. 
 +
 +
:;Returns
 +
::<code>can config delete</code>
 +
::<code>OK</code>
 +
 +
Example:
 +
 +
:;Instruction:
 +
::<code>can config delete</code>
 +
 +
:;Returns
 +
::<code>OK</code>
 +
 +
----
 +
 +
====can module number read====
 +
 +
:''Read the number of CAN modules that are programmed and active''
 +
 +
:;Returns
 +
::<code>Number Of CAN Modules</code>
 +
::<code>OK</code>
 +
 +
Example:
 +
 +
:;Instruction:
 +
::<code>can module number read</code>
 +
 +
:;Returns
 +
::<code>6</code>
 +
::<code>OK</code>
 +
 +
----
 +
 +
====can module number write [number of CAN modules]====
 +
 +
:''Writes the number of CAN modules that are programmed and active. This instruction will, after the write is performed, activate the instruction eeprom activate so all values from eeprom are read and copied in RAM''
 +
 +
:;[number of CAN modules]
 +
::Indicates the number of CAN modules that are active and programmed.
 +
 +
:;Returns
 +
::<code>OK</code>
 +
 +
Example:
 +
 +
:;Instruction:
 +
::<code>can module number write 7</code>
 +
 +
:;Returns
 +
::<code>OK</code>
 +
 +
----
 +
 +
====can input number read====
 +
 +
:''Read the number of CAN inputs that are programmed and active''
 +
 +
:;Returns
 +
::<code>Number Of CAN inputs</code>
 +
::<code>OK</code>
 +
 +
Example:
 +
 +
:;Instruction:
 +
::<code>can input number read</code>
 +
 +
:;Returns
 +
::<code>12</code>
 +
::<code>OK</code>
 +
 +
----
 +
 +
====can input number write [number of CAN inputs]====
 +
 +
:''Writes the number of CAN inputs that are programmed and active. This instruction will, after the write is performed, activate the instruction eeprom activate so all values from eeprom are read and copied in RAM''
 +
 +
:;[number of CAN inputs]
 +
::Indicates the number of CAN inputs that are active and programmed.
 +
 +
:;Returns
 +
::<code>OK</code>
 +
 +
Example:
 +
 +
:;Instruction:
 +
::<code>can input number write 13</code>
 +
 +
:;Returns
 +
::<code>OK</code>
 +
 +
----
 +
 +
====can sensor number read====
 +
 +
:''Read the number of CAN sensors that are programmed and active''
 +
 +
:;Returns
 +
::<code>Number Of CAN sensors</code>
 +
::<code>OK</code>
 +
 +
Example:
 +
 +
:;Instruction:
 +
::<code>can sensor number read</code>
 +
 +
:;Returns
 +
::<code>4</code>
 +
::<code>OK</code>
 +
 +
----
 +
 +
====can sensor number write [number of CAN sensors]====
 +
 +
:''Writes the number of CAN sensors that are programmed and active. This instruction will, after the write is performed, activate the instruction eeprom activate so all values from eeprom are read and copied in RAM''
 +
 +
:;[number of CAN inputs]
 +
::Indicates the number of CAN sensors that are active and programmed.
 +
 +
:;Returns
 +
::<code>OK</code>
 +
 +
Example:
 +
 +
:;Instruction:
 +
::<code>can sensor number write 6</code>
 +
 +
:;Returns
 +
::<code>OK</code>
 +
 +
----
 +
 +
====can speed read====
 +
:''This instruction will display the CAN bus speed currently in use.''
 +
 +
:;Returns
 +
::CAN bus speed
 +
 +
Example:
 +
 +
:;Instruction:
 +
::<code>can speed read</code>
 +
 +
:;Returns
 +
125kbps
 +
OK
 +
----
 +
 +
====can speed write [speed]====
 +
:''This instruction will write the new CAN bus speed that will be effective after reset. Supported speeds are 20kbps, 50kbps, 125kbps and 250kbps.''
 +
 +
:;Returns
 +
::CAN bus parameters
 +
 +
Example:
 +
 +
:;Instruction:
 +
::<code>can speed write 50</code>
 +
 +
:;Returns
 +
CAN P: 001 031 255 002 060
 +
OK
 +
:;See https://wiki.openmotics.com/index.php/AIO_Tips_%26_tricks_during_installation_and_troubleshooting#Changing_CAN_bus_speed for detailed use
 +
 +
Notes:
 +
* New uCAN's are programmed at a speed of 125kbps so when new uCAN's are added to an existing network, change the speed to 125kbps, add the uCAN and then change to the required speed.
 +
* The instruction "can speed write" can also be executed without any parameter. Without parameter, the Master will take the values programmed in Eeprom starting at Page0/Byte14 and verify integrity of those values. When the integrity is OK, these values will be distributed towards the uCAN and programmed in the Master to be used after the next reset. This allows custom CAN parameters to be used in a system.
 +
* The speed that a CAN bus is able to support depends on the cable used and the length: Increase in cable length means decrease in CAN speed, decrease in cable quality means decrease in CAN speed. A good quality cable (for example UTP CAT6) at CAN speed of 125kbps can easily support 250 meter.
 +
----
 +
====can message [Bus Nr] [SID] [B0] [B1] [B2] [B3] [B4] [B5] [B6] [B7]====
 +
 +
: ''This instruction allows to sent direct messages to the CAN bus. To see the response on these messages, turn on the CAN debug functionality ("can debug on").
 +
:;[Bus Nr]
 +
::Indicates the Bus Nr on which the CAN message must be sent:100->internal CAN bus, 0->First CAN Control, 1->Second CAN Control etc, 255->Broadcast message on all available CAN busses.
 +
:;[Bx]
 +
::B1..B8 are the bytes that forms the CAN message, length of the CAN message (Minimum 2, maximum 8 bytes (B1..B8))
 +
 +
Example: Sent message on the internal CAN bus with SID=6, 5 bytes long message 1 100 0 0 101
 +
 +
:;Instruction:
 +
::<code>can message 0 6 1 100 0 0 101</code>
 +
 +
:;Returns
 +
::<code>OK</code>
 +
----
 +
 +
===DALI instructions===
 +
====dali debug off====
 +
 +
:''This instruction will disable the debug function for Dali message sent and received on the Dali bus.''
 +
 +
:;Returns
 +
::<code>OK</code>
 +
 +
Example: Deactivate Dali debug mode
 +
 +
:;Instruction:
 +
::<code>dali debug off</code>
 +
 +
:;Returns
 +
::<code>OK</code>
 +
 +
----
 +
 +
====dali debug on====
 +
 +
:''This instruction will enable the debug function for Dali message sent and received on the Dali bus.''
 +
 +
:;Returns
 +
::<code>OK</code>
 +
 +
Example: Activate Dali debug mode
 +
 +
:;Instruction:
 +
::<code>dali debug on</code>
 +
 +
:;Returns
 +
::<code>OK</code>
 +
 +
Example of received info:
 +
16:43:48 CAN RX(100) SID=6 L=7 -> 1 96 151 12 143 1 148 2
 +
Some info of the above example:
 +
* RX -> Received CAN information, TX -> Transmit CAN information
 +
* (100) -> Bus: 100 -> internal can bus, 0 -> first Can Control, 1 -> second Can Control, ...
 +
* L -> length of the CAN message
 +
 +
----
 +
 +
====dali input link write [input_nr] [bus_nr] [dali_id]====
 +
 +
:''This instruction will link a virtual input (input_nr) to a Dali_id on a Dali Bus_nr.''
 +
:;[bus_nr]
 +
:;*bus_nr=0: Lunatone SCI directly connected to the Brain(+)
 +
 +
:;*bus_nr=1: Lunatone SCI is connected to the first CAN Control
 +
 +
:;*bus_nr=2: Lunatone SCI is connected to the second CAN Control
 +
 +
:;...
 +
 +
:;[input_nr]
 +
::This is the input nr (of a virtual module created by using instruction "add virtual input module") that will be linked to the Dali_id.
 +
 +
:;[dali_id]
 +
::dali_id is the address found of the "to be linked" device in the Lunatone cockpit software
 +
 +
:;Returns
 +
::<code>OK</code>
 +
 +
Example: Link input 8 with Dali device on Bus 0 (SCI connected with Brain(+)) with Dali ID 1
 +
 +
:;Instruction:
 +
::<code>dali input link write 8 0 1</code>
 +
 +
:;Returns
 +
::<code>OK</code>
 +
 +
----
 +
 +
====dali input link read [input_nr]====
 +
 +
:''This instruction will read which bus and Dali ID is linked to virtual input (input_nr).''
 +
 +
:;[input_nr]
 +
::This is the input nr (of a virtual module created by using instruction "add virtual input module") that will be linked to the Dali_id.
 +
 +
 +
:;Returns
 +
::<code>bus_nr dali_id</code>
 +
 +
Example: Check which bus and Dali ID is linked to output 8. Returns that output 8 is linked to bus 0 (SCI connected to Brain(+)) Dali ID 1.
 +
 +
:;Instruction:
 +
::<code>dali input link read 8</code>
 +
 +
:;Returns
 +
::<code>0 1</code>
 +
::<code>OK</code> 
 +
 +
----
 +
 +
====dali output link write [output_nr] [bus_nr] [dali_id]====
 +
 +
:''This instruction will link a virtual output (output_nr) to a Dali_id on a Dali Bus_nr.''
 +
:;[bus_nr]
 +
:;*bus_nr=0: Lunatone SCI directly connected to the Brain(+)
 +
 +
:;*bus_nr=1: Lunatone SCI is connected to the first CAN Control
 +
 +
:;*bus_nr=2: Lunatone SCI is connected to the second CAN Control
 +
 +
:;...
 +
 +
:;[output_nr]
 +
::This is the output nr (of a virtual module created by using instruction "add virtual output module" or "add virtual dimmer module") that will be linked to the Dali_id.
 +
 +
:;[dali_id]
 +
::dali_id is the address found of the "to be linked" device in the Lunatone cockpit software
 +
 +
:;Returns
 +
::<code>OK</code>
 +
 +
Example: Link output 8 with Dali device on Bus 0 (SCI connected with Brain(+)) with Dali ID 1
 +
 +
:;Instruction:
 +
::<code>dali output link write 8 0 1</code>
 +
 +
:;Returns
 +
::<code>OK</code>
 +
 +
----
 +
 +
====dali output link read [output_nr]====
 +
 +
:''This instruction will read which bus and Dali ID is linked to virtual output (output_nr).''
 +
 +
:;[output_nr]
 +
::This is the output nr (of a virtual module created by using instruction "add virtual output module" or "add virtual dimmer module") that will be linked to the Dali_id.
 +
 +
 +
:;Returns
 +
::<code>bus_nr dali_id</code>
 +
 +
Example: Check which bus and Dali ID is linked to output 8. Returns that output 8 is linked to bus 0 (SCI connected to Brain(+)) Dali ID 1.
 +
 +
:;Instruction:
 +
::<code>dali output link read 8</code>
 +
 +
:;Returns
 +
::<code>0 1</code>
 +
::<code>OK</code> 
 +
 +
----
 +
 +
===GROUP instructions===
 +
 +
A group action is composed of multiple actions that can be executed. Each group action can call other group actions. Group actions can be nested up to 16 levels deep, if you go deeper, those group actions will be ignored. IF THEN ENDIF instructions used inside a group can be nested as well up to 16 levels deep.
 +
The most easy way, when nested group actions including IF THEN ENDIF instructions are used is to use the CLI instruction "group simulate" which gives you a CLI representation of the result of a group action with the included nested group actions (if any).
 +
 +
A group action doesn't have a fixed length, the length and thus the number of group action can be defined at creation by defining the start and end BA. In total, 4200 (BA0 to BA4199) actions can be placed in 255 (0-254) different groups. Each group have a start address and end address.
 +
 +
Start address and end addresses can be changed even when a group has been programmed.
 +
 +
How does group actions work: A normal group action with format 19 0 x y will be added to the queue of immediate action. This queue will process this group action immediately. A group action with format 19 1 x y will not be executed but only simulated and the result will be printed in the CLI screen which is easy to troubleshoot complex group actions.
 +
 +
Group actions can also be delayed in time and only be executed when the defined time trigger has expired (expired seconds or day/hour/minute reached). For example, delayed group action BA 18 0 15 240 will execute BA19 0 15 0 after 240 seconds.
 +
 +
It’s important to note that delayed group actions will be put in the delay queue until the time trigger expires, then this delayed group action will be deleted from the delayed group queue (after executing the related group action). When for example a group action must be executed every 120 seconds, the group delay BA instruction (BA18) that adds the group action to be executed after 120 seconds must be added in the original group action.
 +
 +
When a time trigger occurred and the group action has been executed, the delayed group action is removed from the queue so if you want an action to be executed on a certain hour every day of the week, the delayed group action must be added on the delayed queue after every execution in the group action. The easiest way to do this is to create a group action with a list of instructions including the instruction to put this group on the delayed group. To get the delayed action in the queue for the first time, you can use the startup group action which executes at each processor start or reset.
 +
 +
----
 +
 +
====group list====
 +
 +
:''This instruction will display the list of all programmed group actions (group actions with a valid begin and end address and the first BA programmed) with their name.''
 +
 +
:;Returns
 +
::List of programmed group actions
 +
::<code>OK</code>
 +
 +
Example: 
 +
 +
:;Instruction:
 +
::<code>group list</code>
 +
 +
:;Returns
 +
::<code>-Group---------Name---------</code>
 +
::<code> 000  ->  test</code>
 +
::<code> 001  -></code>
 +
::<code> 002  -></code>
 +
::<code> 003  -></code>
 +
::<code> 004  -></code>
 +
::<code> 139  -></code>
 +
::<code> 167  -></code>
 +
::<code> 170  -></code>
 +
::<code> 173  -></code>
 +
::<code> 176  -></code>
 +
::<code> 179  -></code>
 +
::<code> 182  -></code>
 +
::<code> 185  -></code>
 +
::<code> 188  -></code>
 +
::<code>OK</code>
 +
 +
----
 +
 +
====group name read [group nr]====
 +
 +
:''This instruction will read the name of a group action (0-254).''
 +
 +
:;Returns
 +
:: name of group action
 +
::<code>OK</code>
 +
 +
Example:
 +
 +
:;Instruction:
 +
::<code>group name read 0</code>
 +
 +
:;Returns
 +
::<code>test</code>
 +
::<code>OK</code>
 +
 +
----
 +
 +
====group name write [group nr] [group name]====
 +
 +
:''This instruction will program the name of group action (0-254).''
 +
 +
:;Returns
 +
::<code>OK</code>
 +
 +
Example:
 +
 +
:;Instruction:
 +
::<code>group name write 0 test</code>
 +
 +
:;Returns
 +
::<code>OK</code>
 +
----
 +
 +
====group search [Type] [opt: Action] [opt: Device Nr] [opt: Extra]====
 +
 +
:''This instruction will do a search in all active group actions to see if a certain group action or group family has been used. You can do a search with only 1 parameter (BA Type) or you can add additional optional parameters (Action, Device Nr, Extra) to narrow down the search''
 +
 +
:;Returns
 +
::List of all groups and the search result for each group
 +
::<code>OK</code>
 +
 +
Example:
 +
 +
:;Instruction: (Example: Search in all groups for outputs that are toggled)
 +
::<code>group search 0 16</code>
 +
 +
:;Returns
 +
::<code>Group 000 : test</code>
 +
::<code> -> BA0001 - 000 016 00005 00000  Toggle output 5 with std timer/dimmer</code>
 +
::<code> -> BA0010 - 000 016 00015 00000  Toggle output 15 with std timer/dimmer</code>
 +
::<code>Group 001 :</code>
 +
::<code>Group 002 :</code>
 +
::<code>Group 003 :</code>
 +
::<code>Group 004 :</code>
 +
::<code>Group 005 : Output Follow</code>
 +
::<code>Group 006 :</code>
 +
::<code>Group 007 : Temp follow test</code>
 +
::<code> -> BA0075 - 000 016 00002 00000  Toggle output 2 with std timer/dimmer</code>
 +
::<code> -> BA0076 - 000 016 00003 00000  Toggle output 3 with std timer/dimmer</code>
 +
::<code> -> BA0077 - 000 016 00004 00000  Toggle output 4 with std timer/dimmer</code>
 +
::<code> -> BA0078 - 000 016 00005 00000  Toggle output 5 with std timer/dimmer</code>
 +
::<code> -> BA0079 - 000 016 00006 00000  Toggle output 6 with std timer/dimmer</code>
 +
::<code>Group 139 :</code>
 +
::<code>Group 167 :</code>
 +
::<code> -> BA0001 - 000 016 00005 00000  Toggle output 5 with std timer/dimmer</code>
 +
::<code> -> BA0010 - 000 016 00015 00000  Toggle output 15 with std timer/dimmer</code>
 +
::<code>Group 170 :</code>
 +
::<code> -> BA0001 - 000 016 00005 00000  Toggle output 5 with std timer/dimmer</code>
 +
::<code> -> BA0010 - 000 016 00015 00000  Toggle output 15 with std timer/dimmer</code>
 +
::<code>Group 173 :</code>
 +
::<code> -> BA0001 - 000 016 00005 00000  Toggle output 5 with std timer/dimmer</code>
 +
::<code> -> BA0010 - 000 016 00015 00000  Toggle output 15 with std timer/dimmer</code>
 +
::<code>Group 176 :</code>
 +
::<code> -> BA0001 - 000 016 00005 00000  Toggle output 5 with std timer/dimmer</code>
 +
::<code> -> BA0010 - 000 016 00015 00000  Toggle output 15 with std timer/dimmer</code>
 +
::<code>Group 179 :</code>
 +
::<code> -> BA0001 - 000 016 00005 00000  Toggle output 5 with std timer/dimmer</code>
 +
::<code> -> BA0010 - 000 016 00015 00000  Toggle output 15 with std timer/dimmer</code>
 +
::<code>Group 188 :</code>
 +
::<code> -> BA0001 - 000 016 00005 00000  Toggle output 5 with std timer/dimmer</code>
 +
::<code> -> BA0010 - 000 016 00015 00000  Toggle output 15 with std timer/dimmer</code>
 +
::<code>OK</code>
 +
----
 +
 +
====group start list====
 +
 +
:''This instruction will list all the start addresses of each group action.''
 +
 +
:;Returns
 +
:: List of all start addresses of each group action
 +
::<code>OK</code>
 +
 +
Example:
 +
 +
:;Instruction:
 +
::<code>group start list</code>
 +
 +
:;Returns
 +
-Group nr---BA Start--BA Stop-----Name---------
 +
::<code>  000      0000      0022  ->  test</code>
 +
::<code>  001      0023      0029  -></code>
 +
::<code>  002      0030      0034  -></code>
 +
::<code>  003      0035      0041  -></code>
 +
::<code>  004      0042      0061  -></code>
 +
::<code>  005      0062      ----  -></code>
 +
::<code>  006      ----      ----  -></code>
 +
::<code>  007      ----      ----  -></code>
 +
::<code>  008      ----      ----  -></code>
 +
::<code>  009      ----      ----  -></code>
 +
::<code>  010      ----      ----  -></code>
 +
::<code>  011      ----      ----  -></code>
 +
::<code>  012      ----      ----  -></code>
 +
::<code>  013      ----      ----  -></code>
 +
::<code>  014      ----      ----  -></code>
 +
::<code>  015      ----      ----  -></code>
 +
::<code>  016      ----      ----  -></code>
 +
::<code>  017      ----      ----  -></code>
 +
::<code>  018      ----      ----  -></code>
 +
::<code>  019      ----      ----  -></code>
 +
::<code>  020      ----      ----  -></code>
 +
::<code>  ...</code>
 +
::<code>OK</code>
 +
 +
----
 +
 +
====group start end write [group nr] [start ba nr] [end ba nr]====
 +
 +
:''This instruction will write the start address (0-4199) and end address of group nr x (0-254).''
 +
 +
:;Returns
 +
::<code>OK</code>
 +
 +
Example: write start address BA35 and end address BA46 of group nr 5
 +
 +
:;Instruction:
 +
::<code>group start write 5 35 46</code>
 +
 +
:;Returns
 +
::<code>OK</code>
 +
 +
----
 +
 +
====group read [group nr]====
 +
 +
:''This instruction will read a group action (0-254) and display all BA's that this group action contains.''
 +
 +
:;Returns
 +
::<code>OK</code>
 +
 +
Example:
 +
 +
:;Instruction:
 +
::<code>group read 0</code>
 +
 +
:;Returns
 +
::<code>-Grp--BA Nr---Typ-Act--x--(MSB.LSB)--y--(MSB.LSB)-------BA Description----</code>
 +
::<code> 000  0000(00)  000 007 00013(000.013) 00000(000.000) ->  Output 13 ON and only overrule timer with value 0 (0x1s) when output is not yet on</code>
 +
::<code> 000  0001(01)  000 016 00005(000.005) 00000(000.000) ->  Toggle output 5 with std timer/dimmer</code>
 +
::<code> 000  0002(02)  000 004 00011(000.011) 00020(000.020) ->  Output 11 ON and overrule timer with value 20 (20x1s)</code>
 +
::<code> 000  0003(03)  100 000 00000(000.000) 00000(000.000) ->  IF</code>
 +
::<code> 000  0004(04)  100 010 00012(000.012) 00000(000.000) ->  Output 12 is ON</code>
 +
::<code> 000  0005(05)  100 150 00000(000.000) 00000(000.000) ->  THEN</code>
 +
::<code> 000  0006(06)  000 001 00005(000.005) 00000(000.000) ->  Output 5 ON with std timer/dimmer</code>
 +
::<code> 000  0007(07)  100 200 00000(000.000) 00000(000.000) ->  ELSE</code>
 +
::<code> 000  0008(08)  019 000 00001(000.001) 00000(000.000) ->  Execute Group Action 1</code>
 +
::<code> 000  0009(09)  100 255 00000(000.000) 00000(000.000) ->  ENDIF</code>
 +
::<code> 000  0010(10)  000 016 00015(000.015) 00000(000.000) ->  Toggle output 15 with std timer/dimmer</code>
 +
::<code> 000  0011(11)  255 255 65535(255.255) 65535(255.255) ->  Instruction not in use</code>
 +
::<code> 000  0012(12)  255 255 65535(255.255) 65535(255.255) ->  Instruction not in use</code>
 +
::<code> 000  0013(13)  255 255 65535(255.255) 65535(255.255) ->  Instruction not in use</code>
 +
::<code> 000  0014(14)  255 255 65535(255.255) 65535(255.255) ->  Instruction not in use</code>
 +
::<code> 000  0015(15)  255 255 65535(255.255) 65535(255.255) ->  Instruction not in use</code>
 +
::<code> 000  0016(16)  255 255 65535(255.255) 65535(255.255) ->  Instruction not in use</code>
 +
::<code> 000  0017(17)  255 255 65535(255.255) 65535(255.255) ->  Instruction not in use</code>
 +
::<code> 000  0018(18)  255 255 65535(255.255) 65535(255.255) ->  Instruction not in use</code>
 +
::<code> 000  0019(19)  255 255 65535(255.255) 65535(255.255) ->  Instruction not in use</code>
 +
::<code> 000  0020(20)  255 255 65535(255.255) 65535(255.255) ->  Instruction not in use</code>
 +
::<code> 000  0021(21)  255 255 65535(255.255) 65535(255.255) ->  Instruction not in use</code>
 +
::<code> 000  0022(22)  255 255 65535(255.255) 65535(255.255) ->  Instruction not in use</code>
 +
::<code>OK</code>
 +
 +
----
 +
 +
====group ba write [ba nr] [Type] [Action] [Device Nr] [Extra parameter]====
 +
 +
:''This instruction will write the Basic Action (Type, Action, Device Nr & Extra Parameter) of BA nr (0-4199) for a list of the different BA types that can be used, see [[Action Types AIO]].''
 +
 +
:;Returns
 +
::<code>OK</code>
 +
 +
Example: write BA 35 with instruction output 17 off
 +
 +
:;Instruction:
 +
::<code>group ba write 35 0 0 17 0</code>
 +
 +
:;Returns
 +
::<code>OK</code>
 +
 +
Remark:
 +
::* This instruction exist in a 5 and 7 parameter version
 +
::* The 5 parameter version has following format: "group ba write [ba nr] [Type] [Action] [Device Nr] [Extra parameter]"
 +
::* The 7 parameter version has following format: "group ba write [ba nr] [Type] [Action] [Device Nr.MSB] [Device Nr.LSB] [Extra parameter.MSB] [Extra parameter.LSB]"
 +
::* In the 7 parameter version, you split Device Nr and Extra parameter is his Most significant Byte (MSB) and his Least Significant Byte.
 +
 +
----
 +
 +
====group ba read [ba nr]====
 +
 +
:''This instruction will read the Basic Action (Type, Action, Device Nr & Extra Parameter) of BA nr (0-4199). For a list of the different BA types that can be used, see [[Action Types AIO]].''
 +
 +
:;Returns
 +
::BA details
 +
 +
Example: read BA 100
 +
 +
:;Instruction:
 +
::<code>group ba read 100</code>
 +
 +
:;Returns
 +
::<code>OK</code>
 +
::<code>-BA Nr----Typ-Act---x--(MSB.LSB)---y--(MSB.LSB)-------BA Description----</code>
 +
::<code>  0100    000 016 00026(000.026) 00000(000.000) ->  Toggle output 26 with std timer/dimmer</code>
 +
::<code>OK</code>
 +
 +
----
 +
 +
====group simulate [group nr] ====
 +
 +
:''This instruction will simulate the result of a group action (0-254) including nested group actions. Below is an example of 4 nested group actions. As you can see in the below example, abstraction is made of the different group action and everything is represented in one consolidated view.''
 +
 +
:;Returns
 +
::Consolidated view of the group action
 +
::<code>OK</code>
 +
 +
Example:
 +
 +
:;Instruction:
 +
::<code>group simulate 0</code>
 +
 +
:;Returns
 +
::<code>15:15:23 BA 000 007 00013(000.013) 00000(000.000) EXEC SIM -> Output 13 ON and only overrule timer with value 0 (0x1s) when output is not yet on</code>
 +
::<code>15:15:23 BA 000 016 00005(000.005) 00000(000.000) EXEC SIM -> Toggle output 5 with std timer/dimmer</code>
 +
::<code>15:15:23 BA 000 004 00011(000.011) 00020(000.020) EXEC SIM -> Output 11 ON and overrule timer with value 20 (20x1s)</code>
 +
::<code>15:15:23 BA 100 000 00000(000.000) 00000(000.000)                      IF</code>
 +
::<code>15:15:23 BA 100 010 00012(000.012) 00000(000.000)              Output 12 is ON</code>
 +
::<code>15:15:24 BA 100 150 00000(000.000) 00000(000.000)            THEN</code>
 +
::<code>15:15:24 BA 000 001 00005(000.005) 00000(000.000) SKIP INSTR    Output 5 ON with std timer/dimmer</code>
 +
::<code>15:15:24 BA 100 200 00000(000.000) 00000(000.000)            ELSE</code>
 +
::<code>15:15:24 BA 000 001 00004(000.004) 00000(000.000) EXEC SIM ->  Output 4 ON with std timer/dimmer</code>
 +
::<code>15:15:24 BA 100 000 00000(000.000) 00000(000.000)              IF</code>
 +
::<code>15:15:24 BA 100 011 00013(000.013) 00000(000.000)                Output 13 is OFF</code>
 +
::<code>15:15:24 BA 100 150 00000(000.000) 00000(000.000)              THEN</code>
 +
::<code>15:15:24 BA 100 000 00000(000.000) 00000(000.000)                IF</code>
 +
::<code>15:15:24 BA 100 010 00014(000.014) 00000(000.000)                  Output 14 is ON</code>
 +
::<code>15:15:24 BA 100 150 00000(000.000) 00000(000.000)                THEN</code>
 +
::<code>15:15:24 BA 100 000 00000(000.000) 00000(000.000)                  IF</code>
 +
::<code>15:15:24 BA 100 010 00007(000.007) 00000(000.000)                    Output 7 is ON</code>
 +
::<code>15:15:24 BA 100 090 00000(000.000) 00000(000.000)                    AND</code>
 +
::<code>15:15:24 BA 100 011 00008(000.008) 00000(000.000)                    Output 8 is OFF</code>
 +
::<code>15:15:24 BA 100 150 00000(000.000) 00000(000.000)                  THEN</code>
 +
::<code>15:15:24 BA 000 255 00255(000.255) 00000(000.000) SKIP INSTR          Switch OFF all Outputs(x=0), Lights(x=1) or Lights&Outputs(x>1)</code>
 +
::<code>15:15:24 BA 100 200 00000(000.000) 00000(000.000)                  ELSE</code>
 +
::<code>15:15:24 BA 000 001 00010(000.010) 00000(000.000) EXEC SIM ->        Output 10 ON with std timer/dimmer</code>
 +
::<code>15:15:24 BA 000 001 00009(000.009) 00000(000.000) EXEC SIM ->        Output 9 ON with std timer/dimmer</code>
 +
::<code>15:15:24 BA 100 255 00000(000.000) 00000(000.000)                  ENDIF</code>
 +
::<code>15:15:24 BA 100 200 00000(000.000) 00000(000.000)                ELSE</code>
 +
::<code>15:15:24 BA 000 001 00003(000.003) 00000(000.000) SKIP INSTR        Output 3 ON with std timer/dimmer</code>
 +
::<code>15:15:24 BA 100 255 00000(000.000) 00000(000.000)                ENDIF</code>
 +
::<code>15:15:24 BA 100 255 00000(000.000) 00000(000.000)              ENDIF</code>
 +
::<code>15:15:24 BA 000 000 00020(000.020) 00000(000.000) EXEC SIM ->  Output 20 OFF</code>
 +
::<code>15:15:24 BA 100 255 00000(000.000) 00000(000.000)            ENDIF</code>
 +
::<code>15:15:25 BA 000 016 00015(000.015) 00000(000.000) EXEC SIM -> Toggle output 15 with std timer/dimmer</code>
 +
 +
:Some remarks:
 +
:- SKIP INSTR: This instruction in the consolidated group view will not be executed when running in execution mode ("group activate") due to the conditions being set (IF THEN ENDIF)
 +
:- EXEC SIM: This instruction will be executed when the group will be running in execution mode
 +
 +
----
 +
 +
====group activate [group nr] ====
 +
 +
:''This instruction will execute a group action (0-254). If you want to see what's happening during execution, you can activate verbose mode by using instruction "basic action debug on". Please note that the instruction "basic action debug on" can slow down the processor due to more console printing that needs to be done.''
 +
 +
:;Returns
 +
::<code>OK</code>
 +
 +
Example:
 +
 +
:;Instruction:
 +
::<code>group activate 5</code>
 +
 +
:;Returns
 +
::<code>OK</code>
 +
 +
----
 +
 +
====group delay queue list====
 +
 +
:''With BA17 and BA18, Group Actions can be executed at a later stage. This instruction give you an overview which group actions are planned to be executed in the future.
 +
 +
:;Returns
 +
:;List
 +
::<code>OK</code> 
 +
 +
:;Instruction:
 +
::<code>group delay queue list</code>
 +
 +
:;Returns
 +
::list 
 +
::<code>OK</code>
 +
 +
----
 +
 +
===VALIDATION Bit instructions===
 +
 +
====validation bit group follow read [Bit Nr] ====
 +
 +
: ''A validation bit (0-255) can trigger a group action when the validation bit value changes. With this instruction, you can read, for validation bit Nr, when a value change occurs, which Group Action will be executed. ''
 +
 +
:;Returns
 +
::Group Nr
 +
::<code>OK</code> 
 +
 +
Example: Read the group linked to validation bit 210
 +
 +
:;Instruction:
 +
::<code>validation bit group follow read 210</code>
 +
 +
:;Returns 
 +
::<code>63</code>
 +
::<code>OK</code>
 +
 +
----
 +
 +
====validation bit group follow write [Bit Nr] [Group Nr] ====
 +
 +
: ''A validation bit (0-255) can trigger a group action when the validation bit value changes. With this instruction, you can write, for validation bit Nr, when a value change occurs, which Group Action will be executed. ''
 +
 +
:;Returns
 +
::<code>OK</code> 
 +
 +
Example: Write group nr 63 must be linked to validation bit 210
 +
 +
:;Instruction:
 +
::<code>validation bit group follow write 210 63</code>
 +
 +
:;Returns 
 +
::<code>OK</code>
 +
 +
----
 +
 +
====validation bit group follow list ====
 +
 +
: ''A validation bit (0-255) can trigger a group action when the validation bit value changes. With this instruction, you can list, for all validation bits, which Group Actions are linked. ''
 +
 +
:;Returns
 +
:;List
 +
::<code>OK</code>
 +
 +
:;Instruction:
 +
::<code>validation bit group follow list</code>
 +
 +
:;Returns
 +
::list 
 +
::<code>OK</code>
 +
----
 +
 +
====validation bit list====
 +
 +
:''This instruction will display the list of all Validation Bits, the associated value and name.''
 +
 +
:;Returns
 +
::List of Validation Bits
 +
::<code>OK</code>
 +
 +
Example: 
 +
 +
:;Instruction:
 +
::<code>Validation bit list</code>
 +
 +
:;Returns
 +
::Validation Bit List
 +
::<code>OK</code>
 +
 +
----
 +
 +
====validation bit name read [Bit Nr] ====
 +
 +
: ''With this instruction, you can read, for validation bit nr (0-255), the name of this validation bit ''
 +
 +
:;Returns
 +
::Validation Bit Name
 +
::<code>OK</code> 
 +
 +
Example: validation bit name read
 +
 +
:;Instruction:
 +
::<code>validation bit name read 10</code>
 +
 +
:;Returns 
 +
::<code>test bit name1</code>
 +
::<code>OK</code>
 +
 +
----
 +
 +
====validation bit name write [Bit Nr] [Bit Name]====
 +
 +
: ''With this instruction, you can write the name of a validation bit (0-255)''
 +
 +
:;Returns
 +
::<code>OK</code> 
 +
 +
Example: Write the name "test123" for validation bit nr 10
 +
 +
:;Instruction:
 +
::<code>validation bit name write 10 test123</code>
 +
 +
:;Returns 
 +
::<code>OK</code>
 +
 +
----
 +
 +
====validation bit read [Bit Nr] ====
 +
 +
: ''This instruction will read the value (0 or 1) of a validation bit. Validation bits can be freely used and are often applied to remember certain events.''
 +
 +
:;Returns
 +
::Validation bit value
 +
::<code>OK</code> 
 +
 +
Example: Read bit 230
 +
 +
:;Instruction:
 +
::<code>validation bit read 230</code>
 +
 +
:;Returns 
 +
::<code>1</code>
 +
::<code>OK</code>
 +
 +
----
 +
 +
====validation bit write [Bit Nr] [Bit Value] ====
 +
 +
: ''This instruction will write Bit Value (0 or 1) in validation bit nr. Validation bits can be freely used and are often applied to remember certain events.''
 +
 +
:;Returns
 +
::<code>OK</code> 
 +
 +
Example: Write value 0 in validation bit 230
 +
 +
:;Instruction:
 +
::<code>validation bit write 230 0</code>
 +
 +
:;Returns 
 +
::<code>OK</code>
 +
 +
----
 +
 +
===SHUTTER instructions===
 +
====shutter group link list ====
 +
 +
: ''This instruction will display a list of all shutters. For every shutter, a Y (YES) or N (NO) indicates if this shutter is linked to each of the 16 shutter groups''
 +
 +
:;Returns
 +
::shutter group link list
 +
::<code>OK</code> 
 +
 +
----
 +
 +
====shutter list ====
 +
 +
: ''This instruction will display a list of all shutters with their lock status, output up & down linked, if the shutter is moving as well as the programmed timer setting for up and down ''
 +
 +
:;Returns
 +
::shutter list
 +
::<code>OK</code> 
 +
 +
----
 +
 +
====shutter name read [shutter nr]====
 +
 +
:''Read the name of ashutter''
 +
 +
:;[input nr]
 +
::Indicates which shutter (0-31) the name has to be displayed.
 +
 +
:;Returns
 +
::<code>Shutter Name</code>
 +
::<code>OK</code>
 +
 +
Example:
 +
 +
:;Instruction:
 +
::<code>shutter name read 15</code>
 +
 +
:;Returns
 +
::<code>Bedroom Parents</code>
 +
::<code>OK</code>
 +
 +
----
 +
 +
====shutter name write [shutter nr][shutter name]====
 +
 +
:''Write the name of a shutter, max 16 characters.''
 +
 +
:;[shutter nr]
 +
::Indicates which shutter (0-31) the name has to be written.
 +
 +
:;[shutter name]
 +
::the ascii name of the shutter (maximum 16 characters).
 +
 +
:;Returns
 +
::<code>OK</code>
 +
 +
Example:
 +
 +
:;Instruction:
 +
::<code>shutter name write 15 Bedroom parents</code>
 +
 +
:;Returns
 +
::<code>OK</code>
  
 
----
 
----

Revision as of 17:00, 27 March 2022

Information about the All In One (AIO) can be found in AIO General Information.

The Gateway has 2 computer systems built-in: A Master Controller (Microchip DSPIC33) and a Gateway Controller (Linux Based Beagle Bone). The Master controller is connected with the Gateway Controller over RS232. The Master Controller has a built-in CLI interface allowing the user to configure and control the Master controller to his full extend.

This CLI can be accessed by using the Maintenance function in the OpenMotics cloud or by using a RS232 TTL cable (Baud rate 115200, 8 databits, no parity, 1 stop bit, no flow control) that is connected directly on the Gateway on the extern RS232 connector.

Possible modes of communication:

  • Advanced Mode: API (The Master controller and Gateway controller will use Advanced mode to communicate)
  • Simple Mode: CLI (Simple Mode will be used by Maintenance mode in the cloud or when a direct RS232 connection is established)

The advantages of the AIO (All In One) design is that API and CLI mode can be used simultaneously (on 2 different UART ports).

Contents

Notes

  1. In CLI mode, characters sent through RS232 can be echoed. In API mode they are never echoed.
  2. Instructions are case sensitive.
  3. As opposed to API mode, CLI mode has a variable instruction length.
  4. Every instruction must be followed by a Carriage return (<CR>, DEC 13).
  5. Every successful instruction will return the requested information (or perform requested action) followed by OK, otherwise ERROR is returned (wrong format, wrong parameters,…). All error codes are listed in the Error Codes AIO section.
  6. An instruction will only be executed if the Master has responded with “OK”

For the Release Notes of the AIO, please see AIO Release Notes.

Notation

Instruction [required parameter] {optional parameter}

Instruction description.

[param]
Parameter description


Returns
[return value]

Versioning

This document describes the available CLI commands available on the All In One CLI interface. The All In One module is not yet available and not yet in production so please use CLI Reference Guide used in the current gateway.

Gateway Module FW version
NOT IN PRODUCTION V0.03

Instruction Set

General instructions

change debug off

This instruction will disable the debug function for changes. When the debug function is activate, every time a sensor value changes (but could also be output or validation bit etc), the changed device number (like sensor) and the new value will be printed.
Returns
OK

Example: Deactivate change debug mode

Instruction
change debug off
Returns
OK

change debug on

This instruction will enable the debug function for changes. When the debug function is activate, every time a sensor value changes (but could also be output or validation bit etc), the changed device number (like sensor) and the new value will be printed.
Returns
OK

Example: Activate change debug mode

Instruction
change debug on
Returns
OK

error list

el

This instruction will list all configured modules, their ID's, the number off errors on this module and the status of each module (Good, Degraded1, Degraded2, Degraded3, Offline, Forced Offline)
Returns
--- Total Uptime: 000334 Hours, Last Startup: 20:23:50 07/12/20   ---
--- Module Type: BRAIN, RS485 mode: 0, Board: 26'C  --.--V --.--A ---
--- PWR RS485/CAN/12V: 1/1/1, CANTERM: 1, BB debug: 0, Fw: 1.0.70 ---
-------Output------------ID---------Err-------Status-------
 00 (l I 000->007) 108.000.000.000 00000   GOOD       (000)
 01 (O E 008->015) 079.222.189.122 00000   GOOD       (000)
 02 (D E 016->023) 068.072.145.035 00000   GOOD       (000)
-------Input-------------ID---------Err-------Status-------
 00 (i I 000->007) 105.000.000.000 00000   GOOD       (000)
 01 (b C 008->015) 098.000.000.001 00000   GOOD       (000)
 02 (b C 016->023) 098.000.000.002 00000   GOOD       (000)
 03 (b C 024->031) 098.000.000.003 00000   GOOD       (000)
 04 (I E 032->039) 073.195.134.013 00000   GOOD       (144)
-------Sensor------------ID---------Err-------Status-------
 00 (s C 000->007) 115.000.000.000 00000   GOOD       (000)
 01 (T E 008->015) 084.001.003.007 00000   GOOD       (080)
-------CAN Control-------ID---------Err-------Status-------
 00 (C E 000->000) 067.131.006.013 00000   GOOD       (016)
-------Micro CAN---------ID---------Err-------Status-------
 00 (m C 000->000) 000.100.154.092 00215   DEGRADED 2 (000)
 01 (m C 001->001) 100.030.245.232 00000   GOOD       (000)
 02 (m C 006->006) 100.232.121.136 00000   GOOD       (000)
OK
Below, you can find a short explanation what the different items mean:
  • First parenthesis first character: module type1 ('O'->RS485 module, 'D'->RS485 dim (0-10V) module, 'l'->Brain(+) internal open collector output, 'i'->Input module, 'o'->output module, 'b'->Micro Can virtual input module, 's'-> Can virtual sensor module, 'T'->RS485 temperature module, 'R'->RS485 output module fully configured as Roller/Shutter module, 'm'->Micro Can module)
  • First parenthesis second character: module type2 ('I'-> Internal inputs/outputs of the Brain(+), 'E'->External RS485 module, 'C'->Linked to External Micro CAN module, 'V'->Virtual module)
  • First parenthesis 000->007: indicate from for example which input nr is the first and last input of that module
  • ID: this is the unique ID of this module
  • Err: Number of errors for each of the modules. CLI instruction "error clear" can be used to reset all errors
  • Status: 4 status possibilities (GOOD, DEGRADED 1, DEGRADED 2, DEGRADED 3, OFFLINE)
  • Second parenthesis: indicates the type of scanning the module will have.
  • BB debug: When 1, debug mode is ON and all BA's that are executed will also be forwarded to the BB over UART API
In the list, you'll also see the health status of the connected Micro CAN's (directly via the internal CAN bus of the Brain(+) or externally via the CAN Control). Each Micro CAN has 3 bytes as an address and as you can see in the above example, you see 4 Bytes:
  • The first byte of the 4 bytes address of the Micro CAN in the above list is the Bus number:
    • 100: Internal CAN Bus
    • 000: CAN bus of the first CAN Control
    • 001: CAN bus of the second CAN Control
    • 002: CAN bus of the third CAN Control
    • ...

error clear

This instruction will delete all the errors and will start communicating again with the RS485 modules at the normal pace
Returns
OK

Example:

Instruction
error clear
Returns
OK

firmware version

This instruction will display the firmware of the Master and all connected slaves. The firmware version of slaves is requested directly via the RS485 bus in other words, when a slave is not online, the firmware version will not be displayed

Example:

Instruction
firmware version
Returns
--- Fw version Brain(+): V1.0.68 ---
Output:
 00 (l I) 108.000.000.000 -> Internal/Virtual
 01 (O E) 079.222.189.122 -> V6.0.7
 02 (D E) 068.072.145.035 -> V6.0.7
Input:
 00 (i I) 105.000.000.000 -> Internal/Virtual
 01 (b C) 098.000.000.001 -> Internal/Virtual
 02 (b C) 098.000.000.002 -> Internal/Virtual
 03 (I E) 073.195.134.013 -> V6.0.12
Sensor:
 00 (s C) 115.000.000.000 -> Internal/Virtual
 01 (s C) 115.000.000.001 -> Internal/Virtual
 02 (T E) 084.001.003.007 -> V6.0.6
Can:
 00 (C E) 067.131.006.013 -> V6.0.27
OK


health debug off

This instruction will disable the CLI console debug function for health related matters. When for example a sensor is not responding for 2 minutes, a debug message will appear when this debug function is enabled
Returns
OK

health debug on

This instruction will enable the CLI console debug function for health related matters. When for example a sensor is not responding for 2 minutes, a debug message will appear when this debug function is enabled
Returns
OK

logging list [number of lines*]

* is an optional value, if the optional value is not used, the system will print the last 32 lines of the FRAM logging
This instruction will print the FRAM logging. Events, Errors and BA's can be logged depending on the settings in Eeprom, see Memory Model Page0/Byte13
Returns
logging list
0000(P056/B048): 21/04/19 17:22:11 BA 001 000 000 027 000 000 000 000
0001(P056/B032): 21/04/19 17:22:11 BA 000 016 000 010 000 000 000 000
0002(P056/B016): 21/04/19 17:22:11 BA 001 001 000 027 000 000 000 000
0003(P056/B000): 21/04/19 17:22:10 BA 001 000 000 027 000 000 000 000
0004(P055/B240): 21/04/19 17:22:10 BA 000 016 000 010 000 000 000 000
0005(P055/B224): 21/04/19 17:22:10 BA 001 001 000 027 000 000 000 000
0006(P055/B208): 21/04/19 17:22:10 BA 001 000 000 027 000 000 000 000
0007(P055/B192): 21/04/19 17:22:10 BA 000 016 000 010 000 000 000 000
0008(P055/B176): 21/04/19 17:22:10 BA 001 001 000 027 000 000 000 000
0009(P055/B160): 21/04/19 17:22:10 BA 001 000 000 027 000 000 000 000
0010(P055/B144): 21/04/19 17:22:09 BA 000 016 000 010 000 000 000 000
0011(P055/B128): 21/04/19 17:22:09 BA 001 001 000 027 000 000 000 000
0012(P055/B112): 21/04/19 17:22:08 BA 001 000 000 027 000 000 000 000
0013(P055/B096): 21/04/19 17:22:08 BA 000 016 000 010 000 000 000 000
0014(P055/B080): 21/04/19 17:22:08 BA 001 001 000 027 000 000 000 000
0015(P055/B064): 21/04/19 17:22:07 BA 001 000 000 027 000 000 000 000
0016(P055/B048): 21/04/19 17:22:07 BA 000 016 000 010 000 000 000 000
0017(P055/B032): 21/04/19 17:22:07 BA 001 001 000 027 000 000 000 000
0018(P055/B016): 21/04/19 17:21:49 BA 001 000 000 027 000 000 000 000
0019(P055/B000): 21/04/19 17:21:49 BA 001 001 000 027 000 000 000 000
0020(P054/B240): 21/04/19 17:21:31 BA 000 000 000 010 000 000 000 000
0021(P054/B224): 21/04/19 17:21:22 BA 000 001 000 011 000 000 000 000
0022(P054/B208): 21/04/19 17:21:15 BA 000 001 000 010 000 000 000 000
0023(P054/B192): 21/04/19 17:20:22 BA 000 255 000 255 000 000 000 000
0024(P054/B176): 21/04/19 17:17:05 EV 254 003 000 000 002 004 000 000
0025(P054/B160): 21/04/19 17:16:11 EV 254 002 000 000 000 000 000 000
0026(P054/B144): 21/04/19 16:35:16 ER 005 001 000 004 000 000 000 000
0027(P054/B128): 21/04/19 16:24:07 ER 005 001 000 004 000 000 000 000
0028(P054/B112): 21/04/19 14:40:59 ER 005 001 000 004 000 000 000 000
0029(P054/B096): 21/04/19 13:57:05 ER 005 001 000 004 000 000 000 000
0030(P054/B080): 21/04/19 13:53:07 ER 006 001 011 083 011 083 000 000
0031(P054/B064): 21/04/19 12:48:39 ER 006 001 011 083 011 083 000 000
OK



pid debug off

This instruction will disable the CLI console debug function for PID related matters (only used in combination with HVAC module).
Returns
OK

pid debug on

This instruction will enable the CLI console debug function for PID related matters (only used in combination with HVAC module).
Returns
OK

To enable debugging, use following instruction:

pid debug on

When a PID filter is enabled (when disabled, nothing will be displayed) on 1 of the connected HVAC modules, following will appear on the console (example):

17:51:15 084.075.215.000 pid:0 En:1(H) sensor:19.0(3) setpt:22.5 Err:7 P:49 I:0 D:0 Drive=49 Out=49(0)

Explanation:

  • 17:51:15 -> Time
  • 084.075.215.000 -> ID of the HVAC module (important when more then 1 HVAC module is connected)
  • pid:0 -> PID 0 of the HVAC module is used
  • En:1(H) -> Module is enabled (=1) and PÏD filter is in Heating(H) mode. Cooling(C) is also possible
  • sensor:19:0(3) -> Sensor is measuring 19.0 degree celsius en Sensor (3) of this HVAC module is used for this PID filter
  • sept:22.5 -> The thermostat setpoint is now set at 22.5 degree Celsius
  • Err: 7 -> The calculated PID error is 7
  • P:49 -> The calculated P result is 49
  • I:0 -> The calculated I result is 0
  • D:0 -> The calculated D result is 0
  • Drive=49 -> The calculated PID drive (P+I+D) is 49
  • Out=49(0) -> Analog output (0) will be driven with value 49 (0-255)

When the display rate of the debug information is not high enough, the sampling frequency of the HVAC module can be increased by using eeprom memory location 0/4. For example, increase the speed to display every 8 seconds the PID information:

eeprom write 0 4 10

register list

This instruction will list all processor registers and the present values. This is for debug purposes
Returns
---Register Values---
 00 00000 00000 00000 00087 00064 00658 16385 00128 00514 00000 00000 00000
 01 00003 00000 00000 00000 00000 00000 32776 32776 32776 32776 01296 01040
 02 01040 01296 00131 00272 15376 00960 08252 00000 00195 26115 13088 12290
 03 00390 00129 00129 00129 16400 00000 00004 00000 00064 00000 00000 00000
 04 00064 00000 00000 00000 00000 06280 49154 00008 00004 00000 00780 00000
 05 00000 00000 05188 05188 25668 01089 17476 17476 17476 04676 17476 17476
 06 17476 16452 17476 17476 17476 01028 17472 16448 00064 05952 16384 17429
 07 17408 17476 17408 17472 17472 01092 00271 32768 32768 00000 00000 00000
 08 00000 00000 00000 00000 36896 36896 00016 00016 00000 32768 00000 00000
 09 00046 00000 00010 00010 00000 00000 00000 00000 00006 00006
OK



reset

reset the CAN stack see https://wiki.openmotics.com/index.php/AIO_Release_Notes#Factory_Reset_of_a_full_installation_can_be_done_with_following_guideline
Returns
OK



state machine list

This instruction will list all main state machines with the last, the minimum and maximum execution time
Returns
 #----Last----Min-----Max------Description------------------
00 03 00004ms 00002ms 01402ms  UART1 receive
01 00 00000ms 00000ms 00000ms  UART2 receive
02 00 00000ms 00000ms 00000ms  UART3 receive
03 01 00000ms 00000ms 00000ms  UART4 receive
04 00 00061ms 00001ms 00238ms  I2C1
05 00 00002ms 00001ms 00052ms  I2C2
06 02 00205ms 00202ms 00258ms  Update Time/Date
07 00 00001ms 00001ms 00016ms  Immediate Queue
08 00 00002ms 00002ms 00006ms  Timer 100ms
09 00 00001ms 00001ms 00005ms  Timer 1 second
10 00 00005ms 00001ms 00005ms  Timer 1 minute
11 00 15444ms 15444ms 15444ms  Perform eeprom activate
12 01 00387ms 00116ms 00822ms  CLI print text
13 00 00000ms 00000ms 00000ms  CLI action execute
14 05 00001ms 00001ms 00016ms  Scan modules over RS485 network
15 00 00035ms 00001ms 00063ms  RS485 modules health status check
16 00 00001ms 00001ms 00003ms  Check Error, print, store in FRAM
17 00 00001ms 00001ms 00024ms  Check input queue and actions
18 00 00000ms 00000ms 00000ms  Check input delay queue and actions
19 00 01391ms 01391ms 01391ms  CLI print registers
20 00 00002ms 00002ms 00010ms  Check CAN1 RX queue
21 00 00013ms 00001ms 00069ms  Check CAN1 TX queue
22 00 00000ms 00000ms 00000ms  Check hardware health
23 00 00000ms 00000ms 00000ms  Check leds
24 00 00001ms 00001ms 00084ms  Check internal outputs
25 00 00002ms 00001ms 00009ms  Check internal inputs
26 00 00000ms 00000ms 00000ms  Execute Group Action
27 00 00002ms 00001ms 00004ms  Execute list of actions every minute



module discover start

This instruction will start the discovery mode of the RS485 Bus for the non-energy modules. When this instruction is executed, the normal function of the bus is stopped to be able to add new modules.
Returns
OK

Example:

Instruction
module discover start
Returns
OK

module discover stop

This instruction will stop the discovery mode of the RS485 Bus for the non-energy modules
Returns
OK

Example:

Instruction
module discover stop
Returns
OK

startup group read

A group Action can be defined that needs to be executed when the system starts. This instruction will read the group nr (0-254) that will be executed at startup.
Returns
group nr
OK

Example:

Instruction
startup group read
Returns
5
OK

startup group write [group nr]

A group Action can be defined that needs to be executed when the system starts. This instruction will write the group nr (0-254) that will be executed at startup.
[group nr]
Indicates which group nr that needs to be executed at startup.
Returns
OK

Example:

Instruction
startup group write 5
Returns
OK

queue list

This instruction will print on console the immediate buffer queue. This instruction can also be used to see what's been happening recently and see the instruction that have just been executed.
Returns
Full list of the immediate queue including values of all pointers used
OK

Example:

Instruction
queue list
Returns
Queue list
OK

Time & Date instructions

days group follow read

A group Action can be defined that needs to be executed when the date (day) changes. This instruction will read the group nr (0-254) that will be executed at day change.
Returns
group nr
OK

Example:

Instruction
days group follow read
Returns
5
OK

days group follow write [group nr]

A group Action can be defined that needs to be executed when the date (day) changes. This instruction will write the group nr (0-254) that will be executed at day change.
[group nr]
Indicates which group nr that needs to be executed at day change.
Returns
OK

Example:

Instruction
days group follow write 6
Returns
OK


hours group follow read

A group Action can be defined that needs to be executed when the time (hour) changes. This instruction will read the group nr (0-254) that will be executed at hour change.
Returns
group nr
OK

Example:

Instruction
hours group follow read
Returns
5
OK

hours group follow write [group nr]

A group Action can be defined that needs to be executed when the time (hour) changes. This instruction will write the group nr (0-254) that will be executed at hour change.
[group nr]
Indicates which group nr that needs to be executed at hour change.
Returns
OK

Example:

Instruction
hours group follow write 6
Returns
OK

minutes group follow read

A group Action can be defined that needs to be executed when the time (minutes) changes. This instruction will read the group nr (0-254) that will be executed at minute change.
Returns
group nr
OK

Example:

Instruction
minutes group follow read
Returns
5
OK

minutes group follow write [group nr]

A group Action can be defined that needs to be executed when the time (minutes) changes. This instruction will write the group nr (0-254) that will be executed at minute change.
[group nr]
Indicates which group nr that needs to be executed at minute change.
Returns
OK

Example:

Instruction
minutes group follow write 6
Returns
OK

time read

This instruction will read the time of the internal Real Time Clock.
Returns
The time
OK

Example:

Instruction
time read
Returns
20:13:19
OK

time write [hours][minutes][seconds]

This instruction will write the time in the Real Time Chip
[hours]
Value 0 to 23
[minutes]
Value 0 to 59
[seconds]
Value 0 to 99
Returns
OK

Example:

Instruction
time write 19 25 57
Returns
OK

date read

This instruction will read the date of the internal Real Time Clock.
Returns
The date
OK

Example:

Instruction
date read
Returns
2 25-12-18
OK

date write [day of the week][day][month][year]

This instruction will write the date in the Real Time Chip
[day of the week]
Value 1 to 7 represents Monday to Sunday.
[day]
Value 1 to 31, day of the month.
[month]
Value 1 to 12
[year]
Value 0 to 99
Returns
OK

Example:

Instruction
date write 2 25 12 18
Returns
OK

Basic Action instructions

basic action debug off

This instruction will disable the debug function for Basic Actions. When the debug function is activate, every time a Basic Action is executed, the Basic Action Number and Basic Action explanation will be printed on the console.
Returns
OK

Example: Deactivate Basic Action debug mode

Instruction
basic action debug off
Returns
OK

basic action debug on

This instruction will enable the debug function for Basic Actions. When the debug function is activate, every time a Basic Action is executed, the Basic Action Number and Basic Action explanation will be printed on the console.
Returns
OK

Example: Activate Basic Action debug mode

Instruction
basic action debug on
Returns
OK

basic action activate [Type] [Action] [Device Nr] [Extra parameter]

This instruction will execute a Basic Action. For a full list of basic actions, see Action Types AIO
[Type]
This is the Type of a Basic Action, see [Action Types AIO]].
[Action]
This is the Action of a Basic Action, see [Action Types AIO]].
[Device Nr]
This is the Device Nr of a Basic Action, see [Action Types AIO]].
[Extra Parameter]
This is the Extra Parameter of a Basic Action, see [Action Types AIO]].
Returns
OK

Example: Toggle output 12

Instruction
basic action activate 0 16 12 0
Returns
OK

basic action activate [Type] [Action] [Device Nr.MSB] [Device Nr.LSB] [Extra parameter.MSB] [Extra parameter.LSB]

This instruction will execute a Basic Action. Since Device Nr and Extra Parameter contains word value, it's sometime needed for ease of use to be able to use the MSB (Most Significant Byte) and LSB (Least Significant Byte) values. For a full list of basic actions, see Action Types AIO
[Type]
This is the Type of a Basic Action, see [Action Types AIO]].
[Action]
This is the Action of a Basic Action, see [Action Types AIO]].
[Device Nr.MSB]
This is the MSB Device Nr of a Basic Action, see [Action Types AIO]].
[Device Nr.LSB]
This is the LSB Device Nr of a Basic Action, see [Action Types AIO]].
[Extra Parameter.MSB]
This is the MSB Extra Parameter of a Basic Action, see [Action Types AIO]].
[Extra Parameter.LSB]
This is the LSB Extra Parameter of a Basic Action, see [Action Types AIO]].
Returns
OK

Example: Program in the uCAN (ID 26 88 120) for Sensor0 the sensor nr 15

Instruction
basic action activate 20 18 26 88 120 15
Returns
OK

Eeprom & Fram instructions

eeprom erase [start page][end page][security code]

This instruction will erase 1 or more pages of the eeprom. With the start and end page, you can indicate which pages must be erased
[start page]
Indicates the start page (0-511) of the pages that must be erased.
[end page]
Indicates the end page (0-511) of the pages that must be erased.
[security code]
Security code "28883" must be used to be able to activate the erase function
Returns
delete progress information
OK

Example: Delete eeprom page 256

Instruction
eeprom erase 256 256 28883
Returns
OK

Important: It's NOT possible to undo this instruction. Once the erase is executed, the data is erased and can't be retrieved anymore.


eeprom read [page][byte][Opt: Nr of byte]

This instruction will read 1 of more bytes from eeprom. Maximum 30 bytes can be read
[page]
This is the page (0-511) of the eeprom to be read.
[byte]
This is the byte nr to be read (or the start byte when more then 1 byte is requested)
[Opt
Nr of byte]
This optional parameter (2-30) can be added when more then 1 byte must be read
Returns
eeprom read bytes
OK

Example: Read from page 0 start at byte 2 the next 10 bytes

Instruction
eeprom read 0 2 20
Returns
0 2 -> 5 ( )
0 3 -> 1 ( )
0 4 -> 255 ( )
0 5 -> 13 ( )
0 6 -> 7 ( )
0 7 -> 4 ( )
0 8 -> 255 ( )
0 9 -> 255 ( )
0 10 -> 255 ( )
0 11 -> 255 ( )
0 12 -> 255 ( )
0 13 -> 255 ( )
0 14 -> 255 ( )
0 15 -> 255 ( )
0 16 -> 255 ( )
0 17 -> 255 ( )
0 18 -> 255 ( )
0 19 -> 255 ( )
0 20 -> 255 ( )
OK

eeprom read [Id0][Id1][Id2][location]

CLI instruction "eeprom read" also supports reading the eeprom of uCAN slave modules. This function requires uCAN Firmware Version 6.0.21 or higher. Instead of 2 or 3 arguments being used (for internal eeprom read), 4 arguments are used to read the eeprom of a uCAN.
eeprom read Id0 Id1 Id2 location
[Id0..Id2]
This is the 3 bytes ID (without CAN Bus number) of the uCAN
[location]
Indicates the eeprom memory read location (0-1023) of the uCAN
Returns
Read Byte
OK

Example: Read the value of eeprom location 29 of the uCAN with ID 91.59.166

el
--- Total Uptime: 000216 Hours, Last Startup: 08:02:09 02/09/21   ---
--- Module Type: BRAIN, RS485 mode: 0, Board: 27'C  --.--V --.--A ---
--- PWR RS485/CAN: 1/1, CANTERM: 1, BB Debug: 255, Fw: 1.0.109       ---
-------Output------------ID---------Err-------Status--------Pwr---
 00 (l I 000->007) 108.000.000.000 00000   GOOD       (000)  1
-------Input-------------ID---------Err-------Status--------Pwr---
 00 (i I 000->007) 105.000.000.000 00000   GOOD       (000)  1
 01 (b C 008->015) 098.000.000.001 00000   GOOD       (000)  1
 02 (b C 016->023) 098.000.000.002 00000   GOOD       (000)  1
 03 (b C 024->031) 098.000.000.003 00000   GOOD       (000)  1
 04 (b C 032->039) 098.000.000.004 00000   GOOD       (000)  1
-------Sensor------------ID---------Err-------Status--------Pwr---
 00 (s C 000->007) 115.000.000.000 00000   GOOD       (000)  1
-------Micro CAN---------ID---------Err-------Status--------Pwr---
 00 (m C 000->000) 100.069.253.220 00001   GOOD       (000)  1
 01 (m C 001->001) 100.052.078.228 00000   GOOD       (000)  1
 02 (m C 002->002) 100.135.225.126 00000   GOOD       (000)  1
 03 (m C 003->003) 100.091.059.166 00000   GOOD       (000)  1
OK
eeprom read 91 59 166 29
15
OK

eeprom read [Id0][Id1][Id2][Id3][location]

CLI instruction "eeprom read" also supports reading the internal processor eeprom of RS485 slave modules. Instead of 2 or 3 arguments being used (for internal eeprom read) or 4 arguments (reading uCAN), 5 arguments are used to read the eeprom of a RS485 slave module.
eeprom read Id0 Id1 Id2 Id3 location
[Id0..Id3]
This is the 4 bytes ID of the RS485 slave module
[location]
Indicates the eeprom memory read location (0-1023) of the RS485 slave
Returns
Location -> Read Byte
OK

Example: Read the value of eeprom location 2 of input module with ID 73.20.51.10

eeprom read 73 20 51 10 2
2 -> 20
OK

eeprom write [page][byte][data byte]

This instruction will write 1 byte in eeprom.
[page]
Indicates the eeprom page (0-511) where the byte will be written.
[byte]
Indicates the eeprom byte (0-255) where the byte will be written.
[data byte]
This is the byte that will be written
Returns
OK

Example: Write at page 10 byte 200 value 33

Instruction
eeprom write 10 200 33
Returns
OK

Note: Your full configuration is stored in eeprom. Programming bytes in eeprom can make your system non-functional so please be careful using this instruction unless you know what you're doing.


eeprom write [Id0][Id1][Id2][location][data_byte]

CLI instruction "eeprom write" also supports writing the eeprom of RS485 slave modules. Instead of 3 arguments used (for internal eeprom write), 5 arguments are used to write the eeprom of a uCAN.
eeprom write Id0 Id1 Id2 location data_byte
[Id0..Id2]
This is the 3 bytes ID (without CAN Bus number) of the uCAN
[location]
Indicates the eeprom memory location (0-1023) of the uCAN where the byte will be written.
[data byte]
This is the byte (0-255) that will be written in the eeprom of the uCAN
Returns
Written Byte
OK

Example: Write a value (20) in eeprom location 29 of the eeprom of the uCAN with ID 91.59.166

el
--- Total Uptime: 000216 Hours, Last Startup: 08:02:09 02/09/21   ---
--- Module Type: BRAIN, RS485 mode: 0, Board: 27'C  --.--V --.--A ---
--- PWR RS485/CAN: 1/1, CANTERM: 1, BB Debug: 255, Fw: 1.0.109       ---
-------Output------------ID---------Err-------Status--------Pwr---
 00 (l I 000->007) 108.000.000.000 00000   GOOD       (000)  1
-------Input-------------ID---------Err-------Status--------Pwr---
 00 (i I 000->007) 105.000.000.000 00000   GOOD       (000)  1
 01 (b C 008->015) 098.000.000.001 00000   GOOD       (000)  1
 02 (b C 016->023) 098.000.000.002 00000   GOOD       (000)  1
 03 (b C 024->031) 098.000.000.003 00000   GOOD       (000)  1
 04 (b C 032->039) 098.000.000.004 00000   GOOD       (000)  1
-------Sensor------------ID---------Err-------Status--------Pwr---
 00 (s C 000->007) 115.000.000.000 00000   GOOD       (000)  1
-------Micro CAN---------ID---------Err-------Status--------Pwr---
 00 (m C 000->000) 100.069.253.220 00001   GOOD       (000)  1
 01 (m C 001->001) 100.052.078.228 00000   GOOD       (000)  1
 02 (m C 002->002) 100.135.225.126 00000   GOOD       (000)  1
 03 (m C 003->003) 100.091.059.166 00000   GOOD       (000)  1
OK
eeprom write 91 59 166 29 20
20
OK
eeprom read 91 59 166 29
20
OK

eeprom write [Id0][Id1][Id2][Id3][location][data_byte]

CLI instruction "eeprom write" also supports writing the eeprom of RS485 slave modules. Instead of 3 arguments used (for internal eeprom write) or 5 arguments are used to write the eeprom of a uCAN, this instruction uses 6 arguments to write the eeprom of a RS485 slave module.
eeprom write Id0 Id1 Id2 Id3 location data_byte
[Id0..Id3]
This is the 4 bytes ID of the RS485 slave module
[location]
Indicates the eeprom memory location (0-1023) of the RS485 slave module where the byte will be written.
[data byte]
This is the byte (0-255) that will be written in the eeprom of the RS485 slave module
Returns
Written Byte
OK

Example: Write a value (20) in eeprom location 29 of the eeprom of the input module with ID 73.10.22.58

eeprom write 73 10 22 58 29 20
20 (29)
OK
eeprom read 73 10 22 58 29
20 (29)
OK

eeprom search [start page][stop page][data byte0][Opt: data byte1][Opt: data byte2][Opt: data byte3][Opt: data byte4][Opt: data byte5]

This instruction will read search for data bytes in eeprom. The data bytes will indicate which bytes are being searched. The start and end page defines in which pages of the eeprom the search instruction has to be performed. The eeprom has 512 pages (0-511), each page contains 256 bytes of data. You can select 1 or more (up to 6) data bytes to be searched.
[start page]
This is the start page (0-511) of the eeprom where the search will start.
[stop page]
This is the stop page (0-511) of the eeprom where the search will stop.
[data byte0..5]
This is the data byte that will be searched in eeprom
Returns
eeprom search result
OK

Example: (search page 0 to 10 in eeprom to find the location where 7 or 13 is written)

Instruction
eeprom search 0 10 7 13
Returns
0 5 -> 13
0 6 -> 7
OK

As you can see, on page 0 Byte 5 and 6, the system did found results.


fram erase [start page][end page][security code]

This instruction will erase 1 or more pages of the FRAM. With the start and end page, you can indicate which pages must be erased
[start page]
Indicates the start page (0-127) of the pages that must be erased.
[end page]
Indicates the end page (0-127) of the pages that must be erased.
[security code]
Security code "28883" must be used to be able to activate the erase function
Returns
delete progress information
OK

Example: Delete fram page 30 till 35 (including 35)

Instruction
fram erase 30 35 28883
Returns
OK

Important: It's NOT possible to undo this instruction. Once the erase is executed, the data is erased and can't be retrieved anymore.


fram read [page][byte][Opt: Nr of byte]

This instruction will read 1 of more bytes from FRAM. Maximum 30 bytes can be read
[page]
This is the page (0-127) of the FRAM to be read.
[byte]
This is the byte nr to be read (or the start byte when more then 1 byte is requested)
[Opt
Nr of byte]
This optional parameter (2-30) can be added when more then 1 byte must be read
Returns
Fram read bytes
OK

Example: Read from page 0 start at byte 2 the next 10 bytes

Instruction
fram read 0 2 20
Returns
0 2 -> 5 ( )
0 3 -> 1 ( )
0 4 -> 255 ( )
0 5 -> 13 ( )
0 6 -> 7 ( )
0 7 -> 4 ( )
0 8 -> 255 ( )
0 9 -> 255 ( )
0 10 -> 255 ( )
0 11 -> 255 ( )
0 12 -> 255 ( )
0 13 -> 255 ( )
0 14 -> 255 ( )
0 15 -> 255 ( )
0 16 -> 255 ( )
0 17 -> 255 ( )
0 18 -> 255 ( )
0 19 -> 255 ( )
0 20 -> 255 ( )
OK

fram write [page][byte][data byte]

This instruction will write 1 byte in FRAM.
[page]
Indicates the FRAM page (1-127) where the byte will be written.
[byte]
Indicates the FRAM byte (0-255) where the byte will be written.
[data byte]
This is the byte that will be written
Returns
OK

Example: Write at page 10 byte 200 value 33

Instruction
fram write 10 200 33
Returns
OK

Note: Please note that page 0 is protected and can't be written by the user.


Input instructions

add virtual input module [id1] [id2] [id3]

This instruction will add a virtual input module (id0="i") with id1, id2 and id3. When using this instruction, please make sure that the combination id1, id2 and id3 for the input list is unique and not yet used.
Example:
el
--- Total Uptime: 000259 Hours, Last Startup: 16:26:54 24/10/21   ---
--- Module Type: BRAIN, RS485 mode: 0, Board: 27'C  --.--V --.--A ---
--- PWR RS485/CAN: 1/1, CANTERM: 1, BB Debug: 255, Fw: 1.0.113       ---
-------Output------------ID---------Err-------Status--------Pwr---
 00 (l I 000->007) 108.000.000.000 00000   GOOD       (000)  1
-------Input-------------ID---------Err-------Status--------Pwr---
 00 (i I 000->007) 105.000.000.000 00000   GOOD       (000)  1
 01 (b C 008->015) 098.000.000.001 00000   GOOD       (000)  1
-------Sensor------------ID---------Err-------Status--------Pwr---
 00 (s C 000->007) 115.000.000.000 00000   GOOD       (000)  1
-------CAN Control-------ID---------Err-------Status--------Pwr---
 00 (C E 000->000) 067.001.230.000 00000   GOOD       (016)  1
-------Micro CAN---------ID---------Err-------Status--------Pwr---
 00 (m C 000->000) 000.248.090.233 00000   GOOD       (000)  1
OK
add virtual input module 0 0 2
OK
el
--- Total Uptime: 000259 Hours, Last Startup: 16:26:54 24/10/21   ---
--- Module Type: BRAIN, RS485 mode: 0, Board: 27'C  --.--V --.--A ---
--- PWR RS485/CAN: 1/1, CANTERM: 1, BB Debug: 255, Fw: 1.0.113       ---
-------Output------------ID---------Err-------Status--------Pwr---
 00 (l I 000->007) 108.000.000.000 00000   GOOD       (000)  1
-------Input-------------ID---------Err-------Status--------Pwr---
 00 (i I 000->007) 105.000.000.000 00000   GOOD       (000)  1
 01 (b C 008->015) 098.000.000.001 00000   GOOD       (000)  1
 02 (i V 016->023) 105.000.000.002 00000   GOOD       (000)  0
-------Sensor------------ID---------Err-------Status--------Pwr---
 00 (s C 000->007) 115.000.000.000 00000   GOOD       (000)  1
-------CAN Control-------ID---------Err-------Status--------Pwr---
 00 (C E 000->000) 067.001.230.000 00000   GOOD       (016)  1
-------Micro CAN---------ID---------Err-------Status--------Pwr---
 00 (m C 000->000) 000.248.090.233 00000   GOOD       (000)  1
OK

input action read [input nr]

This instruction will read the BA's that are linked to an input
Following input actions with associated BA can be linked to an input:
  • Action 0: Press Action
  • Action 1: Release Action
  • Action 2: 1 Sec Press
  • Action 3: 2 Sec Press
  • Action 4: Double Press
Returns
----------------Act--Inp-Cnf-Typ-Act---x--(MSB.LSB)---y--(MSB.LSB)-------BA Description----
0- PRESS : Yes 001 0 255 255 65535(255.255) 65535(255.255) -> Instruction not in use
1- RELEASE : Yes 001 1 255 255 65535(255.255) 65535(255.255) -> Instruction not in use
2- 1SEC PRESS : No 001 2 255 255 65535(255.255) 65535(255.255) -> Instruction not in use
3- 2SEC PRESS : No 001 3 255 255 65535(255.255) 65535(255.255) -> Instruction not in use
4-DOUBLE PRESS: No 001 4 255 255 65535(255.255) 65535(255.255) -> Instruction not in use
OK

input action write [input nr] [input action] [BA Type] [BA Action] [BA Device Nr] [BA Extra parameter]

This instruction will program for an input and for a certain input action the associated BA
Input Nr: This is the input number to be programmed
Input action: Following input actions can be used
  • 0: Press Action
  • 1: Release Action
  • 2: 1 Sec Press
  • 3: 2 Sec Press
  • 4: Double Press
BA type, BA action, BA device etc: This is the BA to be executed when an input action occurs, see Action Types AIO
Returns
OK

input action write [input nr] [input action] [BA Type] [BA Action] [BA Device Nr.MSB] [BA Device Nr.LSB] [BA Extra parameter.MSB] [BA Extra parameter.LSB]

This instruction will program for an input and for a certain input action the associated BA. This instruction is equal then the above instruction excepts that BA Device Nr and BA Extra Parameter are split in a MSB byte and a LSB byte
Input Nr: This is the input number to be programmed
Input action: Following input actions can be used
  • 0: Press Action
  • 1: Release Action
  • 2: 1 Sec Press
  • 3: 2 Sec Press
  • 4: Double Press
BA type, BA action, BA device etc: This is the BA to be executed when an input action occurs, see Action Types AIO
Returns
OK

input debug off

This instruction will disable the CLI console debug function for inputs. When an input is pressed or released, a debug message will appear when this debug function is enabled
Returns
OK

input debug on

This instruction will enable the CLI console debug function for inputs. When an input is pressed or released, a debug message will appear when this debug function is enabled
Returns
OK

input link read [input nr]

This instruction will read, for an input, which output or action is linked to it.
[input nr]
Indicates which input (0-631) that the link has to be read.
Returns
output nr or link
OK

Example:

Instruction
input link read 15
Returns
12
OK

input link write [input nr][output link nr]

This instruction will write, for an input (0-479), which output (0-479) or action is linked to it.
[input nr]
Indicates which input that the link has to be written.
Returns
OK

Example: Link input 15 with output 12

Instruction
input link write 15 12
Returns
OK

To unconfigure an input from an output:

input link read 32
Input 32 is linked to Output 14
OK
input link write 32 65535
OK
input link read 32
Input 32 has no Output nor any action(s) linked
OK

input list

This instruction will display the list of inputs, the status (0-> release state, 1-> press state), the link (is an action configured or an output linked) and the name of each input
Returns
The input list

input release [input nr]

Switch input to release state for virtual modules.
[input nr]
Indicates which input that needs to be put in release state, a maximum of 632 (0 - 631) inputs can be used.
Returns
OK

Example:

Instruction
input release 28
Returns
OK

input press [input nr]

Switch input to press state for virtual modules.
[input nr]
Indicates which input that needs to be put in press state, a maximum of 632 (0 - 631) inputs can be used.
Returns
OK

Example:

Instruction
input press 28
Returns
OK

input name write [input nr][input name]

Write the name of an input, max 16 characters.
[input nr]
Indicates which input (0-631) the name has to be written.
[input name]
the ascii name of the input (maximum 16 characters).
Returns
OK

Example:

Instruction
input name write 28 Bedroom parents
Returns
OK

input name read [input nr]

Read the name of an input
[input nr]
Indicates which input (0-631) the name has to be displayed.
Returns
Input Name
OK

Example:

Instruction
input name read 28
Returns
Bedroom Parents
OK

pulse counter read [input nr]

Read the pulse counter number of an input
[input nr]
Indicates which input (0-631) the pulse counter number has to be displayed.
Returns
pulse counter number
OK

Example:

Instruction
pulse counter read 3
Returns
2546678
OK

input number modules read

Read the number of input modules that are programmed and active
Returns
Number Of Input Modules
OK

Example:

Instruction
input number modules read
Returns
6
OK

input number modules write [number of input modules]

Writes the number of input modules that are programmed and active. This instruction will, after the write is performed, activate the instruction eeprom activate so all values from eeprom are read and copied in RAM
[number of input modules]
Indicates the number of input modules that are active and programmed.
Returns
OK

Example:

Instruction
input number modules write 7
Returns
OK

Output instructions

add virtual dimmer module [id1] [id2] [id3]

This instruction will add a virtual dimmer module (id0="d") with id1, id2 and id3. When using this instruction, please make sure that the combination id1, id2 and id3 for the output list is unique and not yet used.
Important Note: id1..id3 0.0.0, 0.0.1, 0.0.2 and 0.0.3 are reserved for internal use and cannot be used.
Example:
el
--- Total Uptime: 000259 Hours, Last Startup: 16:26:54 24/10/21   ---
--- Module Type: BRAIN, RS485 mode: 0, Board: 27'C  --.--V --.--A ---
--- PWR RS485/CAN: 1/1, CANTERM: 1, BB Debug: 255, Fw: 1.0.113       ---
-------Output------------ID---------Err-------Status--------Pwr---
 00 (l I 000->007) 108.000.000.000 00000   GOOD       (000)  1
-------Input-------------ID---------Err-------Status--------Pwr---
 00 (i I 000->007) 105.000.000.000 00000   GOOD       (000)  1
 01 (b C 008->015) 098.000.000.001 00000   GOOD       (000)  1
 02 (i V 016->023) 105.000.000.002 00000   GOOD       (000)  0
-------Sensor------------ID---------Err-------Status--------Pwr---
 00 (s C 000->007) 115.000.000.000 00000   GOOD       (000)  1
 01 (s C 008->015) 115.000.000.001 00000   GOOD       (000)  1
-------CAN Control-------ID---------Err-------Status--------Pwr---
 00 (C E 000->000) 067.001.230.000 00000   GOOD       (016)  1
-------Micro CAN---------ID---------Err-------Status--------Pwr---
 00 (m C 000->000) 000.248.090.233 00000   GOOD       (000)  1
OK
add virtual dimmer module 0 0 4
OK
el
--- Total Uptime: 000259 Hours, Last Startup: 16:26:54 24/10/21   ---
--- Module Type: BRAIN, RS485 mode: 0, Board: 27'C  --.--V --.--A ---
--- PWR RS485/CAN: 1/1, CANTERM: 1, BB Debug: 255, Fw: 1.0.113       ---
-------Output------------ID---------Err-------Status--------Pwr---
 00 (l I 000->007) 108.000.000.000 00000   GOOD       (000)  1
 01 (d V 008->015) 100.000.000.004 00000   GOOD       (000)  1
-------Input-------------ID---------Err-------Status--------Pwr---
 00 (i I 000->007) 105.000.000.000 00000   GOOD       (000)  1
 01 (b C 008->015) 098.000.000.001 00000   GOOD       (000)  1
 02 (i V 016->023) 105.000.000.002 00000   GOOD       (000)  0
-------Sensor------------ID---------Err-------Status--------Pwr---
 00 (s C 000->007) 115.000.000.000 00000   GOOD       (000)  1
 01 (s C 008->015) 115.000.000.001 00000   GOOD       (000)  1
-------CAN Control-------ID---------Err-------Status--------Pwr---
 00 (C E 000->000) 067.001.230.000 00000   GOOD       (016)  1
-------Micro CAN---------ID---------Err-------Status--------Pwr---
 00 (m C 000->000) 000.248.090.233 00000   GOOD       (000)  1
OK

add virtual output module [id1] [id2] [id3]

This instruction will add a virtual dimmer module (id0="o") with id1, id2 and id3. When using this instruction, please make sure that the combination id1, id2 and id3 for the output list is unique and not yet used.
Important Note: id1..id3 0.0.0, 0.0.1, 0.0.2 and 0.0.3 are reserved for internal use and cannot be used.
Example:
el
--- Total Uptime: 000259 Hours, Last Startup: 16:26:54 24/10/21   ---
--- Module Type: BRAIN, RS485 mode: 0, Board: 27'C  --.--V --.--A ---
--- PWR RS485/CAN: 1/1, CANTERM: 1, BB Debug: 255, Fw: 1.0.113       ---
-------Output------------ID---------Err-------Status--------Pwr---
 00 (l I 000->007) 108.000.000.000 00000   GOOD       (000)  1
 01 (d V 008->015) 100.000.000.004 00000   GOOD       (000)  1
-------Input-------------ID---------Err-------Status--------Pwr---
 00 (i I 000->007) 105.000.000.000 00000   GOOD       (000)  1
 01 (b C 008->015) 098.000.000.001 00000   GOOD       (000)  1
 02 (i V 016->023) 105.000.000.002 00000   GOOD       (000)  0
-------Sensor------------ID---------Err-------Status--------Pwr---
 00 (s C 000->007) 115.000.000.000 00000   GOOD       (000)  1
 01 (s C 008->015) 115.000.000.001 00000   GOOD       (000)  1
-------CAN Control-------ID---------Err-------Status--------Pwr---
 00 (C E 000->000) 067.001.230.000 00000   GOOD       (016)  1
-------Micro CAN---------ID---------Err-------Status--------Pwr---
 00 (m C 000->000) 000.248.090.233 00000   GOOD       (000)  1
OK
add virtual output module 0 0 5
OK
el
--- Total Uptime: 000259 Hours, Last Startup: 16:26:54 24/10/21   ---
--- Module Type: BRAIN, RS485 mode: 0, Board: 27'C  --.--V --.--A ---
--- PWR RS485/CAN: 1/1, CANTERM: 1, BB Debug: 255, Fw: 1.0.113       ---
-------Output------------ID---------Err-------Status--------Pwr---
 00 (l I 000->007) 108.000.000.000 00000   GOOD       (000)  1
 01 (d V 008->015) 100.000.000.004 00000   GOOD       (000)  1
 02 (o V 016->023) 111.000.000.005 00000   GOOD       (000)  1
-------Input-------------ID---------Err-------Status--------Pwr---
 00 (i I 000->007) 105.000.000.000 00000   GOOD       (000)  1
 01 (b C 008->015) 098.000.000.001 00000   GOOD       (000)  1
 02 (i V 016->023) 105.000.000.002 00000   GOOD       (000)  0
-------Sensor------------ID---------Err-------Status--------Pwr---
 00 (s C 000->007) 115.000.000.000 00000   GOOD       (000)  1
 01 (s C 008->015) 115.000.000.001 00000   GOOD       (000)  1
-------CAN Control-------ID---------Err-------Status--------Pwr---
 00 (C E 000->000) 067.001.230.000 00000   GOOD       (016)  1
-------Micro CAN---------ID---------Err-------Status--------Pwr---
 00 (m C 000->000) 000.248.090.233 00000   GOOD       (000)  1
OK

output all off

aoff

Switch all outputs off.
Returns
OK

Example:

Instruction
output all off will switch all outputs OFF.
Returns
OK
Instruction
oaoff will switch all outputs OFF.
Returns
OK

output status on

oso

Returns the list of all outputs that are ON.
Returns
List of outputs that are ON

output list

This instruction will display the list of outputs, the status (On or Off), the dim value, the configured timer value, the timer type (Off, , 100ms timer, 1s timer or 1m timer) and the name of each output
Returns
The output list

output on [output nr] [dimmer value*] [timer value*]

on [output nr] [dimmer value*] [timer value*]

Switch ON an output. * are optional values
[output nr]
Indicates which output that needs to be switched ON, a maximum of 640 (0 - 639) outputs can be used.
[dimmer value*]
Optional parameter to set the dimmer value (0-255)
[timer value*]
Optional parameter to set the timer value (0-65535s)
Returns
OK

Examples:

Instruction
output on 127
will switch ON output 127.
Returns
OK
Instruction
output on 127 56
will switch ON output 127 with dimmer value 56.
Returns
OK
Instruction
output on 127 56 3600
will switch ON output 127 with dimmer value 56 for 3600 seconds.
Returns
OK
Instruction
oon 127 56 3600
will switch ON output 127 with dimmer value 56 for 3600 seconds.
Returns
OK

output off [output nr]

off [output nr]

Switch OFF an output.
[output nr]
Indicates which output that needs to be switched OFF, a maximum of 640 (0 - 639) outputs can be used.
Returns
OK

Example:

Instruction
output off 127 will switch OFF output 127.
Returns
OK
Instruction
ooff 127 will switch OFF output 127.
Returns
OK

output name write [output nr][output name]

Write the name of an output, max 16 characters.
[output nr]
Indicates which output (0-639) the name has to be written.
[output name]
the ascii name of the output (maximum 16 characters).
Returns
OK

Example:

Instruction
output name write 24 Bedroom 4
Returns
OK

output name read [output nr]

Read the name of an output
[output nr]
Indicates which output (0-639) the name has to be displayed.
Returns
output Name
OK

Example:

Instruction
output name read 24
Returns
Bedroom 4
OK

output number modules read

Read the number of output modules that are programmed and active
Returns
Number Of Output Modules
OK

Example:

Instruction
output number modules read
Returns
6
OK

output number modules write [number of output modules]

Writes the number of output modules that are programmed and active. This instruction will, after the write is performed, activate the instruction eeprom activate so all values from eeprom are read and copied in RAM
[number of output modules]
Indicates the number of output modules that are active and programmed.
Returns
OK

Example:

Instruction
output number modules write 7
Returns
OK

output group follow read [Output Nr]

An output activation (switch on, off or change dimmer value) can be programmed to trigger a group action. With this instruction, you can read, for Output Nr, when an output activation occurs, which Group Action will be executed.
Returns
Group Nr
OK 

Example: Read the group linked to output 35

Instruction
output group follow read 35
Returns 
10
OK

output group follow write [Output Nr] [Group Nr]

An output activation (switch on, off or change dimmer value) can be programmed to trigger a group action. With this instruction, you can write, for Output Nr, when an output activation occurs, which Group Action will be executed.
Returns
OK 

Example: Write group nr 10 must be linked to output 35

Instruction
output group follow write 35 10
Returns 
OK

output group follow list

An output activation (switch on, off or change dimmer value) can be programmed to trigger a group action. With this instruction, you can list, for all outputs in use, which Group Actions are linked.
Returns
List
OK


Instruction
output group follow list
Returns
list 
OK

 


output all off group follow read

An output all off instruction (like BA????) can be programmed to trigger a group action. With this instruction, you can read which Group Action will be executed.
Returns
Group Nr
OK 

Example:

Instruction
output all off group follow read
Returns 
30
OK

Remark:

  • When an output all off instruction is executed, only the all off group nr will be executed and not all the individual output group follow actions.

output all off group follow write [Group Nr]

An output all off instruction (like BA????) can be programmed to trigger a group action. With this instruction, you can write which Group Action will be executed.
Returns
OK 

Example:

Instruction
output all off group follow write 30
Returns 
OK

Remark:

  • When an output all off instruction is executed, only the all off group nr will be executed and not all the individual output group follow actions.

Sensor instructions

add virtual sensor module [id1] [id2] [id3]

This instruction will add a virtual sensor module (id0="t") with id1, id2 and id3. When using this instruction, please make sure that the combination id1, id2 and id3 for the sensor list is unique and not yet used.
Example:
el
--- Total Uptime: 000259 Hours, Last Startup: 16:26:54 24/10/21   ---
--- Module Type: BRAIN, RS485 mode: 0, Board: 27'C  --.--V --.--A ---
--- PWR RS485/CAN: 1/1, CANTERM: 1, BB Debug: 255, Fw: 1.0.113       ---
-------Output------------ID---------Err-------Status--------Pwr---
 00 (l I 000->007) 108.000.000.000 00000   GOOD       (000)  1
-------Input-------------ID---------Err-------Status--------Pwr---
 00 (i I 000->007) 105.000.000.000 00000   GOOD       (000)  1
 01 (b C 008->015) 098.000.000.001 00000   GOOD       (000)  1
 02 (i V 016->023) 105.000.000.002 00000   GOOD       (000)  0
-------Sensor------------ID---------Err-------Status--------Pwr---
 00 (s C 000->007) 115.000.000.000 00000   GOOD       (000)  1
-------CAN Control-------ID---------Err-------Status--------Pwr---
 00 (C E 000->000) 067.001.230.000 00000   GOOD       (016)  1
-------Micro CAN---------ID---------Err-------Status--------Pwr---
 00 (m C 000->000) 000.248.090.233 00000   GOOD       (000)  1
OK
add virtual sensor module 0 0 1
OK
el
--- Total Uptime: 000259 Hours, Last Startup: 16:26:54 24/10/21   ---
--- Module Type: BRAIN, RS485 mode: 0, Board: 27'C  --.--V --.--A ---
--- PWR RS485/CAN: 1/1, CANTERM: 1, BB Debug: 255, Fw: 1.0.113       ---
-------Output------------ID---------Err-------Status--------Pwr---
 00 (l I 000->007) 108.000.000.000 00000   GOOD       (000)  1
-------Input-------------ID---------Err-------Status--------Pwr---
 00 (i I 000->007) 105.000.000.000 00000   GOOD       (000)  1
 01 (b C 008->015) 098.000.000.001 00000   GOOD       (000)  1
 02 (i V 016->023) 105.000.000.002 00000   GOOD       (000)  0
-------Sensor------------ID---------Err-------Status--------Pwr---
 00 (s C 000->007) 115.000.000.000 00000   GOOD       (000)  1
 01 (t V 008->015) 116.000.000.001 00000   GOOD       (000)  1
-------CAN Control-------ID---------Err-------Status--------Pwr---
 00 (C E 000->000) 067.001.230.000 00000   GOOD       (016)  1
-------Micro CAN---------ID---------Err-------Status--------Pwr---
 00 (m C 000->000) 000.248.090.233 00000   GOOD       (000)  1
OK

sensor extra list

This instruction will display the list of Extra Sensors. Extra Sensors (max 64, 0-63) can be freely used for example to store the wind direction, windspeed etc of a weather station, power measurement and others. Extra Sensors can also trigger group actions and can be used with IF THEN instructions. The values are being set by using BA instructions. Sensor value used are 16bits.
Returns
The sensor extra list

sensor extra name write [sensor nr][sensor name]

Write the name of an extra sensor, max 16 characters.
[sensor nr]
Indicates which sensor (0-63) the name has to be written.
[sensor name]
the ascii name of the sensor (maximum 16 characters).
Returns
OK

Example:

Instruction
sensor extra name write 15 Windspeed
Returns
OK

sensor extra name read [sensor nr]

Read the name of an extra sensor
[sensor nr]
Indicates which sensor (0-63) the name has to be displayed.
Returns
Sensor Name
OK

Example:

Instruction
sensor extra name read 15
Returns
Windspeed
OK

sensor extra group follow read [Sensor Nr]

A sensor can trigger a group action when one of their values changes. With this instruction, you can read, for Sensor extra Nr (0-63), when a value change occurs, which Group Action will be executed.
Returns
Group Nr
OK 

Example: Read the group linked to sensor extra 30

Instruction
sensor extra group follow read 30
Returns 
20
OK

sensor extra group follow write [Sensor Nr] [Group Nr]

A sensor can trigger a group action when one of their values changes. With this instruction, you can write, for Sensor Extra Nr (0-63), when a value change occurs, which Group Action will be executed.
Returns
OK 

Example: Write group nr 20 must be linked to sensor extra 30

Instruction
sensor extra group follow write 30 20
Returns 
OK

sensor extra group follow list

A sensor can trigger a group action when one of their values changes. With this instruction, you can list, for all Extra Sensors, which Group Actions are linked.
Returns
List
OK
Instruction
sensor extra group follow list
Returns
list 
OK

sensor list

This instruction will display the list of sensors, the temperature, the humidity, the brightness and the name of each sensor
Returns
The sensor list

sensor name write [sensor nr][sensor name]

Write the name of a sensor, max 16 characters.
[sensor nr]
Indicates which sensor (0-127) the name has to be written.
[sensor name]
the ascii name of the sensor (maximum 16 characters).
Returns
OK

Example:

Instruction
sensor name write 12 Bedroom 1
Returns
OK

sensor name read [sensor nr]

Read the name of a sensor
[sensor nr]
Indicates which sensor (0-127) the name has to be displayed.
Returns
Sensor Name
OK

Example:

Instruction
sensor name read 12
Returns
Bedroom 1
OK

sensor number modules read

Read the number of sensor modules that are programmed and active
Returns
Number Of Sensor Modules
OK

Example:

Instruction
sensor number modules read
Returns
6
OK

sensor number modules write [number of sensor modules]

Writes the number of sensor modules that are programmed and active. This instruction will, after the write is performed, activate the instruction eeprom activate so all values from eeprom are read and copied in RAM
[number of sensor modules]
Indicates the number of sensor modules that are active and programmed.
Returns
OK

Example:

Instruction
sensor number modules write 7
Returns
OK

temperature group follow read [Sensor Nr]

A sensor can trigger a group action when one of their values changes. With this instruction, you can read, for Sensor Nr (0-127), when a temperature change occurs, which Group Action will be executed.
Returns
Group Nr
OK 

Example: Read the group linked to sensor 17

Instruction
temperature group follow read 17
Returns 
3
OK

temperature group follow write [Sensor Nr] [Group Nr]

A sensor can trigger a group action when one of their values changes. With this instruction, you can write, for Sensor Nr (0-127), when a temperature change occurs, which Group Action will be executed.
Returns
OK 

Example: Write group nr 3 must be linked to sensor 17

Instruction
temperature group follow write 17 3
Returns 
OK

temperature group follow list

A sensor can trigger a group action when one of their values changes. With this instruction, you can list, for all sensor in use, which Group Actions are linked.
Returns
List
OK


Instruction
temperature group follow list
Returns
list 
OK

humidity group follow read [Sensor Nr]

A sensor can trigger a group action when one of their values changes. With this instruction, you can read, for Sensor Nr (0-127), when a humidity change occurs, which Group Action will be executed.
Returns
Group Nr
OK 

Example: Read the group linked to sensor 17

Instruction
humidity group follow read 17
Returns 
4
OK

humidity group follow write [Sensor Nr] [Group Nr]

A sensor can trigger a group action when one of their values changes. With this instruction, you can write, for Sensor Nr (0-127), when a humidity change occurs, which Group Action will be executed.
Returns
OK 

Example: Write group nr 4 must be linked to sensor 17

Instruction
humidity group follow write 17 4
Returns 
OK

humidity group follow list

A sensor can trigger a group action when one of their values changes. With this instruction, you can list, for all sensor in use, which Group Actions are linked.
Returns
List
OK


Instruction
humidity group follow list
Returns
list 
OK

brightness group follow read [Sensor Nr]

A sensor can trigger a group action when one of their values changes. With this instruction, you can read, for Sensor Nr (0-127), when a brightness change occurs, which Group Action will be executed.
Returns
Group Nr
OK 

Example: Read the group linked to sensor 17

Instruction
brightness group follow read 17
Returns 
5
OK

brightness group follow write [Sensor Nr] [Group Nr]

A sensor can trigger a group action when one of their values changes. With this instruction, you can write, for Sensor Nr (0-127), when a brightness change occurs, which Group Action will be executed.
Returns
OK 

Example: Write group nr 5 must be linked to sensor 17

Instruction
brightness group follow write 17 5
Returns 
OK

brightness group follow list

A sensor can trigger a group action when one of their values changes. With this instruction, you can list, for all sensor in use, which Group Actions are linked.
Returns
List
OK
Instruction
brightness group follow list
Returns
list 
OK

airquality group follow read [Sensor Nr]

A sensor can trigger a group action when one of their values changes. With this instruction, you can read, for Sensor Nr (0-127), when an air quality (CO2) change occurs, which Group Action will be executed.
Returns
Group Nr
OK 

Example: Read the group linked to sensor 17

Instruction
airquality group follow read 17
Returns 
6
OK

airquality group follow write [Sensor Nr] [Group Nr]

A sensor can trigger a group action when one of their values changes. With this instruction, you can write, for Sensor Nr (0-127), when an air quality (CO2) change occurs, which Group Action will be executed.
Returns
OK 

Example: Write group nr 6 must be linked to sensor 17

Instruction
airquality group follow write 17 6
Returns 
OK

airquality group follow list

A sensor can trigger a group action when one of their values changes. With this instruction, you can list, for all sensor in use, which Group Actions are linked.
Returns
List
OK
Instruction
airquality group follow list
Returns
list 
OK

CAN module instructions

can control number modules read

Read the number of CAN Control modules that are programmed and active
Returns
Number Of CAN Control Modules
OK

Example:

Instruction
can control number modules read
Returns
2
OK

can control number modules write [number of can control modules]

Writes the number of CAN Control modules that are programmed and active. This instruction will, after the write is performed, activate the instruction eeprom activate so all values from eeprom are read and copied in RAM
[number of CAN Control modules]
Indicates the number of CAN Control modules that are active and programmed.
Returns
OK

Example:

Instruction
can control number modules write 2
Returns
OK

can debug off

This instruction will disable the debug function for CAN messages sent and received on the CAN bus.
Returns
OK

Example: Deactivate CAN debug mode

Instruction
can debug off
Returns
OK

can debug on

This instruction will enable the debug function for CAN messages sent and received on the CAN bus.
Returns
OK

Example: Activate CAN debug mode

Instruction
can debug on
Returns
OK

can eeprom list

This instruction will list the programmed configuration stored in the Brain(+) of all connected Micro CAN's.
Returns
Configuration list of all programmed Micro CAN's

Example:

Instruction
can eeprom list
Returns
-Nr-Bus-ID2.ID1.ID0--Inp.link0-Inp.link1-Inp.link2-Inp.link3-Inp.link4-Inp.link5-Tem.link0-Tem.link1-Modbus-Type
 00 000 100.154.092  009(001)  008(000)  255(255)  255(255)  255(255)  255(255)  000(000)  255(000)   255   255
 01 100 030.245.232  255(255)  255(255)  010(002)  011(003)  012(004)  013(005)  255(100)  255(255)   255   255
 02 100 232.121.136  255(255)  255(255)  036(020)  037(021)  035(019)  034(018)  006(100)  255(006)   255   255
OK
As you can see in the above example, 1 Micro Can is not responding. If you still want to know the configuration of this Micro Can, you can use the CLI instruction can eeprom list
These are the explanations of the different items in the "can ping list":
  • Nr: Micro CAN number
  • Bus: This is the Bus number on which the Micro CAN is connected
    • 100: Internal CAN Bus
    • 000: CAN bus of the first CAN Control
    • 001: CAN bus of the second CAN Control
    • 002: CAN bus of the third CAN Control
    • ...
  • Inp.link0-5: This is system input nr of the Brain(+) that is linked to the input (0-5) of the Micro CAN. The value between parenthesis is the input number on that bus and is for developer purposes only and thus can be ignored.
  • Tem.link0-1: This is the system sensor nr of the Brain(+) that is linked to the sensor (0-1) of the Micro CAN. The value between parenthesis is the sensor number on that bus and is for developer purposes only and thus can be ignored.
  • Modbus: Modbus address (255-> not configured)
  • Type:
    • .BIT7: =0->Modbus VOC is used, =1->uCAN VOC is used
    • .BIT6: =0->Modbus CO2 is used, =1->uCAN CO2 is used
    • .BIT5: =0->Modbus humidity is used, =1->uCAN humidity is used
    • .BIT4: =0->Modbus temp is used, =1->uCAN temp is used
    • .BIT3: =0->Modbus LUX is used, =1->uCAN LUX is used

can ping list

This instruction will request to all connected Micro CAN's the full status and configuration.
Returns
The detailed answers of the connected Micro CAN's

Example:

Instruction
can ping list
Returns
Nr-Bus-ID2.ID1.ID0-Inp.link0-Inp.link1-Inp.link2-Inp.link3-Inp.link4-Inp.link5-Tem.link0-Tem.link1-Type-Firmware-Boot-ID_NE-Modbus-Type-Model-Speed-Stat1-Stat2-Min-MAX-delay--Volt--
00 000 100.154.092  NA(NA)    NA(NA)    NA(NA)    NA(NA)    NA(NA)    NA(NA)    NA(NA)    NA(NA)    NA     NA     NA    NA    NA    NA    NA    NA    NA    NA   NA  NA >500ms  NA
01 100 030.245.232 255(255)  255(255)  010(002)  011(003)  012(004)  013(005)  255(255)  255(255)  000  F06.00.06 255  069   255   255   255   255   000   255  000 255  001ms 23.48V
02 100 232.121.136 255(255)  255(255)  028(020)  029(021)  027(019)  026(018)  006(006)  255(255)  060  F06.00.08 255  069   255   255   255   255   000   255  000 255  001ms 23.18V
OK
As you can see in the above example, 1 Micro Can is not responding. If you still want to know the configuration of this Micro Can, you can use the CLI instruction can eeprom list
These are the explanations of the different items in the "can ping list":
  • Nr: Micro CAN number
  • Bus: This is the Bus number on which the Micro CAN is connected
    • 100: Internal CAN Bus
    • 000: CAN bus of the first CAN Control
    • 001: CAN bus of the second CAN Control
    • 002: CAN bus of the third CAN Control
    • ...
  • Inp.link0-5: This is system input nr of the Brain(+) that is linked to the input (0-5) of the Micro CAN. The value between parenthesis is the input number on that bus and is for developer purposes only and thus can be ignored.
  • Tem.link0-1: This is the system sensor nr of the Brain(+) that is linked to the sensor (0-1) of the Micro CAN. The value between parenthesis is the sensor number on that bus and is for developer purposes only and thus can be ignored.
  • Type: This is the type sensors connected on the Micro CAN:
    • BIT0=1: Temperature sensor DS1820 1wire found on the first sensor connection
    • BIT1=1: Temperature sensor DS1820 1wire found on the second sensor connection
    • BIT2=1: Honeywell HIH8121 Temp/humidity sensor I2C found
    • BIT3=1: TSL2591 I2C lux sensor found
    • BIT4=1: CCS811 I2C air quality sensor found
    • BIT5=1: T67xx I2C air quality sensor found
  • Firmware: This is the current firmware version
  • Boot: Bootloader mode for next startup
  • ID_NE: 78->New Micro Can, 69->Existing Micro Can
  • CanP1: =1->CanP parameters are validated and ready to be used
  • CanP2: BRGCON1 (18F46K80)
  • CanP3: BRGCON2 (18F46K80)
  • CanP4: BRGCON3 (18F46K80)
  • CanP5: CRC8 of CanP2-CanP4
  • Stat: Led/Buzzer status
    • .BIT0->Buzzer ON(1)/OFF(0) for all functions
    • .BIT1->Buzzer ON(1)/OFF(0) for non-linked switches
    • .BIT2->TriColor status led ON(1)/OFF(0)
  • Min: Minimum led brightness
  • Max: Maximum led brightness
  • Delay: Trip Round time between request and response
  • Volt: This is the voltage the Micro CAN is measuring. This is an interesting value, when long cables are used, to see how much voltage drop the cables are generating

can config delete

This instruction will perform a factory reset of the CAN config in the master as well as in the micro CAN slaves. After this instruction, the micro CAN config is deleted from the eeprom of the master and the micro CAN slaves.
Returns
can config delete
OK

Example:

Instruction
can config delete
Returns
OK

can module number read

Read the number of CAN modules that are programmed and active
Returns
Number Of CAN Modules
OK

Example:

Instruction
can module number read
Returns
6
OK

can module number write [number of CAN modules]

Writes the number of CAN modules that are programmed and active. This instruction will, after the write is performed, activate the instruction eeprom activate so all values from eeprom are read and copied in RAM
[number of CAN modules]
Indicates the number of CAN modules that are active and programmed.
Returns
OK

Example:

Instruction
can module number write 7
Returns
OK

can input number read

Read the number of CAN inputs that are programmed and active
Returns
Number Of CAN inputs
OK

Example:

Instruction
can input number read
Returns
12
OK

can input number write [number of CAN inputs]

Writes the number of CAN inputs that are programmed and active. This instruction will, after the write is performed, activate the instruction eeprom activate so all values from eeprom are read and copied in RAM
[number of CAN inputs]
Indicates the number of CAN inputs that are active and programmed.
Returns
OK

Example:

Instruction
can input number write 13
Returns
OK

can sensor number read

Read the number of CAN sensors that are programmed and active
Returns
Number Of CAN sensors
OK

Example:

Instruction
can sensor number read
Returns
4
OK

can sensor number write [number of CAN sensors]

Writes the number of CAN sensors that are programmed and active. This instruction will, after the write is performed, activate the instruction eeprom activate so all values from eeprom are read and copied in RAM
[number of CAN inputs]
Indicates the number of CAN sensors that are active and programmed.
Returns
OK

Example:

Instruction
can sensor number write 6
Returns
OK

can speed read

This instruction will display the CAN bus speed currently in use.
Returns
CAN bus speed

Example:

Instruction
can speed read
Returns
125kbps
OK 

can speed write [speed]

This instruction will write the new CAN bus speed that will be effective after reset. Supported speeds are 20kbps, 50kbps, 125kbps and 250kbps.
Returns
CAN bus parameters

Example:

Instruction
can speed write 50
Returns
CAN P: 001 031 255 002 060
OK
See https://wiki.openmotics.com/index.php/AIO_Tips_%26_tricks_during_installation_and_troubleshooting#Changing_CAN_bus_speed for detailed use

Notes:

  • New uCAN's are programmed at a speed of 125kbps so when new uCAN's are added to an existing network, change the speed to 125kbps, add the uCAN and then change to the required speed.
  • The instruction "can speed write" can also be executed without any parameter. Without parameter, the Master will take the values programmed in Eeprom starting at Page0/Byte14 and verify integrity of those values. When the integrity is OK, these values will be distributed towards the uCAN and programmed in the Master to be used after the next reset. This allows custom CAN parameters to be used in a system.
  • The speed that a CAN bus is able to support depends on the cable used and the length: Increase in cable length means decrease in CAN speed, decrease in cable quality means decrease in CAN speed. A good quality cable (for example UTP CAT6) at CAN speed of 125kbps can easily support 250 meter.

can message [Bus Nr] [SID] [B0] [B1] [B2] [B3] [B4] [B5] [B6] [B7]

This instruction allows to sent direct messages to the CAN bus. To see the response on these messages, turn on the CAN debug functionality ("can debug on").
[Bus Nr]
Indicates the Bus Nr on which the CAN message must be sent:100->internal CAN bus, 0->First CAN Control, 1->Second CAN Control etc, 255->Broadcast message on all available CAN busses.
[Bx]
B1..B8 are the bytes that forms the CAN message, length of the CAN message (Minimum 2, maximum 8 bytes (B1..B8))

Example: Sent message on the internal CAN bus with SID=6, 5 bytes long message 1 100 0 0 101

Instruction
can message 0 6 1 100 0 0 101
Returns
OK

DALI instructions

dali debug off

This instruction will disable the debug function for Dali message sent and received on the Dali bus.
Returns
OK

Example: Deactivate Dali debug mode

Instruction
dali debug off
Returns
OK

dali debug on

This instruction will enable the debug function for Dali message sent and received on the Dali bus.
Returns
OK

Example: Activate Dali debug mode

Instruction
dali debug on
Returns
OK

Example of received info:

16:43:48 CAN RX(100) SID=6 L=7 -> 1 96 151 12 143 1 148 2

Some info of the above example:

  • RX -> Received CAN information, TX -> Transmit CAN information
  • (100) -> Bus: 100 -> internal can bus, 0 -> first Can Control, 1 -> second Can Control, ...
  • L -> length of the CAN message

dali input link write [input_nr] [bus_nr] [dali_id]

This instruction will link a virtual input (input_nr) to a Dali_id on a Dali Bus_nr.
[bus_nr]
bus_nr=0
  • Lunatone SCI directly connected to the Brain(+)
bus_nr=1
  • Lunatone SCI is connected to the first CAN Control
bus_nr=2
  • Lunatone SCI is connected to the second CAN Control
...
[input_nr]
This is the input nr (of a virtual module created by using instruction "add virtual input module") that will be linked to the Dali_id.
[dali_id]
dali_id is the address found of the "to be linked" device in the Lunatone cockpit software
Returns
OK

Example: Link input 8 with Dali device on Bus 0 (SCI connected with Brain(+)) with Dali ID 1

Instruction
dali input link write 8 0 1
Returns
OK

dali input link read [input_nr]

This instruction will read which bus and Dali ID is linked to virtual input (input_nr).
[input_nr]
This is the input nr (of a virtual module created by using instruction "add virtual input module") that will be linked to the Dali_id.


Returns
bus_nr dali_id

Example: Check which bus and Dali ID is linked to output 8. Returns that output 8 is linked to bus 0 (SCI connected to Brain(+)) Dali ID 1.

Instruction
dali input link read 8
Returns
0 1
OK

dali output link write [output_nr] [bus_nr] [dali_id]

This instruction will link a virtual output (output_nr) to a Dali_id on a Dali Bus_nr.
[bus_nr]
bus_nr=0
  • Lunatone SCI directly connected to the Brain(+)
bus_nr=1
  • Lunatone SCI is connected to the first CAN Control
bus_nr=2
  • Lunatone SCI is connected to the second CAN Control
...
[output_nr]
This is the output nr (of a virtual module created by using instruction "add virtual output module" or "add virtual dimmer module") that will be linked to the Dali_id.
[dali_id]
dali_id is the address found of the "to be linked" device in the Lunatone cockpit software
Returns
OK

Example: Link output 8 with Dali device on Bus 0 (SCI connected with Brain(+)) with Dali ID 1

Instruction
dali output link write 8 0 1
Returns
OK

dali output link read [output_nr]

This instruction will read which bus and Dali ID is linked to virtual output (output_nr).
[output_nr]
This is the output nr (of a virtual module created by using instruction "add virtual output module" or "add virtual dimmer module") that will be linked to the Dali_id.


Returns
bus_nr dali_id

Example: Check which bus and Dali ID is linked to output 8. Returns that output 8 is linked to bus 0 (SCI connected to Brain(+)) Dali ID 1.

Instruction
dali output link read 8
Returns
0 1
OK

GROUP instructions

A group action is composed of multiple actions that can be executed. Each group action can call other group actions. Group actions can be nested up to 16 levels deep, if you go deeper, those group actions will be ignored. IF THEN ENDIF instructions used inside a group can be nested as well up to 16 levels deep. The most easy way, when nested group actions including IF THEN ENDIF instructions are used is to use the CLI instruction "group simulate" which gives you a CLI representation of the result of a group action with the included nested group actions (if any).

A group action doesn't have a fixed length, the length and thus the number of group action can be defined at creation by defining the start and end BA. In total, 4200 (BA0 to BA4199) actions can be placed in 255 (0-254) different groups. Each group have a start address and end address.

Start address and end addresses can be changed even when a group has been programmed.

How does group actions work: A normal group action with format 19 0 x y will be added to the queue of immediate action. This queue will process this group action immediately. A group action with format 19 1 x y will not be executed but only simulated and the result will be printed in the CLI screen which is easy to troubleshoot complex group actions.

Group actions can also be delayed in time and only be executed when the defined time trigger has expired (expired seconds or day/hour/minute reached). For example, delayed group action BA 18 0 15 240 will execute BA19 0 15 0 after 240 seconds.

It’s important to note that delayed group actions will be put in the delay queue until the time trigger expires, then this delayed group action will be deleted from the delayed group queue (after executing the related group action). When for example a group action must be executed every 120 seconds, the group delay BA instruction (BA18) that adds the group action to be executed after 120 seconds must be added in the original group action.

When a time trigger occurred and the group action has been executed, the delayed group action is removed from the queue so if you want an action to be executed on a certain hour every day of the week, the delayed group action must be added on the delayed queue after every execution in the group action. The easiest way to do this is to create a group action with a list of instructions including the instruction to put this group on the delayed group. To get the delayed action in the queue for the first time, you can use the startup group action which executes at each processor start or reset.


group list

This instruction will display the list of all programmed group actions (group actions with a valid begin and end address and the first BA programmed) with their name.
Returns
List of programmed group actions
OK

Example:

Instruction
group list
Returns
-Group---------Name---------
000 -> test
001 ->
002 ->
003 ->
004 ->
139 ->
167 ->
170 ->
173 ->
176 ->
179 ->
182 ->
185 ->
188 ->
OK

group name read [group nr]

This instruction will read the name of a group action (0-254).
Returns
name of group action
OK

Example:

Instruction
group name read 0
Returns
test
OK

group name write [group nr] [group name]

This instruction will program the name of group action (0-254).
Returns
OK

Example:

Instruction
group name write 0 test
Returns
OK

group search [Type] [opt: Action] [opt: Device Nr] [opt: Extra]

This instruction will do a search in all active group actions to see if a certain group action or group family has been used. You can do a search with only 1 parameter (BA Type) or you can add additional optional parameters (Action, Device Nr, Extra) to narrow down the search
Returns
List of all groups and the search result for each group
OK

Example:

Instruction
(Example: Search in all groups for outputs that are toggled)
group search 0 16
Returns
Group 000 : test
-> BA0001 - 000 016 00005 00000 Toggle output 5 with std timer/dimmer
-> BA0010 - 000 016 00015 00000 Toggle output 15 with std timer/dimmer
Group 001 :
Group 002 :
Group 003 :
Group 004 :
Group 005 : Output Follow
Group 006 :
Group 007 : Temp follow test
-> BA0075 - 000 016 00002 00000 Toggle output 2 with std timer/dimmer
-> BA0076 - 000 016 00003 00000 Toggle output 3 with std timer/dimmer
-> BA0077 - 000 016 00004 00000 Toggle output 4 with std timer/dimmer
-> BA0078 - 000 016 00005 00000 Toggle output 5 with std timer/dimmer
-> BA0079 - 000 016 00006 00000 Toggle output 6 with std timer/dimmer
Group 139 :
Group 167 :
-> BA0001 - 000 016 00005 00000 Toggle output 5 with std timer/dimmer
-> BA0010 - 000 016 00015 00000 Toggle output 15 with std timer/dimmer
Group 170 :
-> BA0001 - 000 016 00005 00000 Toggle output 5 with std timer/dimmer
-> BA0010 - 000 016 00015 00000 Toggle output 15 with std timer/dimmer
Group 173 :
-> BA0001 - 000 016 00005 00000 Toggle output 5 with std timer/dimmer
-> BA0010 - 000 016 00015 00000 Toggle output 15 with std timer/dimmer
Group 176 :
-> BA0001 - 000 016 00005 00000 Toggle output 5 with std timer/dimmer
-> BA0010 - 000 016 00015 00000 Toggle output 15 with std timer/dimmer
Group 179 :
-> BA0001 - 000 016 00005 00000 Toggle output 5 with std timer/dimmer
-> BA0010 - 000 016 00015 00000 Toggle output 15 with std timer/dimmer
Group 188 :
-> BA0001 - 000 016 00005 00000 Toggle output 5 with std timer/dimmer
-> BA0010 - 000 016 00015 00000 Toggle output 15 with std timer/dimmer
OK

group start list

This instruction will list all the start addresses of each group action.
Returns
List of all start addresses of each group action
OK

Example:

Instruction
group start list
Returns

-Group nr---BA Start--BA Stop-----Name---------

000 0000 0022 -> test
001 0023 0029 ->
002 0030 0034 ->
003 0035 0041 ->
004 0042 0061 ->
005 0062 ---- ->
006 ---- ---- ->
007 ---- ---- ->
008 ---- ---- ->
009 ---- ---- ->
010 ---- ---- ->
011 ---- ---- ->
012 ---- ---- ->
013 ---- ---- ->
014 ---- ---- ->
015 ---- ---- ->
016 ---- ---- ->
017 ---- ---- ->
018 ---- ---- ->
019 ---- ---- ->
020 ---- ---- ->
...
OK

group start end write [group nr] [start ba nr] [end ba nr]

This instruction will write the start address (0-4199) and end address of group nr x (0-254).
Returns
OK

Example: write start address BA35 and end address BA46 of group nr 5

Instruction
group start write 5 35 46
Returns
OK

group read [group nr]

This instruction will read a group action (0-254) and display all BA's that this group action contains.
Returns
OK

Example:

Instruction
group read 0
Returns
-Grp--BA Nr---Typ-Act--x--(MSB.LSB)--y--(MSB.LSB)-------BA Description----
000 0000(00) 000 007 00013(000.013) 00000(000.000) -> Output 13 ON and only overrule timer with value 0 (0x1s) when output is not yet on
000 0001(01) 000 016 00005(000.005) 00000(000.000) -> Toggle output 5 with std timer/dimmer
000 0002(02) 000 004 00011(000.011) 00020(000.020) -> Output 11 ON and overrule timer with value 20 (20x1s)
000 0003(03) 100 000 00000(000.000) 00000(000.000) -> IF
000 0004(04) 100 010 00012(000.012) 00000(000.000) -> Output 12 is ON
000 0005(05) 100 150 00000(000.000) 00000(000.000) -> THEN
000 0006(06) 000 001 00005(000.005) 00000(000.000) -> Output 5 ON with std timer/dimmer
000 0007(07) 100 200 00000(000.000) 00000(000.000) -> ELSE
000 0008(08) 019 000 00001(000.001) 00000(000.000) -> Execute Group Action 1
000 0009(09) 100 255 00000(000.000) 00000(000.000) -> ENDIF
000 0010(10) 000 016 00015(000.015) 00000(000.000) -> Toggle output 15 with std timer/dimmer
000 0011(11) 255 255 65535(255.255) 65535(255.255) -> Instruction not in use
000 0012(12) 255 255 65535(255.255) 65535(255.255) -> Instruction not in use
000 0013(13) 255 255 65535(255.255) 65535(255.255) -> Instruction not in use
000 0014(14) 255 255 65535(255.255) 65535(255.255) -> Instruction not in use
000 0015(15) 255 255 65535(255.255) 65535(255.255) -> Instruction not in use
000 0016(16) 255 255 65535(255.255) 65535(255.255) -> Instruction not in use
000 0017(17) 255 255 65535(255.255) 65535(255.255) -> Instruction not in use
000 0018(18) 255 255 65535(255.255) 65535(255.255) -> Instruction not in use
000 0019(19) 255 255 65535(255.255) 65535(255.255) -> Instruction not in use
000 0020(20) 255 255 65535(255.255) 65535(255.255) -> Instruction not in use
000 0021(21) 255 255 65535(255.255) 65535(255.255) -> Instruction not in use
000 0022(22) 255 255 65535(255.255) 65535(255.255) -> Instruction not in use
OK

group ba write [ba nr] [Type] [Action] [Device Nr] [Extra parameter]

This instruction will write the Basic Action (Type, Action, Device Nr & Extra Parameter) of BA nr (0-4199) for a list of the different BA types that can be used, see Action Types AIO.
Returns
OK

Example: write BA 35 with instruction output 17 off

Instruction
group ba write 35 0 0 17 0
Returns
OK

Remark:

  • This instruction exist in a 5 and 7 parameter version
  • The 5 parameter version has following format: "group ba write [ba nr] [Type] [Action] [Device Nr] [Extra parameter]"
  • The 7 parameter version has following format: "group ba write [ba nr] [Type] [Action] [Device Nr.MSB] [Device Nr.LSB] [Extra parameter.MSB] [Extra parameter.LSB]"
  • In the 7 parameter version, you split Device Nr and Extra parameter is his Most significant Byte (MSB) and his Least Significant Byte.

group ba read [ba nr]

This instruction will read the Basic Action (Type, Action, Device Nr & Extra Parameter) of BA nr (0-4199). For a list of the different BA types that can be used, see Action Types AIO.
Returns
BA details

Example: read BA 100

Instruction
group ba read 100
Returns
OK
-BA Nr----Typ-Act---x--(MSB.LSB)---y--(MSB.LSB)-------BA Description----
0100 000 016 00026(000.026) 00000(000.000) -> Toggle output 26 with std timer/dimmer
OK

group simulate [group nr]

This instruction will simulate the result of a group action (0-254) including nested group actions. Below is an example of 4 nested group actions. As you can see in the below example, abstraction is made of the different group action and everything is represented in one consolidated view.
Returns
Consolidated view of the group action
OK

Example:

Instruction
group simulate 0
Returns
15:15:23 BA 000 007 00013(000.013) 00000(000.000) EXEC SIM -> Output 13 ON and only overrule timer with value 0 (0x1s) when output is not yet on
15:15:23 BA 000 016 00005(000.005) 00000(000.000) EXEC SIM -> Toggle output 5 with std timer/dimmer
15:15:23 BA 000 004 00011(000.011) 00020(000.020) EXEC SIM -> Output 11 ON and overrule timer with value 20 (20x1s)
15:15:23 BA 100 000 00000(000.000) 00000(000.000) IF
15:15:23 BA 100 010 00012(000.012) 00000(000.000) Output 12 is ON
15:15:24 BA 100 150 00000(000.000) 00000(000.000) THEN
15:15:24 BA 000 001 00005(000.005) 00000(000.000) SKIP INSTR Output 5 ON with std timer/dimmer
15:15:24 BA 100 200 00000(000.000) 00000(000.000) ELSE
15:15:24 BA 000 001 00004(000.004) 00000(000.000) EXEC SIM -> Output 4 ON with std timer/dimmer
15:15:24 BA 100 000 00000(000.000) 00000(000.000) IF
15:15:24 BA 100 011 00013(000.013) 00000(000.000) Output 13 is OFF
15:15:24 BA 100 150 00000(000.000) 00000(000.000) THEN
15:15:24 BA 100 000 00000(000.000) 00000(000.000) IF
15:15:24 BA 100 010 00014(000.014) 00000(000.000) Output 14 is ON
15:15:24 BA 100 150 00000(000.000) 00000(000.000) THEN
15:15:24 BA 100 000 00000(000.000) 00000(000.000) IF
15:15:24 BA 100 010 00007(000.007) 00000(000.000) Output 7 is ON
15:15:24 BA 100 090 00000(000.000) 00000(000.000) AND
15:15:24 BA 100 011 00008(000.008) 00000(000.000) Output 8 is OFF
15:15:24 BA 100 150 00000(000.000) 00000(000.000) THEN
15:15:24 BA 000 255 00255(000.255) 00000(000.000) SKIP INSTR Switch OFF all Outputs(x=0), Lights(x=1) or Lights&Outputs(x>1)
15:15:24 BA 100 200 00000(000.000) 00000(000.000) ELSE
15:15:24 BA 000 001 00010(000.010) 00000(000.000) EXEC SIM -> Output 10 ON with std timer/dimmer
15:15:24 BA 000 001 00009(000.009) 00000(000.000) EXEC SIM -> Output 9 ON with std timer/dimmer
15:15:24 BA 100 255 00000(000.000) 00000(000.000) ENDIF
15:15:24 BA 100 200 00000(000.000) 00000(000.000) ELSE
15:15:24 BA 000 001 00003(000.003) 00000(000.000) SKIP INSTR Output 3 ON with std timer/dimmer
15:15:24 BA 100 255 00000(000.000) 00000(000.000) ENDIF
15:15:24 BA 100 255 00000(000.000) 00000(000.000) ENDIF
15:15:24 BA 000 000 00020(000.020) 00000(000.000) EXEC SIM -> Output 20 OFF
15:15:24 BA 100 255 00000(000.000) 00000(000.000) ENDIF
15:15:25 BA 000 016 00015(000.015) 00000(000.000) EXEC SIM -> Toggle output 15 with std timer/dimmer
Some remarks:
- SKIP INSTR: This instruction in the consolidated group view will not be executed when running in execution mode ("group activate") due to the conditions being set (IF THEN ENDIF)
- EXEC SIM: This instruction will be executed when the group will be running in execution mode

group activate [group nr]

This instruction will execute a group action (0-254). If you want to see what's happening during execution, you can activate verbose mode by using instruction "basic action debug on". Please note that the instruction "basic action debug on" can slow down the processor due to more console printing that needs to be done.
Returns
OK

Example:

Instruction
group activate 5
Returns
OK

group delay queue list

With BA17 and BA18, Group Actions can be executed at a later stage. This instruction give you an overview which group actions are planned to be executed in the future.
Returns
List
OK 
Instruction
group delay queue list
Returns
list 
OK

VALIDATION Bit instructions

validation bit group follow read [Bit Nr]

A validation bit (0-255) can trigger a group action when the validation bit value changes. With this instruction, you can read, for validation bit Nr, when a value change occurs, which Group Action will be executed.
Returns
Group Nr
OK 

Example: Read the group linked to validation bit 210

Instruction
validation bit group follow read 210
Returns 
63
OK

validation bit group follow write [Bit Nr] [Group Nr]

A validation bit (0-255) can trigger a group action when the validation bit value changes. With this instruction, you can write, for validation bit Nr, when a value change occurs, which Group Action will be executed.
Returns
OK 

Example: Write group nr 63 must be linked to validation bit 210

Instruction
validation bit group follow write 210 63
Returns 
OK

validation bit group follow list

A validation bit (0-255) can trigger a group action when the validation bit value changes. With this instruction, you can list, for all validation bits, which Group Actions are linked.
Returns
List
OK
Instruction
validation bit group follow list
Returns
list 
OK

validation bit list

This instruction will display the list of all Validation Bits, the associated value and name.
Returns
List of Validation Bits
OK

Example:

Instruction
Validation bit list
Returns
Validation Bit List
OK

validation bit name read [Bit Nr]

With this instruction, you can read, for validation bit nr (0-255), the name of this validation bit
Returns
Validation Bit Name
OK 

Example: validation bit name read

Instruction
validation bit name read 10
Returns 
test bit name1
OK

validation bit name write [Bit Nr] [Bit Name]

With this instruction, you can write the name of a validation bit (0-255)
Returns
OK 

Example: Write the name "test123" for validation bit nr 10

Instruction
validation bit name write 10 test123
Returns 
OK

validation bit read [Bit Nr]

This instruction will read the value (0 or 1) of a validation bit. Validation bits can be freely used and are often applied to remember certain events.
Returns
Validation bit value
OK 

Example: Read bit 230

Instruction
validation bit read 230
Returns 
1
OK

validation bit write [Bit Nr] [Bit Value]

This instruction will write Bit Value (0 or 1) in validation bit nr. Validation bits can be freely used and are often applied to remember certain events.
Returns
OK 

Example: Write value 0 in validation bit 230

Instruction
validation bit write 230 0
Returns 
OK

SHUTTER instructions

shutter group link list

This instruction will display a list of all shutters. For every shutter, a Y (YES) or N (NO) indicates if this shutter is linked to each of the 16 shutter groups
Returns
shutter group link list
OK 

shutter list

This instruction will display a list of all shutters with their lock status, output up & down linked, if the shutter is moving as well as the programmed timer setting for up and down
Returns
shutter list
OK 

shutter name read [shutter nr]

Read the name of ashutter
[input nr]
Indicates which shutter (0-31) the name has to be displayed.
Returns
Shutter Name
OK

Example:

Instruction
shutter name read 15
Returns
Bedroom Parents
OK

shutter name write [shutter nr][shutter name]

Write the name of a shutter, max 16 characters.
[shutter nr]
Indicates which shutter (0-31) the name has to be written.
[shutter name]
the ascii name of the shutter (maximum 16 characters).
Returns
OK

Example:

Instruction
shutter name write 15 Bedroom parents
Returns
OK