# Haussteuerung V2 - Projekt Dokumentation ## Projektübersicht Webbasierte Haussteuerung für SPS-Steuerung (AWP-Webserver) ## Dateistruktur ``` web/ ├── indexV2.htm # Hauptseite mit Iframes ├── form.css # Zentrales CSS ├── lichtV2.htm # Lichtsteuerung ├── heizungV2.htm # Heizungssteuerung ├── steckdosenV2.htm # Steckdosensteuerung ├── rolladen.htm # Rolladensteuerung ├── stromzaehler.htm # Stromzähler mit Chart ├── licht_state.html # Licht Status (wird von SPS befüllt) ├── heizung_state.html # Heizung Status ├── steckdosen_state.html # Steckdosen Status ├── stromzaehler_state.html # Stromzähler Status ├── WebAppConfig.json # AWP-Webserver Konfiguration ├── Script/ │ └── tth_script.js # JavaScript Funktionen └── images/ # Bilder und Icons ``` ## AWP Variablen ### Licht (lichtV2.htm) - `"Lichtmerker Küche"` - `"Lichtmerker Essen"` - `"Lichtmerker Wohnen 1"` - `"Lichtmerker Wohnen 2"` - `"Lichtmerker HWR"` - `"Lichtmerker Arbeiten"` - `"Lichtmerker Kind 3"` - `"Lichtmerker Dusche"` - `"Lichtmerker Abstellraum"` - `"Lichtmerker Eltern"` - `"Lichtmerker Noah"` - `"Lichtmerker Niko"` - `"Lichtmerker Bad"` - `"Kickertaste"` - `"wled_DB".Helligkeit` - `"wled_DB".Befehl` - `"wled_DB".RGB_hex` ### Heizung (heizungV2.htm) - `"Temp Wohnen"`, `"Temp Arbeiten"`, `"Temp HWR"`, `"Temp Bad"`, `"Temp Eltern"`, `"Temp Noah"`, `"Temp Mika"`, `"Temp Niko"`, `"Temp Dusche"` - `"Einstellungen".Heizung."Heizung Wohnen min/max"` - `"Einstellungen".Heizung."Heizung Arbeiten min/max"` - `"Einstellungen".Heizung."Heizung HWR min/max"` - `"Einstellungen".Heizung."Heizung Bad min/max"` - `"Einstellungen".Heizung."Heizung Eltern min/max"` - `"Einstellungen".Heizung."Heizung Kind1 min/max"` - `"Einstellungen".Heizung."Heizung Kind2 min/max"` - `"Einstellungen".Heizung."Heizung Gäste min/max"` - `"Einstellungen".Heizung."Heizung Dusche min/max"` ### Steckdosen (steckdosenV2.htm) - `"Steckdose Deele Garder"` - `"Steckdose Wohnen"` - `"Steckdose Essen"` - `"Steckdose Arbeiten"` - `"Steckdose Kind 1"` - `"Steckdose Kind 2"` - `"Steckdose Gäste"` - `"Steckdose Eltern"` - `"Arduino Settimio"."Funksteckdose 1 an/aus"` - `"Arduino Settimio"."KDY 1 an/aus"` - `"Arduino Settimio"."KDY 2 an/aus"` - `"Arduino Settimio"."Funksteckdose 4 an/aus"` ### Rolladen (rolladen.htm) - `"Rolladenmerker Ess l/r/m auf/ab"` - `"Rolladenmerker Woh l/r auf/ab"` - `"Rolladenmerker Wohtü auf/ab"` - `"Rolladenmerker Arbei auf/ab"` - `"Rolladenmerker HWR auf/ab"` - `"Rolladenmerker Küc l/r auf/ab"` - `"Rolladenmerker Elter auf/ab"` - `"Rolladenmerker Noah auf/ab"` - `"Rolladenmerker Bad auf/ab"` - `"Rolladenmerker Niko auf/ab"` - `"Rolladenmerker Mika auf/ab"` - `"Rolladenmerker Dusche au/ab"` - `"Rolladen alle auf/ab"` - `"Jalousie_DB".Urlaub` ### Stromzähler (stromzaehler.htm) - 12 Zählerwerte aus `stromzaehler_state.html` - Berechnung: -1 bis -8 als Differenzwerte ### Sonstige (indexV2.htm) - `"Aufgang_Untergang".aktuelle_CPU_Zeit.*` - `"Aufgang_Untergang".Aufgang.HOUR/MINUTE` - `"Aufgang_Untergang".Untergang.HOUR/MINUTE` - `"Aufgang_Untergang".Aufgang_offset` - `"Aufgang_Untergang".Untergang_offset` - `"Türöffner Handy"` - `"Arduino Settimio".Garagentor 1` - `"Arduino Settimio".Garagentor 2` ## CSS (form.css) - `.ui-card` - Card-Container mit Hintergrund - `.ui-table` - Tabellen-Styling - `.ui-btn` - Button-Styling (primary, on, off) - `.ui-iconbtn` - Icon-Buttons - `.auto-style6` - Versteckte Status-Elemente (color: transparent, font-size: 1px) ## JavaScript - `tth_script.js` - Icon-Funktionen (leuchtet_icon, heizt_icon, strom_icon, urlaub_icon) - Iframe-Resize in indexV2.htm - Stromzähler: Differenzberechnung für -1 bis -8 - Stromzähler: Canvas-basierter Leistungs-Chart (letzte 5 Min.) ## Wichtige Änderungen - OutputArea in allen Seiten mit `clip:rect(0,0,0,0)` versteckt - Header-Zeile "Raum | Taster" aus steckdosenV2.htm und rolladen.htm entfernt - Erste Tabellenzeile nicht mehr hervorgehoben - Stromzähler-Werte untereinander angeordnet - Stromzähler: -1 bis -8 als Differenzwerte ## Server - AWP-Webserver auf SPS (192.168.0.90) - Standard-Seite: indexV2.htm ## V3 (Single-Page, neu) Parallel zu V2, lässt V2 unangetastet. Erreichbar über `indexV3.htm`. ### Dateien V3 - `indexV3.htm` — Produktivseite mit SPS-Web-API-Anbindung. - `indexV3_preview.htm` — reine Optik-Vorschau ohne SPS, mit Dummy-Daten. - `formV3.css` — CSS für V3 (Grid, Karten, responsive Stromzähler-Bereich). - `Script/tth_v3_api.js` — JavaScript für `indexV3.htm`. ### Architektur - Keine Iframes, keine AWP-Formulare. - Kommunikation mit der S7-1500 über die integrierte Web-API (`/api/jsonrpc`). - Lesen per `PlcProgram.Read` (Batch), schreiben per `PlcProgram.Write`. - Anmeldung über `Api.Login` mit Token (aktuell Benutzer `111`). - Status wird zyklisch gelesen und in `lastValues` gepuffert. - Schreibaktionen erfolgen direkt beim Klick auf Buttons/Inputs. ### Module in indexV3.htm 1. **Stromzähler** — Tacho, Werte (Bezug/Einspeisung/Wemos), Power-Chart, Daily-Chart. 2. **Licht** — 14 Räume + WLED (Helligkeit/Farbe). 3. **Heizung** — 9 Räume mit IST, SOLL min/max, heizt-Status. 4. **Rolladen** — alle Räume + Urlaub-Modus. 5. **Steckdosen** — 8 normale Steckdosen + 4 Funksteckdosen. 6. **Haus** — Haustür + Garagentor. 7. **Uhrzeit** — CPU-Uhr, Sonnenauf-/untergang. ### Wichtige Variablen-Unterschiede - **Licht:** Lesen aus `licht_state.html` (`"Licht Küche"` etc.), Schreiben auf `"Lichtmerker ..."` etc. (unterschiedliche Variablen!). - **Steckdosen:** Lesen und Schreiben identisch. Normale Steckdosen sind Bool: `false` = an, `true` = aus. Funksteckdosen haben separate an/aus-Variablen. - **Rolladen:** Separate auf/ab-Variablen, Schreibwert `true`. - **Heizung:** SOLL-Werte werden als Float geschrieben. - **WLED:** `"wled_DB".Helligkeit` (Int), `"wled_DB".RGB_hex` (String), `"wled_DB".Befehl` (Int). ### Charts - **Tacho (`v3_gauge`):** Canvas, 180°-Skala, -8000 bis +8000 W, grün=Einspeisung, rot=Bezug. - **Power-Chart (`v3_power_chart`):** Letzte 5 Minuten Leistung, weiche Kurve, Legende "akt. Leistung: xx W". - **Daily-Chart (`v3_daily_chart`):** Balken für die letzten 8 Tage, Wochentage als X-Achse, heute gelb hervorgehoben, blaue Linie für täglichen Bezug. ### Responsive Verhalten - Stromzähler-Bereich bricht auf kleinen Bildschirmen um. - Canvas-Elemente skalieren mit `aspect-ratio: 2 / 1` und bleiben scharf (HiDPI über `fitCanvas`). ### Bekannte Einschränkungen / TODO - Login-Daten (`user: '111'`, `password: '1q2w3e$R'`) sind im Klartext in `tth_v3_api.js` hinterlegt. - Heizungs-Validierung prüft nur `min < max` clientseitig. - Keine Rückmeldung, ob ein Schreibvorgang in der SPS tatsächlich wirksam wurde (nur API-Antwort). ### Preview - `indexV3_preview.htm` enthält feste Dummy-Werte und kein Polling. - Wird verwendet, um das Layout offline zu testen. - Taster in der Preview haben keine Funktion.