MyUtils.pm Zahlen wert Berechnen und in at ausführen

Begonnen von Fixel2012, 17 Dezember 2017, 16:56:52

Vorheriges Thema - Nächstes Thema

Fixel2012

Guten Abend,

ich habe vorhin im Haus in einem at, was du Rollläden herunterfährt, alle fixen Prozent zahlen auf "{Rollladen_Winter_Sommer}". Dies ist eine Subroutine, die entweder die Zahl "0" oder "35" ausgibt.

Somit will ich erreichen, dass im Winter die Rollläden ganz herunter fahren und im Sommer nur auf 35%.

Im Log wird mir gesagt, dass es keine dezimal zahl ist. Anscheinend wird die Subroutine nicht aufgerufen und berechnet, sondern nur als string genommen?!

Zitatset EG.Esszimmer dim {Rollladen_Winter_Sommer} : Error: {Rollladen_Winter_Sommer} is not a decimal number

Meine at definition:


Internals:
   COMMAND    set UG.Schlafzimmer dim {Rollladen_Winter_Sommer};set 1OG.Bad dim {Rollladen_Winter_Sommer};sleep 3 quiet;set 1OG.Flur dim {Rollladen_Winter_Sommer};set 1OG.Martina dim {Rollladen_Winter_Sommer};sleep 4 quiet;set 1OG.Rolf_Links dim {Rollladen_Winter_Sommer};set 1OG.Rolf_Rechts dim {Rollladen_Winter_Sommer};sleep 3 quiet;set EG.Wohnzimmer_Rechts dim {Rollladen_Winter_Sommer};set EG.Wohnzimmer_Mitte_Rechts dim {Rollladen_Winter_Sommer};sleep 3 quiet;set EG.Wohnzimmer_Mitte_Links dim {Rollladen_Winter_Sommer};set EG.Wohnzimmer_Links dim {Rollladen_Winter_Sommer};sleep 4 quiet;set EG.Kueche dim {Rollladen_Winter_Sommer};set EG.Bad dim {Rollladen_Winter_Sommer};set EG.Flur dim {Rollladen_Winter_Sommer};sleep 60 quiet;{ if (((ReadingsVal("FDGK_Wohnzimmer","state","") eq "closed") || (ReadingsVal("FDGK_Wohnzimmer","state","") eq "tilted")) && (ReadingsVal("Esszimmer_Rollladen_dummy","state","") eq "on")) {fhem ("set EG.Esszimmer dim {Rollladen_Winter_Sommer}") }};set Markise_Links rein;set Markise_Rechts rein
   DEF        *{sunset(-1200)} set UG.Schlafzimmer dim {Rollladen_Winter_Sommer};set 1OG.Bad dim {Rollladen_Winter_Sommer};sleep 3 quiet;set 1OG.Flur dim {Rollladen_Winter_Sommer};set 1OG.Martina dim {Rollladen_Winter_Sommer};sleep 4 quiet;set 1OG.Rolf_Links dim {Rollladen_Winter_Sommer};set 1OG.Rolf_Rechts dim {Rollladen_Winter_Sommer};sleep 3 quiet;set EG.Wohnzimmer_Rechts dim {Rollladen_Winter_Sommer};set EG.Wohnzimmer_Mitte_Rechts dim {Rollladen_Winter_Sommer};sleep 3 quiet;set EG.Wohnzimmer_Mitte_Links dim {Rollladen_Winter_Sommer};set EG.Wohnzimmer_Links dim {Rollladen_Winter_Sommer};sleep 4 quiet;set EG.Kueche dim {Rollladen_Winter_Sommer};set EG.Bad dim {Rollladen_Winter_Sommer};set EG.Flur dim {Rollladen_Winter_Sommer};sleep 60 quiet;{ if (((ReadingsVal("FDGK_Wohnzimmer","state","") eq "closed") || (ReadingsVal("FDGK_Wohnzimmer","state","") eq "tilted")) && (ReadingsVal("Esszimmer_Rollladen_dummy","state","") eq "on")) {fhem ("set EG.Esszimmer dim {Rollladen_Winter_Sommer}") }};set Markise_Links rein;set Markise_Rechts rein
   NAME       Sonnenuntergang
   NR         142
   NTM        16:41:51
   PERIODIC   yes
   RELATIVE   no
   REP        -1
   STATE      Next: 16:41:51
   TIMESPEC   {sunset(-1200)}
   TRIGGERTIME 1513611711
   TRIGGERTIME_FMT 2017-12-18 16:41:51
   TYPE       at
   READINGS:
     2017-07-14 13:05:41   Uhrzeit         sunset()
     2017-12-17 16:41:32   state           Next: 16:41:51
Attributes:
   room       ZWave


und meine Subroutine in MyUtils.pm:

sub Rollladen_Winter_Sommer(){

use Time::Local;

my ($Sekunde, $Minute, $Stunde, $Monatstag, $Monat,
    $Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);

$Jahr += 1900;
$Monat +=1;

my $temperature = ReadingsVal("Aussen_Thermometer", "temperature", "");
my $Winter_Sommer = 0; #0 ist Winter, Sommer ist 1
my $Rollladenhoehe = "";

if ($Monat == 9 || $Monat == 10 || $Monat == 11 || $Monat == 12 || $Monat == 1 || $Monat == 2 || $Monat == 3 || $Monat == 4 || $Monat == 5) {

$Winter_Sommer = 0;

}

elsif ($Monat == 2 || $Monat == 3 || $Monat == 4 || $Monat == 5 || $Monat == 6 || $Monat == 7 || $Monat == 8 || $Monat == 9 || $Monat == 10) {

$Winter_Sommer = 1;

}

if ($temperature <= 10 && $Winter_Sommer == 0) {

$Rollladenhoehe = "0";

}

if ($temperature >= 10 && $Winter_Sommer == 1) {

$Rollladenhoehe = "35";

}

return $Rollladenhoehe;



}


War ehrlich gesagt recht stolz auf mich, dass diese Berechnung an sich klappt. Wenn ich "{Rollladen_Winter_Sommer}" in die FHEM command line eingebe, bekomme ich auch die richtige Rückmeldung.

Wieso geht das bei dem at nicht?

Würde mich freuen, wenn mir das jemand etwas näher bringen könnte.  :o

Danke und Gruß,

Fixel
Fhem 5.8 auf Raspi 3, HMLAN und 868MHz CUL mit einigen Komponenten, Z-Wave Rollladenaktoren, Tablet UI, 433 MHz CUL mit Baumarktsteckdosen und Temp Sensoren, Amazon Echo, Echo Dot, 2x SONOS  play1, 1x SONOS Connect AMP,  presence, HUE, Lightify

Otto123

#1
Hallo Fixel,

ganz schnell geschaut, das hier
$Rollladenhoehe = "35"
Wird ein String! "<Zahl>"

Zitatis not a decimal number
$Bla = <Zahl>
$Rollladenhoehe = 35
wäre eine Zahl -> decimal number  8)


Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

betateilchen

#2
Du versuchst, einen fhem Befehl und perl Code zu vermischen. So einfach geht das aber nicht.


{fhem(,,set EG.Esszimmer dim".Rolladen_Winter_Sommer())}


sollte funktionieren. Die Hochkomma müssen immer oben stehen, das hat mein ipad grade vermurkstö
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

@Otto du liegst mal wieder komplett falsch. Schau doch nochmal die Fehlermeldung genau an, es geht doch gar nicht um die Zahl. Und perl wäre es an dieser Stelle völlig egal, ob da 35 oder ,,35" steht.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Damian

Du musst den Perlteil bei set zusätzlich in runde Klammern setzen, damit er als solcher erkannt wird, also:

set UG.Schlafzimmer dim {(Rollladen_Winter_Sommer)}...
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

betateilchen

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

Fixel2012

Vielem Dank an alle!

Damians Lösung konnte ich am besten in mein bestehenden Code einarbeiten. Funktioniert nun super!

Danke und Gruß,

Fixel
Fhem 5.8 auf Raspi 3, HMLAN und 868MHz CUL mit einigen Komponenten, Z-Wave Rollladenaktoren, Tablet UI, 433 MHz CUL mit Baumarktsteckdosen und Temp Sensoren, Amazon Echo, Echo Dot, 2x SONOS  play1, 1x SONOS Connect AMP,  presence, HUE, Lightify