Hauptmenü

AT mit Aufruf einer Sub

Begonnen von Chris8888, 12 Februar 2017, 21:35:44

Vorheriges Thema - Nächstes Thema

Chris8888

Hallo,

ich versuche in einem AT-Kommando eine Sub-Routine aufzurufen.

AT-DEF: *10:00:00 { if($wday == 0) && ($kw_ung == 1) {HeizungAuto}}

Sub aus der myUtils:
sub HeizungAuto() {
fhem("set HM_Thermostat_Badkl datapoint 1.SET_POINT_MODE 0");
fhem("set HM_Thermostat_xy datapoint 1.SET_POINT_MODE 0");
fhem("set HM_Thermostat_yx datapoint 1.SET_POINT_MODE 0");
}

Aus dem Log bei Aufruf des ATs: Unknown command {, try help.

Wäre super, wenn mir jemand auf die Sprünge helfen könnte.

Besten Dank vorab!

VG
Christian
FHEM 6.0 auf einem PI4 mit div. Homematic-Komponenten, Alexa, Tablet-UI und Homebridge...und läuft einfach. Erweitert mit CCU3 und Homematic-IP...und läuft immer noch.

KernSani

Auf die Scnelle: du bist schon im perl... also keine geschweiften Klammern um den sub Aufruf. Und die runden Klammern fehlen beim Aufruf.
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

KölnSolar

Probier mal
*10:00:00 { if(($wday == 0) && ($kw_ung == 1)) {HeizungAuto()}}
Die geschweiften Klammern um den Funktionsaufruf kannst Du wahrscheinlich weglassen.
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Thorsten Pferdekaemper

Zitat von: KernSani am 12 Februar 2017, 21:42:32
Auf die Scnelle: du bist schon im perl... also keine geschweiften Klammern um den sub Aufruf.
Doch, die braucht Perl nach dem if.
Gruß,
   Thorsten
FUIP

KölnSolar

aber nur, wenn mehr als eine Anweisung folgt, oder ?
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

KernSani

Zitat von: Thorsten Pferdekaemper am 12 Februar 2017, 23:09:42
Doch, die braucht Perl nach dem if.
Gruß,
   Thorsten
Shame on me! Ich sollte nicht so oft DOIF verwenden :-S (und nicht "auf die Schnelle" antworten). Gelobe Besserung. Schönen Start in die Woche!
Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Thorsten Pferdekaemper

Zitat von: KölnSolar am 12 Februar 2017, 23:34:38
aber nur, wenn mehr als eine Anweisung folgt, oder ?
Probier's aus. Vielleicht gibt's ja verschiedene Perls. Bei meinem kann man die einzelne Anweisung dann vor das if stellen, aber wenn die Anweisung danach kommt, braucht man die {}. Das ist in C-ähnlichen Sprachen anders.
Gruß,
   Thorsten
FUIP

Chris8888

Hallo zusammen,

leider keine Änderung.
Versucht habe ich:
*10:00:00 { if ($wday == 0) && ($kw_ung == 1) HeizungAuto()}
*10:00:00 { if ($wday == 0) && ($kw_ung == 1) {HeizungAuto()}}
*10:00:00 if ($wday == 0) && ($kw_ung == 1) HeizungAuto()

Die Fehlermeldung ändert sich leider nicht.

Habt ihr noch eine Idee?

Viele Grüße
Christian
FHEM 6.0 auf einem PI4 mit div. Homematic-Komponenten, Alexa, Tablet-UI und Homebridge...und läuft einfach. Erweitert mit CCU3 und Homematic-IP...und läuft immer noch.

mahowi

In Perl müsste nach der Anweisung ein Semikolon gesetzt werden, also:

*10:00:00 { if ($wday == 0) && ($kw_ung == 1) { HeizungAuto(); } }
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

Thorsten Pferdekaemper

Zitat von: Chris8888 am 13 Februar 2017, 08:25:20*10:00:00 { if ($wday == 0) && ($kw_ung == 1) HeizungAuto()}
*10:00:00 { if ($wday == 0) && ($kw_ung == 1) {HeizungAuto()}}
*10:00:00 if ($wday == 0) && ($kw_ung == 1) HeizungAuto()
Na, so richtig genau schaust Du nicht hin, oder?

*10:00:00 { if(($wday == 0) && ($kw_ung == 1)) {HeizungAuto()}}

Alles, was in der Bedingung steht, muss in einer Klammer eingeschlossen sein. Die äußeren () sind wichtig, die inneren nicht. Es müsste also auch das gehen:

*10:00:00 { if($wday == 0 && $kw_ung == 1) {HeizungAuto()}}

Gruß,
   Thorsten
FUIP

DeeSPe

Zitat von: Thorsten Pferdekaemper am 13 Februar 2017, 08:38:31

*10:00:00 { if($wday == 0 && $kw_ung == 1) {HeizungAuto()}}


Wie Thorsten bereits geschrieben hat sollte genau das funktionieren.
Und wie er auch schon bemerkte kann man die {} weglassen wenn man es umdreht:

*10:00:00 { HeizungAuto() if($wday == 0 && $kw_ung == 1)}


Wenn einer Funktion nichts übergeben werden soll, sollte es auch ohne die () gehen:

*10:00:00 { HeizungAuto if($wday == 0 && $kw_ung == 1)}


Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Chris8888

Hllo zusammen,

vielen Dank für eure Unterstützung! Klasse!

Zumindest ändert sich jetzt die Fehlermeldung:
Mit { if($wday == 0 && $kw_ung == 1) {HeizungAuto()}}
->
ERROR evaluating my $DEV='HeizungaufAuto';{ if($wday == 0 && $kw_ung == 1) {HeizungAuto()}}: Global symbol "$kw_ung" requires explicit package name at (eval 171891) line 1.

Habt ihr dazu eine Idee? Ansonsten versuche ich das heute Abend besser zu verstehen....

VG und einen guten Start in die Woche
Christian
FHEM 6.0 auf einem PI4 mit div. Homematic-Komponenten, Alexa, Tablet-UI und Homebridge...und läuft einfach. Erweitert mit CCU3 und Homematic-IP...und läuft immer noch.

igami

Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Chris8888

#13
Hi,

das ist eine Variable aus einer anderen Sub-Routine:
sub gerade_ungerade_kw() {
my ($sec,$min,$hour,$dayn,$month,$year,$wday,$yday,$isdst) = localtime(time);
my $donthisweek = $yday+5-$wday;
my $donfirst    = ($donthisweek % 7) + 1;
my $kw          = floor(($donthisweek - $donfirst)/7);
   $kw += ($wday == 0) ? 0:1;
my $kw_ung      = $kw % 2; # KW ist gerade: 0 ; KW ist ungerade: 1
Log 1, " KW:$kw | KW ung.:$kw_ung | WDay:$wday" ; # Testausgabe
}

Damit errechne ich immer ob eine Woche gerade oder ungerade ist.

Der Aufruf erfolgt immer um 00:01 per AT-Kommando.

VG
Christian
FHEM 6.0 auf einem PI4 mit div. Homematic-Komponenten, Alexa, Tablet-UI und Homebridge...und läuft einfach. Erweitert mit CCU3 und Homematic-IP...und läuft immer noch.

igami

und woher soll das at wissen, dass es das in einer anderen sub gibt?
füg der sub noch ein return hinzu welches du auswerten kannst. z.B. 1 für ungerade 0 für gerade
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED