RS IPS Energy Forecast (RS EFC)

Update 23.08.16: RS Energy Forecast (RS EFC) V 1.8 erschienen

 

Wozu?

RS Energy Forecast Webfront

RS Energy Forecast Webfront

Wer sich mit den Energiekosten in den eigenen 4 Wänden beschäftigt und idealerweise auch schon mit der Home-Automation angefangen hat, wird sich irgend wann fragen: wie kann ich meine Energiekosten senken? Spätestens zur jährlichen Energiekosten-Abrechnung kommt diese Frage hoch. Ganz blöd, wenn man mit Nachzahlungen überrascht wird (e soll schon Fälle gegeben haben, wo die Nachzahlung das komplette Urlaubsbudget aufgefressen hat). Dagegen kann man eine Menge tun. Gerade im Kontext der Home-Automation bieten sich hier sehr viele Möglichkeiten. Aber all das nützt nicht viel, wenn man nicht zeitnah sehen kann, ob und was die Bemühungen bringen. Und das nicht erst zum Vertragsende, sondern kontinuierlich während der gesamten Vertragslaufzeit! Und dann gibts da noch „Energieversorger“ a la „Flexstrom“, die ein gehöriges Risiko für den Verbraucher darstellen können. Um auch dieses Risiko zu minimieren, habe ich eine spezielle Strategie entwickelt. Und hier setzt dieses Projekt an: es visualisiert die Verbrauchsdaten (die über gewöhnliche Smartmeter gewonnen werden), berechnet daraus den zukünftigen Verbrauch und stellt am Ende Plan- und Istdaten gegenüber. Der Clou ist hier, dass diese Daten im 5-Minuten-Intervall (im Tagesforecast) sowie zum Ende eines Tages (Jahresbetrachtung) generiert werden.

kumulierte Verbrauchsentwicklung, verglichen mit Plan und Vorperiode

kumulierte Verbrauchsentwicklung, verglichen mit Plan und Vorperiode

Darüber hinaus werden Charts und Tabellen mit Daten zur gesamten Betrachtungsperiode (das kann ein Vertragsjahr oder ein Kalenderjahr sein) auf Monats- und Wochenbasis zur Verfügung gestellt. In den Charts sind weiterhin zum Vergleich die Verbrauchswerte der Vorperiode geplottet. Auch hier wieder eine Hilfe, um mittel- bis langfristig die Erfolgskontrolle von Einsparungsmaßnahmen zu monitoren. Der User bekommt somit ein Werkzeug an die Hand, mit dem er quasi in Echtzeit sein (hoffentlich präventives) Energiemanagement überprüfen kann. Damit weiß der Anwender lange vor der Jahresabrechnung des Energieversorgers, ob er Kredite aufnehmen muss oder durch Einsparungen ein neues Auto finanziert bekommt.

Prognose für Vertragsdaten der nachfolgenden 12 Monate (Empfehlung!)

Prognose für Vertragsdaten der nachfolgenden 12 Monate (Empfehlung!)

Und genau das bekommt man ganz unten links unter ‚Prognose für nachfolgende 12 Monate‘ im Klartext aufbereitet: Gesamtverbrauch, Gesamtkosten sowie empfohlener, monatlicher Abschlag werden mundgerecht aufbereitet. Das Ganze natürlich basierend auf den Vertragsparametern des laufenden Vertrages. Sehr hilfreich, wenn man z.B. kurz vor einem Vertragswechsel des Energieversorgers steht (insbesondere an diesem Punkt sei wieder auf meine Ausführungen zum Risikomanagement gegenüber den Energieversorgern hingewiesen ;-)).

Grundlagen

Wochentags-Vergleich (Statistik + Istwerte akt. Woche)

Wochentags-Vergleich (Statistik + Istwerte akt. Woche)

Nach dem ich schon ausgiebigst über die theoretischen Grundlagen des Tagesforecasts referiert hatte,  geht es nun (endlich) ans Eingemachte. Das unten Stehende fasst nochmal die grundlegende Aufgabe und Arbeitsweise des Projekts zusammen. Für ganz Ungeduldige  ganz unten der Download. Nicht unwichtig: wenn was nicht funktioniert: die FAQ-Abteilung des Projekts besuchen (und erst dann Fragen stellen ;-)

Zusammenfassung Forecast-Modell, Besonderheiten

Das Projekt splittet sich in 2 Parts: den Tagesforecast und den Gesamtforecast. Während der Tagesforecast nur dazu dient, den (voraussichtlichen) Verbrauch für heute zu ermitteln, beschäftigt sich der Gesamtforecast mit der gesamten Vertragslaufzeit (oder alternativ mit einem kompletten Kalenderjahr). Für den Tagesforecast wird der Verbrauchsdurchschnitt aller Stundenintervalle des heutigen Wochentages ermittelt. Berechnungsgrundlage sind die verg. 7 Wochen. Zusammen mit den Istwerten wird der Verbrauch des heutigen Tages im 5-Minuten Intervall im WFE visualisiert. Im Ergebnis bekommt man einen sehr präzisen Tagesforecast, auch schon früh am Morgen (mit einem arithmet. Durchschnittsmodell wäre das nicht möglich). Voraussetzung für eine hohe Forecast-Präzision ist allerdings ein halbwegs gleichmäßiges Verbrauchsverhalten der verg. 7 Wochen, bezogen auf den aktuellen Wochentag. Je dynamischer das Verbrauchsverhalten (immer bezogen auf den Wochentag) ist, desto ungenauer und weniger treffsicher wird der Tagesforecast. Für den Gesamtforecast wird zunächst der Durchschnittsverbrauch (genauer: der Median) eines jeden Wochentages aus den Verbräuchen der verg. 7 Wochen ermittelt. Dann wird der wochentags-indiviuelle Durchschnittsverbrauch für jeden Wochentag in der Zukunft aufsummiert. Ein solches Vorgehen hat den Vorteil, dass Ausreißer in den Verbrauchswerten weniger gewichtet einfließen. Weiterhin werden damit mittelfristige Tendenzen im Verbrauchsverhalten (z.B. Reduktion des Verbrauchsverhaltens) sehr gut berücksichtigt. Was jedoch weniger bis gar nicht berücksichtigt wird, sind saisonale Schwankungen. Dies wird ein Thema der nächsten Versionen des RS Energy Forecasts sein.

 

Beispiel-HighChart (Tagesforecast) vom 20.02.2013:

 

Beispiel-HighChart (Jahresforecast, Kalenderjahr) vom 20.03.2014:

 

 

Features

Chart des heutigen Tages mit Ist- und Forecast

Chart des heutigen Tages mit Ist- und Forecast

  • Erzeugt im 5 Minuten-Intervall einen aktuellen ForeCast des Stromverbrauchs für den aktuellen Tage.
  • Weiterhin wird eine Variable mit der prozentualen Abweichung (für den aktuellen Tag) zum Durchschnittsverbrauch befüllt (ebenfalls für weitere Auswertungen oder Visualisierungen).
  • Zusätzlich wird der Ist-Verbrauch (bis jetzt) für aktuelle Woche, aktuellen Monat und aktuelle Periode ermittelt und im WFE angezeigt
  • Diverse Statistik-Daten(Statistik-Tabelle, Wochentags-Vergleich)
  • Der User kann die Einheiten der Messgröße frei vorgeben (kWh, m³, kJ etc. etc.).
  • Kostenübersicht des Vertragsjahres: stellt monatlichen Verbrauch (Ist + Forecast), monatliche Kosten (Grundgebühr + Verbrauchskosten/Ist + Forecast), Monatspauschale Energieversorger, Boni sowie eigene Buchungen gegenüber
  • Prognose für Vertragsdaten der nachfolgenden 12 Monate (Empfehlung!)

    Prognose für Vertragsdaten der nachfolgenden 12 Monate (Empfehlung!)

    Prognose für nachfolgende 12 Monate: Auf Basis des Verbrauchs der verg. 7 Wochen wird eine Prognose für die nachfolgende Periode erstellt. Diese dient z.B. zur Unterstützung der Versorger-Auswahl, Preisvergleich etc. bei anstehendem Vertragswechsel
  • Die von IP-Symcon gelieferten Logging-Daten können mit einem frei wählbaren Scalefaktor multipliziert werden (z.B. Umrechnung der vom Zähler gelieferten Wattstunden in Kilowattstunden mit Scalefactor = 0.001).
  • Der User kann als Betrachtungszeitraum für den Ist-Verbrauch das Kalenderjahr (Start: 01.01.2013) oder einen Abrechnungszeitraum seines Energieversorgers wählen (z.B. 13.05. – 30.04.). Das Projekt rechnet Start- und End-Jahr selbständig aus
  • Online-Versionscheck: prüft 1x täglich, ob eine neue Version vorhanden ist. Benachrichtigung via Einblendung im Chart.
  • Das Installationsscript bringt eine unabhängige, eigenständige (auf der HighChartsPHP basierende), vollständige HighChart-Umgebung mit und installiert diese.

 

Showcase

Lieber was Buntes? Habbich auch! Hier geht’s zum lebenden Projekt in meiner Area51: HRS Energy Forecast (RS EFC) Passwort: RS_EFC

 

Voraussetzungen für Installation

Es muss eigentlich nur ein funktionierendes IP-Symcon vorhanden sein. Hilfreich ist ebenfalls ein bereits angebundener Stromzähler (Stichwort „smart Metering“) und geloggte Energieverbrauchswerte (das Modell arbeitet nur sinnvoll mit in regelmäßigen Intervallen gelieferten Daten, z.B. S0-Stromzählern). Die Loggingintervalle sollten bei max. 10 Minuten liegen. Kürzere Intervalle sind besser.

Fehlermeldungen der Projekt-Initialisierung (IPS-Konsole)

Fehlermeldungen der Projekt-Initialisierung (IPS-Konsole)

Bei Projektinitisalisierung wird die IPS-Umgebung auf Minimalanforderungen gecheckt. Werden diese Minimalanforderungen nicht erfüllt, bricht die Projektinitialisierung ab. Das Ergebnis sieht man dann im Meldungsfenster der IPS-Konsole. Im WFE sieht man dann nichts oder noch weniger.

Unvollständiges WFE nach Abbruch der Projekt-Initialisierung

Unvollständiges WFE nach Abbruch der Projekt-Initialisierung

Die Minimalanforderungen sind:

  • Datenbestand der auszuwertenden Variable > 7 Wochen (bei Standard-Konfiguration)
  • Aggregationstyp auszuwertenden Variable muss „Zähler“ sein
  • Loggingstatus auszuwertenden Variable (Variable muss geloggt werden)

Den Rest an Voraussetzungen bringt das Installationsscript (erstellt mit dem Project Exporter) mit: HighChart- Umgebung und 2 CSS-Files: eines für das HighChart WFE-Design und ein Design zur Darstellung des Charts in einer vom IPS unabhängigen Webseite.

 

Installation

Objektbaum RS Energy Forecast (RS EFC) V 1.8

Objektbaum RS Energy Forecast (RS EFC) V 1.8

Dank RS Project Exporter besteht dieses Projekt aus einem einzigen Installations-Script. Script ins eigene IPS-System integrieren, die richtige WFC-ID eintragen und los gehts. Dauert ca 60 Sekunden – und man hat ein vollständiges, lauffähiges RS Energy Forecast-Projekt in seinem System.

Trotzdem nochmal langsam und Schritt für Schritt:

  • Das Installations-Script aus dem Download ins eigene IP-Symcon laden WFC-ID (zur Installation der WFE-Objekte) angeben
  • Installations-Script ausführen WFE-Objekt „CpyRS_FCtoday“ im WF-Configurator vom Root in den gewünschten Teilbaum verschieben (sonst sieht man im WebFront nichts)
  • fertig

 

Update

Siehe Versionsdetails der jeweiligen Version

 

Konfiguration/Projektinitialisierung

  • individuelle Konfiguration im Script „User-Config“ vornehmen
  • Script einmalig manuell ausführen
  • fertig

 

Versions-Historie

V 0.1: Initial-Version

V 1.0: Versionsdetails

V 1.5: Versionsdetails

V 1.6: Versionsdetails

V 1.7: Versionsdetails

V 1.8: Versionsdetails

 

Nutzungsrechte

  • das Script darf für private, nicht kommerzielle Zwecke frei verwendet werden
  • eine Weitergabe oder Änderung sowie auszugsweise Verwendung des Codes nur nach schriftl. Genehmigung des Autors
  • für evtl. entstehende Schäden durch die Verwendung dieses Scripts wird keinerlei Haftung übernommen 
  • gewerbliche Nutzung nur in vorheriger Abstimmung mit dem Projektautor, bei Fragen bitte an MICH wenden

 

Quellen

  • HighChartsPHP – PHP Schnittstelle für HighCharts, adapiert für IP-Symcon Plattform
  • HighCharts – grafische, interaktive Visualisierung via HighCharts

FAQ RS Energy Forecast

wie erfahre ich, ob es ein Update gibt?

Alle Projekte auf Raketenschnecke.net sind ab 2013 mit einem Update-Info Modul ausgestattet. Ist eine neuere Version des Projekts verfügbar, wird eine Info über das WFE eingeblendet. Ausnahme: der Project Exporter hat keine WFE-Visualisierung, daher werden hier die Update-Informationen im Script-Meldungsfenster ausgegeben. Diese Info verschwindet nach einem erfolgreichen Update.

Versions- und Update-Infos werden immer über einen Blog-Artikel veröffentlicht, der mit der Projekt-Homepage verlinkt ist.

welche Voraussetzungen muss mein IP-Symcon erfüllen?

Der Energy-Forecast lebt von den Daten aus der Vergangenheit und Gegenwart.

Benötigter Zeitraum
Daher werden Verbrauchsdaten mindestens für die letzten 7 Wochen erwartet. Aus den Daten dieser 7 Wochen und den aktuellen berechnet sich der Tages-Forecast.
Daher ist ab Version 1.0 des Energy-Forecasts auch eine Datenmengenprüfung eingebaut, die die Projekt-Initialisierung abbricht, wenn Daten über weniger als 7 Wochen gefunden werden und der IPS-Logger installiert ist. Unter dieser Konstellation ist ein Abarbeiten der Scripte nicht möglich.

Benötigter Logging-Intervall
Weiterhin werden Loggingdaten in möglichst hoher, zeitlicher Auflösung benötigt. Der Loggingintervall sollte zwischen 1-5 Minuten liegen. Je feiner die zeitliche Auflösung, desto besser und zielgenauer das Forecast-Ergebnis.

IPS-Version

Im Download-Fenster ist die jeweilige IPS-Version angegeben, unter der das Projekt entwickelt wurde. Kleinere IPS-Versionen als angegeben sollten auch funktionieren – was aber nicht  garantiert werden kann.

Muss ich separat die Highcharts installieren/konfigurieren?

Nein!

Das Projekt wurde bewusst so entwickelt, dass die im Projekt benutzten HighCharts projektgebunden installiert und konfiguriert werden. Das heißt, das Projekt RS Energy Forecast bringt bei der Installation seine eigene Highchart-Installation mit und legt diese auch in einem für dieses Projekt separat angelegten Ordner an. Somit wird die Highcharts-Versionspflege ausschließlich über die Projektinstallation vorgenommen und ist damit völlig unabhängig von evtl. weiteren, durch den Anwender vorgenommenen Installationen.

Der Anwender kann während dessen völlig unbekümmert seine eigene, parallel existierende HighChart-Installation updaten, neu installieren, löschen etc. etc – die HighCharts im RS Energy Forecast bleiben davon unberührt.

Eine Konfiguration ist ebenfalls nicht notwendig, dies wird alles aus dem Projekt heraus erledigt und gesteuert.

Wo finde ich einen Download?

Keine Angst, Du bist nicht blind! Die Downloads sind (seit 16.11.2014) nur registrierten Usern zugänglich ;-)


 

22 Responses to RS IPS Energy Forecast (RS EFC)

  1. daniel sagt:

    tolle Projekte

  2. Reinhard Treutler sagt:

    Hallo Raketenschnecke,
    wenn auch verspätet alles Gute für 2016.
    Ich arbeite mich zur Zeit durch das IPS Community (auch Deine Beiträge) um bei mir zu Hause ein Energiemonitoring mit IPS aufzubauen.
    EKM ect. und einen Reedkontakt für den Gaszähler habe ich besorgt und in Betrieb genommen. Soll natürlich erweitert werden, wenn ich es im Griff habe.
    Hier bin ich auch auf Dein IPS Energy Forecast Projekt gestoßen. Da ich PHP Laie bin und mich einfach durch kämpfe weiß ich natürlich nicht ob dein Projekt für mich nicht oversized ist.
    Trotzdem wo kann man sich registrieren lassen um sich auch weiter zu informieren?

    Vielen Dank im Voraus

    Reinhard

  3. Florian Probst sagt:

    Hallo Raketenschnecke,

    leider funktioniert das Skript nicht mehr mit IPS 4.0. Alle vom Installer generierten Skripte beinhalten nur:

    Gibt’s hierfür schon nen Bugfix?

    Viele Grüße

    Florian

    • Raketenschnecke sagt:

      Hi Florian,
      Da in IPS 4.0 herstellerseitig viele Änderungen gemacht wurden (Datenbank-Umstellung von SQLite auf csv, Änderung vieler IPS-Systembefehle), funktionieren derzeit weder der RS Project Exporter noch die Projekte unter IPS 4.0. Geplant ist aber, zum Zeitpunkt des Erscheinens einer stabilen IPS 4.0 die RS-Projekte auf den aktuellen Stand zu bringen.

  4. Jens sagt:

    Hallo Raketenschnecke,
    danke das den Zugang. Ich habe eine Frage.
    Ich möchte gerne dein IPS Energy Script benutzen habe aber einen Stromzähler der Analog funktioniert. Somit habe ich mir den Youless LS110 gekauft und bekomme jetzt den Zählerstand und den Momentanen Verbrauch. Kann ich diesen Irgendwie in dem Script benutzen du schreibst ja ich brauche eine Zähler Variable?

    Danke für deine Mühe.

  5. Raketenschnecke sagt:

    Hi Jens,
    sobald der Zählerstand in eine geloggte IPS-Variable (Aggregations-Typ ‚Zähler‘) geschrieben wird, ist die Voraussetzung für die Nutzung des RS Energy Forecast erfüllt.

  6. Jens sagt:

    Super Danke.!

  7. Marco Bender sagt:

    Hallo,

    ich würde gerne mal dein Forecast Script ausprobieren und mich dafür gerne anmelden.
    Da ich noch nicht weis ob es vielleicht zu schwer einzurichten ist für einen Neuling.
    […..]

    Vielen Dank

  8. Stefan Schliesch sagt:

    Hallo,

    da gibts doch tatsächlich ein Update was an mir vorbei gegangen ist…wo findet man eigentlich den Registrier-Button oder läuft das mehr oder weniger über Zuruf ab?

    MfG

  9. Reinhard sagt:

    Hallo Raketenschnecke,
    ich habe Dein Energy Forecast erfolgreich für meinen Stromzähler in Betrieb :-).
    Wären für meine Gas und Wasserzähler zwei parallele Installationen nötig?
    Werden eventuell Daten überschrieben??

    Das macht mir etwas Sorge.
    Kann man die Namen bei der Installation anpassen?

    • Raketenschnecke sagt:

      Hi Reinhard,
      mit jeder RS Energy Forecast-Installation kannst Du genau einen beliebigen Zähler auswerten. Willst Du mehrere Zähler auswerten, installierst Du für jeden weiteren Zähler ein weiteres Mal den RS Energy Forecast. Die installierten RS Energy Forecast-Projekte arbeiten völlig gekapselt und unabhängig voneinander.
      Welchen Namen möchtest Du denn anpassen?

  10. Reinhard sagt:

    Hallo Raketenschnecke,
    danke für die schnelle Antwort, mir ging es darum das durch namensgleichheit bei der Installation Probleme entstehen könnten.
    Wenn aber jede Installation autark ist, wird das wohl kein Problem.
    Wollte eine Kategorie Strom die andere Gas …. benennen, funktionieren die Links dann noch????

    Danke

    Reinhard

    • Raketenschnecke sagt:

      Wenn Du Kategorien (= Ordner) im IPS-Objektbaum umbenennen willst, ist das überhaupt kein Problem. In meinen Projekten wird fast ausschließlich über die Objekt-ID referenziert. Daher ist die Namensgebung egal.
      Ausnahme: bei Updates werden die Objektnamen durch das Installerscript wieder in den Original-Zustand versetzt.

      Weitere Infos habe ich eben per mail an Dich geschickt ;-)

  11. Alex sagt:

    Hallo Andreas,

    kann es sein das der Energy Forecast unter IPS4.0
    aktuell noch nicht funktioniert ? Er meldet immer
    nicht genügend Daten aber schon paar Tage.

    Grüße Alex

  12. Jens sagt:

    Hallo Raketenschnecke, ich habe dein Script nun seit Feb, laufen. Ich habe eine Frage, meinen Zählerstand hole ich mir über einen Ferraris Leser von Youless in 10Sec Abständen in IPsymcon als Float in kWh als Zähler-variable. Irgendwie habe ich aber einen Sehr hohen Stromverbrauch laut deinem Script. Bei einer Zäher-variable werden doch immer nur die Unterschiede beachtet oder ich habe in der config den Faktor auf 0.001. Laut der Berechnung würde ich einen Stromverbrauch vom 10.000 kWh bekommen. Mein Verbrauch liegt aber so bei 4000 im Jahr. Der Leser kann den Momentanen Verbrauch sowie den Zählerstand ausgeben, mache ich etwas falsch. Kannst Du mir helfen Danke.

  13. Marco Bender sagt:

    Hallo, wenn ich das Installationsscript starte und dieses durchläuft sind nachher alle angelegten Scripte leer.
    Gibt es da schon einen Tipp bzw. eine Lösung für? Im Einsatz habe ich die IPS Version 4.0 auf einem Raspberry Pi 2.
    Schönen Gruß

    • Raketenschnecke sagt:

      Hi Marco,
      der RS Energy Forecast ist unter IPS 3.1/Windows entwickelt worden (siehe auch Angaben zur Version im Download-Block). Da sich unter Linux z.B. alle Pfade ändern, läuft der RS Energy Forecast logischerweise nicht unter Linux.
      Hier ist eine größere Anpassung sowohl im Project Exporter (ist teilweise bereits erfolgt) als auch im RS Energy Forecast selbst erforderlich.
      Hier bitte ich um etwas Geduld (solange ich selbst nicht auf IPS 40. migriert habe, wird das eher nichts)

  14. Stefan Heinrich sagt:

    Hallo Andreas
    Ich bekomme folgende Fehlermeldung.
    “ Undefined variable: Vorperiode_Daily_cum“ beim Ausführen des Scriptes „RS EFC Jahresforecast cum“

    Ich benutze IPS Version 4.1 .
    Kann es daran liegen oder habe ich einen Fehler gemacht.

    Mfg Stefan

  15. Bernd sagt:

    Moin,
    bei mir läuft schon die Installation unter 4.1 RC3 auf Fehler.
    Hast Du das schon einmal getestet ?
    Wenn nein – nicht schlimm – habe Zeit.
    Bernardo71

  16. Ringo sagt:

    Hallo, ich beschäftige mich erst seit kurzem mit IPS. Ich konnte auch schon einiges umsetzten. Was mir nun noch fehlt ist die Erfassung meines Energieverbrauchs Strom, Gas sowie der Stromerzeugung. Ich nutze dazu 1wire Zählermodule um den Strombezug, die Stromlieferung, die Stromerzeugung und den Gasverbrauch zu messen. Was mir in IPS fehlt ist eine vernünftige Auswertung und Visualisierung des Ganzen. Ich bewundere deine Erfahrungen und Fähigkeiten mit IPS, davon bin ich weit entfernt, daher suche ich fertige Lösungen die ich nutzen kann. So bin ich auch auf deine Projekte gekommen und bin biestert. Meine Frage ist, ob ich dein IPS Energy Forecast für meine Einsatzzwecke nutzen kann oder ist es eher ungeeignet?

    Grüße
    Ringo

  17. Norman Klinge sagt:

    Hi Raketenschnecke,

    obwohl ich schon lange Deinen RS RainRadar einsetzte, habe ich erst jetzt den Energy Forecast für mich entdeckt.
    Und ich bin begeistert. Hast Du super gemacht, vor allem die Grafiken finde ich toll. :-))

    Nun zu meiner Frage.
    Mein Energieverbrauch kommt von einem All3691. Dieser liefert Werte pro Leiter, also L1 L2 und L3. Nun logge ich diese Werte schon seit Jahren einzeln.
    Gibt es eine Möglichkeit die für die Auswertung zusammen zu fassen? Ich möchte ungern 3 mal das Script installieren.

    Viele Grüße
    Norman

Schreibe einen Kommentar zu Jens Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

css.php