99_utils code Probleme Fehler in log

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

Vorheriges Thema - Nächstes Thema

Fire1990

Hallo habe diesen code in meiner eigen 99 utils Datei

sub Rollladen_aufwe() {
my $hm = sprintf($we);
if ($hm && (Value("Status") eq "Automatik")) {fhem("set HM.Rollladen Hoch")}
}


Doch nun bekomme ich diese Fehlermeldung habe versucht es zu Verstehen aber ich bin in Perl nicht so bewandert Fehler aus der log ist:
2013.09.01 17:54:31 1: reload: Error:Modul 99_myUtils deactivated:
 Global symbol "$we" requires explicit package name at ./FHEM/99_myUtils .pm line 63, <$fh> line 5.
Global symbol "$hm" requires explicit package name at ./FHEM/99_myUtils .pm line 68, <$fh> line 5.

kann mich jemand unterstützen der sich etwas besser auskennt benötige Hilfe
die restlichen Codes in der util funktionieren.

betateilchen

Probier doch einfach mal:


sub Rollladen_aufwe() {
if ($we && Value("Status") eq "Automatik") {fhem("set HM.Rollladen Hoch")}
}
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Fire1990

hallo keiner eine Idee was ich flach mache

betateilchen

Ich weiß zwar nicht, wen oder was Du flach machst, aber was Du falsch machst, kann ich Dir sagen: Du liest die Antworten nicht...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

crissiloop

Hallo,
wenn ich mich recht erinnere, muss die $we als Parameter an deine Funktion in der 99_util übergeben werden. Sonst ist es dort nicht verfügbar.

Gruß
Christian
FHEM 5.5 auf Cubietruck

1x HMLAN, 1x HMUSB, 12x HM-LC-Bl1 PBU-FM, 5x HM-LC-Sw1-Pl, 1x HM-LC-Sw1-FM, 2x HM-LC-Sw2-FM, 2x HM-SEC-RHS, 3x HM-SEC-SD, 8x HM-SEC-SC, 3x HM-RC-4-2, 1x HM-RC-8, 1x HM-Sec-SFA-SM, Jeelink, 7x Technoline TX 29 DTH-IT

betateilchen

Nö.

$we ist eine modulübergreifende Variable, die mit ihrem Inhalt fhem-weit zur Verfügung steht.


---
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Fire1990

Hallo Fehler besteht weiterhin immer noch
 Global symbol "$we" requires explicit package name at ./FHEM/99_xxUtils.pm line 67.

Code ist:
sub Rollladenxx_aufwochenende() {
if ($we && Value("Status.xx") eq "Automatik") {fhem("set HM.Rollladen_xx Hoch")}
}

stromer-12

Hast du auch folgende Zeilen am Anfang deiner 99_myUtils.pm ?
package main;
use strict;
use warnings;
use POSIX;

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

Fire1990

Hallo ja ist enthalten so sieht es aus:


#########################################################################
##
## Zweck.........: Zimmer Steuern
## Standort......: XX
## Typ...........: Fest eingebaute Module
## Besonderheiten: Steuerbefehle
##        
#########################################################################

package main;
use strict;
use warnings;
use POSIX;
sub
XXUtils_Initialize($$)
{
 my ($hash) = @_;
}
# -------------- Rollladen Christian Automatik --------------
## Steuerung
##Rollladen zu
sub RollladenXX_zu() {
if (Value("RolladenzustandXX") eq "offen") {fhem("set HM.Rollladen_Christian Runter")}
}
##Rollladen auf Wochenende
sub RollladenXX_aufwochenende() {
if ($we && Value("Status.XX") eq "Automatik") {fhem("set HM.Rollladen_XX Hoch")}
}
1;

Rolladen zu mit dem befehl sunset im rest der normalen befehlzeile geht nur diesen öffen mit sunrise am wochenende oder in der woche geht nicht

betateilchen


sub RollladenXX_aufwochenende($) {
my ($we) = @_;
if ($we && (Value("Status.XX") eq "Automatik")) {fhem("set HM.Rollladen_XX Hoch")}
}


Und dann RolladenXX_aufwochenende($we) verwenden zum Aufrufen.

(hat vermutlich was mit der Logik vom fhem-Start zu tun, was dazu führt, dass die 99_xxUtils die Variable $we noch nicht kennen)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: crissiloop schrieb am Mo, 09 September 2013 10:42wenn ich mich recht erinnere, muss die $we als Parameter an deine Funktion in der 99_util übergeben werden. Sonst ist es dort nicht verfügbar.

Ja, Du hast völlig recht. Sorry für meine zuerst falsche Antwort.
Nach meinen Tests von eben habe ich das auch festgestellt.


---
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

Sorry, ich lese die Anfaengerfragen nur sporadisch, betateilchen hat mich auf diese Frage aufmerksam gemacht. Meine Antwort ist hier: Link

Fire1990

gibt es eine Möglichkeit diese trotzdem irgendwie zu übernehmen oder wie müsste ich das schreiben das ich nach Wochenende oder nach Woche in der utils ordne

betateilchen

das habe ich doch oben schon geschrieben:

ZitatRolladenXX_aufwochenende($we) verwenden zum Aufrufen

also an der Stelle, wo Du die Funktion aufrufst, übergibst Du das $we als Funktionsvariable.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

sasquuatch

#14
Zitat von: betateilchen am 28 September 2013, 02:40:25

sub RollladenXX_aufwochenende($) {
my ($we) = @_;
if ($we && (Value("Status.XX") eq "Automatik")) {fhem("set HM.Rollladen_XX Hoch")}
}


Und dann RolladenXX_aufwochenende($we) verwenden zum Aufrufen.

(hat vermutlich was mit der Logik vom fhem-Start zu tun, was dazu führt, dass die 99_xxUtils die Variable $we noch nicht kennen)

Das ist wohl genau die Lösung die ich benötige um meinen "Einfacher Wecker in Verbinug mit (!$we) nur an Werktagen bzw. mit ($we) nur am Wochende zum laufen zu bekommen. Z.Zt. löst er halt jeden Tag aus.
Leider verstehe ich nicht, wie ich das bei mir umgesetzt bekomme und wo ich was in meine 99_myUtils.pm schreiben muss und ob ich auch was in meiner 99_Utils.pm verändern muss.

hier mal mein Auzsug aus der 99_myUtils.pm, dummy und notify lasse ich mal weg, die sind eigentlich standard.

NACHTRAG:
habe den Auszug mal so angepasst, wie ich meine das es richtig ist. Im Event Monitor sehe dann zwar das der Dummy gestellt wurde, aber es wurde kein Wecker definiert. Jetzt ist die frage, ob er jeden Tag bzw. WE geprüft wird welcher tag ist und das passiert immer um Mitternacht und erst dann wird der Wecker definiert oder es ist einfach nur falsch von mir :S
#####################################################
###########-----Wecker Notify Werktage  -----############
#########################################################
sub
WeckerWerktageDummyNotifyUtils()
{
if (Value("WeckerWerktageDummy") eq "Aus")
{
fhem("delete atMarantzWerktageAn");
fhem("delete atMarantzWerktageAus");
}
else
{
my ($wday) = @_;
fhem("delete atMarantzWerktageAn");
fhem("define atMarantzWerktageAn at $wday == 1 && $wday == 2 && $wday == 3 && $wday == 4 && $wday == 5 && *".Value("WeckerWerktageDummy").":00 set Marantz on");
fhem("sleep 1");
fhem("attr atMarantzWerktageAn room Wecker");
fhem("attr atMarantzWerktageAn group Aktiv");
###
my ($wday) = @_;
my $weckzeit = Value("WeckerWerktageDummy").":00";
my $Marantz_aus = TU_Get_Increment($weckzeit,"01:10:00");
fhem("delete atMarantzWerktageAus");
fhem("define atMarantzWerktageAus at ($wday == 1 && $wday == 2 && $wday == 3 && $wday == 4 && $wday == 5 && *".$Marantz_aus." set Marantz off");
fhem("sleep 1");
fhem("attr atMarantzWerktageAus room Wecker");
fhem("attr atMarantzWerktageAus group Aktiv");
}}
#########################################################
###########-----Wecker Notify Wochenende-----############
#########################################################
sub
WeckerWochenendeDummyNotifyUtils()
{
if (Value("WeckerWochenendeDummy") eq "Aus")
{
fhem("delete atMarantzWEAn");
fhem("delete atMarantzWEAus");
}
else
{
my ($we) = @_;
fhem("delete atMarantzWEAn");
fhem("define atMarantzWEAn at  ($we  && *".Value("WeckerWochenendeDummy").":00 set Marantz on");
fhem("sleep 1");
fhem("attr atMarantzWEAn room Wecker");
fhem("attr atMarantzWEAn group Aktiv");
###
my ($we) = @_;
my $weckzeit = Value("WeckerWochenendeDummy").":00";
my $MarantzWochenede_aus = TU_Get_Increment($weckzeit,"01:10:00");
fhem("delete atMarantzWEAus");
fhem("define atMarantzWEAus at $we  && *".$MarantzWochenende_aus." set Marantz off");
fhem("sleep 1");
fhem("attr atMarantzWEAus room Wecker");
fhem("attr atMarantzWEAus group Aktiv");
}}