Benutzer-Werkzeuge

Webseiten-Werkzeuge


linux:fhem:module

FHEM - Module

Kodi

Benötigt dev-perl/JSON (Gentoo) bzw. libjson-perl (Debian)

define EG.Wo.Kodi XBMC 192.168.0.6 tcp xbmc xbmc

define wz_XBMC XBMC <IP-Adresse> tcp <USERNAME> <PASSWORT>
attr wz_XBMC devStateIcon opened:rc_GREEN:on disconnected:rc_RED:off Initialized:message_socket_disabled

Mit tcp reagiert fhem für ca. 3 Sekunden nicht, wenn XBMC ausgeschaltet ist:

attr EG.Wo.Kodi fork enable

Alarmanlage

Vorbereitung

ToDo: http://forum.fhem.de/index.php/topic,26893.msg213151.html#msg213151

http://www.fhemwiki.de/wiki/Modul_Alarmanlage

Das Modul 95_Alarm.pm stellt eine komfortable Oberfläche bereit, um per Webinterface bestimmte auslösende Elemente mit bestimmten Aktionen zu verknüpfen.

Damit FHEM-Devices als Aktoren oder Sensoren für die Alarmanlage genutzt werden können, müssen zwei neue globale Attribute namens alarmDevice und alarmSettings eingeführt werden. Dazu muss in der Grundkonfiguration von FHEM die Definition der nutzerspezifischen Attribute via userattr angepasst werden. Bei Konfiguration über FHEMWEB ist es ratsam dazu die folgenden beiden Befehle zu nutzen:

{ addToAttrList("alarmDevice:Actor,Sensor") }
{ addToAttrList("alarmSettings") } 

Zur Erläuterung:

  • Soll ein FHEM-Device als Sensor für die Alarmanlage genutzt werden, wird der Wert seines alarmDevice-Attributes auf 'Sensor' gesetzt.
  • Soll ein FHEM-Device als Aktor für die Alarmanlage genutzt werden, wird der Wert seines alarmDevice-Attributes auf 'Actor' gesetzt
  • Das Attribut alarmSettings wird beim Setzen der Alarme auf der Alarmkonfigurationsseite automatisch befüllt.

Sensoren und Actoren können auch dummy-devices sein, um Zustände zu bearbeiten:

define <Name> dummy

Ferner muss das Modul 95_Alarm.pm im Modulpfad installiert werden, ebenso die JavaScript-Datei alarm.js in www/pgm2.

Erstellung eines Alarms

 define <NameDerAlarmanlage> Alarm

Es wird ein versteckter Raum „AlarmRoom“ angelegt, welcher über einen Weblink im oberen Menü des Webinterfaces erreichbar ist.

Es wird ein weiterer Raum benötigt, der in der gegenwärtigen Fassung des Moduls den Namen Alarm trägt. Dieser wird automatisch erstellt, sobald die Alarme wie unten konfiguriert werden.

Konfiguration des Alarms

Settings

  • Wait Action ist ein FHEM-Befehl, der beim Scharfschalten des Alarms ausgeführt wird, z.B. ein Funkgong.
  • Arm Delay ist die Verzögerungszeit, die zwischen dem Scharfschalten des Alarms und der tatsächlichen Wirksamkeit vergeht. Diese Zeit kann beispielsweise genutzt werden, um das Haus ohne Auslösung des Alarms zu verlassen. [mm:ss]
  • Arm Action ist ein FHEM-Befehl, der beim Scharfschalten ausgeführt wird, z.B. ein MP3-Funkgong.
  • Disarm Action ist ein FHEM-Befehl, der beim Unscharfschalten ausgeführt wird, z.B. ein MP3-Funkgong.
  • Cancel Action ist ein FHEM-Befehl, der beim Widerrufen eines Alarms ausgeführt wird, z.B. ein MP3-Funkgong.

8 Alarmlevel sind für das Modul normalerweise möglich (kann durch Setzen eines einzelnen Parameters im Modulcode verändert werden). In der Tabelle 'Settings' können für jeden Level die Startzeit ts und Endzeit te des Alarmlevels gesetzt werden. Formate für die Zeitangabe können sein:

  • hh:mm - direkte Eingabe einer festen Zeit.
  • {funktion} - eine beliebige Perl-Funktion in geschweiften Klammern, die einen gültigen Zeitwert hh:mm zurückliefert. Die Gültigkeit wird erst zur Laufzeit überprüft. Beispielsweise „30 Minuten vor Sonnenuntergang“ als {sunset_abs(-1800)}.

Diese Aktivierungszeiten wirken sich wie folgt auf den Alarmlevel aus:

  • Wenn ts < te, ist dieser Alarmlevel aktiv, falls ts < Zeit < te.
  • Wenn ts >= te, ist dieser Alarmlevel aktiv, falls ts < Zeit ⇐ 23:59 sowie wenn 0:00 < Zeit ⇐ te.

Ferner kann für jeden Alarmlevel gesetzt oder bedient werden

  • Eine Nachricht zur Erläuterung des Alarms (Teil 2)
  • Eine Checkbox Armed = scharf
  • Ein Button Cancel zum Canceln = Aufheben des Alarms

Sensors

Für jeden Sensor kann gesetzt werden:

  • Alarmlevel, die hierdurch ausgelöst werden
  • Ein regulärer Ausdruck, bei dessen Erkennung die Auslösung erfolgt
    • EG.Wo.AD.Terrasse.Rechts:open
  • Eine Nachricht zur Erläuterung des Alarms (Teil 1)
  • Ein Selektor, um festzulegen, ob dieser Sensor den Alarm
    • auslöst (=Raise),
    • widerruft (=Cancel),
    • scharf schaltet (=Arm) oder
    • unscharf schaltet (=Disarm).

Achtung: Es ist zwingend notwendig, dass für einen auszulösenden Alarmlevel auch ein Sensor für den Widerruf (=Cancel) des Alarms definiert wird, ansonsten ignoriert das Modul die Definition dieses Levels.

Die insgesamt in den STATE der Alarmanlage geschriebene Nachricht besteht dann aus

(Anzeige der Zustände) (Nachricht Teil 1)' '(Nachricht Teil 2).

Bitte weiter unten nachlesen, was mit der Anzeige der Zustände gemeint ist. In diesen Nachrichten werden die folgenden Ersetzungen vorgenommen

  • $NAME vird durch den Namen des auslösenden Devices ersetzt. Marc: {AlarmEinbruch('Einbruch',$NAME)} funktioniert nicht?
  • $EVENT wird durch den kompletten Event ersetzt
  • $EVTPART1… wird durch den 1. Teilstring des Events gefüllt, etc.

Actors

Für jeden Aktor kann gesetzt werden:

  • Alarmlevel, die diesen Aktor starten
  • Ein FHEM-Kommando zum Starten des Aktors
  • Ein FHEM-Kommando zum Stoppen des Aktors
  • Eine Zeitverzögerung - entweder als Angabe von Sekunden (<60) oder im Format mm:ss

Starten

Durch Anklicken des Buttons „Set Alarms“ werden die alarmSettings-Attribute befüllt. Folgendes ist zu Beachten:

  • Es ist zwingend notwendig, dass für einen auszulösenden Alarmlevel auch ein Sensor für den Widerruf (=Cancel) des Alarms definiert wird, ansonsten ignoriert das Modul die Definition dieses Levels.
  • Der Button Set Alarms wird nur funktionieren, wenn keine Sperrung vorliegt, siehe unten.
  • Es empfiehlt sich, danach ein Save Config auszuführen, damit die Attribute und Notifier permanent sind.

Sperrung: Das Attribut lockstate muss den Wert „unlocked“ haben, damit durch Anklicken des Buttons Set Alarms die alarmSettings-Attribute befüllt werden können. Das ist in der Regel beim ersten Laden des Moduls nicht der Fall, hierzu muss also das Attribut von Hand auf den richtigen Wert gesetzt werden!

attr <AlarmName> lockstate unlocked  'hat bei mir nicht funktioniert
set <AlarmName> unlocked

Sysstat

Unter Linux wird das Modul Modul benötigt Sys::Statistics::Linux benötigt:

apt-get install libsys-statistics-linux-perl

Definition

define pi SYSSTAT 120 600
attr pi filesystems /dev/root
attr pi room <Raum>
attr pi showpercent 1
  • Die Load-Daten werden alle 120 (Default-Wert: 60) Sekunden gelesen und es wird dabei die Partition /dev/root alle 600 Sekunden überwacht. Die Belegung der Partition wird in Prozent angegeben
  • Wird kein Auslese-Interval für die Partitionen angegeben, so wird dieses auf den ersten Wert mit 60 multipliziert gesetzt. So würde im o.a. Beispiel aus dem ersten Wert 120 (für das System-load) ein Auslesewert von 7.200 Sekunden, also 120 Minuten bzw. 2 Stunden.

Weiter:

define FileLog_pi FileLog /opt/fhem/log/BBxM-%Y-%m.log pi
attr FileLog_pi archivedir /opt/fhem/archive/
attr FileLog_pi logtype sysstat:Plot,text
attr FileLog_pi nrarchive 1
attr FileLog_pi room <Ihr Raum>
define Stats_pi weblink fileplot FileLog_pi:mysysstat:CURRENT       <<<==== siehe unten
attr Stats_pi alias Systemlast
attr Stats_pi label "Systemlast von pi Min: $data{min1}, Max: $data{max1}, Aktuell: $data{currval1}"
attr Stats_pi room <Raum>

Plot-Beispiel

mysysstat_own.gplot:

############################
# Display the sysload and diskusage values 
# Corresponding FileLog definition:
# define deviceLog FileLog ./log/device-%Y-%m.log device
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title '<L1>'
set ylabel "Load"
set y2label "/ belegt %"
set y2range [0:100]
#FileLog 4:load:0:
#FileLog 4:/\x3a:0:
plot "< awk '/load:/ {print $1, $4}' <IN>" using 1:2 ls l0 axes x1y1 title 'Load' with lines
plot "< awk '//:/ {print $1, $4}' <IN>" using 1:2 ls l2fill axes x1y2 title 'Disk' with lines

Tablet-UI

Installation

update all https://raw.githubusercontent.com/knowthelist/fhem-tablet-ui/master/controls_fhemtabletui.txt
define TABLETUI HTTPSRV ftui/ ./www/tablet Tablet-UI

Und anschließend als Beispiel im Verzeichnis ./fhem/www/tablet die Datei index-example.html in index.html umbenennen oder eine neue index.html erzeugen.

  • longpoll: Im UI ist longPoll ebenfalls standardmäßig aktiv, kann aber ebenfalls deaktiviert werden. Bitte prüfen, ob der HTML-Code den Meta-Tag `<meta name=„longpoll“ content=„1“>` enthält. Falls nicht, bitte so übernehmen.

Update

  • Einmalig
update all https://raw.githubusercontent.com/knowthelist/fhem-tablet-ui/master/controls_fhemtabletui.txt
  • Immer
update add https://raw.githubusercontent.com/knowthelist/fhem-tablet-ui/master/controls_fhemtabletui.txt

weitere Widgets

update all https://raw.githubusercontent.com/nesges/Widgets-for-fhem-tablet-ui/master/controls_widgets-for-fhem-tablet-ui.txt

Konfiguration

Calendar

Vorraussetzungen

Soll auf einen Kalender zugegriffen werden, der https benötigt:

apt-get install libio-socket-ssl-perl

Define

ical

define <name> Calendar ical url <URL> [<interval>]
define <name> Calendar ical file <FILENAME> [<interval>]

Falls Benutzername und Passwort nötig sind:

define myCalendar ical url https://user:password@my.domain.com/.../yourcalendar.ics

Google-Kalender

define <Name des Kalenders> Calendar ical url <der richtige Kalenderlink> 14400

Den richtigen Kalenderlink findet man, wenn man den Kalender über den Browser verwaltet unter der Rubrik „Privatadresse“.

Calview

CALVIEW ist ein Hilfsmodul, das alle Termine aus einem bestehenden Kalender des Moduls Calendar in Readings übernimmt.

Define

define <Name> CALVIEW <calendarname> <modus>

<modus>:

  • 0 für „modeStarted“ Termine
  • 1 für „modeStarted“;„modeUpcoming“ Termine
  • 2 für „all“ Termine

Termine aktualisieren

set <Name> update

Anzahl anzuzeigender Termine

attr myCalView maxreadings 10

Anzeige

1. readingsGroup definieren:

define rg_View_Abfall readingsGroup <Zeile>,<Start>,<Start Zeit>,<Summary>,<Ende>,<End Zeit>

Und rg_View_Abfall das Attribut „nonames“ „1“ geben.

2. Notify erstellen, dass bei Änderungen die readingsGroup mit Leben füllt:

define ntf_ViewAll notify Abfalltermine:t:.* {
my $i; 
my $modtext = "<Datum>,<Zeit>,<Termin>,<Ort>,<Quelle> ";

for($i= 1;$i<= ReadingsVal("Abfalltermine","c-today", 0);$i++){
$modtext .= "Abfalltermine:<Heute>,today_".sprintf('%03d',$i)."_btime,today_".sprintf('%03d',$i)."_summary,today_".sprintf('%03d',$i)."_location,today_".sprintf('%03d',$i)."_source ";}

for($i= 1;$i<= ReadingsVal("Abfalltermine","c-tomorrow", 0);$i++){
$modtext .= "Abfalltermine:<Morgen>,tomorrow_".sprintf('%03d',$i)."_btime,tomorrow_".sprintf('%03d',$i)."_summary,tomorrow_".sprintf('%03d',$i)."_location,tomorrow_".sprintf('%03d',$i)."_source ";}

for($i= 1;$i<= ReadingsVal("Abfalltermine","c-term", 0);$i++){
$modtext .= "Abfalltermine:t_".sprintf('%03d',$i)."_bdate,t_".sprintf('%03d',$i)."_btime,t_".sprintf('%03d',$i)."_summary,t_".sprintf('%03d',$i)."_location,t_".sprintf('%03d',$i)."_source ";}

fhem("modify rg_View_Abfall $modtext");
fhem("SAVE");
}
  • Abfalltermine ist das CALVIEW-Device
  • location und source habe ich entfernt

at

Zeitschaltuhr:

define Licht_25_Januar_an at 2011-01-25T07:15:00 set Licht1 on

DOIF

http://fhem.de/commandref_DE.html#DOIF

define <name> DOIF (<Bedingung>) (<Befehle>) DOELSEIF (<Bedingung>) (<Befehle>) DOELSEIF ... DOELSE (<Befehle>)

Geräte: [device] eq „on“

Die Ausführung erfolgt standardmäßig einmalig nur nach Zustandswechsel des Moduls. Das bedeutet, dass ein mehrmaliges Drücken der Fernbedienung auf „on“ nur einmal „set garage on“ ausführt. Die nächste mögliche Ausführung ist „set garage off“, wenn Fernbedienung „off“ liefert. Wünscht man eine Ausführung des gleichen Befehls mehrfach nacheinander bei jedem Trigger, unabhängig davon welchen Zustand das DOIF-Modul hat, weil z. B. Garage nicht nur über die Fernbedienung geschaltet wird und dann muss man das per „do always“-Attribut angeben:

attr di_Radio do always

Zu beachten ist, dass bei do always der Zustand „cmd_2“ bei Nichterfüllung der Bedingung nicht gesetzt wird. Möchte man dennoch bei Nichterfüllung der Bedingung einen Zustandswechsel auf „cmd_2“ erreichen, so muss man am Ende seiner Definition DOELSE ohne weitere Angaben setzen.

Spritpreismonitor

http://www.fhemwiki.de/wiki/Spritpreismonitor

:todo: Eigene Implementierung zeigen.

Dashboard

http://www.fhemwiki.de/wiki/Dashboard#dashboard_tab1groups

Als erstes wird ein Dashboard definiert

define <Name> Dashboard

Grundkonfiguration des definierten Dashboards:

attr dashboard_width 80%
attr dashboard_tab1groups <GRUPPE1>,<GRUPPE2>,<GRUPPE3>

Proplanta

define Wetter PROPLANTA Aachen

Weather

Modul, dass die Wetterdaten (derzeit noch ausschließlich, 2016-03-31) von Yahoo bezieht. Incl. grafischer Darstellung.

Define Wetterdaten

Ortsnummer über Yahoo herausfinden, 3600 ist die Aktualisierungshäufigkeit (1h):

define MeinWetter Weather 638242 3600 de
attr MeinWetter room Wettervorhersage

Logfile für die Wetterdaten erstellen

define FileLog_MeinWetter FileLog ./log/meinwetter-%Y-%m.log MeinWetter
attr FileLog_MeinWetter logtype text
attr FileLog_MeinWetter room Wettervorhersage

Grafische Darstellung

In vertikaler Richtung für 7 Tage:

define weblink_meinwetter weblink htmlCode {WeatherAsHtml("MeinWetter",7)}
attr weblink_meinwetter room Wettervorhersage

Eigene "Module"

Beschattung

DOIF di_Beschattung mit visueller Ausgabe in dummy Beschattung und DEF

([08:00-09:00|1234567] and [A.Clima:temperature] gt 20 and [EG.Wo.Clima_Weather:temperature] gt 21 and [EG.Wo.AD.Terrasse.Rechts] eq "closed" and [EG.Wo.AD.Terrasse.Links] eq "closed") (set EG.Wo.AD.Terrasse.* 40; set Beschattung on) DOELSEIF 
([08:00-09:00|1234567] and [A.Clima:temperature] gt 20 and [EG.Wo.Clima_Weather:temperature] gt 21 ) (set EG.Wo.AD.TerrasseLinks 40; set Beschattung on) DOELSEIF 
([09:00-10:00|1234567] and [A.Clima:temperature] gt 22 and [EG.Wo.Clima_Weather:temperature] gt 21 and [EG.Wo.AD.Terrasse.Rechts] eq "closed" and [EG.Wo.AD.Terrasse.Links] eq "closed") (set EG.Wo.AD.Terrasse.* 40; set Beschattung on) DOELSEIF
([09:00-10:00|1234567] and [A.Clima:temperature] gt 22 and [EG.Wo.Clima_Weather:temperature] gt 21) (set EG.Wo.AD.TerrasseLinks 40; set Beschattung on) DOELSEIF 
([10:00-11:00|1234567] and [A.Clima:temperature] gt 23 and [EG.Wo.Clima_Weather:temperature] gt 21 and [EG.Wo.AD.Terrasse.Rechts] eq "closed" and [EG.Wo.AD.Terrasse.Links] eq "closed") (set EG.Wo.AD.Terrasse.* 40; set Beschattung on) DOELSEIF
([10:00-11:00|1234567] and [A.Clima:temperature] gt 23 and [EG.Wo.Clima_Weather:temperature] gt 21) (set EG.Wo.AD.TerrasseLinks 40; set Beschattung on) DOELSEIF 
([13:00|1234567] and [Beschattung] eq "on") (set EG.Wo.AD.TerrasseRechts on; set Beschattung "wait") DOELSEIF 
([14:00|1234567] and [Beschattung] eq "wait") (set EG.Wo.AD.TerrasseLinks on; set Beschattung off)

Lüftempfehlung

DOIF di_Lueftempfehlung mit visueller Ausgabe in dummy Lueftempfehlung und DEF

([EG.Wo.Clima_Weather:temperature] gt 22 and [A.Clima:temperature] lt ( [EG.Wo.Clima_Weather:temperature]-1 ) ) (set Lueftempfehlung on) DOELSEIF 
([EG.Wo.Clima_Weather:temperature] lt 20 and [A.Clima:temperature] gt ( [EG.Wo.Clima_Weather:temperature]+1 ) ) (set Lueftempfehlung on) DOELSEIF 
([EG.Wo.Clima_Weather:humidity] lt 40 and [A.Clima:dewpoint] gt ( [EG.Wo.Clima_Weather:dewpoint]+2 ) ) (set Lueftempfehlung on) DOELSEIF 
([EG.Wo.Clima_Weather:humidity] gt 60 and [A.Clima:dewpoint] lt ( [EG.Wo.Clima_Weather:dewpoint]-2 ) ) (set Lueftempfehlung on) DOELSE 
(set Lueftempfehlung off)

average

define avg average ws1:(temperature|humidity)
define avg_Aussentemperatur average A.Clima:temperature.*
define avg_Speedtest average Speedtest:(download|upload|ping)
linux/fhem/module.txt · Zuletzt geändert: 02.02.2021 17:30 von marc