Deux fonctionnalités que je n'arrive pas à réaliser sous HA

Oui, pour debuger, tu ajoutes un noeud debug avec « msg complet »

Le split me permet de séparer les 10 horaires reçus par la requête et de les placer ensuite dans des messages mqtt séparés.
image

Grace à cela, ensuite tu peux par exemple te faire un lovelace ordinateur avec les 10 prochains départs, une réponse par interrogation telegram sur 2 ou 3 prochains horaires seulement, un affichage tablette avec seulement le prochain…
Une fois que tu as ton information dans MQTT, tu la manipules comme tu veux dans HA ou autres.

[{"id":"5d96d39e.5e99d4","type":"tab","label":"Navitia","disabled":false,"info":""},{"id":"f592d142.6fcb38","type":"inject","z":"5d96d39e.5e99d4","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"480","crontab":"","once":true,"onceDelay":"","topic":"","payload":"","payloadType":"num","x":110,"y":60,"wires":[["4795e0fe.6f27b8"]]},{"id":"45a9b9b.a55d5c8","type":"function","z":"5d96d39e.5e99d4","name":"Auth Header","func":"msg.headers = {}\nmsg.headers['Authorization'] = \"Ton_token_navitia\";\n//Renseigner le Token Navitia\");\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":190,"y":140,"wires":[["b583d70c.b98d48"]]},{"id":"b583d70c.b98d48","type":"http request","z":"5d96d39e.5e99d4","name":"Recherche Horaires Navitia","method":"GET","ret":"obj","paytoqs":"ignore","url":"https://api.navitia.io/v1/coverage/fr-ne/stop_areas/stop_area%3AOIS%3ASA%3ANavitia%3A3014273/routes/route%3AOIS%3A2-1-C2/departures?","tls":"","persist":false,"proxy":"","authType":"","x":240,"y":220,"wires":[["7ffb8829.314248"]],"inputLabels":["Demande formatée API"],"outputLabels":["Liste Objets"]},{"id":"7ffb8829.314248","type":"function","z":"5d96d39e.5e99d4","name":"Départs","func":"msg.payload = msg.payload.departures;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":120,"y":360,"wires":[["e7335450.dbd6b8"]]},{"id":"e7335450.dbd6b8","type":"split","z":"5d96d39e.5e99d4","name":"","splt":"\\r\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":270,"y":360,"wires":[["a46cbf1a.691f6"]]},{"id":"a46cbf1a.691f6","type":"switch","z":"5d96d39e.5e99d4","name":"route","property":"parts.index","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"num"},{"t":"eq","v":"1","vt":"num"},{"t":"eq","v":"2","vt":"num"},{"t":"eq","v":"3","vt":"num"},{"t":"eq","v":"4","vt":"num"},{"t":"eq","v":"5","vt":"num"},{"t":"eq","v":"6","vt":"num"},{"t":"eq","v":"7","vt":"num"},{"t":"eq","v":"8","vt":"num"},{"t":"eq","v":"9","vt":"num"}],"checkall":"true","repair":false,"outputs":10,"x":410,"y":360,"wires":[["1ea9d822.6d8ee8"],["1ea9d822.6d8ee8"],["1ea9d822.6d8ee8"],["1ea9d822.6d8ee8"],["1ea9d822.6d8ee8"],["1ea9d822.6d8ee8"],["1ea9d822.6d8ee8"],["1ea9d822.6d8ee8"],["1ea9d822.6d8ee8"],["1ea9d822.6d8ee8"]]},{"id":"1ea9d822.6d8ee8","type":"function","z":"5d96d39e.5e99d4","name":"","func":"var msg1 = {};\n\nmsg1.topic = \"navitia/Departs-\"+msg.payload.display_informations.label+\"/Depart\"+(msg.parts.index + 1);\nmsg1.payload = {\n    \"ligne\":msg.payload.display_informations.label,\n    \"direction\": msg.payload.display_informations.direction,\n    \"timestamp\":msg.payload.stop_date_time.departure_date_time\n}\n\nreturn msg1;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":640,"y":360,"wires":[["2eefb888.3faa4"]]},{"id":"2eefb888.3faa4","type":"mqtt out","z":"5d96d39e.5e99d4","name":"","topic":"","qos":"2","retain":"true","broker":"a98244dc.513ad","x":830,"y":360,"wires":[]},{"id":"31e79ba8.a35eb4","type":"comment","z":"5d96d39e.5e99d4","name":"Attention, API gratuite = 5 000 requetes / mois","info":"","x":270,"y":24,"wires":[]},{"id":"4795e0fe.6f27b8","type":"time-range-switch","z":"5d96d39e.5e99d4","name":"5h30 - 22h30","lat":"","lon":"","startTime":"05:30","endTime":"22:30","startOffset":0,"endOffset":0,"x":280,"y":60,"wires":[["45a9b9b.a55d5c8"],[]]},{"id":"a98244dc.513ad","type":"mqtt-broker","name":"","broker":"127.0.0.1","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]

Pour le programme tv j’ai trouvé ca qui marche en iframe

2 « J'aime »

Hello, je suis en train de construire mon EPG.
Ce n’est pas encore abouti, mais assez fonctionnel :


Je peux piloter ma TV avec ça (box android, mais vraiment simple à adapter à une livebox, ou n’importe quoi intégrable à HA).

Le gros point noir, c’est la collecte des données : je les récupère depuis un site en ligne (que je nommerai pas pour ne pas risquer le spam chez eux et l’arrêt du service), je les mets en forme quotidiennement via un script bash (filtre des chaines, association des logos et ajout des codes TV) et je le dépose dans un répertoire lu par mon intégration. En gros, ça construit un XML dans le format attendu par mon EPG.

Je manque de temps pour le mettre sous git, et peaufiner les quelques bugs restants, mais si ça intéresse du monde, je tacherai de partager ça (attention : c’est mon tout premier développement, donc très perfectible).

1 « J'aime »

@ALX

super boulot je suis bien interéssé pas cette epg y as moyen que tu me dise comment tu fait ?

Hello !
Ma carte exploite un fichier JSON qui contient toutes les données (le programme du jour).
Tout le boulot est là : il faut générer quotidiennement quelque chose sous ce format là :

[{
        "key": "192",
        "value": [{
                "title": "Les experts : Miami",
                "subTitle": "Dernières vacances",
                "genre": "Série",
                "startDate": 1673224800000,
                "endDate": 1673228400000,
                "description": "Les Partney, une famille canadienne sans histoires, sont à Miami pour y passer des vacances. Mais un drame se produit : un de leurs fils est retrouvé mort.",
                "longSynopsis": "Les Partney, une famille canadienne sans histoires, sont à Miami pour y passer des vacances. A la fin de leur séjour, alors qu'ils s'apprêtent à quitter leur hôtel, un des deux fils, Brian, est retrouvé mort dans un ascenseur, BLAH BLAH BLAH...",
                "images": [{
                        "url": "http://....jpg",
                        "type": "landscape",
                        "withTitle": true
                    }, {
                        "url": "http://....jpg",
                        "type": "portrait",
                        "withTitle": true
                    }, {
                        "url": "http://....jpg",
                        "type": "portrait",
                        "withTitle": true
                    }, {
                        "url": "http://....jpg",
                        "type": "landscape",
                        "withTitle": false
                    }
                ],
                "seasonNumber": 6,
                "episodeNumber": 8
            }, {
                "title": "Programmes de la nuit",
                "genre": "Programme indéterminé",
                "startDate": 1673228400000,
                "endDate": 1673242200000,
                "description": "Retrouvez tous vos programmes de nuit.",
                "longSynopsis": "Retrouvez tous vos programmes de nuit.",
                "images": [{...}]
            },
            ...
        ],
        "channel": "NRJ_Hits.fr",
        "position": 112,
        "command": "256"
    }, {
        "key": "1179",
        "value": [{
                "title": "...",
                "genre": "...",
                "startDate": ...,
                "endDate": ...,
                "description": "...",
                "longSynopsis": "...",
                "images": [{
                        "url": "...",
                        "type": "...",
                        "withTitle": ...
                    }
                ]
            },
            ...

En gros :

  • key = la clé associée à la chaine (inutile pour la card; je l’utilise pour la constitution du JSON)
  • channel : son nom
  • position : sa position dans l’EPG
  • command : les codes à envoyer à la box Android; je peux facilement changer ça pour piloter autre chose (je sais que ça peut fonctionner avec une box orange)
  • value [] : la liste des programmes pour cette chaine, avec title, genre, startDate, endDate, description, longSynopsis, images: toutes les infos qui décrivent le programme

Si vous arrivez à générer ça (je le fais en bash avec cURL et JQ), vous aurez toute la matière.
Je ne peux pas donner ma source de données, mais j’ai vu des sources « libres »… reste à mettre en forme.
Si vous le sentez, je mettrai mon code source en ligne (encore une fois : il est très perfectible, mais il fonctionne pas mal).

ok je vois la façon dont tu le gére mon souci c’est de l adapté a mon xmltv que j ai !
merci je vais penché dessus cela me met sur une piste un grand merci a toi

Je n’avais pas vu XMLTV.
Je n’ai pas regardé la structure dans le détail, mais il doit y avoir moyen de le mettre en forme pour coller à la description qu’attend ma carte.
Fais signe si tu avances ou que tu coinces : j’essaierai de jeter un oeil avec toi.
Ca pourrait être sympa d’avoir une solution qui tient la route. :yum:

je regarde un peut mais je suis une bille en json est du coup cela colle pas avec ce que je veut faire malheureusement …

oui mais je ne suis pas un ouf du code et encore moin json lol

ok pour le xml mais c’est quoi l’integration que t’utilise pour l’epg en elle meme ?