Hallo zusammen,
ich habe mehrere Batteriebetriebene Geräte (z.B. Temp_Arbeitszimmer, Temp_Bad, oder Heizung_Bad). Ich habe eine Anleitung (http://www.meintechblog.de/2015/08/fhem-rechtzeitige-benachrichtigung-bei-leeren-batterien/) gefunden eine Übersicht zu bauen die schon mal ein schöner Anfang ist. Nun möchte ich aber auf dem Tablet UI ein Icon darstellen, dass grün ist, wenn alle Batterien "ok" sind und umspringt, wenn eine der Betterien nicht ok ist.
Momentan habe ich keine Ahnung, wie ich das in FHEM realisieren kann.
Ist es möglich eine Abfrage zu erstellen die z.B. täglich den Batteriestatus prüft? Ich dachte an so etwas:
define Temp_Batterie dummy
attr Temp_Batterie webCmd ok:empty
define BatterieCheck at *11:59 IF ($Geräteabfrage_hier) (set Temp_Batterie:empty)
Nur wie kann ich hier die einzelnen Geräte-Stati abfragen? Wäre das dann
Temp_Arbeitszimmer.battery!=OK
Danke schon mal für die Hilfe und Gedankenanstöße.
Du hast mehrere Möglichkeiten.
Du könntest z.b deine Geräte in einer structure zusammenfassen und auf das state mit einem notify reagieren.
Sprich wenn bei der Structure ein Geraet den Status empty hat triggert das notify und meldet dir das.
Ich ueberwache so meine Tempsensoren. Wenn einer aus der Liste mehr als 50 Grad anzeigt, triggerrt ein notify welches mir einen Feueralarm signalisiert.
Internals:
ATTR TYPE=LaCrosse
CFGFN /opt/fhem/manuell/alarmsystem.cfg
DEF TYPE=LaCrosse Temperatur.Badezimmer Temperatur.Wohnzimmer Temperatur.Dachboden Temperatur.Keller Temperatur.Wohnung
NAME Temperaturmelder
NR 273
NTFY_ORDER 50-Temperaturmelder
STATE T: 20 H: 35
TYPE structure
Content:
Temperatur.Badezimmer 21.7
Temperatur.Dachboden T: 21.8 H: 34
Temperatur.Keller T: 19.8 H: 35
Temperatur.Wohnung T: 20 H: 35
Temperatur.Wohnzimmer 21.4
Readings:
2017-02-15 21:49:00 LastDevice Temperatur.Wohnung
2017-02-15 21:49:00 LastDevice_Abs Temperatur.Wohnung
2017-02-15 21:49:00 state T: 20 H: 35
Attributes:
clientstate_behavior last
clientstate_priority temperature
room Alarmanlage
Alternativ über eine myUtils Funktion (perl) und diese in Fhem jeden Tag mit z.b at aufrufen. Such mal nach Fenster offen Funktion als Beispiel.
Oder per DOIF, da schau mal in die Commandref. Du kannst in Fhem ja Geraete mit <Sensorprefix>*:state abfragen und dir dann Ergebnisse ausgeben lassen.
Hatte kürzlich eine ähnliche Diskussion (https://forum.fhem.de/index.php/topic,63507.msg583596.html#msg583596) und letztendlich was gebaut, was in die Richtung gehen sollte.
Könnte das Problem evtl. in dieser Art erschlagen werden?
define n_batterie notify Temp_.*:battery:.low {
Log(3,$NAME." - Battery Low")
}
Spart so 'ne zus. structure.
Da müsste nur noch das Event in das passende Event in die gewünschte Darstellung umgewandelt werden.
Hallo,
sieht bei mir wie im png-Anhang aus.
Die Batteriesymbole in der ReadingsGroup sind grün bei 100% Ladung und verändern die Farbe und Füllstand bei sinkenden %-Werten. Zusätzlich wird der timestamp der letzten Batteriestatusabfrage in der Übersicht dargestellt.
defmod rG_Batterie readingsGroup .*:[Bb]attery\
.*:[Bb]atteryLevel
attr rG_Batterie alias Batteriestatus
attr rG_Batterie comment Übersicht Batteriestatus aller Geräte, mit Reading des Typs "Battery" bzw. "battery"
attr rG_Batterie room System,CUL_HM,Homematic,Sicherheit
attr rG_Batterie timestampStyle style="color: silver"
attr rG_Batterie valueFormat {return "0" if( $VALUE eq "low" );; return "100" if( $VALUE eq "ok" );; return "25" if( $VALUE < 2.1 );; return "50" if( $VALUE < 2.3 );; return "75" if( $VALUE < 2.5 );; return "100"}
attr rG_Batterie valueIcon {'battery.0' => 'measure_battery_0@red','battery.100' => 'measure_battery_100@green','Battery.0' => 'measure_battery_0@red','Battery.100' => 'measure_battery_100@green','batteryLevel.0' => 'measure_battery_0@red','batteryLevel.25' => 'measure_battery_25@red','batteryLevel.50' => 'measure_battery_50@orange','batteryLevel.75' => 'measure_battery_75@green','batteryLevel.100' => 'measure_battery_100@green'}
Für meine Fenster habe ich eine ähnliche Lösung, wie Du sie für Batterien suchst. Hilfsroutine in der 99_myUtils, welche per Funktion devspec2array() anhand eines Filters alle relevanten Geräte mit passendem/gesuchtem Status (STATE) ermittelt. Dann ermittle ich die Anzahl der gefundenen Elemente/FHEM-Devices (if ($anz > 0) im Array und setze den (Gesamt-)Status eines Dummy-Devices. Der Dummy zeigt also offen sobald nur ein einziges Fenster offen ist bzw. geschlossen wenn die Suche per devspec2array() kein Ergebnis liefert.
sub Fenster_Auf
{
# Abfrage von offenen Fenstern per Funktion devspec2array()
# Die Funktion gibt ein Array mit Definitionsnamen zurück,
# welche zur übergebenen Device-Spezifikation passen.
# Syntax: @list = devspec2array($devspec);
my $devspec = "NAME=\\w{6}FENSTER.*:FILTER=TYPE=CUL_HM:FILTER=STATE!=geschlossen";
my @Fenster = devspec2array($devspec);
my $anz = @Fenster;
if ($anz > 0) {fhem("set BOSE_8030DC5A9D08 speakOff \"Achtung! Noch $anz Fenster offen.\" 40");}
return $anz;
}
Grüße, Harald