FHEM/Fritzbox und ablaufsteuernde Uservariablen

Begonnen von Guest, 30 Juli 2011, 08:26:31

Vorheriges Thema - Nächstes Thema

Guest

Originally posted by: <email address deleted>

Hallo.
Bin FHEM-Neuling und steuere ueber Fritz9370 plus CUL plus AVM's
Laborversion des FHEM-Servers
(5.0 from 2010-08-15 ($Id: fhem.pl,v 1.132 2011-02-12 11:27:16
rudolfkoenig Exp $), AVM Build: 84.05.04-19798) eine FS20-
Konfiguration.
Trotz intensiven Waelzens der FHEM-Homepage, fhem.pl-Referenz, fhem-
fuer-Einsteiger und der Postings hier habe ich noch
Verstaendnisprobleme beim Handling von Variablen, die Schaltvorgaenge
beeinflussen sollen - leider habe ich da nicht viel darueber gefunden.

Meine u. angefuegte Loesung dafuer funktioniert zwar, aber ich waere
den erfahrenen FHEM'lern sehr dankbar fuer ein paar Kommentare, ob ich
das prinzipiell richtig mache oder ob ich weit ab vom "richtigen" Weg
bin - ich habe da gewisse Zweifel, weil meine u.g. Realisierung fuer
das Handling von Variablen und die dadurch beeinflusste
Ablaufsteuerung irgendwie "wild" aussieht.

Hier die Aufgabenstellung: Es soll 4 ueber Handsender-Buttons
(BtnAlarmPassiveStates on/off, BtnAlarmActiveStates on/off) waehlbare
"Alarmierungsmodes" (ValAlarmStates, 0...3) geben. Wenn ein
Alarmsensor (SenKoPiri) anschlaegt, soll -abhaengig vom jeweiligen
Alarmierungsmode- ein Signalgeber unterschiedlich reagieren
(ActWzSigBello, ActWzSigAlarm, ActWzSigPiep) und zudem im
Alarmierungsmode ValAlarmStates = "3" bei wiederholter Ausloesung
(ValKoPiriAlarmCount) auch abwechselnd ActWzSigBello und ActWzSigAlarm
gesendet werden.
Mein (funktionierender) Loesungsversuch sieht auszugsweise so aus:
---------------------------------------
attr global userattr ValAlarmStates ValKoPiriAlarmCount
define ActWzSigBello FS20 12345672 1111
define ActWzSigAlarm FS20 12345672 1112
define ActWzSigPiep FS20 12345672 1113

define SenKoPiri FS20 12345671 2111
attr SenKoPiri ValKoPiriAlarmCount 0

define BtnAlarmPassiveStates FS20 12345671 3111
attr BtnAlarmPassiveStates ValAlarmStates 0
define BtnAlarmActiveStates FS20 12345671 4112

define MacAlarmPassiveStates notify BtnAlarmPassiveStates {
 if ("%" eq "off") {
  {fhem "attr BtnAlarmPassiveStates ValAlarmStates 0"}}
 if ("%" eq "on") {
  {fhem "attr BtnAlarmPassiveStates ValAlarmStates 1"}}
}

define MacAlarmActiveStates notify BtnAlarmActiveStates {
 if ("%" eq "off") {
  {fhem "attr BtnAlarmPassiveStates ValAlarmStates 2"}
 }
 if ("%" eq "on") {
  {fhem "attr BtnAlarmPassiveStates ValAlarmStates 3"}
 }
}

define MacKoPiri notify SenKoPiri {
 if (AttrVal("BtnAlarmPassiveStates","ValAlarmStates","") eq "3") {
  if (AttrVal("SenKoPiri","ValKoPiriAlarmCount","") eq "0") {
   {fhem "attr SenKoPiri ValKoPiriAlarmCount 1"}
   {fhem "set ActWzSigBello on"} }
  else {
   {fhem "attr SenKoPiri ValKoPiriAlarmCount 0"}
   {fhem "set ActWzSigAlarm on"}
  }
 }
 else {
  if (AttrVal("BtnAlPS","ValAlarmSts","") eq "2") {
   {fhem "set ActWzSigPiep on"} }
 }
}
----------------------------
Fragen dazu:
Auf der Fritz9370 und dem AVM-FHEM scheint $value nicht zu
funktionieren. Ist AttrVal wirklich der richtige Weg, um den Wert
einer Uservariablen abzufragen und {fhem "set ..."} dann der Weg,
deren Wert zu veraendern ? Wie kann man eine Uservariable unter diesen
Umstaenden inkrementieren (im Sinne ValKoPiroAlarmCount =
ValKoPiroAlarmCount+1 ) ?
Warum funktionieren simple Einzeiler-Perl-Scripts {...} und shell-
Kommandos "..." nicht wie der fhem.pl-Referenz beschrieben - ist dies
eine Einschraenkung der AVM-Version von FHEM ?
Wie debuggt man am besten, um z.B. User-Variable oder Zustaende bei
der Ausfuehrung von notify-Makros auf die Konsole zu bekommen - ein
{ print "xyz" } klappt da mit der AVM-Version nicht ?

Sorry fuer die Anfaenger-Fragen, aber es ist wirklich ueber Variablen-
Handling in FHEM nichts zu googlen.
Danke !!!

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

rudolfkoenig

                                                   

> Auf der Fritz9370 und dem AVM-FHEM scheint $value nicht zu
> funktionieren. Ist AttrVal wirklich der richtige Weg, um den Wert
> einer Uservariablen abzufragen und {fhem "set ..."} dann der Weg,
> deren Wert zu veraendern ?

$value spiegelt den Status eines Geraetes, d.h. das was bei "list" in Klammern
steht. Diesen Wert kann man (normalerweise) mit set bzw. setstate setzen,
setstate loest dabei keine Aktion aus, d.h. "setstate Lampe on" shaltet Lampe
_NICHT_ an. Mit AttrVal() liest man den Wert der Attribute aus. Die beiden
Verfahren sind nicht "kompatibel" :)

Fuer Benutzervariablen wie oben beschrieben gibt es mehrere Wege:
- dummy device (define MyVar dummy; set MyVar 1; $value{MyVar})
  Der Status von MyVar (1) wird beim herunterfahren von fhem in fhem.state
  gespeichert, und beim hochfahren wieder gesetzt, ohne zutun des Benutzers.
- Benutzerdefinierte Attribute, (userattr, wie in dem o.g. Beispiel)
  Um diese Werte in fhem.cfg zu "verewigen" muss man save aufrufen.
- Das %data perl hash (nur in perl, $data{MyVar} = 1;), diesen Wert kann man
  nicht (einfach) speichern.

Fuer das obige Beispiel koennte man ueberlegen, ob das Berechnen einer
Variable wirklich noetig ist, und das Abfragen beider Statii nicht reicht:
  if($value{BtnAlarmPassiveStates} eq "on" &&
     $value{BtnAlarmActiveStates}  eq "on") {
usw.  Komplexere Routinen wuerde ich in eigene Module (99_MyUtils.pm oder
Shellskript) auslagern.
 

> Wie kann man eine Uservariable unter diesen Umstaenden inkrementieren (im
> Sinne ValKoPiroAlarmCount = ValKoPiroAlarmCount+1 ) ?

Je nach Methode (siehe oben):
- { fhem "set MyVar ". ($value{MyVar}+1); }
- { $defs{MyVar}{STATE}++; } #*
- { fhem "attr MyDev MyAttr " . (AttrVal("MyDev","MyAttr","")+1); }
- { $attr{MyDev}{MyAttr}++; } #*
- { $data{MyVar}++; }

#* == Diese Datenstrukturen koennen sich (theoretisch) von einem fhem-release
zum naechsten aendern.


> Warum funktionieren simple Einzeiler-Perl-Scripts {...} und shell-
> Kommandos "..." nicht wie der fhem.pl-Referenz beschrieben - ist dies
> eine Einschraenkung der AVM-Version von FHEM ?

Diese Aussage haette ich gerne mit mehr Details belegt. Bitte bedaenken, dass
in dem AVM Paket enthaltene fhem ca 6 Monate alt ist.



> Wie debuggt man am besten, um z.B. User-Variable oder Zustaende bei
> der Ausfuehrung von notify-Makros auf die Konsole zu bekommen - ein
> { print "xyz" } klappt da mit der AVM-Version nicht ?

print sollte in fhem.log landen, ich wuerde aber fuer sowas { Log 1, "xyz" }
bevorzugen. Ich debugge mit
  % tail -f fhem.log          (Fenster 1)
  fhem> { Log 1, "xyz" }      (Fenster 2)
Mit einem Fenster:
  fhem> inform timer
  fhem> { fhem "trigger global xyz" }


> Sorry fuer die Anfaenger-Fragen, aber es ist wirklich ueber Variablen-
> Handling in FHEM nichts zu googlen.

Vielleicht hat kemand Lust solche Tipps im fhemwiki aufzunehmen. Fuer neue Ideen
bin ich auch offen, solange ich sie nicht umsetzen muss :)

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

On 30 Jul., 09:18, Rudolf Koenig wrote:
> > ...

Vielen Dank !! Es ist wirklich sehr nett, dass Sie sich die Muehe
einer so ausfuehrlichen Antwort gemacht haben. Mich haben Ihre
hilfreichen Hinweise nun doch besser "eingenordet".

> Vielleicht hat jemand Lust solche Tipps im fhemwiki aufzunehmen. Fuer neue Ideen
> bin ich auch offen, solange ich sie nicht umsetzen muss :)
Okay, als kleine Gegenleistung fuer die Hilfe koennte ich einen
Beitrag zu dem Thema zusammenstellen, sobald ich noch ein paar weitere
Erfahrungen damit gesammelt habe. Wie gesagt, scheint zumindest mir
das Thema User-Variablen etwas zu kurz in den Dokus und im Web
gekommen zu sein, und ich nehme schon an, da sind noch ein paar mehr
Newbies mit einem "???" da draussen, denen ein paar Wiki-Tipps gut
tun. Falls gewuenscht, alles in Englisch, nehme ich an ?
MfG & nochmals danke ! - rstr

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Zrrronggg!

                                                     

Das Wiki ist derzeit deutschlastig, was ich persönlich als
unproblematisch ansehe. Ich würde lieber den Schwellwert für den
Eintrag senken. Ich persönlich kann ganz gut englisch, aber meine
Muttersprache ist's nicht und ein Zwang zu englisch womöglich dazu
führen, das es (noch) weniger Einträge gibt.

On 30 Jul., 12:01, rstr wrote:
> On 30 Jul., 09:18, Rudolf Koenig wrote:
>
> > > ...
>
> Vielen Dank !! Es ist wirklich sehr nett, dass Sie sich die Muehe
> einer so ausfuehrlichen Antwort gemacht haben. Mich haben Ihre
> hilfreichen Hinweise nun doch besser "eingenordet".
>
> > Vielleicht hat jemand Lust solche Tipps im fhemwiki aufzunehmen. Fuer neue Ideen
> > bin ich auch offen, solange ich sie nicht umsetzen muss :)
>
> Okay, als kleine Gegenleistung fuer die Hilfe koennte ich einen
> Beitrag zu dem Thema zusammenstellen, sobald ich noch ein paar weitere
> Erfahrungen damit gesammelt habe. Wie gesagt, scheint zumindest mir
> das Thema User-Variablen etwas zu kurz in den Dokus und im Web
> gekommen zu sein, und ich nehme schon an, da sind noch ein paar mehr
> Newbies mit einem "???" da draussen, denen ein paar Wiki-Tipps gut
> tun. Falls gewuenscht, alles in Englisch, nehme ich an ?
> MfG & nochmals danke ! - rstr

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Guest

Originally posted by: <email address deleted>

Hi,
"fhem für Einsteiger" möchte ich sukzessive weiter ausbauen, ein
Abschnitt mit dummy-Devices kommt mit in die nächste Version.
Co-Autoren willkommen :-)
Gruß, Uli

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com