Web Master · Modbus IP · API · tools | 1.1 | 06.11.2026
Web Master reads controller and luminaire status through the local HTTP API of the EZ2 adapter, schema ges-v2. This interface provides monitoring data. Starting tests is covered separately under Modbus IP.
/data/systeminfo.php and /lumlist.php./data/errorcodes.php to the external dictionary.Replace the example address 192.168.1.50 with your controller address. Keep these services on a trusted monitoring network. This local interface does not require a token; do not expose it directly to the Internet.
| GET request | Format | Purpose |
|---|---|---|
/data/systeminfo.php |
JSON | System status, counters and data schema |
/lumlist.php |
TSV, 10 columns | Inventory and luminaire status |
/data/errorcodes.php |
JSON | Error dictionary |
/data/luminaire.php?id=196618 |
JSON | Individual diagnostics, including NVG |
For full examples and HTTP handling, see EZF API.
The luminaire ID is channel × 65536 + physical address. Channels: 1 = BUS1, 2 = BUS2, 3 = AirBus. Physical address 10 therefore produces 65546, 131082 and 196618. Store the complete adresse value; do not truncate it to 16 bits.
When migrating from an older integration using physical addresses alone, synchronise the inventory again. Remove old records according to the Web Master procedure to avoid duplicates. Moving a luminaire to another channel changes its ID.
| Column | Meaning |
|---|---|
| adresse | Unique channel/address ID |
| geraetetyp | AW, PIKTO, KOMBI, NVG or UNKNOWN |
| gruppe | Group number stored in the controller |
| ueberwachung | 1 = monitored; 0 = individually excluded from monitoring |
| schaltungsart | DS = maintained operation; BS = non-maintained operation; may be empty |
| betriebszeit | LTM_1H / LTM_2H / LTM_3H / LTM_8H; may be empty |
| letzte_testdauer | Empty when measured duration of the last test is unavailable |
| fehlercode | Four hexadecimal characters |
| ortstext | Location description |
| aktualisiert_am | Empty when the last update timestamp is unavailable |
Do not replace empty fields with zero or the current date. Configured autonomy is not a measurement of the previous test duration. For NVG, the operating mode is reported only when both outputs agree. Mode and autonomy are empty after communication is lost.
The local simulator helps prepare the integration. Acceptance requires a real controller and the intended Web Master. See programs and downloads.
The EZF controller is a Modbus TCP server; the BMS or tester is the client. This guide describes register map v1, available from firmware 10.38.
| Parameter | Value |
|---|---|
| Host | Current controller IP address |
| Port | 502 |
| MBAP Protocol ID | 0 |
| Concurrent clients | Maximum 2 |
| Read | FC03 or FC04, 1–125 registers |
| Write command | FC16, exactly 7 registers starting at 0x0100 |
| Word | 16 bits, big endian |
| uint32 | Most significant word first |
| Addresses in this guide | Zero based, without the 4xxxx prefix |
An idle connection may close after 3 seconds; the client must be able to reconnect. Modbus has no authentication. Restrict access to a trusted monitoring network.
0x455A, and register 1 should show map version 1.TCP, RTU and remote test permission are disabled by default. In luminaire test results, TCP also denotes the duration/autonomy test; distinguish this from the Modbus TCP network transport.
| HEX address (decimal) | Words | Contents |
|---|---|---|
| 0x0000 (0) | 2 | Signature and map version |
| 0x0002 (2) | 1 | Controller status flags |
| 0x0007 (7) | 1 | Remote tests permitted: 0/1 |
| 0x0008 (8) | 2 | Uptime in seconds |
| 0x0010 (16) | 2 | Current boot identifier |
| 0x0020 (32) | 16 | ASCII serial number, 2 characters per word |
| 0x0100 (256) | 8 | Last job and its state |
| 0x0200 (512) | 16 | AirBus group A; B=0x0210, C=0x0220, D=0x0230 |
Register 0x0002 flags: bit 0 fault, 1 communication error, 2 inhibition, 3 search, 4 initialisation/configuration, 5 FRAM memory error. Do not enter register 0 as 40001 unless your client explicitly converts 4xxxx notation to zero-based addresses.
BUS1 starts at 0x1000 (200 slots), BUS2 at 0x3000 (200) and AirBus at 0x5000 (500). Each slot occupies 16 words. Slot i, counting from 1, starts at base + 16 × (i−1). A slot is a list position, not a physical luminaire address. All words in an empty slot are zero.
| Slot offset | Contents |
|---|---|
| 0 / 1 / 2 | Channel / physical address / present: 0 or 1 |
| 3–7 | Status bytes D1–D5 |
| 8 / 9 | TF / duration test: 0 unknown, 1 running, 2 OK, 3 fault |
| 10 | Communication error 0/1 |
| 11 / 12 | Luminaire type / group |
| 13 | NVG: LED1 in bits 0–1, LED2 in bits 8–9; other types 0xFFFF |
| 14 | Luminaire inhibition 0/1 |
| 15 | Confirmed AirBus result: 0 OK; bits 0x20 battery/duration, 0x40 LED/current, 0x80 communication |
A result of 0xFFFF means unknown, stale or wired luminaire — not a pass. When a FRAM error is reported, some status fields may be unconfirmed even if the list can still be read. Live reads do not replace archived test reports.
Read first. Then allow remote tests locally on the controller and confirm write access, serial number and the individual command in the tester. This map controls AirBus luminaires and groups. BUS1/BUS2 provide monitoring; attempting to start a wired luminaire test returns exception 01.
FC16 writes exactly seven words starting at 0x0100:
| Words | Meaning |
|---|---|
| 0–1 | Nonzero, increasing uint32 job ID |
| 2 | 1 = TF, 2 = duration test, 3 = STOP |
| 3 | 0 = individual AirBus luminaire, 1 = AirBus group |
| 4–5 | Luminaire UID or group number 0–3 (A–D) |
| 6 | Confirmation marker 0xA55A |
Example: TF for AirBus 42, UID=196650, job 1:
0000 0001 0001 0000 0003 002A A55A.
UID = channel × 65536 + address. Check the current UID before sending. A common supervisory system should assign job IDs for both transports. Repeating an identical ID and command does not start a second test; changing the payload for that ID is an error.
After FC16 is accepted, read 0x0100–0x0107. State 1 = queued, 2 = accepted/running, 3 = results collected, 4 = rejected, 5 = STOP accepted. State 3 does not mean every luminaire passed. Check individual results and group counters. State 5 does not prove every luminaire received STOP. After a restart, read the boot identifier and current state; do not automatically replay an old command.
| Exception | Meaning | Action |
|---|---|---|
| 01 | Unsupported function | Check FC and supported channel |
| 02 | Invalid address | Check zero-based address and range |
| 03 | Invalid data | Check all 7 words, ID, UID and marker |
| 04 | Device error / unavailable data | Check controller messages; do not display OK |
| 06 | Busy | Command was not accepted; retrying the same ID is allowed |
For connection problems, check IP, port, TCP enablement, restart, firewall and the client limit. Save TX/RX telegrams and JSON/CSV exports from the tester.
RTU uses the same map: 19200 bit/s, 8E1, address 1–247, default 1. It requires a free BUS1 or BUS2 without stored luminaires. Do not mix Modbus RTU and the EZF luminaire protocol on the same port. Broadcast address 0 executes no commands.
This guide covers the local Web Master/EZ2 interface, schema ges-v2. All four GET requests are read only. Use Modbus IP to control tests. 192.168.1.50 is an example controller address.
macOS / Linux:
curl --fail --max-time 10 http://192.168.1.50/data/systeminfo.php
Windows PowerShell:
Invoke-RestMethod -Uri "http://192.168.1.50/data/systeminfo.php" -TimeoutSec 10
Selected response fields for one luminaire without faults:
{
"systemtype": "EZ2",
"status_codes": ["0001"],
"error_codes": ["0000"],
"mapping_complete": true,
"luminaire_count": 1,
"communication_error_count": 0,
"fault_count": 0,
"error_schema": "ges-v2",
"address_schema": "channel16-address16-decimal",
"optional_unavailable": ["letzte_testdauer", "aktualisiert_am"]
}
This illustrates the format; actual values depend on the installation. The response also includes NVG counters, the error dictionary path and status scope. mapping_complete=true does not mean optional measurements or timestamps are available.
| HEX flag | State |
|---|---|
| 0001 | Normal state / luminaire snapshot |
| 0002 | Global inhibition |
| 0004 | General fault |
| 0008 | Functional test |
| 0010 | Duration test |
| 0100 | Search |
| 0200 | Initialisation or configuration |
Flags may occur together. Evaluate them alongside error_codes. An installation with no configured luminaires is faulty or unconfirmed.
curl --fail --max-time 10 http://192.168.1.50/lumlist.php -o oprawy.tsv
Windows PowerShell:
Invoke-WebRequest -Uri "http://192.168.1.50/lumlist.php" -OutFile "oprawy.tsv" -TimeoutSec 10
$oprawy = Import-Csv -Path "oprawy.tsv" -Delimiter "`t"
$oprawy | Format-Table adresse, geraetetyp, fehlercode, ortstext
Example: tabs separate columns; preserve empty columns.
adresse geraetetyp gruppe ueberwachung schaltungsart betriebszeit letzte_testdauer fehlercode ortstext aktualisiert_am
196618 AW 0 1 DS LTM_3H 0000 Corridor
The header and each record contain ten fields. Do not split on arbitrary whitespace, as this loses empty fields. The Web Master guide explains the columns. Do not equate ueberwachung=0 with communication loss.
Use the ID from the first TSV column:
curl --fail --max-time 10 "http://192.168.1.50/data/luminaire.php?id=196618"
Example for a standard AirBus luminaire at physical address 10:
{"id":196618,"channel":3,"physical_address":10,"error_code":"0000","nvg":null}
For NVG, nvg contains led1, led2, mains, input_l1, input_l2, maintained1, maintained2 and communication_error. LED values: 0 off, 1 on, 2 blinking, 3 fault. With communication_error=true, the other NVG values are the last received snapshot, not confirmed live data.
curl --fail --max-time 10 http://192.168.1.50/data/errorcodes.php
Keep codes as four-character hexadecimal strings, including leading zeros.
| Code | Meaning |
|---|---|
| 0000 | No fault in the states read |
| 0400 | No communication with luminaire |
| F001 | LED light source fault |
| F002 | Battery missing or disconnected |
| F003 | LED fault and missing battery |
| F004 | Control gear overtemperature |
| F011 / F012 / F013 | NVG: LED1 / LED2 / both outputs faulty |
| F100 | General controller fault or no configured luminaires |
| FFFE | Unconfirmed state or incomplete diagnostic data |
Fxxx codes belong to the EZF adapter. Add their descriptions to the integration system. A single luminaire code cannot describe every simultaneous fault; also use NVG details.
| HTTP | Meaning | Client action |
|---|---|---|
| 200 | Response available | Check format and status codes |
| 400 | Invalid ID or channel | Correct the parameter using the TSV list |
| 403 | Luminaire API disabled | Enable data sharing on the controller |
| 404 | Luminaire not found | Refresh the inventory |
| 503 | Data unavailable or response exceeds the limit | Display unavailable current data and check the controller |
Use timeouts and limited retries with delays. Set the polling interval during commissioning. Do not run an unlimited request loop. Never display an error, empty response or cached old state as a current OK result.
In this release, the TSV limit is 24576 bytes. Exceeding it returns HTTP 503, not a truncated list with HTTP 200. Reads from separate endpoints are not a single atomic report.
Check successful reads, disabled luminaire API, invalid and nonexistent IDs, and connection loss. Compare fault interpretation with the controller display. Tools and simulators let you prepare the client without a connected device.
Files are available directly from the Wiki. No GitHub account is required.
| Material | Download |
|---|---|
| Modbus IP Tester 1.0.2 — Windows | Windows ZIP |
| Modbus IP Tester 1.0.2 — Mac Apple Silicon | arm64 ZIP |
| Modbus IP Tester 1.0.2 — Mac Intel | x86_64 ZIP |
| API — browser tester and Windows/macOS simulators | API client tools |
| Offline integration handbook — English | HTML · PDF |
| Data examples and register map | ZIP |
| Program checksums | SHA-256 |
| Translated handbook checksums | SHA-256 |
On a Mac, check Apple menu → About This Mac: an Apple M… chip means Apple Silicon; an Intel processor requires the Intel package. The tester does not install firmware.
EZF-Modbus-Tester.exe from the extracted directory, keeping its companion files.EZF-Modbus-Tester.app from the correct package.Release 1.0.2 has no Developer ID signature or notarisation. If macOS blocks it, check approval for this particular application in Privacy & Security. Do not disable system-wide protections. BUILD.txt identifies the compiled architecture.
127.0.0.1, port 1502.EZFDEMO0001.The simulator models communication and example responses. It does not test physical wiring, radio or battery capacity.
Stop or disconnect the simulator and enter the controller IP and port 502. Start by reading the serial number and comparing the luminaire list. Remote tests require separate permission on the controller and confirmation of each command in the application. The tester does not automatically retry control commands.
Extract the API client package. It contains an HTML tester and ready-to-run simulators for Windows and both Mac architectures. The original README_KLIENT_PL.html is Polish; full English startup instructions follow:
1. Windows: run Windows/EZF_API_Simulator.exe. Mac: open the app in macOS-AppleSilicon or macOS-Intel.
2. Open http://127.0.0.1:8765/, select a scenario and serial number, and apply.
3. Select API-Tester öffnen, then API prüfen. The existing API tester and REST simulator have a German interface.
4. Check system status, TSV list, error dictionary and individual luminaire data.
5. Enter the real controller address as the API base and repeat the reads.
Alternatively, open Webmaster_API_Tester_DE.html. If the browser restricts local files, use the tester served over HTTP by the simulator or the curl/PowerShell examples in EZF API. Do not disable global browser protections. Closing the browser does not stop the simulator; use Simulator beenden. The programs are unsigned/not notarised. serial_number and simulator=true are simulator additions, not real controller fields.
The controller simulators include classic EZF 10.107, METRO 10.109 and the R6 comparison. They teach display operation and do not provide a Modbus or REST server.
Include controller and tester versions, operating system, event time, HTTP/Modbus message, and telegrams or an export. Remove passwords and access credentials. State whether the issue occurs in the simulator, on the real controller or in the intended Web Master.