Hallo,
da ich dazu nichts gefunden habe...
aktuell melden einige Geräte mir, dass bei MAX-Geräten (WT/HT) ggf. die Battery mit LOW eingestuft wurde.
Am Gerät selbst wird ja der Akku auch angezeigt. Mich wundert es gerade allerdings, dass an den Geräten, wo LOW im FHEM angezeigt wird, keine Anzeige Akku-tauschen am Gerät leuchtet.
Gibt es evtl. noch einen Status unterhalb von LOW, bei dem der WT / HT / FK evtl. erst das Batterie tauschen Symbol einblenden?
Oder gibt es eine andere Erklärung dazu?
Gruß
Bei MAX! weiß ich nicht aber bei den Homematic Heizkörperthermostaten gibt es battery (ok, low) und motorErr (ok, lowBat und weitere)...
...und auch noch batteryLevel wo die Batteriespannung kommt...
Was zuerst kommt ist battery low und erst deutlich später dann motorErr lowBat...
Wann da jetzt das Batteriesymbol angezeigt wird habe ich noch nicht genau geprüft ;)
Vielleicht gibt es ja bei MAX! auch mehr als eins...
Gruß, Joachim
Hab jetzt wieder ein aktuelles Beispiel für das Problem.
Hab dazu ein Notify erstellt:
(Bad|WoZi|KiZi|ScZi|ArZi|Buero).(WT|HT|Fensterkontakt):battery:.low {
DebianMail("BATTERIE-ÜBERWACHUNG - HOMEAUTOMATION","Die Batterie von $NAME ist als gering gemeldet! \n\r Bitte umgehend austauschen!")
}
jetzt erhalte ich Nachts immer eine Mail wo $NAME mit Bad.HT dargestellt wird.
Am Bad.HT ist aber kein Batteriesymbol und in der Device-Detailübersicht steht auch battery: ok drin, also so wie es auf dem Device selbst auch angezeigt wird.
Hab ich hier einen Fehler im Notify? Interessanterweise kam es auch nur heute nacht, obwohl das Device lt. Log mehrfach was gesendet hat. Gibt im Device auch kein event-on-change-Einstellungen o.ä.
so... die Meldung kommt jetzt immer öfter per Email. geändert hat sich aber nichts. Weder das Device (REAL) zeigt ein Batterie-Mangel an noch ein Eintrag in der DB-Log lässt darauf schließen, dass das ein Batterie-Problem vorliegt.
Log-Dateimässig von FHEM sieht alles gut aus.
Kann man irgendwie jetzt mal sowas wie einen DEBUG aktivieren, damit man nachträglich nachvervollgen könnte, warum das Notify ausgelöst hat. Wenn der Event-Manager nicht permanent läuft und damit mein PC anbleiben müsste, kann ich das doch rückwirkend nicht mehr rekonstruieren... nur über die LOG, DBLOG und den EventMonitor.
Kann mir jemand helfen?
Nachtrag: Könnte es sein, dass tatsächlich das Device nur zwischendurch mal battery:low meldet? Das würde zumindest erklären, warum ich auf den ersten 100 Einträgen im Log nichts zu battery:low finde. Und das würde dann auch erklären, warum das DEVICE nichts anzeigt. Versuche mir das gerade nur zur erklären, wie es dazu kommt. Evtl. ist die Batterie ja wirklich an der Grenze zum Low-State und dadurch kommen die zwischendurch-Meldungen, die (leider auch nicht regelmässig zwischendurch nur öfter) immer wieder eintrudeln.
Alle Devices habe ich an der Hardware kontrolliert und scheinen sauber zu funktionieren.
Nach einigen Jahren MAX! Erfahrung zum Thema Batterie Low :
a. kommt die Meldung einmalig und dann Tage /Wochen lang nicht mehr : vermutlich Telegrammfehler - ignorieren.
b. kommt die Meldung 1x am Tag und das jeden Tag : Bestellschein für neue Batterien ausfüllen und absenden.
c. kommt die Meldung 3 -4 Mal pro Abend / Nacht : Batterien sollten nun da sein , Verpackung öffnen und griffbereit legen
d. Die Meldung ist jetzt dauerhaft da und wird auch am Gerät angezeigt : Batterien wechseln :)
Tipp : ich schreibe mit dann ins attr comment immer das Datum des Wechsels, so habe ich jederzeit im Blick ob der Batterie Verbrauch OK ist ( ca 12-15 Monate i.d.R. bei WT & HT, FK scheinen ewig zu halten )
Ich lasse mir den Batteriewechsel automatisch in einen Dummy schreiben...
In einem habe ich dann alle aktuellen Werte "normiert" und in einem weiteren dann die Wechselzeit...
Gruß, Joachim
Zitat von: MadMax-FHEM am 06 September 2017, 15:13:15
Ich lasse mir den Batteriewechsel automatisch in einen Dummy schreiben...
Würdest du mir dafür mal deine Routine zeigen, bevor ich mir jetzt selbst eine dazu überlegen und schreiben muss :)
Zitat von: Amenophis86 am 02 Januar 2018, 18:31:17
Würdest du mir dafür mal deine Routine zeigen, bevor ich mir jetzt selbst eine dazu überlegen und schreiben muss :)
Klaro:
1. notify:
Internals:
DEF .*:battery.* {my_StoreBatteryStatus($NAME, $EVENT)}
NAME nStoreBatteryStatus
NR 184
NTFY_ORDER 50-nStoreBatteryStatus
REGEXP .*:battery.*
STATE 2018-01-02 19:23:50
TYPE notify
READINGS:
2018-01-02 14:53:42 state active
Attributes:
2. myUtils:
#########################################################################
# Helper for readingsGroup BatteryStatus:
# reads the battery states of devices and
# calculates the battery state in percent (depending on device type) and
# stores it as reading in corresponding dummy device
sub my_StoreBatteryStatus($$)
{
my ($Device, $Event) = @_;
my @BatteryType = split(/:/,$Event); # to distinguish between "battery" and "batteryLevel" devices
my $Model = AttrVal($Device, "model", "undef"); # get the corresponding model type
my $ActBatLevel = 0.0;
my $MinBatLevel = 0.0;
my $RemainingVoltageQuater = 0.0; # for "calculating" the colors
my $MaxBattery = 3.1; # two 1.5V batteries have a measured voltage of 3.1V or even 3.2V
my @DeviceNameParts = split(/_/,$Device); # to filter out HM_ Devices from neighbor or test system or newly included ones
my $SignalDevice = $Device . "_BatState";
# Log3(undef, 1, "my_StoreBatteryStatus Device: $Device Event: $Event Model: $Model");
# ignoring Devices that were just created by autocreate
if($DeviceNameParts[0] eq "HM" || $DeviceNameParts[0] eq "ZWave")
{
Log3(undef, 1, "my_StoreBatteryStatus ignoring Device: $Device");
return;
}
# if it is the first time for that device set it to none (initialize)
if(ReadingsVal($myDummySignalMessageStatesFhemBot, $SignalDevice, "undef") eq "undef")
{
fhem("setreading $myDummySignalMessageStatesFhemBot $SignalDevice none");
}
# actually only devices HM-TC-IT-WM-W-EU and HM-CC-RT-DN have battery level and min-level
# so calculating the percentage of actual level depending on min-level
# all others just have battery ok or nok
# IMPORTANT: first filter those which only send "battery" in EVENT
# then calculate for those which send "batteryLevel"!
# New devices: ZWave. They deliver battery already in percentage.
# New devices: XiaomiFlowerSens. They also deliver batteryLevel but already in percentage.
##############################################
# HM Devices with battery
##############################################
if($BatteryType[0] eq "battery" && $Model ne "HM-TC-IT-WM-W-EU" && $Model ne "HM-CC-RT-DN" && $Model ne "undef")
{
if(ReadingsVal($Device, "battery", "low") eq "ok")
{
# check if battery was low before -> possibly changed
if(ReadingsVal($myDummySignalMessageStatesFhemBot, $SignalDevice, "none") eq "low" || ReadingsVal($myDummyBatteryStates, $Device, 100) < 25)
{
# set date/time for changed battery if it was low before (so probably a change happended)
fhem("setreading $myDummyLastBatteryChange $Device Battery changed:");
# set the signal state back to none
fhem("setreading $myDummySignalMessageStatesFhemBot $SignalDevice none");
}
# status is "ok" so we set to 100% (we don't know better)
fhem("setreading $myDummyBatteryStates $Device 100");
}
else
{
# check if message was already sent
if(ReadingsVal($myDummySignalMessageStatesFhemBot, $SignalDevice, "none") ne "low")
{
# set signal state to low
fhem("setreading $myDummySignalMessageStatesFhemBot $SignalDevice low");
#send message via TelegramBot
fhem("set $myTelegramBot message Change battery for device $Device soon!");
}
# status is NOT "ok" ("low") so we set to 0% (we don't know better)
fhem("setreading $myDummyBatteryStates $Device 0");
}
}
##############################################
# HM Devices with batteryLevel
##############################################
elsif($BatteryType[0] eq "batteryLevel" && $Model ne "undef")
{
$ActBatLevel = ReadingsVal($Device, "batteryLevel", "0.0");
$MinBatLevel = ReadingsNum($Device, "R-lowBatLimitRT", "0.0");
$RemainingVoltageQuater = ($MaxBattery - $MinBatLevel) / 4; # to get 4 quaters for different colours and icons
if(($ActBatLevel - $MinBatLevel) > (3 * $RemainingVoltageQuater))
{
# check if battery was low before -> possibly changed
if(ReadingsVal($myDummySignalMessageStatesFhemBot, $SignalDevice, "none") eq "low" || ReadingsVal($myDummyBatteryStates, $Device, 100) < 25)
{
# set date/time for changed battery if it was low before (so probably a change happended)
fhem("setreading $myDummyLastBatteryChange $Device Battery changed:");
# set the signal state back to none
fhem("setreading $myDummySignalMessageStatesFhemBot $SignalDevice none");
}
# set battery value to 100%
fhem("setreading $myDummyBatteryStates $Device 100");
}
elsif(($ActBatLevel - $MinBatLevel) > (2 * $RemainingVoltageQuater))
{
# between 50% and 75%
fhem("setreading $myDummyBatteryStates $Device 75");
# set the signal state back to none
if(ReadingsVal($myDummySignalMessageStatesFhemBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $myDummySignalMessageStatesFhemBot $SignalDevice none");
}
}
elsif(($ActBatLevel - $MinBatLevel) > (1 * $RemainingVoltageQuater))
{
# between 25% and 50%
fhem("setreading $myDummyBatteryStates $Device 50");
# set the signal state back to none
if(ReadingsVal($myDummySignalMessageStatesFhemBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $myDummySignalMessageStatesFhemBot $SignalDevice none");
}
}
elsif(($ActBatLevel - $MinBatLevel) > (0 * $RemainingVoltageQuater))
{
# check for critical stuff
if(ReadingsVal($Device, "motorErr", "ok") eq "lowBat" || ReadingsVal($Device, "motorErr", "ok") eq "ValveErrorPosition")
{
# empty!
fhem("setreading $myDummyBatteryStates $Device 0");
# check if message was already sent
if(ReadingsVal($myDummySignalMessageStatesFhemBot, $SignalDevice, "low") ne "low")
{
# set signal state to low
fhem("setreading $myDummySignalMessageStatesFhemBot $SignalDevice low");
#send message via TelegramBot
if(ReadingsVal($Device, "motorErr", "ok") eq "ValveErrorPosition")
{
fhem("set $myTelegramBot message Change battery for device $Device now!");
}
else
{
fhem("set $myTelegramBot message Change battery for device $Device soon!");
}
}
}
else
{
# between 0% and 25%
fhem("setreading $myDummyBatteryStates $Device 25");
}
}
else
{
# totally empty
fhem("setreading $myDummyBatteryStates $Device 0");
# check if message was already sent
if(ReadingsVal($myDummySignalMessageStatesFhemBot, $SignalDevice, "low") ne "low")
{
# set signal state to low
fhem("setreading $myDummySignalMessageStatesFhemBot $SignalDevice low");
#send message via TelegramBot
fhem("set $myTelegramBot message Change battery for device $Device soon!");
}
}
}
##############################################
# ZWave Devices
##############################################
elsif($BatteryType[0] eq "battery" && InternalVal($Device, "TYPE", "undef") eq "ZWave")
{
if(ReadingsVal($Device, "battery", "na") eq "low")
{
$ActBatLevel = 0;
}
else
{
$ActBatLevel = ReadingsNum($Device, "battery", "0");
}
if($ActBatLevel > 75)
{
# set date/time for changed battery if it was low before (so probably a change happended)
if(ReadingsVal($myDummySignalMessageStatesFhemBot, $SignalDevice, "none") eq "low" || ReadingsVal($myDummyBatteryStates, $Device, 100) < 25)
{
fhem("setreading $myDummyLastBatteryChange $Device Battery changed:");
}
# set the battery value to 75% - 100%
fhem("setreading $myDummyBatteryStates $Device 100");
# set the signal state back to none
fhem("setreading $myDummySignalMessageStatesFhemBot $SignalDevice none");
}
elsif($ActBatLevel > 50)
{
# between 50% and 75%
fhem("setreading $myDummyBatteryStates $Device 75");
# set the signal state back to none
if(ReadingsVal($myDummySignalMessageStatesFhemBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $myDummySignalMessageStatesFhemBot $SignalDevice none");
}
}
elsif($ActBatLevel > 25)
{
# between 25% and 50%
fhem("setreading $myDummyBatteryStates $Device 50");
# set the signal state back to none
if(ReadingsVal($myDummySignalMessageStatesFhemBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $myDummySignalMessageStatesFhemBot $SignalDevice none");
}
}
elsif($ActBatLevel > 5)
{
# between 5% and 25%
fhem("setreading $myDummyBatteryStates $Device 25");
# maybe already send a message! Easy possible with new signal states
}
else
{
# TODO: test for 0 and then send "change NOW"!
# TODO: test for 0 and then send "change NOW"!
# TODO: test for 0 and then send "change NOW"!
# TODO: test for 0 and then send "change NOW"!
# TODO: test for 0 and then send "change NOW"!
# totally empty (below 5%)
fhem("setreading $myDummyBatteryStates $Device 0");
# check if message was already sent
if(ReadingsVal($myDummySignalMessageStatesFhemBot, $SignalDevice, "low") ne "low")
{
# set signal state to low
fhem("setreading $myDummySignalMessageStatesFhemBot $SignalDevice low");
#send message via TelegramBot
fhem("set $myTelegramBot message Change battery for device $Device soon!");
}
}
}
##############################################
# XiaomiFlowerSens Devices
##############################################
elsif($BatteryType[0] eq "batteryLevel" && InternalVal($Device, "TYPE", "undef") eq "XiaomiFlowerSens")
{
$ActBatLevel = ReadingsNum($Device, "batteryLevel", "0");
if($ActBatLevel > 75)
{
# set date/time for changed battery if it was low before (so probably a change happended)
if(ReadingsVal($myDummySignalMessageStatesFhemBot, $SignalDevice, "none") eq "low" || ReadingsVal($myDummyBatteryStates, $Device, 100) < 25)
{
fhem("setreading $myDummyLastBatteryChange $Device Battery changed:");
}
# set the battery value to 75% - 100%
fhem("setreading $myDummyBatteryStates $Device 100");
# set the signal state back to none
if(ReadingsVal($myDummySignalMessageStatesFhemBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $myDummySignalMessageStatesFhemBot $SignalDevice none");
}
}
elsif($ActBatLevel > 50)
{
# between 50% and 75%
fhem("setreading $myDummyBatteryStates $Device 75");
# set the signal state back to none
if(ReadingsVal($myDummySignalMessageStatesFhemBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $myDummySignalMessageStatesFhemBot $SignalDevice none");
}
}
elsif($ActBatLevel > 25)
{
# between 25% and 50%
fhem("setreading $myDummyBatteryStates $Device 50");
# set the signal state back to none
if(ReadingsVal($myDummySignalMessageStatesFhemBot, $SignalDevice, "none") ne "none")
{
fhem("setreading $myDummySignalMessageStatesFhemBot $SignalDevice none");
}
}
elsif($ActBatLevel > 5)
{
# between 5% and 25%
fhem("setreading $myDummyBatteryStates $Device 25");
# maybe already send a message! Easy possible with new signal states
}
else
{
# totally empty (below 5%)
fhem("setreading $myDummyBatteryStates $Device 0");
# check if message was already sent
if(ReadingsVal($myDummySignalMessageStatesFhemBot, $SignalDevice, "low") ne "low")
{
# set signal state to low
fhem("setreading $myDummySignalMessageStatesFhemBot $SignalDevice low");
#send message via TelegramBot
fhem("set $myTelegramBot message Change battery for device $Device soon!");
}
}
}
}
2a:
##################################################
# Helper for readingsGroup BatteryStatus:
# sets the icon and icon color depending on "calculated" percentage value
sub my_SetBatteryIcon($$)
{
my ($Device, $Value) = @_;
my $Icon = "measure_battery_" . "$Value"; # here the matching icon is "set"
my $ActionDetectorDevice = "status_" . $Device;
my $Name = ""; # name for signal state
my $State = ReadingsVal("ActionDetector", $ActionDetectorDevice, "alive");
# Log3(undef, 1, "my_SetBatteryIcon Device: $Device Value: $Value");
if($State ne "alive")
{
$Icon = "message_attention\@red";
}
else
{
if($Value > 75)
{
$Icon = $Icon . "\@green"; # between 75% and 100%
}
elsif($Value > 25)
{
$Icon = $Icon . "\@orange"; # between 25% and 75%
}
else
{
$Icon = $Icon . "\@red"; # below 25%
}
}
return $Icon;
}
3. der (die) dummy:
Internals:
CHANGED
NAME dmBatteryStates
NR 186
STATE ???
TYPE dummy
READINGS:
2018-01-02 19:27:09 Aussenthermometer 100
2018-01-02 01:57:04 Fenster_Buero 0
2018-01-02 01:56:19 Fenster_EssZi 100
2018-01-02 18:56:28 Fenster_Kueche 100
2018-01-02 15:10:04 Fenster_SchlaZi 0
2018-01-02 16:15:33 Fenster_WoZi 0
2017-10-31 16:02:46 Feuchtigkeit_Balkon_1 75
2017-10-27 21:23:04 Feuchtigkeit_Balkon_2 100
2017-10-27 21:20:25 Feuchtigkeit_Balkon_3 100
2017-10-27 21:20:25 Feuchtigkeit_Balkon_4 100
2017-10-27 21:21:30 Feuchtigkeit_Balkon_5 100
2017-10-27 21:19:06 Feuchtigkeit_Balkon_6 100
2017-10-27 21:21:13 Feuchtigkeit_Balkon_7 100
2017-11-11 03:01:06 Gewitterwarner 100
2017-11-11 12:49:42 Hauptdisplay 100
2018-01-02 08:49:59 Haustuer 100
2018-01-02 19:28:13 Heizkoerperthermostat_Buero 100
2018-01-02 19:27:29 Heizkoerperthermostat_EssZi 100
2018-01-02 19:27:25 Heizkoerperthermostat_Kueche 100
2018-01-02 19:28:11 Heizkoerperthermostat_SchlaZi 75
2018-01-02 19:27:17 Heizkoerperthermostat_WoZi 75
2018-01-02 19:23:55 Markise 25
2018-01-02 17:18:15 Rauchmelder_Buero 100
2018-01-02 18:03:27 Rauchmelder_Eingang 100
2017-12-27 20:59:27 Rauchmelder_Kueche 100
2018-01-02 18:23:06 Rauchmelder_SchlaZi 100
2018-01-02 19:28:12 Thermometer_Gefrierschrank 100
2018-01-02 19:26:59 Thermometer_Heizung 100
2018-01-02 19:28:35 Thermometer_Kuehlschrank 100
2018-01-02 19:13:22 Tuer_Kueche 100
2018-01-02 19:22:31 Tuer_SchlaZi 100
2018-01-02 18:56:53 Tuer_Wohnung 100
2018-01-02 15:57:09 Wandthermostat_Bad 75
2018-01-02 19:21:30 Wandthermostat_Buero 75
2018-01-02 19:23:06 Wandthermostat_Buero2 100
2018-01-02 18:56:09 Wandthermostat_EssZi 75
2018-01-02 19:27:05 Wandthermostat_EssZi2 50
2018-01-02 18:45:15 Wandthermostat_Kueche 50
2018-01-02 18:47:40 Wandthermostat_SchlaZi 75
2018-01-02 18:19:22 Wandthermostat_WC 50
2018-01-02 18:50:31 Wandthermostat_WoZi 75
Attributes:
event-on-change-reading .*
3a:
Internals:
NAME dmLastBatteryChange
NR 191
STATE ???
TYPE dummy
READINGS:
2017-06-18 21:09:49 Heizkoerperthermostat_EssZi Battery changed:
2017-07-08 12:36:35 Heizkoerperthermostat_FabiZi Battery changed:
2017-08-31 22:59:44 Heizkoerperthermostat_Kueche Battery changed:
2017-01-18 01:23:19 Heizkoerperthermostat_SchlaZi Battery changed:
2016-11-14 00:55:22 Heizkoerperthermostat_WoZi Battery changed:
2017-11-19 21:15:25 Rauchmelder_Eingang Battery changed:
2017-12-06 17:09:28 Rauchmelder_SchlaZi Battery changed:
2017-08-14 07:38:04 Wandthermostat_Bad Battery changed:
2017-05-06 23:30:38 Wandthermostat_EssZi Battery changed:
2017-05-03 07:28:45 Wandthermostat_FabiZi Battery changed:
2017-03-19 11:55:00 Wandthermostat_Kueche Battery changed:
2017-04-22 06:51:20 Wandthermostat_SchlaZi Battery changed:
2017-03-19 11:56:34 Wandthermostat_WC Battery changed:
2017-04-14 09:11:26 Wandthermostat_WoZi Battery changed:
Attributes:
event-on-change-reading .*
4. readingsGroup(s):
Internals:
DEF NAME=dmBatteryStates.*:.*
NAME rgBatteryStatus
NR 179
NTFY_ORDER 50-rgBatteryStatus
STATE Initialized
TYPE readingsGroup
mayBeVisible 1
CONTENT:
dmBatteryStates 1
CONTENT2:
DEVICES:
ARRAY(0x514d6c8)
fhem:
lastDefChange 16
last_update 1514917483.2913
helper:
DEF
mapping $READING
valueIcon {my_SetBatteryIcon($READING, $VALUE)}
Attributes:
alias Übersicht Batterien
mapping $READING
nolinks 1
notime 1
room Overview Battery,Overview
sortby 08
valueIcon {my_SetBatteryIcon($READING, $VALUE)}
4a:
Internals:
DEF <Gerät>,<>,<Datum> NAME=dmLastBatteryChange:.*
NAME rgLastBatteryChange
NR 189
NTFY_ORDER 50-rgLastBatteryChange
STATE Initialized
TYPE readingsGroup
CONTENT:
dmLastBatteryChange 1
CONTENT2:
DEVICES:
ARRAY(0x4ffa710)
ARRAY(0x46e4290)
fhem:
lastDefChange 16
last_update 1514905488.10322
helper:
DEF
mapping $READING
Attributes:
alias Übersicht Batteriewechsel
mapping $READING
nolinks 1
room Overview,Overview Battery
sortColumn 3
sortby 09
Einige zusätzliche Erläuterungen (der Rest sollte den Kommentaren zu entnehmen sein):
Ich habe zu Beginn der myUtils einige "globale Variablen", dort hinterlege ich gewisse Dinge, die ich immer wieder brauche.
Somit muss ich nicht immer überlegen wie der dummy etc. grad wieder heißt und eine Anpassung an Namen geht einfach (gut find-rplace würde auch gehen) indem ich im "Kopfteil" einfach den "Variablenwert" ändere wo dann der dummyname etc. hinterlegt ist.
######################################################
# Global definitions like names of dummies used etc.
# dummy that holds the status of sent messages to prevent unwanted resending
my $myDummySignalMessageStatesFhemBot = "dmSignalMessageStatusFhemBot";
# dummy that holds the calculated battery values
my $myDummyBatteryStates = "dmBatteryStates";
# dummy that holds the date of last battery change
my $myDummyLastBatteryChange = "dmLastBatteryChange";
Es ist mein ältester Code, einiges ist sicher nicht "optimal" aber ich verstehe was wie geht und auch wenn was nicht geht/wo klemmt ;)
Wollte den Code auch schon immer mal überarbeiten aber: warum, wenn es tut ;)
Neue Gerätetypen kommen halt immer als neues "elsif" dazu...
...auch wenn nur wenig/nichts zu tun ist.
Aber auch hier wieder: eine Stelle wo ich suchen muss, wenn was klemmt...
Auch die Darstellung des Icons geht sicher anders aber ich verfahre gern nach dem Prinzip: notify zum Auslösen und ("komplizierte" Entscheidungen und) Ausführung(en) dann in eine myUtils.
Die erste Form der aufgerufenen Sub ist immer nur eine einfache Logausgabe der "Parameter", dann sehe ich ob das notiy getriggert wird wie erwartet und auch was tatsächlich übergeben wird... ;)
Und dann wird Stück für Stück der Code aufgebaut...
Zuletzt habe ich noch eingebaut, dass in einem weiteren Dummy (jaja: warum immer dummy ;) / aber so habe ich alles an einer Stelle / Alternative: eingenes/zusätzliches Reading am Device) speichere wann die Batterie (vermutlich: von leer zu voll) getauscht wurde...
Wollte eigenltich auch noch eine Berechnung der "Haltbarkeit" usw. aber hatte noch keine Zeit...
...aber die zuletzt getauschten Batterien halten ja noch ein Weilchen...
Ich hoffe ich habe nichts (wichtiges) vergessen...
...ansonsten einfach nachfragen.
Gruß, Joachim
Ui, das haste ja wirklich sehr umfangreich und ausführlich gemacht. Gefällt mir, aber da muss ich mir ruhige 5 Minuten suchen um den Code genauer zu betrachten und für meine Bedürfnisse anzupassen. Vielen Dank schon mal dafür.
Bitte gerne!
Und: danke! :)
Ja daher habe ich ihn auch nicht gleich gepostet (sorry ;) ), ist halt nix für copy&paste...
Einiges ist schon sehr speziell...
Viel Vergnügen damit!
Gruß, Joachim
Bin gerade dabei es für meine Bedürfnisse umzubauen und bin schwer begeistert. Kurze Frage, die nur indirekt mit dem Thema zu tun hat. Was bezweckst du in der ReadingsGroup mit dem attr sortby 08
?
Edit:
Habe jetzt nochmals nachgelesen in der CommandRef, aber daraus werde ich nicht schlau. Kann es mir nur so erklären, dass du es damit in der Raumübersicht verschieben kannst an einen bestimmten Platz, da du das wohl auch bei anderen Device vergeben hast.
Zitat von: Amenophis86 am 11 Januar 2018, 13:16:48
Bin gerade dabei es für meine Bedürfnisse umzubauen und bin schwer begeistert. Kurze Frage, die nur indirekt mit dem Thema zu tun hat. Was bezweckst du in der ReadingsGroup mit dem attr sortby 08
?
Edit:
Habe jetzt nochmals nachgelesen in der CommandRef, aber daraus werde ich nicht schlau. Kann es mir nur so erklären, dass du es damit in der Raumübersicht verschieben kannst an einen bestimmten Platz, da du das wohl auch bei anderen Device vergeben hast.
Ah, sehr schön!
Viel Spaß damit!
Jep, exakt.
Ich hatte früher eine Übersichtsseite wo alles Wichtige angezeigt wurde und wollte die einfach "am Ende" stehen haben...
Aber jetzt wo du es erwähnst: die 08 macht mittlerweile keinen Sinn mehr, habe es jetzt auf 2 Seiten/Räume aufgeteilt... Schadet aber auch nicht... ;)
Gruß, Joachim
Ich habe deine Code meine Bedürfnissen ein bisschen angepasst und auch etwas allgemeiner tauglich gemacht, sowie eine weitere Routine geschrieben, welche in einem aktuell vorhandenen System alle nötigen Daten anlegt bzw. die Dummys einmal mit Daten füllt. Da das aber ziemlich offtopic ist, wollte ich dir fragen, ob du was dagegen hast, wenn wir den Code in einem neuen Thema veröffentlichen. Natürlich mit dir als Urheber genannt. Dachte im Bereich Codeschnipsel.
Klar!
Dann komme ich auch in den Genuß deiner Anpassungen und kann sicher was "zurückübernehmen"... ;)
Urheber wäre/ist egal, der Code der dort landet ist ja dann sowieso eher von dir... ;)
Gruß, Joachim
Naja, ich habe jetzt net wirklich viel geändert. Habe das meiste übernommen und es nur so umgebaut, dass man es anlegen kann, wenn man es vorher noch nicht hatte. Denke nicht, dass meine Perl Kenntnis deine übersteigen. Hab jetzt auch noch nicht geschaut, wo man ihn noch verschlanken könnte oder ähnliches. Funktioniert ja auch soweit :) Was ich noch einbauen werde ist die Unterstützung von LaCrosse Sensoren. Aber mehr dazu im neuen Thread.
Neues Thema ist hier: https://forum.fhem.de/index.php/topic,82637.0.html