FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: hummeruli am 15 Juni 2026, 19:26:21

Titel: Funktion ausführen nur wenn sich Wert erhöht
Beitrag von: hummeruli am 15 Juni 2026, 19:26:21
Leider stehe ich gerade voll au dem Schlauch.
Ich brauche eine Art Zähler der immer dann wenn sich ein Wert erhöht ein Relais schaltet. Wenn sich der Wert verringert, dann darf er nichts machen.

Also zum Beispiel:

Zähler = 0                  "keine Reaktion"
Zähler wechselt von 0 > 1   "Relais schaltet eine Sekunde (mit ON-FOR-TIMER 1)"
Zähler wechselt von 1 > 2   "Relais schaltet eine Sekunde (mit ON-FOR-TIMER 1)"
''
Zähler wechselt von 7 > 5   "keine Reaktion"
Zähler wechselt von 3 > 0   "keine Reaktion"

Würde mich freuen wenn mir jemand einen Schubser geben könnte.

Danke

Uli
Titel: Aw: Funktion ausführen nur wenn sich Wert erhöht
Beitrag von: passibe am 15 Juni 2026, 19:41:48
Wo steht denn der Zähler bzw. wo kommt er her?
Wenn er aus einem Reading kommt, dann kannst du vermutlich mittels attr oldreadings <readingName> und OldReadingsNum() arbeiten. Dann kannst du alten und neuen Wert vergleichen, also z.B.
if (ReadingsNum("device", "readingName", "1") > OldReadingsNum("device", "readingName", "2")) {
    fhem("set relay on");
}
(Nur der Vollständigkeit halber, um oldreadings verwenden zu können, muss das jeweilige Reading ein Event erzeugen. Wenn es nicht funktioniert also im Event Monitor schauen, ob das der Fall ist und wenn nicht, dann event-on-* anpassen.)
Titel: Aw: Funktion ausführen nur wenn sich Wert erhöht
Beitrag von: hummeruli am 15 Juni 2026, 19:46:56
Zitat von: passibe am 15 Juni 2026, 19:41:48Wo steht denn der Zähler bzw. wo kommt er her?
Wenn er aus einem Reading kommt, dann kannst du vermutlich mittels attr oldreadings <readingName> und OldReadingsNum() arbeiten. Dann kannst du alten und neuen Wert vergleichen, also z.B.
if (ReadingsNum("device", "readingName", "1") > OldReadingsNum("device", "readingName", "2")) {
    fhem("set relay on");
}
(Nur der Vollständigkeit halber, um oldreadings verwenden zu können, muss das jeweilige Reading ein Event erzeugen. Wenn es nicht funktioniert also im Event Monitor schauen, ob das der Fall ist und wenn nicht, dann event-on-* anpassen.)

Danke für die schelle Antwort, aber wenn ich deinen Code verstehe macht er es ja nur von 1 > 2. Oder?

Es geht darum um bei einem Unifi Cloudkey der an FHEM angebunden ist ein Relais jedes mal wenn ein Gerät sich einloggt zu schalten. Wenn Jemand das WLAN verlässt juckt es nicht.
Titel: Aw: Funktion ausführen nur wenn sich Wert erhöht
Beitrag von: rabehd am 15 Juni 2026, 20:42:56
Zitat von: hummeruli am 15 Juni 2026, 19:46:56macht er es ja nur von 1 > 2. Oder?
nein.

Tipp: Bitte mal nachlesen zu ReadingsNum und OldReadingsNum.
Titel: Aw: Funktion ausführen nur wenn sich Wert erhöht
Beitrag von: hummeruli am 15 Juni 2026, 20:49:42
Wenn ich das aber richtig verstehe, so wird das Relais nur einmal eingeschaltet und bleibt an. Ich brauche ja dass das Relais jedes mal wenn sich der Wert erhöht, für eine Sekunde anzieht (ON-FOR-TIMER 1.
Titel: Aw: Funktion ausführen nur wenn sich Wert erhöht
Beitrag von: passibe am 16 Juni 2026, 02:08:04
Zitat von: hummeruli am 15 Juni 2026, 19:46:56macht er es ja nur von 1 > 2
Nein. Das > ist "größer als". 1 > 2 kann also schon gar nicht true werden und den Code im if ausführen, weil 1 nicht größer 2 ist.

Die 1 und 2 in den Klammern sind die Defaultwerte, d.h. das, was (Old)ReadingsNum ausgibt, wenn das Reading nicht existiert oder aus irgendeinem anderen Grund nicht ausgelesen werden kann. Ich habe diese Defaultwerte extra so gewählt, dass, sollten beide Defaultwerte zum Einsatz kommen, das if nicht ausgeführt wird. Einfach zur Sicherheit. Vermutlich wäre es besser die 2 auf irgendeine hohe Zahl, 9999999 oder so, zu ändern.

on-for-timer kannst du ja einfach benutzen, statt nur on.
Titel: Aw: Funktion ausführen nur wenn sich Wert erhöht
Beitrag von: Guybrush am 16 Juni 2026, 08:45:36
für den fall gibt es doch das attribut "event-on-change". das setzt du auf das readings, welches den zähler hoch zählt. es wird dann nur noch bei änderung des wertes ein event gefeuert, wo du dann über NOTIFY deine Logik hinterlegen kannst.
Titel: Aw: Funktion ausführen nur wenn sich Wert erhöht
Beitrag von: hummeruli am 16 Juni 2026, 12:33:03
Zitat von: Guybrush am 16 Juni 2026, 08:45:36für den fall gibt es doch das attribut "event-on-change". das setzt du auf das readings, welches den zähler hoch zählt. es wird dann nur noch bei änderung des wertes ein event gefeuert, wo du dann über NOTIFY deine Logik hinterlegen kannst.
Das geht leider nicht da er hoch und runter zählt. Genau gesagt die Anzahl der eingeloggten User im WLAN.
Titel: Aw: Funktion ausführen nur wenn sich Wert erhöht
Beitrag von: passibe am 16 Juni 2026, 13:07:42
Hier braucht es doch gar kein event-on-* ...

Die Bedingung lässt sich einfach mit "größer als" abbilden. Wenn ein Wert größer ist als der andere (alte) Wert, dann soll fhem on-for-timer 1 ausführen. So kompliziert ist das nun wirklich nicht.

Hast du denn mal die Lösung mit oldreadings ausprobiert?
Titel: Aw: Funktion ausführen nur wenn sich Wert erhöht
Beitrag von: hummeruli am 16 Juni 2026, 15:57:42
Zitat von: passibe am 16 Juni 2026, 13:07:42Hier braucht es doch gar kein event-on-* ...

Die Bedingung lässt sich einfach mit "größer als" abbilden. Wenn ein Wert größer ist als der andere (alte) Wert, dann soll fhem on-for-timer 1 ausführen. So kompliziert ist das nun wirklich nicht.

Hast du denn mal die Lösung mit oldreadings ausprobiert?

Das mit oldreadings habe ich nirgends gefunden, was nicht bedeuten soll dass es nirgends steht.
Titel: Aw: Funktion ausführen nur wenn sich Wert erhöht
Beitrag von: passibe am 16 Juni 2026, 17:29:21
Commandref ist bekannt?
https://fhem.de/commandref_DE.html#perl (bisschen scrollen, oder strg+f mit "OldReadingsNum" benutzen)
https://fhem.de/commandref_DE.html#oldreadings (hier zum Attribut)

Googlen geht auch:
site:fhem.de oldreadings

Ansonsten hatte ich es eigentlich in meiner Antwort erklärt, was du machen musst:
1. Bei deinem unifi-Gerät oldreadings-Attribut mit dem reading, von dem du den alten Wert speichern willst, füllen
2. z.B. ein Notify erstellen, das auf ein Event, das von diesem Reading kommt, hört
3. Den Perl-Code geringfügig anpassen (richtiger Name des devices, richtiger Name des readings, ggfs. defaultwerte ändern, Schaltbefehl auf on-for-timer ändern)
4. Fertig

Wenn du da noch Unterstützung brauchst, dann poste einfach mal deine Versuche. Ohne es einfach zu versuchen, wird das nichts.
Titel: Aw: Funktion ausführen nur wenn sich Wert erhöht
Beitrag von: hummeruli am 16 Juni 2026, 19:23:19
ich hatte es mit einem DOIF versucht, wobei dieser jedoch eben nur das erste mal, also von 0 nach 1 reagiert.

defmod checkFeuer DOIF ([cloudkey:-UC_wlan_users] > 0) (set Optokoppler on-for-timer 1)
Das oldreadings habe ich jetzt gefunden, stehe aber auf dem Schlauch wie ich es dort anwenden könnte.

Titel: Aw: Funktion ausführen nur wenn sich Wert erhöht
Beitrag von: passibe am 16 Juni 2026, 21:00:42
Zitat von: passibe am 16 Juni 2026, 17:29:21Ansonsten hatte ich es eigentlich in meiner Antwort erklärt, was du machen musst:
1. Bei deinem unifi-Gerät oldreadings-Attribut mit dem reading, von dem du den alten Wert speichern willst, füllen
2. z.B. ein Notify erstellen, das auf ein Event, das von diesem Reading kommt, hört
3. Den Perl-Code geringfügig anpassen (richtiger Name des devices, richtiger Name des readings, ggfs. defaultwerte ändern, Schaltbefehl auf on-for-timer ändern)
4. Fertig
Bitte diese Schritte befolgen, am besten ein notify verwenden. DOIF ist hier overkill bzw. nervig, weil es kompliziert ist, die Bedingung als Perl zu formulieren. Zu dem "nur einmal auslösen": es gibt attr <DOIF-Device> do always. Ist aber irrelevant, bitte einfach notify benutzen

Übrigens scheint da irgendwo in deinem Kopf noch ein Knoten zu sein, weil es bringt dir nichts, dass du stumpf auf "größer als null" prüfst; du musst ja den alten mit dem neuen Wert vergleichen. Dazu brauchst du oldreadings.
Titel: Aw: Funktion ausführen nur wenn sich Wert erhöht
Beitrag von: hummeruli am 16 Juni 2026, 21:53:39
Habe das soweit ich es verstanden habe umgesetzt.

defmod Feuer_ntf notify cloudkey:-UC_wlan_users > cloudkey:oldreadings:-UC_wlan_users (set Optokoppler on-for-timer 1)
Ich kann das Notify mit trigger anstoßen, so dass eventCount hoch zählt. Das Relais schaltet jedoch nicht.
Ich vermute dass ich das mit dem oldreadings nicht richtig umsetze. Im cloudkey (das verwendete Modul) habe ich das Attribut oldreadings gesetzt.
Titel: Aw: Funktion ausführen nur wenn sich Wert erhöht
Beitrag von: passibe am 16 Juni 2026, 23:42:43
Zitat von: hummeruli am 16 Juni 2026, 21:53:39cloudkey:oldreadings:-UC_wlan_users
Das hier verstehe ich nicht

Dieser Vergleich direkt im notify dürfte wohl auch nicht funktionieren, wo hast du das denn her?

Bitte im notify einfach den perl-code nutzen, den ich oben gepostet habe (natürlich anpassen!)
Zitat von: passibe am 15 Juni 2026, 19:41:48if (ReadingsNum("device", "readingName", "1") > OldReadingsNum("device", "readingName", "2")) {
    fhem("set relay on");
}

Im Zweifel das notify auch erstmal leer aus dem Event Monitor heraus erstellen.

Ansonsten: Hast du in cloudkey auch das attribut oldreadings auf -UC_wlan_users gesetzt? (Und sicher, dass das Reading mit einem - anfängt? Also stimmt -UC_wlan_users oder UC_wlan_users?)
Titel: Aw: Funktion ausführen nur wenn sich Wert erhöht
Beitrag von: hummeruli am 17 Juni 2026, 00:07:15
cloudkey:oldreadings:-UC_wlan_users Das hatte ich aus Unverständnis rein gesetzt, da ich es nicht wirklich verstanden habe wie oldreadings zu verwenden ist.

Das Reading im cloudkey ist mit dem - am Anfang richtig.

Hab das jetzt so versucht, ohne Erfolg:

defmod Feuer_ntf notify cloudkey:-UC_wlan_users if (ReadingsNum("cloudkey", "-UC_wlan_users", "1") > OldReadingsNum("-UC_wlan_users", "-UC_wlan_users", "2")) fhem("set Optokoppler on-for-timer 1")
Titel: Aw: Funktion ausführen nur wenn sich Wert erhöht
Beitrag von: passibe am 17 Juni 2026, 01:37:59
Nächstes Mal bitte googeln und versuchen zu verstehen wie Perl-Code in FHEM eingebunden werden muss (durch {}) und wie überhaupt ein korrektes Perl-if aussieht.

Insofern jetzt Schritt für Schritt:
cloudkey:-UC_wlan_users:.* {
if (ReadingsNum("cloudkey", "-UC_wlan_users", "1") > OldReadingsNum("cloudkey", "-UC_wlan_users", "99")) {
fhem("set test on-for-timer 2");
}
}
Es kann sein, dass -UC_wlan_users einmal aktualisiert werden muss (d.h. ein Event generieren muss), bevor oldreadings funktioniert. Also ggfs. einmal mit trigger nachhelfen.

Ansonsten fällt mir grade auf, weil wir notify benutzen, kann man bei Schritt 4 auch mit $EVTPART1 arbeiten. Das ist dann etwas schlanker:
cloudkey:-UC_wlan_users:.* {
if ($EVTPART1 > OldReadingsNum("cloudkey", "-UC_wlan_users", "99")) {
fhem("set test on-for-timer 2");
}
}
Titel: Aw: Funktion ausführen nur wenn sich Wert erhöht
Beitrag von: hummeruli am 17 Juni 2026, 15:25:56
Danke für die sehr gute Anleitung. Leider hat er aber nur einmal geschaltet.

-UC_wlan_users waren 34 und ich habe das WLAN an meinem Handy aktiviert. Dann zeigte der cloudkey die 35 und das Relais hat geschaltet. Jetzt habe ich bei zwei Geräten das WLAN abgeschaltet. Mein cloudkey zeigt jetzt die 33 an.
Soweit gut. Relais zieht nicht an. Wenn ich jedoch bei einem Gerät das WLAN einschalte wird es vom cloudkey erkannt und der Zähler um eins erhöht. Leider schaltet das Relais nicht. Auch wenn ich noch ein oder zwei einlogge erkennt es der cloudkey Problemlos. Das Notify triggert nicht und deshalb bleibt das Relais aus.
Der Zähler im cloudkey zeigt immer die Anzahl der aktiven Geräte im WLAN. Sprich wenn die Zahl sich verringert soll das Relais aus bleiben. Jedes mal wenn sich ein Gerät einloggt soll das Relais schalten.
Also auch dann wenn zuerst 35 User aktiv sind, dann Drei raus gehen und danach nur ein User hinzukommt.
Titel: Aw: Funktion ausführen nur wenn sich Wert erhöht
Beitrag von: passibe am 17 Juni 2026, 18:10:02
Kannst du bitte mal ein list sowohl von Feuer_ntf als auch von cloudkey posten?
Alsolist Feuer_ntfund dannlist cloudkey(beim cloudkey ggfs. irgendwelche personenbezogenen Daten unkenntlich machen)

Danke!
Titel: Aw: Funktion ausführen nur wenn sich Wert erhöht
Beitrag von: hummeruli am 17 Juni 2026, 19:57:16
Hier das Notify:
Internals:
  CFGFN     
  DEF        cloudkey:-UC_wlan_users:.* {
    if (ReadingsNum("cloudkey", "-UC_wlan_users", "1") > OldReadingsNum("cloudkey", "-UC_wlan_users", "99")) {
        fhem("set Optokoppler on-for-timer 5");
    }
}
  FUUID      6a31c6a4-f33f-9795-4196-09afc6b9ebb3167d
  NAME      Feuer_ntf
  NOTIFYDEV  cloudkey
  NR        591
  NTFY_ORDER 50-Feuer_ntf
  REGEXP    cloudkey:-UC_wlan_users:.*
  STATE      2026-06-17 18:47:24
  TRIGGERTIME 1781714844.05071
  TYPE      notify
  eventCount 7
  READINGS:
    2026-06-17 15:06:46  state          active
    2026-06-17 18:47:24  triggeredByDev  cloudkey
    2026-06-17 18:47:24  triggeredByEvent -UC_wlan_users: 37
  hmccu:
Attributes:
  room      Ausgang

Um den ganzen cloudkey hier rein zu bringen bräuchte ich bestimmt Stunden, da das Listing 6458 Zeilen umfasst.

Hier ein Auszug:
Internals:
  DEF        192.168.0.247 8909 crypt:53515254 crypt:580172794643090f10777e745254637450340b48036f431d395a794545 60
  FUUID      69a5d45a-f33f-9795-915b-b67be1978d0093a4
  FVERSION  74_Unifi.pm:0.235000/2021-01-09
  LASTInputDev cloudkey
  MSGCNT    337563
  NAME      cloudkey
  NOTIFYDEV  global
  NR        510
  NTFY_ORDER 50-cloudkey
  STATE      connected
  TYPE      Unifi
  UC_VERSION 10.4.57
  VERSION    3.5.2
  cloudkey_MSGCNT 337563
  cloudkey_TIME 2026-06-17 18:50:38
  eventCount 343979
  OLDREADINGS:
    2026-06-17 18:05:07  -UC_wlan_users  38
  READINGS:
    2026-06-17 18:50:38  -AP-lastUpdate  Wed Jun 17 16:50:38 2026
    2026-06-17 18:50:38  -AP_1_Flur_UAP-AC-Lite_clients 13
    2026-06-17 18:50:38  -AP_1_Flur_UAP-AC-Lite_essid xxx
    2026-06-17 18:50:38  -AP_1_Flur_UAP-AC-Lite_locate off
    2026-06-17 18:50:38  -AP_1_Flur_UAP-AC-Lite_state ok
    2026-06-17 18:50:38  -AP_1_Flur_UAP-AC-Lite_utilization 36,8
    2026-06-17 18:50:38  -AP_2_Wohnzimmer_UAP-AC-Lite_clients 19
    2026-06-17 18:50:38  -AP_2_Wohnzimmer_UAP-AC-Lite_essid xxx
    2026-06-17 18:50:38  -AP_2_Wohnzimmer_UAP-AC-Lite_locate off
    2026-06-17 18:50:38  -AP_2_Wohnzimmer_UAP-AC-Lite_state ok
    2026-06-17 18:50:38  -AP_2_Wohnzimmer_UAP-AC-Lite_utilization 34,7
    2026-06-17 18:50:38  -AP_3_Werkstatt_UAP-AC-Lite_clients 5
    2026-06-17 18:50:38  -AP_3_Werkstatt_UAP-AC-Lite_essid xxx
    2026-06-17 18:50:38  -AP_3_Werkstatt_UAP-AC-Lite_locate off
    2026-06-17 18:50:38  -AP_3_Werkstatt_UAP-AC-Lite_state ok
    2026-06-17 18:50:38  -AP_3_Werkstatt_UAP-AC-Lite_utilization 35,5
    2026-06-17 18:50:38  -UC_blockedClients
    2026-06-17 18:50:38  -UC_events      0 (last 24h)
    2026-06-17 18:50:38  -UC_newClients 
    2026-06-17 18:50:38  -UC_unarchived_alerts 0
    2026-06-17 18:50:38  -UC_wlan_accesspoints 3
    2026-06-17 18:50:38  -UC_wlan_guests 0
    2026-06-17 18:50:38  -UC_wlan_state  ok
    2026-06-17 18:50:38  -UC_wlan_users  37
Attributes:
  group      Unifi
  oldreadings -UC_wlan_users
  room      Sicherheit,System->Server

Der ganze Rest bezieht sich auf Daten der Clients und des Servers (cloudkey).

Seltsam ist dass er vorhin als ich geschrieben hatte nur einmal das Relais geschaltet hat. Jetzt schaltet er jedes mal wenn der cloudkey aktualisiert wird, also ca. jede Minute. Obwohl sich der Wert nicht erhöht.

Hier das Logfile des Optokopplers:
2026-06-17_19:18:47 Optokoppler on-for-timer 5
2026-06-17_19:22:03 Optokoppler on-for-timer 5
2026-06-17_19:23:07 Optokoppler on-for-timer 5
2026-06-17_19:24:13 Optokoppler on-for-timer 5
2026-06-17_19:25:17 Optokoppler on-for-timer 5
2026-06-17_19:26:23 Optokoppler on-for-timer 5
2026-06-17_19:28:33 Optokoppler on-for-timer 5
2026-06-17_19:29:38 Optokoppler on-for-timer 5
2026-06-17_19:30:43 Optokoppler on-for-timer 5
2026-06-17_19:31:48 Optokoppler on-for-timer 5
2026-06-17_19:32:53 Optokoppler on-for-timer 5
2026-06-17_19:33:58 Optokoppler on-for-timer 5
2026-06-17_19:35:03 Optokoppler on-for-timer 5
2026-06-17_19:36:08 Optokoppler on-for-timer 5
2026-06-17_19:37:13 Optokoppler on-for-timer 5
2026-06-17_19:39:23 Optokoppler on-for-timer 5
2026-06-17_19:40:28 Optokoppler on-for-timer 5
2026-06-17_19:41:33 Optokoppler on-for-timer 5
2026-06-17_19:42:38 Optokoppler on-for-timer 5
2026-06-17_19:43:43 Optokoppler on-for-timer 5
2026-06-17_19:44:48 Optokoppler on-for-timer 5
2026-06-17_19:45:53 Optokoppler on-for-timer 5
2026-06-17_19:46:58 Optokoppler on-for-timer 5
Titel: Aw: Funktion ausführen nur wenn sich Wert erhöht
Beitrag von: bertl am 18 Juni 2026, 08:51:51
Vielleicht mal folgendes ergänzen:

attr cloudkey event-on-change-reading -UC_wlan_users
Titel: Aw: Funktion ausführen nur wenn sich Wert erhöht
Beitrag von: hummeruli am 18 Juni 2026, 13:05:59
Sodele,

Es funktioniert.

Vielen lieben Danke an den sehr geduldigen passibe und das i-Düpfele wie man bei uns sagt, von bertl.

Früher war das mit dem Google bemühen noch okay. Mittlerweile kann man es total vergessen, von zehn Ergebnissen sind 6x "Gesponsert" 2x "reddit mit Blafasl" Und mit viel Glück eine "halbwegs Antwort". Klar jetzt sagen viele warum, da ist doch gleich ganz oben von Gemini-Genie die richtige Antwort. Doch das ist für mich keine Option. Ich verweigere mich der KI vehement, und lebe trotzdem.
Deshalb frage ich lieber hier im Forum, wo es sehr viele wirklich gute Programmierer gibt.

Danke nochmal

Gruß

Uli
Titel: Aw: Funktion ausführen nur wenn sich Wert erhöht
Beitrag von: bertl am 18 Juni 2026, 13:44:34
Nur zur Sicherheit:

Bis jetzt hattest du für 'cloudkey' die Attribute 'event-on-update-reading' und 'event-on-change-reading' NICHT in Verwendung.
Somit wurde bis jetzt für jedes Reading bei einem Update ein Event erzeugt.
Sobald du nun eines der beiden Attribute verwendest, werden nur mehr Events für das angegebene Reading erzeugt und alle anderen werden deaktiviert.

Falls du also von irgend einem anderen Reading dieses Gerätes ein Event erwartest (egal ob durch Notify, DOIF, ...), musst du dieses in eines der obigen Attribute angeben.
Titel: Aw: Funktion ausführen nur wenn sich Wert erhöht
Beitrag von: hummeruli am 18 Juni 2026, 13:49:36
Ja das ist mir klar. Diese Installation ist nur für den cloudkey und der Auswertung dass wenn sich ein WLAN-Client einloggt, ein Ein Optokoppler eine externe Steuerung triggert. Das funktioniert mit dieser Lösung.

Danke
Titel: Aw: Funktion ausführen nur wenn sich Wert erhöht
Beitrag von: elektron-bbs am 18 Juni 2026, 14:02:31
Mal abgesehen davon, das es sowieso sinnvoll ist, die Events einzuschränken, könnte man das Attribut "oldreadings" auch um die Erweiterung "oldreadingsAlways" ergänzen:
Zitatoldreadings
Dieses Attribut enthält eine durch Kommata getrennte Liste von Readings. regex sind erlaubt. Für jedes Reading aus der Liste speichert FHEM intern den vorherigen Wert wenn sich das Reading ändert. Zum Zugriff auf die Werte gibt es die OldReadings.* Routinen. Falls der vorherige Wert immer, d.h. auch wenn es sich nicht ändert, gespeichert werden soll, dann muss der letzte Werte der Komma getrennten Liste oldreadingsAlways sein.

Ich habe das mal mit folgendem notify durchprobiert:
cloudkey:-UC_wlan_users:.*
{
  my $oldVal = OldReadingsNum($NAME, "-UC_wlan_users", "99");
  Log3 $NAME, 3, "$NAME: Feuer_ntf -UC_wlan_users oldVal=$oldVal newVal=$EVTPART1";
  if (ReadingsNum("cloudkey", "-UC_wlan_users", "1") > OldReadingsNum("cloudkey", "-UC_wlan_users", "99")) {
    Log3 $NAME, 3, "$NAME: Feuer_ntf -UC_wlan_users newVal > oldVal";
    # fhem("set Optokoppler on-for-timer 5");
  }
}

Das Ergebnis sieht so aus:
2026.06.18 12:49:11 3: cloudkey: Feuer_ntf -UC_wlan_users oldVal=99 newVal=10
2026.06.18 12:49:25 3: cloudkey: Feuer_ntf -UC_wlan_users oldVal=99 newVal=10
2026.06.18 12:49:49 3: cloudkey: Feuer_ntf -UC_wlan_users oldVal=99 newVal=10
--- ab hier Attribut "oldreadings -UC_wlan_users,oldreadingsAlways" gesetzt
2026.06.18 12:53:17 3: cloudkey: Feuer_ntf -UC_wlan_users oldVal=10 newVal=10
2026.06.18 13:32:24 3: cloudkey: Feuer_ntf -UC_wlan_users oldVal=10 newVal=10
2026.06.18 13:34:02 3: cloudkey: Feuer_ntf -UC_wlan_users oldVal=10 newVal=10
2026.06.18 13:35:50 3: cloudkey: Feuer_ntf -UC_wlan_users oldVal=10 newVal=34
2026.06.18 13:35:50 3: cloudkey: Feuer_ntf -UC_wlan_users newVal > oldVal
2026.06.18 13:36:54 3: cloudkey: Feuer_ntf -UC_wlan_users oldVal=34 newVal=35
2026.06.18 13:36:54 3: cloudkey: Feuer_ntf -UC_wlan_users newVal > oldVal
2026.06.18 13:37:19 3: cloudkey: Feuer_ntf -UC_wlan_users oldVal=35 newVal=33
2026.06.18 13:37:44 3: cloudkey: Feuer_ntf -UC_wlan_users oldVal=33 newVal=34
2026.06.18 13:37:44 3: cloudkey: Feuer_ntf -UC_wlan_users newVal > oldVal
2026.06.18 13:39:22 3: cloudkey: Feuer_ntf -UC_wlan_users oldVal=34 newVal=33
2026.06.18 13:39:26 3: cloudkey: Feuer_ntf -UC_wlan_users oldVal=33 newVal=33
2026.06.18 13:41:22 3: cloudkey: Feuer_ntf -UC_wlan_users oldVal=33 newVal=34
2026.06.18 13:41:22 3: cloudkey: Feuer_ntf -UC_wlan_users newVal > oldVal
--- ab hier wieder ohne oldreadingsAlways:
2026.06.18 13:41:28 3: cloudkey: Feuer_ntf -UC_wlan_users oldVal=33 newVal=34
2026.06.18 13:41:28 3: cloudkey: Feuer_ntf -UC_wlan_users newVal > oldVal
2026.06.18 13:41:34 3: cloudkey: Feuer_ntf -UC_wlan_users oldVal=33 newVal=34
2026.06.18 13:41:34 3: cloudkey: Feuer_ntf -UC_wlan_users newVal > oldVal
Titel: Aw: Funktion ausführen nur wenn sich Wert erhöht
Beitrag von: hummeruli am 18 Juni 2026, 17:39:33
Ehrlich gesagt ist für mich dein Code komplizierter und was macht er besser? Wo ist der Vorteil drin?

Erspare ich mir das

attr cloudkey event-on-change-reading -UC_wlan_users
Titel: Aw: Funktion ausführen nur wenn sich Wert erhöht
Beitrag von: elektron-bbs am 18 Juni 2026, 17:52:10
Ich habe den Code nur um 3 Zeilen ergänzt, weil ich Log-Ausgaben sehen wollte. Entscheidend ist das Attribut "oldreadings":
-UC_wlan_users,oldreadingsAlways
Titel: Aw: Funktion ausführen nur wenn sich Wert erhöht
Beitrag von: hummeruli am 18 Juni 2026, 17:56:05
Zitat von: elektron-bbs am 18 Juni 2026, 17:52:10Ich habe den Code nur um 3 Zeilen ergänzt, weil ich Log-Ausgaben sehen wollte. Entscheidend ist das Attribut "oldreadings":
-UC_wlan_users,oldreadingsAlways

Sorry aber verstehe nur Bahnhof. Was bringt mir das?