Hallo zusammen,
ich habe ein bestehendes DOIF welches ich erweitern möchte aber nicht auf die Lösung komme.
Vielleicht könnt ihr mir helfen?
Das bestehende DOIF schaltet meine Ladegeräte Nachts zu einer bestimmten Uhrzeit ein und am Morgen wieder aus wenn es draussen Hell wird. Das funktioniert soweit auch gut.
([du_Automatik_Master] eq "an" and [[du_HandysLaden_WE_an]|7]) (set bzSteckdose02 on)
DOELSEIF
([du_Automatik_Master] eq "an" and [du_Tageslicht] eq "hell") (set bzSteckdose02 off)
Nun möchte ich das DOIF um die Funktion erweitern:
Wenn das doif die Ladegeräte eingeschalten hat (doif State = cmd_1) und in dieser Zeit die Taste auf der Fernbedienung manuell gedrückt wurde, soll sich das doif zurücksetzen und die Ladegeräte eingeschalten lassen auch wenn es am Morgen dann hell wird und laut doif eigentlich ausgeschalten werden sollen.
Hintergrund: Wenn man Geräte erst früh Morgens an hängt, sollen Sie auch voll laden und nicht dann z.B. nach 10 Minuten wieder ausgeschalten werden nur weil es hell wird.
Hier noch das List der Fernbedienung.
Man müsste das Reading "hmstate" pressed mit Datum & Uhrzeit irgendwie abfragen und einbinden
Internals:
DEF 000B1F298BBAF9:2
FUUID 6390ab17-f33f-c1dd-a7f0-cd14595bafe8cfe5
IODev CCU_3
NAME HM_FB02Taste02
NR 331
STATE pressed
TYPE HMCCUCHN
ccuaddr 000B1F298BBAF9:2
ccudevstate active
ccuif HmIP-RF
ccuname HmIP-RC8 000B1F298BBAF9:2
ccurolestate KEY_TRANSCEIVER
ccusubtype RC8
ccutype HmIP-RC8
eventCount 86
firmware 1.0.19
readonly no
receiver bzSteckdose01,bzSteckdose02,flSteckdose03
READINGS:
2024-11-08 21:28:25 IODev CCU_3
2024-11-03 15:03:49 PRESS_SHORT pressed
2024-11-10 13:00:31 activity alive
2024-11-10 13:00:31 battery ok
2024-11-10 13:00:31 devstate ok
2024-11-10 13:00:31 hmstate pressed
2024-11-03 15:03:49 pressed pressed
2024-11-10 13:00:31 rssidevice -59
2024-11-08 21:29:06 rssipeer N/A
2024-11-03 15:03:49 state pressed
2024-11-10 12:05:29 voltage 2.8
hmccu:
channels 1
detect 0
devspec 000B1F298BBAF9:2
nodefaults 1
role 2:KEY_TRANSCEIVER
setDefaults 0
cmdlist:
get
set
control:
dp:
0.CONFIG_PENDING:
VALUES:
NVAL 0
SVAL false
VAL 0
0.DUTY_CYCLE:
VALUES:
NVAL 0
SVAL false
VAL 0
0.INSTALL_TEST:
VALUES:
NVAL 1
SVAL true
VAL 1
0.LOW_BAT:
VALUES:
NVAL 0
SVAL ok
VAL 0
0.OPERATING_VOLTAGE:
VALUES:
NVAL 2.8
ONVAL 2.800000
OVAL 2.800000
SVAL 2.8
VAL 2.8
0.OPERATING_VOLTAGE_STATUS:
VALUES:
NVAL 0
SVAL NORMAL
VAL 0
0.RSSI_DEVICE:
VALUES:
NVAL -59
ONVAL -64
OSVAL -64
OVAL -64
SVAL -59
VAL -59
0.RSSI_PEER:
VALUES:
NVAL N/A
SVAL N/A
VAL 0
0.UNREACH:
VALUES:
NVAL 0
SVAL alive
VAL 0
0.UPDATE_PENDING:
VALUES:
NVAL 0
SVAL false
VAL 0
roleChannels:
KEY_TRANSCEIVER 2
roleCmds:
get:
set:
state:
chn 2
dpt PRESS_SHORT
Attributes:
alias Fernbedienung 02 - Taste 2
ccuflags logCommand
devStateIcon pressed:ios-off
event-on-update-reading .*
group Büro
room Homematic
Danke für eure Hilfe.
Hoffe das ist etwas Verständlich.
Viele Grüsse,
Fabian
Keine Lösung, aber ein (vielleicht) besserer Ansatz:
Wenn es nicht unbedingt Sonnenaufgang sein muss und die Steckdose Leistungsmessung hat, dann prüfe doch lieber auf Verbrauch.Wenn eine bestimmter Verbrauch unterschritten wird, sind alle Handys voll. Dann kannst du die Steckdose abschalten. Das würde auch die Akkus schonen. Wenn die Steckdose eingeschaltet wird und kein Handy angesteckt ist, sinkt der Verbrauch ja auch unter den Mindestwert und dann kann dein DOIF auch abschalten.
Was steckt hier dahinter?
[du_Automatik_Master] und [du_HandysLaden_WE_an]?
Was schaltet die Fernbedienung, wie wird das wieder zurückgesetzt?
Zitat von: rabehd am 10 November 2024, 19:19:31Was steckt hier dahinter?
[du_Automatik_Master] und [du_HandysLaden_WE_an]?
Was schaltet die Fernbedienung, wie wird das wieder zurückgesetzt?
Hi Rabehd,
das "du_Automatik_Master" ist ein Dummy und kann damit meine Automatisierungen Ein / Ausschalten.
das "du_HandysLaden_WE_an" ist ebenfalls ein Dummy. Damit stelle ich die Uhrzeit ein zum starten.
Eine Steckdose mit Leistungsmessung habe ich nicht. Daher fällt der Grundsatz von Invers weg.
Hast du sonst einen Ansatz für mich?
Den Sinn der ganzen Sache verstehe ich nicht wirklich. Man sollte vielleicht auf der grünen Wiese anfangen, also neu.
"du_Automatik_Master" gilt scheinbar global und schaltet alle Deine Automatisierungen ein/aus. Zumindest die DOIFs kann man bei Änderung jeweils enable/disable schalten. Damit wäre schon mal eine Abfrage raus. Außerdem würde ich nicht darauf triggern, sondern das nur als Abfrage nehmen.
"du_Tageslicht" ist wohl auch ein Dummy. Keine Ahnung wozu, ich würde da auf Sonnenaufgang triggern.
Du willst Ladegeräte zu einer bestimmten Uhrzeit einschalten. Diese Uhrzeit ist variabel. Wozu eigentlich?
Warum sollen die Ladegeräte bei Beginn Tageslicht abgeschaltet werden?
"Wenn man Geräte erst früh Morgens an hängt, sollen Sie auch voll laden und nicht dann z.B. nach 10 Minuten wieder ausgeschalten werden". Dafür die Automatik abzuschalten ist kein Automatismus.
Setze mit der Fernbedienung ein Reading dessen Wert das Abschalten verhindert. Die Frage wäre dann wie lange? Es macht dann wohl mehr Sinn mit der Fernbedienung das Laden für eine bestimmte Zeit einzuschalten.
Also cmd_2 nur wenn Reading Fernbedienung nicht auf "ja".
Wenn Fernbedienung auf "ja", dann cmd_3 mit Einschalten, Abschalten nach X Minuten und danach Setzen Fernbedienung auf "nein".
Ich würde auch weniger Dummys verwenden und lieber Userreadings.
Könntest du mir mal ein Beispiel machen wie das doif aussehen müsste?
Wenn es eine einfachere und bessere Lösung gibt wäre ich auch froh.
Das Ziel ist das die Mobilen Geräte nicht die ganze Nacht an der eingeschaltenen Steckdose hängen
Wenn Du den UseCase beschreibst, dann wäre das ein Anfang.
UseCase
- Wenn Automatik Dummy eingeschalten ist und eine einstellbare Uhrzeit erreicht ist soll die Steckdose für eine weitere Einstellbare Zeit (in Stunden) eingeschalten werden
- ist die Zeit abgelaufen soll die Steckdose ausgeschalten werden
- Wird in der Zwischenzeit der Taster auf der Fernbedienung geschalten, so soll sich das DOIF deaktivieren
ODER
- Wird in der Zwischenzeit der Taster auf der Fernbedienung geschalten, so soll die eingestellte Zeit von vorne beginnen
Das ist eigentlich kein UseCase, sondern eine Programmieranweisung.
Lass erstmal Dummy, DOIF... weg. Wenn das formuliert wird, dann wird es ein UseCase. Wenn Du jetzt schon konkret wirst, verbaust Du Lösungen.
Ich denke, das ist aber Selbstvera.... Zumindest ohne Berücksichtigung des Ladestandes des Gerätes.
Zitat von: Fabiango am 10 November 2024, 13:02:48am Morgen wieder aus wenn es draussen Hell wird
Zitat von: Fabiango am 14 November 2024, 17:45:58ist die Zeit abgelaufen soll die Steckdose ausgeschalten werden
Hast Du Deine Meinung geändert?
Zitat von: rabehd am 14 November 2024, 22:18:13Das ist eigentlich kein UseCase, sondern eine Programmieranweisung.
Lass erstmal Dummy, DOIF... weg. Wenn das formuliert wird, dann wird es ein UseCase. Wenn Du jetzt schon konkret wirst, verbaust Du Lösungen.
Ich denke, das ist aber Selbstvera.... Zumindest ohne Berücksichtigung des Ladestandes des Gerätes.
Zitat von: Fabiango am 10 November 2024, 13:02:48am Morgen wieder aus wenn es draussen Hell wird
Zitat von: Fabiango am 14 November 2024, 17:45:58ist die Zeit abgelaufen soll die Steckdose ausgeschalten werden
Hast Du Deine Meinung geändert?
Dann verstehe ich nicht ganz was ein UseCase ist, aber vielleicht meinst du so?
Die Meinung habe ich geändert, aber Grundsätzlich wäre beides für mich ok.
> Wenn Automatik Schalter eingeschalten ist und eine Uhrzeit (Einstellbar in hh:mm) erreicht ist soll die Steckdose für eine gewisse Zeit (Einstellbar in Stunden) eingeschalten werden und wenn diese dann abgelaufen ist soll die Steckdose ausgeschalten werden.
> Wird in der Zwischenzeit der Taster "EIN" auf der Fernbedienung gedrückt, so soll sich die Laufzeit zurücksetzen und erneut ablaufen und am Ende wieder die Steckdose ausschalten.
> Wird in der Zwischenzeit der Taster "AUS" auf der Fernbedienung gedrückt, so soll die Steckdose sich direkt ausschalten und die Funktion zurücksetzen.
Hat jemand einen Ansatz für mich zu meinem UseCase?
Hab nun eine Lösung für mich gefunden.
Brauche nun nur noch eure Hilfe das bei einem Homematic IP Taster von der Fernbedienung) nur bei einer positiven Flanke geschalten wird, da der State immer auf "pressed" bleibt.
Hier das Geräte List:
Internals:
DEF 000B1F298BBAF9:3
FUUID 6390ab18-f33f-c1dd-39bc-3a4f130986ea3fd2
IODev CCU_3
NAME HM_FB02Taste03
NR 342
STATE pressed
TYPE HMCCUCHN
ccuaddr 000B1F298BBAF9:3
ccudevstate active
ccuif HmIP-RF
ccuname HmIP-RC8 000B1F298BBAF9:3
ccurolestate KEY_TRANSCEIVER
ccusubtype RC8
ccutype HmIP-RC8
eventCount 9
firmware 1.0.19
readonly no
receiver bzSteckdose01,bzSteckdose02,flSteckdose03
READINGS:
2024-12-01 17:57:35 IODev CCU_3
2024-02-10 12:39:42 PRESS_LONG pressed
2024-02-10 12:39:42 PRESS_LONG_RELEASE 1
2024-02-10 12:39:42 PRESS_LONG_START 1
2024-12-01 18:48:29 PRESS_SHORT pressed
2024-12-01 19:00:03 activity alive
2024-12-01 19:00:03 battery ok
2024-12-01 19:00:03 devstate ok
2024-12-01 19:00:03 hmstate pressed
2024-12-01 18:48:29 pressed pressed
2024-12-01 19:00:03 rssidevice -56
2024-12-01 17:58:14 rssipeer N/A
2024-12-01 18:48:29 state pressed
2024-12-01 19:00:03 voltage 2.8
hmccu:
channels 1
detect 0
devspec 000B1F298BBAF9:3
nodefaults 1
role 3:KEY_TRANSCEIVER
setDefaults 0
cmdlist:
get
set
control:
dp:
0.CONFIG_PENDING:
VALUES:
NVAL 0
SVAL false
VAL 0
0.DUTY_CYCLE:
VALUES:
NVAL 0
SVAL false
VAL 0
0.INSTALL_TEST:
VALUES:
NVAL 1
SVAL true
VAL 1
0.LOW_BAT:
VALUES:
NVAL 0
SVAL ok
VAL 0
0.OPERATING_VOLTAGE:
VALUES:
NVAL 2.8
ONVAL 2.800000
OVAL 2.800000
SVAL 2.8
VAL 2.8
0.OPERATING_VOLTAGE_STATUS:
VALUES:
NVAL 0
SVAL NORMAL
VAL 0
0.RSSI_DEVICE:
VALUES:
NVAL -56
ONVAL -61
OSVAL -61
OVAL -61
SVAL -56
VAL -56
0.RSSI_PEER:
VALUES:
NVAL N/A
SVAL N/A
VAL 0
0.UNREACH:
VALUES:
NVAL 0
SVAL alive
VAL 0
0.UPDATE_PENDING:
VALUES:
NVAL 0
SVAL false
VAL 0
3.PRESS_SHORT:
VALUES:
NVAL 1
SVAL pressed
VAL 1
roleChannels:
KEY_TRANSCEIVER 3
roleCmds:
get:
set:
state:
chn 3
dpt PRESS_SHORT
Attributes:
alias Fernbedienung 02 - Taste 3
ccuflags logCommand
devStateIcon pressed:ios-off
event-on-change-reading state
event-on-update-reading .*
group Büro
room Homematic
Kann mir jemand das beantworten wie es auszuwerten ist und in einem DOIF einzufühgen ist?
Besten Dank.
Zitat von: Fabiango am 01 Dezember 2024, 19:05:03Kann mir jemand das beantworten wie es auszuwerten ist und in einem DOIF einzufühgen ist?
Eventmonitor öffnen (Filter setzen), drücken, warten was an Events angezeigt wird und dann notify/DOIF/... anlegen lassen...
https://wiki.fhem.de/wiki/Event_monitor
Zitat von: Fabiango am 01 Dezember 2024, 19:05:03event-on-change-reading state
event-on-update-reading .*
Würde ich erst mal löschen...
Und irgendwie ist das doch "sinnfrei"?
Events für state "einschränken" und dann FÜR ALLES wieder "freigeben"?
Gruß, Joachim
P.S.: was heißt Flanke? Es kommt ein Event und gut...
Hallo Joachim,
habe nun beide Attribute gelöscht und bekomme nun folgende Einträge im Eventmonitor
2024-12-01 21:42:06 HMCCUCHN HM_FB02Taste03 activity: alive
2024-12-01 21:42:06 HMCCUCHN HM FB02Taste03 rssidevice: -49
2024-12-01 21:42:06 HMCCUCHN HM_FB02Taste03 battery: ok
2024-12-01 21:42:06 HMCCUCHN HM_FB02Taste03 devstate: ok
2024-12-01 21:42:06 HMCCUCHN HM_FB02Taste03 hmstate: pressed
2024-12-01 21:42:06 HMCCUCHN HM_FB02Taste03 pressed
2024-12-01 21:42:06 HMCCUCHN HM_FB02Taste03 PRESS_SHORT: pressed
2024-12-01 21:42:06 HMCCUCHN HM_FB02Taste03 pressed: pressed
2024-12-01 21:42:06 HMCCUCHN HM_FB02Taste03 devstate: ok
2024-12-01 21:42:06 HMCCUCHN HM_FB02Taste03 hmstate: pressed
Welchen Eintrag soll ich für das DOIF verwenden?
Mit positiver Flanke meine ich das er nicht nur den Status zum schalten nimmt, sondern nur wenn die Taste wieder gedrückt wird (in FHEM Event genannt?)
Meiner Meinung nach wäre event-on-change-reading das richtige, aber das Problem ist das sich das Reading an sich immer gleich bleibt und nur das Datum /. Uhrzeit dahinter ändert
Ich würde mehrfach mit Abstand drücken und dann einen der Events nehmen, der pro drücken nur 1x kommt...
Wenn du dann davon ein notify/DOIF erzeugen lässt, dann wird es pro Druck ausgelöst (was du verm. mit Fkanke meinst)...
Setze doch einfach event-on-change und dann schau noch mal im Eventmonitor, wenn du dann mehrfach drückst...
Lesen was was macht kann auch helfen ;)
Datum/Uhrzeit des Readings und Event (Eventmonitor) sind beim Einsatz der genannten Attribute oft unterschiedlich...
Gruß, Joachim
Zitat von: Fabiango am 01 Dezember 2024, 21:47:02Welchen Eintrag soll ich für das DOIF verwenden?
Meine Homematic-Fernbedienungen liegen nach dem Umzug seit 2 Jahren in der Kiste. Ich muss also aus der Erinnerung reden und hoffe IP ist genauso.
Bei Homematic gibt es PRESS_SHORT und PRESS_LONG, diese Events würde ich nehmen. Also, wie Joachim schreibt, mehrfach drücken, sich die Meldungen im Event-Monitor ansehen und überlegen worauf man reagieren will.
fhem basiert auf Events (= Ereignissen). Entsprechend solltest Du Dir mal die Erklärung für event-on-[xx]-reading ansehen. "Schaltflanken" kennen wir so nicht.
Danke für eure Hilfe.
Konnte nun dank eurer Hilfe (Stichwort Event Monitor und durch die Zeile markieren die entsprechende Funktion auslsesen) >> [HM_FB02Taste04:"^PRESS_SHORT:.pressed$"]
Folgender Code hat mir nun weitergeholfen.
DOELSEIF
([di_Handys_Laden_Mo_Fr] eq "cmd_2" and [HM_FB02Taste04:"^PRESS_SHORT:.pressed$"]) (set bzSteckdose02 on)
Thema gelöst.
Schönen Abend.
Gruss, Fabian