[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

supernova1963

Hallo miteinander,

nachdem ich die ersten Schritte ohne größere Schäden in FHEM geschafft habe, hat mich der Übermut dazu verführt mich mit Code/Modulen intensiver zu beschäftigen. Irgendwie, mit viel lesen, Geduld und viel Try&Error habe ich so eine Art Automatisierung für das Erstellen eines TV-Programmplaners hinbekommen.
Anlass war die relativ aufwendige Erstellung eines fhem basierten TV-Programmplaners. Auf Basis des Codeschnipsle - Threads "Aktuelles TV-Programm in FHEM" habe ich versucht meine auf meinen Receiver und Sehgewohnheiten abgestimmte Lösung als readingsGroup zu erstellen. Nachdem ich es erstmal mit Copy&Paste, mit Google Tabellen und anschließend "zu Fuß" versucht habe meine Vorstellungen umzusetzen, dachte ich, dass dieses auch zu automatisieren sein müßte.
   
Nachteilig wirkten sich meine unzureichenden Perl Kenntnisse vor Allem in Bezug auf Code und Code Struktur aus. Die Regularien aus dem FHEM Development habe ich intensiv gelesen, aber bei Weitem nicht in Gänze verstanden. Laßt also Nachsicht walten. Hinweise, Korrektur- und Verbesserungsvorschläge nehme ich gerne an, denn vorrangiges Ziel war und ist der Weg des Lernens.

Das anhängende "So-Eine_Art-Modul" ist weit davon entfernt auch nur Beta Version genannt zu werden. Es funktioniert in den Grundzügen bei mir.

Ziel ist es mit wenig Eingaben die notwendigen HTTPMOD-Devices (Meine tiefe Bewunderung an StefanStrobel für dieses Modul) Devices flexible und automatisiert anzulegen und zu pflegen.

Der Ansatz:

define "SenderName" TVSender "KanalNr" [Such-Sendername in Kl*ck.de!] [Favoriten-Nr]

Achtung bei Leerzeichen im Suchbegriff! Hier bitte das Leerzeichen durch %20 ersetzen!
Beispiel:
define Das_Erste TVSender 161 Das%20Erste

Nachdem das Device angelegt wurde kann mit set Das_Erste autoCreate 1 alle notwendigen HTTPMOD Devices (TV_Program_NOW, TV_Program_NEXT, TV_Program_PT und TV_Program_PTNEXT) angelegt bzw. gepflegt werden.

Wird ein TVSender Device gelöscht, sollen die HTTPMOD Device entsprechend gepflegt/aktualisiert werden.

Das funktioniert soweit bei mir!

Probleme habe ich z.Zt. bei:

1. Den SwitchCommand als URL auszuführen,
2. Den DetailLink (Klick auf das Sendungsbild) im PopUp Fenster zu öffnen,
3. Die Sortierung der Sender in den HTTPMOD Devices zu realisieren,
4. Die Attributveränderungen elegant umzusetzen
5. Die Regex für das Sendungsbild funktioniert bei fehlendem Bild nicht korrekt
6. ...

Nicht sicher bin ich mir bzw. wahrscheinlich verbessert werden könnte:

1. Regex Vorgaben als Internal korrekt oder besser Helper?
2. Wäre es besser mit separaten ReadingsGroup Devices zu arbeiten anstelle der aufwendigen stateFormat ?
3. Wäre damit die Sortierung einfacher zu lösen?
4. ...

Ich bin gespannt, ob sich einer erbarmt und sich den Code antut.
Wie gesagt, über Hinweise, Korrekturen, Verbesserungsvorschläge würde ich mich sehr freuen,

Gernot

Edit 21.11.2017: Ich habe mich auch mal an github gewagt. Neue Vorabversion hier: https://github.com/supernova1963/TVSender

MadMax-FHEM

Hi Gernot,

Alter Schwede das ist ja mal ein geiles Teil!

Also ich hab's ja erst mal schnell (mit ARD) auf meinem Testsystem ausprobiert und was soll ich sagen: WOW!

Ich weiß nur nicht, ob ich der richtige bin bzgl. Code optimieren...
...aber ich werde es auf jeden Fall mal weiter nutzen... :)

EDIT: wobei es schon noch ein wenig dauern kann bis ich da weiter komme... :-|  Habe aktuell so einige "Baustellen" offen... Aber es ist ja bald Weihnachten... :)

Vielen Dank!

Gruß, Joachim

P.S.: wie wär's mit einer Verlinkung von wo du her gekommen bist!? Da gibt es bestimmt Interesse...
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,

schön zu erfahren, dass das Ergebnis dir schnon mal gefällt und es nicht nur bei mir läuft.

Ich freue mich auf deine Analyse und kritische Würdigung.

Ganz vielen Dank, für dein Interesse und deine Bereitschaft zur Unterstützung,

Gernot

P.S.: Ich habe bewusst den Titel und ein neues Thema gewählt, da es nicht rund ist und ich zunächst wirklich nur lernen will. Ich wollte es auch erst in Codeschnipsel einstellen, aber da gilt, dass nur fertiger lauffähiger Code eingestellt werden soll ...

MadMax-FHEM

#3
Hi Gernot,

mit Verlinkung meinte ich eher aufmerksam machen, dass es das hier gibt...

Weil in dem anderen Thread ja doch immer wieder nach lauffähigen Beispielen gefragt wird bzw. welches von den vielen dort geposteten Beispielen denn nun geht etc.

Ich selbst hab mir ja da was halbwegs brauchbares mühsam zusammengesammelt...
...aber halt Meilen weit weg von dem 2min Testversuch mit deinem Code hier...

Erhöht vermutlich die Anzahl Tester...
...bzw. Helfer...

Evtl. auch noch mal den Threadtitel überdenken...
...dachte nach dem Lesen des Titels, dass du "nur" Hilfe brauchst...

Aber dass dann sowas dahinter steckt hätte ich nie vermutet...
...aber gut, dass ich "reingeschaut" hab... :)

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)

Esjay

Hallo supernova1963,
bin gerade hier auf deinen Beitrag gestoßen. Hast du die unten zitierte Aussage von Elektrolurch gesehen? Vielleicht könnt ihr ja voneinander profitieren, und ein großes Ding daraus machen.
Ich hänge mich hier mal an, und werde mitlesen. Wenn ich die Tage mal Zeit habe, werde ich auch mit deiner Version mal mein Testsystem füttern.

Grüße



Zitat von: Elektrolurch am 22 September 2017, 14:48:07
Das Problem hatte ich auch. Das mit der Excel-Tabelle fand ich zu umständlich und habe jetzt die GEnerierung der Attribute für HTTPMOD, die readingsGroup und deren Attribute in den TVhelper integriert. Dort legt man nur ein Muster an und der Rest wird generiert. Außerdem habe ich die vielen regex - Definitionen für HTTPMOD vereinfacht, da kann man ja auch mehrere Werte in einem regex suchen lassen, was deutlich schneller geht....
Ich teste gerade, aber es sieht schon ganz gut aus. Pro Sender gibt es jetzt nur eine regex und die findet now_time, next_time, now_title, next_title, now_details und Next_details in einem Suchlauf.

Elektrolurch

supernova1963

Hallo Esjay,

gelesen habe ich diese Ankündigung der genialen Regex schon.
Ich hätte diese auch gerne verwendet, da das Thema Regex sich mir bisher nur rudimentär erschlossen hat. Zum Glück gibt's Beispiele im Thema "Aktuelles TV-Programm in FHEM".

Mein Antritt liegt noch mindestens eine "Flughöhe" höher. Es sollte ausreichen die drei individuellen Kriterien (gewünschter Sender, Receiver Device, Kanal und den Suchbegriff des Senders in kl*ck.de (siehe Anhang: Sendersuchbegriffsliste) zu kennen um so etwas, wie im Anhang: Screenshot*.png zu erstellen.

Danke für das Interesse und die Antwort,

Gernot

P.S.: Bitte informiere uns, wenn's läuft




Macblock

Hallo Supernova1963,

was ich hier lese, klingt ja super. Deshalb habe ich mir gerade schnell mal das Modul geladen. Ich bekomme aber immer die Meldung "Cannot load module TVSender "  :-[

Die Berechtigungen passen. Woran kann das liegen?

Viele Grüße

Macblock

MadMax-FHEM

#7
Was steht denn im fhem log?

Meist steht dort der Grund, evtl. fehlt eine perl-lib/modul...

EDIT: lib etc. scheidet wohl aus. Hab eben die neue Version (grad erst entdeckt) aus github geladen bzw. versucht, klappt nicht... Hier mal ein paar Logeinträge:


Too many arguments for main::TVSender_Change_HTTPMOD_Device_userattr at ./FHEM/98_TVSender.pm line 180, near "'')"
Too many arguments for main::TVSender_Change_HTTPMOD_Device_userattr at ./FHEM/98_TVSender.pm line 181, near "'')"
Too many arguments for main::TVSender_Change_HTTPMOD_Device_userattr at ./FHEM/98_TVSender.pm line 182, near "'')"
Too many arguments for main::TVSender_Change_HTTPMOD_Device_userattr at ./FHEM/98_TVSender.pm line 183, near "'')"
syntax error at ./FHEM/98_TVSender.pm line 735, near """:"
syntax error at ./FHEM/98_TVSender.pm line 739, near "}"
Global symbol "$value" requires explicit package name (did you forget to declare "my $value"?) at ./FHEM/98_TVSender.pm line 742.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 743.
Global symbol "$name" requires explicit package name (did you forget to declare "my $name"?) at ./FHEM/98_TVSender.pm line 743.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 744.
Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/98_TVSender.pm line 745.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 745.
Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/98_TVSender.pm line 746.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 746.
Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/98_TVSender.pm line 747.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 747.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 749.
Global symbol "$name" requires explicit package name (did you forget to declare "my $name"?) at ./FHEM/98_TVSender.pm line 749.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 750.
Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/98_TVSender.pm line 751.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 751.
Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/98_TVSender.pm line 752.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 752.
Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/98_TVSender.pm line 753.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 753.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 755.
Global symbol "$name" requires explicit package name (did you forget to declare "my $name"?) at ./FHEM/98_TVSender.pm line 755.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 756.
Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/98_TVSender.pm line 757.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 757.
Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/98_TVSender.pm line 758.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 758.
Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/98_TVSender.pm line 759.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 759.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 761.
Global symbol "$name" requires explicit package name (did you forget to declare "my $name"?) at ./FHEM/98_TVSender.pm line 761.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 762.
Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/98_TVSender.pm line 763.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 763.
Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/98_TVSender.pm line 764.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 764.
Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/98_TVSender.pm line 765.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 765.
syntax error at ./FHEM/98_TVSender.pm line 766, near "}"
./FHEM/98_TVSender.pm has too many errors.


Ich spiele mal wieder die "alte" Version ein...

EDIT2: gut doch noch nicht eingespielt die "alte" Version... ;)  Ich hab es zwar jetzt hinbekommen, dass das Modul geladen werden kann (waren einige "Verschreibsler" drin und irgendwie stimmt das mit den Argumenten ;) ). Aber die Logik passt in dem was ich zusammengebastelt hab nicht. Es wird zwar was erzeugt aber so richtig sieht das dann nicht aus...

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

#8
Hallo Macblock,

ich habe gerade die bei mir laufende Version als v0.0.4  v0.1.0 hochgeladen.
Kommt dein Fehler nach einem shutdown restart bzw. reload 98_TVSender.pm?

Sonst, wie Joachim bereits geschrieben hat: Ein Auszug aus dem fhem log würde die Fehlersuche vereinfachen.

LG

Gernot

supernova1963

Zitat von: MadMax-FHEM am 23 November 2017, 00:21:30
...

EDIT: lib etc. scheidet wohl aus. Hab eben die neue Version (grad erst entdeckt) aus github geladen bzw. versucht, klappt nicht... Hier mal ein paar Logeinträge:


Too many arguments for main::TVSender_Change_HTTPMOD_Device_userattr at ./FHEM/98_TVSender.pm line 180, near "'')"
Too many arguments for main::TVSender_Change_HTTPMOD_Device_userattr at ./FHEM/98_TVSender.pm line 181, near "'')"
Too many arguments for main::TVSender_Change_HTTPMOD_Device_userattr at ./FHEM/98_TVSender.pm line 182, near "'')"
Too many arguments for main::TVSender_Change_HTTPMOD_Device_userattr at ./FHEM/98_TVSender.pm line 183, near "'')"
syntax error at ./FHEM/98_TVSender.pm line 735, near """:"
syntax error at ./FHEM/98_TVSender.pm line 739, near "}"
Global symbol "$value" requires explicit package name (did you forget to declare "my $value"?) at ./FHEM/98_TVSender.pm line 742.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 743.
Global symbol "$name" requires explicit package name (did you forget to declare "my $name"?) at ./FHEM/98_TVSender.pm line 743.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 744.
Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/98_TVSender.pm line 745.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 745.
Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/98_TVSender.pm line 746.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 746.
Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/98_TVSender.pm line 747.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 747.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 749.
Global symbol "$name" requires explicit package name (did you forget to declare "my $name"?) at ./FHEM/98_TVSender.pm line 749.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 750.
Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/98_TVSender.pm line 751.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 751.
Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/98_TVSender.pm line 752.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 752.
Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/98_TVSender.pm line 753.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 753.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 755.
Global symbol "$name" requires explicit package name (did you forget to declare "my $name"?) at ./FHEM/98_TVSender.pm line 755.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 756.
Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/98_TVSender.pm line 757.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 757.
Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/98_TVSender.pm line 758.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 758.
Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/98_TVSender.pm line 759.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 759.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 761.
Global symbol "$name" requires explicit package name (did you forget to declare "my $name"?) at ./FHEM/98_TVSender.pm line 761.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 762.
Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/98_TVSender.pm line 763.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 763.
Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/98_TVSender.pm line 764.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 764.
Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/98_TVSender.pm line 765.
Global symbol "$httpmoddevice" requires explicit package name (did you forget to declare "my $httpmoddevice"?) at ./FHEM/98_TVSender.pm line 765.
syntax error at ./FHEM/98_TVSender.pm line 766, near "}"
./FHEM/98_TVSender.pm has too many errors.


Ich spiele mal wieder die "alte" Version ein...

EDIT2: gut doch noch nicht eingespielt die "alte" Version... ;)  Ich hab es zwar jetzt hinbekommen, dass das Modul geladen werden kann (waren einige "Verschreibsler" drin und irgendwie stimmt das mit den Argumenten ;) ). Aber die Logik passt in dem was ich zusammengebastelt hab nicht. Es wird zwar was erzeugt aber so richtig sieht das dann nicht aus...

Gruß, Joachim

Es waren in der git Version viele Fehler drin! Ich habe mich scheinbar mit den Versionen vertan. Um sicher zu gehen habe ich eine bei mir funktionierende Version hochgeladen. und ein neues PreRelease v0.1.0 erstellt, diese heruntergeladen und in mein Testsystem kopiert. Meiner Ansicht nach müßte PreRelease v.0.1.0 jetzt laufen.

Sorry an alle Tester, ich bin scheinbar in den Versionen irgendwir durcheinander gekommen. Muss mich halt daran gewöhnen, nicht einfach nur nach dem coden, testen und korrigieren darauf zu achten, dass genau die letzte laufende Version hochgeladen und ein neues Release erstellt wird. Diese muß ich dann sicherheitshalber herunterladen und 'drüberbügeln und erneut testen.

LG

Gernot

P.S.: Danke für die Geduld

MadMax-FHEM

Hi Gernot,

kein Ding!

Ich habe die aktuelle Version aus git gezogen (bzw. meinte git zunächst, dass ich bereits aktuell sei / habe mal gelöscht und neu gezogen)...

Die Version lässt sich zwar laden, sieht aber so aus wie meine "entfehlerte" Version von gestern...
...also irgendwie stimmt da an der "Logik" etwas nicht (mehr).

Ich habe mal ein Bild angehangen, wie es aktuell bei mir aussieht...



Wenn ich was tun kann, einfach melden!

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,

das Bild sieht garnicht so schlecht aus.
Anders als bei meinem 1. Versuch müsste jetzt noch

set Das_Erste AutoCreate 1

ausgeführt werden. Dann werden erst die HTTPMOD Devices angelegt und konfiguriert, die dann nach dem ersten Event die readings im device Das_Erste setzen.

Probier's bitte mal.

Danke,

Gernot

MadMax-FHEM

Hallo Gernot,

hab ich schon, mach ich aber noch mal...

Passiert aber nix...
...also es wird kein HTTPMOD Device angelegt... :-|

Das war vermutlich der erste Versuch "set AutoCreate" nach dem Neuladen aus git:


2017.11.23 09:51:06 3: Please define TV_Program_NOW first
2017.11.23 09:51:06 3: Please define TV_Program_NOW first
2017.11.23 09:51:06 3: Please define TV_Program_NEXT first
2017.11.23 09:51:06 3: Please define TV_Program_NEXT first
2017.11.23 09:51:06 3: Please define TV_Program_PT first
2017.11.23 09:51:06 3: Please define TV_Program_PT first
2017.11.23 09:51:06 3: Please define TV_Program_PTNEXT first
2017.11.23 09:51:06 3: Please define TV_Program_PTNEXT first
2017.11.23 09:51:23 3: stateFormat: value set to <table width=100% ><tr><td style="text-align: center;background-color: #e0e0e0" colspan=3 >A  K  T  U  E  L  L</td></tr><tr><td style="vertical-align: top;text-align: left;width: 50px;font-size: larger" >TV_Program_NOW_Time</td><td style="vertical-align: top;text-align: left"><p><a href="/fhem?cmd=set%20Das_Erste%20Switch2Channel%201" style="text-align: left;font-weight: bold;font-size: larger">TV_Program_NOW_Title</a></p>TV_Program_NOW_Description</td><td style="vertical-align: top;width: 200px" >TV_Program_NOW_Image</td></tr><tr><td style="text-align: center;background-color: #e0e0e0" colspan=3 >A  N  S  C  H  L  I  E  S  S  E  N  D</td></tr><tr><td style="vertical-align: top;text-align: right;width:50px;font-size: larger" >TV_Program_NEXT_Time</td><td style="vertical-align: top;text-align: left"><p style="text-align: left;font-weight: bold;font-size: larger" >TV_Program_NEXT_Title</p>TV_Program_NEXT_Description</td><td style="vertical-align: top;width: 200px" >TV_Program_NEXT_Image</td></tr><tr><td style="text-align: center;background-color: #e0e0e0" colspan=3 >P  R  I  M  E    T  I  M  E</td></tr><tr><td style="vertical-align: top;text-align: right;width: 50px;font-size: larger" >TV_Program_PT_Time</td><td style="vertical-align: top; text-align: left"><p style="text-align: left;font-weight: bold;font-size: larger">TV_Program_PT_Title</p>TV_Program_PT_Description</td><td style="vertical-align: top;width: 200px" >TV_Program_PT_Image</td></tr><tr><td style="text-align: center;background-color: #e0e0e0" colspan=3 >D  A  N  A  C  H</td></tr><tr><td style="vertical-align:top;text-align: right;width: 50px;font-size: larger" >TV_Program_PTNEXT_Time</td><td style="vertical-align: top; text-align: left" ><p style="text-align: left;font-weight: bold;font-size: larger" >TV_Program_PTNEXT_Title</p>TV_Program_PTNEXT_Description</td><td style="vertical-align: top;width: 200px" >TV_Program_PTNEXT_Image</td></tr></table>!


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,

set Das_Erste AutoCreate 1

Die "1" ist wichtig, da ich es noch nicht rausbekommen habe, wie die sets bzw. gets z.B. als DropDown oder aber im Falle von AutoCreate ohne Parameter definieren muss.

Gernot

supernova1963

Hallo Joachim,

Ich habe mir jetzt angewöhnt in den Code die jeweilige Versionsnummer zuschreiben z.Zt. Zeile 22.

In den folgender Version werde ich glaub' ich besser ein Internal setzen.

LG

Gernot

MadMax-FHEM

Zitat von: supernova1963 am 23 November 2017, 10:19:22
Hallo Joachim,

set Das_Erste AutoCreate 1

Die "1" ist wichtig, da ich es noch nicht rausbekommen habe, wie die sets bzw. gets z.B. als DropDown oder aber im Falle von AutoCreate ohne Parameter definieren muss.

Gernot

Hallo Gernot,

sorry!

Ja natürlich, hätte wohl lesen sollen (und nicht machen wie "immer" ;)  )...

Jetzt sieht es wieder sehr gut aus!

Danke, 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)

CoolTux

Zitat von: supernova1963 am 23 November 2017, 10:19:22
Hallo Joachim,

set Das_Erste AutoCreate 1

Die "1" ist wichtig, da ich es noch nicht rausbekommen habe, wie die sets bzw. gets z.B. als DropDown oder aber im Falle von AutoCreate ohne Parameter definieren muss.

Gernot

So etwas findest Du doch ohne Probleme 1. in anderen Modulen, 2. im Developer Guide

AutoCreate:noArg

DropDown
AutoCreate:1,2,3,4,5,6,7
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

MadMax-FHEM

Zitat von: supernova1963 am 23 November 2017, 10:23:25
Hallo Joachim,

Ich habe mir jetzt angewöhnt in den Code die jeweilige Versionsnummer zuschreiben z.Zt. Zeile 22.

In den folgender Version werde ich glaub' ich besser ein Internal setzen.

LG

Gernot

Hi Gernot,

ich bin jetzt auch kein git-Spezialist, weiß also nicht was bei git dazu führt, dass eine neue Version erkannt wird...
...hatte mich nur gewundert, dass git bei mir meinte ich wäre aktuell ;)

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)

Hauswart

Sieht nett aus, ich schaue mal rein :) Habe dir einen PR geschickt.
1. Installation:
KNX, Tasmota (KNX), Sonos, Unifi

2. Installation:
HM-CFG-USB, Unifi (, SIGNALduino 868, MySensors, SIGNALduino 433)

supernova1963

Vielen Dank für die Hilfe, CoolTux.

War auf meiner Prioritätenlisten hinter den allgemeinen Bug Lösungen.
Ich habe die von dir genannten Stellen natürlich durchgelesen, aber zugegeben, nicht vollständig verstanden.
So komme ich weiter und kann diesen Issue vorzeitig umsetzen.

Nochmal, vielen Dank,

Gernot 

CoolTux

Zitat von: supernova1963 am 23 November 2017, 11:11:42
Vielen Dank für die Hilfe, CoolTux.

War auf meiner Prioritätenlisten hinter den allgemeinen Bug Lösungen.
Ich habe die von dir genannten Stellen natürlich durchgelesen, aber zugegeben, nicht vollständig verstanden.
So komme ich weiter und kann diesen Issue vorzeitig umsetzen.

Nochmal, vielen Dank,

Gernot

Wenn ich das korrekt sehe arbeitet ja gerade Hauswart Dir zu. Hier kannst Du also bestimmt gerne nachfragen.
Ansonsten suche Dir einen Developer Deines Herzens und frage ob er Dein Mentor sein mag  :D



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

Hauswart

Zitat von: CoolTux am 23 November 2017, 11:23:06
Wenn ich das korrekt sehe arbeitet ja gerade Hauswart Dir zu. Hier kannst Du also bestimmt gerne nachfragen.
Ansonsten suche Dir einen Developer Deines Herzens und frage ob er Dein Mentor sein mag  :D
Ich habe eben auf die schnelle mal kurz den FHEM-Update Mechanismus hinzugefügt. :) Ich muss gestehen, dass ich beim FHEM entwickeln auch noch in den Anfangsschuhen stecke, daher wäre ich als Mentor eher ungeeignet. :)
1. Installation:
KNX, Tasmota (KNX), Sonos, Unifi

2. Installation:
HM-CFG-USB, Unifi (, SIGNALduino 868, MySensors, SIGNALduino 433)

CoolTux

Ok verstehe.
Dann noch mal ganz kurz erwähnt. Es gibt ein inoffizielles Mentorenprogramm, Interessierte können einfach einen Developer anschreiben und fragen ob er Zeit und Lust hat als Mentor tätig zu sein.



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 Hauswart,

auch dir vielen Dank für die Unterstützung.
Leider ist die Funktionalität in github auch weigehen Neuland.
Deinen PR habe ich "gemerged" und "confirmed".

Muss ich außerdem noch etwas beachten?
z.B. den Befehl:
sudo perl build-controls-list.pl ausführen?

Vielen Dank, ich lerne gerade jede Menge "Neues", ihr seid "WELT",

Gernot

Hauswart

Wenn du beim Entwicklen/Testen folgende Struktur hast:
/opt/fhem/build-controls-list.pl
/opt/fhem/controls_TVSender.txt
/opt/fhem/FHEM/98_TVSender.pm

Und die 98_TVSender.pm veränderst/anpasst und anschliessend
sudo perl build-controls-list.pl
ausführst, so wird die Datei controls_TVSender.txt neu generiert . Diese Datei ist wichtig, um von FHEM aus die Dateien aus deinem Github-Repo upzudaten zu können: https://wiki.fhem.de/wiki/Update#Repository-Verwaltung

Danach kannst du dann die modifizierte 98_TVSender.pm + controls_TVSender.txt in dein Repo stellen und andere können die aktuellste Version herunterladen (via FHEM).
1. Installation:
KNX, Tasmota (KNX), Sonos, Unifi

2. Installation:
HM-CFG-USB, Unifi (, SIGNALduino 868, MySensors, SIGNALduino 433)

supernova1963

Hallo CoolTux,

ich danke dir für die Informationen zum Thema FHEM Development.
Ich bin weit davon entfernt in dieser Liga mitzuspielen (man muss halt seine Grenzen kennen).
Das gesamte Werk hat mich Stunden gekostet zu lesen, verstanden habe ich es bei Weitem nicht, und, es hat mich mächtig Überwindung gekostet, meine stümperhaften, unausgereiften und wahrscheinlich gegen viele der bestehen Vorgaben und Richtlinien verstossenden Code hier zu teilen (siehe Betreff). Das möchte ich keinem Mentor zumuten. Vielleicht findet einer aus dieser Liga, Teile der Idee so interessant, um daraus ein offizielles Modul zu machen.     

Ich sehe das "Automatische senden von Befehlen für HTTPMOD" nicht als Modul im eigentlichen Sinne sondern eher als Codeschnipsel oder Makro. Mit einem Modul kann halt' einfach bessere Dummies anlegen.

Noch einmal vielen Dank für deine Ratschläge und Untertützung,

Gernot

@Hauswart: Danke, ich versuche es bei der nächsten Änderung 

supernova1963

Hallo Untertützer und Interessierte,

wie empfohlen habe ich den Tittel des Themas geändert.

Hier die aktuellen "Issues":

  • TVSender_sets verbessern
    Sorry, CoolTux, ich habe noch einmal viel gelesen, aber in den anderen Modulen, bei denen es funktioniert, werden der Hash x_sets nicht wie im Developer Beispiel gefüllt. Ich habe es auch hinbekommen, dass ":noArg" und :1,2,3 als DroDown verwendet wird. Daraus resultiert jedoch, dass die "defined" Abfrage von $opt immer "undefined" ergibt. Zur Prüfung habe ich ein Log3 vor die Abfrage gesetzt aber keine Lösung gefunden. Ich brauche doch noch einen Hinweis oder eine Erläuterung mehr. 
  • Regex - Problem bei fehlendem Sendungsbild
  • Problem, dass das stateFormat der HTTPMOD Devices nicht sortiert wird
  • ....

Danke,

Gernot

CoolTux

Gernot kannst Du mir bitte Rechte auf Dein Git geben.

Unter Einstellungen -> Collaborators auf GitHub.
Ich werde sofern ich das dann darf einen neuen Branch erstellen un ddort mein kleine Änderung einspielen. So kannst Du nach sichtung und entscheidung dann selber einen merge in Dein devel oder master machen.



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

Vielen Dank,

habe ich gemacht, soll ich den "CoolTux's shareable invitation link" als PN versenden?

Gernot

CoolTux

Zitat von: supernova1963 am 24 November 2017, 09:05:43
Vielen Dank,

habe ich gemacht, soll ich den "CoolTux's shareable invitation link" als PN versenden?

Gernot

Ja mach mal bitte. Hast Du auch den richtigen GitHub Usernamen genommen? Also LeonGaultier?
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

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)

supernova1963

Vielen Dank für den ausführlichen Bericht, Joachim.

Zitat von: MadMax-FHEM am 25 November 2017, 18:50:00
...
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!?)...
...
Du hast nichts falsch gemacht, das Attribut HarmonyDevice hat noch keine Funktion! Der Gedanke war, nur den Devicenamen einzugeben um den SwitchCommand zu generieren. Leider habe ich festgestellt, dass die in Frage kommenden Receiver völlig unterschiedlich gesteuert werden. Um völlig flexibel zu sein, die Funktion aber zu nutzen, habe ich mich für ein Attribut SwitchCommand entschieden (und die Generierung für mein Harmony Device vorzubelegen.
Solle ich das HarmonyDevice Attribut besser entfernen?

Zitat von: MadMax-FHEM am 25 November 2017, 18:50:00
...
Was ich nicht geschafft hab ist den Kanal anzupassen.
...
Das geht (noch) nicht! Die Kanal-Nr. ist die Basis für die Readings-Definition, wird diese verändert muss Alles zu dem Device gelöscht und neu angelegt werden. Z.Zt. Bitte Device löschen und neu anlegen.

Zitat von: MadMax-FHEM am 25 November 2017, 18:50:00
...
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...
...
Sorry, nicht Image sondern der Titel der aktuellen Sendung ist als Link zum schalten konfiguriert.

Zitat von: MadMax-FHEM am 25 November 2017, 18:50:00

...
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. ;)
...
Aber wie geschrieben, ich hab noch nicht so richtig "getestet"...
Es hilft glaube ich in diesem Stadium allen, zu erfahren, was läuft, hakt oder fehlt.

Danke,

Gernot

MadMax-FHEM

Zitat von: supernova1963 am 25 November 2017, 19:31:22
Vielen Dank für den ausführlichen Bericht, Joachim.

Bitte gerne!
Wenn ich schon sonst nicht wirklich helfen kann... ;)


Zitat von: supernova1963 am 25 November 2017, 19:31:22
Du hast nichts falsch gemacht, das Attribut HarmonyDevice hat noch keine Funktion! Der Gedanke war, nur den Devicenamen einzugeben um den SwitchCommand zu generieren. Leider habe ich festgestellt, dass die in Frage kommenden Receiver völlig unterschiedlich gesteuert werden. Um völlig flexibel zu sein, die Funktion aber zu nutzen, habe ich mich für ein Attribut SwitchCommand entschieden (und die Generierung für mein Harmony Device vorzubelegen.
Solle ich das HarmonyDevice Attribut besser entfernen?

Ok...

Also (wie du dem "Bericht" entnehmen kannst) hat mich das nur verwirrt.
Mir würde das SwitchCommand reichen...


Zitat von: supernova1963 am 25 November 2017, 19:31:22
Das geht (noch) nicht! Die Kanal-Nr. ist die Basis für die Readings-Definition, wird diese verändert muss Alles zu dem Device gelöscht und neu angelegt werden. Z.Zt. Bitte Device löschen und neu anlegen.

Ok, wenn ich's weiß brauch ich das (noch) nicht (weiter) testen...
Jep mache ich eh, also löschen und neu anlegen...


Zitat von: supernova1963 am 25 November 2017, 19:31:22
Sorry, nicht Image sondern der Titel der aktuellen Sendung ist als Link zum schalten konfiguriert.

Hmmm, verstehe ich jetzt nicht so wirklich was du meinst.
Also Umschalten ging (soweit ich mich jetzt erinnere) nur durch Klicken auf die Kanal-Zahl (161).

Beim Klicken auf das Bild der Sendung kam ich dann zur Sendung in Klack-TV.


Zitat von: supernova1963 am 25 November 2017, 19:31:22
Es hilft glaube ich in diesem Stadium allen, zu erfahren, was läuft, hakt oder fehlt.

Danke,

Gernot

Gut, dann werde ich (morgen) mal noch ein wenig "rumspielen"... ;)
Habe aktuell keinen Zugriff auf mein(e) System(e)...

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

ZitatHmmm, verstehe ich jetzt nicht so wirklich was du meinst.
Also Umschalten ging (soweit ich mich jetzt erinnere) nur durch Klicken auf die Kanal-Zahl (161).

Siehe Bild im Anhang. Der Titel der aktuellen Sendung ist ein Link, der umschalten sollte.

Freue mich auf Anregungen und konstruktive Kritik,

Gernot

MadMax-FHEM

Hi Gernot,

ah, ok.

Ich hab beim HTTPMOD-Device geklickt...
...und dort auf die '1' bzw. '161'...

Jetzt habe ich mir den define Befehl auch noch mal angeschaut und gesehen wie ich die '1' setzen kann... :)
(hätte ich ja auch gleich schon sehen können)

Probiere ich dann auch mal aus...
...also morgen...


Anregungen und konstruktive Kritik: versuche mein Bestes!

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

Achtung:

define < name> TVSender < Channel > [< ChannelName > < FavoritNr > ]

Dabei ist Channel für den SwitchComand und FavoritNr für die Sortierung!


supernova1963

Zitat von: Hauswart am 23 November 2017, 12:56:47
Wenn du beim Entwicklen/Testen folgende Struktur hast:
/opt/fhem/build-controls-list.pl
/opt/fhem/controls_TVSender.txt
/opt/fhem/FHEM/98_TVSender.pm

Und die 98_TVSender.pm veränderst/anpasst und anschliessend
sudo perl build-controls-list.pl
ausführst, so wird die Datei controls_TVSender.txt neu generiert . Diese Datei ist wichtig, um von FHEM aus die Dateien aus deinem Github-Repo upzudaten zu können: https://wiki.fhem.de/wiki/Update#Repository-Verwaltung

Danach kannst du dann die modifizierte 98_TVSender.pm + controls_TVSender.txt in dein Repo stellen und andere können die aktuellste Version herunterladen (via FHEM).

Hallo Hauswart,

ich bekomme es scheinbar nicht hin.
Ich weiß nicht wie ich die TVSender.pm Datei im git Ordner FHEM aktualisiere kann?
Immer wenn ich einen Upload mache, egal ob unter der Ordner FHEM oder im Hauptverzeichnis, die Datei unter FHEM ändert sich nicht.
Sie landet immer im Hauptverzeichnis.

Was mache ich da falsch?

Danke,

Gernot

supernova1963

Hallo zusammen,

Neue Version TVSender im git v0.2.2 DetailLink für HTTPMOD Devices

Neben der Sortierung des stateFormats der HTTPMOD Devices habe ich nun auch einen Link auf die Kl**k.de Detail Seite hinzugefügt.
Diese wird aufgerufen, wenn man auf den Sendungstitel in den HTTPMOD Devices klickt.

Mein Versuch einen URL - Link auf "get < Sendername > AktuelleSendung" zu hinterlegen ist gescheitert (öffnet leere Seite). Wenn man den Befehl über die Kommandozeile eingibt oder im TVSender Device die get Funktion nutzt funktioniert es.

Geht das überhaupt oder habe ich (mal wieder) etwas überlesen?

Danke

Gernot

MadMax-FHEM

Hallo Gernot,

so runtergeladen, bisheriges gelöscht (sicher ist mal sicher) und neu angelegt...

Aktuell (mehr Zeit hab ich grad nicht) nur Das Erste...
...evtl. nehme ich mal noch ein zwei andere Sender dazu...
(Dauert das Löschen immer so lang ;)  )

EDIT: also jetzt habe ich ZDF dazu genommen ;)

Jetzt habe ich mal das mit dem Klick auf den Titel getestet: funktioniert. Also das Switch Command wird ausgeführt! :)

Wenn ich im TVSender-Device auf das Sendungsbild klicke komme ich zu Klack-TV auf die "Detailseite" zur Sendung.

Wenn ich auf den Sendungslink im HTTPMOD klicke komme ich auf Klack-TV auf eine "Popup-Seite" wo die "Tages-Tipps" durchlaufen...


So nun oute ich mich: wie verwende ich denn das ganze?

Also die HTTPMOD Devices bräuchte ich gar nicht, sind ja nicht hübsch ;)
(klar du/das Modul braucht ja die Daten!?)

Am liebsten würde ich mit den angelegten TVSender-Devices "arbeiten".
(oder ist das so gedacht und ich hab's nur [noch] nicht "geschnallt" ;)  )

Und zwar würde ich die gerne "auseinander schneiden", also beispielsweise so:

alle TV-Device-Einträge "Aktuell" (und jeweils darunter evtl. "Danach") in einen room und ebenso "Prime Time" in einen extra room.

Sonst wird das (mir) zu unübersichtlich, da dann bei so 10-15 Sendern ja ganz schön gescrollt werden muss...

Da wäre es schön, wenn statt des Links "Das Erste" bzw. "ZDF" (also Link zur jeweiligen TVSender-Device-Detailansicht) das Senderlogo wäre :)

Klar kann ich mir das vermutlich irgendwie "zusammenschneiden" wäre auch kein Thema...
...es müsste halt nach einem Update etc. erhalten bleiben...  8)

Aber es hat auf jeden Fall alles was ich schon immer so wollte und das auf jeden Fall schöner und schneller als das selbst zusammengebastelte HTTPMOD und readingsGroup-Zeugs, gut das muss man ja nur einmal tun aber trotzdem... Also: danke! (noch mal)

Das mit dem Umschalten bei Klick und das Anzeigen eines "Vorschaubildes" hätte ich (wenn ich Zeit gehabt hätte) auch mal in mein HTTPMOD-Zeugs eingebaut...
...so teste ich halt lieber das Modul ;)

Ich hoffe du hast irgendwie verstanden was ich gerne hätte, wenn Wünsche nicht zu verwegen sind ;)

Und dann einfach melden was ich testen kann.

Ach ja: geht jetzt "normaler" Update per fhem Update schon?
Also nach dem Hinzufügen des Update-Eintrags natürlich...

EDIT: ach ja, ich weiß es ist wahrscheinlich als Beispiel gedacht? Aber ich muss immer eine ganze Menge Einträge in Switch Command löschen bevor ich mein Kommanso eintragen kann...

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

Zitat von: MadMax-FHEM am 27 November 2017, 22:54:45
...
Wenn ich auf den Sendungslink im HTTPMOD klicke komme ich auf Klack-TV auf eine "Popup-Seite" wo die "Tages-Tipps" durchlaufen...
...
Korrekt, mein Ziel, ein FHEM PopUp, wie es mit z.B. get ZDF AktuelleSendung geht, habe ich als URL Link nicht hinbekommen.
Soll ich eine andere Seite hinterlegen?
Hast du oder ein anderer Leser einen geeigneten Lösungsansatz?

Zitat von: MadMax-FHEM am 27 November 2017, 22:54:45
...
Also die HTTPMOD Devices bräuchte ich gar nicht, sind ja nicht hübsch ;)
(klar du/das Modul braucht ja die Daten!?)
...
Ja, sie sind elementar. Verschieben in hidden room sollte aber möglich sein.
Zitat von: MadMax-FHEM am 27 November 2017, 22:54:45
Am liebsten würde ich mit den angelegten TVSender-Devices "arbeiten".
(oder ist das so gedacht und ich hab's nur [noch] nicht "geschnallt" ;)  )

Und zwar würde ich die gerne "auseinander schneiden", also beispielsweise so:

alle TV-Device-Einträge "Aktuell" (und jeweils darunter evtl. "Danach") in einen room und ebenso "Prime Time" in einen extra room.

Sonst wird das (mir) zu unübersichtlich, da dann bei so 10-15 Sendern ja ganz schön gescrollt werden muss...
Im Grunde entspricht dein Wunsch ,,hübschen" HTTPMOD Devices in verschiedenen Räumen, oder?
Das stateFormat habe ich hier bewusst knapper gehalten, eben wegen der scroll Tiefe.
Aber davon mal abgesehen, individualisieren mit readingsGroup z.B. über die TVSender Devices sollte auch erheblich einfacher sein.
Zitat von: MadMax-FHEM am 27 November 2017, 22:54:45
...
Da wäre es schön, wenn statt des Links "Das Erste" bzw. "ZDF" (also Link zur jeweiligen TVSender-Device-Detailansicht) das Senderlogo wäre :)

Klar kann ich mir das vermutlich irgendwie "zusammenschneiden" wäre auch kein Thema...
...es müsste halt nach einem Update etc. erhalten bleiben...  8)
Die Detailansicht von Devices sind von FHEM selbst so vorgegeben, dass der Sendername nicht ausgeblendet werden kann (macht  durchaus Sinn!). Du kannst natürlich ein stateIcon hinzufügen.



Solange du kein AutoCreate oder UpdateAll ausführst, wird nichts geändert. Die Standard Attribute (sollten) werden, - wenn sie vorhanden sind -, auch dann nicht geändert (Ausnahmen: stateFormat, userattr).
Zitat von: MadMax-FHEM am 27 November 2017, 22:54:45
...
Ach ja: geht jetzt "normaler" Update per fhem Update schon?
Also nach dem Hinzufügen des Update-Eintrags natürlich...
Es sollte funktionieren, sicher bin ich mir da noch nicht. Bitte testen und berichten ...
Zitat von: MadMax-FHEM am 27 November 2017, 22:54:45
EDIT: ach ja, ich weiß es ist wahrscheinlich als Beispiel gedacht? Aber ich muss immer eine ganze Menge Einträge in Switch Command löschen bevor ich mein Kommanso eintragen kann...
Dieses Beispiel entspricht meinem Bedarf und soll die prinzipielle Vorgehensweise zeigen.
Geträumt habe ich von einen Set-Befehl "CreateSwitchCommand". Aufgrund der unterschiedlichen Befehle bzw. Befehlsfolgen ist dies für mich zu aufwendig und fehleranfällig.
Hast du oder ein anderer Leser ein geeigneten Lösungsweg?

Danke für deinen ausführlichen Bericht. Jede Information hilft mir und allen anderen Nutzern.

LG

Gernot

dev0

Zitat von: supernova1963 am 28 November 2017, 06:21:46
Korrekt, mein Ziel, ein FHEM PopUp, wie es mit z.B. get ZDF AktuelleSendung geht, habe ich als URL Link nicht hinbekommen.
...
Hast du oder ein anderer Leser einen geeigneten Lösungsansatz?
Habe den Thread nur überflogen, aber vermutlich hilft Dir asyncOutput.

DarkT

Was für ein geiles Teil. Respekt dafür!
Habe mir das gerade mal kurz installiert. Werde auf jeden Fall weiter dran bleiben und sehen wie ich in Zukunft da helfen kann.

Hauswart

Zitat von: supernova1963 am 27 November 2017, 06:53:11
Hallo Hauswart,

ich bekomme es scheinbar nicht hin.
Ich weiß nicht wie ich die TVSender.pm Datei im git Ordner FHEM aktualisiere kann?
Immer wenn ich einen Upload mache, egal ob unter der Ordner FHEM oder im Hauptverzeichnis, die Datei unter FHEM ändert sich nicht.
Sie landet immer im Hauptverzeichnis.

Was mache ich da falsch?

Danke,

Gernot
Hallo Gernot,

ich sehe du hast es mittlerweile hinbekommen? Für Linux / Windows gibt es auch gute Tools, welche dir das Uploaden auch automatisieren. Unter Windows müsstest du dann allerdings wohl noch Perl installieren um die build-controls-list.pl ausführen zu können.

Gruss



Zitat von: MadMax-FHEM am 27 November 2017, 22:54:45
Ach ja: geht jetzt "normaler" Update per fhem Update schon?
Also nach dem Hinzufügen des Update-Eintrags natürlich...
Hallo Joachim,
ja sollte gehen.
Gruss
1. Installation:
KNX, Tasmota (KNX), Sonos, Unifi

2. Installation:
HM-CFG-USB, Unifi (, SIGNALduino 868, MySensors, SIGNALduino 433)

MadMax-FHEM

Zitat von: Hauswart am 28 November 2017, 08:28:05
Hallo Joachim,
ja sollte gehen.
Gruss

Werde ich heute Abend auf jeden Fall testen!

Neben weiteren Dingen... ;)

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)

CoolTux

Hallo Gernot,

Erstmal auch von mir große Hochachtung und Respekt. Du hast da wirklich viel geschafft in der kurzen Zeit. Und von dem was ich da sehe und hoffentlich vom Code verstanden habe kann ich Dir sagen das Du nur noch einen Steinwurf weg davon bist das ganze ohne HTTPMODe zu realisieren  ;D
Ich versuche ein paar Dinge an zu passen aber ich komme einfach Zeitlich nicht dazu. Ich hoffe das ich was beitragen kann wenn ich wieder mehr Zeit finde. Also die Tage.



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

Zitat von: dev0 am 28 November 2017, 06:46:03
Habe den Thread nur überflogen, aber vermutlich hilft Dir asyncOutput.

Vielen Dank, dev0,

für deinen Hinweis auf asyncOutput. Ich habe wieder einmal, diesmal intensiver das Thema asyncOutput der Development Module API gelesen. Aber ich weiß nicht, ob ich das verstanden habe:

Im TVSender Modul muß eine Funktion AsyncOutputFn initialisiert werden, in der mit asyncOutput($client_hash, $message) z.B. das Ergebnis einer TVSender_get Funktion als $message an mein $client_hash (FHEMWEB bei mir = WEB) sendet und asynchron anzeigt?

Und bzw. woher kommt $client_hash->{canAsyncOutput} der vorher geprüft werden soll. Sowie Last-But-Not-Least, rufe ich diese Funktion oder die get-Funktion mit <a href="/fhem?cmd... auf.

Oder ganz anders, muß die get-Funktion den asyncOutput($client_hash, $message) enthalten. Dann frage ich mich, was in der initialisierten AsyncOutputFn stehen muss?

Wie du erkennst, benötige ich Unterstützung,

Gernot

supernova1963

Hallo Hauswart,

wenn es denn jetzt funktioniert, weiß ich jetzt wie ich vorgehen muss. Anfangs hatte ich noch eine Fehlermeldung im FHEM Update. Das hing mit einer Datei .TVSender.pm zusammen, die ich nicht ins git hochgeladen habe. Die habe ich aus dem Ordner verbannt und die build-controls-list.pl erneut aufgerufen.

War das korrekt so?

Danke noch einmal für die Untertützung,

Gernot

supernova1963


supernova1963

Hallo CoolTux,

du warst mir schon eine große Hilfe.
Ich freue mich auf deine Vorschläge, wenn du die Zeit gefunden hast.
Mit "ohne HTTPMODe" meinst du wahrscheinlich die direkte Nutzung von HttpUtils. Habe ich auch mal auf dem Schirm gehabt, aber wieder verworfen, da mein logischer Aufbau vorsieht, dass die Daten nicht zu oft abgerufen werden und somit mind. 2 besser 4 zentrale "SeitenabrufDevices" ohnehin dabei heraus kämen. Der Vorteil wäre natürlich, dass man eher von "Modulen" sprechen, und diese dann besser aufeinander abstimmen könnte oder ggf. eine zweistufige Modulkommunikation realisieren würde. Wie bekannt, ich bin absoluter Anfänger, bin aber bereit zu lernen.
Aktuell kann ich nicht beurteilen wieviel "Balast" das HTTPMOD Modul mitbringt bzw. welche Vorteile (außer einer nicht so eingeschränkten userattr Syntax) daraus zu ziehen sind.

Danke für dein Engagement,

Gernot

CoolTux

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

Zitat von: supernova1963 am 28 November 2017, 15:52:04
Hallo CoolTux,

du warst mir schon eine große Hilfe.
Ich freue mich auf deine Vorschläge, wenn du die Zeit gefunden hast.
Mit "ohne HTTPMODe" meinst du wahrscheinlich die direkte Nutzung von HttpUtils. Habe ich auch mal auf dem Schirm gehabt, aber wieder verworfen, da mein logischer Aufbau vorsieht, dass die Daten nicht zu oft abgerufen werden und somit mind. 2 besser 4 zentrale "SeitenabrufDevices" ohnehin dabei heraus kämen. Der Vorteil wäre natürlich, dass man eher von "Modulen" sprechen, und diese dann besser aufeinander abstimmen könnte oder ggf. eine zweistufige Modulkommunikation realisieren würde. Wie bekannt, ich bin absoluter Anfänger, bin aber bereit zu lernen.
Aktuell kann ich nicht beurteilen wieviel "Balast" das HTTPMOD Modul mitbringt bzw. welche Vorteile (außer einer nicht so eingeschränkten userattr Syntax) daraus zu ziehen sind.

Danke für dein Engagement,

Gernot

Ich hatte auch an ein zweistufiges Modulkonzept gedacht. Aber das ist gar nicht nötig. Es geht auch super ohne. Ich habe das früher bei meinem AMAD gemacht.
Alles was Du machen musst in Deinem Fall ist ein Master Device (nicht Modul) welches die Daten holt und vorhält. Du kannst ohne Probleme die erhaltenen Daten in einem Hash schreiben.
$hash->{helper}{bufprime}
$hash->{helper}{bufcurrent}

Die schreibst Du meinetwegen alle 120s neu. Also Abruf über HttpUtils nonBlocking

Deine eigentlichen Devices lesen lediglich diese Hashs immer wieder neu aus und erstellen auf Basis der Daten die Readings. Die Regex passt ja schon super, hatte ich heute Morgen mal kontrolliert.



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,

bis auf die für das Sendungs - Image. Wenn keins vorhanden ist sucht er weiter ggf. über den Sender hinweg.
Das steht auf der Todo - Liste (Issues - im git).
Hier habe ich auch deinen Vorschlag zur Erstellung eines Master - Devices für den Datenabruf eingestellt.

Wenn ein andere Leser helfen möchte diese Aufgaben sind noch offen (https://github.com/supernova1963/TVSender/issues):

1. Masterdevice (analog Vorschlag CoolTux)
2. Korrekte Regex für fehlende Sendung Images
3. DetailLink auf in HTTPMOD Devices als PopUp (analog Vorschlag dev0 und CoolTux)
4. SenderLogos herunterladen und lokal ablegen
5. Allgemeine Code Optimierungen

Über PR (Public Requests) dort oder Vorschläge hier würde ich mich freuen.

Vielen Dank,

Gernot

MadMax-FHEM

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)

RoBra81

Guten Abend,

Ich erlaube mir mal, mich an der Stelle auch mal mit rein zu hängen. Ich war vor längerer Zeit auch im ursprünglichen TV-Programm-Thread aktiv und hatte damals die Excel Tabelle gebaut. Nun verfolge ich den neuen Ansatz schon seit ein paar Tagen gespannt und habe es auch schon ausprobiert. Um nicht nur wünsche zu äußern habe ich mich auch gerade mal an der Regex für die Bilder versucht (leider zunächst erfolglos, ich werde es die Tage aber weiter probieren). Ich habe noch zwei Ideen, die ich damals umgesetzt hatte und die ich auch hier nicht schlecht fände:

1. Da man die Zeiten kennt, wann ein Programm zu Ende ist, müsste eigentlich nicht alle zwei Minuten aktualisiert werden, sondern z. B. immer eine Minute nach Start einer neuen Sendung.
2. Ich hatte es in meiner ReadingsGroup so umgesetzt, dass beim Klick auf die Sendernummer (bzw. das Senderlogo) einer Sendung in der Zukunft wurde ein at angelegt, welches zum entsprechenden Zeitpunkt umgeschaltet hat...

Mit freundlichen Grüßen
Ronny

Gesendet von meinem SM-G935F mit Tapatalk


supernova1963

Hallo Ronny,

deine Excel Datei habe ich auch gesehen und hat mich inspiriert das Thema weiter zu automatisieren. Im Prinzip habe ich die notwendigen Eingaben in das Define von TVSender verlegt ergänzt um einige individuelle Einstellungen über die Attribute. Ich freue mich, dass du als der inspirierende Experte dieses Thema verfolgst und dich beteiligst.

Deine Wünsche finde ich sehr interessant und ich nehme diese gerne auf.
Bei dem ersten Lesen, fällt mir aufgrund deiner Beschreibung zum Thema UmschaltTimer direkt ein möglicher Lösungsansatz ein (man könnte z.B. die Uhrzeit als Link noch dafür verwenden). Dennoch interessiert mich, wie du es umgesetzt hast bzw. umsetzen würdest (rawDefinition der DOIF, Notify bzw. MyUtils Code; oder direkt als Public Request im git als Erweitung der TVSender_sets und dem geeigneten html <a href="/fhem/cmd= ..." für stateFormat der HTTPMOD Devices und des TVSender Devices).

Bei dem 1. Wunsch zur Minimierung der Abrufe bin ich mir noch nicht ganz im Klaren, wie du es umgesetzt hast. Magst du bitte hier das Prinzip und vielleicht geeignete Beispiele als rawDefinitions oder direkt integrierbar als PR im git mal eine sub Funktion TVSender_RequestTimer($$) vorstellen, mit der diese Abrufe gesteuert werden können?

Vielen Dank,

Gernot

RoBra81

Guten Morgen,

mir hat das mit der RegEx für die Bilder keine Ruhe gelassen und ich denke, ich könnte es hinbekommen haben:

Für die aktuelle Sendung (am Beispiel von "Das Erste"):

<td class="image left">[\s]*<a[\s]*href[^>]* title="Das Erste:[^>]*><img\s*class="epgImage" src="(.*?)"

Für die folgende Sendung (ebenfalls "Das Erste"):

<td class="image">[\s]*<a[\s]*href[^>]* title="Das Erste:[^>]*><img\s*class="epgImage" src="(.*?)"

Zu den anderen Punkten müsste ich heute Abend genauer nachsehen, hier erstmal erste Infos:

Den Code für das geplante Umschalten müsste ich raussuchen, kann aber dauern, da ich die ReadingsGroups glaube ich gelöscht hatte...

Zur Minimierung der Abrufe: Ich hatte ein HTTPMOD-Device "DG.wz.TV.Programm.remote" für alle Sender. In diesem hatte ich die folgende Attribute gesetzt:

attr DG.wz.TV.Programm.remote get1Name TVProgramm
attr DG.wz.TV.Programm.remote get1URL http://www.klack.de/fernsehprogramm/was-laeuft-gerade/0/-1/free.html


und dann konnte ich das Abrufen mittels

get DG.wz.TV.Programm.remote TVProgramm

manuell triggern.

Dies hat dann ein DOIF übernommen:

define DG.wz.TV.Programm.remote.DI.update DOIF ([[DG.wz.TV.Programm.remote:ARD_next_time]] or \
[[DG.wz.TV.Programm.remote:ZDF_next_time]] or \
[[DG.wz.TV.Programm.remote:MDR_next_time]] or \
[[DG.wz.TV.Programm.remote:SAT.1_next_time]] or \
[[DG.wz.TV.Programm.remote:RTL_next_time]] or \
[[DG.wz.TV.Programm.remote:RTL_II_next_time]] or \
[[DG.wz.TV.Programm.remote:Pro7_next_time]] or \
[[DG.wz.TV.Programm.remote:VOX_next_time]] or \
[[DG.wz.TV.Programm.remote:Kabel_eins_next_time]] or \
[[DG.wz.TV.Programm.remote:Super_RTL_next_time]] or \
[[DG.wz.TV.Programm.remote:TELE_5_next_time]] or \
[[DG.wz.TV.Programm.remote:ARTE_next_time]] or \
[[DG.wz.TV.Programm.remote:3sat_next_time]] or \
[[DG.wz.TV.Programm.remote:WDR_next_time]] or \
[[DG.wz.TV.Programm.remote:NDR_next_time]] or \
[[DG.wz.TV.Programm.remote:Bayern_next_time]] or \
[[DG.wz.TV.Programm.remote:SWR_BW_next_time]] or \
[[DG.wz.TV.Programm.remote:SWR_RP_next_time]] or \
[[DG.wz.TV.Programm.remote:HR_next_time]] or \
[[DG.wz.TV.Programm.remote:RBB_next_time]] or \
[[DG.wz.TV.Programm.remote:sixx_next_time]] or \
[[DG.wz.TV.Programm.remote:Pro7_MAXX_next_time]] or \
[[DG.wz.TV.Programm.remote:RTL_NITRO_next_time]] or \
[[DG.wz.TV.Programm.remote:SAT.1_Gold_next_time]] or \
[[DG.wz.TV.Programm.remote:NICK_next_time]] or \
[[DG.wz.TV.Programm.remote:Disney_next_time]] or \
[[DG.wz.TV.Programm.remote:KiKa_next_time]] or \
[[DG.wz.TV.Programm.remote:DMAX_next_time]] or \
[[DG.wz.TV.Programm.remote:Eins_Plus_next_time]] or \
[[DG.wz.TV.Programm.remote:Phoenix_next_time]] or \
[[DG.wz.TV.Programm.remote:N24_next_time]] or \
[[DG.wz.TV.Programm.remote:N-TV_next_time]]) (deletereading DG.wz.TV.Programm.remote .*_image, get DG.wz.TV.Programm.remote TVProgramm)\

attr DG.wz.TV.Programm.remote.DI.update cmdpause 5


Das deletereading brauchte ich, damit nicht die alten Bilder stehen bleiben, wenn er kein neues findet...

Ronny

supernova1963

Hallo Ronny,

vielen Dank für die Konkretisierung der Umsetzung deiner Vorschläge.
Die Regex für die Sendungsbilder habe ich bereits in die Internals eingegeben. Sie sollten in dem nächsten Vorab-Release enthalten sein.

Bei dem Thema URL - Abruf Optimierung ist eine Realisierung nicht ganz so einfach. Meine ersten Gedanken sind:

  • Get- Funktionen analog deines Muster in den Definitionen der HTTPMOD Devices (sub TVSender_Add_HTTPMOD_Device($$$$) { ...  }) z.B. als ReCallURL einfügen
  • In der Überwachung der ob die FHEM Intitalisierung abgeschlossen ist (in "sub TVSender_Notify($$) { ...}") den neuen Get Befehl für ein einzelnes HTTPMOD Device z.B. "get TV_Program_NOW ReCallURL" ausführen, damit für das überwachte Device ein Änderungsereignis erzeugt
  • In der Ereignisüberwachung für TV_Program_NOW (ebenfalls im "sub TVSender_Notify($$) { ... }") für alle HTTPMOD Devices einen InternalTimer setzen, der 1 Minute nach dem frühesten Wert von den Readings .*_NEXT_Time liegt und die jeweilige neue: "get < HTTPMOD Device > ReCalllURL ausführt
  • Das daraus resultierende Ereignis zu dem überwachten HTTPMOD Device setzt den InternalTimer neu
  • ...

Dann könnte imo der Interval der HTTPMOD Devices auf 0 gesetzt werden, oder habe ich da einen Denkfehler?

Danke,

Gernot

RoBra81



Zitat von: supernova1963 am 29 November 2017, 18:29:04
Dann könnte imo der Interval der HTTPMOD Devices auf 0 gesetzt werden

Dem sollte so sein. Und die Aktualisierung der Primetime würde ich einmal kurz nach Mitternacht machen...

Ronny

Gesendet von meinem SM-G935F mit Tapatalk


supernova1963

Hallo Ronny,

Zitat von: RoBra81 am 29 November 2017, 18:37:35
Und die Aktualisierung der Primetime würde ich einmal kurz nach Mitternacht machen...

Echt, reicht 1 x pro Tag? Werden z.B. bei Brennpunkten oder so die Planer nicht aktualisiert?

Gernot

supernova1963

Weiter Gedanken dazu:

Das alles wäre mit einem eigenen Master Device (1 TVMaster Device anstelle der HTTPMOD Devices), wie von CoolTux vorgeschlagen, wahrscheinlich eleganter zu lösen. Im Moment traue ich mich aus Sorge wegen des Aufwands und Sorge vor dem Scheitern nicht daran diese Master Device zu erstellen.

Die zuvor beschriebenen Anpassungen packe spätestens am WE in ein weiteres Vorab-Release. Das Thema Master Device bedarf einiger Umstellungen. Kurzfristig wäre es nur realisierbar, wenn mir einen funktionierenden Public Request im git  dazu einstellt. Mir fehlt aktuell einfach die Zeit für etliche "Try-And-Errors".

Danke,

Gernot

DarkT

Hier mal eine Idee um die Images alle in einen lokalen Ordner zu laden.
Ich bin leider noch nicht tierf genug in FHEM um die sauber FHEM intergartion durchzuführen.
Auch mit dem Thema non-blocking habe ich noch zu wenig Erfahrung.

Aber es ist schon mal zumindest ein Lösungsanstz:


use File::Fetch;
use LWP::Simple;
use HTML::LinkExtor;
use Data::Dumper;
$Data::Dumper::Indent=1;

my $url = "http://images.klack.de/fernsehprogramm/fernsehprogramm/-1/free.html";

my %images = ();
my $html = get($url)
  or die "could not get images \n";

my $parser = HTML::LinkExtor->new(undef, $url);
$parser->parse($html);

my @all_link_refs = $parser->links();

for my $link_ref ( @all_link_refs  ) {
  my ( $html_tag, $attr_name, $this_url ) = @$link_ref;
  if ( ($html_tag eq 'img') ) {
    my $image_name = (split("/", $this_url))[-1];
    $images{$image_name}++;

    if ( $images{$image_name} == 1  ) {
        print "Downloading $this_url to $image_name...\n";
         my $ff = File::Fetch->new(uri => $this_url);
my $file = $ff->fetch() or die $ff->error;
    }   
  }
}


Die Idee  - da keine Directory Listings möglich sind - ist die Seite von klack abzurufen, auf der alle Sender inkl. Logo aufgeführt sind und dann die Bilder (Logos) zu laden.


supernova1963

Hallo DarkT,

ich habe dein perl - script getestet. Es läuft einwandfrei. Das geniale suchen der img-URLs über die img-Tags beeindruckt mich als Perl Anfänger sehr.

Mein Problem jedoch ist, dass so zwar alle Logos lokal gespeichert wären, deren Name aber weder durchgängig mit dem Suchbegriff noch mit den vergebenen device Namen überein stimmen (z.B. ard.png, Suchbegriff "Das Erste", Sendername "Das_Erste"). 

Wäre es nicht auch möglich, dass man mit zwei Parameter: </Pfad/SollDateiName> <vollständige url des Images> gezielt nur 1 Logo abholt und in dem Vorgabepfad und mit dem Vorgabe-Dateiname speichert?

Es würde generell nur einmal für jeden Sender starten (z.B. im TVSender_notify mit der Abfrage ob die Datei existiert). Das hätte u.A. auch den Vorteil, dass bei neuen Logos nur die Datei gelöscht werden muss, damit bei der nächsten Änderung es neu geladen wird.

Danke für deinen tollen Beitrag,

Gernot

DarkT

Also wenn ich das richtig verstehe, dann würde es Dir genügen, wenn Du so was hast

Eingabe: ard.png -> Das_Erste
Ausgabe: Datei im Ordner ../images/Das_Erste.png

Du musst dann eine Mapping im Code hinterlegen. Das könnte man das wie folgt lösen:


# includes
# ---------------------------------
use File::Fetch;
use LWP::Simple;
use HTML::LinkExtor;
use Data::Dumper;
use Cwd qw();
$Data::Dumper::Indent=1;

# variable definitions
# ---------------------------------

# mapping array for desired filenames
my %filename_mapping = (
        'ard.png' => 'Das_Erste.png',
        'rtl.png' => 'RTL.png',
    );

# where to find all icons
my $url = "http://images.klack.de/fernsehprogramm/fernsehprogramm/-1/free.html";

# where should the icons be stored
my $folder = Cwd::cwd() . "/icons/";


# program
# ---------------------------------

#1 Load url with all images
my %images = ();
my $html = get($url)
  or die "could not get images \n";

# extract all links from url
my $parser = HTML::LinkExtor->new(undef, $url);
$parser->parse($html);
my @all_link_refs = $parser->links();

# for each link, check if is an icon
for my $link_ref ( @all_link_refs  ) {
  my ( $html_tag, $attr_name, $this_url ) = @$link_ref;
  if ( ($html_tag eq 'img') ) {
    my $image_name = (split("/", $this_url))[-1];
    $images{$image_name}++;

# if is icon -> download and rename to desired filename
    if ( $images{$image_name} == 1  ) {
        # print "Downloading $image_name -> $filename_mapping{$image_name} ...\n";
         my $ff = File::Fetch->new(uri => $this_url);
my $file = $ff->fetch(to => $folder) or die $ff->error;
rename $folder . $image_name, $folder . $filename_mapping{$image_name};
    }   
  }
}


Neu ist dann


  • my %filename_mapping
    Hier müsste dann - falls notwendig - ein mapping für jedes Icon eingetragen werden
  • $folder
    Hier kann der Ordner angegeben werden wohin die Icons geladen werden (zur Zeit <current working directory>/icons)
  • rename
    Diese Zeile nennt die Dateien wie gewünscht um

Hast Du Dir das so vorgestellt?

Anmerkung:
Eventuell kann man das ganze natürlich auch so löäsen, dass man für jedes Icon die komplette URL hinterlegt ... das ist dann noch etwas unabhängiger von der Seite "http://images.klack.de/fernsehprogramm/fernsehprogramm/-1/free.html" ... ich weiss nicht wie sehr sich diese Seite ändert.

supernova1963

Hallo DarkT,

deine Perl Kenntnisse hätte ich gerne. Sehr interessanter Lösungsansatz für den Download aller Logos.

Ich habe es mir etwas einfacher gemacht und warte bis das Reading (z.B. Das_Erste_Logo) im HTTPMOD Device die vollständige URL für das Senderlogo ermittelt hat. Dann lasse ich die Datei mit wget <Logo URL> -O <Pfad>/<Devicename>.png herunterladen. Dan habe ich zwar nur das eine Logo pro TVSender Device, aber mehr benötigt man ja auch nicht.

Ich kämpfe noch mit der Umsetzung von Ronny's Vorschlag zur Optimerung der Aktualisierungszyklen. Wenn ich das am Wochenende geschafft habe, werde ich eine neue Version ins git stellen.

Danke, ich habe viel gelernt,

Gernot

DarkT

War mein erstes Perl Skript - bin allerdings beruflich mit Entwicklung verbunden.
Da ist dann irgendwie eine Sprache wie die andere ;)

Vielen Dank für deine Mühen

supernova1963

Hallo zusammen,

Ich habe eben ein Zwischenrelease hochgeladen:

https://github.com/supernova1963/TVSender/releases/tag/0.2.3

Noch nicht geschafft habe ich:

  • UmschaltTimer (Vorschlag von Ronny)
  • Optimierung der Seitenabrufe (Ronny) oder MasterDevice (CoolTux)
  • DetailLink mit asynchOutput (dev0) (

Hilfe benötige ich zu folgenden Thema um die Seitenabrufe zu optimieren:

Ermittlung der nächsten Uhrzeit von den folgenden Sendungen und deren Umwandlung in einen TimeStamp für "InternalTimer($timestamp, $functionName, $arg);".
Da man nicht auf den Device Hash des TV_Program_NEXT zugreifen soll, suche ich nach einer geeigneten Vorgehensweise zur Ermittlung der ReadingsNamen für ReadingsVal(...).

Alternativ bzw. ergänzend würde voraussichtlich das Master Device, wenn es läuft und die notwendigen Anpassungen durchgeführt sind, einiges vereinfachen.

Danke,

Gernot


supernova1963

Sorry, ich verzweifle an dem asyncOutput.

Ich möchte das Ergebnis der Befehle als URL Link aufrufen:

./fhem?cmd=get%20Das_Erste%20AktuelleSendung
./fhem?cmd=get%20Das_Erste%20NaechsteSendung
./fhem?cmd=get%20Das_Erste%20PrimeTimeSendung
./fhem?cmd=get%20Das_Erste%20PrimeTimeSendungfolgend

Dafür sind folgende gets definiert:
sub TVSender_Get($@) {
  my ($hash, $name, $cmd, @args) = @_;
  my ($arg, @params) = @args;
  my $list = '';
  my $table = '';

  if ($cmd eq 'AktuelleSendung') {
    $table = '<html><table width=650px >'
      .'<tr><td style="text-align: center;;background-color: #e0e0e0;;color: black" colspan=3 >A  K  T  U  E  L  L</td></tr>'
      .'<tr><td style="vertical-align: top;;text-align: right;;font-size: larger;;width: 50px" >'.ReadingsVal($name,"TV_Program_NOW_Time","").'</td>'
      .'<td style="vertical-align: top;;text-align: left;;font-weight: bold;;font-size: larger;;width: 400px;;white-space: normal" ><a href="/fhem?cmd=set%20'.$name.'%20Switch2Channel%201" >'.ReadingsVal($name,"TV_Program_NOW_Title","").'</a><br /><div style="vertical-align: top;;text-align: left;;font-weight: initial;;font-size: smaller">'.ReadingsVal($name,"TV_Program_NOW_Description","").'</div></td>'
      .'<td style="vertical-align: top;;width: 200px" >'.ReadingsVal($name,"TV_Program_NOW_Image","").'</td></tr>'.'</table></html>';
    return $table;
  }
  elsif ($cmd eq 'NaechsteSendung') {
    $table = '<html><table width=650px >'
      .'<tr><td style="text-align: center;;background-color: #e0e0e0;;color: black" colspan=3 >A  N  S  C  H  L  I  E  S  S  E  N  D</td></tr>'
      .'<tr><td style="vertical-align: top;;text-align: right;;font-size: larger;;width: 50px" >'.ReadingsVal($name,"TV_Program_NEXT_Time","").'</td>'
      .'<td style="vertical-align: top;;text-align: left;;font-weight: bold;;font-size: larger;;width: 400px;;white-space: normal" ><a href="/fhem?cmd=set%20'.$name.'%20Switch2Channel%201" >'.ReadingsVal($name,"TV_Program_NEXT_Title","").'</a><br /><div style="vertical-align: top;;text-align: left;;font-weight: initial;;font-size: smaller">'.ReadingsVal($name,"TV_Program_NEXT_Description","").'</div></td>'
      .'<td style="vertical-align: top;;width: 200px" >'.ReadingsVal($name,"TV_Program_NEXT_Image","").'</td></tr>'.'</table></html>';
      return $table;
  }
  elsif ($cmd eq 'PrimeTimeSendung') {
    $table = '<html><table width=650px >'
      .'<tr><td style="text-align: center;;background-color: #e0e0e0;;color: black" colspan=3 >P  R  I  M  E    T  I  M  E</td></tr>'
      .'<tr><td style="vertical-align: top;;text-align: right;;font-size: larger;;width: 50px" >'.ReadingsVal($name,"TV_Program_PT_Time","").'</td>'
      .'<td style="vertical-align: top;;text-align: left;;font-weight: bold;;font-size: larger;;width: 400px;;white-space: normal" ><a href="/fhem?cmd=set%20'.$name.'%20Switch2Channel%201" >'.ReadingsVal($name,"TV_Program_PT_Title","").'</a><br /><div style="vertical-align: top;;text-align: left;;font-weight: initial;;font-size: smaller">'.ReadingsVal($name,"TV_Program_PT_Description","").'</div></td>'
      .'<td style="vertical-align: top;;width: 200px" >'.ReadingsVal($name,"TV_Program_PT_Image","").'</td></tr>'.'</table></html>';
      return $table;
   }
  elsif ($cmd eq 'PrimeTimeSendungfolgend') {
    $table = '<html><table width=650px >'
    .'<tr><td style="text-align: center;;background-color: #e0e0e0;;color: black" colspan=3 >D  A  N  A  C  H</td></tr>'
    .'<tr><td style="vertical-align: top;;text-align: right;;font-size: larger;;width: 50px" >'.ReadingsVal($name,"TV_Program_PTNEXT_Time","").'</td>'
    .'<td style="vertical-align: top;;text-align: left;;font-weight: bold;;font-size: larger;;width: 400px;;white-space: normal" ><a href="/fhem?cmd=set%20'.$name.'%20Switch2Channel%201" >'.ReadingsVal($name,"TV_Program_PTNEXT_Title","").'</a><br /><div style="vertical-align: top;;text-align: left;;font-weight: initial;;font-size: smaller">'.ReadingsVal($name,"TV_Program_PTNEXT_Description","").'</div></td>'
    .'<td style="vertical-align: top;;width: 200px" >'.ReadingsVal($name,"TV_Program_PTNEXT_Image","").'</td></tr>'.'</table></html>';
    return $table;
  }
  else {
    $list = ""
    ."AktuelleSendung:noArg"
    ." NaechsteSendung:noArg"
    ." PrimeTimeSendung:noArg"
    ." PrimeTimeSendungfolgend:noArg" ;

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


Was muss ich nun tun, damit die URL-Links funktionieren?

Ich habe gelesen, dass die AsyncOutput Funktion im TVSender Modul initialisiert und existieren muss:
$hash->{AsyncOutputFn}  = 'TVSender_AsyncOutput';
...
sub TVSender_AsyncOutput ($)
{
my ( $client_hash, $text ) = @_;
        ...
return $error;
}


Meine Fragen:

Ich sehe nur einen Parameter der übergeben wird. Aufgelöst werden jedoch ($Client_hash, $text). Ist das korrekt?
Was muß ich in die sub TVSender_AsyncOutput ($) eintragen, damit das Ergebnis der gets ausgegeben wird?
Wie muss der URL-Link aussehen?

Vielen Dank für eure Hilfe,

Gernot


CoolTux

https://wiki.fhem.de/wiki/DevelopmentModuleAPI#asyncOutput

Da hast Du was missverstanden. Nicht Dein Modul muß die Fn bereitstellen sondern das Modul über das die Clientverbindung besteht. Also FHEMWEB oder telnet. Gehen ja im Moment nur die zwei. FTUI ginge zum Beispiel nicht.

Einfach in der Funktion in welcher Du das ganze dann zusammenbauen willst

if( $param->{cl} and $param->{cl}->{TYPE} eq 'FHEMWEB' ) {
       
        my $ret = '<html><table><tr><td>';
        $ret .= '<table class="block wide">';
        $ret .= '<tr class="even">';
        $ret .= "<td><b>City</b></td>";
        $ret .= "<td><b>Last Update Time</b></td>";
        $ret .= "<td><b>Latitude</b></td>";
        $ret .= "<td><b>Longitude</b></td>";
        $ret .= "<td></td>";
        $ret .= '</tr>';
.....


Das $param->{cl} musst Du natürlich mitgeben, also in meinem Beispiel. Also da wo Du den nicht blockierenden Datenabruf tätigst


$param->{cl} = $hash->{CL} if( ref($hash->{CL}) eq 'HASH' );
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

mkraus81

hi,

seit heute Mittag scheint es nicht mehr zu gehen... im Log steht

TV_Program_NEXT: Read response to update didn't match any Reading
2017.12.06 13:25:08 3: TV_Program_NEXT: Read response to update didn't match any Reading
2017.12.06 13:25:08 3: TV_Program_PT: Read response to update didn't match any Reading
2017.12.06 13:27:08 3: TV_Program_NOW: Read response to update didn't match any Reading
2017.12.06 13:27:08 3: TV_Program_NEXT: Read response to update didn't match any Reading
2017.12.06 13:29:08 3: TV_Program_PTNEXT: Read response to update didn't match any Reading
2017.12.06 13:31:08 3: TV_Program_NEXT: Read response to update didn't match any Reading

Mir fehlt da leider das Wissen ob den Fehler zu analysieren... Ich vermute, dass sich eventuell was an der Website geändert hat?

Invers

Muss wirklich an Klack liegen. Ich nutze das alte Modul und da geht auch nichts.
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

supernova1963

Hallo ist bei mir das Gleiche,

Komme aber erst am Wochenende dazu die Regex zu überprüfen und ggf. anzupassen.
Sollte einer von euch die neuen Regex posten, erstelle morgens früh ein Update.

Danke,

Gernot

supernova1963

Hallo zusammen,

seit heute früh, funktioniert es bei mir ohne Änderungen wieder.
Wie sieht es bei euch aus?

Gernot

P.S. nur für Tester: Da mir das manuelle "set <TVSender> UpdateAll" zu aufwendig wurde (hab' zum Test mal mehr als 30 TVSender definiert!), aktualisiere ich, - nachdem ich das Modul verändert und neu geladen habe, jedes TVSender Device mit
set TYPE=TVSender UpdateAll
Funktioniert das bei Euch auch, oder bricht dann alles zusammen?
Bitte seid vorsichtig mit dem Test in einem Live-System, da damit für jeden Sender alle Einstellungen inkl. der Einstellungen für die HTTPMOD Devices für jedes TVSender Device aktualisiert werden.

CoolTux

Ich bin aktuell dabei die Umstellung zu schreiben auf ein Master Device welches dann die Daten via HttpUtils_NonblockingGet holt
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

mkraus81

ich habe eine Verbesserunswunsch...

kann man es irgendwie so machen, das bei UpdateAll das Switch Attribute nicht aktualisiert wird?
Denn ich habe keine Harmony sonder nutze das LGWebOS Modul

set LgTVWohnzimmer channel 1

und das jedesmal wieder manuell zu ändern ist irgendwie doof

oder irgendwie eine Funktion mit der man bei allen devices das Switch Attribute auf einmal ändern kann

CoolTux

@Gernot
Ich habe soeben eine erste Version mit Bridge Deviceunterstützung hochgeladen. Wenn man das erste mal ein Device definiert wird automatisch das Bridge Device angelegt und es beginnt ein fetch der Daten welcher entweder von Hand noch mal gemacht werden kann set update beim Bridge Device oder halt eben alle INTERVAL Sekunden. Default im Moment 300 und noch nicht änderbar.

Ich würde Dich bitten, Code den Du nicht verstehst nicht gleich zu löschen, sondern mich zu fragen was genau der Code macht.



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

CoolTux

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

mkraus81

das sind ne Menge Daten...
Ich habe erstmal alles ausgebaut und warte auf eine Version die nicht so einen Traffic verursacht

CoolTux

@Gernot

Ich bin nun fertig. Die Daten werden nur noch alle 30 min abgerufen im internen Hash vorgehalten. $hash->{helper}{buf..}

Von da können sich nun Deine Senderdevices die Daten ziehen. Unterschieden werden Sender und Master Device von $hash->{BRIDGE} oder $hash->{CHANNEL}

Wenn fragen sind einfach fragen. Je eher wir das ans laufen bekommen um so ruhiger wird der Provider des Anbieters.
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

Sorry,

es liegt nicht in meiner Absicht irgendeinem anderen Probleme zu bereiten.

Da ich zur Zeit keine Änderungen durchführen kann, bitte ich alle Ihre TVSender und damit erzeugten HTTPMOD Devices zu löschen.
Das Git werde ich ebenfalls löschen.

Vielen Dank, CoolTux und allen anderen für eure Unterstützung,


Gernot Rau

CoolTux

Warum denn das? Lass es uns doch sauber weiter entwickeln. Immer hin ist ja nun auch großer Schritt dahin getan.
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 habe einfach derzeit keine Zeit für diese für mich weitgehend unbekannten Veränderungen.
Bisher war alles so aufgebaut, dass das TV Sender Modul nur die entsprechenden Einträge in dem 4 HTTPMOD Devices vorgenommen hat.
Jetzt muss alles umgestrickt werden, da die Daten nun in den TVSender Devices aufbereitet werden.
Das ist bei weitem kein Update sonder eine völlig geänderte Struktur.

Deinen Vorschlag habe ich unmittelbar als PR veröffentlicht. Leider hat mein Test ergeben, dass die HTTPMOD Devices nach wie vor angelegt werden und nur diese verursachen "Traffic".

Diese HTTPMOD Devices scheinen ein gewisses Eigenleben zu entwickeln, und Unmengen an Daten zu laden. 
Da ich es weder abstellen noch genau sagen kann, warum und weshalb, soll keiner sagen, ich wäre für diesen Traffic verantwortlich.

Ich habe viel von dir gelernt, dafür danke ich dir zum wiederholten Mal.

Das git wird heute Abend, nachdem ich alles gesichert habe, gelöscht.

Sorry ...

DarkT

Danke Gernot und CoolTux für eure Mühen.

Schade, dass diese tolle Projekt nun erst mal auf Eis liegt - ich hoffe das sich das in Zukunft ändert.
Wie ist eigentlich der saubere Weg das Modul wieder zu entfernen?
Die Devices kann man doch einfach löschen, oder?

CoolTux

Du kannst einfach ein
delete TYPE=TVSender

Bei den HTTPMOD Devices musst von Hand ran.
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

DarkT

Ich meinte eigentlich ... ,,wie lösche ich das Modul" ?

Sorry fürs Missverständniss.

CoolTux

Es reicht wenn Du die Moduldatei löschst die Du damals ins FHEM Verzeichnis kopiert hast.
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