Befehlte aus fhem.conf in 99_myUtils übertragen

Begonnen von LastActionHero, 22 Februar 2014, 11:51:50

Vorheriges Thema - Nächstes Thema

LastActionHero

Hi!

ich baue gerade für meine Heizung einen Winter-Sommer-Taster (also An-Aus)
ich habe mich dazu dieses Codes hier bedient und für mich angepasst:
http://forum.fhem.de/index.php/topic,10153.msg56915.html#msg56915

#****** WinterSommerschaltung ***** Anfang ****
define HeizungWinterSommer dummy
attr HeizungWinterSommer alias Heizung einschalten (Winter)
attr HeizungWinterSommer devStateIcon on:sani_heating@green off:sani_heating@red
attr HeizungWinterSommer group Heizung
attr HeizungWinterSommer room Heizung
attr HeizungWinterSommer setList on off
define FileLog_HeizungWinterSommer FileLog ./log/HeizungWinterSommer-%Y.log HeizungWinterSommer
attr FileLog_HeizungWinterSommer logtype text
define WinterChecker notify HeizungWinterSommer {\
  if ("%" eq "on") {\
   fhem ("define HeizWS1 at +00:00:10 set Heizung.1_ClimRT_tr,Raum2 controlMode auto");;\
  }\
  else {\
   fhem ("define HeizWS6 at +00:00:10 set Heizung.1_ClimRT_tr controlManu on");;\
   fhem ("define HeizWS8 at +00:00:10 set Heizung.1_ClimRT_tr desired-temp 5.5");;\
  }\
}
# ******* WinterSommerschaltung***** Ende ****


in der fhem.conf läuft dieser Code so, jetzt würde ich aber gerne den IF teil als Parameter in die myUtils "verschieben" allerdings bekomm ichs nicht hin!

wie muss ich jetzt den winterchecker umbauen, damit ich den if befehl auf der config raus hab und im myutils aufrufen kann?[/code]

Puschel74

Hallo,

hier
http://www.fhemwiki.de/wiki/99_myUtils_anlegen
hat es ein paar Tipps dazu.

Du musst eigentlich nur sicherstellen das dein Code in einer SUB ist und aus dem notify passend aufgerufen wird.

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.

Markus Bloch

Zum Beispiel so:

in der fhem.cfg:


#****** WinterSommerschaltung ***** Anfang ****
define HeizungWinterSommer dummy
attr HeizungWinterSommer alias Heizung einschalten (Winter)
attr HeizungWinterSommer devStateIcon on:sani_heating@green off:sani_heating@red
attr HeizungWinterSommer group Heizung
attr HeizungWinterSommer room Heizung
attr HeizungWinterSommer setList on off
define FileLog_HeizungWinterSommer FileLog ./log/HeizungWinterSommer-%Y.log HeizungWinterSommer
attr FileLog_HeizungWinterSommer logtype text
define WinterChecker notify HeizungWinterSommer {WinterChecker("%")}
# ******* WinterSommerschaltung***** Ende ****


in der 99_myUtils.pm:


sub WinterChecker($)
{

my ($event) = @_;

  if ($event eq "on")
  {
    fhem ("define HeizWS1 at +00:00:10 set Heizung.1_ClimRT_tr,Raum2 controlMode auto");
  }
  else {
   fhem ("define HeizWS6 at +00:00:10 set Heizung.1_ClimRT_tr controlManu on");
   fhem ("define HeizWS8 at +00:00:10 set Heizung.1_ClimRT_tr desired-temp 5.5");
  }
}



Gruß
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)

LastActionHero

super, danke!

das  my ($event) = @_; hat mir gefehlt! was macht dieser befehl?
ich verstehe die zuordnung von variablen noch nicht so ganz, in fhem.conf rufe ich mit {WinterChecker("%")} den entsprechenden code aus myutils ab, und gebe den parameter % mit. Wofür steht %, denn das wird in myutils dann mit dem Winterchecker-$ weiterverwendet und dann bin ich raus, was die logik angeht :)

Markus Bloch

Ganz einfach:

Bei der Definition deiner SUB gibts du an wieviele Parameter die SUB hat:

WeatherChecker($) - heist 1 Parameter
WeatherChecker($$) - sind 2 Parameter
WeatherChecker($$$) - sind 3 Parameter
WeatherChecker($$;$) - sind mindestens 2 Parameter und optional ein dritter Parameter

Wenn die SUB startet, stehen die Parameter in @_ zur Verfügung (ein Array, welches nacheinander alle Argumente enthält.

In Perl kann man bei der Variablendeklaration mit Klammern arbeiten und so ein Array direkt auf mehrere Variablen aufteilen.

Dazu basierend auf den oben aufgeführten Beispielen also:

my ($arg1) = @_;
my ($arg1,$arg2) = @_;
my ($arg1,$arg2,$arg3) = @_;

Und damit hast du deine Übergabeparameter in der Funktion als Variablen verfügbar.

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)

Markus Bloch

Das % in WeatherChecker("%") ist ein Platzhalter innerhalb von notify, welcher ein Teil des auslösenden Events darstellt. Das % wird also, wenn ein Notify ausgelöst wird, mit einem Wert ersetzt.

Es gibt mehrere solcher Platzhalter die genauer in der Commandref zu notify dokumentiert sind: http://fhem.de/commandref.html#notify

Gruß
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)

Puschel74

Hallo,

ich muss trotzdem nochmal meinen Senf dazu geben  ;D

@ sollte gegen $NAME und
% gegen $EVENT getauscht werden.

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.

LastActionHero

#7
cool! Danke!

von selber programmieren noch weit entfernt, aber verstanden! das ist der erste schritt!

warum sollte man das austauschen?

Puschel74

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.

Markus Bloch

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

aktives Mitglied des FHEM e.V. (Technik)

LastActionHero

#10
ok, verstehe!

wenn ich      my ($event) = $NAME;     nehme, mault er aber wieder:
Global symbol "$NAME_" requires explicit package name at ./FHEM/99_myUtils.pm line 43.

wäre gut zu wissen, wie ich das umsetzen muss, habe auch noch in meinem code für die Heizungssteuerung mittels readingsgroup @_ drin. dann würde ich das gleich mit umschreiben!

LastActionHero

Also irgendwas scheint doch an meiner installation auch falsch zu sein.... Der meckert doch dass er den namen der heizung1 nicht bekommt... Obwohl er es eigentlich sollte...
Lightscenes funktioniert auch nicht, irgendwas ist doch da faul!!

Markus Bloch

In der Perl-Funktion brauchst du nichts zu verändern, die bleibt so, wie ich sie gepostet hatte

Diese Sache die Puschel erwähnt hat bezieht sich nur auf das notify.

Sein Vorschlag bezieht sich darauf das % in der Notify-Definition durch $EVENT zu tauschen, also:


# ALT:
define WinterChecker notify HeizungWinterSommer {WinterChecker("%")}


# NEU:
define WinterChecker notify HeizungWinterSommer {WinterChecker("$EVENT")}



mit $EVENT kann man einfacher erkennen worum es sich handelt als nur ein bloßes %-Zeichen.
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

LastActionHero

Achso, das war mir nicht klar! Hätte ich mir aber denken können... man ändert ja nicht die programmiersprache sondern die interpretation innerhalb der software :-/
das hatte ich schon gemacht und hat auch funktioniert!
Danke euch beiden!!

PS: offtopic-> das lightscene funktioniert jetzt auch, hatte libjson-perl nicht installiert