Quantcast
Channel: FHEM – wolf-u.li
Viewing all 46 articles
Browse latest View live

Update des Busware SCC mit der neuesten culfw Firmware

$
0
0

Vor kurzem hatte ich mal wieder eine Komplettrenovierung meiner FHEM Installation durchgezogen und dabei auch ein Update der SCC Firmware gemacht. Nachdem man überall so ein zwei Hinweise findet, aber keine komplette Anleitung gibt es diese nun hier. Im folgenden gehe ich davon aus, dass einer oder mehrere SCCs auf einem Raspberry PI installiert wurden. Entsprechende Anpassungen bei Verwendung einer anderen Plattform bitte ich den User selbst durchzuführen.

Ich habe damit begonnen, erstmal die Version der SCCs herauszufinden. Dies habe ich mit minicom gemacht:

apt-get install minicom
minicom -b 38400 -o -D /dev/ttyAMA0

Das öffnen nun die Schnittstelle zu den SCCs. Um die Version des ersten SCCs herauszufinden muss man V (also als Großbuchstabe) eingeben. Die Eingabe wird nicht angezeigt. Nach den drücken der Enter-Taste kommt so eine Ausgabe:

Welcome to minicom 2.7
 
OPTIONS: I18n
Compiled on Jan 12 2014, 05:42:53.
Port /dev/ttyAMA0, 13:08:20
 
Press CTRL-A Z for help on special keys
 
V 1.58 CSM868

Will man nun die weiteren SCCs prüfen, so muss man vor das V noch * setzen. Also z.B. *V ist der erste, **V ist der zweite und so weiter. Das sieht bei meinen drei dann so aus:

Welcome to minicom 2.7
 
OPTIONS: I18n
Compiled on Jan 12 2014, 05:42:53.
Port /dev/ttyAMA0, 13:08:20
 
Press CTRL-A Z for help on special keys
 
V 1.58 CSM868
*V 1.58 CSM433
**V 1.58 CSM868

Zum Beenden von minicom reicht die Tastenkombination „STRG„+“a“ gefolgt von „q„. Dann kommt eine Abfrage, die man bejahen kann.

Beginne mit dem Download des culfw source-codes auf ein temporäres Verzeichnis auf deinem Raspberry PI, bei mir /opt/culfw-code:

apt-get install subversion
cd /opt/
svn checkout http://svn.code.sf.net/p/culfw/code/trunk culfw-code
cd /opt/culfw-code

Für die Ausführung des nächsten Schrittes muss auf dem betreffenden SCC der Programmier-Knopf gedrückt werden, BEVOR und WÄHREND der Befehl ausgeführt wird.

make program

Für jeden weiteren SCC den letzten Schritt einfach wiederholen. Zum Schluss habe ich nochmal die Versionen überprüft, was bei mir erfolgreich V 1.65 bei allen angezeigt hat.


Related posts:


© 2005-2014 by Uli Wolf - This Content is distributed under the Creative Commons License
This feed is for personal, non-commercial use only.
The use of this feed on other websites without attribution to the author and notification of the author breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint: d2a576b5311479d89eff39b7ca886f6b)

Debian Jessie Minimal für eine unattended FHEM Installation auf dem Raspberry PI

$
0
0

Vor einiger Zeit habe ich darüber gebloggt, dass es relativ einfach ist, eine minimal-Installation auf dem Raspberry Pi via raspbian-ua-netinst durchzuführen. Ich habe dann noch etwas weitergelesen und – da ich sowieso clean auf Jessie upgraden wollte – habe mir Gedanken gemacht wie man das weiter automatisieren kann sodass FHEM schnell installiert wird.

So sieht nun meine Datei installer-config.txt mittlerweile aus:

release=jessie
hostname=fhemtest
rootpw=fhemtest
cmdline="dwc_otg.lpm_enable=0 console=tty1 elevator=deadline"
packages=rpi-update,raspi-config,python-soappy,python-dateutil,python-pip,python-dev,build-essential,libtiff5-dev,zlib1g-dev,libfreetype6-dev,liblcms2-dev,libwebp-dev,tcl8.5-dev,tk8.5-dev python-tk,libjpeg-dev,raspi-copies-and-fills,rng-tools,nano,lsof,unzip,psmisc,apt-utils,avrdude,avr-libc,fonts-freefont-ttf,libmozilla-ca-perl,minicom,dfu-programmer,libsys-statistics-linux-perl,libjson-perl,libio-socket-ssl-perl,libgd-text-perl,libimage-librsvg-perl,imagemagick,sqlite3,libdevice-serialport-perl,libwww-perl,libxml-simple-perl,libdbi-perl,libnet-smtp-ssl-perl,libdbd-mysql,libdbd-sqlite,libdbd-sqlite3,libdbd-sqlite2-perl,libdbd-sqlite3-perl,libtext-diff-perl,diffutils,dos2unix,findutils,nano,screen,subversion,strace,bluez,bluez-tools,libnet-telnet-perl,e2fsprogs,dosfstools,git,cmake,libusb-1.0-0-dev,build-essential,console-data,console-setup,keyboard-configuration,libjson-xs-perl,libsoap-lite-perl
ip_addr=dhcp
ip_netmask=0.0.0.0
ip_broadcast=0.0.0.0
ip_gateway=0.0.0.0
ip_nameservers=

Die Pakete sind die gebräuchlichsten, welche von FHEM und diversen Modulen (u.a. yowsup, presence, configdb, dblog, rss) verwendet werden. Gleichzeitig wird der Bluetooth-Stack und diverse developer tools mit installiert. Ich habe hier noch die ip_* variablen aufgeführt, welche für die Vergabe einer statischen IP praktisch sind (dann ip_addr auf static setzen).

Mittels der Datei post-install.txt kann man weitere Aktionen auslösen, welche nach der Erfolgen Image-Installation durchgeführt werden sollen. Bei mir sieht diese so aus:

## Definitions
# Root Partition
export D_ROOT=/rootfs
 
# Enable Power LED
echo "Start configuring power led"
echo "echo 1 > /sys/class/leds/led1/brightness" >> /etc/rc.local
echo "echo input | sudo tee /sys/class/leds/led1/trigger" >> /etc/rc.local
echo "echo mmc0 | sudo tee /sys/class/leds/led0/trigger" >> /etc/rc.local
echo "End configuring power led"
 
# Configure Timezone
echo "Start configuring timezone"
echo "Europe/Berlin" > $D_ROOT/etc/timezone
chroot $D_ROOT dpkg-reconfigure -f noninteractive tzdata
echo "End configuring timezone"
 
# Configure Keyboard layout
echo "Europe/Berlin" > $D_ROOT/etc/timezone
echo "# KEYBOARD CONFIGURATION FILE" > $D_ROOT/etc/default/keyboard
echo "# Consult the keyboard(5) manual page." > $D_ROOT/etc/default/keyboard
echo 'XKBMODEL="pc105"' > $D_ROOT/etc/default/keyboard
echo 'XKBLAYOUT="de"' > $D_ROOT/etc/default/keyboard
echo 'XKBVARIANT="nodeadkeys"' > $D_ROOT/etc/default/keyboard
echo 'XKBOPTIONS="terminate:ctrl_alt_bksp"' > $D_ROOT/etc/default/keyboard
echo 'BACKSPACE="guess"' > $D_ROOT/etc/default/keyboard
chroot $D_ROOT setupcon
 
# Configure Locale
echo "Start configuring locale"
sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' $D_ROOT/etc/locale.gen && \
sed -i -e 's/# nb_NO.UTF-8 UTF-8/nb_NO.UTF-8 UTF-8/' $D_ROOT/etc/locale.gen && \
sed -i -e 's/# de_DE ISO-8859-1/de_DE ISO-8859-1/' $D_ROOT/etc/locale.gen && \
sed -i -e 's/# de_DE.UTF-8 UTF-8/de_DE.UTF-8 UTF-8/' $D_ROOT/etc/locale.gen && \
sed -i -e 's/# de_DE@euro ISO-8859-15/de_DE@euro ISO-8859-15/' $D_ROOT/etc/locale.gen && \
sed -i -e 's/# en_US ISO-8859-1/en_US ISO-8859-1/' $D_ROOT/etc/locale.gen && \
sed -i -e 's/# en_US.ISO-8859-15 ISO-8859-15/en_US.ISO-8859-15 ISO-8859-15/' $D_ROOT/etc/locale.gen && \
sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' $D_ROOT/etc/locale.gen && \
echo 'LANG=en_US.UTF-8'> $D_ROOT/etc/default/locale && \
chroot $D_ROOT dpkg-reconfigure --frontend=noninteractive locales && \
chroot $D_ROOT update-locale LANG=en_US.UTF-8
echo "End configuring locale"
 
# Configure Swap
echo "Start configuring swap"
dd if=/dev/zero of=$D_ROOT/swap bs=1M count=512
echo "/swap none swap sw 0 0" >> $D_ROOT/etc/fstab
echo "End configuring swap"
 
# Configure Random Number generator
echo "Start configuring Random Number generator"
echo "bcm2708-rng" >> $D_ROOT/etc/modules
echo "End configuring Random Number generator"
 
# Configure inittab
echo "Start configuring inittab"
sed -i 's/\(^.*T0.*$\)/#\ \1/' $D_ROOT/etc/inittab
echo "End configuring inittab"
 
# Configure fhem
echo "Start configuring fhem"
chroot $D_ROOT useradd -G dialout -g staff -M -s /bin/bash fhem
export F_FHEMFILENAME=fhem-5.6
mkdir -p $D_ROOT/opt/ && cd $D_ROOT/opt/ && wget http://fhem.de/$F_FHEMFILENAME.tar.gz && tar xzf $F_FHEMFILENAME.tar.gz && mv $F_FHEMFILENAME fhem && rm $F_FHEMFILENAME.tar.gz && chroot $D_ROOT "chown fhem:dialout -R /opt/fhem"
echo "End configuring fhem"
 
# Configure hmland
echo "Start configuring hmland"
mkdir -p $D_ROOT/opt/hmland
chroot $D_ROOT "git clone git://git.zerfleddert.de/hmcfgusb /opt/hmland && cd /opt/hmland && make"
echo "End configuring hmland"

Ganz am Ende klappt der chown auf das fhem verzeichnis und der git checkout noch nicht ganz wie es soll, diese muss man derzeit noch manuell nachziehen – muss ich mir mal ansehen wo es hakt 😉

So wie wendet man das nun an? Zunächst mal rate ich dazu eine etwas größere (Micro-)SD-Karte zu verwenden – ich fahre derzeit eine 64GB aber etwas kleiner tuts auch. Mit 4GB kam ich nicht zurecht, das war immer relativ knapp. Ich würde eher zu mindestens 8, besser 16GB tendieren.

  • Neuestes Release von raspbian-ua-netinst holen
  • (Micro-)SD-Karte in FAT32 formatieren und die heruntergeladenen Dateien darauf ablegen
  • Die beiden Dateien installer-config.txt und post-install.txt auf der Karte ebenfalls anlegen und mit Inhalt füllen
  • (Micro-)SD-Karte in Raspberry
  • Raspberry an Netzwerk anschließen
  • Optional: Raspberry an Monitor anschließen um Fortschritt zu sehen
  • Raspberry an Strom stecken
  • ~20 Minuten warten
  • SSH auf den gesetzten Hostname von oben (bei mir wars „fhem“) probieren. User: root & Passwort wie oben (bei mir wars fhemtest)
  • Log /var/log/raspbian-ua-netinst.log ansehen und bei Bedarf verbleibende Kommandos nachziehen
  • FHEM verwenden

Getestet wurde das ganze zuletzt am 18.06.2015 – sollte sich etwas verändert haben, so bitte ich um einen Kommentar


Related posts:


© 2005-2014 by Uli Wolf - This Content is distributed under the Creative Commons License
This feed is for personal, non-commercial use only.
The use of this feed on other websites without attribution to the author and notification of the author breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint: d2a576b5311479d89eff39b7ca886f6b)

tPacketCapture zum Sniffen des Datenverkehrs auf Android

$
0
0

Gerade eben hatte ich eine neue Herausforderung: Ich wollte das Protokoll zwischen einer Android-App und einem Controller herausbekommen um es in FHEM einzubinden. Zunächst hatte ich herumgemacht mit einem Notebook, welches mein Handy zu dem Controller bridged und mit Wireshark arbeitet, aber habe dann relativ schnell aufgegeben, da das Bridgen nicht gleich so wollte wie ich 😉 Dann habe ich mich auf die Suche im FHEM-Forum gemacht und siehe da: Es hatte schon mal jemand das Problem.

Lösung: tPacketCapture

Damit wars einfach und das pcap file konnte ich mittels Wireshark dann entspannt analysieren.


Related posts:


© 2005-2014 by Uli Wolf - This Content is distributed under the Creative Commons License
This feed is for personal, non-commercial use only.
The use of this feed on other websites without attribution to the author and notification of the author breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint: d2a576b5311479d89eff39b7ca886f6b)

MQTT für FHEM einrichten

$
0
0

Vor ein paar Tagen wollte ich mir MQTT auf meinem Raspberry (mit Debian) einrichten und in FHEM einbinden. Dazu hatte ich ein bisschen Mühe die Anleitung zusammen zustellen, daher hier meine Kurzreferenz für das eben erwähnte Debian.

Richte das Repository für Mosquitto nach der Anleitung ein. Installiere dann die fehlenden Perl Module:

cpan install Net::MQTT::Simple::SSL
cpan install Net::MQTT::Constants

Dann installiere mosquitto:

apt-get install mosquitto mosquitto-clients

Das wars auch schon, jetzt kann man MQTT in FHEM initialisieren:

define myMQTTdevice MQTT

Wie immer kann man ein bisschen in der Commanref zu MQTT nachlesen.


Related posts:


© 2005-2014 by Uli Wolf - This Content is distributed under the Creative Commons License
This feed is for personal, non-commercial use only.
The use of this feed on other websites without attribution to the author and notification of the author breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint: d2a576b5311479d89eff39b7ca886f6b)

Toggle des HM-LC-Dim1TPBU-FM über die Taster via FHEM konfigurieren

$
0
0

Seit ein paar Tagen habe ich einige der Lichtschalter in diversen Zimmern gegen HM-LC-Dim1TPBU-FM ausgetauscht, damit man diese via FHEM ansteuern kann. Der praktische Dimmer passt genau statt einem üblichen Schalter in eine Unterputzdose und wird mit den üblichen Schalterserien problemlos kombiniert. Ich hatte lediglich ein Problem: Der Dimmer hat nun keinen definieren Schaltpunkt (d.h. keinen gekippten Schalter) mehr, sondern besteht nur noch aus Taster, welcher nach oben oder unten gekippt werden kann. „Unten“ wird ausgeschalten und „Oben“ eben ein – ein langer druck auf oben oder unten regelt die Lichthelligkeit nach oben oder unten. Nach einigen Tagen Benutzung haben wir festgestellt, dass die kurzen Tastendrucke wohl bisher „andersrum“ waren (d.h. Oben aus und Unten an) und dies zu Verwirrung führte. Ich wollte daher auf toggle umstellen.

Um den Schalter zu Verstehen, sollte man wissen, dass dieser drei interne Kanäle mitbringt. Bei einem autocreate des Schalters werden daher gleich vier Geräte angelegt:

  • DEVICE
  • DEVICE_Sw
  • DEVICE_Sw1_V_01
  • DEVICE_Sw1_V_02

Die drei letzteren sind dabei die Kanäle des Schalters, wobei im Auslieferungszustand der erste Kanal (DEVICE_Sw) mit den physikalischen Schaltern wie oben beschrieben verbunden ist. Diesen wollen wir nun umstellen, den Namen des DEVICE solltest du daher natürlich unten dann ändern in deinen Befehlen. Die weiteren Kanäle können beispielsweise genutzt werden, um Uhrzeitabhängig zu Dimmen oder um einen Bewegungsmelder zum Einschalten zu verwenden.

Um die Statemaschines der HM-Schalter zu verstehen ist ein Blick in das Einführungs-PDF (im hinteren Teil) nicht unpraktisch, da gehe ich aber nun nicht näher drauf ein.

Zunächst schalten wir mal die Ansicht der Register (damit der Switch zeigt, wie er konfiguriert ist) ein:

set DEVICE_Sw regSet intKeyVisib visib
set DEVICE_Sw getConfig

Und nun wird der Toggle eingeschalten:

set DEVICE_Sw regSet shDimJtDlyOn rampOn self01
set DEVICE_Sw regSet shDimJtOff dlyOn self01
set DEVICE_Sw regSet shDimJtRampOn on self01
set DEVICE_Sw regSet shDimJtDlyOff rampOff self02
set DEVICE_Sw regSet shDimJtOn dlyOff self02
set DEVICE_Sw regSet shDimJtRampOff off self02

Zu guter letzt würde ich nochmal die Konfigurationen zu FHEM holen:

set DEVICE_Sw getConfig

Das wars auch schon 😉


Related posts:


© 2005-2014 by Uli Wolf - This Content is distributed under the Creative Commons License
This feed is for personal, non-commercial use only.
The use of this feed on other websites without attribution to the author and notification of the author breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint: d2a576b5311479d89eff39b7ca886f6b)

Wetterstation KS 300 / KS 555 mit Dämmerung und Lichteinfall erweitern

$
0
0

Vor einiger Zeit hatte ich im FHEM Forum von einem findigen Mitglied gelesen, dass es eine Möglichkeit gibt, die Wetterstation KS 300 (Bezeichnung bei ELV) bzw. KS 555 (Bezeichnung bei conrad) um die Messung des Lichteinfalls und der Dämmerung zu erweitern.

Folgende Bauteile sollte man dazu bestellen, ich würde die Teile bei Conrad bestellen:

Das ganze wird nun in einen Schaltplan gegossen. Die Version von noname findet sich entweder im oben genannten Forums-Thread oder als Mirror-Download bei mir. Zudem wollte ich weiterhin die Möglichkeit haben, Batterien einzusetzen, daher habe ich einen Jumper in die Verbindung zwischen D2 und ST6 gesetzt.

Den Inhalt des Attiny45 findet man im FHEM-Forums-Thread oder als Download-Mirror bei mir. Ich gehe hier auf das Flashen des Attiny45 nicht näher ein, dazu gibt es meiner Meinung nach ausreichend Quellen im Netz bzw. der Autor verweist auf seinen Eintrag im Forum zu seinem anderen Modul.

Nun gehts ans Löten. Wenn man das abgeschlossen hat, so sieht das in etwa so aus:

Platine oben

Platine unten

Nun wird die Platine ins Gehäuse eingebaut. Dazu muss man dieses zunächst zerlegen.

Als erstes werden die beiden Schrauben am Windrad gelöst und das Windrad nach oben abgezogen. Darunter kommen nun (zusammen mit dem Abziehen der Batteriefach) wieder einige Schrauben zum Vorschein:
5212-Wetterstation-01
Auch diese muss man wieder lösen. Nun muss man das gesamte graue Teil aus dem Mast ziehen, da sich die beiden Gehäusehälften sonst nicht voneinander trennen lassen. Leider war bei mir das Kabel zum Regensensor etwas zu kurz, weshalb ich diesen auch noch öffnen musste. Das hatte sich aber auch gelohnt, da ich diesen dann gleich gewartet hatte (Putzen & Fetten). Dazu dreht man zunächst die Hülle ab, anschließend kann man den oberen Teil abdrehen:
5212-Wetterstation-02
Darunter kommt dann der Regenmesser zum Vorschein. An der Seite ist das Kabel zur Zentraleinheit mit ein paar Kabelbindern befestigt:
5212-Wetterstation-03
Löst man diese, so kann man vorsichtig ein wenig Kabel zur anderen Seite nachziehen – bei mir war es dann genau genug um das Gehäuse aus dem Mast zu ziehen. An dieser Stelle würde ich noch schnell nun den Regensensor putzen. Hat sich – wie bei mir – ein wenig Schmutz gesammelt, so kann man den Trichter nach oben abziehen und die Wippe sowie das Gehäuse darunter putzen:
5212-Wetterstation-04

5212-Wetterstation-05

Weiter gehts an der Zentraleinheit. Ist diese aus dem mast gezogen, so kann man den Deckel abheben und die darunterliegende Platine oberhalb des Batteriefachs in Augenschein nehmen. Dort muss man dann die zwei Schrauben lösen, um die Rückseite der Platine zu erreichen:

5212-Wetterstation-06

5212-Wetterstation-07

An dieser Platine muss man an der abgesetzten Funkplatine einen der Drähte auslöten und an dessen Stelle eine der Schottky-Dioden (D1 auf Schaltplan) einlöten:

5212-Wetterstation-09

5212-Wetterstation-08

5212-Wetterstation-10

Am Funkmodul muss zudem die Verbindung zwischen +UB und dem Pin 8 des Attiny sowie zwischen Data und dem Widerstand R3 verlötet werden. Ich rate dazu, diese Verbindung auf dem Modul durchzuführen – ist am einfachsten. Im Bild ist weiss der Data-Anschluss und braun der +UB Anschluss:

5212-Wetterstation-11

Ich hatte zusätzlich zum originalen Schaltplan eine optionale Unterbrechung der Akku-Lademöglichkeit eingebaut, da ich meine Wetterstation weiterhin mit Batterien betreiben wollte, mir jedoch die Möglichkeit zum Akkubetrieb offenhalten wollte. Daher habe ich zwei Pins ins Batteriefach geführt, wo dann via eines Jumpers entschieden werden kann ob Akkus oder Batterien verwendet werden:
5212-Wetterstation-12

5212-Wetterstation-13

Bei der ganzen Löterei darf man die Verbindung zur Solarzelle nicht vergessen:
5212-Wetterstation-14

Schlussendlich sah das bei mir dann so aus, ich hatte die kleine Platine dann einfach in den Gehäusedeckel mit Heisskleber eingeklebt:
5212-Wetterstation-15

Profitipp: Vor dem schließen des Gehäuses nun einmal die Batterien/Akkus einlegen und schauen ob was ankommt! Sollte dem so sein, so kann man wieder das Gehäuse schließen und die Wetterstation wieder zusammenbauen. Wenn nicht: Zur Fehlersuche kann man mal messen ob an Pin 7 des AD-Wandler nur 0-3V anliegen, mehr sollte es nicht sein. Zudem kann man Pin 4 des Attiny abklemmen, dann sollte in den Readings RAW 0 drinstehen, der Bereich von 0-3V geht = 0-1023RAW. Eine Erklärung des Autors noch zur Funktionsweise der Schaltung:

Über den Pin 2 wird nach dem Anlegen der Betriebsspannung bzw. bei jedem Senden der FET für ca. 2Sekunden auf high geschaltet und damit die Solarzelle auf I Nenn belastet. Deswegen sollt die Spannung an Pin 7 bei bedecktem Himmel logischer weise für ca. 2 Sekunden ziemlich klein sein. Nach dem Senden steht wieder die Leerlaufspannung der Solarzelle an Pin7 an, diese Spannung wird mit der Z-Diode auf ca. 3V (Maximal 5V, sonst ist der AD zerschossen) begrenzt.

Die Einbindung in FHEM ist dank der klaren Anweisungen von Noname dann auch kein Problem. Solange sein Modul noch nicht in FHEM update enthalten ist, muss man sich nächst FS20Value aus diesem Thread herunterladen und in das Modulverzeichnis von FHEM legen. Als Beispiel für eine KS300/KS555 mit dem Housecode 1234:

# Licht / Dämmerung ----------------------------------------------------------------------
define KS300_Daemmerung FS20Value 1234 01
attr KS300_Daemmerung IODev CUL
attr KS300_Daemmerung ValueFactor -0.16
attr KS300_Daemmerung ValueMax 100
attr KS300_Daemmerung ValueMin 0
attr KS300_Daemmerung ValueOffset 624
attr KS300_Daemmerung ValueUnit %
attr KS300_Daemmerung event-on-change-reading state
attr KS300_Daemmerung room Wetterstation
 
# Sonne / Einstrahlung ----------------------------------------------------------------------
define KS300_Einstrahlung FS20Value 1234 02
attr KS300_Einstrahlung IODev CUL
attr KS300_Einstrahlung ValueFactor 2.02
attr KS300_Einstrahlung ValueMax 1000
attr KS300_Einstrahlung ValueMin 0
attr KS300_Einstrahlung ValueUnit W/m²
attr KS300_Einstrahlung event-on-change-reading state
attr KS300_Einstrahlung room Wetterstation

Und so sieht das ganze dann in FHEM mit einem Plot aus:
5326-Plot-FHEM

An dieser Stelle nochmals ein herzliches Danke an noname aus dem FHEM-Forum, ohne den (und dessen Wissen um die FS20 Protokolle) das alles nicht möglich gewesen wäre!


Related posts:


© 2005-2014 by Uli Wolf - This Content is distributed under the Creative Commons License
This feed is for personal, non-commercial use only.
The use of this feed on other websites without attribution to the author and notification of the author breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint: d2a576b5311479d89eff39b7ca886f6b)

FHEM: Rolladen bei Dämmerung schließen mit Hilfe von Twilight und DOIF

$
0
0

Ich werde immer wieder gefragt, wie meine Rollläden bei Dämmerung herunterfahren. Ich nutze dazu FHEM und davon das Modul Twilight, welches man wie folgt konfiguriert. Natürlich braucht man dazu eine funktionierende FHEM Installation 😉

Los gehts mit der Ermittlung des Längen und Breitengrades des Installationsorts der Rolläden. Am einfachsten geht dies über diverse Onlineservices. Zudem benötigen wir die Yahoo Wetter ID, welche sich via http://weather.yahoo.com/ ermittlen lässt. Suche einfach nach dem Ort und nimm den letzten Teil aus der URL.

Diese Daten muss man nun in der Definition des Geräts in FHEM setzen. Als Beispiel wird Breitengrad 49.5004044 und Längengrad 8.4318646 verwendet, welches die Wetter-ID 673711 trägt. Die Zahl dazwischen (4) ist für den „indoor“ horizon, die Unterschiede kann man hier nachlesen.

define TC_TWILIGHT Twilight 49.5004044 8.4318646 4 673711

Damit hat man ein Modul, welches verschiedene „Sonnenaufgang“ und „Sonnenuntergang“ Zeiten berechnen kann.

Ich will nun dass der Rolladen KU_ROLLLADEN zum Indoor-Sonnenuntergang herunterfährt, jedoch spätestens um 22:00 Uhr und frühstens um 17:00 Uhr:

define KU_DOIF_ROLLADEN_DOWN DOIF ([{twilight("TC_TWILIGHT","ss_indoor","17:00","22:00")}]) (set KU_ROLLLADEN down)
attr KU_DOIF_ROLLADEN_DOWN do always

Nicht die letzte Teile vergessen, sonst fährt er nur einmal runter und dann nie wieder 😉


Related posts:


© 2005-2014 by Uli Wolf - This Content is distributed under the Creative Commons License
This feed is for personal, non-commercial use only.
The use of this feed on other websites without attribution to the author and notification of the author breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint: d2a576b5311479d89eff39b7ca886f6b)

Lösung für FHEM 72_FRITZBOX.pm: ctlmgr_ctl: not found

$
0
0

Heute habe ich mal kurz mein Log ansehen wollen und hatte mich gewundert, warum mein Browser eeeewig geladen hatte. Grund waren zigtausende Einträge die so aussahen:

2015.10.25 12:15:28 1: PERL WARNING: Use of uninitialized value in numeric eq (==) at ./FHEM/72_FRITZBOX.pm line 3878.
2015.10.25 12:15:28 1: PERL WARNING: Use of uninitialized value in numeric eq (==) at ./FHEM/72_FRITZBOX.pm line 3759.
2015.10.25 12:15:28 1: PERL WARNING: Use of uninitialized value in numeric eq (==) at ./FHEM/72_FRITZBOX.pm line 3629.
sh: 1: ctlmgr_ctl: not found
sh: 1: ctlmgr_ctl: not found
sh: 3: ctlmgr_ctl: not found
sh: 5: ctlmgr_ctl: not found
sh: 7: ctlmgr_ctl: not found
sh: 9: ctlmgr_ctl: not found


Diese hatte mein Log innerhalb von 24 Stunden auf grob 32MB aufgeblasen. Die Lösung ist relativ einfach: Mein FHEM läuft nicht auf einer FRITZ!Box und meine Fritzbox ist in Version 06.30 wo es kein Telnet mehr gibt. Dadurch findet sich auch das Programm ctrlmgr_ctl nicht und via Telnet geht auch nichts. Daher muss man in der Moduldefinition folgende Attribute setzen:

attr [GERAETENAME] forceTelnetConnection 0
attr [GERAETENAME] allowShellCommand 0 
attr [GERAETENAME] allowTR064Command 1

Und schon war wieder Ruhe.


Related posts:


© 2005-2014 by Uli Wolf - This Content is distributed under the Creative Commons License
This feed is for personal, non-commercial use only.
The use of this feed on other websites without attribution to the author and notification of the author breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint: d2a576b5311479d89eff39b7ca886f6b)

(Gäste-)WLAN der Fritz!Box in FHEM via TR064 schalten

$
0
0

Vor einiger Zeit musste ich nach einem Firmware-Update der Fritz!Box feststellen, dass das FRITZBOX Modul des FHEM-Servers nicht mehr mit der Fritz!Box reden wollte. Grund dafür war, dass Telnet nicht mehr vorhanden ist und nun einige Funktionen nur noch per TR064 möglich sind. Zuvor hatte ich hauptsächlich die Möglichkeit, das Gäste-WLAN via des Tablets im Gang zu schalten, genutzt. Das wollte ich nun wieder haben.

Meine Fritzbox ist in diesem Beispiel das Gerät „FRITZBOXDEVICE“. Zunächst muss man dazu TR064-Befehle freischalten:

attr FRITZBOXDEVICE allowTR064Command 1

Für das Schalten der WLANs muss man sich nun den Befehl zusammenstellen, also z.B. fürs einschalten des Gäste-WLAN:

get FRITZBOXDEVICE tr064Command WLANConfiguration:3 wlanconfig3 SetEnable NewEnable 1

Ausschalten:

get FRITZBOXDEVICE tr064Command WLANConfiguration:3 wlanconfig3 SetEnable NewEnable 0

Um jetzt das so einfach wie möglich zu halten, habe ich einfach die Befehle via cmdalias ersetzt. Gäste-WLAN an:

define CMDALIAS_FRITZBOXDEVICE_GUESTWLAN_ON cmdalias set FRITZBOXDEVICE guestWlan on AS get FRITZBOXDEVICE tr064Command WLANConfiguration:3 wlanconfig3 SetEnable NewEnable 1

Und wieder aus:

define CMDALIAS_FRITZBOXDEVICE_GUESTWLAN_OFF cmdalias set FRITZBOXDEVICE guestWlan off AS get FRITZBOXDEVICE tr064Command WLANConfiguration:3 wlanconfig3 SetEnable NewEnable 0

Und nun noch für alle anderen. Schalten des 2,4Ghz WLAN:

get FRITZBOXDEVICE tr064Command WLANConfiguration:1 wlanconfig1 SetEnable NewEnable 1
get FRITZBOXDEVICE tr064Command WLANConfiguration:1 wlanconfig1 SetEnable NewEnable 0

Und des 5Ghz WLAN:

get FRITZBOXDEVICE tr064Command WLANConfiguration:2 wlanconfig2 SetEnable NewEnable 1
get FRITZBOXDEVICE tr064Command WLANConfiguration:2 wlanconfig2 SetEnable NewEnable 0

Und die cmdaliase für 2,4Ghz:

define CMDALIAS_FRITZBOXDEVICE_WLAN24_ON cmdalias set FRITZBOXDEVICE wlan2.4 on AS get FRITZBOXDEVICE tr064Command WLANConfiguration:1 wlanconfig1 SetEnable NewEnable 1
define CMDALIAS_FRITZBOXDEVICE_WLAN24_OFF cmdalias set FRITZBOXDEVICE wlan2.4 off AS get FRITZBOXDEVICE tr064Command WLANConfiguration:1 wlanconfig1 SetEnable NewEnable 0

Und für 5Ghz:

define CMDALIAS_FRITZBOXDEVICE_WLAN5_ON cmdalias set FRITZBOXDEVICE wlan5 on AS get FRITZBOXDEVICE tr064Command WLANConfiguration:2 wlanconfig2 SetEnable NewEnable 1
define CMDALIAS_FRITZBOXDEVICE_WLAN5_OFF cmdalias set FRITZBOXDEVICE wlan5 off AS get FRITZBOXDEVICE tr064Command WLANConfiguration:2 wlanconfig2 SetEnable NewEnable 0

Related posts:


© 2005-2014 by Uli Wolf - This Content is distributed under the Creative Commons License
This feed is for personal, non-commercial use only.
The use of this feed on other websites without attribution to the author and notification of the author breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint: d2a576b5311479d89eff39b7ca886f6b)

FHEM: Meine Namenskonvention als Starthilfe für Einsteiger

$
0
0

Als ich mit FHEM angefangen hatte, war mir nicht klar, wie ich eigentlich meine Geräte benennen darf oder in welche Fallen man tappen kann. Die nachfolgende Namenskonvention ist daher lediglich als eine Sammlung von Ideen, welches sich bei mir über die Jahre angesammelt haben, zu verstehen. Ich rate dazu, sich darüber mal anfangs Gedanken zu machen, denn die Umbenennung von Geräten mittels „rename“ ist zwar möglich, aber sehr schmerzhaft mitunter.

Groß/Kleinschreibung von Gerätenamen

Ich habe mich dazu entschlossen, alle Geräte einfach mit Großbuchstaben zu benennen, sodass ich keine Probleme dadurch bekommen kann. Beispielsweise ist das Device ULI ein anderes als Uli und dieses wiederrum ein anderes als uli. Genau diese Verwirrung sorgt dann für lustige Probleme – eine Sache, die ich nicht mehr haben wollte.

Aufbau von Gerätenamen

Das Problem mit Gerätenamen ist, dass diese nur einmal vorkommen können was daher heisst: Ich kann nicht in jedem Raum ein Gerät namens „Thermostat“ haben. Daher muss eine Unterscheidung her. Ich bin dazu übergegangen, den Aufenthaltsort des Geräts mit in den Gerätenamen aufzunehmen. Zudem nehme ich den Typ des Geräts mit auf – dies verhindert, dass man den Watchdog für das Fenster genauso benennt wie das Fenster selbst.

Raumname im Gerätenamen

Für die Räume will man wohl kaum den vollen Namen im Gerätenamen haben (dazu dient ja nun auch das Attribut „room“), da es nur um eine Unterscheidung geht. Mein Vorschlag ist, die Raumnamen auf drei Zeichen zu begrenzen und daher die Räume beispielsweise so zu benennen:

  • BA1: Das erste Bad
  • BA2: Das zweite Bad
  • BAL: Balkon
  • WOH: Wohnzimmer
  • KIN: Kinderzimmer
  • KUE: Küche
  • GAN: Gang
  • BUE: Büro
  • TRE: Treppenhaus
  • TEC: Technik
  • INF: Informationen

Etagennamen im Gerätenamen

Wenn man im beabsichtigten Zielobjekt der Heimautomation mehrere Stockwerke abdeckt, so würde ich den Raumanteil des Gerätenamens zusätzlich mit einer Zahl prefixen, also beispielsweise 1BAL für den Balkon im ersten Stock oder KWAS die Waschküche im Keller.

Gerätetyp im Gerätenamen

Wenn man für einen bestimmten Anwendungsfall eine Automatisierung aufbaut, so hat man meist mehrere Geräte die zusammen spielen. Um nun kein Namenschaos auszulösen, bin ich dazu übergegangen, die Gerätetypen in den Namen aufzunehmen. Einige Typen sind dabei aber relativ häufig verwendet und bekommen daher bei mir eine Abkürzung, welche zwischen 2 und 4 Zeichen lang ist:

  • DMY: dummy
  • HTM: HTTPMOD
  • HM: Homematic
  • NFY: notify
  • RGRP: readingsGroup
  • RPXY: readingsproxy
  • WADG: watchdog

Andere, welche ich entweder nur einmal verwende (z.B. KS300) oder die schon weniger als 5 Zeichen haben, bleiben einfach so wie diese sind (z.B. MAX, FS20 oder DOIF).

Unterscheidung von Geräten

Ich unterschiede gleiche Geräte innerhalb eines Raumes mit einem Suffix. Habe ich beispielsweise drei Thermostaten im gleichem Raum so benenne ich diese zwar mit THERMOSTAT als Gerätename, hänge jedoch das Suffix NORD, WEST ODER OST mit dran. Oder habe ich mehrere Funksteckdosen innerhalb eines Raumes, so benenne ich diese sprechend. Beispielsweise ist die des Heimkinos, dann eben STECKDOSE_HEIMKINO.

Vorstellung der Namenskonvention

So sieht also dann die Konvention aus:

<RAUM>_<GERÄTETYP>_<GERÄTENAME>

Verschiedene Beispiele:

  • BA1_MAX_THERMOSTAT (Thermostat im Bad)
  • BAL_KS300_WETTERSTATION (Wetterstation auf dem Balkon)
  • WOH_HM_STECKDOSE_HEIMKINO (Steckdose im Wohnzimmer für das Heimkino)
  • WOH_HM_STECKDOSE_ECKLAMPE (Steckdose im Wohnzimmer für die Ecklampe)

Ein „Achtung“ noch

Bindet man weitere Oberflächen usw. an, so muss man sich im klaren sein, dass bei einer Änderung des Gerätenamens man diese unter Umständen ebenso ändern muss (Beispielsweise wenn man die MAX-Thermostate gegen HomeMatic tauscht). Hier muss man dann eben einen TradeOff hinnehmen oder Lösungen wie „structure“ oder „readingsProxy“ verwenden.


Related posts:


© 2005-2014 by Uli Wolf - This Content is distributed under the Creative Commons License
This feed is for personal, non-commercial use only.
The use of this feed on other websites without attribution to the author and notification of the author breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint: d2a576b5311479d89eff39b7ca886f6b)

Anbindung des Fonera Gramofon an FHEM (Spotify Connect Empfänger)

$
0
0

Seit einiger Zeit besitze ich mehrere Fonera Gramofon als Spotify Connect Empfänger. Was leider an den Playern etwas nervig ist, dass diese keine Lautsprecher besitzen und somit am Kopfhörerausgang aktive Verstärkung brauchen. Dazu schalte ich die Lautsprecher via Funksteckdose ein. Wenn man also nun via Spotify Connect dann Musik auf den Player schickt, muss man zusätzlich die Lautsprecher einschalten. Via FHEM wollte ich das nun automatisieren – was mir nun mittels des Moduls HTTPMOD gelungen ist.

Hier ist die genutzte Definition nach meiner Device Namenskonvention. Folgendes ist zu beachten:

  • In der ersten Zeile ist die IP auszutauschen (wahlweise kann man dort den DNS-Namen eintragen)
  • Per default ist auf dem gramofon das Passwort „admin“ gesetzt, dies muss, sofern es geändert wurde, in der zweiten Zeile am Ende geändert werden.
  • In der untenstehenden Definition wird der Gramofon alle 30 Sekunden nach dem aktuellen Status gefragt – dies kann man ebenso in der ersten Zeile ändern
  • Weiterhin wird jede Stunde der Spotify-Name und der DNS-Name abgefragt
  • Ist der Abruf mehr als 5 Minuten nicht erfolgt, so wechseln die Readings für color (Farbe der LED), mode und status (abspielen oder WifiStatus bei gestoppter Musik) auf „offline“
  • Via set kann man den Gramofon rebooten
define KUE_HTM_GRAMOFON HTTPMOD http://192.168.1.2/api/$sid 30
attr KUE_HTM_GRAMOFON sid1Data {"jsonrpc":"2.0","id":63,"method":"call","params":["session","login",{"username":"admin","password":"admin" }]}
attr KUE_HTM_GRAMOFON stateFormat status (color)
attr KUE_HTM_GRAMOFON enableControlSet 1
attr KUE_HTM_GRAMOFON reAuthRegex -32002|.*Access Denied.*|.*Bad Request.*
attr KUE_HTM_GRAMOFON sidHeader1 Content-Type: application/x-www-form-urlencoded;; charset=UTF-8
attr KUE_HTM_GRAMOFON sidHeader2 Accept: */*
attr KUE_HTM_GRAMOFON sidHeader3 X-Requested-With: XMLHttpRequest
attr KUE_HTM_GRAMOFON sidHeader4 Referer: http://%%internal_host%%/
attr KUE_HTM_GRAMOFON sid1URL http://%%internal_host%%/api/00000000000000000000000000000000
attr KUE_HTM_GRAMOFON sid1Data {"jsonrpc":"2.0","id":63,"method":"call","params":["session","login",{"username":"admin","password":"admin" }]}
attr KUE_HTM_GRAMOFON sidIDRegex sid":[ \t]+"([\w\.]+)"
attr KUE_HTM_GRAMOFON getURL http://%%internal_host%%/api/$sid
attr KUE_HTM_GRAMOFON getHeader1 Content-Type: application/x-www-form-urlencoded;; charset=UTF-8
attr KUE_HTM_GRAMOFON getHeader2 Accept: */*
attr KUE_HTM_GRAMOFON getHeader3 X-Requested-With: XMLHttpRequest
attr KUE_HTM_GRAMOFON getHeader4 Referer: http://%%internal_host%%/
attr KUE_HTM_GRAMOFON requestHeader1 Content-Type: application/x-www-form-urlencoded;; charset=UTF-8
attr KUE_HTM_GRAMOFON requestHeader2 Accept: */*
attr KUE_HTM_GRAMOFON requestHeader3 X-Requested-With: XMLHttpRequest
attr KUE_HTM_GRAMOFON requestHeader4 Referer: http://%%internal_host%%/
attr KUE_HTM_GRAMOFON requestData {"jsonrpc":"2.0","id":81,"method":"call","params":["ledd","get",{"device_status":true}]}
attr KUE_HTM_GRAMOFON replacement01Mode internal
attr KUE_HTM_GRAMOFON replacement01Regex %%internal_host%%
attr KUE_HTM_GRAMOFON replacement01Value host
attr KUE_HTM_GRAMOFON reading01Name color
attr KUE_HTM_GRAMOFON reading01JSON result_02_color
attr KUE_HTM_GRAMOFON reading01MaxAge 300
attr KUE_HTM_GRAMOFON reading01MaxAgeReplacement offline
attr KUE_HTM_GRAMOFON reading01MaxAgeReplacementMode text
attr KUE_HTM_GRAMOFON reading02Name mode
attr KUE_HTM_GRAMOFON reading02JSON result_02_mode
attr KUE_HTM_GRAMOFON reading02MaxAge 300
attr KUE_HTM_GRAMOFON reading02MaxAgeReplacement offline
attr KUE_HTM_GRAMOFON reading02MaxAgeReplacementMode text
attr KUE_HTM_GRAMOFON reading03Name status
attr KUE_HTM_GRAMOFON reading03JSON result_02_name
attr KUE_HTM_GRAMOFON reading03MaxAge 300
attr KUE_HTM_GRAMOFON reading03MaxAgeReplacement offline
attr KUE_HTM_GRAMOFON reading03MaxAgeReplacementMode text
attr KUE_HTM_GRAMOFON get01Name spotifyname
attr KUE_HTM_GRAMOFON get01Data {"jsonrpc":"2.0","id":6,"method":"call","params":["anet","get_gramofonname",{}]}
attr KUE_HTM_GRAMOFON get01JSON result_02_spotifyname
attr KUE_HTM_GRAMOFON get01Poll 1
attr KUE_HTM_GRAMOFON get01PollDelay 3600
attr KUE_HTM_GRAMOFON get02Name mdnsname
attr KUE_HTM_GRAMOFON get02Data {"jsonrpc":"2.0","id":6,"method":"call","params":["anet","get_gramofonname",{}]}
attr KUE_HTM_GRAMOFON get02JSON result_02_mdnsname
attr KUE_HTM_GRAMOFON get02Poll 1
attr KUE_HTM_GRAMOFON get02PollDelay 3600
attr KUE_HTM_GRAMOFON set01Name reboot
attr KUE_HTM_GRAMOFON set01Data {"jsonrpc":"2.0","id":14,"method":"call","params":["mfgd","reboot",{}]}
attr KUE_HTM_GRAMOFON set01NoArg

Related posts:


© 2005-2014 by Uli Wolf - This Content is distributed under the Creative Commons License
This feed is for personal, non-commercial use only.
The use of this feed on other websites without attribution to the author and notification of the author breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint: d2a576b5311479d89eff39b7ca886f6b)

FHEM: Fahrzeiten mit Verkehr mittels Google Maps API anzeigen

$
0
0

Inspiriert von einem Artikel, den ich hier gefunden habe, habe ich mir ebenfalls mal HTTPMOD mit der Google Maps Api angesehen. Die Grundzüge hat der Author schon erläutert – ich mache hier lediglich eine Vereinfachung und Update.

Achtung: Dieser Beitrag benötigt eine noch experimentelle Version von HTTPMOD aus diesem Forumsthread
Los gehts mit der Erstellung des API-Keys via Google Developer Console. Dort auf „APIs aktivieren und verwalten“:
5535-FHEM-MAPS-API-01
Dann ein neues Projekt erstellen und einen Projektnamen vergeben (z.B. fhem-maps-api):
5535-FHEM-MAPS-API-02
Dann suche in der nächsten Übersicht nach „Google Maps Distance“ und nimm die „Google Maps Distance Matrix API“:
5535-FHEM-MAPS-API-03
Aktiviere diese:
5535-FHEM-MAPS-API-04
Klicke dann links auf „Zugangsdaten“:
5535-FHEM-MAPS-API-05
Wähle „Browser-Schlüssel“:
5535-FHEM-MAPS-API-06
Nimm einen beliebigen Namen, welcher für dich Aussagekraft hat.
5535-FHEM-MAPS-API-07
Nun ist dein API-Schlüssel erstellt. Diesen musst du kopieren.
5535-FHEM-MAPS-API-08

Dann gehts in FHEM. Im untenstehenden Code muss YOURAPIKEY gegen den soeben erstellten API Key getauscht werden, ebenso natürlich dein Abfahrtsort (ORIGIN) und ZIEL (DESTINATION). Um letztere herauszufinden, würde ich eine Google Maps Suche machen und dann das Feld jeweils herauskopieren. Leerzeichen sollten durch %20 ersetzt werden, also beispielsweise wird aus: Robert-Schuman-Straße 8, 68519 Viernheim dann Robert-Schuman-Straße%208,%2068519%20Viernheim. Die definition des Devices folgt wie immer meiner Namenskonvention:

define INF_HTM_FAHRZEIT_HOME_WORK HTTPMOD https://maps.googleapis.com/maps/api/distancematrix/json?origins=ORIGIN&destinations=DESTINATION&mode=driving&language=de-DE&departure_time=now&key=YOURAPIKEY 3600
attr INF_HTM_FAHRZEIT_HOME_WORK reading01Name standard
attr INF_HTM_FAHRZEIT_HOME_WORK reading01JSON rows_01_elements_01_duration_in_traffic_value
attr INF_HTM_FAHRZEIT_HOME_WORK reading01Expr strftime("%T", gmtime $val)
attr INF_HTM_FAHRZEIT_HOME_WORK reading02Name traffic
attr INF_HTM_FAHRZEIT_HOME_WORK reading02JSON rows_01_elements_01_duration_in_traffic_value
attr INF_HTM_FAHRZEIT_HOME_WORK reading02Expr strftime("%T", gmtime $val)
attr INF_HTM_FAHRZEIT_HOME_WORK reading03Name distance
attr INF_HTM_FAHRZEIT_HOME_WORK reading03JSON rows_01_elements_01_distance_value
attr INF_HTM_FAHRZEIT_HOME_WORK reading03Expr sprintf("%.1f", $val/1000)
attr INF_HTM_FAHRZEIT_HOME_WORK stateFormat Normal:standard Aktuell:traffic (distance km)

Vielen Dank nochmals an Jürgen für die Idee – sehr cool :)


Related posts:


© 2005-2014 by Uli Wolf - This Content is distributed under the Creative Commons License
This feed is for personal, non-commercial use only.
The use of this feed on other websites without attribution to the author and notification of the author breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint: d2a576b5311479d89eff39b7ca886f6b)

FHEM: Abfahrzeiten des VRN Verkehrsverbunds via HTTPMOD auslesen

$
0
0

Nach dem Abruf der Google Maps Informationen hatte ich mich erinnert, dass VRN ebenso einen Abfahrtsmonitor anbietet. Diesen wollte ich natürlich auch auf jeden Fall in FHEM anbinden.

Achtung: Dieser Beitrag benötigt eine noch experimentelle Version von HTTPMOD aus diesem Forumsthread
Zunächst muss die Haltestelle herausgefunden werden. Am besten geht man dazu auf den Abfahrtsmonitor und sucht sich die Wunschhaltestelle. In meinem Falle nehme ich die „Lindenhof (MA), Windeckstraße“:

Nun kann man noch die Richtung auswählen:

Schlussendlich bekommt man eine URL wie diese:

http://efa9-5.vrn.de/dm_rbl/XSLT_DM_REQUEST?language=de&itdLPxx_dmlayout=dm&itdLPxx_realtime=1&useRealtime=1&itdLPxx_dmRefresh=1&timeOffset=3&limit=12&includeCompleteStopSeq=1&depType=stopEvents&typeInfo_dm=stopID&nameInfo_dm=6002500&mode=direct&line=VRN:08003:s:H&itdLPxx_ie6layout=;

Für die Anzeige in FHEM muss man nun in der URL relativ zu Beginn die Zeichenfolge „dm_rbl“ gegen „lite“ tauschen, wodurch bei Aufruf im Browser (am besten Chrome nehmen) eine JSON-Anzeige gestartet wird. Diese URL muss im define statt der unten stehenden verwendet werden. Ich habe hier 1800 als Abrufintervall eingetragen, was man natürlich ändern kann. Die definition des Devices folgt wie immer meiner Namenskonvention:

define INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE HTTPMOD http://efa9-5.vrn.de/lite/XSLT_DM_REQUEST?language=de&itdLPxx_dmlayout=gadget&itdLPxx_realtime=1&useRealtime=1&itdLPxx_dmRefresh=1&timeOffset=3&limit=12&includeCompleteStopSeq=1&depType=stopEvents&typeInfo_dm=stopID&nameInfo_dm=6002500&mode=direct&line=VRN:08003:s:H&itdLPxx_ie6layout=; 1800
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading11Name departures_01_dateTime_rtTime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading11JSON departures_01_dateTime_rtTime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading12Name departures_01_dateTime_rtDate
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading12JSON departures_01_dateTime_rtDate
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading13Name departures_01_mode_destination
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading13JSON departures_01_mode_destination
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading14Name departures_01_mode_delay
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading14JSON departures_01_mode_delay
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading21Name departures_02_dateTime_rtTime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading21JSON departures_02_dateTime_rtTime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading21Name departures_02_dateTime_rtDate
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading22JSON departures_02_dateTime_rtDate
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading23Name departures_02_mode_destination
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading23JSON departures_02_mode_destination
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading24Name departures_02_mode_delay
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading24JSON departures_02_mode_delay
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading31Name departures_03_dateTime_rtTime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading31JSON departures_03_dateTime_rtTime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading32Name departures_03_dateTime_rtDate
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading32JSON departures_03_dateTime_rtDate
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading33Name departures_03_mode_destination
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading33JSON departures_03_mode_destination
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading34Name departures_03_mode_delay
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading34JSON departures_03_mode_delay
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading41Name departures_04_dateTime_rtTime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading41JSON departures_04_dateTime_rtTime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading42Name departures_04_dateTime_rtDate
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading42JSON departures_04_dateTime_rtDate
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading43Name departures_04_mode_destination
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading43JSON departures_04_mode_destination
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading44Name departures_04_mode_delay
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading44JSON departures_04_mode_delay
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading51Name departures_05_dateTime_rtTime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading51JSON departures_05_dateTime_rtTime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading52Name departures_05_dateTime_rtDate
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading52JSON departures_05_dateTime_rtDate
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading53Name departures_05_mode_destination
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading53JSON departures_05_mode_destination
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading54Name departures_05_mode_delay
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading54JSON departures_05_mode_delay
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading61Name departures_06_dateTime_rtTime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading61JSON departures_06_dateTime_rtTime
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading62Name departures_06_dateTime_rtDate
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading62JSON departures_06_dateTime_rtDate
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading63Name departures_06_mode_destination
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading63JSON departures_06_mode_destination
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading64Name departures_06_mode_delay
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE reading64JSON departures_06_mode_delay
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE stateFormat departures_01_dateTime_rtTime +departures_01_mode_delay (departures_01_mode_destination / departures_01_dateTime_rtDate)
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE readingMaxAge 300
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE readingMaxAgeReplacement -
attr INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE readingMaxAgeReplacementMode text

Im STATE des Geräts wird die nächste Abfahrt mit einer eventuellen Verspätung angezeigt. Schlussendlich hat man die nächsten sechs Abfahrten und kann diese dann weiterverarbeiten, beispielsweise in einer readingsGroup. Hier sieht man nun schön den Vorteil einer ordentlichen Namenskonvention, da sich das DEVICE nur um den Typ unterscheidet:

define INF_RGRP_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE readingsGroup <Richtung>,<Abfahrt>,<Verspätung (Abfahrt)>,<Datum> INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE:departures_01_mode_destination,departures_01_dateTime_rtTime,departures_01_mode_delay,departures_01_dateTime_rtDate INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE:departures_02_mode_destination,departures_02_dateTime_rtTime,departures_02_mode_delay,departures_02_dateTime_rtDate INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE:departures_03_mode_destination,departures_03_dateTime_rtTime,departures_03_mode_delay,departures_03_dateTime_rtDate INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE:departures_04_mode_destination,departures_04_dateTime_rtTime,departures_04_mode_delay,departures_04_dateTime_rtDate INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE:departures_05_mode_destination,departures_05_dateTime_rtTime,departures_05_mode_delay,departures_05_dateTime_rtDate INF_HTM_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE:departures_06_mode_destination,departures_06_dateTime_rtTime,departures_06_mode_delay,departures_06_dateTime_rtDate
attr INF_RGRP_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE alias Abfahrtmonitor STR3 Ab Windeckstrasse
attr INF_RGRP_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE nonames 1
attr INF_RGRP_ABFAHRTSMONITOR_STR3_WINDECKSTRASSE valueStyle {(substr($READING, -5) eq "delay")?($VALUE ne "0")?'style="color:red;;font-weight:bold"':'style="color:green;;font-weight:bold"':''}

Was dann so aussieht:
5545-vrn-abfahrtsmonitor-03

Ganz praktisch 😉

Versions Historie:

  • 2016-01-10 – Update mit MaxAge, da ab und an keine Daten für bestimmte Zeiten gezogen werden.

Related posts:


© 2005-2014 by Uli Wolf - This Content is distributed under the Creative Commons License
This feed is for personal, non-commercial use only.
The use of this feed on other websites without attribution to the author and notification of the author breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint: d2a576b5311479d89eff39b7ca886f6b)

Notiz zum Reverse-Engineering von Funksteckdosen

$
0
0

Hilfreiche Beiträge zum Reverse Engineering von Funksteckdosen:


Related posts:


© 2005-2014 by Uli Wolf - This Content is distributed under the Creative Commons License
This feed is for personal, non-commercial use only.
The use of this feed on other websites without attribution to the author and notification of the author breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint: d2a576b5311479d89eff39b7ca886f6b)

Mein Batteriewächter für FHEM

$
0
0

Ich wurde vor kurzem gefragt, wie denn eigentlich meine Batteriewarnung innerhalb von FHEM aussieht. Daher hier der Codeschnipsel. Ich verwende das msg modul für Benachrichtigungen, unten muss daher der Name des Empfängers unter Umständen angepasst werden. Es ist eine 300 Sekunden Zeit eingebaut, welche die Meldung „entprellt“, um sozusagen nicht hunderte Mails oder Pushes zu bekommen, wenn ein Schalter mal über 20 Sekunden langsam hoch dimmt und dabei „battery: low“ sendet.

Der Aufbau der Namensdefinition folgt wie immer meiner Namenskonvention:

define TEC_NFY_BATTERY_WARNING notify .*:[Bb]attery:.* {\
	my $CURRENTTIME = time();;\
	my $BOUNCETIME = 300;;\
	if(lc($EVTPART1) ne "ok" and ($CURRENTTIME-ReadingsVal($NAME,"battery_warning",$CURRENTTIME-$BOUNCETIME-1) gt $BOUNCETIME)) {\
		fhem "msg \@rr_Uli $NAME: $EVENT";;\
		fhem "setreading $NAME battery_warning $CURRENTTIME";;\
	}\
}

Wie man sieht geht die Benachrichtigung via „msg“ raus, was man dazu konfigurieren sollte. Ist aber generell empfehlenswert 😉


Related posts:


© 2005-Today by Uli Wolf - This Content is distributed under the Creative Commons License
This feed is for personal, non-commercial use only.
The use of this feed on other websites without attribution to the author and notification of the author breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint: d2a576b5311479d89eff39b7ca886f6b)

Export einer Gerätedefinition aus FHEM

$
0
0

Wenn man eine Gerätedefinition komplett mit allen Kommandos aus FHEM ziehen will, bekommt man meist gesagt, dass man doch list [DEVICE] dazu verwenden kann. Was ja auch ganz nett ist, aber leider halt nicht mit „define…“ beginnt.

Per Zufall bin ich heute über ein Kommando der configdb gestolpert, was genau das kann (bedingt natürlich, dass man configdb nutzt):

configdb list [DEVICE]

Funktioniert super und endlich kann ich meine Devices einfach verbloggen 🙂


Related posts:


© 2005-Today by Uli Wolf - This Content is distributed under the Creative Commons License
This feed is for personal, non-commercial use only.
The use of this feed on other websites without attribution to the author and notification of the author breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint: d2a576b5311479d89eff39b7ca886f6b)

Deep-Sleep des ESP-01 (ESP8266) mit 78 microAmpere

$
0
0

Seit einiger Zeit beschäftige ich mich mit dem ESP8266 für einige Anwendungen rund um meine Heimautomation (mittels FHEM). Um die Wifi-Module so sparsam wie möglich zu betrieben, gibt es die Möglichkeit den Chip in den Deep-Sleep zu versetzen, wo dann nur noch 78 μA verbraucht werden (Siehe Pin-Belegung des Chips, genauer des ‚post-sleep-reset-pin‘ XPD_DCDC hier).

Wie das geht wird hier beschrieben. Der Autor hatte „einfach“ ein Kabel vom Reset-Pin des Moduls an den XPD_DCDC (8) Pin des Chips geführt. Dieser ist, wenn man das ESP-Modul von „oben“ (d.h. Chips ist sichtbar und Pins zeigen weg vom Betrachter) betrachtet und die Wifi-Antenne links ist, der Pin „unten rechts“ am Chip. Ich habe meinen mal photographiert und dies dort aufgezeichnet:

ESP8266 ESP-01 Deep-Sleep Connections
ESP8266 ESP-01 Deep-Sleep Connections

Nun sieht das auf dem Photo nicht so schwer aus. Wenn man sich dann aber vergegenwärtigt, dass die gesamte Platine von links nach rechts gerade mal 2,5cm groß ist, so sieht das ganze schon anders aus. Zum löten braucht man dann doch einen sehr feinen Lötkolben.

In NodeMCU kann man nun den Deep-Sleep mittels

node.dsleep(microSecs);

auslösen um den Chip für eine definierte Anzahl von Microsekunden schlafen zu lassen.

Für die Arduino IDE nutze ich Task von Makuna um nicht blockierend zu programmieren. Die Bibliothek kann auch die Steuerung des Tiefschlafs übernehmen, einfach mal die Doku lesen 😉


Related posts:


© 2005-Today by Uli Wolf - This Content is distributed under the Creative Commons License
This feed is for personal, non-commercial use only.
The use of this feed on other websites without attribution to the author and notification of the author breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint: d2a576b5311479d89eff39b7ca886f6b)

FHEM: watchdog – Funktion und Anwendungsfälle des Hilfsmoduls

$
0
0

Das Hilfsmodul watchdog erlaubt es, gewisse Dinge – wie der Name schon sagt – wie ein Wachhund zu überwachen. Dabei kann zum einen nach einem Event nach einer gewissen Zeiten eine Aktion ausgelöst werden, diese aber bei Eintreffen eines anderen Ereignisses auch eben nicht ausgeführt werden. Ebenso kann auch das Ausbleiben von Ereignissen überwacht werden.

Beispiel 1

Ein Thermostat soll auf eine bestimmte Temperatur gesetzt werden, sobald ein Fenster mehr als 90 Sekunden offen ist. Wird es innerhalb dieser Zeit wieder geschlossen, so soll der Watchdog natürlich nicht auslösen (und damit die Temperatur beibehalten). Als praktischer Anwendungsfall wäre eine Gartentür zu nennen. Der Grillmeister rennt ständig rein und raus und will nur kurz nach dem Grill sehen – hier lohnt es sich nicht, die Heizung permanent rauf und runter zu drehen. Vergisst er aber die Türe zu schließen, so wird ausgelöst.

Definition wäre (Angelehnt an COMMANDREF und mit meiner Namenskonvention):

define BA1_WADG_SHUTTERCONTACT_OPENED watchdog BA1_STRUC_SHUTTERCONTACTS:opened 00:01:30 BA1_STRUC_SHUTTERCONTACTS:closed set TEC_MAX_CUL fakeSC BA_THERMOSTAT 1; trigger BA1_WADG_SHUTTERCONTACT_OPENED .
attr BA1_WADG_SHUTTERCONTACT_OPENED room Technik-Bad
attr BA1_WADG_SHUTTERCONTACT_OPENED group BA-Klima
attr BA1_WADG_SHUTTERCONTACT_OPENED icon dog_silhouette
attr BA1_WADG_SHUTTERCONTACT_OPENED regexp1WontReactivate 1
attr BA1_WADG_SHUTTERCONTACT_OPENED verbose 0

Nun haben wir also das Fenster mindestens 90 Sekunden offen gelassen und der Watchdog hat auch reagiert. Nun wird das Fenster wieder geschlossen – der Watchdog hier soll ebenfalls 90 Sekunden warten. Dies sieht dann so aus (Angelehnt an COMMANDREF und mit meiner Namenskonvention):

define BA1_WADG_SHUTTERCONTACT_CLOSED watchdog BA1_STRUC_SHUTTERCONTACTS:closed 00:01:30 BA1_STRUC_SHUTTERCONTACTS:opened set TEC_MAX_CUL fakeSC BA_THERMOSTAT 0; trigger BA1_WADG_SHUTTERCONTACT_CLOSED .
attr BA1_WADG_SHUTTERCONTACT_CLOSED room Technik-Bad
attr BA1_WADG_SHUTTERCONTACT_CLOSED group BA-Klima
attr BA1_WADG_SHUTTERCONTACT_CLOSED icon dog_silhouette
attr BA1_WADG_SHUTTERCONTACT_CLOSED regexp1WontReactivate 1
attr BA1_WADG_SHUTTERCONTACT_CLOSED verbose 0

Gehen wir kurz die Attribute durch:

  • room, group & icon: Lediglich zur Sortierung und Verschönerung des Interfaces
  • verbose: Wird hier auf 0 gesetzt, da bei Fehlen dieses Attributes (und bei Default verbose-Level 3 in FHEM) jede Auslösung einen Logeintrag erzeugt
  • regexp1WontReactivate: Dieses Attribut bewirkt, dass die Zeit bei erneutem Eintreffen des Events (in diesem Falle z.B. BA_STRUC_SHUTTERCONTACTS:closed) nicht zurückgesetzt wird. Trifft jedoch BA_STRUC_SHUTTERCONTACTS:opened ein, so läuft der Watchdog wieder von vorne los.

Beispiel 2

Ein Sensor sendet lediglich Messdaten, jedoch keine Batteriewerte. Bleiben dessen Daten für mehr als 1 Stunde aus, so soll ein Alarm ausgelöst werden.

define BA1_WADG_BA_ULISTEMPERATURE_BATTERYISSUE watchdog BA1_ULISTEMPERATURE:temperature 01:00:00 SAME set BA1_DMY_ULISTEMPERATURE_BATTERYISSUE 1; trigger BA1_WADG_BA_ULISTEMPERATURE_BATTERYISSUE .
attr BA1_WADG_SHUTTERCONTACT_CLOSED room Technik-Bad
attr BA1_WADG_SHUTTERCONTACT_CLOSED group BA-Klima
attr BA1_WADG_SHUTTERCONTACT_CLOSED icon dog_silhouette
attr BA1_WADG_SHUTTERCONTACT_CLOSED verbose 0

Weitere Links

Für die weiteren Attribute des watchdogs empfehle ich einen Blick in die deutsche oder englische Commandref. Ebenso hält das Wiki nützliche Hinweise bereit.


Related posts:


© 2005-Today by Uli Wolf - This Content is distributed under the Creative Commons License
This feed is for personal, non-commercial use only.
The use of this feed on other websites without attribution to the author and notification of the author breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint: d2a576b5311479d89eff39b7ca886f6b)

Leitartikel für die Heimautomation FHEM: Planung, Einrichtung, Tutorials und Hilfestellungen

$
0
0

Dies ist die Absprung-Seite auf die diversen Tutorials welche teilweise aufeinander aufbauen. Was nicht verlinkt ist, kommt noch 🙂

Planung

  • Zielobjekt: „Smart Home“/Zuhause/Haus/Wohnung
  • Was soll automatisiert werden?
  • Protokolle
  • Hardware
  • Software

Einrichtung von FHEM

Verständnisartikel

  • Was ist ein:
    • Event in FHEM?
    • Device in FHEM?
    • Reading in FHEM?
    • Attribute in FHEM?
  • DOIF: Funktion und Anwendungsfälle
  • notify: Funktion und Anwendungsfälle
  • watchdog: Funktion und Anwendungsfälle
  • structure: Funktion und Anwendungsfälle

Grundfunktionen

  • Wetterabrufen
  • Präsenzfunktionen (Aktionen in Abhängigkeit von Anwesenheit)
  • Dämmerung berechnen
  • Logging (Logfiles für Historie)
  • Charting (Grafiken zur Visualisierung)
  • TabletUI als hübsche Oberfläche

Szenarien

Spezifische Tutorials


Related posts:


© 2005-Today by Uli Wolf - This Content is distributed under the Creative Commons License
This feed is for personal, non-commercial use only.
The use of this feed on other websites without attribution to the author and notification of the author breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint: d2a576b5311479d89eff39b7ca886f6b)

Tintenstand der Druckerpatronen des HP 8620 in FHEM überwachen

$
0
0

Bei stöbern im FHEM Forum ist mir gerade ein Beitrag aufgefallen, wo der Ersteller den HP 8620 Drucker hinsichtlich des Druckerpatronenfüllstands überwachen ließ. Das habe ich direkt ausprobiert – funktioniert 😉

Ein paar Anpassungen habe ich durchgeführt:

defmod BUE_HTM_HP8620_CONSUMABLES HTTPMOD http://hp8620/DevMgmt/ConsumableConfigDyn.xml 3600
attr BUE_HTM_HP8620_CONSUMABLES userattr reading01Name reading01XPath-Strict reading02Name reading02XPath-Strict reading03Name reading03XPath-Strict reading04Name reading04XPath-Strict reading05Name reading05XPath-Strict reading06Name reading06XPath-Strict reading07Name reading07XPath-Strict reading08Name reading08XPath-Strict
attr BUE_HTM_HP8620_CONSUMABLES DbLogExclude .*
attr BUE_HTM_HP8620_CONSUMABLES alias HP 8620 - Tintenfüllstand
attr BUE_HTM_HP8620_CONSUMABLES httpVersion 1.1
attr BUE_HTM_HP8620_CONSUMABLES reading01Name Cyan
attr BUE_HTM_HP8620_CONSUMABLES reading01XPath-Strict //ccdyn:ConsumableInfo[3]/dd:ConsumablePercentageLevelRemaining/text()
attr BUE_HTM_HP8620_CONSUMABLES reading02Name CyanReplaceBy
attr BUE_HTM_HP8620_CONSUMABLES reading02XPath-Strict //ccdyn:ConsumableInfo[3]/dd:ConsumableSelectibilityNumber/text()
attr BUE_HTM_HP8620_CONSUMABLES reading03Name Magenta
attr BUE_HTM_HP8620_CONSUMABLES reading03XPath-Strict //ccdyn:ConsumableInfo[2]/dd:ConsumablePercentageLevelRemaining/text()
attr BUE_HTM_HP8620_CONSUMABLES reading04Name MagentaReplaceBy
attr BUE_HTM_HP8620_CONSUMABLES reading04XPath-Strict //ccdyn:ConsumableInfo[2]/dd:ConsumableSelectibilityNumber/text()
attr BUE_HTM_HP8620_CONSUMABLES reading05Name Yellow
attr BUE_HTM_HP8620_CONSUMABLES reading05XPath-Strict //ccdyn:ConsumableInfo[4]/dd:ConsumablePercentageLevelRemaining/text()
attr BUE_HTM_HP8620_CONSUMABLES reading06Name YellowReplaceBy
attr BUE_HTM_HP8620_CONSUMABLES reading06XPath-Strict //ccdyn:ConsumableInfo[4]/dd:ConsumableSelectibilityNumber/text()
attr BUE_HTM_HP8620_CONSUMABLES reading07Name Black
attr BUE_HTM_HP8620_CONSUMABLES reading07XPath-Strict //ccdyn:ConsumableInfo[5]/dd:ConsumablePercentageLevelRemaining/text()
attr BUE_HTM_HP8620_CONSUMABLES reading08Name BlackReplaceBy
attr BUE_HTM_HP8620_CONSUMABLES reading08XPath-Strict //ccdyn:ConsumableInfo[5]/dd:ConsumableSelectibilityNumber/text()
attr BUE_HTM_HP8620_CONSUMABLES room Büro
attr BUE_HTM_HP8620_CONSUMABLES stateFormat C: Cyan% M: Magenta% Y: Yellow% K: Black%

Ausserdem kann man sich noch einige Statistiken holen:

defmod BUE_HTM_HP8620_PRODUCTUSAGE HTTPMOD http://hp8620/DevMgmt/ProductUsageDyn.xml 3600
attr BUE_HTM_HP8620_PRODUCTUSAGE userattr reading01Name reading01XPath-Strict reading02Name reading02XPath-Strict reading03Name reading03XPath-Strict reading04Name reading04XPath-Strict reading05Name reading05XPath-Strict reading06Name reading06XPath-Strict reading07Name reading07XPath-Strict reading08Name reading08XPath-Strict reading09Name reading09XPath-Strict reading10Name reading10XPath-Strict reading11Name reading11XPath-Strict reading20Name reading20XPath-Strict reading30Name reading30XPath-Strict reading40Name reading40XPath-Strict reading41Name reading41XPath-Strict reading50Name reading50XPath-Strict reading51Name reading51XPath-Strict
attr BUE_HTM_HP8620_PRODUCTUSAGE DbLogExclude .*
attr BUE_HTM_HP8620_PRODUCTUSAGE DbLogInclude Printer_Pages_Total,Scanner_Scans_Total
attr BUE_HTM_HP8620_PRODUCTUSAGE alias HP 8620 - Statistik
attr BUE_HTM_HP8620_PRODUCTUSAGE httpVersion 1.1
attr BUE_HTM_HP8620_PRODUCTUSAGE reading01Name Printer_Pages_Total
attr BUE_HTM_HP8620_PRODUCTUSAGE reading01XPath-Strict //pudyn:PrinterSubunit/dd:TotalImpressions/text()
attr BUE_HTM_HP8620_PRODUCTUSAGE reading02Name Printer_Pages_Monochrome
attr BUE_HTM_HP8620_PRODUCTUSAGE reading02XPath-Strict //pudyn:PrinterSubunit/dd:MonochromeImpressions/text()
attr BUE_HTM_HP8620_PRODUCTUSAGE reading03Name Printer_Pages_Color
attr BUE_HTM_HP8620_PRODUCTUSAGE reading03XPath-Strict //pudyn:PrinterSubunit/dd:ColorImpressions/text()
attr BUE_HTM_HP8620_PRODUCTUSAGE reading04Name Printer_Pages_Duplex
attr BUE_HTM_HP8620_PRODUCTUSAGE reading04XPath-Strict //pudyn:PrinterSubunit/dd:DuplexSheets/text()
attr BUE_HTM_HP8620_PRODUCTUSAGE reading05Name Printer_Jam_Events
attr BUE_HTM_HP8620_PRODUCTUSAGE reading05XPath-Strict //pudyn:PrinterSubunit/dd:JamEvents/text()
attr BUE_HTM_HP8620_PRODUCTUSAGE reading06Name Printer_Mispick_Events
attr BUE_HTM_HP8620_PRODUCTUSAGE reading06XPath-Strict //pudyn:PrinterSubunit/dd:MispickEvents/text()
attr BUE_HTM_HP8620_PRODUCTUSAGE reading10Name Scanner_Scans_Total
attr BUE_HTM_HP8620_PRODUCTUSAGE reading10XPath-Strict //pudyn:ScannerEngineSubunit/dd:ScanImages/text()
attr BUE_HTM_HP8620_PRODUCTUSAGE reading11Name Scanner_Scans_ADF_Image
attr BUE_HTM_HP8620_PRODUCTUSAGE reading11XPath-Strict //pudyn:ScannerEngineSubunit/dd:AdfImages/text()
attr BUE_HTM_HP8620_PRODUCTUSAGE reading12Name Scanner_Scans_Flatbed_Image
attr BUE_HTM_HP8620_PRODUCTUSAGE reading12XPath-Strict //pudyn:ScannerEngineSubunit/dd:FlatbedImages/text()
attr BUE_HTM_HP8620_PRODUCTUSAGE reading13Name Scanner_Jam_Events
attr BUE_HTM_HP8620_PRODUCTUSAGE reading13XPath-Strict //pudyn:ScannerEngineSubunit/dd:JamEvents/text()
attr BUE_HTM_HP8620_PRODUCTUSAGE reading14Name Scanner_Mispick_Events
attr BUE_HTM_HP8620_PRODUCTUSAGE reading14XPath-Strict //pudyn:ScannerEngineSubunit/dd:MispickEvents/text()
attr BUE_HTM_HP8620_PRODUCTUSAGE reading20Name InkMagentaPagesRemaining
attr BUE_HTM_HP8620_PRODUCTUSAGE reading20XPath-Strict //pudyn:Consumable[dd:MarkerColor='Magenta']/dd:EstimatedPagesRemaining/text()
attr BUE_HTM_HP8620_PRODUCTUSAGE reading21Name InkMagentaPercentRemaining
attr BUE_HTM_HP8620_PRODUCTUSAGE reading21XPath-Strict //pudyn:Consumable[dd:MarkerColor='Magenta']/dd:ConsumableRawPercentageLevelRemaining/text()
attr BUE_HTM_HP8620_PRODUCTUSAGE reading30Name InkCyanPagesRemaining
attr BUE_HTM_HP8620_PRODUCTUSAGE reading30XPath-Strict //pudyn:Consumable[dd:MarkerColor='Cyan']/dd:EstimatedPagesRemaining/text()
attr BUE_HTM_HP8620_PRODUCTUSAGE reading31Name InkCyanPercentRemaining
attr BUE_HTM_HP8620_PRODUCTUSAGE reading31XPath-Strict //pudyn:Consumable[dd:MarkerColor='Cyan']/dd:ConsumableRawPercentageLevelRemaining/text()
attr BUE_HTM_HP8620_PRODUCTUSAGE reading40Name InkYellowPagesRemaining
attr BUE_HTM_HP8620_PRODUCTUSAGE reading40XPath-Strict //pudyn:Consumable[dd:MarkerColor='Yellow']/dd:EstimatedPagesRemaining/text()
attr BUE_HTM_HP8620_PRODUCTUSAGE reading41Name InkYellowPercentRemaining
attr BUE_HTM_HP8620_PRODUCTUSAGE reading41XPath-Strict //pudyn:Consumable[dd:MarkerColor='Yellow']/dd:ConsumableRawPercentageLevelRemaining/text()
attr BUE_HTM_HP8620_PRODUCTUSAGE reading50Name InkBlackPagesRemaining
attr BUE_HTM_HP8620_PRODUCTUSAGE reading50XPath-Strict //pudyn:Consumable[dd:MarkerColor='Black']/dd:EstimatedPagesRemaining/text()
attr BUE_HTM_HP8620_PRODUCTUSAGE reading51Name InkBlackPercentRemaining
attr BUE_HTM_HP8620_PRODUCTUSAGE reading51XPath-Strict //pudyn:Consumable[dd:MarkerColor='Black']/dd:ConsumableRawPercentageLevelRemaining/text()
attr BUE_HTM_HP8620_PRODUCTUSAGE room E6-Büro
attr BUE_HTM_HP8620_PRODUCTUSAGE stateFormat Total: Pages_Total Monochrome: Pages_Monochrome Color: Pages_Color

Und noch ein paar Details des Druckers:

defmod BUE_HTM_HP8620_PRODUCTCONFIG HTTPMOD http://hp8620/DevMgmt/ProductConfigDyn.xml 3600
attr BUE_HTM_HP8620_PRODUCTCONFIG userattr reading01Name reading01XPath-Strict reading02Name reading02XPath-Strict reading03Name reading03XPath-Strict reading04Name reading04XPath-Strict reading05Name reading05XPath-Strict
attr BUE_HTM_HP8620_PRODUCTCONFIG DbLogExclude .*
attr BUE_HTM_HP8620_PRODUCTCONFIG enableControlSet 1
attr BUE_HTM_HP8620_PRODUCTCONFIG httpVersion 1.1
attr BUE_HTM_HP8620_PRODUCTCONFIG reading01Name Model
attr BUE_HTM_HP8620_PRODUCTCONFIG reading01XPath-Strict //dd:MakeAndModel/text()
attr BUE_HTM_HP8620_PRODUCTCONFIG reading02Name Serial_Number
attr BUE_HTM_HP8620_PRODUCTCONFIG reading02XPath-Strict //dd:SerialNumber/text()
attr BUE_HTM_HP8620_PRODUCTCONFIG reading03Name Firmware_Date
attr BUE_HTM_HP8620_PRODUCTCONFIG reading03XPath-Strict //prdcfgdyn:ProductInformation/dd:Version/dd:Date/text()
attr BUE_HTM_HP8620_PRODUCTCONFIG reading04Name Total_Memory
attr BUE_HTM_HP8620_PRODUCTCONFIG reading04XPath-Strict //dd:TotalMemory/text()
attr BUE_HTM_HP8620_PRODUCTCONFIG reading05Name Available_Memory
attr BUE_HTM_HP8620_PRODUCTCONFIG reading05XPath-Strict //dd:AvailableMemory/text()
attr BUE_HTM_HP8620_PRODUCTCONFIG room E6-Büro
attr BUE_HTM_HP8620_PRODUCTCONFIG stateFormat Modell: Model SN: Serial_Number
attr BUE_HTM_HP8620_PRODUCTCONFIG userReadings Memory_Usage_Percent {round(100-(ReadingsNum($name,"Available_Memory","")/ReadingsNum($name,"Total_Memory",""))*100,1)}

Vielen Dank an die Nutzer „akw“ und „somansch“ aus dem Forum!


Related posts:


© 2005-Today by Uli Wolf - This Content is distributed under the Creative Commons License
This feed is for personal, non-commercial use only.
The use of this feed on other websites without attribution to the author and notification of the author breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint: d2a576b5311479d89eff39b7ca886f6b)
Viewing all 46 articles
Browse latest View live