DOIF jedes n-te Mal eine Aktion ausführen

Begonnen von F.R., 22 Mai 2016, 22:48:37

Vorheriges Thema - Nächstes Thema

F.R.

Hallo,
Ich würde gerne bei jeder n- ten Betätigung eines Schalters eine Aktion ausführen. Ich habe mir überlegt, mit ein em Doif auf den Schalter zu prüfen und als zweite Bedingungen zu prüfen ob das Ergebnis des Zählers geteilt durch n eine Ganze Zahl ist. Hierzu prüfe ich
(int($zahl) eq $zahl)

Als DOIF sieht das Ganze so aus:
define zaehlervoll DOIF (([MYSENSOR_102:tripped] eq "on") and ((int(ReadingsVal("zaehler","countsOverall","")/23)) eq  (ReadingsVal("zaehler","countsOverall","")))) (set telegram send Zaehler voll)


Ich bekomme keine Fehlermeldung, ohne die zweite Bedingung funktioniert es.
Hat jemand eine Idee wo mein Fehler liegt?

Oder denke ich viel zu kompliziert und das lässt sich viel einfacher realisieren?

Gruß Florian

ht

Hi Florian,

mir fehlt beim zweiten ReadingsVal ein "/23";)

Ich würde auch eher Modulo benutzen, also ($zahl % n) == 0.

Grüße,
Volker
FHEM 5.7, RasPI 2, HomeMatic über HMUSB, JeeLink Clone, Viessmann Heizung

F.R.

Hallo,
danke für den Tip, ich habe es wie vorgeschlagen mit Modulo gelöst und es funktioniert wunderbar. Ist etwas übersichtlicher als meine Idee :-)

Damian

Angaben der Art:

ReadingsVal("zaehler","countsOverall","")

kann man eleganter in DOIF-Syntax angeben:

[?zaehler:countsOverall]

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Per

Nebenbei:
ReadingsVal("zaehler","countsOverall","")
mit "" als Defaultwert ist wg. / 23 bzw. % 23 nicht sinnvoll, 0 wäre besser.