FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: elmer am 07 April 2018, 12:05:55

Titel: Benachrichtigung nach x Stunden
Beitrag von: elmer am 07 April 2018, 12:05:55
Ich lasse von Hourcounter und einem Homematic Fensterkontakt die Stunden zählen die mein Möhroboter fährt. Ist es möglich mit einem notify oder doif immer nach x Stunden eine Benachrichtigung zu erhalten?

Also so das ich immer wenn der Mäher 50 Stunden unterwegs war eine Benachrichtigung erhalte.

Internals:
   .lastTimecountsOverall 1523095202.47141
   .lastTimecountsPerDay 1523095202.47141
   .lastTimepauseTimeEdge 1523095202.47141
   .lastTimepauseTimeIncrement 1523095202.47141
   .lastTimepauseTimeOverall 1523095202.47141
   .lastTimepauseTimePerDay 1523095202.47141
   .lastTimepulseTimeEdge 1523095202.47141
   .lastTimepulseTimeIncrement 1523095202.47141
   .lastTimepulseTimeOverall 1523095202.47141
   .lastTimepulseTimePerDay 1523095202.47141
   .lastTimestate 1523095202.47141
   .lastTimetickDay 1523068235.45031
   .lastTimetickHour 1523095202.51415
   .lastTimetickMonth 1523068235.45031
   .lastTimetickUpdated 1523095202.47141
   .lastTimetickWeek 1523068235.45031
   .lastTimetickYear 1523068235.45031
   .lastTimevalue 1523095202.47141
   DEF        HM_4AE8E3:open HM_4AE8E3:closed
   NAME       CN.Automower_Stundenzaehler
   NR         352
   NTFY_ORDER 50-CN.Automower_Stundenzaehler
   STATE      0
   TYPE       HourCounter
   VERSION    1.0.1.2 - 24.12.2014
   .attraggr:
   .attreocr:
     .*
   .attrminint:
     tick.*:0
     .*:3600
   READINGS:
     2018-04-07 12:00:02   countsOverall   2
     2018-04-07 12:00:02   countsPerDay    0
     2018-04-04 18:00:00   openclosed      0
     2018-04-07 12:00:02   pauseTimeEdge   154864
     2018-04-07 12:00:02   pauseTimeIncrement 64462
     2018-04-07 12:00:02   pauseTimeOverall 260208
     2018-04-07 12:00:02   pauseTimePerDay 41365
     2018-04-07 12:00:02   pulseTimeEdge   11819
     2018-04-07 12:00:02   pulseTimeIncrement 11819
     2018-04-07 12:00:02   pulseTimeOverall 24211
     2018-04-07 12:00:02   pulseTimePerDay 0
     2018-04-07 12:00:02   state           0
     2018-04-06 17:35:05   tickChanged     4
     2018-04-07 04:30:35   tickDay         0
     2018-04-07 12:00:02   tickHour        8
     2018-04-07 04:30:35   tickMonth       0
     2018-04-07 12:00:02   tickUpdated     113
     2018-04-07 04:30:35   tickWeek        0
     2018-04-07 04:30:35   tickYear        0
     2018-04-07 12:00:02   value           0
   helper:
     OFF_Regexp HM_4AE8E3:closed
     ON_Regexp  HM_4AE8E3:open
     calledByEvent
     changedTimestamp 2018-04-07 12:00:02
     forceClear
     forceDayChange
     forceHourChange
     forceMonthChange
     forceWeekChange
     forceYearChange
     isFirstRun
     sdRoundHourLast 1523095200
     value      -1
     cmdQueue:
Attributes:
   event-min-interval tick.*:0,.*:3600
   event-on-change-reading .*
Titel: Antw:Benachrichtigung nach x Stunden
Beitrag von: Amenophis86 am 07 April 2018, 18:29:08
Du kannst mit Rest rechnen, wenn der Null ist hast du die 50h erreicht. Rest ist anstelle von ÷ mit % rechnen.
Titel: Antw:Benachrichtigung nach x Stunden
Beitrag von: elmer am 07 April 2018, 19:02:41
Wird nicht funtionieren, der Zähler zählt doch immer weiter hoch.
Titel: Antw:Benachrichtigung nach x Stunden
Beitrag von: stefanpf am 07 April 2018, 20:29:57
Das funktioniert schon.
Modulo ist das Stichwort.

1 % 50=1
2 % 50=2
...
50% 50=0
100% 50=0
Kannst du unter
http://www.mathe24.net/modulo.html?action=do
simulieren
Titel: Antw:Benachrichtigung nach x Stunden
Beitrag von: elmer am 07 April 2018, 20:53:32
Und wie soll das mit Doif gehen, so wie ich das verstehe ist der Wert pulseTimeIncrement in Hourcounter immer fortlaufend. Also genau von diesem Wert muss ich ausgehen für die Gesamt Fahrzeit.

Für jede Stunde die der Mäher in Bewegung ist erhöht sich dieser Wert um eine Stunde. Ich brauche also ein Doif oder notify das mir meldet wenn der Wert 50 Stunden höher ist, wenn wieder 50 Stunden mehr drauf sind soll es die nächste Meldung geben, und immer so weiter.
Titel: Antw:Benachrichtigung nach x Stunden
Beitrag von: stefanpf am 07 April 2018, 21:28:33
Habe noch nie mit einem hourcounter gearbeitet, aber hier mal mit einem dummy simuliert:


Internals:
   CFGFN     
   NAME       maeh
   TYPE       dummy
   
   READINGS:
     2018-04-07 21:21:04   hourcounter     150
Attributes:
   room       000



Internals:
   CFGFN     
   DEF        (  [maeh:hourcounter] % 50  == 0 ) ( set s_ku_Licht on)
   MODEL      FHEM
   NAME       di_maeh
   TYPE       DOIF

Attributes:
   do         always
   room       000




Mittels SetReading kann man die Funktion überprüfen

SetReading maeh  hourcounter 50

Titel: Antw:Benachrichtigung nach x Stunden
Beitrag von: elmer am 07 April 2018, 22:31:16
Würde das so passen

( [CN.Automower_Stundenzaehler:pulseTimeIncrement] % 50 == 0 ) ( set Pushover msg title=Automower priority=2 retry=180 expire=900 sound=siren 🔪 Messer wechseln)
Titel: Antw:Benachrichtigung nach x Stunden
Beitrag von: Amenophis86 am 07 April 2018, 23:00:59
Gut möglich, dass es so klappt. Einfach probieren und zB mit setreading oder trigger testen.
Titel: Antw:Benachrichtigung nach x Stunden
Beitrag von: elmer am 08 April 2018, 00:30:42
Im Log habe ich eine Fehlermeldung.

eval: Automower_Messerwechsel: warning in condition c01
Titel: Antw:Benachrichtigung nach x Stunden
Beitrag von: Amenophis86 am 08 April 2018, 07:14:21
Wie so oft hilft ein List des Device bzw der Beteiligten Device. Bis dahin kann ich dir sagen, dass ich Bedingung 1 ein Fehler ist :)
Titel: Antw:Benachrichtigung nach x Stunden
Beitrag von: elmer am 08 April 2018, 10:53:06
Internals:
   .lastTimeappCountsPerHour 1523174400.65939
   .lastTimeappCountsPerHourTemp 1523174400.65939
   .lastTimeappOpHoursPerDayTemp 1523174400.646
   .lastTimeappUtilizationTemp 1523174400.646
   .lastTimeappUtilizationTempOld 1523174400.646
   .lastTimecountsOverall 1523174400.57122
   .lastTimecountsPerDay 1523174400.57122
   .lastTimepauseTimeEdge 1523174400.57122
   .lastTimepauseTimeIncrement 1523174400.57122
   .lastTimepauseTimeOverall 1523174400.57122
   .lastTimepauseTimePerDay 1523174400.57122
   .lastTimepulseTimeEdge 1523174400.57122
   .lastTimepulseTimeIncrement 1523174400.57122
   .lastTimepulseTimeOverall 1523174400.57122
   .lastTimepulseTimePerDay 1523174400.57122
   .lastTimestate 1523174400.57122
   .lastTimetickDay 1523154634.00563
   .lastTimetickHour 1523174400.62227
   .lastTimetickMonth 1523154634.00563
   .lastTimetickUpdated 1523174400.57122
   .lastTimetickWeek 1523154634.00563
   .lastTimetickYear 1523154634.00563
   .lastTimevalue 1523174400.57122
   DEF        HM_4AE8E3:open HM_4AE8E3:closed
   NAME       CN.Automower_Stundenzaehler
   NR         352
   NTFY_ORDER 50-CN.Automower_Stundenzaehler
   STATE      0
   TYPE       HourCounter
   VERSION    1.0.1.2 - 24.12.2014
   .attraggr:
   .attreocr:
     .*
   .attrminint:
     tick.*:0
     .*:3600
   READINGS:
     2018-04-08 00:00:01   appCountsPerDay 0
     2018-04-08 10:00:00   appCountsPerHour 0
     2018-04-08 10:00:00   appCountsPerHourTemp 0
     2018-04-08 00:00:01   appCountsPerWeek 0
     2018-04-08 00:00:01   appCountsPerWeekTemp 0
     2018-04-08 00:00:01   appOpHoursPerDay 0
     2018-04-08 10:00:00   appOpHoursPerDayTemp 0
     2018-04-08 00:00:01   appOpHoursPerMonthTemp 0
     2018-04-08 00:00:01   appOpHoursPerWeek 0
     2018-04-08 00:00:01   appOpHoursPerWeekTemp 0
     2018-04-08 00:00:01   appOpHoursPerYearTemp 0
     2018-04-08 00:00:01   appUtilization  0
     2018-04-08 10:00:00   appUtilizationTemp 0
     2018-04-08 10:00:00   appUtilizationTempOld 0
     2018-04-08 10:00:00   countsOverall   2
     2018-04-08 10:00:00   countsPerDay    0
     2018-04-04 18:00:00   openclosed      0
     2018-04-08 10:00:00   pauseTimeEdge   154864
     2018-04-08 10:00:00   pauseTimeIncrement 141828
     2018-04-08 10:00:00   pauseTimeOverall 337574
     2018-04-08 10:00:00   pauseTimePerDay 34168
     2018-04-08 10:00:00   pulseTimeEdge   11819
     2018-04-08 10:00:00   pulseTimeIncrement 50
     2018-04-08 10:00:00   pulseTimeOverall 24211
     2018-04-08 10:00:00   pulseTimePerDay 0
     2018-04-08 10:00:00   state           0
     2018-04-06 17:35:05   tickChanged     4
     2018-04-08 04:30:34   tickDay         0
     2018-04-08 10:00:00   tickHour        6
     2018-04-08 04:30:34   tickMonth       0
     2018-04-08 10:00:00   tickUpdated     137
     2018-04-08 04:30:34   tickWeek        0
     2018-04-08 04:30:34   tickYear        0
     2018-04-08 10:00:00   value           0
   helper:
     OFF_Regexp HM_4AE8E3:closed
     ON_Regexp  HM_4AE8E3:open
     calledByEvent
     changedTimestamp 2018-04-08 10:00:00
     forceClear
     forceDayChange
     forceHourChange
     forceMonthChange
     forceWeekChange
     forceYearChange
     isFirstRun
     sdRoundHourLast 1523174400
     value      -1
     cmdQueue:
Attributes:
   event-min-interval tick.*:0,.*:3600
   event-on-change-reading .*


Internals:
   DEF        (  [CN.Automower_Stundenzaehler:pulseTimeIncrement] % 1  == 0 ) ( set Pushover msg title=Automower device=Samsung-S7 priority=2 retry=180 expire=900 sound=siren 🔪 Messer wechseln)
   NAME       Automower_Messerwechsel
   NR         358
   NTFY_ORDER 50-Automower_Messerwechsel
   STATE      disabled
   TYPE       DOIF
   READINGS:
     2018-04-08 00:00:01   Device          CN.Automower_Stundenzaehler
     2018-04-08 00:00:01   cmd             1
     2018-04-08 00:00:01   cmd_event       CN.Automower_Stundenzaehler
     2018-04-08 00:00:01   cmd_nr          1
     2018-04-08 00:00:01   e_CN.Automower_Stundenzaehler_pulseTimeIncrement 50
     2018-04-08 00:01:20   last_cmd        cmd_1
     2018-04-08 00:01:20   mode            disabled
     2018-04-08 00:01:20   state           disabled
   condition:
     0            ReadingValDoIf($hash,'CN.Automower_Stundenzaehler','pulseTimeIncrement') % 1  == 0
   devices:
     0           CN.Automower_Stundenzaehler
     all         CN.Automower_Stundenzaehler
   do:
     0:
       0           set Pushover msg title=Automower device=Samsung-S7 priority=2 retry=180 expire=900 sound=siren 🔪 Messer wechseln
     1:
   helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
   itimer:
   readings:
     0           CN.Automower_Stundenzaehler:pulseTimeIncrement
     all         CN.Automower_Stundenzaehler:pulseTimeIncrement
   uiState:
   uiTable:
Attributes:
   do         always
Titel: Antw:Benachrichtigung nach x Stunden
Beitrag von: stefanpf am 08 April 2018, 11:31:40
Ich erkenne auf den ersten Blick keinen Fehler :(
Aber:
pulseTimeIncrement scheint dasfalsche Reading für dein Vorhaben zu sein.
Der Counter wird jedes mal auf 0 gesetzt wenn Robi aus dem Häuschen fährt.

PulseTimeOverall scheint fortlaufend die Betriebssekunden zu zählen.
Da das Reading nicht jede Sekunde aktualisiert wird, kannst du hier nicht mit Div MOD arbeiten, da die Chance, dass das Reading genau in der passenden Sekunde eintrifft gegen 0 gehen dürfte.

Grübel.....
Titel: Antw:Benachrichtigung nach x Stunden
Beitrag von: elmer am 08 April 2018, 11:46:45
Sagte ich doch das alles fortlaufend ist, Pause Time zählt immer hoch wenn der Möher steht und Pulse Time wenn er fährt.

Kann ich das Value Reading dafür missbrauchen, der Wert steht immer auf 0, wenn er fährt auf 1.

Ist es möglich sobald der Wert auf 1 geht das von den 50 Stunden rückwärts gezählt wird, wenn er wieder auf 0 geht sollte das ganze pausieren und bei der nächsten 1 wieder wieder abziehen bis ich eine Meldung erhalte. Danach sollte er einfach wieder bei 50 anfangen und wieder bis 0 runterzählen.
Titel: Antw:Benachrichtigung nach x Stunden
Beitrag von: stefanpf am 08 April 2018, 12:43:23
Das alles fortlaufend ist, steht nicht zur Debatte....
Sicher gibt es verschiedene Ansätze zur Lösung, aber nur weil jemand einen Stein in den Weg legt, muss man nicht jedesmal die Richtung wechseln.
Überleg doch lieber mit, wie du den Stein wegbekommst.

Bauen wir uns doch erst mal ein Helferchen.....

attr CN.Automower_Stundenzaehler userReadings Betriebsstunden:pulseTimeOverall.* {int (ReadingsVal("CN.Automower_Stundenzaehler","pulseTimeOverall",0)/3600)}
attr CN.Automower_Stundenzaehler Interval 1


Nun haben wir ein Reading mit ganzzahligem Inhalt, dass auch nur jede Stunde den Inhalt wechselt - sprich das vermeintlich unregelmässige Aktualisieren des pulseTimeOverall Readings ist kompensiert.


define di_Tester ([CN.Automower_Stundenzaehler:Betriebsstunden]>0 and [CN.Automower_Stundenzaehler:Betriebsstunden] % 50== 0 ) ( set pushmsg message Messer wechseln)


Das kann man sicher auch im doif zusammenfassen, aber ich finde das so etwas augenfreundlicher :)

Zum Testen kann man
die /3600 ja erst einmal durch /120 (jede Real-Minute entspricht einer halben fiktiven Stunde)
und % 50 durch % 2 (jede zweite fiktive Stunde wird eine Nachricht geschickt)
ersetzen, damit die Zeit etwas schneller umgeht.

Das do always am doif muss wieder weg, da sonst das doif vermutlich innerhalb der 50igsten Betriebsstunde bei jedem Update des Readings anschlägt.

Bitte nicht mit Modulo 1 testen, dass doif ruft dann nicht das cmd_2 auf und die  Nachricht für den nächsten Wechsel wird nicht mehr geschickt).
Mit meiner Terrassentür funktioniert das hier wie Bolle (da soll ich jetzt alle 4 Minuten das Messer wechseln)


Nun weiß ich nicht, wann daß Reading pulseTimeOverall überläuft und wie es sich dann verhält (könnte auf 0 springen oder aber auch irgend einen Minuswert annehmen,...).
Wenn dich die Gesamtbetriebsstunden nicht interessieren, dann kannst du den Counter auch bei Nachrichtensendung auf 0 setzen:
([CN.Automower_Stundenzaehler:Betriebsstunden]>0  and [CN.Automower_Stundenzaehler:Betriebsstunden] % 50== 0 )
( set pushmsg message Messer wechseln, set CN.Automower_Stundenzaehler pulseTimeOverall 0)


Und weitergespielt: sind die Gesamtbetriebsstunden egal, geht es auch noch einfacher
define Tester2 doif ([CN.Automower_Stundenzaehler:pulseTimeOverall]>=(50*3600) ) ( set pushmsg message Messer wechseln, set CN.Automower_Stundenzaehler pulseTimeOverall 0)

Btw: das Reading value spiegelt doch den Status deines FensterKontaktes. Da kannst du zwar einen zweiten Hourcounter mit ansteuern, bringt dann aber nix ;)
Titel: Antw:Benachrichtigung nach x Stunden
Beitrag von: Pfriemler am 08 April 2018, 13:53:37
Zitat von: stefanpf am 08 April 2018, 12:43:23
Das do always am doif muss wieder weg, da sonst das doif vermutlich innerhalb der 50igsten Betriebsstunde bei jedem Update des Readings anschlägt.
Mit cmdPause 3600 könnte man das mehrfache Auslösen des Ausführungsteils in solchem Fall prima verhindern.
Titel: Antw:Benachrichtigung nach x Stunden
Beitrag von: stefanpf am 08 April 2018, 14:34:25
Zitat von: Pfriemler am 08 April 2018, 13:53:37
Mit cmdPause 3600 könnte man das mehrfache Auslösen des Ausführungsteils in solchem Fall prima verhindern.
Hmm, das is dann aber doch eher SymptomBekämpfung oder?
Wenn Robi dann durch Zufall zur 50igsten Betriebsstunde ins Häuschen fährt und nach 2-3h Laden weiter macht befindet er sich ja trotzdem noch 60 min in der 50igsten Betriebsstunde und hat abhängig vom Interval noch x Gelegenheiten eine Nachricht zu senden
Titel: Antw:Benachrichtigung nach x Stunden
Beitrag von: elmer am 08 April 2018, 16:02:25
Ok eben getestet, ich bekomme auch alle 4 Minuten eine Meldung, wenn der pulseTimeOverall Wert jetzt immer weiter läuft sollte es so gehen ;D
Titel: Antw:Benachrichtigung nach x Stunden
Beitrag von: Pfriemler am 08 April 2018, 17:47:11
Stimmt - so betrachtet ist das nicht ganz pfiffig, wenngleich die Meldung dann trotzdem max 1x pro Stunde kommt.