Seite 1 von 1

Uhrzeit für Regeln einstellen

Verfasst: 13. Jan 2024 13:27
von Thomasv
Hallo alle miteinander,
Ich bin zwar schon langer Oh User, aber eher "Anfänger" :-). Habe jetzt nach langem gezwungenermaßen von 2.4 auf 4.1 gewechselt, und das kompletten Neuaufbau betrachtet - und in dem Zuge einige Sahcne optimiert. Eines was ich möchte, ist in der GUI die Möglichkeit zu haben, eine Uhruezit für die "Weckerrule" am nächsten Tag zu setzen, da die Aufstehzeiten jetzt mit Homoffice ja doch ziemlich variieren. Da stoße ich aber an mein Limit, und trotz googlen, Videos etc. bekomme ich es einfach nicht hin.
Habe es mit dem "time picker" Plugin aus der Openhab Community veruscht, da bekomme ich aber keine Werte rein. Dann ahbe ich ein anderes Widget - damit bekomme ich zwar die Möglichkeit, eine Uhrzeit einzustellen, ich weiß aber nicht wo der die hinspeichert.
Also ganz offen, ich bin ratlos. Habe aich schon in verschiedenen anderen Plattformen versucht Hilfe zu finden, aber irgendwie scheint das nicht so trivial zu sein.
Also, ich nehme gerne jeden Support und Hinweis!
Danke, lg

Re: Uhrzeit für Regeln einstellen

Verfasst: 13. Jan 2024 14:17
von udo1toni
Herzlich willkommen im openHAB-Forum!

Was meinst Du mit Time Picker? Es gäbe für die komfortable Eingabe von Datum und Zeit das DateTime Standalone Widget (direkt im Store verfügbar). Du suchst dieses Widget über den Store und fügst es über Add (bzw. Install) hinzu.
Weiterhin brauchst Du ein DateTime Item, welches Du über dieses Widget steuerst.

Das Widget steht in der Liste der Cells zur Verfügung, das heißt, Du wählst in Deiner Main UI Page, in der Du das Widget einfügen willst "Add Cell" aus und bekommst bei einem Klick auf die leere Cell das Widget unter Personal Widgets in der Liste angeboten.
Das Widget kennt nur Zwei Parameter, das Label und das Item. Sieht als Code so aus:

Code: Alles auswählen

config:
  label: Overview
blocks:
  - component: oh-block
    config: {}
    slots:
      default:
        - component: oh-grid-cells
          config: {}
          slots:
            default:
              - component: widget:rlk_datetime_standalone
                config:
                  item: myDate
                  label: Weckzeit
Eine Rule, die auf dieses Item triggern soll, ist natürlich auch noch vonnöten:

Code: Alles auswählen

rule "Mein Wecker"
when
    Time is MeinItem //timeOnly
then
    Alarm.sendCommand(ON)
end
Die Rule kannst Du genauso auch über die UI erstellen, ob als Code oder mit Blockly, ganz nach Belieben.
Das Schlüsselwort timeOnly sorgt wahlweise dafür, dass die Rule das Datum (welches immer im Item Status mitgeliefert wird) nicht berücksichtigt.
In dem Moment, in dem die eingestellte Zeit erreicht wird, wird die Rule ausgeführt.

Vielleicht gibt es auch noch ein anderes Widget, welches aber nicht über den Marketplace zur Verfügung steht, da bräuchte ic hdann einen Link, wo dieses herunterzuladen ist ;)

Re: Uhrzeit für Regeln einstellen

Verfasst: 13. Jan 2024 14:33
von Harka
Moin,
der "Trick" beim time picker ist, dass das verknüpfte Item vom Typ DateTime nicht leer sein darf. Sobald Du einen Wert rein schreibst erweckt Du es zum Leben. Das geht sehr schnell über Scenes (Wert 10000) senden und ohne die Scene zu speichern wieder raus.
Um dieses Item als Auslöser für die Rule zu nutzen gibt es den timer.DateTimeTrigger (in der UI Add_Trigger/Show_all anklicken)

Re: Uhrzeit für Regeln einstellen

Verfasst: 13. Jan 2024 17:27
von peter-pan
...ich mach's wie Udo, benutze aber die Standard-Wigets.

a) oh-input-card
oh-input-card.jpg
Yaml-Code:

Code: Alles auswählen

component: oh-input-card
config:
  clearButton: true
  inputmode: text
  item: testTime1
  name: Eingabe
  sendButton: true
  showTime: true
  title: Zeiteingabe für den Wecker
  type: datetime-local
  useDisplayState: false
  validate: true
  validate-on-blur: true
b) oh-input-item (innerhalb einer oh-list-card)
oh-input-item.jpg
Yaml-Code

Code: Alles auswählen

component: oh-input-item
config:
  after: =items.testTime1.displayState
  clearButton: true
  icon: f7:alarm
  iconColor: blue
  inputmode: numeric
  item: testTime1
  name: Eingabe
  outline: false
  placeholder: =items.testTime1.displayState
  required: true
  sendButton: true
  showTime: true
  title: Zeiteingabe für Trigger
  type: datetime-local
  useDisplayState: false
  validate: true
  validate-on-blur: true
DateTime-Item:

Code: Alles auswählen

DateTime testTime1 "Zeit-Item für Tests, mit pattern"  { stateDescription="pattern"  [pattern="%1$tH:%1$tM"] } // Text-Rule 
Regel:

Code: Alles auswählen

// Start über OH-Widget (z.B.: oh-input-item oder oh-input-card)
rule "ItemTrigger-Rule"

  when
    Time is testTime1 timeOnly
  then
    // dein Code
    logInfo("testTime1","testTime1 DSL-Text ist {}",testTime1)

end
Das Datum kann hier bei der Eingabe vernachlässigt werden, da der Trigger nur auf die Zeit reagiert.