99_utils code Probleme Fehler in log

Begonnen von Fire1990, 01 September 2013, 18:01:59

Vorheriges Thema - Nächstes Thema

sasquuatch

ich habe den wecker inzwischen so wie unten in meiner 99_myUtils.pm stehen. die 99_myutils.pm wird fehlerlos gespeichert, aber das At wird ohne $we bzw. $wday erstellt :S

##########################################################################################
##########################################################################################
###########-----Wecker Werktage Notify-----############
#########################################################
sub
WeckerWerktageDummyNotifyUtils()
{
if (Value("WeckerWerktageDummy") eq "Aus")
{
fhem("delete atMarantzWerktageAn");
fhem("delete atMarantzWerktageAus");
}
else
{
my ($wday) = @_;
fhem("delete atMarantzWerktageAn");
fhem("define atMarantzWerktageAn at *".Value("WeckerWerktageDummy").":00 {if (($wday == 1) || ($wday == 2) || ($wday == 3) || ($wday == 4) || ($wday == 5)) {set Marantz on}}");
fhem("attr atMarantzWerktageAn room Wecker,Home");
fhem("attr atMarantzWerktageAn group Aktiv");
#######
#######--hier kommt der Timer, der nach X min. alles ausschaltet--############
#######
my $weckzeit = Value("WeckerWerktageDummy").":00";
my $Marantz_aus = TU_Get_Increment($weckzeit,"01:30:00");
fhem("delete atMarantzWerktageAus");
fhem("define atMarantzWerktageAus at *".$Marantz_aus." {if (($wday == 1) || ($wday == 2) || ($wday == 3) || ($wday == 4) || ($wday == 5)) {set Marantz off}}");
fhem("attr atMarantzWerktageAus room Wecker,Home");
fhem("attr atMarantzWerktageAus group Aktiv");
}}
#########################################################
###########-----Wecker Wochenende Notify-----############
#########################################################
sub
WeckerWochenendeDummyNotifyUtils()
{
if (Value("WeckerWochenendeDummy") eq "Aus")
{
fhem("delete atMarantzWEAn");
fhem("delete atMarantzWEAus");
}
else
{
my ($we) = @_;
fhem("delete atMarantzWEAn");
fhem("define atMarantzWEAn at *".Value("WeckerWochenendeDummy").":00 {if ($we) {set Marantz on}}");
fhem("attr atMarantzWEAn room Wecker,Home");
fhem("attr atMarantzWEAn group Aktiv");
#######
#######--hier kommt der Timer, der nach X min. alles ausschaltet--############
#######
my $weckzeit = Value("WeckerWochenendeDummy").":00";
my $MarantzWochenende_aus = TU_Get_Increment($weckzeit,"01:30:00");
fhem("delete atMarantzWEAus");
fhem("define atMarantzWEAus at *".$MarantzWochenende_aus." {if ($we) {set Marantz off}}");
fhem("attr atMarantzWEAus room Wecker,Home");
fhem("attr atMarantzWEAus group Aktiv");
}}


RomanticBoy83

Hier fehlen wohl die grundlegenden Verständnisse für das Programmieren!
Die Antworten sind sehr eindeutig und verständlich!
Nochmal mit anderen Worten (wie erkläre ich es meinem Kind):
1) Du sollst deine Methode umbenennen in "WeckerWerktageDummyNotifyUtils($)". Somit möchte deine Methode eine zusätzliche Variable erhalten, welche sie benutzen kann.
2) Sobald Du "WeckerWerktageDummyNotifyUtils" in dienem Fhem aufrufst, sollst du dieses mit "WeckerWerktageDummyNotifyUtils($we)" machen.
dadurch übergibst du den Wert der Variable we an deine Methode.
3) Um diese Variable nun auch verwenden zu können, must du diese einmalig deklarieren. Dafür sollst du die Zeile "my ($we) = @_;" einmalig - vorzugsweise am Anfang - in deine Methode aufnehmen.
4) nun kannst du Aufgrund der Festlegung mit "my" den Namen $we überall aufrufen und verwenden. Diese Variable wird nun den gewünschenten Inhalt haben.

sasquuatch

#17
Zitat von: RomanticBoy83 am 16 September 2015, 17:14:35
Hier fehlen wohl die grundlegenden Verständnisse für das Programmieren!
Die Antworten sind sehr eindeutig und verständlich!
Nochmal mit anderen Worten (wie erkläre ich es meinem Kind):
warum den gleich persönlich werden und seit wann muss man den grundlegendes Verständnis für das Programmieren haben für eine freundliche Hausautomation, habe ich dir irgendwas getan?

Zitat von: RomanticBoy83 am 16 September 2015, 17:14:35
1) Du sollst deine Methode umbenennen in "WeckerWerktageDummyNotifyUtils($)". Somit möchte deine Methode eine zusätzliche Variable erhalten, welche sie benutzen kann.
2) Sobald Du "WeckerWerktageDummyNotifyUtils" in dienem Fhem aufrufst, sollst du dieses mit "WeckerWerktageDummyNotifyUtils($we)" machen.
dadurch übergibst du den Wert der Variable we an deine Methode.
d.h. zwei Werte ändern und dann ist schon alles richtig, das war´s, mehr nicht?

müsste dann doch so aussehen:

aus der 99_myutils.pm

###-----Wecker Wochenende Notify-----###
sub
WeckerWochenendeDummyNotifyUtils($)
{
my ($we) = @_;
if (Value("WeckerWochenendeDummy") eq "Aus")
{
fhem("delete atMarantzWEAn");
fhem("delete atMarantzWEAus");
}
else
{
fhem("delete atMarantzWEAn");
fhem("define atMarantzWEAn at *".Value("WeckerWochenendeDummy").":00 {if ($we) {set Marantz on}}");
fhem("attr atMarantzWEAn room Wecker,Home");
fhem("attr atMarantzWEAn group Aktiv");
#######--hier kommt der Timer, der nach X min. alles ausschaltet--############
my $weckzeit = Value("WeckerWochenendeDummy").":00";
my $MarantzWochenende_aus = TU_Get_Increment($weckzeit,"01:30:00");
fhem("delete atMarantzWEAus");
fhem("define atMarantzWEAus at *".$MarantzWochenende_aus." {if ($we) {set Marantz off}}");
fhem("attr atMarantzWEAus room Wecker,Home");
fhem("attr atMarantzWEAus group Aktiv");
}}


mein notify:

define WeckerWochenendeDummyNotify notify WeckerWochenendeDummy {WeckerWochenendeDummyNotifyUtils($we);}


der "DEF" vom entstehenden At, wenn ich den Wecker gestellt habe, sieht so aus
*06:40:00 {if (0) {set Marantz on}}
da taucht dann aber eine "(0)" anstatt einem "($we)" auf. habe mich schon die ganze Zeit gefreut, dass es jetzt endlich geht und nix ist.
Wenn ich das ganze mit meinem WochenWecker und "(wday)" mache, steht dort allerdings eine "(3)" :S

Zitat von: RomanticBoy83 am 16 September 2015, 17:14:35
3) Um diese Variable nun auch verwenden zu können, must du diese einmalig deklarieren. Dafür sollst du die Zeile "my ($we) = @_;" einmalig - vorzugsweise am Anfang - in deine Methode aufnehmen.
wo kommt die den zweimal vor, ich sehe es einfach nicht :(
und ist die dort jetzt besser aufgehoben?

RomanticBoy83

#18
Jetzt bist du doch schon fast am Ziel! (und angreifen wollte ich dich überhaupt garnicht - ich bin selber blutiger Anfänger und kämpfte vor kurzen mit genau diesen Problemen und immer wieder neuen und schrieb dir auch noch eine falsche Antwort weil ich nicht richtig gelesen hatte!
Zu deinem Problem:
*06:40:00 {if (0) {set Marantz on}}
"Natürlich haben wir heute nicht Wochenende - $we == 0. Wenn du es jetzt nocheinmal versuchts, dann wird aus der 0 eine 1, denn heute ist nun doch Wochenende!"
Du must es nun nur noch hinbekommen, dass $we als String interpretiert wird und nicht als Variable. Es gibt mehrere Sonderzeichen, zudenen auch das Dolarzeichen gehört. Möchtest du diese in einen String nutzen, dann \$ nur so.

edit:
Ich schaue gerade deinen Quelltext genauer an um einmal zu verstehen, was du erreichen möchtest - du benutzt ja $we nirgendswo. Demzufolge ist das mit der Variablenübergabe auch völlig umsonst und unnötig! Das Problem ist tatsächlich ausschließlich das Dollarzeichen bei dir und hat mit den vorhergehenden Erläuterungen hier im Thema nix weiter zu tun.

sasquuatch

#19
wenn man was in Foren liest, versteht man schnell etwas falsch, so wie ich mal wieder, deswegen meine Verwunderung.

die Lösung des ganzen ist tatsächlich der Backslash gewesen, damit funktioniert es endlich. Danke für die Hilfe.

falls es hier jemand interessiert, sieht jetzt so im Ganzen aus ;)

##-----Wecker Wochenende Notify-----###
sub
WeckerWochenendeDummyNotifyUtils($)
{
my ($we) = @_;
if (Value("WeckerWochenendeDummy") eq "Aus")
{
fhem("delete atMarantzWEAn");
fhem("delete atMarantzWEAus");
}
else
{
fhem("delete atMarantzWEAn");
fhem("define atMarantzWEAn at *".Value("WeckerWochenendeDummy").":00 { fhem('set Marantz on') if (\$we)}");
fhem("attr atMarantzWEAn room Wecker,Home");
fhem("attr atMarantzWEAn group Aktiv");
#######--hier kommt der Timer, der nach X min. alles ausschaltet--############
my $weckzeit = Value("WeckerWochenendeDummy").":00";
my $MarantzWochenende_aus = TU_Get_Increment($weckzeit,"01:30:00");
fhem("delete atMarantzWEAus");
fhem("define atMarantzWEAus at *".$MarantzWochenende_aus." { fhem('set Marantz off') if (\$we)}");
fhem("attr atMarantzWEAus room Wecker,Home");
fhem("attr atMarantzWEAus group Aktiv");
}}