FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: moonsorrox am 05 August 2019, 17:22:13

Titel: mit DOIF ein Attribut ändern
Beitrag von: moonsorrox am 05 August 2019, 17:22:13
ich bekomme es leider nicht hin mit einem DOIF mehrere Attribute eines Moduls zu ändern.
Ich habe es erst einmal mit einem Atrribut versucht aber ich bekomme es nicht hin

Mein Versuche führen immer zu Fehlern welche mir das DOIF dann anzeigt.
(set [Rollladenautomatik:ASC_autoShuttersControlEvening] on)
(set Rollladenautomatik:ASC_autoShuttersControlEvening on)
(set Rollladenautomatik ASC_autoShuttersControlEvening on)


zur Erklärung:
Rollloautomatik ist das Modul
ASC_autoShuttersControlEvening ist das attr
Zustand on oder off

stehe irgendwie auf dem Schlauch  :-\
Titel: Antw:mit DOIF ein Attribut ändern
Beitrag von: Gisbert am 05 August 2019, 17:41:27
Hallo moonsorrox,
dieses Beispiel funktioniert bei mir:
defmod Update.Dieselpreise DOIF ([05:15]) \
(set (AVIAXpress.Leverkusen|bft.Lev.WillyBrandtRing|Jet.Koeln.Berg.Gladbacher.Str|Jet.Koeln.Worringen|PM.Koeln.Liebigstr|Star.Duennwald) start) \
DOELSEIF ([?05:16-21:14] and [myUniFi:LGG6] eq "connected") \
(set (AVIAXpress.Leverkusen|bft.Lev.WillyBrandtRing|Jet.Koeln.Berg.Gladbacher.Str|Jet.Koeln.Worringen|PM.Koeln.Liebigstr|Star.Duennwald) interval 1200) \
DOELSEIF ([?05:16-21:14] and [myUniFi:LGG6] eq "disconnected") \
(set (AVIAXpress.Leverkusen|bft.Lev.WillyBrandtRing|Jet.Koeln.Berg.Gladbacher.Str|Jet.Koeln.Worringen|PM.Koeln.Liebigstr|Star.Duennwald) interval 600) \
DOELSEIF ([21:15]) \
(set (AVIAXpress.Leverkusen|bft.Lev.WillyBrandtRing|Jet.Koeln.Berg.Gladbacher.Str|Jet.Koeln.Worringen|PM.Koeln.Liebigstr|Star.Duennwald) stop)

Damit reduziere ich die Anzahl der Abfragen für den Spritpreismonitor auf die Zeiten, in der ich unterwegs/nicht zuhause bin, und nachts ist die Abfrage gestoppt.

Viele​ Grüße​ Gisbert​
Titel: Antw:mit DOIF ein Attribut ändern
Beitrag von: moonsorrox am 05 August 2019, 17:47:28
vielen Dank
das hatte ich auch schon so drin, aber das DOIF meckert bei mir in folgender Form
set (Rollladenautomatik ASC_autoShuttersControlEvening) off: Please define (Rollladenautomatik first
Titel: Antw:mit DOIF ein Attribut ändern
Beitrag von: MadMax-FHEM am 05 August 2019, 17:56:03
Ein Attribut setzt man doch nicht mittels "set"...

Der "Befehl" für ein Attribut lautet so:

attr Rollladenautomatik ASC_autoShuttersControlEvening on

Wie das dann in DOIF geht: keine Ahnung aber vermutlich "nur" das was ich gepostet habe in Klammern...

Es wird ja "angemosert", dass
"(Rollladenautomatik" nicht definiert ist, weil das nach dem set eben als Aufruf gewertet wird irgendwas bei "(Rollladenautomatik" zu setzen, das Device aber ja "nur" "Rollladenautomatik" heißt, also wird fälschlicherweise wohl die Klammer zum Namen dazu geschlagen...

Gruß, Joachim
Titel: Antw:mit DOIF ein Attribut ändern
Beitrag von: moonsorrox am 05 August 2019, 17:58:51
Ich hatte auch "attr" schon mit eingebaut, aber irgendwie ein Brett vorm kopf

das DOIF

defmod di_Rollladen_ASC DOIF ([du_Rollladen_ASC] eq "FHEM") (set (Rollladenautomatik ASC_autoShuttersControlEvening) on)  DOELSEIF ([du_Rollladen_ASC] eq "Aus") (set (Rollladenautomatik ASC_autoShuttersControlEvening) off)\

attr di_Rollladen_ASC alias Rollladenautomatik ASC
attr di_Rollladen_ASC room Rollladenautomatik

Titel: Antw:mit DOIF ein Attribut ändern
Beitrag von: MadMax-FHEM am 05 August 2019, 18:07:00
Ich sehe nur set-Befehle...
...nirgends ein attr was auf Rollladenautomatik "wirkt"...
...oder übersehe ich was!?

Und dann solltest du vielleicht mal die Syntax von DOIF lesen: commandref

Gruß, Joachim
Titel: Antw:mit DOIF ein Attribut ändern
Beitrag von: moonsorrox am 05 August 2019, 18:30:23
Zitat von: MadMax-FHEM am 05 August 2019, 18:07:00
Ich sehe nur set-Befehle...
...nirgends ein attr was auf Rollladenautomatik "wirkt"...
...oder übersehe ich was!?
das hatte ich auch nur probiert, aber kein Erfolg gehabt

Zitat von: MadMax-FHEM am 05 August 2019, 18:07:00
Und dann solltest du vielleicht mal die Syntax von DOIF lesen: commandref
ich lese schon die ganze Zeit aber ich finde kein richtiges Beispiel, es sind beispiele drin ohne set Befehle, aber ich habe es nicht gebacken bekommen mal schauen ob ich evtl noch was mit Perl finde
Titel: Antw:mit DOIF ein Attribut ändern
Beitrag von: MadMax-FHEM am 05 August 2019, 18:52:31
Alleine die Def vom DOIF stimmt doch (meines Erachtens) schon nicht:

Zitat
defmod di_Rollladen_ASC DOIF ([du_Rollladen_ASC] eq "FHEM") ([du_Rollladen_ASC] eq "FHEM") (set (Rollladenautomatik ASC_autoShuttersControlEvening) on) DOELSEIF ([du_Rollladen_ASC] eq "Aus") (set (Rollladenautomatik ASC_autoShuttersControlEvening) off)

Das sind doch (wenn ich nicht irre) 2 Bedingungen OHNE "Kopplung" wie And/OR oder so...
...kann denke ich schon nicht gehen!?

Gibt es dazu keine Fehlermeldung!?

Was spricht dagegen zu versuchen was ich vorgeschlagen habe!?

Einfach meinen "attr-Aufruf" in Klammern ins DOIF!?


defmod di_Rollladen_ASC DOIF ([du_Rollladen_ASC] eq "FHEM") (attr Rollladenautomatik ASC_autoShuttersControlEvening on) DOELSEIF ([du_Rollladen_ASC] eq "Aus") (attr Rollladenautomatik ASC_autoShuttersControlEvening off)


Wobei ich KEIN DOIF nutze...
...daher nicht genau weiß wie es sich mit "triggernden Bedingungen" vs. "abfragende Bedingungen" verhält (ich glaube: "abfragend" mittels "Fragezeichen" davor)...
...also nicht weiß, ob das DOIF dann "schaltet" wenn du willst...

Ich würde vermuten es setzt das Attribut auf "on", wenn du_Rollladen_ASC irgendwie auf "FHEM" gesetzt wird...
...und auf "off", wenn du_Rollladen_ASC auf "Aus" gesetzt wird.

Wichtig (soweit ich DOIF "kenne"): es wird der "state" "geprüft" und nicht irgendein Reading...

EDIT: dir ist aber klar, dass das Setzen von Attributen zu einem "roten Fragezeichen" führt!? Und wenn du nicht speicherst bei einem Neustart der eben in der fhem.cfg stehende Wert genommen wird und (u.U.) NICHT der zuletzt per DOIF gesetzte Wert...

Gruß, Joachim
Titel: Antw:mit DOIF ein Attribut ändern
Beitrag von: moonsorrox am 05 August 2019, 18:56:37
Ja klar du hast recht, ich habe wohl ein Code Fragment aus meinen Probierversuchen gepostet  :-\ :-\
Das sieht so natürlich nicht aus, habe das mal jetzt geändert, dass kann ja kein Mensch gebrauchen  ;)

Dein Vorschlag mit dem attr funktioniert natürlich, nur eben das er das "save" nicht verarbeitet.
Ich hatte mal soetwas und da reichte es ein save hinterher zu schicken, dass geht hier aber nicht  :-\
Titel: Antw:mit DOIF ein Attribut ändern
Beitrag von: Ellert am 05 August 2019, 20:08:31
Zitat von: moonsorrox am 05 August 2019, 18:56:37
Ich hatte mal soetwas und da reichte es ein save hinterher zu schicken, dass geht hier aber nicht
Warum sollte das nicht gehen, save ist ein normaler Befehl.
Titel: Antw:mit DOIF ein Attribut ändern
Beitrag von: moonsorrox am 06 August 2019, 01:31:23
ich dachte das es so funktioniert, aber es tut es nicht
(attr BU_Rollladen ASC_Mode_Down on, attr BU_Rollladen ASC_Mode_Up on, save)

die beiden attr schaltet er um, aber das "save" macht er nicht  :-\
Titel: Antw:mit DOIF ein Attribut ändern
Beitrag von: amenomade am 06 August 2019, 01:48:18
Und so?
(attr BU_Rollladen ASC_Mode_Down on, attr BU_Rollladen ASC_Mode_Up on)(save)

Übrigens: warum nutzt Du nicht "set <ASC-Device> shutterASCenableToggle <Rollladenname>"? Vorteil ist: das ist ein set Befehl, Du brauchst hier kein save.

Es gibt keinen Grund, warum save nicht funktionieren sollte. Es gibt sogar ein Beispiel im CommandRef:
Zitatdefine di_save DOIF ([+01:00]) (save)
Bist Du sicher, dass er kein save macht? Vielleicht macht er das doch, aber etwas ändert die Konfiguration noch danach? Was sagt die Log?
Titel: Antw:mit DOIF ein Attribut ändern
Beitrag von: Ellert am 06 August 2019, 02:54:44
Ist on überhaupt ein erlaubter Wert?
Titel: Antw:mit DOIF ein Attribut ändern
Beitrag von: amenomade am 06 August 2019, 09:04:11
Zitat von: Ellert am 06 August 2019, 02:54:44
Ist on überhaupt ein erlaubter Wert?
Gute Frage. Ich glaube eher nicht.
Zitat von: CommandRefASC_Mode_Down - always/home/absent/off - Wann darf die Automatik steuern. immer, niemals, bei Abwesenheit des Roommate (ist kein Roommate und absent eingestellt, wird gar nicht gesteuert) (default: always)
ASC_Mode_Up - always/home/absent/off - Wann darf die Automatik steuern. immer, niemals, bei Abwesenheit des Roommate (ist kein Roommate und absent eingestellt, wird gar nicht gesteuert) (default: always)
Titel: Antw:mit DOIF ein Attribut ändern
Beitrag von: moonsorrox am 06 August 2019, 12:12:04
so hatte ich den save Befehl schon drin und es funktionierte nicht, aber...... siehe weiter

Zitat von: amenomade am 06 August 2019, 01:48:18
Und so?
(attr BU_Rollladen ASC_Mode_Down on, attr BU_Rollladen ASC_Mode_Up on)(save)

Übrigens: warum nutzt Du nicht "set <ASC-Device> shutterASCenableToggle <Rollladenname>"? Vorteil ist: das ist ein set Befehl, Du brauchst hier kein save.

das schaue ich mir an..

Zitat von: Ellert am 06 August 2019, 02:54:44
Ist on überhaupt ein erlaubter Wert?
oh man ja, du hast vollkommen recht  :-\ ich bin wohl etwas blind gewesen
Dank auch an amenomade.... gefühlt mehrmals gelesen, aber wohl daneben gelesen
ja es gibt gar keinen "on" Befehl dann kann das auch nicht gehen... :-\ ::)
Titel: Antw:mit DOIF ein Attribut ändern
Beitrag von: MadMax-FHEM am 06 August 2019, 13:14:41
Sollte sich aber als "Fehlermeldung" im Log was finden lassen!? ;)

Gruß, Joachim
Titel: Antw:mit DOIF ein Attribut ändern
Beitrag von: moonsorrox am 06 August 2019, 13:22:24
Also das mit dem save geht absolut nicht, egal was ich dort eintrage er will immer ein save manuell hinterher haben.
zu den Log Eintragungen
ja da gibt es einiges von gestern Abend und meinen Versuchen
2019.08.06 01:27:08 2: di_Rollladen_ASC:  set save: Please define save first
2019.08.06 01:27:03 2: di_Rollladen_ASC:  set save: Please define save first

where <name> is a single device name, a list separated by comma (,) or a regexp. See the devspec section in the commandref.html for details.
2019.08.06 01:09:08 2: di_Rollladen_ASC:  set : Usage: set <name> <type-dependent-options>

where <name> is a single device name, a list separated by comma (,) or a regexp. See the devspec section in the commandref.html for details.
2019.08.06 01:08:35 2: di_Rollladen_ASC:  set : Usage: set <name> <type-dependent-options>

where <name> is a single device name, a list separated by comma (,) or a regexp. See the devspec section in the commandref.html for details.
2019.08.06 01:08:32 2: di_Rollladen_ASC:  set : Usage: set <name> <type-dependent-options>
2019.08.06 01:07:23 2: di_Rollladen_ASC:  set save: Please define save first
2019.08.06 00:47:18 2: di_Rollladen_ASC:  set save config: Please define save first
2019.08.06 00:46:26 2: di_Rollladen_ASC: set save config: Please define save first
2019.08.06 00:46:03 2: di_Rollladen_ASC: set save: Please define save first
2019.08.06 00:45:57 2: di_Rollladen_ASC: set save config: Please define save first
2019.08.06 00:45:54 2: di_Rollladen_ASC: set save: Please define save first
2019.08.06 00:44:59 2: di_Rollladen_ASC: set save config: Please define save first
2019.08.06 00:44:29 2: di_Rollladen_ASC: set save: Please define save first
2019.08.06 00:43:10 2: di_Rollladen_ASC:  set save config: Please define save first
2019.08.06 00:42:58 2: di_Rollladen_ASC:  set save config: Please define save first
2019.08.06 00:42:55 2: di_Rollladen_ASC:  set save config: Please define save first
2019.08.06 00:41:50 2: di_Rollladen_ASC:  set Fhemsave: Please define Fhemsave first
2019.08.06 00:41:38 2: di_Rollladen_ASC:  set Fhemsave: Please define Fhemsave first
2019.08.06 00:40:08 2: di_Rollladen_ASC:  set save: Please define save first
2019.08.06 00:40:07 2: di_Rollladen_ASC:  set save: Please define save first
2019.08.06 00:40:02 2: di_Rollladen_ASC:  set save: Please define save first
2019.08.06 00:39:51 2: di_Rollladen_ASC:  set save: Please define save first


Ich habe jetzt mal folgendes von amenomade vergeschlagenes genutzt
(set Rollladenautomatik shutterASCenableToggle BU_Rollladen)

ich werde mal im zugehörigen Beitrag fragen wo ich die Umsetzung des Befehls sehe
Titel: Antw:mit DOIF ein Attribut ändern
Beitrag von: Ellert am 06 August 2019, 13:26:01
Zitat von: amenomade am 06 August 2019, 09:04:11
Gute Frage. Ich glaube eher nicht.
So einfach kann die Lösung sein ;)
Titel: Antw:mit DOIF ein Attribut ändern
Beitrag von: moonsorrox am 06 August 2019, 13:29:42
wie oben schon gesagt ich habs einfach verpennt  :-\ soll heißen überhaupt nicht gesehen.

Ich beschäftige mich gerade mit dem set Befehl von amenomade