====== WebHMI Internal Registers ====== {{ network:ic_icon.png?direct&100|}} Through internal register it is possible to access user memory areas, WebHMI hardware related data etc. The following internal registers are available in WebHMI: ===== User data registers ===== ==== Dxxx - Data registers ==== ^Register^ Description^ Units^ Data type^ Read/Write^ |D0 |A common register for user needs. | | Bit, Byte, Word, Double Word | Read/Write| |... | |D1999 |A common register for user needs. | | Bit, Byte, Word, Double Word| Read/Write| Prior firmware v3.5 following rules apply: The data in these registers are NOT stored after the reboot before firmware version 3.5. The user can access 2000 bytes of RAM. The register address is the address of the beginning of the fragment in the memory block. Depending on the selected data type, a different number of bytes is required per register. So, you can access the register with address D12 as byte. In this case, there will be a reference to one byte in memory. If you access the register with the address D12 as a word (Word), then physically there will be access to two bytes with addresses D12 and D13 of which the word will be composed. In this way, you can access the individual bytes in the desired word or double word. The system does not check the register addresses for intersections or overlays. This control must be performed by the user. Since version 3.5 following rules apply: These registers are non-volatile. System saves their value every 15 minutes or on any project change or correct shutdown event. If you poweroff Raspberry PI or manually shutdown virtual machine from VirtualBox UI these registers could loose latest values changes. There is no limit on these registers. You can add as much registers as you need. Addresses are no longer used in system. Each register has its own memory block and register's address means nothing except help for users to identify the register. You can add multiple registers with the same address and use them as different registers. For example you can add 2 registers with address D10 and WebHMI with threat them as different registers with their own values. ==== DSxxx - Data static registers ==== ^Register^ Description^ Units^ Data type^ Read/Write^ |DS0 |Non-volatile register for user needs. | | Bit, Byte, Word, Double Word | Read/Write| |... | |DS1999 |Non-volatile register for user needs. | | Bit, Byte, Word, Double Word| Read/Write| The data in these registers are stored after rebooting. The user can access 2000 bytes in non-volatile memory. The register address is the address of the beginning of the fragment in the memory block. Depending on the selected data type, a different number of bytes is required per register. So, you can access the register with the DS12 address as a byte. In this case, there will be a reference to one byte in memory. If you access the register with DS12 as the word (Word), then physically it will access two bytes with DS12 and DS13 addresses of which the word will be composed. In this way, you can access the individual bytes in the desired word or double word. The system does not check the register addresses for intersections or overlays. This control must be performed by the user. Nonvolatile memory is implemented in the hardware revision platform V5.34 and higher. VirtualBox and Raspberry PI images does not have non-volatile memory chip and can't save these registers. Instead, use D-registers which are non-volatile since firmware 3.5. ==== Sxxx - String ==== Since version 1.11.0.3478 in WebHMI, a new data type has been added-strings. The strings are available as internal Sxxx registers. A total of 200 such registers are available S1 ... S200. ^Register^ Description^ Units^Data type^ Read/Write^ |S1 |String variable 1 | | String | Read/Write| |S2 |String variable 2 | | String | Read/Write| | ... | | | | | |S200 |String variable 200 | | String | Read/Write| ==== TRxxx - Title of recipe ==== Since version 2.7 in WebHMI, a new type of internal registers TRxx has been added. They contain the names of recipes with the specified ID. ^Register^Description^ Units^Data type^ Read/Write^ |TR1 |Title of recipe with ID=1| | String | Read/Write| |TR2 |Title of recipe with ID=2 | | String | Read/Write| | ... | ===== Special data registers ===== ==== Tx - Time registers ==== ^Register ^Description ^Units ^Data type ^Read/Write^ |T0 |Current time |Seconds |[UnixTime] |Read/- | |T1 |The time taken to exchange data with all the registers in the previous cycle. |Milliseconds |Double Word, Unsigned |Read/- | |T2 |Time spent on data exchange, processing of all events, scripts, writing to the database, writing new values ​​to the devices in the previous cycle. In fact, this is a complete cycle without taking into account the pause between cycles. |Milliseconds |Double Word, Unsigned Int |Read/-| |T3 |The total actual time of the previous cycle, taking into account the pause between cycles.| Milliseconds | Double Word, Unsigned Int |Read/-| ==== Exxx.xxx - Event registers ==== Registers of events. If the event X, for which id = Y, is now being executed, then some of its values ​​from registers of the form EY.xxx can be read. Only reading. You can read the values ​​that are added to the report table. For convenience, each such value is signed directly in the condition editor. {{ network:event_int_regs.png?direct&800 |}} On this screen threre are registers E1.0, E1.1, E1.2. When the event is now on, the register will store respective values from the report with id = 1. In this example the E1.0 register will store event start time [UnixTime], E1.1 - event end time or 0 if event not finished yet, E1.2 - the value from register "Recipe" at the moment of event start. ==== ESxxx - Event State ==== Event state registers. For example, value "1" in the ES2 register means that the event with id = 2 is now running. If the register ES2 = "0", then event is not active. ^Register ^Description ^Units ^Data type ^Read/Write^ |ES1 |Event state with id=1 | |Bit |Read/- | |ES2 |Event state withid=2 | |Bit |Read/- | |ES3 |Event state with id=3 | |Bit |Read/- | |...| ==== ELxxx - Event Length ==== Event length registers. For example, the EL2 register will contain the duration in seconds of the event with id = 2, provided that this event is currently running. If the register EL2 is zero, then this means that the condition is not met or its duration is less than 1 second. ^Register ^Description ^Units ^Data type ^Read/Write^ |EL1 |Duration of the event with id=1|Seconds| Double Word |Read/-| |EL2 |Duration of the event with id=2 |Seconds|Double Word|Read/-| |EL3 |Duration of the event with id=3 |Seconds|Double Word|Read/-| |... | ==== Ixxx - Intervals ==== Interval registers. Usually used in the event conditions. For example, if you want to receive an event that fires every 10 seconds, you can compare the value of I10 with zero (I10 == 0). If you need an interval of 2 minutes then you need to use the I120 register. ^Register ^Description ^Units ^Data type ^Read/Write^ |I1 |The remainder of the current time division by 1 |Seconds |Double Word, Unsigned Int| Read/-| |I2 |The remainder of the current time division by 2 |Seconds |Double Word, Unsigned Int Read/- | |I3 |The remainder of the current time division by 3 |Seconds |Double Word, Unsigned Int Read/- | ... ==== Rxxx - Random values ==== Random number generator. Rxxx = rand() % xxx. The value of the register with the number xxx is the remainder of the division of the random number by xxx (register address). Example: R123 will return random numbers in the range from 0 to 122 inclusive. ^Register ^Description ^Data type ^Read/Write^ |R2 |Random integer in the range from 0 to 1 (inclusive). |Double Word, Unsigned Int |Read/-| |R3 |Random integer in the range from 0 to 2 (inclusive). |Double Word, Unsigned Int |Read/-| |R4 |Random integer in the range from 0 to 3(inclusive).. |Double Word, Unsigned Int |Read/-| ... ==== Cx - Communication registers ==== The presence of communication errors on different connections ^Register ^Description ^Units ^Data type ^Read/Write^ |C0 |The presence of communication errors in any of the connections. 0 means there is no communication error. A positive number indicates the connection number in which there is a communication error.| Connection number |Word, Unsigned Int|Read/-| |C1 |The presence of a communication error in connection with ID = 1. 0 means there are no errors. A positive number means a register ID that can not be read. |Register number |Word, Unsigned Int |Read/-| |C2 |The presence of a communication error in connection with ID = 2. 0 means there are no errors. A positive number means a register ID that can not be read. |Register number |Word, Unsigned Int |Read/-| |... |... |... |...| ==== CDxxx - Connection Disabled registers ==== Connection status - enabled / disabled. This register allows you to see whether the exchange is disabled for a specific connection. If the exchange is disabled, the system will return 1. If the exchange is not disabled, it will return 0. Recording to these registers allows you to enable / disable the exchange on the desired connection. To disable the exchange, you need to write 1 to the appropriate register. ^Register ^Description ^Data type ^Read/Write^ |CD1 |Exchange turned on connection with ID = 1. |Bit |Read/Write| |CD2 |Exchange turned on connection with ID = 2. |Bit |Read/Write| |CD3 |Exchange turned on connection with ID = 3. |Bit |Read/Write| |... |...| ...| ... | ===== WebHMI system registers ===== ==== Hx - Hardware-related registers ==== Registers for reading WebHMI on-board hardware status ^Register ^Description ^Units ^Data type ^Read/Write^ |H0 |Flag is the validity of the temperature value. 1 = value is reliable, 0 = value is not reliable| |Bit|Read/-| |H1 |Validation flag of power controller registers, 1 = valid values, 0 = values ​​are not reliable | |Bit |Read/-| |H2 |RTC IC Temperature |Celsius degrees |Double word, float 32 |Read/-| |H3 |Input voltage |Volts |Double word, float 32 |Read/-| |H4 |Battery voltage |Volts |Double word, float 32 |Read/-| |H5 |“Power OK” - power is good.| |Bit |Read/-| |H6 |"Battery Low" - the battery is discharged. 1 means that the battery voltage reached a minimal but still operational voltage, WebHMI will complete its work in a regular manner. | |Bit |Read/-| |H7 |Battery Critical.The voltage on the battery has reached a minimum value, and if the input voltage does not appear within 10 seconds, the controller will de-energize WebHMI.| |Bit |Read/-| |H8 |System OK. 1 means the system has booted up and running.| |Bit |Read/-| |H9 |“External Power Supply”. Working from 24V. 1 means that the system is powered by external power.| |Bit |Read/-| |H10 |“Internal Power Supply”. Working from battery. 1 means the system is running on battery power.| |Bit |Read/-| |H11 |"Reset enabled" - The timer for the RESET signal is switched on. 1 means the system is about to reboot. | |Bit |Read/-| |H12 |“Power OFF enabled”. 1 means the system is going to shut down.| |Bit |Read/-| |H13 |“Internet connected”. 1 means that there is internet connection is active.| |Bit |Read/-| |H14 |“VPN connected”. 1 means that VPN connection is active.| |Bit |Read/-| ==== Lx - Linux-related registers ==== Some most important metrics of the operating system. ^Register ^Description ^Units ^Data type ^Read/Write^ |L0 |Free memory |KiB |Word, Unsigned |Read/-| |L1 |Free memory plus memory occupied by OS buffers |KiB |Word, Unsigned Int|Read/-| |L2 |1 minute [load average] | |Double Word, Float 32 |Read/-| |L3 |5 minutes [load average] | |Double Word, Float 32 |Read/-| |L4 |15 minutes [load average] | |Double Word, Float 32 |Read/-| ==== B0 - Sound alert register ==== With the help of this register you can make sounds of the built-in WebHMI buzzer. A value of 1 to 8 must be written to the register. WebHMI will issue a corresponding number of beeps. After the signals sound, WebHMI stops making a sound. To repeat the sound signal, you need to write down the desired number again in this register. You can write to this register using scripts. So, for example, you can make a squeaking when the connection breaks down or when an emergency situation occurs. When reading from this register, 0 will always return. ==== DOx - Digital Output registers ==== Registers of external solid-state relays (SSRs). When writing to the register, the corresponding SSR will be closed. With the help of SSR it is possible to organize control of external devices or to transmit signals to external systems. For example, you can connect a security or fire system and send them alarm signals. ^Register ^Description ^Ubits ^Data type ^Read/Write^ |DO0 |SSR number 1 | |Bit|Read/Write| |DO1 |SSR number 2 | |Bit|Read/Write| ==== Mx - Memory-related (storage) registers ==== ^Register ^Description ^Ubits ^Data type ^Read/Write^ |M0 |Percents occupied | |Double Word, Float 32 / Double Word, Unsigned|Read/-| |M1 |Bytes size total | |Double Word, Unsigned|Read/-| |M2 |Bytes free | |Double Word, Unsigned|Read/-| |M3 |kBytes size total | |Double Word, Unsigned|Read/-| |M4 |kBytes free | |Double Word, Unsigned|Read/-| |M5 |MBytes size total | |Double Word, Float 32 / Double Word, Unsigned|Read/-| |M6 |MBytes free | |Double Word, Float 32 / Double Word, Unsigned|Read/-| |M7 |GBytes size total | |Double Word, Float 32 / Double Word, Unsigned|Read/-| |M8 |GBytes free | |Double Word, Float 32 / Double Word, Unsigned|Read/-| ==== MACx - MAC address registers ==== |MAC0 |JSON dictionary of the current network interfaces |String |Read/-| |MAC1 |MAC address of first JSON dictionary interface's entry |String |Read/-| |MAC2 |MAC address of second JSON dictionary interface's entry |String |Read/-| |... | |MACx |MAC address of x JSON dictionary interface's entry |String |Read/-| ==== WHx - WebHMI-related registers ==== Here you can see the current platform type, license and etc. |WH0 |Current Platform|String |Read/-| |WH1 |Serial Number or Instance ID |String |Read/-| |WH2 |Software version |String |Read/-| |WH3 |License type (registers number) |String |Read/-| |WH4 |License deadline date |[UnixTime] |Read/-| |WH5 |License deadline countdown |Double Word Unsigned, time duration d[d] hh:mm:ss |Read/-| ===== Weather registers ===== ==== WCxxx - Weather Condition registers ==== Current meteorological information. A group of registers that provide current weather information at the WebHMI installation site. The data is updated approximately every two hours. The service requires an Internet connection, an account in Level2 and a subscription to the weather forecast. Registers are available since version 2.5.2400. ^Register ^Description ^Data type ^Read/Write^ |WC0 |Timestamp of the data received. |Double Word, Unixtime |Read/-| |WC1 |Air temperature, Celsius degrees. |Double Word, Float |Read/-| |WC2 |Pressure, hPa. |Word, Int |Read/-| |WC3 |Relative humidity, %. |Word, Int |Read/-| |WC4 |Wind speed, м/с. |Double Word, Float |Read/-| |WC5 |The direction from where the wind blows, the metrological degrees. |Double Word, Float |Read/-| |WC6 |Cloudiness, %. |Word, Int |Read/-| |WC7 |Precipitation(rain), mm. |Double Word, Float |Read/-| |WC8 |Precipitation (snow), mm. |Double Word, Float |Read/-| |WC9 |Textual description of the current weather |String |Read/-| ==== WFxxx - Weather Forecast registers ==== Weather forecast for the next day with an interval of 3 hours. The forecast is available for seven 3-hour intervals ahead. The data is updated approximately every two hours. The service requires an Internet connection, an account in Level2 and a subscription to the weather forecast. Registers are available since version 2.5.2400. The registers are the same as the WCxxx registers. Addresses of registers are constructed in this way: [interval number] * 10 + [register address WCxxx]. Example: WF1 = Air temperature in the next 3 hours interval. WF21 = Air temperature in the next 6 hours interval. WF31 = Air temperature in the next 9 hours interval, etc. For a more accurate understanding of how long a forecast is built, you can use timestamps in the WFx0 registers. ^Register ^Description ^Data type ^Read/Write^ |WF0 |Interval 1. The time for which the data was received. |Double Word, Unixtime |Read/-| |WF1 |Interval 1. Air temperature, degrees Celsius. |Double Word, Float |Read/-| |WF2 |Interval 1. Pressure, hPa |Word, Int |Read/-| |WF3 |Interval 1. Relative humidity, %. |Word, Int |Read/-| |WF4 |Interval 1. Wind speed, m/s. |Double Word, Float |Read/-| |WF5 |Interval 1. The direction from where the wind is blowing, meteorological degrees. |Double Word, Float |Read/-| |WF6 |Interval 1. Cloudiness, %. |Word, Int |Read/-| |WF7 |Interval 1. Precipitation (rain), mm. |Double Word, Float |Read/-| |WF8 |Interval 1. Precipitation (snow), mm. |Double Word, Float |Read/-| |WF9 |Interval 1. Textual description of the current weather |String |Read/-| |WF10 |Interval 2. The time for which the data was received. |Double Word, Unixtime |Read/-| |WF11 |Interval 2. Air temperature, degrees Celsius. |Double Word, Float |Read/-| |WF12 |Interval 2. Pressure, hPa. |Word, Int |Read/-| |WF13 |Interval 2. Relative humidity, %. |Word, Int |Read/-| |WF14 |Interval 2. Wind speed, м/с. |Double Word, Float |Read/-| |WF15 |Interval 2. The direction from where the wind is blowing, meteorological degrees. |Double Word, Float |Read/-| |WF16 |Interval 2. Cloudiness, %. |Word, Int |Read/-| |WF17 |Interval 2. Precipitation (rain), mm. |Double Word, Float |Read/-| |WF18 |Interval 2. Precipitation (snow), mm. |Double Word, Float |Read/-| |WF19 |Interval 2. Textual description of the current weather |String |Read/-| |... ... ... ...| |WF60 |Interval 7. The time for which the data was received. |Double Word, Unixtime |Read/-| |WF61 |Interval 7. Air temperature, degrees Celsius. |Double Word, Float |Read/-| |WF62 |Interval 7. Pressure, hPa. |Word, Int |Read/-| |WF63 |Interval 7. Relative humidity, %. |Word, Int |Read/-| |WF64 |Interval 7. Wind speed, м/с. |Double Word, Float |Read/-| |WF65 |Interval 7. The direction from where the wind is blowing, meteorological degrees. |Double Word, Float |Read/-| |WF66 |Interval 7. Cloudiness, %. |Word, Int |Read/-| |WF67 |Interval 7. Precipitation (rain), mm. |Double Word, Float |Read/-| |WF68 |Interval 7. Precipitation (snow), mm. |Double Word, Float |Read/-| |WF69 |Interval 7. Textual description of the current weather |String |Read/-| Textual description of the current weather can be: Clear, Clouds, Rain, Snow, Thunderstorm, Mist. ==== WSxxx - Sunset/Sunrize registers ==== The time of sunrise and sunset in the current day. The service requires an Internet connection, an account in Level2 and a subscription to the weather forecast. Registers are available since version 2.5.2400. ^Register ^Description ^Data type ^Read/Write^ |WS0 |Sunrise time. |Double Word, Unixtime |Read/-| |WS1 |Sunset time. |Double Word, Unixtime |Read/-|