Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
fun:energie-funk-mess-system_em_1000 [27.07.2012 12:11. ] – [erste Konfiguration] django | fun:energie-funk-mess-system_em_1000 [08.10.2020 07:14. ] (aktuell) – [Apache V-Host mit Authentifizierung] django | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Energie-Funk-Mess-System EM 1000 ====== | ||
+ | {{ : | ||
+ | Zum Überwachen des Gas- und Stromverbrauchs nutze ich seit Januar 2009 das [[http:// | ||
+ | |||
+ | ===== Hardware ===== | ||
+ | {{: | ||
+ | |||
+ | Das **// | ||
+ | ==== CentOS 7.x ==== | ||
+ | |||
+ | Informationen über den Energie-Monitor können wir mit Hilfe des Befehls '' | ||
+ | |||
+ | # usb-devices | ||
+ | < | ||
+ | |||
+ | T: Bus=02 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 2 Spd=12 | ||
+ | D: Ver= 1.10 Cls=00(> | ||
+ | P: Vendor=0403 ProdID=e0ef Rev=02.00 | ||
+ | S: Manufacturer=ELV AG | ||
+ | S: Product=ELV EM 1010 PC | ||
+ | C: #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=44mA | ||
+ | I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=ftdi_sio | ||
+ | |||
+ | ... | ||
+ | </ | ||
+ | |||
+ | Mit dem Befehl **'' | ||
+ | |||
+ | # lshw -C generic | ||
+ | < | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | bus info: usb@2:2 | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | Mit Hilfe des Befehls '' | ||
+ | # lsusb | ||
+ | |||
+ | Bus 002 Device 002: ID 0403:e0ef Future Technology Devices International, | ||
+ | |||
+ | Zur Kommunikation mit dem Messadapter erfolgt über die zugehörig angelegte Geräte-Datei **''/ | ||
+ | # ls -alF / | ||
+ | |||
+ | crw-rw----. 1 root dialout 188, 0 Oct 7 21:15 / | ||
+ | |||
+ | ===== Software ===== | ||
+ | ==== Perl Bibliotheken ==== | ||
+ | Zum Kommunikation unseres Servers mit dem **Energie-Funk-Mess-System EM 1000** verwenden wir das Projekt **[[http:// | ||
+ | # yum install perl-Device-SerialPort perl-Time-HiRes perl-Compress-Zlib -y | ||
+ | |||
+ | Da wir später die Messergebnisse auch in unserer **[[centos: | ||
+ | # yum install perl-DBI perl-DBD-MySQL -y | ||
+ | |||
+ | ==== FHEM ==== | ||
+ | === Download === | ||
+ | Als erstes laden wir uns das aktuelle **[[https:// | ||
+ | |||
+ | Hierzu legen wir uns erst noch den entsprechenden Zielordner an, falls noch nicht erfolgt. | ||
+ | # mkdir / | ||
+ | |||
+ | Dann wechseln wir in das Verzeichnis. | ||
+ | # cd / | ||
+ | |||
+ | Im nächsten Schritt holen wir uns nun mit Hilfe von **wget** das entsprechende Programmarchiv. | ||
+ | # wget http:// | ||
+ | |||
+ | Zu gute Letzt entpacken wir das Archiv, verschieben den Ordner an Ort und Stelle und verlinken diesen entsprechend noch. | ||
+ | # tar zxvf fhem-6.0.tar.gz -C / | ||
+ | |||
+ | # ln -s / | ||
+ | |||
+ | === System-Konfiguration === | ||
+ | Zunächst legen wir uns einen Systemuser an, unter dem später der Daemon mit den passenden Rechten laufen wird. Die **'' | ||
+ | |||
+ | # adduser --no-create-home --gid dialout --uid 977 --shell / | ||
+ | |||
+ | # ls -alF / | ||
+ | |||
+ | crw-rw----. 1 root dialout 188, 0 Oct 7 21:15 / | ||
+ | |||
+ | Für die Logdateien legen wir ein zugehöriges Verzeichnis an und weisen die Rechte dem System-User **'' | ||
+ | # mkdir / | ||
+ | # chown fhem: | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | /* | ||
+ | === Installation === | ||
+ | Die Installation beschließen wir nun nur noch mit folgendem Aufruf: | ||
+ | # make install-pgm2 | ||
+ | < | ||
+ | perl / | ||
+ | |||
+ | |||
+ | mkdir -p /usr/bin / | ||
+ | mkdir -p / | ||
+ | cp fhem.pl /usr/bin | ||
+ | cp -r FHEM / | ||
+ | rm -rf examples_changed | ||
+ | cp -r examples examples_changed | ||
+ | perl -pi -e ' | ||
+ | perl -pi -e ' | ||
+ | mv / | ||
+ | mv: cannot stat `/ | ||
+ | make: [install-base] Error 1 (ignored) | ||
+ | cp examples_changed/ | ||
+ | cp -rp contrib / | ||
+ | cp -rp docs/* / | ||
+ | cp docs/ | ||
+ | gzip -f -9 / | ||
+ | cp -r webfrontend/ | ||
+ | cp docs/ | ||
+ | cp docs/*.png docs/*.jpg / | ||
+ | cd examples_changed; | ||
+ | cp examples_changed/ | ||
+ | </ | ||
+ | */ | ||
+ | === Stationswerte abfragen === | ||
+ | Für die ersten Schritte scheint das Paket [[https:// | ||
+ | |||
+ | Einen ersten Testabruf der Stationsdaten erfolgt mittels **'' | ||
+ | # / | ||
+ | |||
+ | | ||
+ | |||
+ | Unseren ersten Stromzähler - der mit der ID 1 - fragen wir also wie folgt ab: | ||
+ | # / | ||
+ | < | ||
+ | Nr devs (off 6): 1 | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | total energy | ||
+ | Alarm PA (off 45): 0 W | ||
+ | Price CF (off 47): 0.15 EUR/kWh | ||
+ | | ||
+ | RAW 0300 3702 0000 0143 0d00 0035 2307 00a0 | ||
+ | RAW 0180 aeb7 b9ab b997 b300 00ae b98b b98b | ||
+ | RAW b959 0000 00ad 0600 0043 0d00 0000 00dc | ||
+ | RAW 05dc 05 | ||
+ | </ | ||
+ | |||
+ | ====== FHEM - GPL'd Server für die Haus Automation ====== | ||
+ | Im weiteren Verlauf betrachten wie nun das Softwareprojekt [[https:// | ||
+ | - Haus-Stromzähler | ||
+ | - EDV-Schrank-Stromzähler | ||
+ | - Gaszähler | ||
+ | laufend abfragen und die Meßwerte in unsere vorhandene MySQL-Datenbank ablegen und später graphisch aufbereiten. | ||
+ | |||
+ | ===== Konfiguration ===== | ||
+ | ==== erste Konfiguration ==== | ||
+ | Als erstes passen wir die mitgelieferte Konfigurationsdatei unseren individuellen Gegebenheiten an: | ||
+ | # cp / | ||
+ | # vim / | ||
+ | |||
+ | <file bash / | ||
+ | attr global logfile / | ||
+ | # FHEM Arbeits-Verzeichnis | ||
+ | attr global modpath / | ||
+ | # " | ||
+ | attr global verbose 3 | ||
+ | # statefile in dem die Stati der Geräte gesichert werden | ||
+ | attr global statefile / | ||
+ | |||
+ | # FHEM-MOTD deaktiviert | ||
+ | attr global motd none | ||
+ | |||
+ | # Globaler Port der WEB-GUI | ||
+ | define WEB FHEMWEB 8083 global | ||
+ | |||
+ | # WEB-GUI absichern | ||
+ | define allowedWEB allowed | ||
+ | attr allowedWEB validFor WEB, | ||
+ | attr allowedWEB basicAuth { " | ||
+ | attr allowedWEB allowedCommands set,get | ||
+ | |||
+ | # Fake FileLog Eintrag, für denm Zugriff über die WEB-GUI FHEMWEB | ||
+ | define Logfile FileLog ./ | ||
+ | |||
+ | define autocreate autocreate | ||
+ | attr autocreate filelog ./ | ||
+ | |||
+ | define eventTypes eventTypes ./ | ||
+ | |||
+ | # Disable this to avoid looking for new USB devices on startup | ||
+ | define initialUsbCheck notify global: | ||
+ | |||
+ | # Definitionen der Messpunkte | ||
+ | define EM EM / | ||
+ | define Hauptzaehler EMWZ 1 | ||
+ | define Gaszaehler EMGZ 9 | ||
+ | define EDV_Schrank EMEM 5 | ||
+ | </ | ||
+ | |||
+ | ==== Paketfilter/ | ||
+ | Damit wir später von den berechtigten Hosts Verbindungen zu unserem **FHEM-Daemon** aufbauen können, müssen wir für diese noch Änderungen am Paketfilter **firewalld** vornehmen. | ||
+ | |||
+ | Unter **CentOS 7** wird als Standard-Firewall die dynamische **firewalld** verwendet. Ein großer Vorteil der dynamischen Paketfilterregeln ist unter anderem, dass zur Aktivierung der neuen Firewall-Regel(n) nicht der Daemon durchgestartet werden muss und somit alle aktiven Verbindungen kurz getrennt werden. Sondern unsere Änderungen können **// | ||
+ | |||
+ | In unserem Konfigurationsbeispiel hat unser Server, an dem der Energie-Monitor via USB-Kabel angeschlossen ist die IP-Adresse **'' | ||
+ | Mit Hilfe des Programms **firewall-cmd** legen wir nun eine **permanente** Regel in der Zone **public**, dies entspricht in unserem Beispiel das Netzwerk-Interface **eth0** mit der IP **10.0.0.27** an. Als Source-IP geben wir die IP-Adresse unseres WEB-/ | ||
+ | # firewall-cmd --permanent --zone=external --add-rich-rule=" | ||
+ | |||
+ | Zum Aktivieren brauchen wir nun nur einen reload des Firewall-Daemon vornehmen. | ||
+ | # firewall-cmd --reload | ||
+ | |||
+ | Fragen wir nun den Regelsatz unserer **iptables**-basieten Firewall ab, finden wir in der Chain **IN_public_allow** unsere aktive Regel. | ||
+ | # iptables -nvL IN_external_allow | ||
+ | |||
+ | < | ||
+ | pkts bytes target | ||
+ | 0 0 ACCEPT | ||
+ | | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Programmstart ===== | ||
+ | Wir starten nunmehr zum ersten mal **FHEM**. | ||
+ | # perl / | ||
+ | |||
+ | Im Logfile **/ | ||
+ | <file / | ||
+ | 2020.10.07 22:37:18 3: WEB: port 8083 opened | ||
+ | 2020.10.07 22:37:18 1: define Logfile FileLog ./ | ||
+ | 2020.10.07 22:37:18 2: eventTypes: loaded 0 events from ./ | ||
+ | 2020.10.07 22:37:18 3: EM opening device / | ||
+ | 2020.10.07 22:37:18 3: EM opened device / | ||
+ | </ | ||
+ | |||
+ | In der Prozessliste finden wir das laufende Programm ebenso: | ||
+ | # ps aux | grep fhem | ||
+ | |||
+ | fhem | ||
+ | |||
+ | Mit dem Befehl **netstat -tulpen** können wir auch noch überprüfen, | ||
+ | # netstat -tulpen | grep 808 | ||
+ | |||
+ | | ||
+ | |||
+ | Nun rufen wir die Statusseite von **// | ||
+ | $ firefox http:// | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Über den Menüpunkt [**Everything**] können wir uns die Detail zu unserem Gerät anzeigen lassen. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Über den FHEM-Befehl **shutdown** können wir unseren ersten Test beenden. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Im Logfile wird uns dies entsprechend quittiert: | ||
+ | | ||
+ | |||
+ | Der status unseres FHEM-Gerätes wurde in der Logdatei // | ||
+ | # cat / | ||
+ | |||
+ | <file / | ||
+ | setstate EDV_Schrank 2020-10-07 22:44:10 5min_pulses 29 | ||
+ | setstate EDV_Schrank 2020-10-07 22:44:10 5min_pulses_max 32 | ||
+ | setstate EDV_Schrank 2020-10-07 22:44:10 alarm_PA_W 0 | ||
+ | setstate EDV_Schrank 2020-10-07 22:44:10 energy_kWh 429.247 | ||
+ | setstate EDV_Schrank 2020-10-07 22:44:10 energy_kWh_d 7.140 | ||
+ | setstate EDV_Schrank 2020-10-07 22:44:10 energy_kWh_h 0.296 | ||
+ | setstate EDV_Schrank 2020-10-07 22:44:10 energy_kWh_w 49.657 | ||
+ | setstate EDV_Schrank 2020-10-07 22:44:10 power_kW 0.290 | ||
+ | setstate EDV_Schrank 2020-10-07 22:44:10 power_kW_max 0.320 | ||
+ | setstate EDV_Schrank 2020-10-07 22:44:10 price_CF 0.150 | ||
+ | setstate Gaszaehler 0 m3ph | ||
+ | setstate Gaszaehler 2020-10-07 22:44:10 5min_pulses 0 | ||
+ | setstate Gaszaehler 2020-10-07 22:44:10 Rperm3_EC 100 | ||
+ | setstate Gaszaehler 2020-10-07 22:44:10 act_flow_m3 0.000 | ||
+ | setstate Gaszaehler 2020-10-07 22:44:10 alarm_PA 0 Watt | ||
+ | setstate Gaszaehler 2020-10-07 22:44:10 cum_m3 0.000 | ||
+ | setstate Gaszaehler 2020-10-07 22:44:10 m3ph 0.000 | ||
+ | setstate Gaszaehler 2020-10-07 22:44:10 price_CF 0.630 | ||
+ | setstate Hauptzaehler 0.56 kW | ||
+ | setstate Hauptzaehler 2020-10-07 22:44:10 5min_pulses 7 | ||
+ | setstate Hauptzaehler 2020-10-07 22:44:10 RperKW_EC 150 | ||
+ | setstate Hauptzaehler 2020-10-07 22:44:10 alarm_PA 0 Watt | ||
+ | setstate Hauptzaehler 2020-10-07 22:44:10 cum_kWh 0.047 | ||
+ | setstate Hauptzaehler 2020-10-07 22:44:10 energy 0.047 | ||
+ | setstate Hauptzaehler 2020-10-07 22:44:10 power 0.560 | ||
+ | setstate Hauptzaehler 2020-10-07 22:44:10 price_CF 0.150 | ||
+ | setstate Hauptzaehler 2020-10-07 22:44:10 summary Pulses: 7 Energy: 0.047 Power: 0.560 Cum: 0.047 | ||
+ | setstate Logfile active | ||
+ | setstate WEB 2020-10-07 22:44:07 state Initialized | ||
+ | setstate allowedWEB validFor: | ||
+ | setstate allowedWEB 2020-10-07 22:44:07 state validFor: | ||
+ | setstate autocreate active | ||
+ | setstate eventTypes active | ||
+ | setstate global no definition | ||
+ | setstate initialUsbCheck 2020-10-07 22:44:10 | ||
+ | setstate initialUsbCheck 2020-10-07 22:44:07 state active | ||
+ | </ | ||
+ | ===== erweiterte Konfiguration ===== | ||
+ | ==== Startscript ==== | ||
+ | === systemd-Startscript === | ||
+ | Zum (automatischen) Starten des Daemon benötigen wir noch ein passendes **[[https:// | ||
+ | # vim / | ||
+ | <file bash / | ||
+ | Description=FHEM service | ||
+ | After=network.target | ||
+ | |||
+ | [Service] | ||
+ | Type=forking | ||
+ | User=fhem | ||
+ | Group=dialout | ||
+ | WorkingDirectory=/ | ||
+ | ExecStart=/ | ||
+ | |||
+ | [Install] | ||
+ | WantedBy=multi-user.target</ | ||
+ | |||
+ | Nun machen wir das Script noch dem System bekannt. | ||
+ | # systemctl daemon-reload | ||
+ | |||
+ | Den **FHEM-Daemon** starten wir nun ganz einfach. | ||
+ | # systemctl start fhem.service | ||
+ | |||
+ | Der Start wird im Logfile des Datenbankservers // | ||
+ | # less / | ||
+ | < | ||
+ | 2020.10.08 08:49:23 3: WEB: port 8083 opened | ||
+ | 2020.10.08 08:49:23 2: eventTypes: loaded 25 events from ./ | ||
+ | 2020.10.08 08:49:23 3: EM opening device / | ||
+ | 2020.10.08 08:49:23 3: EM opened device / | ||
+ | 2020.10.08 08:49:49 1: Including / | ||
+ | 2020.10.08 08:49:49 1: usb create starting | ||
+ | 2020.10.08 08:49:49 3: Probing CUL device /dev/ttyS0 | ||
+ | 2020.10.08 08:49:49 3: Probing CUL device /dev/ttyS1 | ||
+ | 2020.10.08 08:49:49 1: PERL WARNING: can't getattr: Input/ | ||
+ | 2020.10.08 08:49:49 1: CUL: Can't open /dev/ttyS1: Input/ | ||
+ | 2020.10.08 08:49:49 3: Probing CUL device /dev/ttyS2 | ||
+ | 2020.10.08 08:49:49 1: CUL: Can't open /dev/ttyS2: Input/ | ||
+ | 2020.10.08 08:49:49 3: Probing CUL device /dev/ttyS3 | ||
+ | 2020.10.08 08:49:49 1: CUL: Can't open /dev/ttyS3: Input/ | ||
+ | 2020.10.08 08:49:49 1: usb create end | ||
+ | 2020.10.08 08:49:49 0: Featurelevel: | ||
+ | 2020.10.08 08:49:49 0: Server started with 11 defined entities (fhem.pl: | ||
+ | </ | ||
+ | |||
+ | Möchten wir überprüfen, | ||
+ | - **systemctl** \\ < | ||
+ | <font style=" | ||
+ | | ||
+ | | ||
+ | Process: 29809 ExecStart=/ | ||
+ | Main PID: 29810 (perl) | ||
+ | | ||
+ | | ||
+ | |||
+ | Oct 08 08:49:23 vml000027.dmz.nausch.org systemd[1]: Starting FHEM service... | ||
+ | Oct 08 08:49:23 vml000027.dmz.nausch.org systemd[1]: Started FHEM service.</ | ||
+ | </ | ||
+ | - **ps** \\ < | ||
+ | root | ||
+ | </ | ||
+ | - **netstat** \\ < | ||
+ | Proto Recv-Q Send-Q Local Address | ||
+ | Proto Recv-Q Send-Q Local Address | ||
+ | tcp 0 0 0.0.0.0: | ||
+ | tcp 0 0 0.0.0.0: | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | ==== automatisches Starten des Dienste beim Systemstart ==== | ||
+ | Damit nun unser MariaDBL-Server beim Booten automatisch gestartet wird, nehmen wir noch folgenden Konfigurationsschritt vor. | ||
+ | # systemctl enable fhem.service | ||
+ | |||
+ | | ||
+ | |||
+ | Wollen wir überprüfen, | ||
+ | # systemctl is-enabled fhem.service | ||
+ | |||
+ | | ||
+ | |||
+ | Startet der FHEM-Daemon nicht automatisch, | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | Nun können wir bequem den **FHEM-Daemon** starten und Stoppen. | ||
+ | # service fhem start | ||
+ | |||
+ | | ||
+ | |||
+ | Oder eben stoppen: | ||
+ | # service fhem stop | ||
+ | |||
+ | | ||
+ | |||
+ | Damit nun der Daemon beim Starten des Systems automatisch gestartet werden kann, legen wir die notwendigen Symlinks automatisch an. | ||
+ | # chkconfig fhem on | ||
+ | |||
+ | Wenn wir uns unsicher sind, ob der Daemon beim Systemstart in den entsprechenden Runleveln auch gestartet wird, vergewissern wir uns mit folgendem Aufruf. | ||
+ | # chkconfig --list | grep fhem | ||
+ | |||
+ | | ||
+ | ==== Apache V-Host mit Authentifizierung ==== | ||
+ | In der Regel wollen wir ja nicht, dass jedermann, also quasi //Hinz & Kunz// auf unsere FHEM-Web-Seite zugreifen kann. FHEM selbst stellt uns hierzu keine Einstellungsoptionen zur Verfügung. Wir greifen daher auf die Dienste unseres Apache-Webservers zurück. | ||
+ | |||
+ | Neben der Benutzerauthentifizierung gegen unseren zentralen [[centos: | ||
+ | |||
+ | In die Konfigurationsdatei fü unsere vHosts // | ||
+ | # vim / | ||
+ | |||
+ | <file apache / | ||
+ | # FHEM : fhem.nausch.org | ||
+ | # | ||
+ | < | ||
+ | ServerAdmin webmaster@nausch.org | ||
+ | ServerName fhem.nausch.org | ||
+ | ServerAlias www.fhem.nausch.org | ||
+ | ServerPath / | ||
+ | |||
+ | < | ||
+ | Options -Indexes FollowSymLinks | ||
+ | Order deny,allow | ||
+ | Deny from all | ||
+ | Allow from 127.0.0.1 | ||
+ | Allow from 10.0.0.27/ | ||
+ | Allow from 10.0.0.0/26 | ||
+ | </ | ||
+ | |||
+ | Redirect / https:// | ||
+ | |||
+ | ErrorLog logs/ | ||
+ | CustomLog logs/ | ||
+ | </ | ||
+ | < | ||
+ | ServerAdmin webmaster@nausch.org | ||
+ | ServerName fhem.nausch.org | ||
+ | ServerAlias www.fhem.nausch.org | ||
+ | ServerPath / | ||
+ | |||
+ | < | ||
+ | Options -Indexes FollowSymLinks | ||
+ | AuthType Basic | ||
+ | AuthName "FHEM Home Automation on vml000090 - nausch.org" | ||
+ | AuthBasicProvider ldap | ||
+ | AuthzLDAPAuthoritative On | ||
+ | AuthLDAPURL " | ||
+ | AuthLDAPBindDN " | ||
+ | AuthLDAPBindPassword " | ||
+ | Require ldap-user django michael | ||
+ | Order deny,allow | ||
+ | Deny from all | ||
+ | Allow from 127.0.0.1 | ||
+ | Allow from 10.0.0.20/ | ||
+ | Allow from 10.0.10.0/ | ||
+ | </ | ||
+ | |||
+ | ProxyRequests Off | ||
+ | ProxyPreserveHost On | ||
+ | ProxyPass /fhem http:// | ||
+ | ProxyPassReverse /fhem http:// | ||
+ | |||
+ | ErrorLog logs/ | ||
+ | CustomLog logs/ | ||
+ | </ | ||
+ | </ | ||
+ | Bevor wir den Apache-Webserver durchstarten überprüfen wir noch die Konfigurationsdatei auf schreib und Tipp-Fehler. | ||
+ | # apachectl -t | ||
+ | |||
+ | Syntax OK | ||
+ | |||
+ | Da kein Fehler enthalten ist, starten wir nun zur Aktivierung den Webserver einmal durch. | ||
+ | # systemctl restart httpd.service | ||
+ | |||
+ | Wir erreichen nun unseren vHost für FHEM ganz einfach via fhem.nausch.org. Geben wir beim Verbindungsprotokoll " | ||
+ | $ firefox http:// | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | ==== Datenbank-Konfiguration ==== | ||
+ | Im Verzeichnis **/ | ||
+ | ==== Datenbankdefinition ==== | ||
+ | Die Konfiguration der nötigen Tabellen nehmen wir mit Hilfe der von FHEM mitgelieferten Schematas vor. Dazu nutzen wir entweder direkt den Konsolenzugang, | ||
+ | |||
+ | - **Datenbank anlegen** \\ Als erstes legen wir die Datenbank an. MySQL frägt uns bei den nachfolgenden Definitionen nach dem Passwort unseres mysql-Superusers **root**. < | ||
+ | Welcome to the MySQL monitor. | ||
+ | Your MySQL connection id is 37 | ||
+ | Server version: 5.1.61 Source distribution | ||
+ | |||
+ | Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. | ||
+ | |||
+ | Oracle is a registered trademark of Oracle Corporation and/or its | ||
+ | affiliates. Other names may be trademarks of their respective | ||
+ | owners. | ||
+ | |||
+ | Type ' | ||
+ | |||
+ | mysql> create database fhem; | ||
+ | Query OK, 1 row affected (0.11 sec) | ||
+ | </ | ||
+ | - **neuen Benutzer anlegen** \\ Mit folgendem Befehl legen wir uns einen neuen Nutzer an:< | ||
+ | Query OK, 0 rows affected (0.00 sec) | ||
+ | |||
+ | mysql> | ||
+ | Query OK, 0 rows affected (0.00 sec) | ||
+ | |||
+ | mysql> </ | ||
+ | - **Benutzerprivilegien setzen und zuweisen** \\ Anschließend setzen wir die Benutzerrechte unseres gerade angelegten Datenbanknutzers. < | ||
+ | Query OK, 0 rows affected (0.01 sec) | ||
+ | |||
+ | mysql></ | ||
+ | Query OK, 0 rows affected (0.01 sec) | ||
+ | |||
+ | mysql></ | ||
+ | - **Rechte des Nutzers in der Datenbank neu laden** \\ Im letzten Schritt laden wir nun die Rechte unseres neuen Datenbankusers.< | ||
+ | Query OK, 0 rows affected (0.00 sec) | ||
+ | |||
+ | mysql></ | ||
+ | - **mySQL-Datenbanktabellen anlegen** \\ Aus der Vorlagedatei // | ||
+ | Database changed</ | ||
+ | Query OK, 0 rows affected (0.08 sec)</ | ||
+ | Query OK, 0 rows affected (0.13 sec)</ | ||
+ | - **mySQL-Datenbankverbindung beenden** \\ Unsere Konfiguration unseres neuen Datenbanknutzers ist hiermit beendet und wir können die Verbindung zur Datenbank wieder schließen.< | ||
+ | Bye | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Zugangstest ==== | ||
+ | Als nächstes überprüfen wir, ob der zuvor angelegt User/Zugang auch funktioniert. | ||
+ | # mysql -D fhem -u fhemuser -h mysql-host -p | ||
+ | < | ||
+ | Reading table information for completion of table and column names | ||
+ | You can turn off this feature to get a quicker startup with -A | ||
+ | |||
+ | Welcome to the MySQL monitor. | ||
+ | Your MySQL connection id is 2034 | ||
+ | Server version: 5.1.61 Source distribution | ||
+ | |||
+ | Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. | ||
+ | |||
+ | Oracle is a registered trademark of Oracle Corporation and/or its | ||
+ | affiliates. Other names may be trademarks of their respective | ||
+ | owners. | ||
+ | |||
+ | Type ' | ||
+ | |||
+ | mysql> show tables; | ||
+ | +----------------+ | ||
+ | | Tables_in_fhem | | ||
+ | +----------------+ | ||
+ | | current | ||
+ | | history | ||
+ | +----------------+ | ||
+ | 2 rows in set (0.00 sec) | ||
+ | |||
+ | mysql> quit | ||
+ | Bye | ||
+ | </ | ||
+ | |||
+ | ==== erweiterte Konfiguration ==== | ||
+ | In der **README** unter **/ | ||
+ | # less / | ||
+ | |||
+ | <file bash / | ||
+ | 2007-12-30bn | ||
+ | |||
+ | - 93_DbLog.pm | ||
+ | copy this file into < | ||
+ | - db.conf | ||
+ | sample database configuration file | ||
+ | - fhemdb_create.sql | ||
+ | sample sql command to create a mysql database for logging purposes | ||
+ | - fhemdb_get.pl | ||
+ | sample perl script for retrieving the current (latest) data from | ||
+ | the logging database | ||
+ | </ | ||
+ | - Wir kopieren also die Datei **93_DbLog.pm** in unseren **modpath**. < | ||
+ | - Anschließend kopieren wir die Datenbank-Konfigurationsdatei nach // | ||
+ | - Dann bearbeiten wir die gerade kopierte Konfigurationsdatei und tragen dort unsere benutzerspezifischen Änderungen ein.< | ||
+ | # database configuration file | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | %dbconfig= ( | ||
+ | connection => " | ||
+ | user => " | ||
+ | password => " | ||
+ | ); | ||
+ | |||
+ | </ | ||
+ | - Abschließend erweitern wir nun noch unsere Hauptkonfigurationsdatei von FHEM // | ||
+ | |||
+ | |||
+ | Unser Hauptkonfigurationsdatei **/ | ||
+ | < | ||
+ | define Hauptzaehler EMWZ 1 | ||
+ | define EDV_Schrank EMEM 5 | ||
+ | |||
+ | # Erst einmal alle Meldungen in die Datenbank schreiben | ||
+ | define logdb DbLog / | ||
+ | |||
+ | Nach dem Start unseres Serverdienstes **// | ||
+ | # fhem.pl / | ||
+ | |||
+ | < | ||
+ | 2012.07.27 20:35:39 2: FHEMWEB port 8083 opened | ||
+ | 2012.07.27 20:35:39 2: FHEMWEB port 8084 opened | ||
+ | 2012.07.27 20:35:39 2: FHEMWEB port 8085 opened | ||
+ | 2012.07.27 20:35:39 3: EM opening device / | ||
+ | 2012.07.27 20:35:39 3: EM opened device / | ||
+ | 2012.07.27 20:36:46 3: Connecting to database mysql: | ||
+ | 2012.07.27 20:36:46 3: Connection to db mysql: | ||
+ | 2012.07.27 20:36:46 0: Server started (version 5.2 from 2011-12-31 ($Id: fhem.pl 1159 2011-12-31 13:31:58Z rudolfkoenig $), pid 1955) | ||
+ | </ | ||
+ | In unserer MySQL-Datenbanktabelle tauchen die entsprechenden Werte auf: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Ebenso werden in der Statusübersicht im Browserfenster die beiden definierten Meßpunkte angezeigt: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Zum Abfragen der MySQL-Datenbank kann das mitgelieferte Programm **fhemdb_get.pl** benutzt werden. Dieses kopieren wir als erstes nach / | ||
+ | # cp / | ||
+ | |||
+ | Anschließend passen wir noch die Datenbankdefinitionen in dem Script unseren lokalen Bedürfnissen nach an. | ||
+ | # vim / | ||
+ | |||
+ | <file perl / | ||
+ | # | ||
+ | ################################################################ | ||
+ | # | ||
+ | # Copyright notice | ||
+ | # | ||
+ | # (c) 2007 Copyright: Dr. Boris Neubert (omega at online dot de) | ||
+ | # All rights reserved | ||
+ | # | ||
+ | # This script free software; you can redistribute it and/or modify | ||
+ | # it under the terms of the GNU General Public License as published by | ||
+ | # the Free Software Foundation; either version 2 of the License, or | ||
+ | # (at your option) any later version. | ||
+ | # | ||
+ | # The GNU General Public License can be found at | ||
+ | # http:// | ||
+ | # A copy is found in the textfile GPL.txt and important notices to the license | ||
+ | # from the author is found in LICENSE.txt distributed with these scripts. | ||
+ | # | ||
+ | # This script is distributed in the hope that it will be useful, | ||
+ | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
+ | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||
+ | # GNU General Public License for more details. | ||
+ | # | ||
+ | # This copyright notice MUST APPEAR in all copies of the script! | ||
+ | # | ||
+ | ################################################################ | ||
+ | |||
+ | |||
+ | # | ||
+ | # this script returns the current reading for a device stored in | ||
+ | # the fhem logging database | ||
+ | # | ||
+ | |||
+ | # Usage: | ||
+ | # | ||
+ | # Example: | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | |||
+ | # | ||
+ | # global configuration | ||
+ | # | ||
+ | my $dbconn | ||
+ | my $dbuser | ||
+ | my $dbpassword | ||
+ | |||
+ | # | ||
+ | # nothing to change below this line | ||
+ | # | ||
+ | |||
+ | use strict; | ||
+ | use warnings; | ||
+ | use DBI; | ||
+ | |||
+ | (@ARGV> | ||
+ | |||
+ | my $device= $ARGV[0]; | ||
+ | my @readings=@ARGV; | ||
+ | my $set= join(",", | ||
+ | |||
+ | my $dbh= DBI-> | ||
+ | die " | ||
+ | my $stm= " | ||
+ | (DEVICE=' | ||
+ | (READING IN ($set))"; | ||
+ | my $sth= $dbh-> | ||
+ | die " | ||
+ | my $rc= $sth-> | ||
+ | die " | ||
+ | |||
+ | my %rs; | ||
+ | my $reading; | ||
+ | my $value; | ||
+ | while( ($reading, | ||
+ | $rs{$reading}= $value; | ||
+ | } | ||
+ | foreach $reading (@readings) { | ||
+ | $value= $rs{$reading}; | ||
+ | $value= " | ||
+ | print " | ||
+ | } | ||
+ | print " | ||
+ | die $sth-> | ||
+ | $dbh-> | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | Zum Abfragen des aktuellen Zählerverbrauchswert unseres Hauptzählers verwenden wir folgende Syntax: **fhemdb_get.pl < | ||
+ | # fhemdb_get.pl Hauptzaehler cum_kWh power | ||
+ | |||
+ | | ||
+ | ==== Datenbank-Loglevel anpassen ==== | ||
+ | Für die ersten Test ist die Angaben von ** .*:.* ** in der Konfigurationsdatei sicher hilfreich, jedoch für den laufenden Betrieb kontraproduktiv. Wir geben also über eine passende REXEXP an, welche Werte wir zukünftig nur noch in der MySQL-Tabelle archivieren wollen. | ||
+ | |||
+ | Unser Konfigurationsdatei **/ | ||
+ | # vim / | ||
+ | |||
+ | <file bash / | ||
+ | # pgm2 / autocreate configfile. Take a look at the other examples for more. | ||
+ | # | ||
+ | attr global logfile / | ||
+ | attr global modpath / | ||
+ | attr global port 7072 global | ||
+ | attr global statefile / | ||
+ | attr global verbose 3 # " | ||
+ | |||
+ | define WEB FHEMWEB 8083 global | ||
+ | |||
+ | define WEBphone FHEMWEB 8084 global | ||
+ | attr WEBphone smallscreen | ||
+ | |||
+ | define WEBtablet FHEMWEB 8085 global | ||
+ | attr WEBtablet touchpad | ||
+ | |||
+ | # Fake FileLog entry, to access the fhem log from FHEMWEB | ||
+ | define Logfile FileLog / | ||
+ | |||
+ | define autocreate autocreate | ||
+ | attr autocreate autosave | ||
+ | attr autocreate device_room %TYPE | ||
+ | attr autocreate filelog / | ||
+ | attr autocreate weblink | ||
+ | attr autocreate weblink_room Plots | ||
+ | # Disable this to avoid looking for new USB devices on startup | ||
+ | # Django : 2012-07-27 | ||
+ | # initialUsbCheck disabled | ||
+ | # define initialUsbCheck notify global: | ||
+ | |||
+ | |||
+ | # If the above notify did not helped, then you probably have to enable some of | ||
+ | # the following lines. | ||
+ | |||
+ | #define FHZ FHZ /dev/USB0 | ||
+ | #define CUL CUL / | ||
+ | #attr CUL rfmode HomeMatic | ||
+ | |||
+ | #define EUL TCM 310 / | ||
+ | #define BscBor TCM 120 / | ||
+ | #define BscSmartConnect TCM 310 / | ||
+ | |||
+ | # Django : 2012-07-27 | ||
+ | define EM EM / | ||
+ | define Hauptzaehler EMWZ 1 | ||
+ | define Gaszaehler EMGZ 9 | ||
+ | define EDV_Schrank EMEM 5 | ||
+ | |||
+ | # Django : 2012-07-27 | ||
+ | # Erst einmal alle Meldungen in die Datenbank schreiben | ||
+ | #define logdb DbLog / | ||
+ | |||
+ | # Django : 2012-07-27 | ||
+ | # Nur noch die aktuellen verbrauchswerte in die MySQL schreiben | ||
+ | define logdb DbLog / | ||
+ | </ | ||
+ | |||
+ | Mit einem **rereadcfg** veranlassen wir nun, dass die neue Konfigurationseinstellung(en) aktiv werden. | ||
+ | ====== Graphische Datenaufbereitung mit cacti ====== | ||
+ | {{: | ||
+ | |||
+ | Die Konfiguration(en) zum Darstellen unserer Energieverbrauchswerte (Gas und Strom) setzt auf einen funktionstüchtigen [[https:// | ||
+ | ===== Gaszähler ===== | ||
+ | {{: | ||
+ | |||
+ | Der Anschluß des Reedkontaktes erfolgt an den [[http:// | ||
+ | |||
+ | Die Definition des Ausgabegraphen ist hier dokumentiert: | ||
+ | |||
+ | {{ : | ||
+ | ===== (Haupt)-Stromzähler | ||
+ | {{: | ||
+ | |||
+ | Die Definition des Ausgabegraphen ist hier dokumentiert: | ||
+ | |||
+ | {{ : | ||
+ | ===== (EDV)-Stromzähler | ||
+ | {{: | ||
+ | |||
+ | Die Definition des Ausgabegraphen ist hier dokumentiert: | ||
+ | |||
+ | {{ : | ||
+ | ===== Stromzähler | ||
+ | Den Stromverbrauch, | ||
+ | |||
+ | {{ : | ||
+ | |||