Overview
The Siemens LOGO! 8 family of logic modules ships with an integrated web server that exposes monitoring variables, status pages, and basic diagnostic information over HTTP. While earlier LOGO! 8 generations (FS01 through FS06) ship with a fixed, read-only monitoring web interface, the LOGO! 8.2 generation extends the API to allow user-defined HTML, CSS, and JavaScript pages that can read and write process variables. This capability turns the LOGO! 8.2 into a small but capable remote-I/O gateway: a phone, tablet, or PC connected to the same Wi-Fi router can toggle outputs, read inputs, and visualize process state through a purpose-built portal.
This reference walks through the hardware identification steps required to confirm a unit supports custom pages, the firmware prerequisites, the directory layout LOGO! 8.2 expects, the S7 variable mapping used to read inputs and drive outputs, and a troubleshooting matrix covering the most common commissioning failures. It is written for engineers with web-development experience who need to integrate LOGO! I/O into an existing portal or operator interface.
Hardware Identification: 8.0 / 8.1 vs 8.2
Siemens encodes the hardware generation in the order number (Artikelnummer / MLFB) of the LOGO! base module. The relevant suffixes and functional state of the integrated web server are summarized below.
| Generation | Firmware State (FS) | Order Number Suffix | Integrated Web Server | Custom User Pages |
|---|---|---|---|---|
| LOGO! 8.0 | FS01 - FS03 | ...0BA0 (series 0) | Monitoring only | No |
| LOGO! 8.1 | FS04 - FS06 | ...0BA1 (series 1) | Monitoring only | No |
| LOGO! 8.2 | FS07 and above | ...0BA2 (series 2) | Monitoring + user pages | Yes |
To read the order number and firmware state on a powered unit:
- On the LOGO! display, press ESC until the main menu appears.
- Navigate to Diagnostics > Product Information (or scroll to the system information page).
- Record the Order Number (printed on the front of the module, e.g. 6ED1052-1MD08-0BA2) and the Firmware Version.
- Cross-check the suffix: 0BA0 = 8.0, 0BA1 = 8.1, 0BA2 = 8.2. The fifth digit from the right of the suffix also encodes the FS level.
For a complete catalog of order numbers and the corresponding manual packages, see the Siemens LOGO! 8 system manual and the LOGO! product support page.
Prerequisites
Before authoring pages, confirm the following items are in place. Skipping any of these steps is the leading cause of "the page never loads" complaints during commissioning.
| # | Item | Requirement | Verification |
|---|---|---|---|
| 1 | Base module | LOGO! 8.2 (order number suffix 0BA2) | Read from front label |
| 2 | Firmware | FS07 or later (8.2 baseline) | Diagnostics > Product Info |
| 3 | LOGO! Soft Comfort | Version 8.2 or later for programming | Help > About |
| 4 | SD card (optional) | Up to 32 GB, FAT32, for user page storage | Format with PC, insert before power-up |
| 5 | Ethernet | LOGO! connected to Wi-Fi router or LAN | Ping the configured IP |
| 6 | IP configuration | Static IP recommended for portal access | LOGO! menu > Network |
| 7 | Web technologies | HTML5, CSS, JavaScript authoring tools | Local browser test rig |
Understanding the LOGO! 8.2 Web Server Architecture
The LOGO! 8.2 web server is a small embedded HTTP daemon listening on TCP port 80 (or 443 when TLS is enabled on supported revisions). It serves three classes of content:
- System pages — the read-only monitoring pages (Inputs, Outputs, Flags, Analog values) shipped with the firmware. These are not modifiable.
-
User pages — HTML/CSS/JavaScript files placed in the
/userdirectory of the SD card root. These are the customizable surface. - API endpoints — JSON-style S7 variable access URLs used by user pages to read inputs and write outputs. The client-side JavaScript calls these endpoints with simple HTTP GET or POST requests.
Authentication is enforced through a username/password pair configured under LOGO! menu > Network > Web Server Access. Without credentials, the user pages and the variable endpoints both return HTTP 401. This is the same authentication layer that protects the integrated monitoring pages, so a single user/password pair governs both surfaces.
For background on how HTTP request/response cycles work between a browser and an embedded server, refer to the MDN Web Docs overview of web servers. If the project requires a fully custom HTTP daemon (for example, a C++ standalone server with GET/HEAD/POST/PUT/DELETE support) running on a separate host, the alouane04/Custom-HTTP-Server reference implementation demonstrates the protocol mechanics, but it is not a substitute for the LOGO! built-in server when targeting the LOGO! itself.
Step-by-Step: Building Custom Web Pages
Step 1 — Configure the LOGO! IP and web server access
- On the LOGO! display, navigate to Network Settings.
- Set IP Address to a static address on the local subnet (for example 192.168.1.50 with subnet 255.255.255.0).
- Enable the Web Server and define an Admin User and password.
- Confirm the gateway IP matches the Wi-Fi router so the portal is reachable from any LAN client.
Step 2 — Prepare the SD card layout
Format a microSD card (4–32 GB) as FAT32. Create the following directory tree at the card root:
SD_ROOT/
user/
index.html
css/
style.css
js/
app.js
img/
logo.png
The user/ directory name is mandatory; the web server maps it to the root of the user-page namespace, so http://<LOGO_IP>/user/index.html resolves to user/index.html on the card. Subdirectories (css, js, img) are arbitrary.
Step 3 — Author the entry page
Create a minimal index.html at user/index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>LOGO! 8.2 I/O Portal</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<h1>LOGO! I/O Control</h1>
<div class="row">
<button id="q1-on">Q1 ON</button>
<button id="q1-off" class="danger">Q1 OFF</button>
<span class="status">I1: <span id="i1">?</span></span>
</div>
<script src="js/app.js"></script>
</body>
</html>
Step 4 — Wire the client-side JavaScript to the LOGO! API
LOGO! 8.2 exposes variable access through HTTP endpoints. Reading uses GET, writing uses POST with a JSON body. The base URL convention is /s7/r/<varname> for reads and /s7/w/<varname> for writes. Variable names are the symbolic names defined in the LOGO! Soft Comfort program, prefixed with the data block (for example DB1.Q1, DB1.I1, DB1.MW10).
// app.js — minimal read/write driver
const BASE = location.origin; // matches LOGO! IP
const USER = 'admin';
const PASS = 'yourPassword';
const HDR = 'Authorization: Basic ' + btoa(USER + ':' + PASS);
async function readVar(name) {
const r = await fetch(`${BASE}/s7/r/${name}`, { headers: { HDR } });
if (!r.ok) throw new Error(`read ${name} failed: ${r.status}`);
return (await r.json()).value;
}
async function writeVar(name, value) {
const r = await fetch(`${BASE}/s7/w/${name}`, {
method: 'POST',
headers: { 'Content-Type': 'application/json', HDR },
body: JSON.stringify({ value })
});
if (!r.ok) throw new Error(`write ${name} failed: ${r.status}`);
return r.json();
}
document.getElementById('q1-on').onclick = () => writeVar('DB1.Q1', 1);
document.getElementById('q1-off').onclick = () => writeVar('DB1.Q1', 0);
setInterval(async () => {
try { document.getElementById('i1').textContent = await readVar('DB1.I1'); }
catch (e) { console.warn(e); }
}, 1000);
Step 5 — Insert the SD card and reboot
- Power down the LOGO! 8.2.
- Insert the prepared SD card.
- Power up. The LOGO! scans
/userduring boot; if the structure is valid, the new pages are available immediately.
Step 6 — Test from a browser
- Connect the PC to the same Wi-Fi router or LAN as the LOGO!.
- Browse to
http://192.168.1.50/user/(use the configured IP). - Authenticate with the admin credentials when prompted.
- Click the buttons and confirm the corresponding output relay clicks; the input indicator should update every second.
Variable Mapping and S7 Communication
LOGO! variables map onto the standard S7 addressing scheme used by Siemens PLCs. The web server in 8.2 reads and writes through this same address space, so any symbolic name visible in the LOGO! Soft Comfort variable table is reachable from a custom page.
| Address | Type | Width | Typical Use |
|---|---|---|---|
| I1 – I24 | Digital input | 1 bit | Push buttons, sensors |
| AI1 – AI8 | Analog input | 16 bits | Temperature, pressure transducers |
| Q1 – Q16 | Digital output | 1 bit | Relay coils, contactors |
| AQ1 – AQ2 | Analog output | 16 bits | Variable-speed drives, proportional valves |
| M1 – M27 | Flag (marker) | 1 bit | Internal status, latches |
| VW0 – VW850 | Variable word | 16 bits | Setpoints, counters, timers |
| VB0 – VB1700 | Variable byte | 8 bits | Compacted data, ASCII strings |
For inputs and outputs, the symbolic name in the API matches the LOGO! program variable (e.g. I1 in the program becomes DB1.I1 in the web API, where DB1 is the LOGO! data block). For markers and the variable word/byte area, the symbolic name must be the named variable from the Soft Comfort project — bare numeric references (VW10) are valid only if the project exposes them by that name.
The complete data type and address conventions are documented in the LOGO! 8 system manual (entry ID 109741041) and the LOGO! Soft Comfort online help (entry ID 109973506).
Security Considerations
Operating a control surface over plain HTTP on a shared LAN introduces several risks that must be addressed before the portal is exposed beyond a development bench.
- Change the default password. The factory user/password is well-known; it must be replaced with a strong secret.
- Restrict the user to a non-admin role if the firmware revision supports role-based access. Operators should not be able to change LOGO! configuration from the portal.
- Do not expose the LOGO! web server to the public internet without an authenticated reverse proxy (nginx, Caddy, or similar) terminating TLS, plus IP allow-listing or VPN. Direct exposure invites credential brute-force and unauthorized write access to outputs.
- Use HTTPS where supported. Some 8.2 firmware revisions permit TLS on the integrated server; enable it whenever possible to prevent credential and process data leakage on the LAN.
- Audit outputs before connecting loads. A custom page that writes Q1 unconditionally will energize whatever is wired to that terminal. Validate the write logic in a no-load bench setup before deploying to motors, heaters, or valves.
Verification and Testing
After deploying the SD card, run the following verification sequence to confirm full end-to-end functionality. Record results for each step in the commissioning log.
| Test | Action | Expected Result | Pass Criteria |
|---|---|---|---|
| Page load | Browse to /user/ from a phone on the same Wi-Fi | HTML loads, CSS applied, no console errors | Page renders < 2 s |
| Authentication | Clear cookies, reload page | Browser prompts for credentials, then loads | 401 with bad creds, 200 with good |
| Read digital input | Toggle a physical input wired to I1 | Indicator on page flips within 1 cycle | Polling latency ≤ 1.5 s |
| Write digital output | Click Q1 ON | Output relay energizes, audible click, LED on | Write returns 200, output state changes |
| Write analog value | POST a value to AQ1 | Analog output tracks the new value | Measured value within 1% |
| Reboot persistence | Power-cycle the LOGO! | User pages still served from SD card | Pages reload without manual intervention |
| Bad credentials | Enter wrong password | Server returns 401, page does not load | No data exposed |
Troubleshooting Matrix
| Symptom | Likely Root Cause | Remediation |
|---|---|---|
404 Not Found on /user/ |
Hardware is 8.0 or 8.1 | Replace base module with 8.2 (suffix 0BA2) |
404 on a specific file |
File path is case-sensitive on the SD card | Match directory and file names exactly to the references in HTML |
| Page loads but buttons do nothing | Wrong variable name (e.g. Q1 instead of DB1.Q1) |
Use the symbolic name with DB prefix as shown in the Soft Comfort variable table |
401 Unauthorized from fetch() |
Credentials not sent or wrong base64 encoding | Confirm btoa(user + ':' + pass) produces the expected string |
| Inputs always show 0 | Polling interval too fast; server queue saturates | Reduce polling to 1 s; batch reads in a single endpoint if available |
| Outputs do not energize | LOGO! program does not have a writable coil for that output (e.g. driven by a one-shot block) | Edit the Ladder/FBD so the output address is free to be set by the API |
| SD card not detected at boot | Card formatted as exFAT, NTFS, or larger than 32 GB | Reformat as FAT32 with a single primary partition, ≤ 32 GB |
| Browser caches stale page | No cache-busting on HTML assets | Add a query string to script/CSS includes (e.g. app.js?v=2) |
| Polling errors only on phone | Phone on guest network or VLAN different from LOGO! | Connect phone to the same SSID; verify router is not AP-isolating clients |
| Write returns 200 but output does not change | Output is being reset every LOGO! scan by a higher-priority block | Use markers as API targets and let the LOGO! program map markers to outputs in the FBD |
Frequently Asked Questions
Can I add custom web pages to a LOGO! 8.0 or 8.1 base module?
No. The 8.0 (FS01-FS03) and 8.1 (FS04-FS06) generations ship with a fixed monitoring web server only. Custom user pages are supported exclusively on the LOGO! 8.2 generation (order numbers ending 0BA2, FS07 and above). Older units cannot be firmware-upgraded to 8.2 because the underlying web server is a hardware/firmware-coupled feature.
How do I tell whether my LOGO! is 8.0, 8.1, or 8.2 without opening the cabinet?
Read the order number (MLFB) on the front label. The suffix determines the generation: 0BA0 = 8.0, 0BA1 = 8.1, 0BA2 = 8.2. For example, 6ED1052-1MD08-0BA2 is an 8.2 unit. The same value is also reported under Diagnostics > Product Information on the LOGO! display.
Do custom pages survive a power cycle?
/user directory on every boot. If the card is removed or corrupted, the built-in monitoring pages continue to work but custom pages are unavailable until the card is restored.What polling rate is safe for reading inputs from a custom page?
Keep the read interval at 1 second or slower. The LOGO! 8.2 web server is optimized for operator-HMI traffic, not for high-rate control. Sub-200 ms polling can saturate the S7 communication buffer and delay the standard monitoring pages, so a 1000 ms cadence is the recommended starting point.
Can I expose the LOGO! web server to the public internet?
Direct exposure is not recommended. Place an authenticated reverse proxy (nginx, Caddy, or similar) in front of the LOGO!, terminate TLS at the proxy, and use IP allow-listing or a VPN to restrict access. Enable HTTPS on the LOGO! itself if the firmware revision supports it, and always replace the default admin password before deployment.