Hauptmenü

Tablet Helligkeit steuern

Begonnen von Ralle, 26 November 2020, 11:22:33

Vorheriges Thema - Nächstes Thema

Ralle

Hallo zusammen,
bastel nun schon einige Zeit an meiner Funktion um die Helligkeit meines Tablets mit abfrage aus dem Twilight Modul über ein Notify zu steuern.
Aber so recht will es mir nicht gelingen und es funktioniert nur bis zur Helligkeit 120, darunter nicht.
Finde aber auch das Problem  aufgrund meiner mangelnden Perl Kenntnisse nicht.
Evtl. hat da jemand einen Tipp für mich.
Hier mal der Inhalt meines Notify.


LichtWetterFaktor:light:.* {
my $hellwert = ReadingsVal("LichtWetterFaktor","light","");
if($hellwert >= 6){
    fhem ("set TabletWohnzimmer screenBrightness 160");
  }
elsif($hellwert <= 5){
    fhem ("set TabletWohnzimmer screenBrightness 120");
  } 
elsif($hellwert <= 4){
    fhem ("set TabletWohnzimmer screenBrightness 100");
  }
elsif($hellwert <= 3){
    fhem ("set TabletWohnzimmer screenBrightness 80");
  }
elsif($hellwert <= 2){
    fhem ("set TabletWohnzimmer screenBrightness 60");
  }
elsif($hellwert <= 1){
    fhem ("set TabletWohnzimmer screenBrightness 30");
  }
elsif($hellwert <= 0){
    fhem ("set TabletWohnzimmer screenBrightness 20");
  } 
}



Gruß
Ralf
Raspberry 3, Homematic HMLAN, HM Rolladensteuerung, MySensors, MAX CUL (Umbau Telekatz), Sonoff mit Easy-ESP, Arduino, MQTT, USV(Powerbar), 433Mhz Steckdosen

MadMax-FHEM

#1
Hallo Ralf,

naja ganz einfach:

es läuft "von oben" durch.

Also wenn 6 oder größer -> 160

Wenn 5 oder kleiner (und da gehört eben auch 4, 3, 2, 1, 0 dazu! ;)  ) dann -> 120

EDIT: damit ist das erste elsif "zufrieden" und es "gibt/braucht" dann ja nicht mehr weiter "geschaut" zu werden ;)

D.h. die Abfragen umdrehen, also "von hinten" (kleine Werte) beginnen...


Dann noch ein paar Anmerkungen:

Du brauchst in einem/diesem notify nicht per ReadingsVal abfragen.
Der Wert kommt ja bereits als $EVENT oder $EVTPART1, $EVTPART2, ... "mit" bzw. steht als solcher im notify zur Verfügung.

EDIT: wenn du "sehen" willst was bzw. "wo" der passende Wert drin steht, dann kannst du das ja ausgeben lassen. Also als 1. Zeile im notify eine Logausgabe. Log3(undef, 1, "EVENT: $EVENT    EVTPART1: $EVTPART1    EVTPART2: $EVTPART2");
Nicht "wundern", wenn Warnings im Log auftauchen, es kann durchaus sein, dass es keinen $EVTPART1 usw. gibt (kommt eben drauf an was auslöst und wie der entspr. Readingwert aussieht), das wird dann nat. "angemosert". Das mit der Logausgabe ist nur, um zu sehen was denn im notify in welcher Variablen zur Verfügung steht und kann ja dann wieder weg... ;)

Wenn du doch abfragen willst, empfiehlt sich bei numerischen Werten statt ReadingsVal eben ReadingsNum zu verwenden:

ReadingsNum("LichtWetterFaktor","light",0)

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)

Beta-User

Ergänzend: mach doch für die Fälle <6 einfach "$EVTPART1*20+20" ;) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

MadMax-FHEM

Zitat von: Beta-User am 26 November 2020, 11:38:43
Ergänzend: mach doch für die Fälle <6 einfach "$EVTPART1*20+20" ;) .

Dann wird das hier aber zu 40 ;)

Zitat
elsif($hellwert <= 1){
    fhem ("set TabletWohnzimmer screenBrightness 30");

ist aber vermutlich "verschmerzbar" ;)

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)

Ralle

Hallo zusammen,
habe nun mal mein notify geändert.

Logausgabe. Log3(undef, 1, "EVENT: $EVENT    EVTPART1: $EVTPART1    EVTPART2: $EVTPART2");
LichtWetterFaktor:light:.* {
my $hellwert = ReadingsNum("LichtWetterFaktor","light",0);
elsif($hellwert <= 0){
    fhem ("set TabletWohnzimmer screenBrightness 20");
  }
elsif($hellwert <= 1){
    fhem ("set TabletWohnzimmer screenBrightness 30");
  }
elsif($hellwert <= 2){
    fhem ("set TabletWohnzimmer screenBrightness 60");
  }
elsif($hellwert <= 3){
    fhem ("set TabletWohnzimmer screenBrightness 80");
  }
elsif($hellwert <= 4){
    fhem ("set TabletWohnzimmer screenBrightness 100");
  }
elsif($hellwert <= 5){
    fhem ("set TabletWohnzimmer screenBrightness 120");
  }
  if($hellwert >= 6){
    fhem ("set TabletWohnzimmer screenBrightness 160");
  }
}


@Beta-User
Das ist eine gute Idee, mach ich aber später da ich erst einmal verstehen muss wie das funktioniert und da hapert es bei mir leider noch.

Man kann ja das das notify auch manuell auslösen damit ich nicht warten muss bis der Helligkeitswert sinkt und ich auch was im log sehe.
Evtl. kann mit da auch noch jemand auf die Sprünge helfen wie hier die richtige Syntax ist?
Mit der FHEM Hilfe jedenfalls schaffe ich das nicht.

Gruß
Ralf

Raspberry 3, Homematic HMLAN, HM Rolladensteuerung, MySensors, MAX CUL (Umbau Telekatz), Sonoff mit Easy-ESP, Arduino, MQTT, USV(Powerbar), 433Mhz Steckdosen

Beta-User

Rom wurde nicht an einem Tag erbaut. Was das Auslösen des notify angeht: "trigger" ist dein Freund ;) . (help trigger in die Kommandozeile werfen...)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Ralle

trigger LichtWetterFaktor:light:2 z.B. geht nicht und trigger LichtWetterFaktor macht zumindest keine Fehlermeldung aber auch keinen Eintrag im log.

Auf was muss ich denn hier korrekt triggern ?

Gruß
Ralf


Raspberry 3, Homematic HMLAN, HM Rolladensteuerung, MySensors, MAX CUL (Umbau Telekatz), Sonoff mit Easy-ESP, Arduino, MQTT, USV(Powerbar), 433Mhz Steckdosen

Beta-User

lass mal die Doppelpunkte weg... (da war doch auch nur "device on" in help, oder?)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Ralle

Wäre das so korrekt ?
trigger LichtWetterFaktor light 2 (keine Fehlermeldung aber auch leider nichts im Log)

Sorry, bin leider ein Perl Dau
Raspberry 3, Homematic HMLAN, HM Rolladensteuerung, MySensors, MAX CUL (Umbau Telekatz), Sonoff mit Easy-ESP, Arduino, MQTT, USV(Powerbar), 433Mhz Steckdosen

MadMax-FHEM

#9
Ich hab mir deinen Umbau angesehen:

du kannst NICHT einfach mit elsif anfangen!
und/oder mit if aufhören!!

Das muss schon bleiben!

Nur die "Bedingungen" ändern...

EDIT: weil die "Abfrage" bleibt: wenn "irgendwas" dann, wenn nicht aber "was anderes" dann, wenn auch das nicht aber "ganz was anderes" dann... Du kannst nicht mit "wenn das nicht aber" beginnen ;) Weil es ja noch kein "das" gab... ;)

Gab es keinen Fehler!?

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)

Beta-User

Eigentlich müsste das mit dem "trigger" passen, aber MadMax-FHEM hat völlig recht, dass der "Teilcode" völlig verbogen ist...

Das kann man dann im Event-Monitor sehen, und dann ggf. auch die durch das notify ausgelöste Reaktion, die hier mangels passendem "Suchmuster" wohl ausfällt.

(Aber mal ernsthaft: Welche Grundlagendokumente in FHEM hast du denn schon gelesen und wie lange ist das her? Die Frage ist übrigens ernst gemeint, auch wenn sie sarkastisch klingen mag!)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Ralle

#11
Hallo zusammen,
sorry für die späte Antwort.

Ja, das kommt wenn man den Code einfach kopiert und vergisst den If anzupassen.
Aber Fehlermeldung gab es auch keine (habe aber auch den globalen verbose auf 1 stehen ?).

Meine Kenntnisse mit der Syntax sind eher gering und die Grunddokumente habe ich vor langer Zeit mal gelesen.
Helfe mir halt so weit ich kann mit diesem Forum, denn mir fehlt einfach die Zeit das alles jedes mal aufzufrischen.

Aber auch mit der aktuellen Korrektur funktioniert es auch nicht.

Logausgabe. Log3(undef, 1, "EVENT: $EVENT    EVTPART1: $EVTPART1    EVTPART2: $EVTPART2");
LichtWetterFaktor:light:.* {
my $hellwert = ReadingsNum("LichtWetterFaktor","light",0);
if($hellwert <= 0){
    fhem ("set TabletWohnzimmer screenBrightness 20");
  }
elsif($hellwert <= 1){
    fhem ("set TabletWohnzimmer screenBrightness 30");
  }
elsif($hellwert <= 2){
    fhem ("set TabletWohnzimmer screenBrightness 60");
  }
elsif($hellwert <= 3){
    fhem ("set TabletWohnzimmer screenBrightness 80");
  }
elsif($hellwert <= 4){
    fhem ("set TabletWohnzimmer screenBrightness 100");
  }
elsif($hellwert <= 5){
    fhem ("set TabletWohnzimmer screenBrightness 120");
  }
elsif($hellwert >= 6){
    fhem ("set TabletWohnzimmer screenBrightness 160");
  }
}


Mit dem auslösen des Triggers komme ich aber auch nicht weiter. (keine Meldung im Log)
trigger LichtWetterFaktor light 2


Im Event Monitor sehe ich hier nur
020-11-26 16:15:16 Twilight LichtWetterFaktor light 2
Wie ich den Event Monitor sonst noch bediene muss ich auch nochmal nachlesen. (um den Fragen nach meinen Kenntnissen dazu zuvorzukommen ;))





Raspberry 3, Homematic HMLAN, HM Rolladensteuerung, MySensors, MAX CUL (Umbau Telekatz), Sonoff mit Easy-ESP, Arduino, MQTT, USV(Powerbar), 433Mhz Steckdosen

Beta-User

...dieser Code, WAS ist DAS? Ist das die DEF von einem notify...? Dann ist es klar, dass das nicht paßt, denn das Event "Logausgabe....*" wird ja auch nicht getriggert... ::)

Bitte commandref oder Wiki zu notify bemühen - falls das ein notify-Code war, wie im ersten Post noch...:
LichtWetterFaktor:light:.* { [...]
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Ralle

Zitat...dieser Code, WAS ist DAS? Ist das die DEF von einem notify...? 
Ein klares Ja

ZitatDann ist es klar, dass das nicht paßt, denn das Event "Logausgabe....*" wird ja auch nicht getriggert... ::
verstehe ich nicht  ::) da fehlt mir der Hintergrund.
Was muss ich denn machen damit es funktioniert ?

Raspberry 3, Homematic HMLAN, HM Rolladensteuerung, MySensors, MAX CUL (Umbau Telekatz), Sonoff mit Easy-ESP, Arduino, MQTT, USV(Powerbar), 433Mhz Steckdosen

Beta-User

#14
 ::) :o ::) Also....

(Ungetestet) für die DEF:
LichtWetterFaktor:light:.* {
  Log3($SELF, 4, "$SELF - EVENT: $EVENT    EVTPART1: $EVTPART1 ");
  if( $EVTPART1 == 1 ){
    return fhem( "set TabletWohnzimmer screenBrightness 30" );
  }
  if( $EVTPART1 == 6 ){
    return fhem( "set TabletWohnzimmer screenBrightness 160" );
  }
  my $bri = ($EVTPART1+1)*20;
  return fhem(" set TabletWohnzimmer screenBrightness $bri" );
}

Dann setzt du das notify auf verbose 4 (im code: $SELF in Log3)... Wenn alles funktioniert, machst du entweder die Zeile raus oder löschst das verbose (unterstellt, global steht es weiter auf 3) => keine Log-Einträge mehr ;) .
Die return-Anweisungen brechen dann direkt ab, so dass das ganze weitere else-"Gelumpe" (hier) auch weg kann...

$EVTPART2 etc. gibt es nicht => Fehler...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors