Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
fun:energie-funk-mess-system_em_1000 [27.08.2012 20:03. ]
django [Stationswerte abfragen]
fun:energie-funk-mess-system_em_1000 [20.04.2018 09:06. ] (aktuell)
Zeile 1: Zeile 1:
 +====== Energie-Funk-Mess-System EM 1000 ======
 +{{ :​fun:​serverschrank.png?​101|Netzwerkschrank}}
 +Zum Überwachen des Gas- und Stromverbrauchs nutze ich seit Januar 2009 das [[http://​www.elv.de/​Empfangs-Anzeigegerät-EM-1010/​x.aspx/​cid_74/​detail_10/​detail2_15910|ELV Energie-Funk-Mess-System EM 1000]]. Ferner soll auch der variable Verbrauch meiner IT-TK-Infrastruktur dokumentiert werden, da dieser zuweilen für wüste Spekulationen Grundlage war.
 +
 +===== Hardware =====
 +{{:​fun:​em1010pc.png?​100 |ELV EM1010}}
 +
 +Das **//​Empfangs-/​Anzeigegerät EM 1010//** verfügt über einen USB-Port über welchen wir später die Messwerte auslesen und in unsere MySQL-Datenbank speichern wollen. ​
 +
 +==== CentOS 5.x ====
 +Stecken wir die Station an einen CentOS 5.x Rechner an, so wird uns dies im Syslog entsprechend dokumentiert:​
 +   ​Jan ​ 7 19:20:35 nss kernel: usb 3-2: new full speed USB device using ohci_hcd and address 8
 +   ​Jan ​ 7 19:20:35 nss kernel: usb 3-2: configuration #1 chosen from 1 choic
 +Wie auch schon meine alte Wetterstation [[wetter:​ws500:​start]] wird dieses Gerät auch via dem **FTDI-Kernelmodul** angesprochen.
 +Da das benötigte Kernel-Modul jedoch __nicht__ von Haus aus geladen worden ist, müssen wir ein klein wenig nachhelfen.
 +
 +Als erstes ermitteln wir die **Product-** und **Vendor-ID** unseres Gerätes:
 +   # lsusb 
 +   Bus 003 Device 008: ID 0403:e0ef Future Technology Devices International,​ Ltd
 +Alternativ können wir diese auch wie folgt ermitteln:
 +<​code>#​ cat /​proc/​bus/​usb/​devices
 +
 +...
 +T:  Bus=03 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#=  8 Spd=12 ​ MxCh= 0
 +D:  Ver= 1.10 Cls=00(>​ifc ) Sub=00 Prot=00 MxPS= 8 #​Cfgs= ​ 1
 +P:  Vendor=0403 ProdID=e0ef Rev= 2.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
 +E:  Ad=81(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
 +E:  Ad=02(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms</​code>​
 +Diese beiden Werte **Vendor=0403** und **ProdID=e0ef** benötigen wir nun für die weitere Konfiguration.
 +
 +Einen ersten Start ermöglichen wir via:
 +   # modprobe ftdi_sio vendor=0x0403 product=0xe0ef
 +Im Syslog wird dies nun erfolgreich vermerkt:
 +<​code>​Jan ​ 7 20:43:17 nss kernel: drivers/​usb/​serial/​usb-serial.c:​ USB Serial support registered for FTDI USB Serial Device
 +Jan  7 20:43:17 nss kernel: ftdi_sio 3-2:1.0: FTDI USB Serial Device converter detected
 +Jan  7 20:43:17 nss kernel: drivers/​usb/​serial/​ftdi_sio.c:​ Detected FT8U232AM
 +Jan  7 20:43:17 nss kernel: usb 3-2: FTDI USB Serial Device converter now attached to ttyUSB2
 +Jan  7 20:43:17 nss kernel: usbcore: registered new driver ftdi_sio
 +Jan  7 20:43:17 nss kernel: drivers/​usb/​serial/​ftdi_sio.c:​ v1.4.3:USB FTDI Serial Converters Driver</​code>​
 +Damit nun beim Systemstart dieses Kernel-Modul automatisch geladen wird, legen wir uns eine individuelle **udev-Regel** an:
 +   # vim /​etc/​udev/​rules.d/​99-custom.rules
 +   ​SYSFS{idProduct}=="​e0ef",​ SYSFS{idVendor}=="​0403",​ RUN+="/​sbin/​modprobe -q ftdi_sio product=0xe0ef vendor=0x0403"​
 +
 +==== CentOS 6.x ====
 +Verbinden wir die Station mit einem Rechner, auf dem CentOS 6.x installiert ist, wird im syslog wesentlich mehr als bei CentOS 5.x ausgegeben:
 +<​code>​Jul 26 16:49:45 vml000020 kernel: usb 1-2: new full speed USB device number 3 using uhci_hcd
 +Jul 26 16:49:45 vml000020 kernel: usb 1-2: New USB device found, idVendor=0000,​ idProduct=0000
 +Jul 26 16:49:45 vml000020 kernel: usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
 +Jul 26 16:49:45 vml000020 kernel: usb 1-2: Product: QEMU USB Hub
 +Jul 26 16:49:45 vml000020 kernel: usb 1-2: Manufacturer:​ QEMU 0.12.1
 +Jul 26 16:49:45 vml000020 kernel: usb 1-2: SerialNumber:​ 314159
 +Jul 26 16:49:45 vml000020 kernel: usb 1-2: configuration #1 chosen from 1 choice
 +Jul 26 16:49:45 vml000020 kernel: hub 1-2:1.0: USB hub found
 +Jul 26 16:49:45 vml000020 kernel: hub 1-2:1.0: 8 ports detected
 +Jul 26 16:49:46 vml000020 kernel: usb 1-2.1: new full speed USB device number 4 using uhci_hcd
 +Jul 26 16:49:47 vml000020 kernel: usb 1-2.1: New USB device found, idVendor=0403,​ idProduct=e0ef
 +Jul 26 16:49:47 vml000020 kernel: usb 1-2.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
 +Jul 26 16:49:47 vml000020 kernel: usb 1-2.1: Product: ELV EM 1010 PC
 +Jul 26 16:49:47 vml000020 kernel: usb 1-2.1: Manufacturer:​ ELV AG
 +Jul 26 16:49:47 vml000020 kernel: usb 1-2.1: configuration #1 chosen from 1 choice
 +Jul 26 16:49:47 vml000020 kernel: usbcore: registered new interface driver usbserial
 +Jul 26 16:49:47 vml000020 kernel: USB Serial support registered for generic
 +Jul 26 16:49:47 vml000020 kernel: usbcore: registered new interface driver usbserial_generic
 +Jul 26 16:49:47 vml000020 kernel: usbserial: USB Serial Driver core
 +Jul 26 16:49:47 vml000020 kernel: USB Serial support registered for FTDI USB Serial Device
 +Jul 26 16:49:47 vml000020 kernel: ftdi_sio 1-2.1:1.0: FTDI USB Serial Device converter detected
 +Jul 26 16:49:47 vml000020 kernel: usb 1-2.1: Detected FT8U232AM
 +Jul 26 16:49:47 vml000020 kernel: usb 1-2.1: Number of endpoints 2
 +Jul 26 16:49:47 vml000020 kernel: usb 1-2.1: Endpoint 1 MaxPacketSize 64
 +Jul 26 16:49:47 vml000020 kernel: usb 1-2.1: Endpoint 2 MaxPacketSize 64
 +Jul 26 16:49:47 vml000020 kernel: usb 1-2.1: Setting MaxPacketSize 64
 +Jul 26 16:49:47 vml000020 kernel: usb 1-2.1: FTDI USB Serial Device converter now attached to ttyUSB0
 +Jul 26 16:49:47 vml000020 kernel: usbcore: registered new interface driver ftdi_sio
 +Jul 26 16:49:47 vml000020 kernel: ftdi_sio: v1.5.0:USB FTDI Serial Converters Driver
 +</​code>​
 +Da hier bereits der notwendige //FTDI Serial Converters Driver// automatisch geladen wurde, brauchen wir hier nichts weiter mehr händisch konfigurieren.
 +Wir können direkt die Station über die automatisch angelegten Gerätetreiberdatei //​**/​dev/​ttyUSB0**//​ wie nachfolgend gezeigt ansprechen.
 +===== Software =====
 +==== Perl Bibliotheken ====
 +=== perl-Device-SerialPort ===
 +Da wir zum Auslesen der Verbrauchswerte auf **Perl** zurückgreifen wollen, installieren wir uns als erstes das betreffende Programmpaket zum Ansprechen des seriellen Posts **perl-Device-SerialPort**.
 +   # yum install perl-Device-SerialPort
 +Was uns dieses **perl-Device-SerialPort** bietet, entnehmen wir am einfachsten dem rpm.
 +
 +   # rpm -qil perl-Device-SerialPort
 +<​code>​Name ​       : perl-Device-SerialPort ​      ​Relocations:​ (not relocatable)
 +Version ​    : 1.04                              Vendor: Dag Apt Repository, http://​dag.wieers.com/​apt/​
 +Release ​    : 1.el6.rf ​                     Build Date: Thu 11 Nov 2010 05:44:11 AM CET
 +Install Date: Thu 26 Jul 2012 04:51:09 PM CEST      Build Host: lisse.hasselt.wieers.com
 +Group       : Applications/​CPAN ​            ​Source RPM: perl-Device-SerialPort-1.04-1.el6.rf.src.rpm
 +Size        : 245573 ​                          ​License:​ Artistic/​GPL
 +Signature ​  : DSA/SHA1, Thu 11 Nov 2010 07:30:56 AM CET, Key ID a20e52146b8d79e6
 +Packager ​   : Dries Verachtert <​dries@ulyssis.org>​
 +URL         : http://​search.cpan.org/​dist/​Device-SerialPort/​
 +Summary ​    : Linux/POSIX emulation of Win32::​SerialPort functions
 +Description :
 +This is a POSIX-based version of the Win32::​Serialport module ported by
 +Joe Doss for the MisterHouse Home Automation Package from Version 0.08
 +of the Win32 module. He replaced calls to the Win32 API with similar
 +functions implemented using POSIX calls. While most of the testing has
 +occurred on linux, the package should work on other POSIX-compliant
 +Operating Systems.
 +/​usr/​bin/​modemtest
 +/​usr/​lib64/​perl5/​vendor_perl/​Device
 +/​usr/​lib64/​perl5/​vendor_perl/​Device/​SerialPort.pm
 +/​usr/​lib64/​perl5/​vendor_perl/​auto/​Device
 +/​usr/​lib64/​perl5/​vendor_perl/​auto/​Device/​SerialPort
 +/​usr/​lib64/​perl5/​vendor_perl/​auto/​Device/​SerialPort/​SerialPort.bs
 +/​usr/​lib64/​perl5/​vendor_perl/​auto/​Device/​SerialPort/​SerialPort.so
 +/​usr/​share/​doc/​perl-Device-SerialPort-1.04
 +/​usr/​share/​doc/​perl-Device-SerialPort-1.04/​Changes
 +/​usr/​share/​doc/​perl-Device-SerialPort-1.04/​MANIFEST
 +/​usr/​share/​doc/​perl-Device-SerialPort-1.04/​META.yml
 +/​usr/​share/​doc/​perl-Device-SerialPort-1.04/​README
 +/​usr/​share/​doc/​perl-Device-SerialPort-1.04/​TODO
 +/​usr/​share/​doc/​perl-Device-SerialPort-1.04/​eg
 +/​usr/​share/​doc/​perl-Device-SerialPort-1.04/​eg/​any_os.plx
 +/​usr/​share/​doc/​perl-Device-SerialPort-1.04/​eg/​demo1.plx
 +/​usr/​share/​doc/​perl-Device-SerialPort-1.04/​eg/​demo2.plx
 +/​usr/​share/​doc/​perl-Device-SerialPort-1.04/​eg/​demo3.plx
 +/​usr/​share/​doc/​perl-Device-SerialPort-1.04/​eg/​demo4.plx
 +/​usr/​share/​doc/​perl-Device-SerialPort-1.04/​eg/​demo5.plx
 +/​usr/​share/​doc/​perl-Device-SerialPort-1.04/​eg/​demo6.plx
 +/​usr/​share/​doc/​perl-Device-SerialPort-1.04/​eg/​demo7.plx
 +/​usr/​share/​doc/​perl-Device-SerialPort-1.04/​eg/​demo8.plx
 +/​usr/​share/​doc/​perl-Device-SerialPort-1.04/​eg/​example1.txt
 +/​usr/​share/​doc/​perl-Device-SerialPort-1.04/​eg/​example2.txt
 +/​usr/​share/​doc/​perl-Device-SerialPort-1.04/​eg/​example3.txt
 +/​usr/​share/​doc/​perl-Device-SerialPort-1.04/​eg/​example4.txt
 +/​usr/​share/​doc/​perl-Device-SerialPort-1.04/​eg/​example5.txt
 +/​usr/​share/​doc/​perl-Device-SerialPort-1.04/​eg/​example6.txt
 +/​usr/​share/​doc/​perl-Device-SerialPort-1.04/​eg/​example7.txt
 +/​usr/​share/​doc/​perl-Device-SerialPort-1.04/​eg/​example8.txt
 +/​usr/​share/​doc/​perl-Device-SerialPort-1.04/​eg/​options.plx
 +/​usr/​share/​man/​man1/​modemtest.1.gz
 +/​usr/​share/​man/​man3/​Device::​SerialPort.3pm.gz
 +</​code>​
 +
 +=== perl-Time-HiRes ===
 +Weiter wird noch das Paket **perl-Time-HiRes** von dem Projekt **FHEM** benötigt, welches wir noch installieren.
 +   # yum install perl-Time-HiRes
 +
 +Was uns dieses **perl-Time-HiRes** bietet, entnehmen wir am einfachsten dem rpm.
 +   # rpm -qil perl-Time-HiRes
 +<​code>​Name ​       : perl-Time-HiRes ​             Relocations:​ (not relocatable)
 +Version ​    : 1.9721 ​                           Vendor: CentOS
 +Release ​    : 127.el6 ​                      Build Date: Fri 22 Jun 2012 03:38:59 PM CEST
 +Install Date: Thu 26 Jul 2012 10:58:43 PM CEST      Build Host: c6b7.bsys.dev.centos.org
 +Group       : Development/​Libraries ​        ​Source RPM: perl-5.10.1-127.el6.src.rpm
 +Size        : 57406                            License: GPL+ or Artistic
 +Signature ​  : RSA/SHA1, Mon 25 Jun 2012 12:16:43 AM CEST, Key ID 0946fca2c105b9de
 +Packager ​   : CentOS BuildSystem <​http://​bugs.centos.org>​
 +URL         : http://​www.perl.org/​
 +Summary ​    : High resolution alarm, sleep, gettimeofday,​ interval timers
 +Description :
 +The Time::HiRes module implements a Perl interface to the usleep, nanosleep,
 +ualarm, gettimeofday,​ and setitimer/​getitimer system calls, in other words,
 +high resolution time and timers. See the "​EXAMPLES"​ section below and the test
 +scripts for usage; see your system documentation for the description of the
 +underlying nanosleep or usleep, ualarm, gettimeofday,​ and setitimer/​getitimer
 +calls.
 +/​usr/​lib64/​perl5/​Time/​HiRes.pm
 +/​usr/​lib64/​perl5/​auto/​Time/​HiRes/​HiRes.so
 +/​usr/​share/​man/​man3/​Time::​HiRes.3pm.gz
 +</​code>​
 +
 +=== perl-Compress-Zlib ===
 +Schließlich wird noch das Paket **perl-Compress-Zlib** von dem Projekt **FHEM** benötigt, welches wir noch installieren.
 +   # yum install perl-Compress-Zlib -y
 +
 +Was uns dieses **perl-Compress-Zlib** bietet, entnehmen wir am einfachsten dem rpm.
 +   # rpm -qil perl-Compress-Zlib
 +<​code>​Name ​       : perl-Compress-Zlib ​          ​Relocations:​ (not relocatable)
 +Version ​    : 2.020                             ​Vendor:​ CentOS
 +Release ​    : 127.el6 ​                      Build Date: Fri 22 Jun 2012 03:38:59 PM CEST
 +Install Date: Fri 27 Jul 2012 02:46:02 PM CEST      Build Host: c6b7.bsys.dev.centos.org
 +Group       : Development/​Libraries ​        ​Source RPM: perl-5.10.1-127.el6.src.rpm
 +Size        : 52167                            License: GPL+ or Artistic
 +Signature ​  : RSA/SHA1, Mon 25 Jun 2012 12:17:14 AM CEST, Key ID 0946fca2c105b9de
 +Packager ​   : CentOS BuildSystem <​http://​bugs.centos.org>​
 +URL         : http://​www.perl.org/​
 +Summary ​    : A module providing Perl interfaces to the zlib compression library
 +Description :
 +The Compress::​Zlib module provides a Perl interface to the zlib
 +compression library. Most of the functionality provided by zlib is
 +available in Compress::​Zlib.
 +
 +The module can be split into two general areas of functionality,​
 +namely in-memory compression/​decompression and read/write access to
 +gzip files.
 +/​usr/​lib64/​perl5/​Compress/​Zlib.pm
 +/​usr/​lib64/​perl5/​auto/​Compress/​Zlib
 +/​usr/​lib64/​perl5/​auto/​Compress/​Zlib/​autosplit.ix
 +/​usr/​share/​man/​man3/​Compress::​Zlib.3pm.gz
 +</​code>​
 +
 +=== perl-DBI ===
 +Abschließend wird noch das Paket **perl-DBI** und **perl-DBD-MySQL** von dem Projekt **FHEM** benötigt, welches wir noch installieren.
 +   # yum install perl-DBI perl-DBD-MySQL -y
 +
 +Was uns dieses **perl-DBI** bietet, entnehmen wir am einfachsten dem rpm.
 +   # rpm -qil perl-DBI
 +<​code>​Name ​       : perl-DBI ​                    ​Relocations:​ (not relocatable)
 +Version ​    : 1.609                             ​Vendor:​ CentOS
 +Release ​    : 4.el6                         Build Date: Fri 20 Aug 2010 02:34:23 AM CEST
 +Install Date: Fri 27 Jul 2012 07:16:50 PM CEST      Build Host: c6b1.bsys.dev.centos.org
 +Group       : Development/​Libraries ​        ​Source RPM: perl-DBI-1.609-4.el6.src.rpm
 +Size        : 1733598 ​                         License: GPL+ or Artistic
 +Signature ​  : RSA/8, Sun 03 Jul 2011 06:55:01 AM CEST, Key ID 0946fca2c105b9de
 +Packager ​   : CentOS BuildSystem <​http://​bugs.centos.org>​
 +URL         : http://​dbi.perl.org/​
 +Summary ​    : A database access API for perl
 +Description :
 +DBI is a database access Application Programming Interface (API) for
 +the Perl Language. The DBI API Specification defines a set of
 +functions, variables and conventions that provide a consistent
 +database interface independent of the actual database being used.
 +/​usr/​bin/​dbilogstrip
 +/​usr/​bin/​dbiprof
 +/​usr/​bin/​dbiproxy
 +/​usr/​lib64/​perl5/​Bundle
 +/​usr/​lib64/​perl5/​Bundle/​DBI.pm
 +/​usr/​lib64/​perl5/​DBD
 +/​usr/​lib64/​perl5/​DBD/​DBM.pm
 +/​usr/​lib64/​perl5/​DBD/​ExampleP.pm
 +/​usr/​lib64/​perl5/​DBD/​File.pm
 +/​usr/​lib64/​perl5/​DBD/​Gofer
 +/​usr/​lib64/​perl5/​DBD/​Gofer.pm
 +/​usr/​lib64/​perl5/​DBD/​Gofer/​Policy
 +/​usr/​lib64/​perl5/​DBD/​Gofer/​Policy/​Base.pm
 +/​usr/​lib64/​perl5/​DBD/​Gofer/​Policy/​classic.pm
 +/​usr/​lib64/​perl5/​DBD/​Gofer/​Policy/​pedantic.pm
 +/​usr/​lib64/​perl5/​DBD/​Gofer/​Policy/​rush.pm
 +/​usr/​lib64/​perl5/​DBD/​Gofer/​Transport
 +/​usr/​lib64/​perl5/​DBD/​Gofer/​Transport/​Base.pm
 +/​usr/​lib64/​perl5/​DBD/​Gofer/​Transport/​null.pm
 +/​usr/​lib64/​perl5/​DBD/​Gofer/​Transport/​pipeone.pm
 +/​usr/​lib64/​perl5/​DBD/​Gofer/​Transport/​stream.pm
 +/​usr/​lib64/​perl5/​DBD/​NullP.pm
 +/​usr/​lib64/​perl5/​DBD/​Proxy.pm
 +/​usr/​lib64/​perl5/​DBD/​Sponge.pm
 +/​usr/​lib64/​perl5/​DBI
 +/​usr/​lib64/​perl5/​DBI.pm
 +/​usr/​lib64/​perl5/​DBI/​Changes.pm
 +/​usr/​lib64/​perl5/​DBI/​Const
 +/​usr/​lib64/​perl5/​DBI/​Const/​GetInfo
 +/​usr/​lib64/​perl5/​DBI/​Const/​GetInfo/​ANSI.pm
 +/​usr/​lib64/​perl5/​DBI/​Const/​GetInfo/​ODBC.pm
 +/​usr/​lib64/​perl5/​DBI/​Const/​GetInfoReturn.pm
 +/​usr/​lib64/​perl5/​DBI/​Const/​GetInfoType.pm
 +/​usr/​lib64/​perl5/​DBI/​DBD
 +/​usr/​lib64/​perl5/​DBI/​DBD.pm
 +/​usr/​lib64/​perl5/​DBI/​DBD/​Metadata.pm
 +/​usr/​lib64/​perl5/​DBI/​FAQ.pm
 +/​usr/​lib64/​perl5/​DBI/​Gofer
 +/​usr/​lib64/​perl5/​DBI/​Gofer/​Execute.pm
 +/​usr/​lib64/​perl5/​DBI/​Gofer/​Request.pm
 +/​usr/​lib64/​perl5/​DBI/​Gofer/​Response.pm
 +/​usr/​lib64/​perl5/​DBI/​Gofer/​Serializer
 +/​usr/​lib64/​perl5/​DBI/​Gofer/​Serializer/​Base.pm
 +/​usr/​lib64/​perl5/​DBI/​Gofer/​Serializer/​DataDumper.pm
 +/​usr/​lib64/​perl5/​DBI/​Gofer/​Serializer/​Storable.pm
 +/​usr/​lib64/​perl5/​DBI/​Gofer/​Transport
 +/​usr/​lib64/​perl5/​DBI/​Gofer/​Transport/​Base.pm
 +/​usr/​lib64/​perl5/​DBI/​Gofer/​Transport/​pipeone.pm
 +/​usr/​lib64/​perl5/​DBI/​Gofer/​Transport/​stream.pm
 +/​usr/​lib64/​perl5/​DBI/​Profile.pm
 +/​usr/​lib64/​perl5/​DBI/​ProfileData.pm
 +/​usr/​lib64/​perl5/​DBI/​ProfileDumper
 +/​usr/​lib64/​perl5/​DBI/​ProfileDumper.pm
 +/​usr/​lib64/​perl5/​DBI/​ProfileDumper/​Apache.pm
 +/​usr/​lib64/​perl5/​DBI/​ProfileSubs.pm
 +/​usr/​lib64/​perl5/​DBI/​ProxyServer.pm
 +/​usr/​lib64/​perl5/​DBI/​PurePerl.pm
 +/​usr/​lib64/​perl5/​DBI/​Roadmap.pm
 +/​usr/​lib64/​perl5/​DBI/​SQL
 +/​usr/​lib64/​perl5/​DBI/​SQL/​Nano.pm
 +/​usr/​lib64/​perl5/​DBI/​Util
 +/​usr/​lib64/​perl5/​DBI/​Util/​CacheMemory.pm
 +/​usr/​lib64/​perl5/​DBI/​Util/​_accessor.pm
 +/​usr/​lib64/​perl5/​Roadmap.pod
 +/​usr/​lib64/​perl5/​TASKS.pod
 +/​usr/​lib64/​perl5/​auto/​DBI
 +/​usr/​lib64/​perl5/​auto/​DBI/​DBI.so
 +/​usr/​lib64/​perl5/​auto/​DBI/​DBIXS.h
 +/​usr/​lib64/​perl5/​auto/​DBI/​Driver.xst
 +/​usr/​lib64/​perl5/​auto/​DBI/​Driver_xst.h
 +/​usr/​lib64/​perl5/​auto/​DBI/​dbd_xsh.h
 +/​usr/​lib64/​perl5/​auto/​DBI/​dbi_sql.h
 +/​usr/​lib64/​perl5/​auto/​DBI/​dbipport.h
 +/​usr/​lib64/​perl5/​auto/​DBI/​dbivport.h
 +/​usr/​lib64/​perl5/​auto/​DBI/​dbixs_rev.h
 +/​usr/​lib64/​perl5/​dbixs_rev.pl
 +/​usr/​share/​doc/​perl-DBI-1.609
 +/​usr/​share/​doc/​perl-DBI-1.609/​README
 +/​usr/​share/​doc/​perl-DBI-1.609/​ex
 +/​usr/​share/​doc/​perl-DBI-1.609/​ex/​perl_dbi_nulls_test.pl
 +/​usr/​share/​doc/​perl-DBI-1.609/​ex/​profile.pl
 +/​usr/​share/​man/​man1/​dbilogstrip.1.gz
 +/​usr/​share/​man/​man1/​dbiprof.1.gz
 +/​usr/​share/​man/​man1/​dbiproxy.1.gz
 +/​usr/​share/​man/​man3/​Bundle::​DBI.3pm.gz
 +/​usr/​share/​man/​man3/​DBD::​DBM.3pm.gz
 +/​usr/​share/​man/​man3/​DBD::​File.3pm.gz
 +/​usr/​share/​man/​man3/​DBD::​Gofer.3pm.gz
 +/​usr/​share/​man/​man3/​DBD::​Gofer::​Policy::​Base.3pm.gz
 +/​usr/​share/​man/​man3/​DBD::​Gofer::​Policy::​classic.3pm.gz
 +/​usr/​share/​man/​man3/​DBD::​Gofer::​Policy::​pedantic.3pm.gz
 +/​usr/​share/​man/​man3/​DBD::​Gofer::​Policy::​rush.3pm.gz
 +/​usr/​share/​man/​man3/​DBD::​Gofer::​Transport::​Base.3pm.gz
 +/​usr/​share/​man/​man3/​DBD::​Gofer::​Transport::​null.3pm.gz
 +/​usr/​share/​man/​man3/​DBD::​Gofer::​Transport::​pipeone.3pm.gz
 +/​usr/​share/​man/​man3/​DBD::​Gofer::​Transport::​stream.3pm.gz
 +/​usr/​share/​man/​man3/​DBD::​Proxy.3pm.gz
 +/​usr/​share/​man/​man3/​DBD::​Sponge.3pm.gz
 +/​usr/​share/​man/​man3/​DBI.3pm.gz
 +/​usr/​share/​man/​man3/​DBI::​Const::​GetInfo::​ANSI.3pm.gz
 +/​usr/​share/​man/​man3/​DBI::​Const::​GetInfo::​ODBC.3pm.gz
 +/​usr/​share/​man/​man3/​DBI::​Const::​GetInfoReturn.3pm.gz
 +/​usr/​share/​man/​man3/​DBI::​Const::​GetInfoType.3pm.gz
 +/​usr/​share/​man/​man3/​DBI::​DBD.3pm.gz
 +/​usr/​share/​man/​man3/​DBI::​DBD::​Metadata.3pm.gz
 +/​usr/​share/​man/​man3/​DBI::​FAQ.3pm.gz
 +/​usr/​share/​man/​man3/​DBI::​Gofer::​Execute.3pm.gz
 +/​usr/​share/​man/​man3/​DBI::​Gofer::​Request.3pm.gz
 +/​usr/​share/​man/​man3/​DBI::​Gofer::​Response.3pm.gz
 +/​usr/​share/​man/​man3/​DBI::​Gofer::​Serializer::​Base.3pm.gz
 +/​usr/​share/​man/​man3/​DBI::​Gofer::​Serializer::​DataDumper.3pm.gz
 +/​usr/​share/​man/​man3/​DBI::​Gofer::​Serializer::​Storable.3pm.gz
 +/​usr/​share/​man/​man3/​DBI::​Gofer::​Transport::​Base.3pm.gz
 +/​usr/​share/​man/​man3/​DBI::​Gofer::​Transport::​pipeone.3pm.gz
 +/​usr/​share/​man/​man3/​DBI::​Gofer::​Transport::​stream.3pm.gz
 +/​usr/​share/​man/​man3/​DBI::​Profile.3pm.gz
 +/​usr/​share/​man/​man3/​DBI::​ProfileData.3pm.gz
 +/​usr/​share/​man/​man3/​DBI::​ProfileDumper.3pm.gz
 +/​usr/​share/​man/​man3/​DBI::​ProfileDumper::​Apache.3pm.gz
 +/​usr/​share/​man/​man3/​DBI::​ProfileSubs.3pm.gz
 +/​usr/​share/​man/​man3/​DBI::​ProxyServer.3pm.gz
 +/​usr/​share/​man/​man3/​DBI::​PurePerl.3pm.gz
 +/​usr/​share/​man/​man3/​DBI::​SQL::​Nano.3pm.gz
 +/​usr/​share/​man/​man3/​DBI::​Util::​CacheMemory.3pm.gz
 +/​usr/​share/​man/​man3/​Roadmap.3pm.gz
 +/​usr/​share/​man/​man3/​TASKS.3pm.gz
 +</​code>​
 +Was uns das Paket **perl-DBD-MySQL** bietet, entnehmen wir am einfachsten dem rpm.
 +   # rpm -qil perl-DBD-MySQL
 +
 +<​code>​Name ​       : perl-DBD-MySQL ​              ​Relocations:​ (not relocatable)
 +Version ​    : 4.013                             ​Vendor:​ CentOS
 +Release ​    : 3.el6                         Build Date: Fri 20 Aug 2010 02:31:30 AM CEST
 +Install Date: Fri 27 Jul 2012 08:31:39 PM CEST      Build Host: c6b3.bsys.dev.centos.org
 +Group       : Development/​Libraries ​        ​Source RPM: perl-DBD-MySQL-4.013-3.el6.src.rpm
 +Size        : 345831 ​                          ​License:​ GPL+ or Artistic
 +Signature ​  : RSA/8, Sun 03 Jul 2011 06:55:00 AM CEST, Key ID 0946fca2c105b9de
 +Packager ​   : CentOS BuildSystem <​http://​bugs.centos.org>​
 +URL         : http://​search.cpan.org/​dist/​DBD-mysql/​
 +Summary ​    : A MySQL interface for perl
 +Description :
 +An implementation of DBI for MySQL for Perl.
 +/​usr/​lib64/​perl5/​Bundle
 +/​usr/​lib64/​perl5/​Bundle/​DBD
 +/​usr/​lib64/​perl5/​Bundle/​DBD/​mysql.pm
 +/​usr/​lib64/​perl5/​DBD
 +/​usr/​lib64/​perl5/​DBD/​mysql
 +/​usr/​lib64/​perl5/​DBD/​mysql.pm
 +/​usr/​lib64/​perl5/​DBD/​mysql/​GetInfo.pm
 +/​usr/​lib64/​perl5/​DBD/​mysql/​INSTALL.pod
 +/​usr/​lib64/​perl5/​auto/​DBD
 +/​usr/​lib64/​perl5/​auto/​DBD/​mysql
 +/​usr/​lib64/​perl5/​auto/​DBD/​mysql/​mysql.so
 +/​usr/​share/​doc/​perl-DBD-MySQL-4.013
 +/​usr/​share/​doc/​perl-DBD-MySQL-4.013/​ChangeLog
 +/​usr/​share/​doc/​perl-DBD-MySQL-4.013/​INSTALL.html
 +/​usr/​share/​doc/​perl-DBD-MySQL-4.013/​README
 +/​usr/​share/​doc/​perl-DBD-MySQL-4.013/​TODO
 +/​usr/​share/​man/​man3/​Bundle::​DBD::​mysql.3pm.gz
 +/​usr/​share/​man/​man3/​DBD::​mysql.3pm.gz
 +/​usr/​share/​man/​man3/​DBD::​mysql::​INSTALL.3pm.gz
 +</​code>​
 +
 +==== FHEM ====
 +=== Download ===
 +Als erstes laden wir uns das aktuelle [[http://​fhem.de/​fhem-5.2.tar.gz|Programmarchiv]] von der [[http://​fhem.de/​fhem.html|FHEM Projektseite]] auf unseren Rechner.
 +
 +Hierzu legen wir uns erst noch den entsprechenden Zielordner an, falls noch nicht erfolgt.
 +   # mkdir /​usr/​local/​src/​packages
 +
 +Dann wechseln wir in das Verzeichnis.
 +   # cd /​usr/​local/​src/​packages
 +
 +Im nächsten Schritt holen wir uns nun mit Hilfe von **wget** das entsprechende Programmarchiv.
 +   # wget http://​fhem.de/​fhem-5.2.tar.gz
 +
 +Zu gute Letzt entpacken wir das Archiv, verschieben den Ordner an Ort und Stelle und verlinken diesen entsprechend noch.
 +   # tar zxvf fhem-5.2.tar.gz
 +
 +   # mv /​usr/​local/​src/​packages/​fhem-5.2/​ /​usr/​local/​src/​
 +
 +   # ln -s /​usr/​local/​src/​fhem-5.2 /​usr/​local/​src/​fhem
 +
 +=== Installation ===
 +Die Installation beschließen wir nun nur noch mit folgendem Aufruf:
 +   # make install-pgm2
 +<​code>​After installation start fhem with
 +perl /​usr/​bin/​fhem.pl /​etc/​fhem.cfg
 +
 +
 +mkdir -p /usr/bin /​usr/​share/​fhem /​var/​log/​fhem
 +mkdir -p /​usr/​share/​doc/​fhem /etc /​usr/​share/​man/​man1
 +cp fhem.pl /usr/bin
 +cp -r FHEM /​usr/​share/​fhem
 +rm -rf examples_changed
 +cp -r examples examples_changed
 +perl -pi -e '​s,​modpath \.,modpath /​usr/​share/​fhem,'​ examples_changed/​[a-z]*
 +perl -pi -e '​s,​([^h]) /tmp,$1 /​var/​log/​fhem,'​ examples_changed/​[a-z]*
 +mv /​etc/​fhem.cfg /​etc/​fhem.cfg.`date "​+%Y-%m-%d_%H:​%M:​%S"​`
 +mv: cannot stat `/​etc/​fhem.cfg':​ No such file or directory
 +make: [install-base] Error 1 (ignored)
 +cp examples_changed/​sample_fhem /​etc/​fhem.cfg
 +cp -rp contrib /​usr/​share/​fhem
 +cp -rp docs/* /​usr/​share/​doc/​fhem
 +cp docs/​fhem.man /​usr/​share/​man/​man1/​fhem.pl.1
 +gzip -f -9 /​usr/​share/​man/​man1/​fhem.pl.1
 +cp -r webfrontend/​pgm2/​* /​usr/​share/​fhem/​FHEM
 +cp docs/​commandref.html docs/​faq.html docs/​HOWTO.html /​usr/​share/​fhem/​FHEM
 +cp docs/*.png docs/*.jpg /​usr/​share/​fhem/​FHEM
 +cd examples_changed;​ for i in *; do cp -r $i /​usr/​share/​fhem/​FHEM/​example.$i;​ done
 +cp examples_changed/​sample_pgm2 /​etc/​fhem.cfg
 +</​code>​
 +=== Stationswerte abfragen ===
 +Für die ersten Schritte scheint das Paket [[http://​www.koeniglich.de/​fhem/​fhem.html|FEHM]] recht geeignet. Zumindest können wir schon mal damit die ersten (Meß-)Werte auslesen.
 +
 +Einen ersten Testabruf der Stationsdaten erfolgt mittels **em1010.pl**;​ dieses befindet sich unter //​**/​usr/​local/​src/​fhem/​contrib/​em1010.pl**//​.
 +   # /​usr/​local/​src/​fhem/​contrib/​em1010.pl
 +
 +   ​Usage:​ perl em1010.pl serial-device command args
 +
 +Unseren ersten Stromzähler - der mit der ID 1 - fragen wir also wie folgt ab:
 +   # /​usr/​local/​src/​fhem/​contrib/​em1010.pl /​dev/​ttyUSB1 getDevStatus 1
 +<​code>​Readings ​      ​(off ​ 2): 62071
 +     Nr devs        (off  6): 1
 +     ​puls/​5min ​     (off 13): 6
 +     ​puls.max/​5min ​ (off 15): 443
 +     ​cur.energy(off ​  ): 0.040 kWh
 +     ​cur.power ​     (      ): 0.480 kW
 +     ​cur.power max  (      ): 0.000 kW
 +     ​energy h       (off 33): 0.380 kWh (h)
 +     ​energy d       (off 37): 13.900 kWh (d)
 +     ​energy w       (off 41): 91.907 kWh (w)
 +     total energy ​  ​(off ​ 7): 10356.553 kWh (total)
 +     Alarm PA       (off 45): 0 W
 +     Price CF       (off 47): 0.15 EUR/kWh
 +     ​R/​kW ​ EC       (off 49): 150
 +RAW    0300 77f2 8900 014b b417 00f3 0406 00bb 
 +RAW    0180 f3b7 26ab 2697 1f17 eab6 2680 268d 
 +RAW    1c39 0000 0025 0800 00da 3500 0000 00dc 
 +RAW    05dc 05</​code>​
 +
 +====== FHEM - GPL'd server for house automation ======
 +Im weiteren Verlauf betrachten wie nun das Softwareprojekt [[http://​www.koeniglich.de/​fhem/​fhem.html|FHEM]] etwas genauer. Schließlich wollen wir ja unsere Meßpunkte
 +  - 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:
 +   # vim /​etc/​fhem.cfg ​
 +
 +<file bash /​etc/​fhem.cfg>#​
 +# pgm2 / autocreate configfile. Take a look at the other examples for more.
 +#
 +attr global logfile /​var/​log/​fhem/​fhem-%Y-%m.log
 +attr global modpath /​usr/​share/​fhem ​                 # where our FHEM directory is
 +attr global port 7072 global ​           # our TCP/IP port
 +attr global statefile /​var/​log/​fhem/​fhem.save ​   # where to save the state of the devices
 +attr global verbose 3                  # "​normal"​ verbosity (min 1, max 5)
 +
 +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 /​var/​log/​fhem/​fhem-%Y-%m.log fakelog
 +
 +define autocreate autocreate
 +attr autocreate autosave
 +attr autocreate device_room %TYPE
 +attr autocreate filelog /​var/​log/​fhem/​%NAME-%Y.log
 +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:​INITIALIZED usb create ​
 +
 +
 +# If the above notify did not helped, then you probably have to enable some of
 +# the following lines. ​ Verify first that /dev/xxx ist correct.
 +
 +#define FHZ FHZ /dev/USB0
 +#define CUL CUL /​dev/​ttyACM0@9600 1234
 +#attr CUL rfmode HomeMatic
 +
 +#define EUL TCM 310 /​dev/​ttyACM0@57600
 +#define BscBor TCM 120 /​dev/​ttyUSB0@9600
 +#define BscSmartConnect TCM 310 /​dev/​ttyUSB0@57600
 +
 +# Django : 2012-07-27
 +define EM EM /​dev/​ttyUSB0 # the serial port of an FHZ 1000 PC
 +define Hauptzaehler EMWZ 1
 +define Gaszaehler EMGZ 9
 +define EDV_Schrank EMEM 5
 +</​file>​
 +
 +==== Paketfilter iptables ====
 +Damit Wir mit unserem bevorzugten Webbrowser auf die Webseiten von FHEM zugreifen können, erweitern wir noch bei Bedarf unseren Paketfilter.
 +   # vim /​etc/​sysconfig/​iptables
 +<​code>​...
 +
 +# Django : 2012-07-27 Port 8083 für FHEM freigeschaltet
 +-A INPUT -m state --state NEW -m tcp -p tcp --dport 8083 -j ACCEPT
 +-A INPUT -m state --state NEW -m tcp -p tcp --dport 8084 -j ACCEPT
 +-A INPUT -m state --state NEW -m tcp -p tcp --dport 8085 -j ACCEPT
 +#
 +
 +...
 +</​code>​
 +Zum Aktivieren der neuenRegeln führn wir nun noch einen Restart des Daemons durch.
 +   # service iptables restart
 +
 +===== Programmstart =====
 +Wir starten nunmehr zum ersten mal **FHEM**.
 +   # fhem.pl /​etc/​fhem.cfg
 +
 +Im Logfile **/​var/​log/​fhem/​fhem-2009-01.log** wird uns der Start entsprechend quittiert:
 +<file bash /​var/​log/​fhem/​fhem-2009-01.log>​
 +2012.07.27 14:20:26 2: Telnet port 7072 opened
 +2012.07.27 14:20:26 2: FHEMWEB port 8083 opened
 +2012.07.27 14:20:26 2: FHEMWEB port 8084 opened
 +2012.07.27 14:20:26 2: FHEMWEB port 8085 opened
 +2012.07.27 14:20:26 3: EM opening device /​dev/​ttyUSB0
 +2012.07.27 14:20:26 3: EM opened device /​dev/​ttyUSB0
 +</​file>​
 +
 +In der Prozessliste finden wir das laufende Programm ebenso:
 +   # ps aux | grep fhem
 +
 +   ​root ​     4463  0.0  1.1 150568 11716 pts/1    S    14:20   0:00 /​usr/​bin/​perl /​usr/​bin/​fhem.pl /​etc/​fhem.cfg
 +
 +Mit dem Befehl **netstat -tulpen** können wir auch noch überprüfen,​ ob die Ports 8083, 8084 und 8085 auch geöffnet wurden.
 +   # netstat -tulpen | grep 808
 +
 +   ​tcp ​       0      0 0.0.0.0:​8083 ​               0.0.0.0:​* ​                  ​LISTEN ​     0          410542 ​    ​4463/​perl ​          
 +   ​tcp ​       0      0 0.0.0.0:​8084 ​               0.0.0.0:​* ​                  ​LISTEN ​     0          410543 ​    ​4463/​perl ​          
 +   ​tcp ​       0      0 0.0.0.0:​8085 ​               0.0.0.0:​* ​                  ​LISTEN ​     0          410544 ​    ​4463/​perl
 +
 +Nun rufen wir die Statusseite von **//​FHEM//​** in unserem bevorzugten Browser auf.
 +   $ firefox http://​10.0.0.20:​8083/​fhem
 +
 +{{ :​fun:​fhem-1.png?​direct&​500 |FHEM Statusanzeige}}
 +
 +Über den Menüpunkt [**Everything**] können wir uns die Detail zu unserem Gerät anzeigen lassen.
 +
 +{{ :​fun:​fhem-2.png?​direct&​500 |FHEM Detailanzeige}}
 +
 +Über den FHEM-Befehl **shutdown** können wir unseren ersten Test beenden.
 +
 +{{ :​fun:​fhem-3.png?​direct&​500 |FHEM Befehlseingabe "​shutdown"​}}
 +
 +Im Logfile wird uns dies entsprechend quittiert:
 +   ​2012.07.27 14:31:44 0: Server shutdown
 +
 +Der status unseres FHEM-Gerätes wurde in der Logdatei //​**/​var/​log/​fhem/​fhem.save**//​ gesichert.
 +   # cat /​var/​log/​fhem/​fhem.save
 +
 +<file bash /​var/​log/​fhem/​fhem.save>#​Fri Jul 27 14:31:44 2012
 +setstate EDV_Schrank 0.37 kW
 +setstate EDV_Schrank 2012-07-27 14:26:44 5min_pulses 37
 +setstate EDV_Schrank 2012-07-27 14:26:44 5min_pulses_max 43
 +setstate EDV_Schrank 2012-07-27 14:26:44 alarm_PA_W 0
 +setstate EDV_Schrank 2012-07-27 14:26:44 energy_kWh 154.483
 +setstate EDV_Schrank 2012-07-27 14:26:44 energy_kWh_d 9.055
 +setstate EDV_Schrank 2012-07-27 14:26:44 energy_kWh_h 0.376
 +setstate EDV_Schrank 2012-07-27 14:26:44 energy_kWh_w 64.873
 +setstate EDV_Schrank 2012-07-27 14:26:44 power_kW 0.370
 +setstate EDV_Schrank 2012-07-27 14:26:44 power_kW_max 0.430
 +setstate EDV_Schrank 2012-07-27 14:26:44 price_CF 0.150
 +setstate Gaszaehler 0.12 m3ph
 +setstate Gaszaehler 2012-07-27 14:26:44 5min_pulses 1
 +setstate Gaszaehler 2012-07-27 14:26:44 Rperm3_EC 100
 +setstate Gaszaehler 2012-07-27 14:26:44 act_flow_m3 0.010
 +setstate Gaszaehler 2012-07-27 14:26:44 alarm_PA 0 Watt
 +setstate Gaszaehler 2012-07-27 14:26:44 cum_m3 0.010
 +setstate Gaszaehler 2012-07-27 14:26:44 m3ph 0.120
 +setstate Gaszaehler 2012-07-27 14:26:44 price_CF 0.630
 +setstate Hauptzaehler 0.48 kW
 +setstate Hauptzaehler 2012-07-27 14:31:44 5min_pulses 6
 +setstate Hauptzaehler 2012-07-27 14:31:44 RperKW_EC 150
 +setstate Hauptzaehler 2012-07-27 14:31:44 alarm_PA 0 Watt
 +setstate Hauptzaehler 2012-07-27 14:31:44 cum_kWh 0.206
 +setstate Hauptzaehler 2012-07-27 14:31:44 energy 0.040
 +setstate Hauptzaehler 2012-07-27 14:31:44 power 0.480
 +setstate Hauptzaehler 2012-07-27 14:31:44 price_CF 0.150
 +setstate Hauptzaehler 2012-07-27 14:31:44 summary Pulses: 6 Energy: 0.040 Power: 0.480 Cum: 0.206
 +setstate Logfile active
 +setstate autocreate active
 +setstate global <no definition>​
 +</​file>​
 +===== erweiterte Konfiguration =====
 +==== Startscript ====
 +Damit unser FHEM-Daemon automatisch beim Hochfahren des Rechners gestartet werden kann, legen wir uns noch ein entsprechendes Startscript an.
 +   # vim /​etc/​init.d/​fhem
 +
 +<file bash /​etc/​init.d/​fhem>#​!/​bin/​sh
 +
 +# $Id: fhem 19 2012-07-27 21:33:44Z dws $
 +# example init script for fhem
 +#
 +# chkconfig: 2345 82 28
 +# description:​ FHEM Home automation.
 +#
 +# processname:​ fhem.pl
 +#
 +# Written by Django
 +
 +DAEMON=/​usr/​bin/​fhem.pl
 +PIDFILE=/​var/​run/​fhem.pid
 +OPTION="/​etc/​fhem.conf"​
 +PROG="​FHEM"​
 +test -x $DAEMON || exit 0
 +
 +. /​lib/​lsb/​init-functions
 +
 +case "​$1"​ in
 +  start)
 +    echo -n $"​Starting $PROG: "
 +    $DAEMON $OPTION
 +    echo " ​                                           [  OK  ]"
 +    ;;
 +  stop)
 +    pid=`ps -ef | grep "​fhem.pl"​ | grep -v grep | awk '{ print $2}'`
 +    echo -n $"​Stopping $PROG: "
 +    kill $pid
 +    echo " ​                                           [  OK  ]"
 +    ;;
 +  status)
 +    cnt=`ps -ef | grep "​fhem.pl"​ | grep -v grep | wc -l`
 +    if [ "​$cnt"​ -eq "​0"​ ] ; then
 +      echo "$0 is not running"​
 +    else
 +      echo "$0 is running"​
 +    fi
 +    ;;
 +  *)
 +    echo "​Usage:​ $0 {start|stop|status}"​
 +  exit 1
 +esac
 +
 +exit 0
 +</​file>​
 +
 +Nun können wir bequem den **FHEM-Daemon** starten und Stoppen.
 +   # service fhem start
 +
 +   ​Starting FHEM:                                             ​[ ​ OK  ]
 +
 +Oder eben stoppen:
 +   # service fhem stop
 +
 +   ​Stopping FHEM:                                             ​[ ​ OK  ]
 +
 +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
 +
 +   ​fhem ​          ​ 0:​off 1:​off 2:​on 3:​on 4:​on 5:​on 6:​off
 +==== 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:​ldap:​start|LDAP-Server]] sichern wir noch die Übertragung mit Hilfe eines SSL-Zertifikats ab.
 +
 +In die Konfigurationsdatei fü unsere vHosts //​**/​etc/​httpd/​conf.d/​vhosts.conf**//​ tragen wir hierzu ein.
 +   # vim /​etc/​httpd/​conf.d/​vhosts.conf
 +
 +<file apache /​etc/​httpd/​conf.d/​vhosts.conf>#​
 +# FHEM : fhem.nausch.org
 +#
 +<​VirtualHost *:80>
 +        ServerAdmin webmaster@nausch.org
 +        ServerName fhem.nausch.org
 +        ServerAlias www.fhem.nausch.org
 +        ServerPath /
 +
 +        <​Location />
 +                Options -Indexes FollowSymLinks
 +                Order deny,allow
 +                Deny from all
 +                Allow from 127.0.0.1
 +                Allow from 10.0.0.20/​32
 +                Allow from 10.0.10.0/​26
 +        </​Location>​
 +
 +        Redirect / https://​fhem.nausch.org/​
 +
 +        ErrorLog logs/​fhem_error.log
 +        CustomLog logs/​fhem_access.log combined
 +</​VirtualHost>​
 +<​VirtualHost *:443>
 +        ServerAdmin webmaster@nausch.org
 +        ServerName fhem.nausch.org
 +        ServerAlias www.fhem.nausch.org
 +        ServerPath /
 +
 +        <​Location />
 +                Options -Indexes FollowSymLinks
 +                AuthType Basic
 +                AuthName "FHEM Home Automation on vml000090 - nausch.org"​
 +                AuthBasicProvider ldap
 +                AuthzLDAPAuthoritative On
 +                AuthLDAPURL "​ldap://​ldap.dmz.nausch.org:​389/​ou=People,​dc=nausch,​dc=org?​uid"​
 +                AuthLDAPBindDN "​cn=TechnischerUser,​dc=nausch,​dc=org"​
 +                AuthLDAPBindPassword "​Das_streng_geheime_Passwort_das_keiner_kennt"​
 +                Require ldap-user django michael
 +                Order deny,allow
 +                Deny from all
 +                Allow from 127.0.0.1
 +                Allow from 10.0.0.20/​32
 +                Allow from 10.0.10.0/​26
 +        </​Location>​
 +
 +        ProxyRequests Off
 +        ProxyPreserveHost On
 +        ProxyPass /fhem http://​10.0.0.20:​8083/​fhem
 +        ProxyPassReverse /fhem http://​10.0.0.20:​8083/​fhem
 +
 +        ErrorLog logs/​fhem_error.log
 +        CustomLog logs/​fhem_access.log combined
 +</​VirtualHost>​
 +</​file>​
 +Bevor wir den Apache-Webserver durchstarten überprüfen wir noch die Konfigurationsdatei auf schreib und Tipp-Fehler.
 +   # service httpd configtest
 +
 +   ​Syntax OK
 +
 +Da kein Fehler enthalten ist, starten wir nun zur Aktivierung den Webserver einmal durch.
 +   # service httpd condrestart
 +
 +   ​Stopping httpd: ​                                           [  OK  ]
 +   ​Starting httpd: ​                                           [  OK  ]
 +
 +Wir erreichen nun unseren vHost für FHEM ganz einfach via www.fhem.nausch.org. Geben wir beim Verbindungsprotokoll "​nur"​ **http** statt **https** ein, werden wir direkt zur verschlüsselten Seite weitergeleitet.
 +   $ firefox http://​fhem.nausch.org
 +
 +{{ :​fun:​fhem-4.png?​direct&​500 |FHEM Bildschirmhardcopy des abgesicherten vHOSTs}}
 +
 +==== erweiterte iptables Paketfilterregel ====
 +Wir haben zwar im vorgenannten Beispiel bereits über die Apache-eigenen Regeln den Zugriff auf bestimmte Hosts beschränkt. Zur Sicherheit werden wir aber nun die Paketfilterregeln noch etwas strenger auslegen.
 +   # vim /​etc/​sysconfig/​iptables
 +<​code>​...
 +
 +# Django : 2012-07-27 Port 8083 von IP-Adresse 10.0.0.90 für FHEM freigeschaltet
 +-A INPUT -s 10.0.0.90 -i eth1 -m tcp -p tcp --dport 8083 -j ACCEPT
 +#
 +
 +...
 +</​code>​
 +Zum Aktivieren der neuenRegeln führn wir nun noch einen Restart des Daemons durch.
 +   # service iptables restart
 +
 +==== Datenbank-Konfiguration ====
 +Im Verzeichnis **/​usr/​local/​src/​fhem/​contrib/​dblog/​** werden uns Vorlagen für unsere Datenbankeinstellung mitgeliefert,​ die wir nun nachfolgend zu Rate ziehen werden.
 +==== Datenbankdefinition ====
 +Die Konfiguration der nötigen Tabellen nehmen wir mit Hilfe der von FHEM mitgelieferten Schematas vor. Dazu nutzen wir entweder direkt den Konsolenzugang,​ oder wir verwenden [[centos:​phpmyadmin_c6|phpMyAdmin]].
 +
 +  - **Datenbank anlegen** \\ Als erstes legen wir die Datenbank an. MySQL frägt uns bei den nachfolgenden Definitionen nach dem Passwort unseres mysql-Superusers **root**. <​code>​ # mysql -h 127.0.0.1 -u root -p</​code>​ <​code>​Enter password: ​
 +Welcome to the MySQL monitor. ​ Commands end with ; or \g.
 +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 '​help;'​ or '​\h'​ for help. Type '​\c'​ to clear the current input statement.
 +
 +mysql> create database fhem;
 +Query OK, 1 row affected (0.11 sec)
 +</​code>​
 +  - **neuen Benutzer anlegen** \\ Mit folgendem Befehl legen wir uns einen neuen Nutzer an:<​code>​mysql>​ CREATE USER '​fhemdatabaseuser'​@'​vml000020.dmz.nausch.org'​ IDENTIFIED BY '​databasepassword';​
 +Query OK, 0 rows affected (0.00 sec)
 +
 +mysql> ​ </​code>​ sowie <​code>​mysql>​ CREATE USER '​fhemdatabaseuser'​@'​10.0.0.20'​ IDENTIFIED BY '​databasepassword';​
 +Query OK, 0 rows affected (0.00 sec)
 +
 +mysql> </​code>​
 +  - **Benutzerprivilegien setzen und zuweisen** \\ Anschließend setzen wir die Benutzerrechte unseres gerade angelegten Datenbanknutzers. <​code>​mysql>​ GRANT ALL PRIVILEGES ON fhem.* TO '​fhemdatabaseuser'​@'​vml000020.dmz.nausch.org'​ IDENTIFIED BY '​databasepassword'​ WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
 +Query OK, 0 rows affected (0.01 sec)
 +
 +mysql></​code>​ und <​code>​mysql>​ GRANT ALL PRIVILEGES ON fhem.* TO '​fhemdatabaseuser'​@'​10.0.0.20'​ IDENTIFIED BY '​databasepassword'​ WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
 +Query OK, 0 rows affected (0.01 sec)
 +
 +mysql></​code>​
 +  - **Rechte des Nutzers in der Datenbank neu laden** \\ Im letzten Schritt laden wir nun die Rechte unseres neuen Datenbankusers.<​code>​mysql>​ FLUSH PRIVILEGES;
 +Query OK, 0 rows affected (0.00 sec)
 +
 +mysql></​code>​
 +  - **mySQL-Datenbanktabellen anlegen** \\ Aus der Vorlagedatei //​**/​usr/​local/​src/​fhem/​contrib/​dblog/​fhemdb_create.sql**//​ übernehmen wir nun die Tabellendefinition und legen diese an. Zuvor benutzen wir noch die richtige Datenbank **fhem**, wie wir zuvor angelegt haben.<​code>​mysql>​ use fhem;
 +Database changed</​code>​ Anschließend legen wir die beiden Tabellen an. <​code>​mysql>​ CREATE TABLE history (TIMESTAMP TIMESTAMP, DEVICE varchar(32),​ TYPE varchar(32),​ EVENT varchar(64),​ READING varchar(32),​ VALUE varchar(32),​ UNIT varchar(32));​
 +Query OK, 0 rows affected (0.08 sec)</​code>​ und <​code>​mysql>​ CREATE TABLE current (TIMESTAMP TIMESTAMP, DEVICE varchar(32),​ TYPE varchar(32),​ EVENT varchar(64),​ READING varchar(32),​ VALUE varchar(32),​ UNIT varchar(32));​
 +Query OK, 0 rows affected (0.13 sec)</​code>​
 +  - **mySQL-Datenbankverbindung beenden** \\ Unsere Konfiguration unseres neuen Datenbanknutzers ist hiermit beendet und wir können die Verbindung zur Datenbank wieder schließen.<​code>​mysql>​ exit
 +Bye
 +</​code>​
 +
 +
 +==== Zugangstest ====
 +Als nächstes überprüfen wir, ob der zuvor angelegt User/Zugang auch funktioniert.
 +   # mysql -D fhem -u fhemuser -h mysql-host -p
 +<​code>​Enter password: ​
 +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. ​ Commands end with ; or \g.
 +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 '​help;'​ or '​\h'​ for help. Type '​\c'​ to clear the current input statement.
 +
 +mysql> show tables;
 ++----------------+
 +| Tables_in_fhem |
 ++----------------+
 +| current ​       |
 +| history ​       |
 ++----------------+
 +2 rows in set (0.00 sec)
 +
 +mysql> quit
 +Bye
 +</​code>​
 +
 +==== erweiterte Konfiguration ====
 +In der **README** unter **/​usr/​local/​src/​fhem-4.5/​contrib/​dblog** finden wir weitere Angaben zur Konfiguration:​
 +   # less /​usr/​local/​src/​fhem/​contrib/​dblog/​README
 +
 +<file bash /​usr/​local/​src/​fhem-4.5/​contrib/​dblog/​README>​For usage instruction see commandref.html,​ section define
 +2007-12-30bn
 +
 +- 93_DbLog.pm
 +  copy this file into <​modpath>/​FHEM
 +- 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
 +</​file>​
 +  - Wir kopieren also die Datei **93_DbLog.pm** in unseren **modpath**. <​code>​ # cp /​usr/​local/​src/​fhem/​contrib/​dblog/​93_DbLog.pm /​usr/​share/​fhem/​FHEM/<​code>​
 +  - Anschließend kopieren wir die Datenbank-Konfigurationsdatei nach //​**/​etc/​**//​. <​code>​ # cp /​usr/​local/​src/​fhem/​contrib/​dblog/​db.conf /​etc/​fhem_db.conf</​code>​
 +  - Dann bearbeiten wir die gerade kopierte Konfigurationsdatei und tragen dort unsere benutzerspezifischen Änderungen ein.<​code>​ # vim /​etc/​fhem_db.conf</​code>​ <file bash /​etc/​fhem_db.conf>#​
 +# database configuration file
 +
 +#
 +#
 +%dbconfig= (
 +        connection => "​mysql:​database=fhem;​host=databasehost;​port=3306",​
 +        user => "​fhemdatabaseuser",​
 +        password => "​databasepassword",​
 +);
 +
 +</​file>​
 +  - Abschließend erweitern wir nun noch unsere Hauptkonfigurationsdatei von FHEM //​**/​etc/​fhem.cfg**//​ um nachfolgende Definitionen.<​code>​ # vim /​etc/​fhem.cfg</​code>​
 +
 +
 +Unser Hauptkonfigurationsdatei **/​usr/​local/​etc&​fhem/​fhem.cfg** erweitern wir um folgende Definitionen:​
 +<​code>​Definition der beiden Strommessstellen
 +define Hauptzaehler EMWZ 1
 +define EDV_Schrank EMEM 5
 +
 +# Erst einmal alle Meldungen in die Datenbank schreiben
 +define logdb DbLog /​usr/​local/​etc/​fhem/​db.conf .*:.* </​code>​
 +
 +Nach dem Start unseres Serverdienstes **//​fhem.pl//​** erhalten wir eine entsprechende positive Meldung im Logfile.
 +   # fhem.pl /​etc/​fhem.conf
 +
 +<​code>​2012.07.27 20:35:39 2: Telnet port 7072 opened
 +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 /​dev/​ttyUSB0
 +2012.07.27 20:35:39 3: EM opened device /​dev/​ttyUSB0
 +2012.07.27 20:36:46 3: Connecting to database mysql:​database=fhem;​host=10.0.0.30;​port=3306 with user fhemdatenbankuser
 +2012.07.27 20:36:46 3: Connection to db mysql:​database=fhem;​host=datenbankhost.dmz.nausch.org;​port=3306 established
 +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)
 +</​code>​
 +In unserer MySQL-Datenbanktabelle tauchen die entsprechenden Werte auf:
 +
 +{{ :​fun:​fhem_phpmyadmin.png?​direct&​500 |PHPmyAdmin-Fenster mit Datenbankansicht}}
 +
 +Ebenso werden in der Statusübersicht im Browserfenster die beiden definierten Meßpunkte angezeigt:
 +
 +{{ :​fun:​fhem-2.png?​direct&​500 |FHEM Anzeige mit Verbrauchsübersicht}}
 +
 +Zum Abfragen der MySQL-Datenbank kann das mitgelieferte Programm **fhemdb_get.pl** benutzt werden. Dieses kopieren wir als erstes nach /​usr/​local/​bin
 +   # cp /​usr/​local/​src/​fhem/​contrib/​dblog/​fhemdb_get.pl /​usr/​local/​bin/​
 +
 +Anschließend passen wir noch die Datenbankdefinitionen in dem Script unseren lokalen Bedürfnissen nach an.
 +   # vim /​usr/​local/​bin/​fhemdb_get.pl
 +   
 +<file perl /​usr/​local/​bin/​fhemdb_get.pl>#​!/​usr/​bin/​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://​www.gnu.org/​copyleft/​gpl.html.
 +#  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. ​ See the
 +#  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: ​
 +#   ​fhemdb_get.pl <​device>​ <​reading>​ [<​reading>​ ...]
 +# Example:
 +#   ​fhemdb_get.pl ext.ks300 temperature humidity
 +#
 +#
 +
 +#
 +# global configuration
 +#
 +my $dbconn ​     = "​mysql:​database=fhem;​host=datenbankhost.dmz.nausch.org;​port=3306";​
 +my $dbuser ​     = "​fhemdatenbankuser";​
 +my $dbpassword ​ = "​fhemdatenbankpassword";​
 +
 +#
 +# nothing to change below this line
 +#
 +
 +use strict;
 +use warnings;
 +use DBI;
 +
 +(@ARGV>​=2) || die "​Usage:​ fhemdb_get.pl <​device>​ <​reading>​ [<​reading>​ ... ]";
 +
 +my $device= $ARGV[0];
 +my @readings=@ARGV;​ shift @readings;
 +my $set= join(",",​ map({"​\'"​ . $_ . "​\'"​} @readings));​
 +
 +my $dbh= DBI->​connect_cached("​dbi:​$dbconn",​ $dbuser, $dbpassword) || 
 + die "​Cannot connect to $dbconn: $DBI::​errstr";​
 +my $stm= "​SELECT READING, VALUE FROM current WHERE
 + (DEVICE='​$device'​) AND
 + (READING IN ($set))"; ​
 +my $sth= $dbh->​prepare($stm) || 
 + die "​Cannot prepare statement $stm: $DBI::​errstr";​
 +my $rc= $sth->​execute() ||
 + die "​Cannot execute statement $stm: $DBI::​errstr";​
 +
 +my %rs;
 +my $reading;
 +my $value;
 +while( ($reading,​$value)= $sth->​fetchrow_array) {
 + $rs{$reading}= $value;
 +}
 +foreach $reading (@readings) {
 + $value= $rs{$reading};​
 + $value= "​NULL"​ if(!defined($value));​
 + print "​$reading:​$value ";
 +}
 +print "​\n";​
 +die $sth->​errstr if $sth->​err;​
 +$dbh->​disconnect();​
 +
 +
 +</​file>​
 +
 +Zum Abfragen des aktuellen Zählerverbrauchswert unseres Hauptzählers verwenden wir folgende Syntax: **fhemdb_get.pl <​device>​ <​reading>​ [<​reading>​ ...]**, also zum Beispiel:
 +   # fhemdb_get.pl Hauptzaehler cum_kWh power
 +
 +   ​cum_kWh:​5.656 power:0.720
 +==== 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 **/​etc/​fhem.conf** erweitern wir daher um folgende Definitionen:​
 +   # vim /​etc/​fhem.conf
 +
 +<file bash /​etc/​fhem.conf>#​
 +# pgm2 / autocreate configfile. Take a look at the other examples for more.
 +#
 +attr global logfile /​var/​log/​fhem/​fhem-%Y-%m.log
 +attr global modpath /​usr/​share/​fhem ​                 # where our FHEM directory is
 +attr global port 7072 global ​           # our TCP/IP port
 +attr global statefile /​var/​log/​fhem/​fhem.save ​   # where to save the state of the devices
 +attr global verbose 3                  # "​normal"​ verbosity (min 1, max 5)
 +
 +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 /​var/​log/​fhem/​fhem-%Y-%m.log fakelog
 +
 +define autocreate autocreate
 +attr autocreate autosave
 +attr autocreate device_room %TYPE
 +attr autocreate filelog /​var/​log/​fhem/​%NAME-%Y.log
 +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:​INITIALIZED usb create ​
 +
 +
 +# If the above notify did not helped, then you probably have to enable some of
 +# the following lines. ​ Verify first that /dev/xxx ist correct.
 +
 +#define FHZ FHZ /dev/USB0
 +#define CUL CUL /​dev/​ttyACM0@9600 1234
 +#attr CUL rfmode HomeMatic
 +
 +#define EUL TCM 310 /​dev/​ttyACM0@57600
 +#define BscBor TCM 120 /​dev/​ttyUSB0@9600
 +#define BscSmartConnect TCM 310 /​dev/​ttyUSB0@57600
 +
 +# Django : 2012-07-27
 +define EM EM /​dev/​ttyUSB0 # the serial port of an FHZ 1000 PC
 +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 /​etc/​fhem_db.conf .*:.*
 +
 +# Django : 2012-07-27
 +# Nur noch die aktuellen verbrauchswerte in die MySQL schreiben
 +define logdb DbLog /​etc/​fhem_db.conf Hauptzaehler:​power.*|EDV_Schrank:​power_kW\b.*|Gaszaehler:​act_flow_m3.* ​
 +</​file>​
 +
 +Mit einem **rereadcfg** veranlassen wir nun, dass die neue Konfigurationseinstellung(en) aktiv werden. ​
 +====== Graphische Datenaufbereitung mit cacti ======
 +{{:​fun:​strom_gesamt.png?​125 |Cacti-Graphik deds Stromverbrauches}} Die optische Aufbereitung der hinterlegten Verbrauchswerte in der MySQL-Datenbank nehmen wir mit Hilfe von [[http://​www.cacti.net/​|Cacti]] vor. Die hierzu notwendige Installation von **Cacti** ist im Dokuwiki unter [[centos:​cacti_c6:​start|Serverüberwachung mittels SNMP, RRD-Tool und Cacti]] ausführlich beschrieben.
 +
 +Die Konfiguration(en) zum Darstellen unserer Energieverbrauchswerte (Gas und Strom) setzt auf einen funktionstüchtigen [[https://​cacti.nausch.org|Cacti-Server]] auf und ist im Kapitel [[centos:​energieverbrauch|Energieverbrauch]] bei den [[centos:​cacti_c6:​start#​konfigurationsbeispiele|Cacti Beispielskonfigurationen]] beschrieben .
 +===== Gaszähler =====
 +{{:​fun:​emgz.png?​150 |Gaszählerbild}}Die optische Erkennung der Walzendrehungen haben mit dem von ELV mitgelieferten "​optischen Auge" nie so recht funktioniert - da die Erkennung wohl nur in einer sehr eingegrenzten Drehgeschwindigkeit zuverlässig funktioniert. Ich habe mir daher bei der Firma [[http://​www.heitland-gmbh.de|Ernst Heitland]] für meinen Gaszähler einen passenden Reedkontakt (//ACTARIS 951-858-06 08 30/1004//) besorgt.
 +
 +Der Anschluß des Reedkontaktes erfolgt an den [[http://​www.elv.de/​output/​controller.aspx?​cid=74&​detail=10&​detail2=12614|Funk-Sensor Gaszähler EM 1000-GZ und EM 1000-GZS ohne Netzteil]]. Das Gerät ist auch als [[http://​www.elv.de/​Funk-Sensor-Gaszähler-EM-1000-GZ-und-EM-1000-GZS,​-Komplettbausatz-ohne-Netzteil/​x.aspx/​cid_74/​detail_10/​detail2_11221|Bausatz:​ Funk-Sensor Gaszähler EM 1000-GZ und EM 1000-GZS]] erhältlich. Den Schließkontakt des Heitland-Reed-Kontaktes habe ich dabei einfach zwischen **ST6** und **ST3**, und den Öffner zwischen **ST5** und **ST4** geklemmt und die originale Sensoreinheit entsorgt. Die Klemmen bezeichnen dabei die [[http://​www.elv-downloads.de/​service/​manuals/​EM1000GZGZS/​62575_EM1000GZ_GZS_km.pdf|Anschlussklemmen der Sensoreinheit EM 1000-GZS]]. Bild 5 auf Seite 5 des vorgenannten PDFs illustriert die Klemmpunkte.
 +
 +Die Definition des Ausgabegraphen ist hier dokumentiert:​
 +
 +{{ :​fun:​gas_graph.png?​600 }}
 +===== (Haupt)-Stromzähler ​ =====
 +{{:​fun:​stromzaehler.png?​100 }} Zum Erfassen des Stromverbrauches nutze ich den **EM 1000-WZ**, der an Hand der roten Markierung der Drehscheibe am Zähler den Verbrauch erfassen kann.
 +
 +Die Definition des Ausgabegraphen ist hier dokumentiert:​
 +
 +{{ :​fun:​strom_ges.png?​600 }}
 +===== (EDV)-Stromzähler ​ =====
 +{{:​fun:​em1000-hsm.png?​100 }} Zum Erfassen des Stromverbrauches nutze ich den **EM 1000-HSM**, der direkt im Stromkreis der Zuleitung zum EDV-Schrank hängt, den Verbrauch misst und weiter gibt.
 +
 +Die Definition des Ausgabegraphen ist hier dokumentiert:​
 +
 +{{ :​fun:​strom_it.png?​600 }}
 +===== Stromzähler ​ =====
 +Den Stromverbrauch,​ also EDV-Schrank und Gesamthaus ist in nachfolgendem Graphen überlagert dargestellt.
 +
 +{{ :​fun:​ges_strom.png?​600 }}
 +
  
  • fun/energie-funk-mess-system_em_1000.txt
  • Zuletzt geändert: 20.04.2018 09:06.
  • (Externe Bearbeitung)