Neues Modul readingsGroup

Begonnen von Niko, 24 August 2013, 11:59:11

Vorheriges Thema - Nächstes Thema

Spartacus

Zitat von: moonsorrox am 04 März 2015, 14:44:04
ja das hatte ich schon so, aber schau mal den screenshot...
so fehlt ja das Datum, dafür müsste ich jetzt eine weitere Spalte haben und es da eintragen können, dass weiß ich eben nicht wie das geht.. und die Tage sind immer noch hinten dran bei den Timern..!
Hi,
das verstehe ich nicht,
wenn Du das Datum sowieso benötigst, wieso splittest Du dann den String? Dann lass ihn doch komplett mit Datum anzeigen.

Ich bin zwar nur der DAU, aber Du kannst die letzten unnötigen Zeichen einfach abschneiden.
{'{substr ($VALUE,0,19)}'}
heisst soviel wie: gibt ab Stelle "0" "19" Zeichen des Strings aus. Hier sollten dann der Rest abgeschnitten werden.
Das geht bestimmt noch viel eleganter...

Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

moonsorrox

#1231
Zitat von: Spartacus am 04 März 2015, 15:15:03
Hi,
das verstehe ich nicht,
wenn Du das Datum sowieso benötigst, wieso splittest Du dann den String? Dann lass ihn doch komplett mit Datum anzeigen.
das hatte ich auch schon...  ;)
aber, weil ich es in zwei Spalten haben möchte (oder mehrere) und es geht jetzt bei diesem Beispiel, aber ich habe weitere (viele) DOIFs da sind noch mehr timer drin wo ich es dann in z.B. 4 Spalten haben möchte.

Da ich es noch nicht mal mit zwei hinbekomme, wird das mit 4 recht schwierig  ;)
alles klar

das DEF hat dann die Spalten so angeordnet:
<%time_clock@LightSeaGreen>,<Datum>,<Uhrzeit>,<Wochentag>,<Wochenende> di_TerrasseLicht:timer.*

oder
<%fts_shutter_automatic@LightSeaGreen>,<WochenTag>,<WochenEnde>,<Zeit - Nachtschicht>,<Zeit - Beschattung> TYPE=DOIF:timer.*

usw. da gibt es noch einige DOIFs timer

schau mal den screenshot, das möchte ich eigentlich unterteilt haben
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Motivierte linke Hände

Hi, gibt es eine Möglichkeit auszulesen, wie viele Einträge in einer Readingsgroup angezeigt werden?

Hintergrund: Ich zeigte eine rg mit variablen Inhalten an, gesteuert über eine sub, die, sofern Readings ok sind, ein undef für ValueFormat zurückgibt. Damit wird in der rg nur noch dann was angezeigt, wenn etwas nicht ok/zu tun/... ist. Sehr praktisch!  :)

Aus Gründen der Schönheit soll in dieser rg nun "Alles ok!" angezeigt werden, wenn nichts los ist. Gute Nachrichten kommen immer gut an... Bisher habe ich das über eine if-Anfrage in der sub hinbekommen, die das ValueFormat steuert:

sub rg_Meldungen_valueFormat($$$) {
  my ($DEVICE,$READING,$VALUE) = @_;

  if ($DEVICE ne "dum_leere_Liste") {
    if (($VALUE eq "closed") || ($VALUE eq "dry") || ($VALUE eq "nein")) {
      return undef;
    } else {
      return $VALUE;
    }
  } else {
    if ((ReadingsVal("struc_FstrGross", "state", "error") eq "closed") && (ReadingsVal("struc_FstrKlein", "state", "error") eq "closed") && (ReadingsVal("Fstr_Vorratskeller", "state", "error") eq "closed") && (ReadingsVal("Wasser_Heizkeller", "state", "dry") eq "dry") && (ReadingsVal("Wasser_Waschmaschine", "state", "dry") eq "dry")) {
      return "&nbsp";
    } else {
      return undef;
    }
  }
}


Nun möchte ich über die rg ebenfalls anzeigen lassen, wenn irgendwo in einem Device eine Batterie gewechselt werden muss. Das lässt sich einfach hinbekommen, indem .*:(B|b)attery der rg hinzugefügt wird, und positive Meldungen kann ich filtern, indem ich oben die erste if-Abfrage um "|| ($VALUE eq "ok)" ergänze. Aber mit der zweiten if-Abfrage (die den dummy dum_liste_leer mit der positiven "Alles ok!" Meldung nur anzeigt, wenn sonst nichts angezeigt wird) habe ich meine Probleme: Da ich keine Ahnung habe, wie ich den Battery-Status für alle Geräte in die IF-Abfrage einbauen soll, ohne alle Geräte einzeln zu listen (und das sind VIELE), wäre es viel einfacher, wenn ich abfragen könnte, wie viele Einträge aktuell überhaupt in der rg angezeigt werden.

Eine solche Abfrage wäre auch nett, um verhindern zu können, dass eine rg bei der Anzeige auf einem Tablet etc. in einem Floorplan aus dem vorgegebenen Design läuft, indem man ab einer bestimmten Anzahl Einträge einfach immer "undef" zurückgibt...

Geht das irgendwie?

Sorry für die längliche Frage. "I didn't have the time to make it shorter."  ;)

Danke, Christian
FHEM 6 in einer KVM VM mit Ubuntu
HM-CFG-USB2, 2xHM-CFG-HMLAN, HM-HMUARTLGW mit 100+ HomeMatic Devices, Geofencing, Fritzbox, Unifi, HUE, Harmony-Hub, Denon-Receiver-Modul, Calendar, GardenaSmartDevice, Shelly, MQTT (zigbee2mqtt, Tasmota und Shelly) und ein wenig 1Wire.

justme1968

#1233
@moonsorrox:das mit dem aufteilen auf 2 oder 4 spalten sollte über die <{...}@reading> variante funktionieren.


@RoBra81: schau dir mal die collapsed/collapsible option an. da mit kannst du einen teil einer readingsGroup auf und zu klappen und brauchst keine zwei readingsGroups mehr oder du verwendest devStateIcon (bzw. den neuen style 8) um beim klick auf das device icon direkt ein popup mit dem slider zu bekommen.

zum nicht/falsch initialisierten slider: passiert das auch wenn du den slider in den webCmd hast?


@Motivierte linke Hände: in $ROW hast du die nummer der aktuellen zeile. wenn du dein alles ok ganz ans ende stellst und davor alle zeilen leer sind ist $ROW == 1 (oder 2 wenn du überschriften hast). wenn nicht wurde vorher eine zeile angezeigt und du kannst das alles ok weg lassen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

RoBra81

Zitat von: justme1968 am 06 März 2015, 11:54:22
@RoBra81: schau dir mal die collapsed/collapsible option an. da mit kannst du einen teil einer readingGroup auf und zu klappen und brauchst keine zwei readingGroups mehr oder du verwendest devStateIcon (bzw. den neuen style 8) um beim klick auf das device icon direkt ein popup mit dem slider zu bekommen.
Das mit den zwei ReadingsGroups passt schon. Zum einen zeigen diese verschiedene Inhalte an teils verschiedenen Positionen im Floorplan an. Zum anderen hatte ich es auch schon mit collapsed/collapsible probiert, da gefällt mir aber das '+' nicht. In meinem Fall habe ich es z.B. so, dass im Floorplan die Ist-Temperatur und die Luftfeuchte angezeigt werden und beim Klick auf die Temperatur die Readingsgroup mit der Bedienung aufgeht (siehe Screenshots) - ein '+' fände ich an der Stelle ziemlich hässlich (nicht böse gemeint...).

Zitat von: justme1968 am 06 März 2015, 11:54:22
zum nicht/falsch initialisierten slider: passiert das auch wenn du den slider in den webCmd hast?
Wie meinst du das? Der Slider in ein und der selben ReadingsGroup funktioniert (wird korrekt initialisiert), wenn die ReadingsGroup auf 'hideable' steht, nicht jedoch, wenn die ReadingsGroup auf 'hidden' steht und nach dem Öffnen der Floorplans erst mit 'show' eingeblendet wird...

Ronny

Elektrolurch

Hallo Andre,

hier das Beispiel zu Beitrag 1202 (readings  der readingsGroup):


define Alle_Fenster_rg readingsGroup Alle_Fenster_rg:<Ansicht>,Ansicht,<Fenster> [A-Z][a-z]_Fenster:state,<{valueListe('Alle_Fenster_rg',$DEVICE,'seit&nbsp;;'.KonvertiereZeit(ReadingsTimestamp($DEVICE,'Previous',0),3))}>
attr Alle_Fenster_rg alias Alle Fenster
attr Alle_Fenster_rg commands {'Alle_Fenster_rg.Ansicht' => 'Ansicht:alle,offene,geschlossene'}
attr Alle_Fenster_rg mapping <a href='fhem?room=%ALIAS'>%ALIAS</a>
attr Alle_Fenster_rg noheading 0
attr Alle_Fenster_rg nolinks 1
attr Alle_Fenster_rg notime 1
attr Alle_Fenster_rg room Haus
attr Alle_Fenster_rg valueFormat {valueListe('Alle_Fenster_rg',$DEVICE,$VALUE);;}
attr Alle_Fenster_rg valueIcon %devStateIcon
attr Alle_Fenster_rg valueSuffix {'Alle_Fenster_rg.Ansicht' => ' Fenster'}


"Ansicht" ist der Anzeigenmodus -> alle,offene,geschlossene und ist als reading bei der rg hinterlegt, wird aber als "state initialized" angezeigt.

die sub valueListe sieht so aus und dient nur dazu, undef oder den value zurückzuliefern, je nach dem, was in "Ansicht" ausgewählt wurde.

sub valueListe($$$)
{
my ($liste,$d,$v) = @_;
# readingsGroup hat rds für die Steuerung der Anzeige, durchlassen

return $v if($d eq $liste);

my $mode = ReadingsVal($liste,'Ansicht','alle');
return $v if($mode eq 'alle');
my $val = Value($d);
return $v if(($mode eq 'eingeschaltete') && ($val =~m/^ein/));
return $v if(($mode eq 'ausgeschaltete') && ($val =~m/^aus/));
return $v if(($mode eq 'offene') && ($val =~m/^offen/));
return $v if(($mode eq 'geschlossene') && ($val =~m/^geschlossen/));

return undef;
} # end sub valueListe
###################################


Die sub verwende ich in verschiedenen rgs, daher die mehreren Abfragen.

Gruß

Elektrolurch
configDB und Windows befreite Zone!

locodriver

Hallo Zusammen,

ich kämpfe schon geraume Zeit mit folgendem Problem:
Bei meinen batteriebetriebenen Geräten habe ich 2 Userreadings definiert:
- Batteriewechsel - Tage seit letztem Batteriewechsel (1)
- Batteriedauer_alt - vorherige Laufzeit der Batterie (2).

In der RG will ich jetzt mit einem Klick nach einem Batteriewechsel den Wert von 1 in 2 übertragen und 1 dann auf Null setzten. Das Nullsetzten funzt, das kopieren nicht. Es kommen keine Fehlermeldungen und der Befehl ist "klickbar".

Das command sieht so aus (relevant ab erstem 'Batteriestati.Batteriewechsel'...):
{"battery.low"=>"set %DEVICE replaceBatteryForSec 60",'Batteriestati.Batteriewechsel'=>'setreading %DEVICE Batteriedauer_alt $Value(%DEVICE,"Batteriewechsel","0")','Batteriestati.Batteriewechsel'=>'setreading %DEVICE Batteriewechsel 0'}

Ich habe schon mit allen (?) Varianten probiert und komme nicht weiter.

Habt ihr einen Vorschlag, wie es funzt?

Danke, Uwe
fhem 6.0 auf Rpi3 Bookworm
HM-LAN-CFG (FW 0.965), HM-MOD-UART, 2x HM-TC-IT-WM-W-EU, 4x HM-Sec-RHS und 3x HM-CC-RT-DN, 6x HM-LC-Bl1-FM mit je 1x Somfy-Motor,
2x HM-LC-SW2-FM für Licht und Lüfter, 2x HM-PB-6-WM55, Alexa, Jeelinkcross, CUL, CUNO2, IR-Blaster

frank

$Value(%DEVICE,"Batteriewechsel","0")
probiere dafür

ReadingsVal(%DEVICE,"Batteriewechsel","0")

eventuell muss der ganze ausdruck dann aber in geschweifte klammern. perl aufruf.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

locodriver

ReadingsVal(%DEVICE,"Batteriewechsel","0")

funzt leider nicht und mit geschweiften Klammern drum auch nicht.
fhem 6.0 auf Rpi3 Bookworm
HM-LAN-CFG (FW 0.965), HM-MOD-UART, 2x HM-TC-IT-WM-W-EU, 4x HM-Sec-RHS und 3x HM-CC-RT-DN, 6x HM-LC-Bl1-FM mit je 1x Somfy-Motor,
2x HM-LC-SW2-FM für Licht und Lüfter, 2x HM-PB-6-WM55, Alexa, Jeelinkcross, CUL, CUNO2, IR-Blaster

frank

'Batteriestati.Batteriewechsel'=>"setreading %DEVICE Batteriedauer_alt ReadingsVal(%DEVICE,'Batteriewechsel',0)"
da müssen auf alle fälle die doppelten anführungszeichen aussen rum, damit die variablen auch erkannt werden. innen die einfachen. mal probieren.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

justme1968

da gehen gerade ein paar dinge durcheinander...

- das mit dem " statt ' trifft auf perl ebene zu.
- %DEVICE ist keine perl variable sondern wird per string suchen ersetzen ersetzet. die lässt sich in einem fhem kommando verwenden,
  hier spielt der unterschied zwischen " und ' keine rolle
- setreading ist fhem ebene, ReadingVal ist perl ebene. die lassen sich nicht direkt auf diese art mischen. du brauchst etwas in der art:
...,'Batteriestati.Batteriewechsel'=>'{fhem("setreading $DEVICE Batteriedauer_alt ". ReadingsVal($DEVICE,"Batteriewechsel",0))}',...

- hier werden entgegen der aussage oben aber aussen die ' und innen die " verwendet. das hat den grund das der das attribut in mehreren stufen ausgewertet wird. im ersten schritt nur um aus dem kompletten string einen perl hash zu machen. in diesem schritt sollen noch keine variablen ersetzt werden. in diesem hash wird dann zur laufzeit der zum jeweiligen reading gehörende wert gesucht. dieser string wird jetzt durch ein weiteres perl eval geschickt. jetzt erst werden die variablen passend zum aktuellen device und reading ersetzt. auf dieser ebene müssen also die " auftauchen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

locodriver

Auf sowas muss man erstmal kommen...

Aber es funzt noch nicht - könnte es sein, dass "irgendwo" ein doppeltes Anführungszeichen an der falschen Stelle ist?
fhem 6.0 auf Rpi3 Bookworm
HM-LAN-CFG (FW 0.965), HM-MOD-UART, 2x HM-TC-IT-WM-W-EU, 4x HM-Sec-RHS und 3x HM-CC-RT-DN, 6x HM-LC-Bl1-FM mit je 1x Somfy-Motor,
2x HM-LC-SW2-FM für Licht und Lüfter, 2x HM-PB-6-WM55, Alexa, Jeelinkcross, CUL, CUNO2, IR-Blaster

frank

Zitat- hier werden entgegen der aussage oben aber aussen die ' und innen die " verwendet. das hat den grund das der das attribut in mehreren stufen ausgewertet wird. im ersten schritt nur um aus dem kompletten string einen perl hash zu machen. in diesem schritt sollen noch keine variablen ersetzt werden. in diesem hash wird dann zur laufzeit der zum jeweiligen reading gehörende wert gesucht. dieser string wird jetzt durch ein weiteres perl eval geschickt. jetzt erst werden die variablen passend zum aktuellen device und reading ersetzt. auf dieser ebene müssen also die " auftauchen.
das muss ich mir wohl mal unters kopfkissen legen.  8)
hoffentlich kann ich dann auch noch schlafen.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

justme1968

@locodriver: schau mal ins log. wenn nichts zu sehen ist verbose hoch drehen.

@frank: das drückt sich platt. dann geht das schon :)
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

locodriver

Habe den Loglevel auf 5 gedreht:

Notify loop for Batteriestati BK_Sensor.battery: <svg class="icon measure_battery_100 0CFB0C" alt="ok" title="ok"    xmlns:dc="http://purl.org/dc/elements/1.1/"    xmlns:cc="http://creativecommons.org/ns#"    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"    xmlns:svg="http://www.w3.org/2000/svg"    xmlns="http://www.w3.org/2000/svg"    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"    version="1.1"    x="0px"    y="0px"    width="361px"    height="361px"    viewBox="0 0 361 361"    style="enable-background:new 0 0 361 361;"    xml:space="preserve"    id="svg2"    inkscape:version="0.48.5 r10040"    sodipodi:docname="measure_battery_100.svg"><metadata    id="metadata36"><rdf:RDF><cc:Work        rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type          rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs    id="defs34" /><sodipodi:namedview    pagecolor="#ffffff"    bordercolor="#666666"    borderopacity="1"    objecttolerance="10"    gridtolerance="10"    guidetolerance="10"    inkscape:pageopacity="0"    inkscape:pageshadow="2"    inkscape:window-width="779"    inkscape:window-height="480"    id="namedview32"    showgrid="false"    inkscape:zoom="0.65373961"    inkscape:cx="180.5"    inkscape:cy="180.5"    inkscape:window-x="0"    inkscape:window-y="0"    inkscape:window-maximized="0"    inkscape:current-layer="svg2" /> <g    id="measure_x5F_battery_x5F_100"    style="stroke:#000000;stroke-opacity:1"    transform="matrix(1.6146267,0,0,1.6146267,-112.50812,-110.12429)"> <g    id="g5"    style="stroke:#000000;stroke-opacity:1"> <path    style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#0CFB0C;fill-opacity:1;stroke:none;stroke-width:10;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"    d="m 134.65625,89.15625 c -6.01649,0 -11,4.983509 -11,11 l 0,180 c 0,6.01649 4.98351,11 11,11 l 95.5,0 c 6.01631,0 11,-4.9825 11,-11 l 0,-180 c 0,-6.016491 -4.98351,-11 -11,-11 l -95.5,0 z m 0,10 95.5,0 c 0.60951,0 1,0.390491 1,1 l 0,180 c 0,0.6085 -0.39231,1 -1,1 l -95.5,0 c -0.60951,0 -1,-0.39049 -1,-1 l 0,-180 c 0,-0.609509 0.39049,-1 1,-1 z"    id="path7"    inkscape:connector-curvature="0" /> <path    style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#0CFB0C;fill-opacity:1;stroke:none;stroke-width:10;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"    d="m 169.625,69.65625 c -6.01649,0 -11,4.983509 -11,11 l 0,14 10,0 0,-14 c 0,-0.609509 0.39049,-1 1,-1 l 25.5,0 c 0.60951,0 1,0.390491 1,1 l 0,14 10,0 0,-14 c 0,-6.016491 -4.98351,-11 -11,-11 l -25.5,0 z"    id="path9"    inkscape:connector-curvature="0" /> </g> <g    style="stroke:#000000;stroke-opacity:1;display:none"    id="g11"> <path    style="fill:none;stroke:#000000;stroke-width:10;stroke-opacity:1;display:inline"    d="m 221.141,266.334 c 0,3.313 -2.688,6 -6,6 h -65.5 c -3.313,0 -6,-2.688 -6,-6 v -6 c 0,-3.314 2.687,-6 6,-6 l 65.5,-20 c 3.313,0 6,2.686 6,6 v 26 z"    id="path13"    inkscape:connector-curvature="0" /> <path    style="fill:none;stroke:#000000;stroke-width:10;stroke-opacity:1;display:inline"    d="m 221.141,166.667 c 0,3.313 -2.688,6 -6,6 l -65.5,20 c -3.313,0 -6,-2.687 -6,-6 v -20 c 0,-3.313 2.687,-6 6,-6 l 65.5,-20 c 3.313,0 6,2.687 6,6 v 20 z"    id="path15"    inkscape:connector-curvature="0" /> <path    style="fill:none;stroke:#000000;stroke-width:10;stroke-opacity:1;display:inline"    d="m 221.141,120 c 0,3.313 -2.688,6 -6,6 l -65.5,20 c -3.313,0 -6,-2.687 -6,-6 v -26 c 0,-3.313 2.687,-6 6,-6 h 65.5 c 3.313,0 6,2.687 6,6 v 6 z"    id="path17"    inkscape:connector-curvature="0" /> <path    style="fill:none;stroke:#000000;stroke-width:10;stroke-opacity:1;display:inline"    d="m 221.141,213.667 c 0,3.313 -2.688,6 -6,6 l -65.5,20 c -3.313,0 -6,-2.687 -6,-6 v -20 c 0,-3.313 2.687,-6 6,-6 l 65.5,-20 c 3.313,0 6,2.687 6,6 v 20 z"    id="path19"    inkscape:connector-curvature="0" /> </g> <g    id="g21"    style="fill:#0CFB0C;fill-opacity:1;stroke:none"> <path    style="fill:#0CFB0C;fill-opacity:1;stroke:none"    d="m 221.141,266.334 c 0,3.313 -2.688,6 -6,6 h -65.5 c -3.313,0 -6,-2.688 -6,-6 v -6 c 0,-3.314 2.687,-6 6,-6 l 65.5,-20 c 3.313,0 6,2.686 6,6 v 26 z"    id="path23"    inkscape:connector-curvature="0" /> <path    style="fill:#0CFB0C;fill-opacity:1;stroke:none"    d="m 221.141,166.667 c 0,3.313 -2.688,6 -6,6 l -65.5,20 c -3.313,0 -6,-2.687 -6,-6 v -20 c 0,-3.313 2.687,-6 6,-6 l 65.5,-20 c 3.313,0 6,2.687 6,6 v 20 z"    id="path25"    inkscape:connector-curvature="0" /> <path    style="fill:#0CFB0C;fill-opacity:1;stroke:none"    d="m 221.141,120 c 0,3.313 -2.688,6 -6,6 l -65.5,20 c -3.313,0 -6,-2.687 -6,-6 v -26 c 0,-3.313 2.687,-6 6,-6 h 65.5 c 3.313,0 6,2.687 6,6 v 6 z"    id="path27"    inkscape:connector-curvature="0" /> <path    style="fill:#0CFB0C;fill-opacity:1;stroke:none"    d="m 221.141,213.667 c 0,3.313 -2.688,6 -6,6 l -65.5,20 c -3.313,0 -6,-2.687 -6,-6 v -20 c 0,-3.313 2.687,-6 6,-6 l 65.5,-20 c 3.313,0 6,2.687 6,6 v 20 z"    id="path29"    inkscape:connector-curvature="0" /> </g> </g> <g    id="Ebene_1"    style="stroke:#000000;stroke-opacity:1"    transform="matrix(1.6146267,0,0,1.6146267,-112.50812,-110.12429)"> </g> </svg>
2015.03.06 20:45:12 5: Triggering Batteriestati (1 changes)


Achtung Log läuft von unten nach oben!

Ich hänge mal noch die anderen Attribute mit an:

attr Batteriestati cellStyle { "r:1"=>'style="font-weight:bold;;;;font-size:16px"', "r:3"=>'style="font-weight:bold"',"r:7" =>'style="font-weight:bold"', "r:13"=>'style="font-weight:bold"',"r:19"=>'style="font-weight:bold"'}
attr Batteriestati commands {"battery.low"=>"set %DEVICE replaceBatteryForSec 60",'Batteriestati.Batteriewechsel'=>'{fhem("setreading $DEVICE Batteriedauer_alt ". ReadingsVal($DEVICE,"Batteriewechsel",0))}','Batteriestati.Batteriewechsel'=>'setreading %DEVICE Batteriewechsel 0'}
attr Batteriestati room 085System
attr Batteriestati valueFormat {if($READING eq "batteryLevel"){if($VALUE>=3){$VALUE=100} elsif($VALUE>=2.7){$VALUE=75}elsif($VALUE>=2.5){$VALUE=50}elsif($VALUE>=2.2){$VALUE=25} else{$VALUE=0}}}
attr Batteriestati valueIcon {'batteryLevel.100'=>'measure_battery_100@0CFB0C','batteryLevel.75'=>'measure_battery_75@42BC0A', 'batteryLevel.50'=>'measure_battery_50@F5FF10','batteryLevel.25'=>'measure_battery_25@FB5909', 'batteryLevel.0'=>'measure_battery_0@E50005','battery.ok'=>'measure_battery_100@0CFB0C', 'battery.low'=>'measure_battery_50@E50005'}
attr Batteriestati valueStyle style="text-align:right"
attr Batteriestati valueSuffix {"batteryLevel"=>" (".ReadingsVal($DEVICE,$READING,0)." V)","Batteriewechsel"=>" Tage","Batteriedauer_alt"=>" Tage"}

fhem 6.0 auf Rpi3 Bookworm
HM-LAN-CFG (FW 0.965), HM-MOD-UART, 2x HM-TC-IT-WM-W-EU, 4x HM-Sec-RHS und 3x HM-CC-RT-DN, 6x HM-LC-Bl1-FM mit je 1x Somfy-Motor,
2x HM-LC-SW2-FM für Licht und Lüfter, 2x HM-PB-6-WM55, Alexa, Jeelinkcross, CUL, CUNO2, IR-Blaster