Hallo,
ich lasse bei einem klickauf ein icon in einer readingsGrout über die 99MyUtils eine sub aufrufen die ein at definiert, das at soll dann im enigma2 Modul einen sender zu einer bestimmten Uhrzeit schalten.
Der sender wird auch richtig geschaltet nur leider zur falschen Uhrzeit, das at wird immer auf 00:00 Uhr gesetzt.
Wo liegt mein Fehler?
Hier die sub die das at Aufruft.
{
$command =~ s/;/;;/g;
fhem('delete '.$TVDevice.'.Senderwechsel.at');
fhem('define '.$TVDevice.'.Senderwechsel.at at '.ReadingsVal('TV_Programme', $channel.'_next_time', '00:00').' '.$command);
fhem('attr '.$TVDevice.'.Senderwechsel.at room Wohnzimmer');
}
Wenn ich das at über den Klick in der rd definieren lasse, wird folgendes at angelegt
Internals:
CFGFN
COMMAND set VU_Ultimo channel ProSieben_HD
DEF 2017-01-08T00:00:00 set VU_Ultimo channel ProSieben_HD
NAME VU_Ultimo.Senderwechsel.at
NR 4875
PERIODIC no
RELATIVE no
STATE Next: 00:00:00
TIMESPEC 00:00
TRIGGERTIME 1483830000
TRIGGERTIME_FMT 2017-01-08 00:00:00
TYPE at
VOLATILE 1
Readings:
2017-01-07 20:31:38 state Next: 00:00:00
Attributes:
room Wohnzimmer
Hi,
na dieser Ausdruck liefert nix zurück:
ReadingsVal('TV_Programme_next', $channel.'_next_time', '00:00')
Teste den doch einfach mal in der Kommandozeile. Woher kommt $channel?
Oder ich verstehe dein Konstrukt nicht.
Gruß Otto
Also die gesammte sub dazu sieht so aus:
############################### TV Programm ########################
sub
switchChannel($)
{
my %channellist = (
pro7 => 'ProSieben_HD',
'13thstreet' => '13th_Street',
rtl => 'RTL',
ard => 'Das_Erste_HD',
kabel1 => 'kabel_eins_HD',
'sat.1' => 'SAT.1_HD',
rtl2 => 'RTL_II',
sport1 => 'Sport1',
vox => 'VOX',
zdf => 'ZDF_HD',
);
my $TVDevice = 'VU_Ultimo';
my ($channel) = @_;
Log(0, 'Übergebener channel: '.$channel);
$channel =~ s/_time//g;
Log(0, 'channel ohne _time: '.$channel);
my $next = 0;
if ($channel =~ /_next/)
{
my @array = split('_next', $channel);
$channel = $array[0];
$next = 1;
}
my $lcchannel = lc $channel;
Log(0, 'lcchannel: '.$lcchannel);
my $command = '';
Log(0, 'channel aus channellist: '.$channellist{$lcchannel});
$command = 'set '.$TVDevice.' channel '.$channellist{$lcchannel};
if ($command ne '')
{
if ($next == 1)
{
$command =~ s/;/;;/g;
fhem('delete '.$TVDevice.'.Senderwechsel.at');
fhem('define '.$TVDevice.'.Senderwechsel.at at '.ReadingsVal('TV_Programme_next', $channel.'_next_time', '00:00').' '.$command);
fhem('attr '.$TVDevice.'.Senderwechsel.at room Wohnzimmer');
}
else
{
fhem($command);
}
}
else
{
Log(1, 'Channelnumber not found for channel: '.$channel);
}
}
Die Variable $channel wird ja auch richtig Befüllt, nur die at Zeit wird nicht richtig gesetzt
Blöde frage, wie soll ich das in der Kommandozeile testen
Die readings die die rd füllen sehen so aus:
QUEUE:
Readings:
2015-06-05 21:51:56 1 Rambo I
2017-01-07 21:02:39 13THSTREET Criminal Minds: Team Red
2015-03-26 21:44:04 13THSTREET_abend Criminal Minds
2017-01-07 21:02:39 13THSTREET_next Criminal Minds: Team Red
2017-01-07 21:02:39 13THSTREET_next_time 21:45
2017-01-07 21:02:39 ARD Schlagerchampions - Das große Fest der Besten
2017-01-07 21:02:39 ARD_next Tagesthemen - Mit Wetter
2017-01-07 21:02:39 ARD_next_time 23:30
2017-01-07 21:02:39 KABEL1 Hawaii Five-0
2017-01-07 21:02:39 KABEL1_next Hawaii Five-0
2017-01-07 21:02:39 KABEL1_next_time 21:10
2015-05-18 11:04:57 KABEL_1 Castle
2017-01-07 21:02:39 Pro7 Die Promi-Darts-WM 2017
2017-01-07 21:02:39 Pro7_next Ich bin Nummer 4
2017-01-07 21:02:39 Pro7_next_time 00:15
2017-01-07 21:02:39 RTL Deutschland sucht den Superstar - Casting (2/12)
2017-01-07 21:02:39 RTL_next Willkommen bei Mario Barth - Die Personality-Show mit Star-Comedian Mario Barth
2017-01-07 21:02:39 RTL_next_time 23:00
2017-01-07 21:02:39 SAT.1 Home - Ein smektakulärer Trip
2017-01-07 21:02:39 SAT.1_next Gnomeo und Julia
2017-01-07 21:02:39 SAT.1_next_time 21:55
2015-05-18 11:04:57 Sat1 Richterin Barbara Salesch
2017-01-07 21:02:39 Sport1 Fußball: Hallenturnier - Budenzauber Krefeld - Budenzauber Krefeld
2017-01-07 21:02:39 Sport1_next Coming Home I
2015-09-15 10:19:24 Sport1_next_time 11:30
2017-01-07 21:02:39 VOX Unknown Identity
2017-01-07 21:02:39 VOX_next Mörderjagd - Wie Profiler ermitteln
2017-01-07 21:02:39 VOX_next_time 22:30
2017-01-07 21:02:39 ZDF Ein starkes Team
2017-01-07 21:02:39 ZDF_next Kommissarin Lucas
2017-01-07 21:02:39 ZDF_next_time 21:45
2015-09-15 10:19:24 rtl2 Frauentausch
2015-09-15 10:19:24 rtl2_next Family Stories
2015-09-15 10:19:24 rtl2_next_time 10:50
Eventuell so:
{ReadingsVal("TV_Programme_next","KABEL1_next_time","00:00")}
Gruß Otto
Danke, dann wird nur
Zitat00:00
zurückgeliefert
Naja aber dann liegt es daran, dann geht dein Ausdruck so nicht.
Eigentlich steht doch KABEL1_next_time 21:10 drin oder?
Solange wie Du da keinen sinnvollen Wert bekommst brauchst Du Dich nicht zu wundern. ;)
Zitat von: Tommy82 am 07 Januar 2017, 21:13:51
Danke, dann wird nur zurückgeliefert
Das ist der Ersatzwert wenn das Reading nicht gelesen werden kann - warum auch immer.
Otto war schneller 8)
Ja aber wieso kommt nichts sinnvolles zurück?? Der Sender z.b. wird ja im at richtig gesetzt, nur die Zeit nicht
Das reading sieht so aus:
KABEL1_next_time 22:05
Das Gerät heißt nicht TV_Programme_next ?
Mach mal list TV_Programme_next
Gruß Otto
Da hast du recht, sorry für die Verwirrung hatte es oben schon abgeändert und auch in der MyUtils, das ganze sieht richtig so aus:
fhem('define '.$TVDevice.'.Senderwechsel.at at '.ReadingsVal('TV_Programme', $channel.'_next_time', '00:00').' '.$command);
Ein
{ReadingsVal("TV_Programme","KABEL1_next_time","00:00")}
liefert dann auch eine Zeit 22:05
Das war der Fehler, oh man, schwere Geburt.
Ich danke für die geduldige Hilfe, jetzt klappt es.