FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: cyrusfd am 22 September 2021, 09:13:35

Titel: [gelöst] nur in einer Liste vorhandene Aktoren sollen geschaltet werden
Beitrag von: cyrusfd am 22 September 2021, 09:13:35
Hallo,

ich habe bei meiner Gartenbeleuchtung eine Schaltuhr integriert. Diese schaltet die Lampen an, wenn die Sonne untergeht und um 22:30 wieder aus.

define Garten_Lampen structure room HM_57E255_Sw_01 HM_57E255_Sw_04 HM_760BDB_Sw_02 HM_760BDB_Sw_01 HM_760BDB_Sw_03
attr Garten_Lampen alias alle Lampen


define Garten_Licht_an at *{sunset("HORIZON=-0.833",0,"16:00","22:30")} {fhem("set Garten_Lampen on") if (Value("Schaltuhr_an_aus") eq "an");;;;}

Im Winter möchte ich jedoch nur einen Teil dieser Lampen schalten.
Ich habe mir gedacht, dass ich ein Dropdown-Menü mache und die Lampen auswähle, die geschaltet werden sollen.
attr Lampen_Auswahl setList state:multiple,Loggia,GO,GU,Pool,Wuerfel
attr Lampen_Auswahl webCmd state


Wie kann ich jetzt die Auswahl, die ich getroffen habe in meine Schaltung integrieren?

Vielen Dank für eure Hilfe
LG
Cyrus


Titel: Antw:nur in einer Liste vorhandene Aktoren sollen geschaltet werden
Beitrag von: TomLee am 22 September 2021, 09:32:39
Wie ich dich verstehe macht das Modul lightScene genau das was du dir wünschst, nimm statt structure einfach das Modul.

Gruß

Thomas
Titel: Antw:nur in einer Liste vorhandene Aktoren sollen geschaltet werden
Beitrag von: MadMax-FHEM am 22 September 2021, 10:39:50
Oder MSwitch: https://forum.fhem.de/index.php/topic,121817.0.html

Aber wo stehen denn die ausgewählten Werte drin, wenn du es so machst?

In state?
Kannst du da (so) überhaupt mehrere auswählen und eintragen?

Wenn die Werte in state (oder einem andern Reading) stehen, dann: ReadingsVal("Devicename", "state_oder_Readingname", "Ersatzwert")

Gruß, Joachim
Titel: Antw:nur in einer Liste vorhandene Aktoren sollen geschaltet werden
Beitrag von: frank am 22 September 2021, 11:14:09
ZitatIm Winter möchte ich jedoch nur einen Teil dieser Lampen schalten.
structure kann man auch "verschachteln".
also zb eine structure für die winter_lampen, die dann auch in die garten_all structure eingebunden werden kann.
Titel: Antw:nur in einer Liste vorhandene Aktoren sollen geschaltet werden
Beitrag von: Beta-User am 22 September 2021, 11:18:43
Zitat von: MadMax-FHEM am 22 September 2021, 10:39:50
Oder MSwitch: https://forum.fhem.de/index.php/topic,121817.0.html (https://forum.fhem.de/index.php/topic,121817.0.html)
Kann schon sein, dass man sowas damit machen kann, aber du nutzt das doch (auch) nicht, oder?

Zitat
Aber wo stehen denn die ausgewählten Werte drin, wenn du es so machst?
Ein Test würde es zutage fördern...



Aber den "link" zwischen den Schlüsselwörtern im dummy und den Devicenamen sehe ich hier noch nicht...?

ad structure: Geräte hinzufügen oder löschen geht:
ZitatDie Liste der Devices die einer Struktur zugeordnet sind kann duch das Kommando addstruct / delstruct im laufenden Betrieb verändert werden.
Zitat von: frank am 22 September 2021, 11:14:09
structure kann man auch "verschachteln".
also zb eine structure für die winter_lampen, die dann auch in die garten_all structure eingebunden werden kann.
Das kann man dann auch mit addstruct etc. kombinieren.

Ansonsten hatte ich sowas ähnliches früher mal für meine Rollläden gemacht, da habe ich einfach (mit setreading) ein eigenes Reading in die zu schaltenden Geräte geschrieben und dann (via WeekdayTimer) nur die Geräte geschaltet, die das Reading mit dem richtigen Wert hatten (das könnte man dann in einer readingsGroup ein- und ausschalten).

(ein backup ist manchmal hilfreich, hier die betreffenden Codes):

define Timer_Rolladen_Automode_1 WeekdayTimer TYPE=CUL_HM:FILTER=model=HM-LC-Bl1PBU-FM:FILTER=automode=1 !$we|{sunrise_abs_dat($today,"CIVIL",rand(240),"06:45","08:00")}|on\
$we|{sunrise_abs_dat($today,"CIVIL",rand(240),"08:40","09:00")}|on\
{sunset_abs_dat($today,"CIVIL",rand(240),"20:45","22:20")}|off {fhem ("set\
$NAME:FILTER=STATE!=$EVENT $EVENT")}

define rg_Rollaeden readingsGroup <Gerät>,<Offen>,<automode>,<Offen-Pos.>,<Gekippt-Pos.>,<Jalousie>,<On-Hold> (Rolladen_.*|Jalousie_.*)..:level,automode,?WindowContactOpenMaxClosed,?WindowContactTiltedMaxClosed,?JalousieTurnLevel,?WindowContactOnHoldState,
attr rg_Rollaeden commands {'level' => 'pct:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100','automode' => 'automode:0,1,2,3,4,5','WindowContactOpenMaxClosed' => 'WindowContactOpenMaxClosed:10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100','WindowContactTiltedMaxClosed' => 'WindowContactTiltedMaxClosed:10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100',}
Titel: Antw:nur in einer Liste vorhandene Aktoren sollen geschaltet werden
Beitrag von: Wernieman am 22 September 2021, 11:24:31
Wenn man eine Liste der zu schaltenden Geräte hat, könne man per Code die Liste durchgehen und an/abschalten. Ist "nur" etwas Programmieraufwand ...
Titel: Antw:nur in einer Liste vorhandene Aktoren sollen geschaltet werden
Beitrag von: MadMax-FHEM am 22 September 2021, 11:39:50
Zitat von: MadMax-FHEM am 22 September 2021, 10:39:50
Oder MSwitch: https://forum.fhem.de/index.php/topic,121817.0.html

Zitat von: Beta-User am 22 September 2021, 11:18:43
Kann schon sein, dass man sowas damit machen kann, aber du nutzt das doch (auch) nicht, oder?

Korrekt: nutze ich nicht.

Aber ich nutze auch kein DOIF und nenne es, wenn ich denke/weiß, dass es damit geht/gehen könnte trotzdem 8)

Ebenso andere Module die ich nicht nutze...
...weil ich es legitim (und gute Hilfe) finde, mögliche Lösungen zu nennen, weil ja der Fragende schon noch ein wenig selber recherchieren "darf"...

Eine Google-Suche funktioniert doch auch so: man bekommt eine Menge vorgesetzt (wo eine Maschine dachte könnte passen ;)  ) und dann muss man eben filtern... 8)

Gruß, Joachim
Titel: Antw:nur in einer Liste vorhandene Aktoren sollen geschaltet werden
Beitrag von: cyrusfd am 22 September 2021, 12:00:03
Vielen Dank für die vielen Anregungen.
Ich habe es mal mit LightScene versucht.
4 verschiedene Szenen wurden in meineLightScene definiert.
define meineLightScene HM_57E255_Sw_01 HM_57E255_Sw_04 HM_760BDB_Sw_02 HM_760BDB_Sw_01 HM_760BDB_Sw_03

Wenn ich in meiner Schaltuhr folgendes definiere, passiert nichts. Die verschiedene Szenen funktionieren jedoch manuell.
*11:54 {fhem("set meineLightScene scene on") if (Value("Schaltuhr_an_aus") eq "an");;}

Vielleicht kann mir jemand auf die Sprünge helfen.
Titel: Antw:nur in einer Liste vorhandene Aktoren sollen geschaltet werden
Beitrag von: Der_Tom am 22 September 2021, 12:20:49
Zitat von: MadMax-FHEM am 22 September 2021, 10:39:50
Oder MSwitch: https://forum.fhem.de/index.php/topic,121817.0.html

Aber wo stehen denn die ausgewählten Werte drin, wenn du es so machst?

In state?
Kannst du da (so) überhaupt mehrere auswählen und eintragen?

Wenn die Werte in state (oder einem andern Reading) stehen, dann: ReadingsVal("Devicename", "state_oder_Readingname", "Ersatzwert")

Gruß, Joachim


Danke für die Erwähnung.
Geht zwar , aber auch nicht ohne eine gute Portion Erfahrung und ganz sicher nicht als 'quickie'

Gruss Thomas
Titel: Antw:nur in einer Liste vorhandene Aktoren sollen geschaltet werden
Beitrag von: cyrusfd am 22 September 2021, 12:41:21
ich glaube ich hatte einen Denkfehler...
die Szene muss ja ausgelesen werden, damit er geschaltet werden kann.
*12:38 {
my $temp=ReadingsVal("meineLightScene","State","");{fhem("set meineLightScene $temp on") if (Value("Schaltuhr_an_aus") eq "an");;}
}

leider funktioniert dieser Code auch nicht.
Titel: Antw:nur in einer Liste vorhandene Aktoren sollen geschaltet werden
Beitrag von: justme1968 am 22 September 2021, 12:49:43
State gibt es nicht. nur state oder STATE. und nur ersteres ist ein reading.

aber: es ist doch immer noch verdreht. die lightScene ist das device das zum (gruppen weise) schalten verwendet wird. nicht für die interaktion bzw. zum auswählen was geschaltet werden soll.

du brauchst:
- eine lightScene oder mehrere structures um zu schalten. bei lightScene würdest du mehrere szenen anlegen wie alles_aus, winter_an, sommer_an, ...
- ein at oder weekday timer der zur gewünschten zeit schaltet. d.h. z.b. die aktuell gewünschte szene auswählt.
- die auswahl ist kann dann entweder anhand des aktuellen monats automatisch sein oder z.b. per dummy den du über das menü entweder auf sommer/winter stellst oder direkt auf die gewünschte szene.
Titel: Antw:nur in einer Liste vorhandene Aktoren sollen geschaltet werden
Beitrag von: MadMax-FHEM am 22 September 2021, 12:50:23
Hast du die commandref zu lightscene gelesen?

Also du definierst eine lightscene (hast du wohl gemacht).

Dann schaltest du die Lichter wie sie sollen und speicherst das mithilfe des lightscene-Devices ab:


set lightsceneDevice save NameDerLichtSzene1


Dann schaltest du wieder und speicherst

set lightsceneDevice save NameDerLichtSzene2

usw.

Dann kannst du mit

set lightsceneDevice scene NameDerLichtSzeneX eben eine bestimmte gespeicherte Einstellung abrufen...


EDIT: hatte es schon, daher lasse ich es (auch wenn doppelt ;)  )...

Gruß, Joachim
Titel: Antw:nur in einer Liste vorhandene Aktoren sollen geschaltet werden
Beitrag von: TomLee am 22 September 2021, 12:57:26
ZitatAlso du definierst eine lightscene (hast du wohl gemacht).

Ich hab Zweifel:


define meineLightScene HM_57E255_Sw_01 HM_57E255_Sw_04 HM_760BDB_Sw_02 HM_760BDB_Sw_01 HM_760BDB_Sw_03


eher


define meineLightScene LightScene HM_57E255_Sw_01 HM_57E255_Sw_04 HM_760BDB_Sw_02 HM_760BDB_Sw_01 HM_760BDB_Sw_03

Titel: Antw:nur in einer Liste vorhandene Aktoren sollen geschaltet werden
Beitrag von: cyrusfd am 22 September 2021, 13:11:27
ich habe folgende Szenen in meineLightScene bereits definiert
Scene_Aus --> Alles aus
Scene_Sommer --> Alles an
Scene_Winter --> nur ein Teil an

in meiner Schaltuhr, die normalerweise mit "Sunset" funktioniert, habe ich testweise folgendes eingegeben.
*13:02 {
my $temp=ReadingsVal("meineLightScene","state","");{fhem("set meineLightScene [color=red]scene[/color] $temp on") if (Value("Schaltuhr_an_aus") eq "an");;}
}

Das state wurde jetzt korrigiert und der fehlende Code "scene" hinzugefügt. Jetzt funktioniert es!!!

Vielen Dank an alle





Titel: Antw:[gelöst] nur in einer Liste vorhandene Aktoren sollen geschaltet werden
Beitrag von: TomLee am 22 September 2021, 17:37:51
Wozu soll das on in dem set-Befehl denn gut sein ?

Zitat von: CommandrefSet

    all <command>
    execute set <command> for alle devices in this LightScene
    save <scene_name>
    save current state for alle devices in this LightScene to <scene_name>
    scene <scene_name>

Und weil keiner bisher was sagte, nimm in Zukunft besser Readingsval für state und nicht Value für STATE.
Titel: Antw:[gelöst] nur in einer Liste vorhandene Aktoren sollen geschaltet werden
Beitrag von: cyrusfd am 24 September 2021, 12:16:38
@TomLee
Das ist der Rest aus meinem vorherigen Code. Das "on" hat natürlich nichts da verloren. Vielen Dank!