FritzBoy Anruf geht ein

Begonnen von djhans, 19 November 2013, 18:00:17

Vorheriges Thema - Nächstes Thema

djhans

Hallo,
kriege es einfach nicht hin:
#Anruf geht ein
define TelefonAN notify FB7390:event:.ring {\
  my $number =(ReadingsVal("Fritz_Box","external_number",99));;\
  if ($number == 990781) {\
   fhem "set Dreambox volume 10";;\
  }\
\
}
#Anruf beendet
define TelefonAUS notify FB7390:event:.disconnect { \
if ($number == 990781) {\
  fhem "define Latenz at +00:00:02 set Dreambox volume 55";;\
}\
\
}
#


wenn ein Anruf auf 990781 eingeht, soll die DreamBox die lautstärke auf 10 setzten. wenn der Anruf beendet ist, wieder auf 55
das funzt aber nicht!

Im logfile steht:
TelefonAUS return value: Global symbol "$number" requires explicit package name at (eval 169) line 1.

was bedeutet das?

kann jemand helfen? Irgendwie kann fhem mit der Variablen "number" nix anfangen

danke,
Christian.

Puschel74

Hallo,

du musst, so wie in TelefonAn $number erstmal den Wert zuweisen.
Im wiki-Artikel steht aber das Variablen nur lokal gelten und das Beispiel im WIKI ist auch richtig.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

djhans

Hm,
das verstehe ich nicht.
Wo muss ich der variablen einen wert zuweisen? Ich verstehe die Fhem logik einfach nicht. $number bekommt doch durch den FritBoxaufruf einen Wert zugewiesen und wird dazu gesetzt. Oder ist $number jeweils nur in TelefonAN bzw. TelefonAus gültig.

dann ist es klar! Nur in welcher sektion definiere ich dann $number als Global gültig!

Aller Anfang ist schwer... wird wohl noch ein bissl dauern, bis ich es hab. Perl scheint schon sehr speziell zu sein. auch das \} erschließt sich mir nicht. Die Klammer ist klar, aber der \ und die zwei ;; sind schon sehr eigenartig...

Junge, Junge, da muss ich wohl ganz weit vorne anfangen, wenn ich die Syntax verstehen will! so richtig logisch finde ich das alles noch nicht...  :-\

djhans


Puschel74

Hallo,

diese 2 notifys sind für FHEM wie 2 Paar Schuhe.
Das eine kann grün sein und das andere blau.
Variablen in einem notify sind nur innerhalb dieses einen notify gültig - daher auch die Fehlermeldung bei dir.

Du hast das zweite notify um
my $number =(ReadingsVal("Fritz_Box","external_number",99));;\
gekürzt - im WIKI steht diese Zeile (und noch andere) drin.

FHEM ist in Perl geschrieben.
Mit einem { sagst du zu fhem das es nun Perl-Code zum bearbeiten bekommt.
Jede { bekommt auch eine }
Innerhalb von diesen {} kannst du dann ganz normal Variablen deklarieren und diesen Werte zuweisen.
Diese Variablen "vergisst" FHEM aber wieder wenn das notify abgearbeitet wurde.
Wenn innerhalb von diesen {} FHEM etwas machen soll musst du das explizit angeben:
fhem "set Dreambox volume 10";;\

Die \ sagen Perl einfach nur das hier ein Zeilenumbruch kommt und der Code in der nächsten Zeile weiter geht.
Ein ; schliesst eine Befehlszeile ab - das muss für Perl aber verdoppelt werden - also ;; und da ein Zeilenumbruch folgt kommt ein ;;\

\ und ;;\ könntest du als Anfänger aber vergessen wenn du das DEF eines notify bearbeitest - was auch klüger wäre.
siehe Screenshot.

Ich habe mal ein beliebiges kurzes notify von mir genommen um zu zeigen worauf du klicken kannst.
Ein neues notify legst du einfach mit
define <eindeutiger_name> notify <Gerät>:<regexp> {}
an
Und nach einem Klick auf DEF kannst du den Code bearbeiten - klar ist jetzt noch leer aber da kommt dann der Code rein.

Wie du im Screenshot siehst habe ich nur die Befehlszeilen mit ; abgeschlossen.
Den Rest macht FHEM beim speichern für mich.
Und FHEM macht das schon richtig daher kümmer ich mich nicht um sowas.
Wenn der Code passt und alles klappt wie ich das will kommt noch ein Klick links oben auf
Zitatsave config
damit der code auch erhalten bleibt - sonst ist er beim nächsten Neustart von FHEM wieder weg.

Ein Perl-Buch wäre auch ratsam zur Hand zu haben bzw. zu lesen - das hilft ungemein.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

djhans

Hallo Puschel,
tja, ich muss gestehen, das habe ich mirviel einfacher vorgestellt....

Wie dem auch sei, ich hätte nie gedacht, das ich in meinem Alter (mein Gott zu meiner Schulzeit gab es C64 Basic und für die Profis "Turbo" -Pascal) noch anfange, Perl zu lernen.
Aber da muss ich wohl durch, wenn ich mit fhem und meinen Spielereien weiter kommen möchte...

Ich werde dann morgen weiter experimentieren und mir Deine Erklärungen noch mal in Ruhe reinziehen...heute schaffe ich das nicht mehr, die Birne glüht schon!

Und nochmals ganz lieben Dank für Deine Unterstützung!

Gruß und schönen Abend,
Christian.

Puschel74

Hallo,

ähhhh
ZitatWie dem auch sei, ich hätte nie gedacht, das ich in meinem Alter (mein Gott zu meiner Schulzeit gab es C64 Basic und für die Profis "Turbo" -Pascal) noch anfange, Perl zu lernen.

Ich hatte auch einen C64 und habe mit Basiv angefangen und ja- ich ging dort auch gerade zur Schule.
Später kam dann ein Amiga500 - Gott war die Kiste schnell
Aber ich fühle mich nicht zu alt um Perl zu lernen  ;D

Aber immer schön Step-by-Step.
Die ersten Basicprogramme haben wir ja nicht in der ersten Nacht geschrieben  ;)

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

djhans

#6
Hi,
oh je! Ich wollte hier niemanden alt machen....

Aber warum hast Du nicht gleich gesagt, dass ich im 2. Notify die Zeile vergessen habe.... Jetzt kommt der Fehler auch nicht mehr, aber die Dreambox schaltet trotzdem nicht die Lautsärke runter...da ist noch ein anderer Fehler drin.

die "if" Abfrage scheint nicht zu gehen...

ich rufe von meiner ersten Rufnummer auf der 990781 an und nix passiert. Im Eventlog kann ich verfogen, dass die Fritte beide Nummern ausgibt.

Habe ich noch ein Denkfehler in meinem Vorhaben?

Junge, Junge, bin ich blind gewesen.....

Nachtrag:
....muss auch internal_number sein, nicht external, aber das isset nicht.

Christian.


djhans

Hallo,
jaja, nix sagen, habe den Fehler gefunden...

Autsch! das tat weh!

sorry,
djhans

P.S. muss natürlich auch das korrekte Gerät angeben FB7390 und nicht fritz_Box :-)

Puschel74

Hallo,

ZitatAber warum hast Du nicht gleich gesagt, dass ich im 2. Notify die Zeile vergessen habe

Weil ich bei meinen Auszubildenden die Erfahrung gemacht habe das die Lernkurve steiler nach oben geht wenn sie ihre Fehler auch selber finden  ;)

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

djhans

....auch wenn Die Tomaten auf den Augen haben???

Christian

Puschel74

Hallo,

dann suchen sie eben umso länger und die Pause wird später gemacht  ;D

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.