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 19:02. ] – [erweiterte 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, | ||
| + | |||
| + | {{ : | ||
| + | |||