FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Ralle am 26 November 2020, 11:22:33

Titel: Tablet Helligkeit steuern
Beitrag von: Ralle am 26 November 2020, 11:22:33
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
Titel: Antw:Tablet Helligkeit steuern
Beitrag von: MadMax-FHEM am 26 November 2020, 11:37:38
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
Titel: Antw:Tablet Helligkeit steuern
Beitrag von: Beta-User am 26 November 2020, 11:38:43
Ergänzend: mach doch für die Fälle <6 einfach "$EVTPART1*20+20" ;) .
Titel: Antw:Tablet Helligkeit steuern
Beitrag von: MadMax-FHEM am 26 November 2020, 11:55:50
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
Titel: Antw:Tablet Helligkeit steuern
Beitrag von: Ralle am 26 November 2020, 12:24:28
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

Titel: Antw:Tablet Helligkeit steuern
Beitrag von: Beta-User am 26 November 2020, 12:27:48
Rom wurde nicht an einem Tag erbaut. Was das Auslösen des notify angeht: "trigger" ist dein Freund ;) . (help trigger in die Kommandozeile werfen...)
Titel: Antw:Tablet Helligkeit steuern
Beitrag von: Ralle am 26 November 2020, 12:47:38
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


Titel: Antw:Tablet Helligkeit steuern
Beitrag von: Beta-User am 26 November 2020, 12:52:35
lass mal die Doppelpunkte weg... (da war doch auch nur "device on" in help, oder?)
Titel: Antw:Tablet Helligkeit steuern
Beitrag von: Ralle am 26 November 2020, 13:03:29
Wäre das so korrekt ?
trigger LichtWetterFaktor light 2 (keine Fehlermeldung aber auch leider nichts im Log)

Sorry, bin leider ein Perl Dau
Titel: Antw:Tablet Helligkeit steuern
Beitrag von: MadMax-FHEM am 26 November 2020, 13:07:19
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
Titel: Antw:Tablet Helligkeit steuern
Beitrag von: Beta-User am 26 November 2020, 13:10:28
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!)
Titel: Antw:Tablet Helligkeit steuern
Beitrag von: Ralle am 26 November 2020, 16:19:14
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 ;))





Titel: Antw:Tablet Helligkeit steuern
Beitrag von: Beta-User am 26 November 2020, 16:23:19
...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:.* { [...]
Titel: Antw:Tablet Helligkeit steuern
Beitrag von: Ralle am 26 November 2020, 16:34:07
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 ?

Titel: Antw:Tablet Helligkeit steuern
Beitrag von: Beta-User am 26 November 2020, 16:43:35
 ::) :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...
Titel: Antw:Tablet Helligkeit steuern
Beitrag von: Ralle am 26 November 2020, 18:07:57
ZitatLog3($SELF, 4, "$SELF - EVENT: $EVENT    EVTPART1: $EVTPART1 ");
Erzeugt für mich wieder ein neues unlösbares Problem.
Bad regexp: Unmatched ( in regex; marked by <-- HERE in m/^Log3( <-- HERE $SELF,$/ at ./FHEM/91_notify.pm line 56.

wäre das korrekt Log3(my $SELF, 4, "$SELF - EVENT: $EVENT    EVTPART1: $EVTPART1 ");

else-"Gelumpe" mag sein, aber das verstehe ich noch halbwegs und scheint ja auch nicht grundsätzlich falsch, was du da schreibst ist mir viel zu kompliziert und (noch) nicht verständlich.
Titel: Antw:Tablet Helligkeit steuern
Beitrag von: Beta-User am 26 November 2020, 18:23:18
Hast du das 1:1 übernommen,  oder kreativ weiterentwickelt?Bitte ggf. list liefern....
Titel: Antw:Tablet Helligkeit steuern
Beitrag von: Ralle am 26 November 2020, 19:10:47
Mit deiner kompletten Syntax gib es keine Fehlermeldung.
Aber ob es wirklich funktioniert kann ich sicher immer noch nicht sagen, denn ein "trigger LichtWetterFaktor light 5"  z.B. löst den notify nicht aus.
Der Monitor sagt dazu:
2020-11-26 18:50:58 Twilight LichtWetterFaktor light 5

Im Log gibts keine Meldung dazu.

Anbei mal ein List AutoTabletHelligkeit
Internals:
   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" );
}
   FUUID      5c4a21ce-f33f-4a71-a857-f79f6d83e1c6d968
   NAME       AutoTabletHelligkeit
   NOTIFYDEV  LichtWetterFaktor
   NR         900
   NTFY_ORDER 50-AutoTabletHelligkeit
   REGEXP     LichtWetterFaktor:light:.*
   STATE      active
   TRIGGERTIME 1606411847.00952
   TYPE       notify
   READINGS:
     2020-11-26 19:04:21   state           active
Attributes:
   icon       day_night
   room       10.2_Amad
   verbose    4



Titel: Antw:Tablet Helligkeit steuern
Beitrag von: Beta-User am 26 November 2020, 20:38:51
Hm, ja, vermutlich braucht man doch den einen der Doppelpunkte im trigger...
trigger LichtWetterFaktor light: 5
Der trigger sollte halt immer so aussehen wie das Event im Event-Monitor, und da sind nur STATE-Events ohne "Reading:"-Angabe. Sorry, hatte ich vorhin auch nicht bedacht...
Titel: Antw:Tablet Helligkeit steuern
Beitrag von: Ralle am 27 November 2020, 10:20:09
Zitattrigger LichtWetterFaktor light: 5
Ja, so gehts.
@MadMax-FHEM @Beta-User
Nochmals vielen Dank für die Hilfe und Geduld. :)

Wieder was gelernt.
Der beste Lehrmeister ist halt immer noch der Fehler. ;)
Titel: Antw:Tablet Helligkeit steuern
Beitrag von: Beta-User am 27 November 2020, 10:26:39
Danke für die Rückmeldung. Markierst du den Thread noch als [gelöst], bitte?

(Steht im untersten der angepinnten Beiträge, wie das geht).
Titel: Antw:Tablet Helligkeit steuern
Beitrag von: Ralle am 27 November 2020, 10:50:59
Hallo nochmal,
würde gerne die Syntax mit dem Log Log3($SELF, 4, "$SELF - EVENT: $EVENT    EVTPART1: $EVTPART1 "); und den Variablen $EVTPART ($EVTPART1+1)*20; noch nacharbeiten damit ich zukünftig besser verstehe wie das funktioniert, finde aber zur Zeit noch nicht die passende Hilfe.
Evtl. hat jemand einen link parat ?
Titel: Antw:Tablet Helligkeit steuern
Beitrag von: Beta-User am 27 November 2020, 10:59:51
Gerne  :) ...
Links zum Nacharbeiten:
- ($SELF steht nirgends, funktioniert aber insbesondere in notify (und DOIF afaik))
- Log3 => https://wiki.fhem.de/wiki/DevelopmentModuleAPI#Log3
- $EVTPARTx => https://fhem.de/commandref_modular_DE.html#notify
Wenn du das über diesen Link öffnest, kommen direkt dahinter die Perl Specials, damit kannst du das ggf. etwas vertiefen ;) . Ich habe diesen Perl-Teil schon x Mal durchgesehen, es kommt immer mal wieder ein Aha-Erlebnis ::) ...
Titel: Antw:Tablet Helligkeit steuern
Beitrag von: Ralle am 27 November 2020, 13:24:17
Nochmals Danke  ;)