Frage zur Formatierung eines Wochentages

Begonnen von moonsorrox, 03 Juli 2014, 14:26:16

Vorheriges Thema - Nächstes Thema

moonsorrox

ich nutze einen Codeschnipsel zum Wochentag - morgen und Übermorgen den ich wie folgt entnehme


{ReadingsVal("MeinWetter","fc2_day_of_week",0) ."." }
und
{ReadingsVal("MeinWetter","fc3_day_of_week",0) ."." }


leider wird der mir nur z.B. als Di. oder Mi. je nachdem welcher Tag eben morgen oder übermorgen ist, dargestellt, wie kann ich das machen um den Tag ausgeschrieben zu bekommen..?
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Elektrolurch

Hallo,

einen hash der Form verwenden:

my %wochentage = ('Mo' => 'Montag',
'Di' => 'Dienstag',.....);

Und dann im Code:
$wt = ReadingsVal...

$wt = $wochentag{$wt};

Das Element des hashes wird mit $ adressiert. perl sieht dann für Dich nach, wie es 'Mo' zu 'Montag' umwandelt usw.
Gruß


Elektrolurch
configDB und Windows befreite Zone!

moonsorrox

#2
OK danke, also müsste dann mein Code folgendermaßen aussehen..?

{$wt = ReadingsVal($wt = $wochentage{$wt};}

werde ich gleich mal probieren...
Das habe ich in der myUtils stehen


{
my %wochentage = ('Mo' => 'Montag', 'Di' => 'Dienstag', 'Mi' => 'Mittwoch', 'Do' => 'Donnerstag', 'Fr' => 'Freitag', 'Sa' => 'Samstag' , 'So' => 'Sonntag');
}


EDIT: Rückmeldung also das funktioniert nicht es wird mir auf der Seite ein Fehler angezeigt den ich leider nicht entziffern kann weil er ganz oben auf der jeweiligen Seite steht, was ich lesen kann ist etwas von syntax Error eval 318584..

Weiß jetzt nicht welcher Code dafür verantwortlich ist der in meiner myUtils oder das Readingval.
Was glaube ich noch falsch ist ich muss im Code auch das "e" hinter wochentag einfügen, oder?
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Elektrolurch

Hallo,
wo steht denn dieser Code?

{$wt = ReadingsVal($wt = $wochentage{$wt};}
ReadingsVal liefert den Wert eines Readings eines devices -> in dem Fall wohl die Instanz Deines Wetter-Moduls zurück.
So macht das da oben gar keinen Sinn.

Und weiter:

my %wochentage
steht ja in der 99_myUtils, ist also auch nur da verfügbar.
Wenn Du das direkt in fhem, und nicht über eine eigene kleine sub benutz, kennt fhem diese für 99_myUtils lokale Variable natürlich nicht.
Also:

für die 99_myUtils:

sub KurzWtnachLang($)
{
return $wochentag{$_[0]};
} # end sub

Angenommen, Du hast irgendwo in fhem in einm notify Deinen Code:

my $wt = ReadingsVal('irgendwas mit Wetter'....);
# in $wt steht jetzt bspw 'Mi'
# dann:
$wt = KurzWtnachLang($wt);
# und  nun steht in $wt 'Mittwoch'

Hoffe, dass ist jetzt klar.

Gruß

Elektrolurch
:-[
configDB und Windows befreite Zone!

moonsorrox

Zitat von: Elektrolurch am 03 Juli 2014, 16:39:42
wo steht denn dieser Code?

{$wt = ReadingsVal($wt = $wochentage{$wt};}
ReadingsVal liefert den Wert eines Readings eines devices -> in dem Fall wohl die Instanz Deines Wetter-Moduls zurück.
So macht das da oben gar keinen Sinn.

Und weiter:

my %wochentage
steht ja in der 99_myUtils, ist also auch nur da verfügbar.
Wenn Du das direkt in fhem, und nicht über eine eigene kleine sub benutz, kennt fhem diese für 99_myUtils lokale Variable natürlich nicht.

Ok das ist mir jetzt klar... wenn ich nun die folgenden Zeilen einfüge

Zitat von: Elektrolurch am 03 Juli 2014, 16:39:42
für die 99_myUtils:

sub KurzWtnachLang($)
{
return $wochentag{$_[0]};
} # end sub

bekomme ich folgende Meldung sobald ich die myUtils abspeichere: Global symbol "%wochentag" requires explicit package name at ./FHEM/99_myUtils.pm line 14.

Zitat von: Elektrolurch am 03 Juli 2014, 16:39:42
Hoffe, dass ist jetzt klar.

wohl doch noch nicht, ich versuche zwar alles zu verstehen... nur klappt es wohl nicht  :-[
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Puschel74

Hallo,

Zitatbekomme ich folgende Meldung sobald ich die myUtils abspeichere: Global symbol "%wochentag" requires explicit package name at ./FHEM/99_myUtils.pm line 14.
Niemals oder du postet nur die Hälfte.

Diese Fehlemeldung hat mit deinem Code den du einfügst absolut nichts zu tun.
In deinem geposteten Code geht es um $wochentag und die Fehlermeldung bezieht sich auf %wochentag.
Das hat mit deinem gezeigten Code absolut nichts zu tun.

Wobei du vorhin etwas mit %wochentage gepostet hattest.

Grüße

Edith: Aber aus bruckstückhaften Angaben wird sich so schnell nichts hilfreiches zusammenklauben lassen.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

moonsorrox

#6
also der Reihe nach, ich habe in der myUtils genau den Teil zu stehen und um zu probieren ob der Fehler kommt auch nur dieses:
weiter unten steht natürlich noch einiges aber dort gibt es nichts was irgend etwas mit %wochentag zutun hat.
Und nehme ich die sub KurzWtnachLang raus ist der Fehler auch weg...  ;)


package main;
use strict;
use warnings;
use POSIX;
sub
myUtils_Initialize($$)
{
my ($hash) = @_;
}


sub KurzWtnachLang($)
{
return $wochentag {$_[0]};
} # end sub




speichere ich diese kommt besagter Fehler sofort beim speichern.

Das heißt doch ganz klar ich brauche gar nicht weiter machen, da bei Fehler sowieso keine Funktion..! Richtig..?

Den folgenden Code hatte ich natürlich vorher noch mit drin weil ich das ja austesten wollte, dafür habe ich ihn aber heraus genommen.
Also muss der Fehler ja an dieser sub liegen, nur ich bin absolut kein Perl Profi...

{ my %wochentag = ('Mo' => 'Montag', 'Di' => 'Dienstag', 'Mi' => 'Mittwoch', 'Do' => 'Donnerstag', 'Fr' => 'Freitag', 'Sa' => 'Samstag' , 'So' => 'Sonntag'); }


hier der komplette Fehler aus dem Logfile:
Global symbol "%wochentag" requires explicit package name at ./FHEM/99_myUtils.pm line 14.
2014.07.03 20:27:44 1: reload: Error:Modul 99_myUtils deactivated:
Subroutine myUtils_Initialize redefined at ./FHEM/99_myUtils.pm line 7.

Noch so als Zusatzinfo:
ich brauche auch nicht unbedingt diese Tage in dem Wetter device (wollte diese nur nutzen weil die Tage da so drin sind), mir würde es reichen wenn ich aus irgend einem Modul die Wochen Tage nutzen könnte, sie müßten nur eben die Voraussetzung haben Heute, Morgen, Übermorgen so das sich dies anpaßt
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

StefanP

Hallo,
da bin ich wieder. ;)
Jetzt brauchst Du den Code nur noch zusammenfassen und alles tut was es soll.

sub
KurzWtnachLang($)
{
  my %wochentag = ('Mo' => 'Montag', 'Di' => 'Dienstag', 'Mi' => 'Mittwoch', 'Do' => 'Donnerstag', 'Fr' => 'Freitag', 'Sa' => 'Samstag' , 'So' => 'Sonntag');
  return $wochentag {$_[0]};
}


mit {KurzWtnachLang('Di')}
in der Kommandozeile siehst Du das Ergebnis.
Wollte Dich vorhin mit der Kurzantwort nicht vor den Kopf stoßen.

Gruß StefanP

moonsorrox

ZitatWollte Dich vorhin mit der Kurzantwort nicht vor den Kopf stoßen.
habe mich nicht vor den Kopf gestoßen gefühlt...  ;) alles gut...

ich werde das jetzt mal so in die myUtils einbauen..
dann brauche ich das dann nicht im Wetter abfragen wenn dieses {KurzWtnachLang('Di')} benutzt wird..?
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

StefanP

Du brauchst nur noch beides zusammenfassen:
{KurzWtnachLang(ReadingsVal("MeinWetter","fc2_day_of_week",0))}
Wenn jetzt noch ein echter Experte was besseres als meinen "Spaghetti-Code" liefert, hab ich auch gelernt (kein Ironie-Modus!).

Gruß StefanP

moonsorrox

Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM