Meine ersten zwei Notifies :)

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

Vorheriges Thema - Nächstes Thema

Rince

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 :-)
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)

Puschel74

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
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.

Rince

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...
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)

Puschel74

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
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.

Rince

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 :)
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)

Rince

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.
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)

Puschel74

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
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.

Rince

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.
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)

Puschel74

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
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.

Rince

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 ?
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)

Puschel74

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.
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.

Rince

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";;\
}\
}\
}
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)

Puschel74

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
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.

Puschel74

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";;\
    }\
  }\
}
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.

Rince

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";;\
    }\
  }\
}
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)