Die CCU ist auf das beschränkt, was sie tun soll. Geräte schalten und regeln. Weil die Datenablage der CCU sich auf eine SD-Karte verlässt, kann’s mitunter wackelig werden. Es bekommt ja niemand mit, wenn die SD mal kaputt ist. Auf der mit beschränkter Performance versehenen CCU2 selbst lässt sich auch recht wenig machen. Geht aber doch!
Sinnvoll ist da die externe Software in einer VM von Matthias Dzionsko. Ich habe dann auch mal aufgeschrieben, wie ich mein Wetter auf die Webseite bekomme, das Ergebnis findest Du hier: Link.
Benötigt
- CCU2
- HM-WDS10-TH-O oder HM-WDS100-C6-O-2
- Debian/Ubuntu VM, 1vCPU, 512MB oder Raspberry PI
- CCU-Historian
- 1/2 Stunde Zeitaufwand
Hinweis: Der Klingelbeutel von Matthias Dzionsko befindet sich hier.
Hütte für CCU-Historian vorbereiten
Man nehme z.B. ein nacktes Debian oder Ubuntu – in diesem Fall ein 16.04.
Alles nachfolgende im Kontext sudo
sudo -s
Alle Updates und Upgrades draufbürsten, anschließend aufräumen.
apt-get -y update; apt-get -y upgrade; apt-get -y dist-upgrade; apt-get -y autoremove; apt-get -y autoclean
Notwendig ist vorab Java 18 (JRE 1.8), also prüfen und draufspielen:
java -version apt-get install openjdk-8-jre icedtea-8-plugin
CCU-Historian installieren
CCU-Historian herunterladen und entpacken:
mkdir /opt/ccu-historian cd /opt/ccu-historian wget https://github.com/mdzio/ccu-historian/releases/download/2.0.0-beta.3/ccu-historian-2.0.0-beta.3-bin.zip unzip ccu-historian-2.0.0-beta.3-bin.zip
(Anmerkung: Das kann bereits veraltet sein – prüfe auf https://github.com/mdzio/ccu-historian/ nach, ob sich nicht was neueres findet!)
Konfigurationsdatei erstellen
nano /opt/ccu-historian/ccu-historian.config
und Nachfolgendes hinterlegen:
// CCU-Historian Konfiguration // // Hinweise: // Kommentarzeilen starten mit zwei Schrägstrichen (//). Alle Zeichen nach den Schrägstrichen // werden ignoriert. Zeichenketten als Optionswert müssen von einfachen Anführungszeichen (') // umschlossen sein. Weitere Informationen sind auch im Abschnitt 3 des Handbuchs zu finden. // // Liste der zur Verfügung stehen Konfigurationsoptionen mit ihren jeweiligen Standardwerten: // // logSystem.consoleLevel=Level.INFO // logSystem.fileLevel=Level.OFF logSystem.fileName='/opt/ccu-historian/ccu-historian-%g.log' // logSystem.fileLimit=1000000 // logSystem.fileCount=5 // logSystem.binRpcLevel=Level.WARNING database.dir='/opt/ccu-historian/data' // database.name='history' // database.user='sa' // database.password='ccu-historian' // database.backup='' // database.webEnable=true database.webPort=8082 database.webAllowOthers=true // database.tcpEnable=false // database.tcpPort=9092 // database.tcpAllowOthers=false // database.pgEnable=false // database.pgPort=5435 // database.pgAllowOthers=false webServer.port=80 webServer.dir='/opt/ccu-historian/webapp' // webServer.logLevel=Level.WARNING webServer.historianAddress='<IP-DES-SERVERS-AUF-JENEM-CCU-HISTORIAN-INSTALLIERT-IST>' // webServer.trendDesigns ... (s.a. Abschnitt 7.4.1 im Handbuch) // webServer.apiKeys=[] // webServer.menuLinks ... (s.a. Abschnitt 4.4 im Handbuch) // historian.metaCycle=3600000 // 1 Stunde // historian.bufferCount=5000 // historian.bufferTime=0 // devices.historianBinRpcPort=2099 // devices.historianXmlRpcPort=2098 devices.historianAddress='<IP-DES-SERVERS-AUF-JENEM-CCU-HISTORIAN-INSTALLIERT-IST>' // eigene IP-Adresse automatisch ermitteln // // Für jede Zentrale bzw. jedes Gerät müssen folgende zwei Optionen gesetzt werden // (s.a. Abschnitt 3.2 im Handbuch): // devices.device<Nr.>.type=<CCU1, CCU2 oder BINRPC> // devices.device<Nr.>.address='<IP-Adresse>' // // Optional können noch folgende Optionen gesetzt werden: // devices.device<Nr.>.plugin<Nr.>.type=<CUXD oder HMWLGW> // devices.device<Nr.>.sysVarDataCycle=30000 // devices.device<Nr.>.reinitTimeout=300000 // devices.device<Nr.>.writeAccess=false // devices.device<Nr.>.watchdogProgram='' // devices.device<Nr.>.watchdogCycle=300000 // 5 Minuten // Bei Anbindung von mehreren Zentralen muss ein Präfix je Zantrale gesetzt werden! // devices.device<Nr.>.prefix='' // // Es muss im Folgenden mindestens eine Zentrale bzw. Gerät konfiguriert werden: // Typ der Zentrale: CCU1 oder CCU2 devices.device1.type=CCU2 // IP-Adresse der Zentrale devices.device1.address='<IP-DER-HOMEMATIC-CCU>' // Falls CUxD verwendet wird, die Kommentarzeichen (//) vor folgender Zeile entfernen: // devices.device1.plugin1.type=CUXD // Falls das HomeMatic Wired LAN Gateway verwendet wird, die Kommentarzeichen (//) vor // folgender Zeile entfernen: // devices.device1.plugin1.type=HMWLGW // Falls CUxD UND das HMWLGW verwendet wird, die Kommentarzeichen (//) vor folgenden // zwei Zeilen entfernen: // devices.device1.plugin1.type=CUXD // devices.device1.plugin2.type=HMWLGW // Zum Freischalten der Web-Links zu den Beispiel-Web-Seiten, die Kommentarzeichen (//) vor folgenden // zwei Zeilen entfernen: // webServer.menuLinks.link1.text='Beispiel 1 - Vorjahresvergleich' // webServer.menuLinks.link1.address='/custom/example1.html'
(Anmerkung: Die mit <Klammern> hinterlegten Werte mögest Du bitte durch korrekte Werte ersetzen)
Anschließend kannst Du testen, ob’s klappt:
java -jar /opt/ccu-historian/ccu-historian.jar -config /opt/ccu-historian/ccu-historian.config
Schau Dir das Startprotokoll an. Vielleicht hast Du ein ‚ vergessen oder etwas noch nicht richtig in der Konfigurationsdatei hinterlegt. Sofern da nichts schräges geschrieben steht (Java passt, Webserver ist gestartet), öffnest Du die Website
http://<IP-DER-UBUNTU-HÜTTE-MIT-CCU-HISTORIAN/
und wechselst in die Datenpunktkonfiguration
und deaktivierst alle Elemente, die Du nicht brauchst (setze den Haken auf inaktiv + versteckt). Diesen Vorgang musst Du ggf. noch ein paar mal wiederholen, da die Datenpunkte erst nach und nach ausgelesen werden. Möglicherweise ist Deine homematic-umgebung auch noch größer als meine, dann wiederholst Du den Schritt noch öfter.
Anschließend wechselst Du in //Werkzeuge/“Historian Konfiguration“ und vergibst ein Kennwort.
CCU-Historian als Dienst bereitstellen
Nachfolgende Datei erstellen
nano /opt/ccu-historian/ccuservice.sh
Und diesen Inhalt hineinkippen:
#!/bin/sh sudo java -jar /opt/ccu-historian/ccu-historian.jar -config /opt/ccu-historian/ccu-historian.config
Anschließend ausführbar machen:
sudo chmod u+x /opt/ccu-batch/ccuservice.sh
Jetzt den Dienst anlegen:
nano /etc/systemd/system/ccu-historian.servicenano /etc/systemd/system/ccu-historian.service
Und wie folgt konfigurieren:
[Unit] Description=CCU-Historian Service [Service] User=root # The configuration file application.properties should be here: #change this to your workspace WorkingDirectory=/opt/ccu-historian/ #path to executable. #executable is a bash script which calls jar file ExecStart=/opt/ccu-historian/ccuservice.sh SuccessExitStatus=143 TimeoutStopSec=10 Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target
und passend ändern:
chmod u+x /opt/ccu-batch/ccuservice
Dienste neu laden:
systemctl daemon-reload
Dienst starten
systemctl start ccu-historian
Schauen, ob alles gut ist
systemctl status ccu-historian
Exportroutine erstellen
folgendes anlegen
nano /opt/ccu-batch/ccucache.sh
und wie folgt beschreiben
#!/bin/sh performcache(){ local url=$2 local name=$1 local now="$(date --rfc-3339=ns)" echo $now - $name Starting local start_time=`date +%s` sudo wget -q -O "/opt/ccu-historian/webapp/cache/temp.png" "$url" sudo mv /opt/ccu-historian/webapp/cache/temp.png /opt/ccu-historian/webapp/cache/${name}.png local end_time=`date +%s` now="$(date --rfc-3339=ns)" echo $now - $name End with `expr $end_time - $start_time` sec echo "\"${now}\";\"${name}\";\"`expr $end_time - $start_time`\"" >> /opt/ccu-historian/webapp/cache/protokol.csv } echo Start caching CCU-historian images performcache temp_day "http://localhost/query/trend.gy?i=13&d=1D" performcache temp_week "http://localhost/query/trend.gy?i=13&d=1W" performcache temp_month "http://localhost/query/trend.gy?i=13&d=1M" performcache temp_year "http://localhost/query/trend.gy?i=13&d=1Y" performcache humi_day "http://localhost/query/trend.gy?i=7&d=1D" performcache humi_week "http://localhost/query/trend.gy?i=7&d=1W" performcache humi_month "http://localhost/query/trend.gy?i=7&d=1M" performcache humi_year "http://localhost/query/trend.gy?i=7&d=1Y" performcache dew_day "http://localhost/query/trend.gy?i=12&d=1D" performcache dew_week "http://localhost/query/trend.gy?i=12&d=1W" performcache dew_month "http://localhost/query/trend.gy?i=12&d=1M" performcache dew_year "http://localhost/query/trend.gy?i=12&d=1Y" exit
Die Bilder in „performcache“ werden nach der ID und der Zeit definiert. also
i=Historian-ID d=Zeit
Die Datenpunkt-ID bekommst Du heraus, wenn Du Deinen Datenpunkt auswählst und anschließend die Details ansiehst:
Nachdem Du die Datenpunkte hinterlegt hast, musst Du noch ausführbar machen:
chmod +x /opt/ccu-batch/ccucache.sh
Anschließend erstellst Du einen Batch für das Hochladen der generierten Images
nano /opt/ccu-batch/ftpupload.sh
und befüllst ähnlich:
curl -T /opt/ccu-historian/webapp/cache/dew_day.png ftp://webserverurl/verzeichnis --user ftpbenutzer:ftpkennwort curl -T /opt/ccu-historian/webapp/cache/dew_week.png ftp://webserverurl/verzeichnis --user ftpbenutzer:ftpkennwort curl -T /opt/ccu-historian/webapp/cache/dew_month.png ftp://webserverurl/verzeichnis --user ftpbenutzer:ftpkennwort curl -T /opt/ccu-historian/webapp/cache/dew_year.png ftp://webserverurl/verzeichnis --user ftpbenutzer:ftpkennwort curl -T /opt/ccu-historian/webapp/cache/humi_day.png ftp://webserverurl/verzeichnis --user ftpbenutzer:ftpkennwort curl -T /opt/ccu-historian/webapp/cache/humi_week.png ftp://webserverurl/verzeichnis --user ftpbenutzer:ftpkennwort curl -T /opt/ccu-historian/webapp/cache/humi_month.png ftp://webserverurl/verzeichnis --user ftpbenutzer:ftpkennwort curl -T /opt/ccu-historian/webapp/cache/humi_year.png ftp://webserverurl/verzeichnis --user ftpbenutzer:ftpkennwort curl -T /opt/ccu-historian/webapp/cache/temp_day.png ftp://webserverurl/verzeichnis --user ftpbenutzer:ftpkennwort curl -T /opt/ccu-historian/webapp/cache/temp_week.png ftp://webserverurl/verzeichnis --user ftpbenutzer:ftpkennwort curl -T /opt/ccu-historian/webapp/cache/temp_month.png ftp://webserverurl/verzeichnis --user ftpbenutzer:ftpkennwort curl -T /opt/ccu-historian/webapp/cache/temp_year.png ftp://webserverurl/verzeichnis --user ftpbenutzer:ftpkennwort
und machst ausführbar:
chmod +x /opt/ccu-batch/ftpupload.sh
Anschließend kannst Du beide ausprobieren:
/opt/ccu-batch/ccucache.sh /opt/ccu-batch/ftpupload.sh
Wenn das funktioniert, hinterlegst Du als Cronjob
crontab -e
Ich nutze ganz gerne nano, aber das kannst Du halten wie ein Dachdecker. Die Config sieht dann so aus:
*/15 * * * * /opt/ccu-batch/CCU-cache.sh */17 * * * * /opt/ccu-batch/ftpupload.sh
Das wär’s soweit. Das ganze Ergebnis siehst Du hier: https://www.johnlose.de/wetterdaten/
Anmerkungen zu WordPress, Jetpack und W3TotalCache:
Es ist zweckdienlich, die Bilder aus dem Caching auszunehmen, da sonst veraltete Daten angezeigt werden.
- W3Totalcache – siehe //Performance/Page Cache/Never cache the following pages/
- Jetpack: Passe die functions.php Deines Templates an, so dass Bilder nicht von Photon Cache festgehalten werden: Link
Grundlagen: