FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Fashionbye am 21 Februar 2015, 16:22:55

Titel: Dimwerte tageszeitabhängig als Variablen einsetzen. Syntax Zuweisung...
Beitrag von: Fashionbye am 21 Februar 2015, 16:22:55
Hallo zusammen,
hab' in FHEM schon einige Rätsel gelöst, aber bei so was Einfachem scheitere ich syntaktisch:

Ich möchte einen Dimmer ansteuern, jedoch mit variablen Werten, welche tageszeitabhängig z.B. in einem Dummy abgelegt sind.
ab z.B. 23:00 Uhr soll bei Bewegungsmelderauslösung das Flurlicht nicht mehr als Blendgranate dienen, wenn nachts einer auf's Klo geht, sondern bei BWM-Auslösung gedimmt angehen:
   
define Dimmstufe at 23:00 set Dimmwert dim18%
define BWM_Flur_N notify BWM_Flur:.* set Flur_Licht {$value{Dimmwert}}


{$value{Dimmwert}} geht so nicht. Nach stundenlangem Probieren und rechechieren habe ich aufgegeben... .
Jetzt hab' ich die Twilight-Steuerung gepackt, BWM aktiv/inaktiv-Schaltung hingekriegt und an einer einfachen Zuweisung komme ich nicht weiter! HIIILLLFFEE!! (Falls einer mal ein GUI auch zur Konfiguration für FHEM hinkriegt, ich würde ihm die Füsse küssen...)

Titel: Antw:Dimwerte tageszeitabhängig als Variablen einsetzen. Syntax Zuweisung...
Beitrag von: nesges am 21 Februar 2015, 16:28:31
Zitat von: Fashionbye am 21 Februar 2015, 16:22:55
define Dimmstufe at 23:00 set Dimmwert dim18%
define BWM_Flur_N notify BWM_Flur:.* set Flur_Licht {$value{Dimmwert}}

Jetzt würde mich wirklich interessieren wie du darauf gekommen bist deine Anforderung so zu notieren :-) Im Einsteigerhandbuch auf Seite 37 steht die richtige Syntax für notify mit Perl-Code, auf der Folgeseite ist die Funktion Value() erklärt.
Titel: Antw:Dimwerte tageszeitabhängig als Variablen einsetzen. Syntax Zuweisung...
Beitrag von: Fashionbye am 21 Februar 2015, 16:58:29
@neges: Danke, das ging ja schnell...
Ja das hatte ich gelesen und probiert, kam aber auch nicht weiter. Meinst Du:

define Schalter1Notify notify Schalter1 { if ( "$EVENT" eq "off") {fhem("set wz_Media
off")} }
Wenn also die Variable $EVENT den Wert off hat, wird in fhem der Befehl set wz_Media off
ausgeführt.
define Schalter1Notify notify Schalter1 { if ( Value("Schalter1") eq "off") {fhem("set
wz_Media off")} }

Habe ich - glaube ich - schon halbwegs verstanden. Hier wird $Event nach einem Ereignis gelesen, ich möchte aber eine Variable im Set-Teil setzen. Ist das dann auch $Event? Eher nicht? Der normale String "set..." ist mir auch klar, aber wie kann ich aus einem Teilstring und einem String aus einer Variablen
einen String generieren? Kenne mich in Peral absolut nicht aus.
Titel: Antw:Dimwerte tageszeitabhängig als Variablen einsetzen. Syntax Zuweisung...
Beitrag von: Paul am 21 Februar 2015, 17:15:50
Warum machst du es nicht mit einer if Anweisung

define LichtAn notify BM_Flur {if ($hour < 6 || $hour > 22) {fhem "set Flurlicht dim37%%; set Flurlicht on-old-for-timer 60"} elsif ($hour <= 11 || $hour > 14) {fhem "set Flurlicht dim81%%; set Flurlicht on-old-for-timer 120"}}
Titel: Antw:Dimwerte tageszeitabhängig als Variablen einsetzen. Syntax Zuweisung...
Beitrag von: Fashionbye am 21 Februar 2015, 17:31:28
@Paul:
ja wenn es so einfach wäre...
es soll mehrere Uhrzeiten, also Schaltpunkte mit mehreren Dimmwerten geben, und diese Variablen sollen in vier Räumen und aussen eingesetzt und über zentral gesetzte Dummies (Uhrzeiten und Dimmwerte) änderbar sein. Eigentlich nicht Unnormales - oder?

Nur habe ich in Dutzenden FHEM Codeschnipseln rumgegoogelt und nichts gefunden, was irgendwie übertragbar wäre.
In den letzten 30 Jahren habe ich mir schon ein halbes Dutzend Programmierspachen autodidaktisch angegeignet, aber so fremd wie Perl war mir noch nichts... .
Titel: Antw:Dimwerte tageszeitabhängig als Variablen einsetzen. Syntax Zuweisung...
Beitrag von: Fashionbye am 21 Februar 2015, 17:47:11
Zurück zum Problem:
Wie kann ich einem Gerät ein Schaltzustand per Variable übergeben?
Bei Twilight geht es ja auch, aber da kommt der Wert aus einer Datenbank aus Perl.
Ich würde gerne eine FHEM Variable übergeben.
Das muss doch gehen.
Titel: Antw:Dimwerte tageszeitabhängig als Variablen einsetzen. Syntax Zuweisung...
Beitrag von: Puschel74 am 21 Februar 2015, 17:50:33
ZitatDas muss doch gehen.
Geht auch - gewöhn dir bitte an deine Beiträge zu bearbeiten und nicht dir selbst zu antworten.
Es gibt Menschen im Forum die einen Beitrag abonniert haben und bekommen dann immer eine Nachricht - auch wenn du dir selbst antwortest.

Beispiel aus dem StreamRadio-Thread-Wiki:
# Dummy für Volume- Slider
define Dum_Volume_D dummy
attr Dum_Volume_D alias Volume
attr Dum_Volume_D setList state:slider,0,1,100
attr Dum_Volume_D webCmd state
attr Dum_Volume_D room Radio
attr Dum_Volume_D group Volume

# Notify für Volume- Slider
define Func_Volume_N notify Dum_Volume_D {\
my $vol = Value("Dum_Volume_D");;\
fhem "set SRadio VOLUME $vol";;\
}
attr Func_Volume_N room Radio

Ein Dummy mit Slider wird erstellt und bei Betätigung wird der neue Lautstärkewert an das Device SRadio geschickt.
Titel: Antw:Dimwerte tageszeitabhängig als Variablen einsetzen. Syntax Zuweisung...
Beitrag von: Fashionbye am 21 Februar 2015, 19:46:13
Hey Puschel74! - Ich umarme Dich - es funzt!

Hier noch mein Testcode:

ZitatInternals:
   NAME       DimWert
   NR         742
   STATE      dim 6
   TYPE       dummy
   Readings:
     2015-02-21 19:40:10   state           dim 6
Attributes:
   alias      DimWert
   group      Auto_Dimmersteuerung
   room       Aussen,Unsorted
   setList    dim:slider,0,6.25,100
   webCmd     state

Internals:
   CFGFN
   DEF        DimWert:.* {my $dimw = Value("DimWert");;fhem "set Buero_Licht_Decke $dimw";;}
   NAME       myTwilight2
   NOTIFYDEV  DimWert
   NR         998
   NTFY_ORDER 50-myTwilight2
   REGEXP     DimWert:.*
   STATE      2015-02-21 19:40:10
   TYPE       notify
Attributes:
   room       Aussen


Den Rest krieg' ich dann schon gebacken, super was für ein toller Tag!