FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Rheingold am 15 Februar 2017, 17:48:23

Titel: Gebündelter Batterie Status
Beitrag von: Rheingold am 15 Februar 2017, 17:48:23
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.
Titel: Antw:Gebündelter Batterie Status
Beitrag von: Devender am 15 Februar 2017, 21:51:44
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.
Titel: Antw:Gebündelter Batterie Status
Beitrag von: KernSani am 15 Februar 2017, 22:08:31
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.
Titel: Antw:Gebündelter Batterie Status
Beitrag von: hobu am 15 Februar 2017, 22:26:44
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.
Titel: Antw:Gebündelter Batterie Status
Beitrag von: hschuett am 16 Februar 2017, 07:42:13
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