Meine ersten zwei Notifies :)

Begonnen von Rince, 30 Mai 2013, 11:32:26

Vorheriges Thema - Nächstes Thema

Markus Bloch

Hallo zusammen,

da ich persönlich kein Fan von Perl-Expressions direkt in der Definition bin, habe ich das folgendermaßen gelöst:

Ziel: Die Lautstärke meines Receivers drosseln, sobald es klingelt, oder ich anfange zu telefonieren. Sobald das Gespräch beendet ist, soll die Lautstärke wieder auf die ursprüngliche Lautstärke zurückgestellt werden.

fhem.cfg:


define Telefon_readings_notify notify FritzBox:event.* {LautstaerkeRegelung();;}

define Telefon_Automatik dummy
attr Telefon_Automatik alias Telefon Automatik
attr Telefon_Automatik fp_Wohnung 651,847,1,
attr Telefon_Automatik group Telefon
attr Telefon_Automatik room Konfiguration
attr Telefon_Automatik setList on off
   
define Telefon_Lautstaerke dummy
attr Telefon_Lautstaerke alias Lautstärke
attr Telefon_Lautstaerke group Telefon
attr Telefon_Lautstaerke room Konfiguration
attr Telefon_Lautstaerke setList :slider,-80,1,10


und in der Utils.pm:


sub LautstaerkeRegelung()
{
  my $event = ReadingsVal("FritzBox","event","");
  my $internal_number = ReadingsVal("FritzBox","internal_number","");
  my $lautstaerke = ReadingsVal("AV_Receiver","volume_level","");
  my $call_id = ReadingsVal("FritzBox","call_id","");
  my $receiver = Value("AV_Receiver");
  my $telefon_lautstaerke = Value("Telefon_Lautstaerke");
  my $telefon_automatik = Value("Telefon_Automatik");

  unless($event eq "" or $lautstaerke eq "" or $receiver eq "off" or $telefon_automatik eq "off")
  {
    if($internal_number eq "842XXXX")
    {
      if(not $event eq "disconnect" and $lautstaerke > $telefon_lautstaerke)
      {
       
           fhem "define tmp_AV_lautstaerke_".$call_id." dummy";

           fhem "set tmp_AV_lautstaerke_".$call_id." ".$lautstaerke;
         
           fhem "set AV_Receiver volume ".$telefon_lautstaerke;


       
      }
      elsif($event eq "disconnect")
      {
       
         if(defined($value{"tmp_AV_lautstaerke_".$call_id}))
         {
             fhem "set AV_Receiver volume ".$value{"tmp_AV_lautstaerke_".$call_id};
             fhem "delete tmp_AV_lautstaerke_".$call_id;
         }
      }
    }
  }

 return undef;

}


Nur als Beispiel.

Viele Grüße

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Thoffi1978

Hallo,

ist der Code direkt in die fhem.cfg einzupflegen oder mittels DEF?

Vielen Dank

8PABenny

In der fhem.cfg sollte man nie direkt was eintragen. Diesen Fehler musste ich anfangs auch erst schmerzlich erfahren.
Raspberry Pi, Homematic, Wifilight mit LW 12, Milightbridge mit 3 Milights,

Thoffi1978

Hallo Ihr.

Ich haben un versucht den Code für mich anzupassen, doch irgendwo klappt das nicht.
Die Dummys sind erfolgreich zu sehen. Doch es wird auf kein Anruf reagiert, bzw. der Lichstatus geschrieben.
Vielleicht kann mir einer mal über den Code schauen.
Die Helligkeitsregelung habe ich nicht.

Fritz_Box:event:.ring { \my $number (ReadingsVal("Fritz_Box","internal_number",99));\my $Licht_An=Value("Weihnachts_Beleuchtung3");\if ($number == 3999572) {\ { \fhem ("set Licht_Alt on") if (($Licht_An) eq "on");\ fhem ("set Weihnachts_Beleuchtung3 on") if (($Licht_An) ne "on");\ } \ } \ }

Fritz_Box:event:.disconnect { \   my $number=(ReadingsVal("Fritz_Box","internal_number",99));\   my $Licht_Neu=Value("Weihnachts_Beleuchtung3");\   my $Licht_Alt=Value("Licht_Alt");\   if ($number == 04531412100) { \     fhem "define Latenz2 at +00:00:10 set STV4 PLAY";\     if ($Licht_Alt ne $Licht_Neu) { \       fhem "define Latenz at +00:00:10 set Weihnachts_Beleuchtung3 off";\     }\   }\ }

Joker2002

Hallo,

bin beim Suchen nach einer solchen Funktion in Fhem auf diesen Threat gestoßen und wollte nun diese "Mute" Funktion auch bei mir integrieren.

Habe vorher entsprechend in der Fritzbox den Callmonitor aktiviert.

Dann habe ich Deinen bestehenden Code genommen und für mich folgendermaßen angepasst:

## Jemand ruft mich an
define Telefon_758872_AN notify Fritz_Box:event:.ring { \
  my $number=(ReadingsVal("Fritz_Box","internal_number",99));;\
    if ($number == 758872) { \
    fhem "set Onkyo mute on";;\
        } \
  } \
}

## Anruf beendet
define Telefon_758872_AUS notify Fritz_Box:event:.disconnect { \
  my $number=(ReadingsVal("Fritz_Box","internal_number",99));;\
    if ($number == 758872) { \
    fhem "define Latenz2 at +00:00:10 set Onkyo mute off";;\
        }\
  }\
}


Nachdem ich einen Testlauf gestartet habe, erhalte ich jedoch immer folgenden Fehler mit dem ich leider nichts anfangen kann.

Zitat2015.06.23 16:24:19 3: Telefon_758872_AUS return value: Can't modify single ref constructor in scalar assignment at (eval 688) line 1, at EOF
syntax error at (eval 688) line 1, near "\if"
syntax error at (eval 688) line 1, at EOF
Unmatched right curly bracket at (eval 688) line 1, at end of line


Könnt ihr mir vielleicht weiterhelfen ?


dev0

Zitat von: Joker2002 am 23 Juni 2015, 21:22:14
Unmatched right curly bracket at (eval 688) line 1, at end of line
In beiden Definitionen ist je eine } zuviel.

Joker2002

Danke für den Hinweis, ich werde es korrigieren und bin gespannt ob es dann läuft

Joker2002

so nach ein paar Wochen des Testens und rumprobierens komme ich leider nicht weiter.

mein Code sieht jetzt folgendermaßen aus:

Fritz_Box:event:.ring {\my $number=(ReadingsVal("Fritz_Box","internal_number",99));;\if ($number == 758872) {fhem ("set Onkyo mute on");;\}\}

leider erhalte ich immer diese Fehlermeldung mit der ich nichts anzufangen weiß:

2015.07.16 13:29:48 3: Telefon_758872_AN return value: Can't modify single ref constructor in scalar assignment at (eval 1381) line 1, at EOF
syntax error at (eval 1381) line 1, near "\if"
syntax error at (eval 1381) line 1, at EOF
syntax error at (eval 1381) line 1, at EOF


könnt ihr mir vielleicht nochmal helfen und mir einen Tipp geben, woran es liegt ?

Rince

Mein aktuelles Copy&Paste der DEF:

Anders als vorher:
- keine 99_myUtils nötig
- keine Unterscheidung nach internen Nummern
- dafür Abfrage des Telefonbuchs und besseres Behandeln von unbekannten Rufnummern.


FritzBox_CallMonitor:event:.ring {
my $AnruferName=(ReadingsVal("FritzBox_CallMonitor","external_name",99));
my $AnruferNummer=(ReadingsVal("FritzBox_CallMonitor","external_number",99));
if ($AnruferName ne "unknown") {
fhem ("set cubie_SB_PLAYER sayText Eure durchlauchten Hoheiten, $AnruferName bittet um eine Unterhaltung mit euch");
}
if ($AnruferName eq "unknown") {
if ($AnruferNummer eq "unknown") {
fhem ("set cubie_SB_PLAYER sayText Eure durchlauchten Hoheiten, ein geheimnisvoller Unbekannter bittet um ein Gespräch. Mehr kann ich nicht sagen.");
} else {
fhem ("set cubie_SB_PLAYER sayText Eure durchlauchten Hoheiten, ein Unbekannter bittet um ein Gespräch. Seine Nummer lautet $AnruferNummer");
}
}
}



@Joker2002
Was machen die ganzen Backslashes in dem Code?

Versuche mal den Code einfach im DEF erst mal schön zu formatieren.

So wie es im obigen Codebeispiel ist.
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Joker2002

Danke für Deinen Tipp. Ich hab's hinbekommen.  ;D

ujaudio

Bei mir läuft FHEM auch auf Raspberry - wie kann ich da überhaupt die Fritzbox einbinden?
Einen lieben Gruß
Jürgen

Rince

Noh nicht viel gelesen, gell?  ::)


Zum Beispiel:


Callmonitor
Modul teilt die Telefonnummer und Anrufernamen fhem mit. Das obige Codebeispiel wertet das aus um eine Sprachansage zu realisieren.


Das Modul FRITZBOX
kann viele praktische Dinge an der Box einstellen.
http://forum.fhem.de/index.php/topic,29725.0.html
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)