Hauptmenü

AttrVal -> TimeSpec

Begonnen von remo, 10 Februar 2021, 14:00:49

Vorheriges Thema - Nächstes Thema

remo

Hallo zusammen,

ich bin gerade dabei meine FHEM-Configs zu "optimieren"...

Ich hätte da mal eine Frage:

ist es möglich ein

{AttrVal('dummy_TimeCons','heute_daemmerung',undef)}

in ein TimeSpec zu parsen, sodass ich ein at ausführen lassen kann?


Ungefähr so hier meine ich das:


define at_Licht_Laterne_EIN at *{AttrVal('dummy_TimeCons','heute_daemmerung',undef)} { ...


Dankeschön.

Otto123

Hi,

klar geht das https://fhem.de/commandref_DE.html#at
Aber ich hoffe nicht wirklich über ein Attribute?

Wäre doch ganz einfach wie in einem der Beispiele?
Zitat# Lampe von Sonnenuntergang bis 23:00 Uhr einschalten
    define a9 at +*{sunset_rel()} set lamp on
    define a10 at *23:00:00 set lamp off

    # Elegantere Version, ebenfalls von Sonnenuntergang bis 23:00 Uhr
    define a11 at +*{sunset_rel()} set lamp on-till 23:00

    # Nur am Wochenende ausführen
    define a12 at +*{sunset_rel()} { fhem("set lamp on-till 23:00") if($we) }

    # Schalte lamp1 und lamp2 ein von 7:00 bis 10 Minuten nach Sonnenaufgang
    define a13 at *07:00 set lamp1,lamp2 on-till {sunrise(+600)}

    # Schalte lamp jeden Tag 2 Minuten nach Sonnenaufgang aus
    define a14 at *{sunrise(+120)} set lamp on

    # Schalte lamp1 zum Sonnenuntergang ein, aber nicht vor 18:00 und nicht nach 21:00
    define a15 at *{sunset(0,"18:00","21:00")} set lamp1 on

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

betateilchen

Zitat von: remo am 10 Februar 2021, 14:00:49
ich bin gerade dabei meine FHEM-Configs zu "optimieren"...

oje
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

remo

Nix Oje.
Mache ich seit Anfang an so. Ohne Probleme.
Coden ist mir auch nicht gänzlich fremd.
Ich stolpere nur ab und an mal über perl'sche Eigenarten.

Trotzdem Dankeschön für deine ,,Hilfestellung".




Liebe Grüße

remo

#4
@Otto

Der Hintergrund ist, dass ich mir Konstanten definiere mit Zeitangaben/Uhrzeiten.
Ich habe relativ viele at-Defines (Licht, Rollläden,...).

Ich möchte die at möglichst konsistent definieren, heißt, statt für jeden at eine Uhrzeit anzugeben, möchte ich den Wert aus meinem Konstanten-Dummy auslesen.

Somit brauche ich nur noch an einer Stelle die Uhrzeit anpassen und alle ats haben automatisch den neuen Wert.

Das Auslesen mit AttrVal klappt nur ist es kein TimeSpec was dort ausgelesen wird. Daher meine Frage, ob man das parsen kann.

betateilchens ,,oje" hilft mir da leider nicht viel...

betateilchen

Zitat von: remo am 10 Februar 2021, 15:07:13
Somit brauche ich nur noch an einer Stelle die Uhrzeit anpassen und alle ats haben automatisch den neuen Wert.

Sowas macht man aber nicht über ein Attribut, sondern - wenn überhaupt - über ein Reading.

Zitat von: remo am 10 Februar 2021, 14:49:54
Coden ist mir auch nicht gänzlich fremd.

Der Unterschied zwischen Attribut und Reading ist an dieser Stelle keine "perl'sche Eigenart".
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

MadMax-FHEM

#6
Zitat von: remo am 10 Februar 2021, 15:07:13
Somit brauche ich nur noch an einer Stelle die Uhrzeit anpassen und alle ats haben automatisch den neuen Wert.

Wie sollen die at den neuen Wert bekommen, nur weil/wenn du das Attribut änderst?

Davon kriegt doch eine bereits erstellte at-DEF nichts mit.

Deine AttrVal-Abfrage wird ja nur beim define von at ausgeführt.
Dann damit das at erstellt und: das war's...

(sofern ich nicht [komplett] daneben liege)

Gibt's da nicht ein Modul für? ;)

WeekdayTimer?
(also nutze ich nicht, habe nur davon gehört)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

remo

Dankeschön betateilchen.

Bin ja für Anregungen sehr dankbar.
Welche Möglichkeiten hätte ich denn einen dummy mit benutzerdefinierten Readings zu definieren und zu ,,füllen"?


Otto123

#8
Ich verstehe immer noch das Problem nicht  :-[
Warum ist ein Attribute besser als ein Reading?
Warum kann man da keine Zeit rein schreiben?

Ich hatte das doch erst: komplettes Beispiel: https://forum.fhem.de/index.php/topic,118245.msg1127413.html#msg1127413

Allerdings geht es um - Zitat "heute_daemmerung" - da macht es doch keinen Sinn einen festen Wert in einen Dummy zu schreiben?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

betateilchen

@Otto nicht aufregen :)

Es gibt halt immer noch User, die den korrekten Einsatz von FHEM devices unterschiedlichen Types noch nicht verstanden haben.

Zitat von: remo am 10 Februar 2021, 15:24:54
Welche Möglichkeiten hätte ich denn einen dummy mit benutzerdefinierten Readings zu definieren und zu ,,füllen"?

Aber dass jemand nicht weiß, wie man mit Readings umgeht, ist schon sehr bedenklich.
Das steht doch im Kapitel "Einführung zu FHEM" vermutlich schon im Klappentext...

setreading <dummyName> <readingName> <readingWert>

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

remo

Den Unterschied kenne ich sehr wohl.
Ich habe mich an einem Beispiel aus diesem Forum orientiert.

,,Bedenklich" finde ich eher andere Dinge.
Wie zum Beispiel, dass User im Anfänger-Forum runtergemacht werden, für Fragen, die von den Profis leicht zu beantworten sind.

Ich habe hier schon viel Hilfe erhalten und dafür bin ich sehr dankbar.

Aber, dass betateilchen oft erstmal etwas Erniedrigendes zum Besten geben muss bevor ein produktiver Ratschlag kommt, nervt mich.

Auch wenn ich mit Softwareentwicklung vertraut bin, habe ich dennoch ab und an Probleme mit FHEM und der Funktionsweise. Und wohin soll ich mich wenden, wenn nicht ans Forum?!

Gruß

betateilchen

Zitat von: remo am 10 Februar 2021, 16:28:02
Und wohin soll ich mich wenden, wenn nicht ans Forum?!

Vielleicht zwischendurch auch einfach mal vor dem Fragen einen Blick in die Dokumentation werfen?
Oder die Suchfunktion des Forums benutzen?
Dann braucht man nicht zum 3482. Mal die einfachsten Fragen stellen ("wie fülle ich ein reading in einem dummy?"), nur weil Fragen viel bequemer ist.

Offenbar kennen einige User den Unterschied zwischen "Um Hilfe bitten" und "Die Gutmütigkeit anderer Forummitglieder ausnutzen" nicht mehr.
Und das nervt mich.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Otto123

ZitatDas Auslesen mit AttrVal klappt nur ist es kein TimeSpec was dort ausgelesen wird. Daher meine Frage, ob man das parsen kann.
Ist dieses Frage jetzt eigentlich mit meinem Beispiel beantwortet?
Weil: unterm Strich ist es Wurst ob Du AttrVal oder ReadingsVal nimmst, das Ergebnis sollte gleich sein.
Ich habe das Problem: "Es ist kein TimeSPec" - nicht verstanden, allerdings hast Du auch überhaupt keine Infos dazu geliefert.
Nützlich zu meinem Verständnis wäre z.B. ein list dummy_TimeCons gewesen ;) siehe auch hier
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

remo

Zitat von: betateilchen am 10 Februar 2021, 17:44:52
Vielleicht zwischendurch auch einfach mal vor dem Fragen einen Blick in die Dokumentation werfen?
Oder die Suchfunktion des Forums benutzen?
Dann braucht man nicht zum 3482. Mal die einfachsten Fragen stellen ("wie fülle ich ein reading in einem dummy?"), nur weil Fragen viel bequemer ist.

Offenbar kennen einige User den Unterschied zwischen "Um Hilfe bitten" und "Die Gutmütigkeit anderer Forummitglieder ausnutzen" nicht mehr.
Und das nervt mich.

Du hast recht.
Ich entschuldige mich für meine plumpe Reaktion.
Ich habe viele Ansätze gefunden, es schien aber keiner für mich zu passen.
Und auch nach Anpassungsversuchen bin ich nicht zum Ziel gekommen - deshalb meine Frage.
Schwamm drüber. Wenn du nicht nachtragend bist, bin ich es auch nicht ;)


Zitat von: Otto123 am 10 Februar 2021, 18:09:50
Ist dieses Frage jetzt eigentlich mit meinem Beispiel beantwortet?
Weil: unterm Strich ist es Wurst ob Du AttrVal oder ReadingsVal nimmst, das Ergebnis sollte gleich sein.
Ich habe das Problem: "Es ist kein TimeSPec" - nicht verstanden, allerdings hast Du auch überhaupt keine Infos dazu geliefert.
Nützlich zu meinem Verständnis wäre z.B. ein list dummy_TimeCons gewesen ;) siehe auch hier

Stimmt.
Ein paar Eckdaten wären sicherlich hilfreich gewesen.
Dein Beispiel scheint geholfen zu haben.
Werde ich morgen früh sehen, ob meine Rollläden hochfahren.

Nachdem ich noch einmal über mein Konstrukt nachgedacht habe, ist mir eine andere Lösung eingefallen.
Dennoch, meine Einstiegsfrage, ob man parsen kann, ist geblieben und wurde mit deinem Post aus dem anderen Thread beantwortet.
Dankeschön Otto (mal wieder).

Ich wünsche einen schönen Abend.

remo

Hallo,

leider muss ich euch noch einmal behelligen.

Ich habe drei Dummys

define dummy_TimeConst_Morning_wo dummy
set dummy_TimeConst_Morning_wo 06:32


und

define dummy_Sonnenaufgang dummy
define dummy_Sonnenuntergang dummy
define at_Sonne1 at +*01:00 { my $s = sunrise_abs();; fhem("set dummy_Sonnenaufgang $s");; $s = sunset_abs();; fhem("set dummy_Sonnenuntergang $s");; }


Ein

{ReadingsVal('dummy_TimeConst_Morning_wo','state','')}
{ReadingsVal('dummy_Sonnenaufgang','state','')}
{ReadingsVal('dummy_Sonnenuntergang','state','')}


Über das FHEM-Textfeld spuckt auch die korrekten Werte aus.



Nun möchte ich mir ats daraus erzeugen:

define AT_TEST1 at *{ReadingsVal('dummy_TimeConst_Morning_wo','state','')} {}
-> Fuktioniert!


define AT_TEST5 at *{ReadingsVal('dummy_Sonnenaufgang','state','')} {}
define AT_TEST5 at *{ReadingsVal('dummy_Sonnenuntergang','state','')} {}

-> Fehlermeldung: the function "ReadingsVal('dummy_Sonnenaufgang','state','')" must return a timespec and not .

Womit wir wieder beim Parsen wären.


list dummy_TimeConst_Morning_wo:
Internals:
   CFGFN      ./FHEM/000_wetter.cfg
   FUUID      60253e93-f33f-1ce0-efd3-ec0152b6719c8e9a
   NAME       dummy_TimeConst_Morning_wo
   NR         117
   STATE      06:32
   TYPE       dummy
   READINGS:
     2021-02-11 15:26:27   state           06:32
Attributes:


list dummy_Sonnenaufgang:
Internals:
   CFGFN      ./FHEM/000_wetter.cfg
   FUUID      60253e93-f33f-1ce0-cecd-67107f78c6e206db
   NAME       dummy_Sonnenaufgang
   NR         112
   STATE      06:52:26
   TYPE       dummy
   READINGS:
     2021-02-11 14:13:30   state           06:52:26
Attributes:



Folgenden Lösungsansatz habe ich gefunden:
https://forum.fhem.de/index.php?topic=113074.0

...war für mich aber nicht hilfreich, oder ich stehe wieder auf dem Schlauch...



@Otto:
Dein Beitrag aus dem anderen Thread half mir zumindest schon einmal für dummy_TimeConst_Morning_wo


Dürfte ich um einen Denkanstoß bitten?