Perl erkennt Zahl nicht als Zahl

Begonnen von Bastian0302, 17 Februar 2017, 10:37:45

Vorheriges Thema - Nächstes Thema

Bastian0302

Folgendes Problem,
ich versuche in Perl eine einfache Addition durchzuführen aber jedes mal bekomme ich eine Fehlermeldung.

my ($temp_ist,$temp_soll,$heizung,$stat_fenster) = @_;
  $heizung = 1;
  if (Value($stat_fenster) eq "closed"){
    $heizung=$heizung + 3;
   fhem("set $heizung ".$heizung);
   }
   
   else {fhem("set $heizung ".$heizung)}
}


Hier soll Testweise einfach nur $heizung 1 gesetzt werden da murrt er mit folgender Fehlermeldung rum.

2017.02.17 10:15:53 3: set 1  : Please define 1 first
2017.02.17 10:15:53 2: fkt_heizung: {Heizungssteuerung("Temp_Bad_Ist","Temp_Bad_Soll","Heizung","Fenster_Bad")}: Please define 1 first



Wenn die Bedingung für die Addition $heizung=$heizung + 3; Wahr ist, kriege ich folgende Fehlermeldung.
2017.02.17 10:33:31 3: set 4  : Please define 4 first
2017.02.17 10:33:31 2: fkt_heizung: {Heizungssteuerung("Temp_Bad_Ist","Temp_Bad_Soll","Heizung","Fenster_Bad")}: Please define 4 first


Das heißt ja er rechnet richtig die 4 aus und kann diese nicht weiter verarbeiten.
Ich hab bei Fhem und Google gesucht und da wird nirgends eine explizite Schreibweise verlangt. Darum versteh ich diesen Fehler nicht und weiß auch nicht mehr unter welchen Begriffen ich noch suchen soll.

Für Hilfe wäre ich sehr dankbar.
Raspbarry Pi 3, Panstamp NRG 2, Cul 433Mhz Sender/Empfänger, Mcp23017 Ein/Ausgabebaugruppe, TabletUi, Doorpi mit Nextion/RFID und Integration in Fhem, Sonos

franky08

Please define 1 first

Variable vorher deklarieren!

my $heizung = 1 sollte helfen.

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Thorsten Pferdekaemper

Hi,
das hier: Value($heizung) versucht ein Device mit dem Namen "1" oder "4" zu finden. Du musst einfach nur $heizung schreiben, dann sollte das gehen.
Ach ja, das was Franky sagt ist auch nicht schlecht, hat aber wenig mit Deinem Problem zu tun.
Gruß,
   Thorsten
FUIP

Bastian0302

Ja ich hatte ich Variablen Deklaration vergessen. Hab sie eingefügt kommt trotz dem der selbe Fehler.

Ja das Value hatte ich weg genommen.

sub Heizungssteuerung($$$$) {
my ($temp_ist,$temp_soll,$heizung,$stat_fenster) = @_;
my $heizung = 1;
  if (Value($stat_fenster) eq "closed"){
    $heizung=$heizung + 3;
   fhem("set $heizung ".$heizung);
   }
   
   else {fhem("set $heizung ".$heizung)}
}


Trd der selbe Fehler...

Ich habe auch gesucht ob ich ein Perlmodul nicht installiert habe aber angeblich soll ja das eine addieren auch so klappen.
Raspbarry Pi 3, Panstamp NRG 2, Cul 433Mhz Sender/Empfänger, Mcp23017 Ein/Ausgabebaugruppe, TabletUi, Doorpi mit Nextion/RFID und Integration in Fhem, Sonos

franky08

Vor der ersten Verwendung deklarieren!
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

marvin78

Du versuchst noch immer, ein Device $heizung, das einer Zahl entspricht auf den Wert $heizung zu setzen. Ich verstehe den Sinn nicht!?

Da steht übersetzt sowas wie

set 1 1

marvin78

Zitat von: franky08 am 17 Februar 2017, 10:53:44
Vor der ersten Verwendung deklarieren!

Das ist nicht das Problem. Die Variable muss nicht zwei mal deklariert werden. Sie wird oben schon deklariert.

my ($temp_ist,$temp_soll,$heizung,$stat_fenster) = @_;

franky08

ZitatSie wird oben schon deklariert.

Habe wohl noch die Sonnenbrille auf... Tschuldigung, hatte ich übersehen  ::)
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Dietmar63

fhem("set $heizung ".$heizung);


Du benutzt für den Gerätenamen und den Temeraturwert die gleiche Variable.
Du benötigst zwei Variablen und in der ersten sollte der Name der Heizung stehen

fhem("set $heizungName ".$heizung);


Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Bastian0302

sub Heizungssteuerung($$$$) {
my ($temp_ist,$temp_soll,$heizung,$stat_fenster) = @_;
my $wert=0;
  if (Value($stat_fenster) eq "closed"){
    $wert=$heizung + 3;
   fhem("set $heizung ".$wert);
   }
   
   else {fhem("set $heizung ".$wert)}
}


So gehts erstmal er setzt 0 und 3 wenn ich allerdings die Funktion ein 2. mal durchlaufe, setzt der $heizung nicht 6.
Raspbarry Pi 3, Panstamp NRG 2, Cul 433Mhz Sender/Empfänger, Mcp23017 Ein/Ausgabebaugruppe, TabletUi, Doorpi mit Nextion/RFID und Integration in Fhem, Sonos

Bastian0302

Ich rufe die Funktion so auf
(Temp_Bad_Ist.*||Temp_Bad_Soll.*) ({Heizungssteuerung("Temp_Bad_Ist","Temp_Bad_Soll","Heizung","Fenster_Bad")})
Da Die Parameter sind alles Dummys.
Raspbarry Pi 3, Panstamp NRG 2, Cul 433Mhz Sender/Empfänger, Mcp23017 Ein/Ausgabebaugruppe, TabletUi, Doorpi mit Nextion/RFID und Integration in Fhem, Sonos

Thorsten Pferdekaemper

Hi,
vielleicht sagst Du uns erst einmal, was Du eigentlich machen willst. Das kann man aus dem Coding nämlich nicht ganz erraten.
Gruß,
   Thorsten
FUIP

marvin78

Warum willst du auch $wert mit dem Devicenamen addieren?

Meinst du ggf. sowas:


$wert=Value($heizung) + 3;


?

Strukturier mal bitte deine Gedanken. Ggf. schreibst du auch mal, was du eigentlich machen willst.

Bastian0302

Also ich möchte das durch Änderung von "Fenster_Bad" folgendes ausgeführt wird.
defmod fkt_heizung DOIF ([Fenster_Bad:""]) ({Heizungssteuerung("Temp_Bad_Ist","Temp_Bad_Soll","Heizung","Fenster_Bad")})
Funktioniert.

Die Parameter sind alles Dummys.
In der Subfunktion soll  "Heizung" mit einem Wert addiert werden.
sub Heizungssteuerung($$$$) {
my ($temp_ist,$temp_soll,$heizung,$stat_fenster) = @_;
my $wert=0;
   $wert=$heizung + 3;
   fhem("set $heizung ".$wert);
}

Die Funktion soll später noch weiter ausgebaut werden darum temp_ist und temp_soll.

Der Dummy Heizung wird auf 3 gesetzt. Meckert aber um, dass Heizung nicht numerisch ist.
2017.02.17 11:44:16 1: PERL WARNING: Argument "Heizung" isn't numeric in addition (+) at ./FHEM/99_myUtils.pm line 61, <GEN7> line 34.
Wenn ich die Funktion nochmal ausführe also 2 mal hintereinander müsste der Dummy Heizung ja den Wert 6 annehmen. Tut er allerdings nicht.

Also das einzige Problem ist noch, dass der dummy Heizung anscheinend nicht numerisch ist. Ich nehme an, dass er deswegen nicht beim 2. Durchlauf auf 6 kommt.
Raspbarry Pi 3, Panstamp NRG 2, Cul 433Mhz Sender/Empfänger, Mcp23017 Ein/Ausgabebaugruppe, TabletUi, Doorpi mit Nextion/RFID und Integration in Fhem, Sonos

marvin78

Siehe mein letzter Beitrag. Du addierst eine Zahl zum Namen des Devices. Der Fehler sagt also genau, wo das Problem liegt. Die Lösung ist auch in meinem Beitrag.