Undefined subroutine &main::Today

Begonnen von Frank13, 28 Oktober 2021, 11:45:17

Vorheriges Thema - Nächstes Thema

Frank13

Hallo allerseits,

Ich habe gleich noch eine Frage:

Aus meinem alten fhem-System (schon sehr lange nichts mehr dran gemacht) habe ich mir eine Routine in ein frisch aufgesetztes System kopiert:

(Auf den relevanten Code gekürzt)

sub my_test1()
{
  my ($jetzt_year,$jetzt_month,$jetzt_day)=Today();
}



Wenn ich die Funktion aufrufe, bekomme ich die Fehlermeldung "Undefined subroutine &main::Today..."
In meinem alten System funktioniert die Routine...

Muß ich noch etwas nachinstallieren und wenn ja was?

Viele Grüße

Frank

Beta-User

Du solltest mal schauen, in deinen alten myUtils gibt es vermutlich eine entsprechende Routine "Today()".

Oder die war in einem Modul verfügbar, das du genutzt hast, das du aber jetzt entweder nicht mehr im Einsatz hast oder das geändert wurde (diese Funktionsbenennungen im main-Namespace sind - nennen wir es - unglücklich...).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Frank13

Das habe ich schon befürchtet... in meinen alten myUtils gibt es diese Funktion nicht. Das setze ich mich mal dran und hole die Routinen aus der Steinzeit in die Neuzeit... ;-)

Danke!

Beta-User

Vielleicht hilft der Schnippsel weiter (zweistellige Rückgabe):
my $jetzt_year = (localtime)[5]-100;
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

supernova1963



sub Today
{
  my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
  return ($year + 1900),($mon + 1),$mday);
}

Beta-User

Falls man nicht direkt alles einpackt, sollte man m.E. wenigstens klarstellen, wo sowas herkommt - insbesondere dann, wenn man den Verdacht hat, dass ggf. auch irgend ein Modul so einen (unglücklichen) Funktiosaufrufnamen verwendet!

Minimum wäre myToday() oder so...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Frank13

Hallo allerseits,

Danke für die Tipps. Ich bin dabei, meine uralten Routinen komplett neu zu überarbeiten. Im Moment habe ich noch leichte Probleme mit dem Datetime-Modul von Perl, aber da zickt das Linux rum und nicht fhem. Mal sehen, wie weit ich ohne das komme...

Viele Grüße

Frank

Beta-User

Falls du Interesse hast: Es gibt einen Forenbereich "Perl für FHEM-User".

Da du mit dem Problem "uralte Routinen" auf den aktuellen Stand bringen nicht ganz alleine bist, können wir gerne versuchen, deine "exemplarisch" mal durchzuackern. Da gibt es bestimmt neben interessierten Mitlesern auch (andere) Leute, die dich gerne unterstützen...

Würde empfehlen, das gleich in der "package"-Variante anzugehen. Vorteil: Wenn es mal läuft und dir "stiehlt" danach einer eine vorausgesetzte externe Routine, lädt die myUtils nicht mehr beim FHEM-Start, und du bekommst eine qualifizierte Rückmeldung, was fehlt.

In der Regel sollte es auch nicht notwendig sein, allzuviel Zeug von extern zu holen (Module aus cpan usw.).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Frank13

Moin,

Auf das Angebot werde ich garantiert zurückkommen. Ich hatte gestern noch ziemliche Probleme mit dem Datetime Modul, heute habe ich einen anderen Ansatz versucht: Rechnen mit den bereits vorhandenen Routinen (localtime etc). Das hat funktioniert und ist (bisher) nichtmal komplizierter.

Viele Grüße

Frank