[geändert]TV Programm automatisieren - Vorschlag mit der Bitte um Unterstützung

Begonnen von supernova1963, 16 November 2017, 22:32:59

Vorheriges Thema - Nächstes Thema

CoolTux

Hallo Gernot,

Hattest Du schon die Möglichkeit zum drauf schauen? Konnte der Code Dir weiter helfen?



Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

supernova1963

Hallo coolTux,

ich schaffe es erst heute Abend.

Danke schonmal für die Unterstützung,

Gernot

CoolTux

Kein Problem. Ganz entspannt. Wollte nur mal schauen. Schreib dann einfach bitte kurz Deine Meinung dann weiß ich das ich da weiter machen kann oder andere Möglichkeiten Dir vorschweben  ;D
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

supernova1963

Hallo CoolTux,

so wie du es gemacht hast habe ich auch in diversen Modulen gefunden.
Die Definition befindet sich also, - wenn ich es recht verstehe -, in der return Zeile.

my $list = "AutoCreate:0,1 Switch2Channel:1 UpdateAll:1";
return "Unknown argument $cmd, choose one of $list";


Wäre es denn dann auch möglich, wenn man als Definition:

my $list = "AutoCreate:noArg Switch2Channel:noArg UpdateAll:noArg ChannelName:13th%20Street,3sat,A&E,Animal%20Planet,Anixe%20HD,ARD%20ALPHA,ARTE,ATV%202,ATV,AXN,Bayern,BBC%20Entertainment,BBC%20World,Beate%20Uhse%20TV,Bibel%20TV,Boomerang,Cartoon%20Network,Classica,CNN,Comedy%20Central,Das%20Erste,Discovery%20Channel,Disney%20Cinemagic,Disney%20Junior,Disney%20XD,Disney,DMAX,E!,Euronews,Eurosport%202,Eurosport,FOX,France%202,France%203,Franken%20TV,Goldstar%20TV,Hamburg1,Heimatkanal,history,HR,HSE24,Junior,Kabel%201%20Doku,Kabel%20eins%20Classics,Kabel%20eins,KiKa,Kinowelt,MDR,MTV,München%20TV,N24%20Doku,N24,NAT%20GEO%20Wild,National%20Geographic,NDR,NICK,NITRO,N-TV,ONE,ORF%201,ORF%202,ORF%203,ORF%20Sport%20+,Phoenix,Planet,Playboy%20TV,Pro7%20FUN,Pro7%20MAXX,Pro7,Puls%204,QVC,RBB,Romance%20TV,RTL%202,RTL%20Crime,RTL%20Living,RTL%20Passion,RTL%20plus,RTL,SAT.1%20emotions,SAT.1%20Gold,SAT.1,Schweiz%201,Schweiz%202,Servus%20TV,Silverline,sixx,Sky%201,Sky%20Arts,Sky%20Atlantic%20HD,Sky%20Cinema%20+1,Sky%20Cinema%20+24,Sky%20Cinema%20Action,Sky%20Cinema%20Comedy,Sky%20Cinema%20Emotion,Sky%20Cinema%20Family,Sky%20Cinema%20Hits,Sky%20Cinema%20Nostalgie,Sky%20Cinema,Sky%20Fußball%20Bundesliga,Sky%20Krimi,Sky%20Sport%201,Sky%20Sport%202,Sky%20Sport%20Austria,Sky%20Sport%20News%20HD,Sonnenklar%20TV,Spiegel%20TV%20Geschichte,Spiegel%20TV%20Wissen,Sport%201,Sport1+%20US%20HD,Sport1+,Spreekanal,Super%20RTL,SWR%20BW,SWR%20RP,Syfy,Tagesschau24,TELE%205,Tide%20TV,TLC,TNT%20Comedy,TNT%20Film,TNT%20Serie,Toggo%20Plus,TV%20Berlin,Universal%20Channel,VIVA,VOX,WDR,ZDF%20info,ZDF%20neo,ZDF,Zee%20One";
return "Unknown argument $cmd, choose one of $list";

übergibt und wie lautet die if - Abfrage?
Wäre das so möglich?

sub TVSender_Set($@) {
    my ($hash, $name, $cmd, @args) = @_;
    my ($arg, @params) = @args;
    my $httpmoddevice = '';
    if ($cmd eq 'AutoCreate') {
        $httpmoddevice = InternalVal($name,'TV_Program_NOW','TV_Program_NOW');
        my $TV_Program_hash = $defs{$httpmoddevice};
        TVSender_Add_HTTPMOD_Device($hash,$httpmoddevice,"Es läuft",1);
        TVSender_Change_HTTPMOD_Device_userattr($hash,$httpmoddevice);
        TVSender_Change_HTTPMOD_Device_stateformat($hash,$httpmoddevice);
        ### TV_Program_NEXT ###
        $httpmoddevice = InternalVal($name,'TV_Program_NEXT','TV_Program_NEXT');
        $TV_Program_hash = $defs{$httpmoddevice};
        TVSender_Add_HTTPMOD_Device($hash,$httpmoddevice,"Anschliessend",2);
        TVSender_Change_HTTPMOD_Device_userattr($hash,$httpmoddevice);
        TVSender_Change_HTTPMOD_Device_stateformat($hash,$httpmoddevice);
        ### TV_Program_PT ###
        $httpmoddevice = InternalVal($name,'TV_Program_PT','TV_Program_PT');
        $TV_Program_hash = $defs{$httpmoddevice};
        TVSender_Add_HTTPMOD_Device($hash,$httpmoddevice,"Zur PrimeTime",3);
        TVSender_Change_HTTPMOD_Device_userattr($hash,$httpmoddevice);
        TVSender_Change_HTTPMOD_Device_stateformat($hash,$httpmoddevice);
        ### TV_Program_PTNEXT ###
        $httpmoddevice = InternalVal($name,'TV_Program_PTNEXT','TV_Program_PTNEXT');
        $TV_Program_hash = $defs{$httpmoddevice};
        TVSender_Add_HTTPMOD_Device($hash,$httpmoddevice,"Danach",4);
        TVSender_Change_HTTPMOD_Device_userattr($hash,$httpmoddevice);
        TVSender_Change_HTTPMOD_Device_stateformat($hash,$httpmoddevice);
    }
    elsif ($cmd eq 'Switch2Channel') {
        my $fhemcmd = AttrVal($name,"SwitchCommand","");
        $regex = qr/;/p;
        $subst = ';;';
        $fhemcmd = $fhemcmd =~ s/$regex/$subst/rg;
        $errors = '';
        $errors = AnalyzeCommandChain (undef, $fhemcmd);
        if (!defined($errors)) {
           #Log3($name, 3,'Sucsessfully deleted row of stateFormat to '.$httpmoddevice.'!');
        }
        else {
            Log3($name, 5, 'SwitchCommand from '.$name.'cause error: '.$errors.'!');
            Log3($name, 5, $fhemcmd);
        }
    }
    elsif ($cmd eq 'UpdateAll') {
        TVSender_Parameter_update ($hash);
     }
    elsif ($cmd eq 'ChannelName') {
        my $ChannelName = $arg;
        $regex = qr/%20/p;
        $subst = ' ';
        $ChannelName = $ChannelName =~ s/$regex/$subst/rg;
        $attr{$name}{"ChannelName"} = $ChannelName;
    }
    else {
        my $list = "AutoCreate:noArg Switch2Channel:noArg UpdateAll:noArg ChannelName:13th%20Street,3sat,A&E,Animal%20Planet,Anixe%20HD,ARD%20ALPHA,ARTE,ATV%202,ATV,AXN,Bayern,BBC%20Entertainment,BBC%20World,Beate%20Uhse%20TV,Bibel%20TV,Boomerang,Cartoon%20Network,Classica,CNN,Comedy%20Central,Das%20Erste,Discovery%20Channel,Disney%20Cinemagic,Disney%20Junior,Disney%20XD,Disney,DMAX,E!,Euronews,Eurosport%202,Eurosport,FOX,France%202,France%203,Franken%20TV,Goldstar%20TV,Hamburg1,Heimatkanal,history,HR,HSE24,Junior,Kabel%201%20Doku,Kabel%20eins%20Classics,Kabel%20eins,KiKa,Kinowelt,MDR,MTV,München%20TV,N24%20Doku,N24,NAT%20GEO%20Wild,National%20Geographic,NDR,NICK,NITRO,N-TV,ONE,ORF%201,ORF%202,ORF%203,ORF%20Sport%20+,Phoenix,Planet,Playboy%20TV,Pro7%20FUN,Pro7%20MAXX,Pro7,Puls%204,QVC,RBB,Romance%20TV,RTL%202,RTL%20Crime,RTL%20Living,RTL%20Passion,RTL%20plus,RTL,SAT.1%20emotions,SAT.1%20Gold,SAT.1,Schweiz%201,Schweiz%202,Servus%20TV,Silverline,sixx,Sky%201,Sky%20Arts,Sky%20Atlantic%20HD,Sky%20Cinema%20+1,Sky%20Cinema%20+24,Sky%20Cinema%20Action,Sky%20Cinema%20Comedy,Sky%20Cinema%20Emotion,Sky%20Cinema%20Family,Sky%20Cinema%20Hits,Sky%20Cinema%20Nostalgie,Sky%20Cinema,Sky%20Fußball%20Bundesliga,Sky%20Krimi,Sky%20Sport%201,Sky%20Sport%202,Sky%20Sport%20Austria,Sky%20Sport%20News%20HD,Sonnenklar%20TV,Spiegel%20TV%20Geschichte,Spiegel%20TV%20Wissen,Sport%201,Sport1+%20US%20HD,Sport1+,Spreekanal,Super%20RTL,SWR%20BW,SWR%20RP,Syfy,Tagesschau24,TELE%205,Tide%20TV,TLC,TNT%20Comedy,TNT%20Film,TNT%20Serie,Toggo%20Plus,TV%20Berlin,Universal%20Channel,VIVA,VOX,WDR,ZDF%20info,ZDF%20neo,ZDF,Zee%20One";
        return "Unknown argument $cmd, choose one of $list";
    } 
}


Vielen Dank für deine Geduld,

Gernot


CoolTux

Ja das wäre möglich. Wobei ich diese Sonderzeichen Geschichte bei den Sendernamen anders machen würde. Schreibe die Namen ganz normal und jage sie später durch die Funktion urlEncode bei der Übergabe.
Und die Sender würde ich in ein Array packen und durch die Schleife jagen für die list Anzeige.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Besserer Vorschlag. Was hälst Du davon dem User entscheiden zu lassen welche Sender in der set Liste stehen sollen. Lass dem User ein Attribut anlegen wo er deine Sender eintragen kann. Das liest Du dann einfach aus.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

supernova1963

Hallo CoolTux,

ich quäle mich gerade mit diesem Thema.
Ich muß noch soviel lernen...
Diese Auswahlliste (DropDown) wollte ich anbieten, da ich befürchte, dass nicht jeder User versteht, dass damit der Suchbegriff für kl**k.de gebildet wird. Diese sollten über ein geeignetes Regex die korrekten Möglichkeiten abfragen und als "set ... ChannelName" angeboten werden ...
Soweit der Plan, aber von der Lösung bin ich noch weit entfernt ...

Zitat von: CoolTux am 24 November 2017, 22:10:20
...
Wobei ich diese Sonderzeichen Geschichte bei den Sendernamen anders machen würde. Schreibe die Namen ganz normal und jage sie später durch die Funktion urlEncode bei der Übergabe.
---

Habe ich versucht, aber ich bekomme die Sendernamen ohne urlEncode nicht nicht in das DropDown, da dort Sonderzeichen enthalten sind, die @list nicht korrekt verarbeitet. Wenn ich @list mit urlEncode umgewandelten Strings fülle, klappt's, aber leider nur mit den escape'ten Sonderzeichen.
      my @senderlist = ("13th Street","3sat","A&E","Animal Planet","Anixe HD","ARD ALPHA","ARTE","ATV 2","ATV","AXN","Bayern","BBC Entertainment","BBC World","Beate Uhse TV","Bibel TV","Boomerang","Cartoon Network","Classica","CNN","Comedy Central","Das Erste","Discovery Channel",
        "Disney Cinemagic","Disney Junior","Disney XD","Disney","DMAX","E!","Euronews","Eurosport 2","Eurosport","FOX","France 2","France 3","Franken TV","Goldstar TV","Hamburg1","Heimatkanal","history","HR","HSE24","Junior","Kabel 1 Doku","Kabel eins Classics","Kabel eins","KiKa",
        "Kinowelt","MDR","MTV","München TV","N24 Doku","N24","NAT GEO Wild","National Geographic","NDR","NICK","NITRO","N-TV","ONE","ORF 1","ORF 2","ORF 3","ORF Sport +","Phoenix","Planet","Playboy TV","Pro7 FUN","Pro7 MAXX","Pro7","Puls 4",
        "QVC","RBB","Romance TV","RTL 2","RTL Crime","RTL Living","RTL Passion","RTL plus","RTL","SAT.1 emotions","SAT.1 Gold","SAT.1","Schweiz 1","Schweiz 2","Servus TV","Silverline","sixx","Sky 1","Sky Arts","Sky Atlantic HD","Sky Cinema +1","Sky Cinema +24","Sky Cinema Action",
        "Sky Cinema Comedy","Sky Cinema Emotion","Sky Cinema Family","Sky Cinema Hits","Sky Cinema Nostalgie","Sky Cinema","Sky Fußball Bundesliga","Sky Krimi","Sky Sport 1","Sky Sport 2","Sky Sport Austria","Sky Sport News HD","Sonnenklar TV","Spiegel TV Geschichte","Spiegel TV Wissen",
        "Sport 1","Sport1+ US HD","Sport1+","Spreekanal","Super RTL","SWR BW","SWR RP","Syfy","Tagesschau24","TELE 5","Tide TV","TLC","TNT Comedy","TNT Film","TNT Serie","Toggo Plus","TV Berlin","Universal Channel","VIVA","VOX","WDR","ZDF info","ZDF neo","ZDF",
        "Zee One");
        urlEncode($_) for @senderlist;
        $list = "AutoCreate:noArg Switch2Channel:noArg UpdateAll:noArg ChannelName:".join(",",@senderlist);

        return "Unknown argument $cmd, choose one of $list";



supernova1963

Das ist das eine, was zwar funktioniert aber halt nicht so schön ist.
Ich hatte das Problem bereits bei der Abfrage der Parameter für das define. Da habe ich es bekanntermaßen auch mit %20 gelöst und bewußt das Beispiel "Das%20Erste" gewählt.

Das Andere ist die Regex. Irgendwie scheint diese nicht alle Möglichkeiten zu finden (hier meine Test.pl):

my $str ... Quellcode der Seite ...;

my $regex = qr/<tr class="evenRow">
<td class="station">[\w\W]*?title="\s*(.*?)\s*"><img class/p;
my @alle_treffer = $str =~ /$regex/g;
  print "'".$_."'," for @alle_treffer;
  print "\n";


Sie findet nur 67 Einträge, es sind aber wesentlich mehr. Es fehlt z.B. der Sender "E!".
Ich bin auch bei diesem Thema absoluter Anfänger. Über eine Unterstützung durch das Forum würde ich mich freuen,

Gernot


supernova1963

Das mit der Regex habe gerade gefunden, einfach zu blöd, manchmal sieht man den Wald vor lauter Bäumen nicht.

Meine funktionierende Regex zur Abfrage der gültigen Suchbegriffe ($ChannelName):

my $regex = qr/<tr class="[\w\W]*?Row">
<td class="station">[\w\W]*?title="\s*(.*?)\s*"><img class/p;


Sorry,

Gernot

CoolTux

Werde am WE wohl nicht dazu kommen. Aber am Montag bestimmt.
Bitte immer wenn du etwas neues eingebaut und fertig damit bist ins Git laden damit ich mir deine neuste Version zum weiterarbeiten holen kann.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

supernova1963

mache ich, sobald etwas bei mir im Testsystem läuft, lade ich es ins Git.

Ein schönes WE,

Gernot

MadMax-FHEM

Hi Gernot,

hier geht es ja ganz schön voran...

Wenn ich/wir Nutzer ("Tester") etwas tun können, einfach melden...

...oder macht es schon Sinn jetzt was aus git zu laden?

(wobei ich wohl auch erst wieder morgen Abend dazu komme)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

supernova1963

Hallo Joachim,

im Git gibt es noch keine neuere Version. Ich hoffe ich schaffe es am WE die Vorschläge von coolTux einzubauen.
Die FHEM-Update Integration hat Hauswart ja schon gemacht. Wenn es was Neues gibt, versuche diese zu pflegen.

Schönes WE,

Gernot

supernova1963

Apropos Hilfe,

es ist ein wenig in den Hintergrund gerückt, aber ich habe noch keinen geeigneten Ansatz um die Tabellenzeilen in den HTTPMOD Devices nach der Favoriten Nr zu sortieren.

Außerdem konnte ich bisher noch nicht testen, ob ein SwitchCommand und die entsprechenden Links (Channel in den HTTPMOD Devices und Titel der Sendung in den TVSender Devices) funktionieren.

Dank an alle Helfenden,

Gernot

MadMax-FHEM

Zitat von: supernova1963 am 25 November 2017, 16:24:23
Apropos Hilfe,

Außerdem konnte ich bisher noch nicht testen, ob ein SwitchCommand und die entsprechenden Links (Channel in den HTTPMOD Devices und Titel der Sendung in den TVSender Devices) funktionieren.

Dank an alle Helfenden,

Gernot

Hallo Gernot,

also ich hab das mit Harmony Device und Harmony Command (falls du das damit meinst) ausprobiert und es hat funktioniert (prinzipiell).

Ich weiß zwar nicht warum ich Harmony Device und Harmony Command angeben muss, vielleicht hab ich auch was falsch gemacht...
...denn bei Harmony Command habe das komplette set Kommando eingegeben (da bräuchte ich das Harmony Device doch gar nicht mehr!?)...

Was ich nicht geschafft hab ist den Kanal anzupassen.

Ich habe allerdings erst mal nur mit dem "Das Erste" Beispiel rumgespielt...
...dort war der Kanal dann 161.

Beim Drücken auf die 161 wurde über die Harmony geschalten (also wie im set Kommando angegeben auf Kanal 1).

Allerdings konnte ich aus 161 keine 1 machen.
Ich habe vor set AutoCreate beim TV-Modul den Kanal eingetragen 1 (ich glaube dass ich es so gemacht hatte), dann stand zwar 1 drin aber es kam eine Fehlermeldung beim Drücken auf die 1, leider weiß ich nicht mehr welche und kann auch grad nicht schauen, ob was im Log stand/steht.

Ich wollte mich erst noch ein wenig damit beschäftigen, bevor ich hier anmerke, dass es irgendwie nicht (so) geht (wie ich denke, dass es sollte)...

Aber nach dem du nun gefragt hast...
...antworte ich mal. ;)

Was du mit dem zweiten Teil meinst bin ich mir nicht sicher aber falls das gemeint ist: wenn ich auf ein Bild/Link geklickt habe bin ich bei Klack-TV auf die entsprechende Sendung gekommen...

Aber wie geschrieben, ich hab noch nicht so richtig "getestet"...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)