FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Rince am 30 Mai 2013, 11:32:26

Titel: Meine ersten zwei Notifies :)
Beitrag von: Rince am 30 Mai 2013, 11:32:26
Hi

voller Stolz präsentiere ich meine ersten zwei selbst zusammenkopierten Notifies:

## Jemand ruft mich an
define TelefonAN notify Fritz_Box:event:.ring { \
fhem "set OG_wz_WS_LICHT on";;\
fhem "set STV4 PAUSE";;\
}


## Anruf beendet
define TelefonAUS notify Fritz_Box:event:.disconnect { \
fhem "define Latenz at +00:00:10 set OG_wz_WS_LICHT off";;\
fhem "define Latenz2 at +00:00:10 set STV4 PLAY";;\
}



Funktionieren so wie sie sollen.

Das Telefon klingelt, der TV macht Pause, das Licht geht an
Das Telefonat ist beendet, 10 Sekunden später geht das Licht wieder aus und der Fernseher läuft weiter



Jetzt gibt es drei Sachen die stören:
1. Wenn das Licht beim Telefonat schon an war, sollte es beim Beenden vom Telefonat nicht ausgehen
2. Wenn mein Helligkeitssensor (CUL_HM_HM_Sen_MDIR_O_1A8306 brightness: 129) einen Wert von > 100 hat, braucht man das Licht nicht einschalten
3. Das notify läuft los, sobald ein .ring kommt. Es sollte nur laufen, wenn ein Ring auf meine Nummer 37979755 kommt, weil Faxgerät oder Schwiegerelterntelefonate interessieren mich nicht wirklich

Hat jemand zufällig eine coole Idee?
Titel: Aw: Meine ersten zwei Notifies :)
Beitrag von: Ralph am 30 Mai 2013, 12:24:55
Moin, bin auf Reisen, daher nur kurz.
Es gibt in der FB einen Job namens calllog mit 3 l.
Dorthin übergibt die FB die Nummer des Anrufenden und die angerufene Nummer.
Dies mit einen Shell-Script auswerten und einen Event generieren.
Titel: Aw: Meine ersten zwei Notifies :)
Beitrag von: Rince am 30 Mai 2013, 12:31:17
Danke für die Antwort. Ich hoffe ich habe sie richtig verstanden ;)
Wenn ja, dann trifft das nicht auf mich zu, weil:

Ich betreibe FHEM auf einem Raspberry.


Und im Logfile taucht das eigentlich alles auf was ich brauche:

2013-05-30_12:02:46 Fritz_Box event: ring
2013-05-30_12:02:46 Fritz_Box external_number: 081512345
2013-05-30_12:02:46 Fritz_Box external_name: JohnDoe
2013-05-30_12:02:46 Fritz_Box internal_number: 37979755
2013-05-30_12:02:46 Fritz_Box external_connection: SIP1
2013-05-30_12:02:46 Fritz_Box call_id: 0
2013-05-30_12:03:06 Fritz_Box event: connect
2013-05-30_12:03:06 Fritz_Box internal_connection: VoIP_3
2013-05-30_12:03:06 Fritz_Box call_id: 0
2013-05-30_12:04:42 Fritz_Box event: disconnect
2013-05-30_12:04:42 Fritz_Box call_duration: 96

Ich bekomme diese komischen if Schleifen und die Readings noch nicht hin.

Das notify müsste also zunächst prüfen, ob die internal_number = 37979755 ist, oder?
Titel: Aw: Meine ersten zwei Notifies :)
Beitrag von: Ralph am 30 Mai 2013, 12:37:42
Schade, ich habe nämlich gerade meinen alten Beitrag davon wiedergefunden.

http://www.kdgforum.de/viewtopic.php?f=67&t=11693 (//www.kdgforum.de/viewtopic.php?f=67&t=11693)
Titel: Aw: Meine ersten zwei Notifies :)
Beitrag von: Puschel74 am 30 Mai 2013, 12:38:36
Hallo,

ZitatDas notify müsste also zunächst prüfen, ob die internal_number = 37979755 ist, oder?
Ja, das wäre gut ;-)
Wenn
Zitatinternal_number: 37979755
müsstest du das evtl. mit einem ReadingsVal auslesen können.
my $number=ReadingsVal(("Fritz_Box","internal_number",99));
  if ($number = 37979755) {
hier der Code wenn die interne Nummer 37979755 ist


Ungetestet und ohne Gewähr.
Ich weiß - das lässt sich auch ohne den Umweg über die Variable lösen.
Ich schreib aber gern alles in Variablen - alte AmigaBasic-Marotte von mir.

Grüße
Titel: Aw: Meine ersten zwei Notifies :)
Beitrag von: Rince am 30 Mai 2013, 12:51:47
@Ralph: trotzdem vielen Dank :)


@Puschel

Danke schön.
Jetzt sieht es so aus:
## Jemand ruft mich an
define TelefonAN notify Fritz_Box:event:.ring { \

my $number=ReadingsVal(("Fritz_Box","internal_number",99));
  if ($number = 37979755) {
    fhem "set OG_wz_WS_LICHT on";;\
    fhem "set STV4 PAUSE";;\
  }
}




Und gibt folgende Fehlermeldung:
ZitatERROR:

Unknown command my, try help Unknown command if, try help Unknown command fhem, try help Unknown command }, try help


liegt das an dem oberen {\   ???

Titel: Aw: Meine ersten zwei Notifies :)
Beitrag von: Puschel74 am 30 Mai 2013, 12:53:41
Hallo,

nein. Das liegt daran das ich das DEF des notify bearbeite und nicht die Konfig.
wenn du den Code in die Konfig schreibst musst du dich bitte selbst um die Zeilenumbrüche \\ und ;; kümmern.

Grüße
Titel: Aw: Meine ersten zwei Notifies :)
Beitrag von: Rince am 30 Mai 2013, 13:08:56
???
Ich habe ein ziemlich großes Brett vorm Kopf ;)

Notifies gehören nicht in die fhem.cfg?
Titel: Aw: Meine ersten zwei Notifies :)
Beitrag von: Puschel74 am 30 Mai 2013, 13:16:03
Hallo,

natürlich gehören sie dahin.

Aber es kommt drauf an wo du sie bearbeitest.

Ich mach das hier:

(siehe Anhang / see attachement)

indem ich links auf DEF klicke.

Grüße
Titel: Aw: Meine ersten zwei Notifies :)
Beitrag von: Rince am 30 Mai 2013, 14:10:06
Aha.

Ok. Habe mir das Notify ohne Befehle in der fhem.cfg angelegt.
Dann bekomme ich unter Everything  mein Notify angezeigt.
Kann draufklicken und dann auf DEF.

Das sieht jetzt da drinnen so aus:
Fritz_Box:event:.ring {
my $number=ReadingsVal(("Fritz_Box","internal_number",99));
if ($number = 37979755) {
fhem "set OG_wz_WS_LICHT on";
fhem "set STV4 PAUSE";
}
}


In der fhem.conf sieht es so aus:
define TelefonAN notify Fritz_Box:event:.ring { \
my $number=ReadingsVal(("Fritz_Box","internal_number",99));;\
if ($number = 37979755) { \
fhem "set OG_wz_WS_LICHT on";;\
fhem "set STV4 PAUSE";;\
}\
}


Jetzt ergibt sich folgende Fehlermeldung im Log:

ZitatTelefonAN return value: Not enough arguments for main::ReadingsVal at (eval 160) line 1, near "))"

Das sieht zumindest schon besser aus.

Allerdings wird natürlich nix geschaltet :)
Titel: Aw: Meine ersten zwei Notifies :)
Beitrag von: Puschel74 am 30 Mai 2013, 14:13:49
Hallo,

jo. Fehler von mir.

my $number=(ReadingsVal("Fritz_Box","internal_number",99));

sollte besser passen.

Und wieder. Ungetestet und ohne Gewähr.

Grüße
Titel: Aw: Meine ersten zwei Notifies :)
Beitrag von: Rince am 30 Mai 2013, 14:29:26
HEUREKA!

Das klappt :)


Zu gut. Irgendwie ist es jetzt immer wahr.

## Jemand ruft mich an
define TelefonAN notify Fritz_Box:event:.ring { \
my $number=(ReadingsVal("Fritz_Box","internal_number",99));;\
if ($number = 37979755) { \
fhem "set OG_wz_WS_LICHT on";;\
fhem "set STV4 PAUSE";;\
}\
}



Auf der Detailseite der FritzBox steht aber die richtige Nummer drin.

Im Eventmonitor passt es auch :(


Wir kreisen das Ziel ein :)
Titel: Aw: Meine ersten zwei Notifies :)
Beitrag von: Puschel74 am 30 Mai 2013, 14:37:19
Hallo,

noch ein Fehler von mir ;-)
if ($number == 37979755) {

Grüße
Titel: Aw: Meine ersten zwei Notifies :)
Beitrag von: Rince am 30 Mai 2013, 14:49:29
TOP!

Jetzt läuft es :)
Danke Puschel!!!



Ich werde mal selber versuchen die anderen Optimierungen vor zu nehmen, jetzt habe ich ja ein schönes Beispiel :)
Ein Reading auf die Brightness.

Dann noch einen GetState (?) auf das Licht, ob es nicht schon an ist, sonst wäre ja Ausschalten hinterher doof :)
Titel: Aw: Meine ersten zwei Notifies :)
Beitrag von: Puschel74 am 30 Mai 2013, 14:57:22
Hallo,

gerne doch.

ZitatIch werde mal selber versuchen die anderen Optimierungen vor zu nehmen, jetzt habe ich ja ein schönes Beispiel :)
Ein Reading auf die Brightness.

Mach das mal.
Bei Fragen ... du bist ja registriert im Forum ;-)

ZitatDann noch einen GetState (?) auf das Licht, ob es nicht schon an ist, sonst wäre ja Ausschalten hinterher doof :)

Na ob das so einfach klappen wird?
Du müsstest wissen das das Licht schon eingeschalten war und nicht durch den Anruf eingeschalten wurde.

Ich würde, sicher mal wieder zu kompliziert, den Status des Lichts (ein oder aus) vor dem einschalten durch den Code in einen Dummy sichern
und beim abschalten prüfen ob der Dummy gesetzt ist.
Wenn ja war das Licht vor dem Anruf schon an - wenn nein hat der Anruf das Licht eingeschaltet und soll daher wieder ausgeschaltet
werden.

Aber hier führen ja auch wieder viele Wege zum Ziel und alle sind gleich richtig.
Vllt. nicht gleich elegant aber gleich richtig wenn dein Code am Ende das macht was du willst.

Grüße
Titel: Aw: Meine ersten zwei Notifies :)
Beitrag von: Rince am 30 Mai 2013, 15:52:17
So hatte ich mir das vorgestellt :-)
Ich kann ja diese Abfrage einfach nach dem ersten if laufen lassen. Und da dazwischen noch die Helligkeit, weil es sich sonst eh net lohnt weiter zu prüfen :-)
Titel: Aw: Meine ersten zwei Notifies :)
Beitrag von: Puschel74 am 30 Mai 2013, 15:57:08
Hallo,

Klar. Erst die Nummer prüfen, dann die Helligkeit und dann ob das Licht schon an war bevor du angerufen wurdest.
Alles andere würde in meinen Augen keinen Sinn ergeben.

Grüße
Titel: Aw: Meine ersten zwei Notifies :)
Beitrag von: Rince am 30 Mai 2013, 20:35:50
Yeah !

Aufgabe 1:
Erfolg:

## Jemand ruft mich an
define TelefonAN notify Fritz_Box:event:.ring { \
    my $number=(ReadingsVal("Fritz_Box","internal_number",99));;\
    my $Helligkeit=(ReadingsVal("CUL_HM_HM_Sen_MDIR_O_1A8306","brightness",99));;\
    my $LichtAlt=(ReadingsVal("OG_wz_WS_LICHT","state",99));;\
    if ($number == 37979755) { \
      fhem "set STV4 PAUSE";;\
      if ($Helligkeit <= 100) { \
      fhem "set OG_wz_WS_LICHT on";;\
      } \
    } \
}


Wenn die Helligkeit >100 ist, bleibt das Licht aus, TV Pause.
Jetzt grade bei 92, Licht geht an, TV Pause

Sehr schön.

Jetzt muss ich nur noch den State auswerten, also noch ein if mehr...


Und dann das ganze natürlich noch für den TelefonAus definieren...
Titel: Aw: Meine ersten zwei Notifies :)
Beitrag von: Puschel74 am 30 Mai 2013, 20:39:04
Hallo,

schön des es soweit klappt aber ...

Den State des Lichts brauchst doch nur für das Auflegen des Telefons auswerten.
Wenn du angerufen wirst ist es ja egal ob das Licht an war oder nicht.
Hier ist nur wichtig das das Licht nicht einschaltet wenn es hell genug ist, oder täusch ich mich jetzt?

Grüße
Titel: Aw: Meine ersten zwei Notifies :)
Beitrag von: Rince am 30 Mai 2013, 21:13:54
Nicht ganz, nein.

Was passiert, wenn das Licht schon an war, als es zu klingeln begann?

Dann wird es nach dem Telefonat dennoch ausgeschaltet.


Es kann aber durchaus sein, dass man Abends mit Licht im Wohnzimmer sitzt und dennoch das Telefon läutet :)
Deshalb muss ich vor dem Einschalten vom Licht den Status bekommen, um es nicht irrtümlich auszuschalten.

Ich denke mal, mein
my $LichtAlt=(ReadingsVal("OG_wz_WS_LICHT","state",99));;\
sichert mir den Zustand vor "dem Licht an, falls es dunkel genug ist"

Die $LichtAlt aus dem ersten Notify muss ich jetzt im zweiten Notify auswerten, dem TelefonAus.



Edit sagt:
Du hast soweit recht, als das das erste Notify eigentlich fertig ist :)
Das habe ich falsch ausgedrückt :)
Titel: Aw: Meine ersten zwei Notifies :)
Beitrag von: Rince am 31 Mai 2013, 11:05:57
Da steh ich nun wieder...

Mit meinen Problemen...


## Jemand ruft mich an
define TelefonAN notify Fritz_Box:event:.ring { \
    our $number=(ReadingsVal("Fritz_Box","internal_number",99));;\
    our $Helligkeit=(ReadingsVal("CUL_HM_HM_Sen_MDIR_O_1A8306","brightness",99));;\
    our $LichtAlt=(ReadingsVal("OG_wz_WS_LICHT","state",99));;\
    if ($number == 37979755) { \
      fhem "set STV4 PAUSE";;\
      if ($Helligkeit <= 200) { \
      fhem "set OG_wz_WS_LICHT on";;\
      } \
    } \
}



## Anruf beendet
define TelefonAUS notify Fritz_Box:event:.disconnect { \
our $LichtJetzt=(ReadingsVal("OG_wz_WS_LICHT","state",99));;\
if ($number == 37979755) { \
fhem "define Latenz2 at +00:00:10 set STV4 PLAY";;\
if ($LichtAlt ne $LichtJetzt) { \
fhem "define Latenz at +00:00:10 set OG_wz_WS_LICHT off";;\
}\
}\
}



Das TelenfonAn Notify läuft. Habe nur mal zum Test die Helligkeitsschwelle auf 200 gesetzt, 100 ist überaus brauchbar für die Praxis :)

Nun zu meinem TelefonAus...

Was ich mir dachte:
Eigentlich habe ich die Variablen ja schon bei TelefonAn gefüllt, müsste diese also einfach weiter nutzen können?
Habe dazu extra das my gegen ein our getauscht, angeblich leben Variablen damit bis zum Ende von FHEM.

Weiter dachte ich mir, ich speichere nochmal den Status vom Licht, und wenn das der alte Status ist, tu ich nix. (weil das Licht dann vorher schon an war)


Aber leider passiert nix außer folgender Fehlermeldung im Log:
ZitatTelefonAUS return value: Global symbol "$number" requires explicit package name at (eval 181) line 1.
Global symbol "$LichtAlt" requires explicit package name at (eval 181) line 1.
Titel: Aw: Meine ersten zwei Notifies :)
Beitrag von: Puschel74 am 31 Mai 2013, 16:19:10
Hallo,

versuch doch mal die Variablen nicht mit our sonder mit my zu deklarieren und eben in beiden Notifys nochmal ein zu bauen.

Grüße
Titel: Aw: Meine ersten zwei Notifies :)
Beitrag von: Rince am 31 Mai 2013, 19:55:31
Ok, hab das our wieder durch my ersetzt.

Die Version von TelefonAus läuft, aber berücksichtigt nicht den Lichtstatus vorher:
define TelefonAUS notify Fritz_Box:event:.disconnect { \
my $number=(ReadingsVal("Fritz_Box","internal_number",99));;\
my $LichtJetzt=(ReadingsVal("OG_wz_WS_LICHT","state",99));;\
if ($number == 37979755) { \
fhem "define Latenz2 at +00:00:10 set STV4 PLAY";;\
fhem "define Latenz at +00:00:10 set OG_wz_WS_LICHT off";;\
}\
}


Jetzt kommt das if für die beiden Lichtstatusse dazu:
if ($LichtAlt ne $LichtJetzt)
=> wenn also vorher das Licht aus war, und nicht gleich dem Licht Jetzt (=an) ist, geht es weiter mit dem Ausschalten

So der ganze Code:
define TelefonAUS notify Fritz_Box:event:.disconnect { \
my $number=(ReadingsVal("Fritz_Box","internal_number",99));;\
my $LichtJetzt=(ReadingsVal("OG_wz_WS_LICHT","state",99));;\
if ($number == 37979755) { \
fhem "define Latenz2 at +00:00:10 set STV4 PLAY";;\
if ($LichtAlt ne $LichtJetzt) { \
fhem "define Latenz at +00:00:10 set OG_wz_WS_LICHT off";;\
}\
}\
}


Gibt es folgende Fehlermeldung:
ZitatTelefonAUS return value: Global symbol "$LichtAlt" requires explicit package name at (eval 60) line 1.
Titel: Aw: Meine ersten zwei Notifies :)
Beitrag von: Puschel74 am 31 Mai 2013, 20:01:31
Hallo,

versuchs mal damit:
define TelefonAUS notify Fritz_Box:event:.disconnect { \
my $number=(ReadingsVal("Fritz_Box","internal_number",99));;\
my $LichtJetzt=Value("OG_wz_WS_LICHT");;\
my $LichtAlt=Value("<weißichnichtwiederdummyheisst>");;\
if ($number == 37979755) { \
fhem "define Latenz2 at +00:00:10 set STV4 PLAY";;\
if ($LichtAlt ne $LichtJetzt) { \
fhem "define Latenz at +00:00:10 set OG_wz_WS_LICHT off";;\
}\
}\
}

Wenn ein Device mehrere Readings liefert kannst du mit ReadingsVal ein bestimmtes rauspicken.
Da Schalter oder Dummys meist nur ein State besitzen kannst du Value nehmen - finde ich einfacher ;-)
Du musst in dem Beispiel nur den Dummy für LichtAlt eintragen dann sollte das klappen.
Die Fehlermeldung besagte das fhem mit $LichtAlt nichts anfangen kann - du willst das zwar prüfen hast es aber nirgends in dem Code deklariert.

Grüße
Titel: Aw: Meine ersten zwei Notifies :)
Beitrag von: Rince am 31 Mai 2013, 20:23:37
Hmmmm :(

define TelefonAN notify Fritz_Box:event:.ring { \
    my $number=(ReadingsVal("Fritz_Box","internal_number",99));;\
    my $Helligkeit=(ReadingsVal("CUL_HM_HM_Sen_MDIR_O_1A8306","brightness",99));;\
    my $LichtAlt=Value("OG_wz_WS_LICHT");;\
#    my $LichtAlt=(ReadingsVal("OG_wz_WS_LICHT","state",99));;\
    if ($number == 37979755) { \
      fhem "set STV4 PAUSE";;\
      if ($Helligkeit <= 200) { \
      fhem "set OG_wz_WS_LICHT on";;\
      } \
    } \
}



## Anruf beendet
define TelefonAUS notify Fritz_Box:event:.disconnect { \
my $number=(ReadingsVal("Fritz_Box","internal_number",99));;\
my $LichtJetzt=Value("OG_wz_WS_LICHT");;\
#my $LichtJetzt=(ReadingsVal("OG_wz_WS_LICHT","state",99));;\
if ($number == 37979755) { \
fhem "define Latenz2 at +00:00:10 set STV4 PLAY";;\
if ($LichtAlt ne $LichtJetzt) { \
fhem "define Latenz at +00:00:10 set OG_wz_WS_LICHT off";;\
}\
}\
}



Fehlermeldung:
ZitatTelefonAUS return value: Global symbol "$LichtAlt" requires explicit package name at (eval 67) line 1.
Was bitte ist das mit dem Dummy ?
Titel: Aw: Meine ersten zwei Notifies :)
Beitrag von: Puschel74 am 31 Mai 2013, 20:27:20
Hallo,

naja, du musst dir ja den Status des Lichts vor dem Anruf sichern.
Da das in einer Variable nicht klappt - zumindest weiß ich nicht wie du eine Variable über Notifys hinweg "Leben" lassen kannst - behelfe ich mir hier gerne mit Dummys.
Das sind Geräte in FHEM die aber keine Adresse benötigen.

define Licht_Alt dummy
Diesen kannst du dann mit
set Licht_Alt <Status>
befüllen und mit Value wieder auslesen.

Grüße

Edith: Die Fehlermeldung bei dir kommt daher:
...
if ($LichtAlt ne $LichtJetzt) { \
...
da $Licht_alt noch nicht mit my deklariert wurde.
Titel: Aw: Meine ersten zwei Notifies :)
Beitrag von: Rince am 31 Mai 2013, 21:52:26
Oh je.

Ich glaube, langsam falle ich dir auf die Nerven :(

Die Fehlermeldung jetzt:
Zitat2013.05.31 21:49:51 3: TelefonAN return value: Can't locate object method "set" via package "LichtAlt" (perhaps you forgot to load "LichtAlt"?) at (eval 83) line 1.

2013.05.31 21:50:03 3: TelefonAUS return value: Bareword "LichtAlt" not allowed while "strict subs" in use at (eval 84) line 1.
Bareword "LichtNeu" not allowed while "strict subs" in use at (eval 84) line 1.

Und der zugehörige Code:

#### Meine eigenen Dummys
define Licht_Alt dummy
define Licht_Neu dummy

##### Meine eigenen notifys

## Jemand ruft mich an
define TelefonAN notify Fritz_Box:event:.ring { \
    my $number=(ReadingsVal("Fritz_Box","internal_number",99));;\
    my $Helligkeit=(ReadingsVal("CUL_HM_HM_Sen_MDIR_O_1A8306","brightness",99));;\
    set LichtAlt=Value("OG_wz_WS_LICHT");;\
    if ($number == 37979755) { \
      fhem "set STV4 PAUSE";;\
      if ($Helligkeit <= 200) { \
      fhem "set OG_wz_WS_LICHT on";;\
      } \
    } \
}



## Anruf beendet
define TelefonAUS notify Fritz_Box:event:.disconnect { \
my $number=(ReadingsVal("Fritz_Box","internal_number",99));;\
set LichtNeu=Value("OG_wz_WS_LICHT");;\
if ($number == 37979755) { \
fhem "define Latenz2 at +00:00:10 set STV4 PLAY";;\
if (LichtAlt ne LichtNeu) { \
fhem "define Latenz at +00:00:10 set OG_wz_WS_LICHT off";;\
}\
}\
}
Titel: Aw: Meine ersten zwei Notifies :)
Beitrag von: Puschel74 am 31 Mai 2013, 21:56:41
Hallo,

Zitatch glaube, langsam falle ich dir auf die Nerven :(

Aber nur ganz langsam ;-)

Warum hast du wieder alles umgeworfen?
Evtl. hab ich mich mit dem set auch falsch ausgedrückt (dafür gibt es aber die commandref ;-) ).
Also dann stell ich mal um:
## Jemand ruft mich an
define TelefonAN notify Fritz_Box:event:.ring { \
    my $number=(ReadingsVal("Fritz_Box","internal_number",99));;\
    my $Helligkeit=(ReadingsVal("CUL_HM_HM_Sen_MDIR_O_1A8306","brightness",99));;\
    set LichtAlt=Value("OG_wz_WS_LICHT");;\ <----- ist falsch, so setzt fhem nichts
    if ($number == 37979755) { \
      fhem "set STV4 PAUSE";;\
      if ($Helligkeit <= 200) { \
      fhem "set OG_wz_WS_LICHT on";;\
      } \
    } \
}

## Anruf beendet
define TelefonAUS notify Fritz_Box:event:.disconnect { \
my $number=(ReadingsVal("Fritz_Box","internal_number",99));;\
set LichtNeu=Value("OG_wz_WS_LICHT");;\ <--- auch falsch, siehe oben
if ($number == 37979755) { \
fhem "define Latenz2 at +00:00:10 set STV4 PLAY";;\
if (LichtAlt ne LichtNeu) { \ <---- so wird der vergleich nie klappen
fhem "define Latenz at +00:00:10 set OG_wz_WS_LICHT off";;\
}\
}\
}


Das kann jetz ein bischen dauern. Ich bin nicht nur Codes am umstellen ;-)
Ich meld mich mit den (hoffentlich) richtigen wieder.

Grüße
Titel: Aw: Meine ersten zwei Notifies :)
Beitrag von: Puschel74 am 31 Mai 2013, 22:11:13
Hallo,

dann mal so:

## Jemand ruft mich an
define TelefonAN notify Fritz_Box:event:.ring { \
  my $number=(ReadingsVal("Fritz_Box","internal_number",99));;\
  my $Helligkeit=(ReadingsVal("CUL_HM_HM_Sen_MDIR_O_1A8306","brightness",99));;\
  my $Licht_An=Value("OG_wz_WS_Licht");;\
  if ($number == 37979755) { \
    fhem "set STV4 PAUSE";;\
    if ($Helligkeit <= 200) { \
      fhem ("set Licht_Alt on") if (($Licht_An) eq "on");;\
      fhem ("set OG_wz_WS_Licht on") if (($Licht_An) ne "on");;\
    } \
  } \
}


und

## Anruf beendet
define TelefonAUS notify Fritz_Box:event:.disconnect { \
  my $number=(ReadingsVal("Fritz_Box","internal_number",99));;\
  my $Licht_Neu=Value("OG_wz_WS_LICHT");;\
  my $Licht_Alt=Value("Licht_Alt");;\
  if ($number == 37979755) { \
    fhem "define Latenz2 at +00:00:10 set STV4 PLAY";;\
    if ($Licht_Alt ne $Licht_Neu) { \
      fhem "define Latenz at +00:00:10 set OG_wz_WS_LICHT off";;\
    }\
  }\
}
Titel: Aw: Meine ersten zwei Notifies :)
Beitrag von: Rince am 31 Mai 2013, 23:31:15
Juhu!!!

Ein kleiner Fehler war noch da,
my $Licht_An=Value("OG_wz_WS_Licht");;\
muss
my $Licht_An=Value("OG_wz_WS_LICHT");;\

lauten :)


Du siehst, ich gebe mir Mühe zu verstehen was du schreibst :)

Jetzt läuft es tatsächlich genau so, wie es laufen sollte :)


1000 Dank Puschel!




PS:
Hier der ganz funktionierende Code, für den Fall, dass es jemanden außer mir interessiert:
#### Meine eigenen Dummys
define Licht_Alt dummy
define Licht_Neu dummy

##### Meine eigenen notifys

## Jemand ruft mich an
define TelefonAN notify Fritz_Box:event:.ring { \
  my $number=(ReadingsVal("Fritz_Box","internal_number",99));;\
  my $Helligkeit=(ReadingsVal("CUL_HM_HM_Sen_MDIR_O_1A8306","brightness",99));;\
  my $Licht_An=Value("OG_wz_WS_LICHT");;\
  if ($number == 37979755) { \
    fhem "set STV4 PAUSE";;\
    if ($Helligkeit <= 100) { \
      fhem ("set Licht_Alt on") if (($Licht_An) eq "on");;\
      fhem ("set OG_wz_WS_LICHT on") if (($Licht_An) ne "on");;\
    } \
  } \
}



## Anruf beendet
define TelefonAUS notify Fritz_Box:event:.disconnect { \
  my $number=(ReadingsVal("Fritz_Box","internal_number",99));;\
  my $Licht_Neu=Value("OG_wz_WS_LICHT");;\
  my $Licht_Alt=Value("Licht_Alt");;\
  if ($number == 37979755) { \
    fhem "define Latenz2 at +00:00:10 set STV4 PLAY";;\
    if ($Licht_Alt ne $Licht_Neu) { \
      fhem "define Latenz at +00:00:10 set OG_wz_WS_LICHT off";;\
    }\
  }\
}
Titel: Aw: Meine ersten zwei Notifies :)
Beitrag von: Markus Bloch am 02 Juni 2013, 12:52:22
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
Titel: Antw:Meine ersten zwei Notifies :)
Beitrag von: Thoffi1978 am 05 Dezember 2014, 10:48:13
Hallo,

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

Vielen Dank
Titel: Antw:Meine ersten zwei Notifies :)
Beitrag von: 8PABenny am 05 Dezember 2014, 13:35:05
In der fhem.cfg sollte man nie direkt was eintragen. Diesen Fehler musste ich anfangs auch erst schmerzlich erfahren.
Titel: Antw:Meine ersten zwei Notifies :)
Beitrag von: Thoffi1978 am 08 Dezember 2014, 11:05:41
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";\     }\   }\ }
Titel: Antw:Meine ersten zwei Notifies :)
Beitrag von: Joker2002 am 23 Juni 2015, 21:22:14
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 ?

Titel: Antw:Meine ersten zwei Notifies :)
Beitrag von: dev0 am 24 Juni 2015, 10:16:33
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.
Titel: Antw:Meine ersten zwei Notifies :)
Beitrag von: Joker2002 am 25 Juni 2015, 10:23:42
Danke für den Hinweis, ich werde es korrigieren und bin gespannt ob es dann läuft
Titel: Antw:Meine ersten zwei Notifies :)
Beitrag von: Joker2002 am 16 Juli 2015, 21:04:15
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 ?
Titel: Antw:Meine ersten zwei Notifies :)
Beitrag von: Rince am 17 Juli 2015, 08:49:51
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.
Titel: Antw:Meine ersten zwei Notifies :)
Beitrag von: Joker2002 am 18 Juli 2015, 21:23:59
Danke für Deinen Tipp. Ich hab's hinbekommen.  ;D
Titel: Antw:Meine ersten zwei Notifies :)
Beitrag von: ujaudio am 19 Juli 2015, 07:14:37
Bei mir läuft FHEM auch auf Raspberry - wie kann ich da überhaupt die Fritzbox einbinden?
Titel: Antw:Meine ersten zwei Notifies :)
Beitrag von: Rince am 19 Juli 2015, 08:30:22
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