PID - Odjezdová tabule

Ucelené projekty, návody a postupy.
Uživatelský avatar
Tad
Administrátor fóra
Administrátor fóra
Příspěvky: 455
Registrován: 30. prosinec 2020, 00:14
Bydliště: 3D
Dal poděkování: 89 poděkování
Dostal poděkování: 52 poděkování

PID - Odjezdová tabule

Příspěvek od Tad »

Pustil jsem se do zobrazování odjezdů autobusů v HA, hlavně kvůli dětem, ihned vidí jestli to jede a hlavně v kolik to jede, data se vyčítají přímo online. Na stránce

Kód: Vybrat vše

https://api.golemio.cz/v2/pid/docs/openapi/?fbclid=IwAR1TW9F4CygY5QL1fQrsFQwugi6-q3ASC6xtWlzDiNkpOOOxavZuxYuNFBM#/%F0%9F%9A%8F%20PID%20Departure%20Boards/get_pid_departureboards
jsou všechny možnostI, které jdou z PID číst, je tam toho mrak, zatím sem nepřišel jak vyčítat odjezdy pouze směrem k nám z větší zastávky, která má více linek a autobusy odjíždí do více směrů, ale časem na to určitě přijdu.
Na výše uvedeném odkazu jsou v podstatě všechny informace (odkazy) které potřebujete, nejdůležitější je se zaregistrovat se na

Kód: Vybrat vše

https://api.golemio.cz/api-keys/auth/sign-in
pro získání API tokenu, který se musí při dotazování používat.
Hodím sem své flow, které po vyplnění vašich dat bude makat, kdyby někdo již používal a měl nějaký tip tak sem sním ;)
busyHA.png

Kód: Vybrat vše

[{"id":"0ca02d9082adaf35","type":"http request","z":"11356d0f4f6ddb17","name":"Dalsi bus smer Kolin","method":"GET","ret":"obj","paytoqs":"ignore","url":"https://api.golemio.cz/v2/pid/departureboards/?ids=<SEM VLOŽTE IDS ZASTÁVKY>&total=<SEM ZADEJSTE POČET NÁSLEDUJÍCÍCH SPOJŮ KTERÉ CHCETE VYČÍTAT>","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[{"keyType":"Content-Type","keyValue":"","valueType":"other","valueValue":"application/json; charset=utf-8"},{"keyType":"other","keyValue":"x-access-token","valueType":"other","valueValue":"<SEM VLOŽTE TOKEN API>"}],"x":300,"y":60,"wires":[["cd0854fe76a5b2fe","9c01bf2247d4054e","76323da534d1cbcc","4414cb5a18ddd11d","0e9ab4224d7766f1","04c319b0059401bf","ca0fa0b39a01de7e"]]},{"id":"9c01bf2247d4054e","type":"change","z":"11356d0f4f6ddb17","name":"1-Planovany odjezd","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.departures[0].arrival_timestamp.scheduled","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":580,"y":100,"wires":[["ad2d355c61ff82d0"]]},{"id":"76323da534d1cbcc","type":"change","z":"11356d0f4f6ddb17","name":"1-Predpokladany odjezd","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.departures[0].arrival_timestamp.predicted","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":605,"y":60,"wires":[["e3f32905baa224a1"]]},{"id":"4414cb5a18ddd11d","type":"change","z":"11356d0f4f6ddb17","name":"1 - Posledni projeta zastavka","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.departures[0].last_stop.name","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":615,"y":135,"wires":[["e29994bc2e0b1e43"]]},{"id":"75c0179bbabb0dc1","type":"inject","z":"11356d0f4f6ddb17","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"10","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":285,"y":120,"wires":[["0ca02d9082adaf35"]]},{"id":"e3f32905baa224a1","type":"ha-sensor","z":"11356d0f4f6ddb17","name":"Predpokladany odjezd 1","entityConfig":"890a968e02a4eb78","version":0,"state":"payload","stateType":"msg","attributes":[],"inputOverride":"allow","outputProperties":[],"x":890,"y":35,"wires":[[]]},{"id":"ad2d355c61ff82d0","type":"ha-sensor","z":"11356d0f4f6ddb17","name":"Planovany odjezd 1","entityConfig":"111ad411879372c9","version":0,"state":"payload","stateType":"msg","attributes":[],"inputOverride":"allow","outputProperties":[],"x":870,"y":80,"wires":[[]]},{"id":"e29994bc2e0b1e43","type":"ha-sensor","z":"11356d0f4f6ddb17","name":"Posledni poloha 1 ","entityConfig":"f776a346e13a9a07","version":0,"state":"payload","stateType":"msg","attributes":[],"inputOverride":"allow","outputProperties":[],"x":875,"y":125,"wires":[[]]},{"id":"ca0fa0b39a01de7e","type":"change","z":"11356d0f4f6ddb17","name":"1 - Odjezd za min","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.departures[0].departure_timestamp.minutes","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":590,"y":175,"wires":[["b1faf917df81bda6"]]},{"id":"b1faf917df81bda6","type":"ha-sensor","z":"11356d0f4f6ddb17","name":"Odjezd za 1","entityConfig":"6fdbc0ac0e9004aa","version":0,"state":"payload","stateType":"msg","attributes":[],"inputOverride":"allow","outputProperties":[],"x":865,"y":175,"wires":[[]]},{"id":"890a968e02a4eb78","type":"ha-entity-config","server":"6ac5a410.6dcd3c","deviceConfig":"","name":"Predpokladany odjezd 1","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"Predpokladany odjezd 1"},{"property":"icon","value":"mdi:bus-clock"},{"property":"entity_category","value":""},{"property":"entity_picture","value":""},{"property":"device_class","value":"timestamp"},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""}],"resend":false,"debugEnabled":false},{"id":"111ad411879372c9","type":"ha-entity-config","server":"6ac5a410.6dcd3c","deviceConfig":"","name":"Planovany odjezd 1","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"Planovany odjezd 1"},{"property":"icon","value":"mdi:bus-clock"},{"property":"entity_category","value":""},{"property":"entity_picture","value":""},{"property":"device_class","value":"timestamp"},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""}],"resend":false,"debugEnabled":false},{"id":"f776a346e13a9a07","type":"ha-entity-config","server":"6ac5a410.6dcd3c","deviceConfig":"","name":"Posledni poloha ","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"Posledni poloha "},{"property":"icon","value":"mdi:bus-stop"},{"property":"entity_category","value":""},{"property":"entity_picture","value":""},{"property":"device_class","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""}],"resend":false,"debugEnabled":false},{"id":"6fdbc0ac0e9004aa","type":"ha-entity-config","server":"6ac5a410.6dcd3c","deviceConfig":"","name":"Odjezd za 1","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"Odjezd za 1"},{"property":"icon","value":"mdi:bus-clock"},{"property":"entity_category","value":""},{"property":"entity_picture","value":""},{"property":"device_class","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""}],"resend":false,"debugEnabled":false},{"id":"6ac5a410.6dcd3c","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":false,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"30","areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true}]
integrace přes HACS: https://github.com/dvejsada/PID_integration
Naposledy upravil(a) Tad dne 11. únor 2024, 18:17, celkem upraveno 1 x.
HAOS-x86-64, Intel J4125 Quad Core, 8GB RAM, 512GB SSD, Conbee II, zigbee2MQTT

ivosh
Nováček na fóru
Nováček na fóru
Příspěvky: 1
Registrován: 08. květen 2023, 17:35
Dal poděkování: 2 poděkování

Re: PID - Odjezdová tabule

Příspěvek od ivosh »

Díky za zajímavý nápad.

Povedlo se mi na golemio vytvořit vlastní request, který potřebuji, ale netuším, kam vložit ten JSON pod obrázkem.
Zvládl bych vytvořit REST sensor, ale tohle je předpokládám už připravené?

kiklhorn
Moderátor
Moderátor
Příspěvky: 901
Registrován: 03. červenec 2021, 18:35
Dal poděkování: 107 poděkování
Dostal poděkování: 210 poděkování

Re: PID - Odjezdová tabule

Příspěvek od kiklhorn »

ivosh píše: 08. květen 2023, 17:44 kam vložit ten JSON pod obrázkem.
Node-Red
Vše co si přinesu domů je buď Shelly, nebo to skončí buď pod ESPhome nebo pod Zigbee2mqtt.
Ajťák co pamatuje BBS a OS/2 Warp a je mu jedno o jaký systém nebo síťařinu běží.
HA OS jako jedna z Proxmox VM na Odroid H3+/64GB https://github.com/tteck/Proxmox

lvondracek
Nováček na fóru
Nováček na fóru
Příspěvky: 5
Registrován: 09. červenec 2023, 23:18
Dal poděkování: 1 poděkování

Re: PID - Odjezdová tabule

Příspěvek od lvondracek »

tady to mate trochu jinak

export z NR - pro import nazev zkratit o priponu TXT

Jde o prehled odjezdu z nam blizke soustavy zastavek Sidliste Repy - zahrnuje tramvaje i autobusy. S filtry a dotazy si hrajte dal sami. Zobrazuji to jen v Lovelace pomocí karty custom:auto-entities
Přílohy
Snímek obrazovky pořízený 2023-07-09 23-23-44.png
type_custom_auto-entities.yml.txt
karta z lovelace - pro import nazev zkratit o priponu TXT
(539 bajtů) Staženo 135 x
MHD.json.txt
export z NR - pro import nazev zkratit o priponu TXT
(7.48 KiB) Staženo 128 x

suchar
Nováček na fóru
Nováček na fóru
Příspěvky: 5
Registrován: 12. únor 2022, 16:56
Dal poděkování: 1 poděkování

Re: PID - Odjezdová tabule

Příspěvek od suchar »

Snažím se zorientovat v API, ale vůbec se mi to nedaří.
Rád bych omezil výstup z dotazu API jen odjezdy vlaků ze zadané zastávky. ID zastávky mám, ale nevím jak filtrovat ten dopravní prostředek jen na vlak.

lvondracek
Nováček na fóru
Nováček na fóru
Příspěvky: 5
Registrován: 09. červenec 2023, 23:18
Dal poděkování: 1 poděkování

Re: PID - Odjezdová tabule

Příspěvek od lvondracek »

API je celekm slušně popsano ve Swaggeru na adrese :link: https://api.golemio.cz/v2/pid/docs/openapi/

Pokud hovoříme v kontextu PID, pak pokud máte správné ID zastávky (to si ověřte zde :link: http://data.pid.cz/stops/xml/StopsByName.xml ), tak by vám z ní, s ohledem na přítomnost kolejí vlakového rozchodu jen těžko mohlo jezdit něco jiného než vlaky. :sorry:

Zajímá vás hodnota pole gtfsIds. To je pak pro dotaz na /pid/departureboards hodnotou pole ids.

Vodítka lze hledat rovněž na :link: https://pid.cz/o-systemu/opendata/

Pošlete sem ID zastávky. :thx:

suchar
Nováček na fóru
Nováček na fóru
Příspěvky: 5
Registrován: 12. únor 2022, 16:56
Dal poděkování: 1 poděkování

Re: PID - Odjezdová tabule

Příspěvek od suchar »

Jaj, jak se zdálo, tak ID zastávky bylo chybné. Vlaková stanice má své ID a autubusová zastávka v témže místě má ID odlišné. V tom byl ten problém. Už to běží. Díky moc.

suchar
Nováček na fóru
Nováček na fóru
Příspěvky: 5
Registrován: 12. únor 2022, 16:56
Dal poděkování: 1 poděkování

Re: PID - Odjezdová tabule

Příspěvek od suchar »

ID zastávky je "U454Z301".
Ještě musím přijít na to, jak filtrovat jen spoje, které jedou směr Praha.

lvondracek
Nováček na fóru
Nováček na fóru
Příspěvky: 5
Registrován: 09. červenec 2023, 23:18
Dal poděkování: 1 poděkování

Re: PID - Odjezdová tabule

Příspěvek od lvondracek »

suchar píše: 10. červenec 2023, 22:20 ID zastávky je "U454Z301".
Ještě musím přijít na to, jak filtrovat jen spoje, které jedou směr Praha.
No, jednofuchý dotaz pro vaše ID vrací něco takového:

Kód: Vybrat vše


{
  "stops": [
    {
      "stop_id": "U454Z301",
      "level_id": null,
      "location_type": 0,
      "parent_station": null,
      "platform_code": null,
      "stop_lat": 50.087166,
      "stop_lon": 14.663997,
      "stop_name": "Praha-Klánovice",
      "wheelchair_boarding": 0,
      "zone_id": "B",
      "asw_id": {
        "node": 454,
        "stop": 301
      }
    }
  ],
  "departures": [
    {
      "arrival_timestamp": {
        "predicted": "2023-07-10T23:19:00+02:00",
        "scheduled": "2023-07-10T23:19:00+02:00"
      },
      "delay": {
        "is_available": false,
        "minutes": null,
        "seconds": null
      },
      "departure_timestamp": {
        "predicted": "2023-07-10T23:19:00+02:00",
        "scheduled": "2023-07-10T23:19:00+02:00",
        "minutes": "7"
      },
      "last_stop": {
        "id": null,
        "name": null
      },
      "route": {
        "short_name": "S1",
        "type": 2,
        "is_night": false,
        "is_regional": true,
        "is_substitute_transport": false
      },
      "stop": {
        "id": "U454Z301",
        "platform_code": null
      },
      "trip": {
        "direction": null,
        "headsign": "Kolín",
        "id": "1301_9365_221211",
        "is_at_stop": false,
        "is_canceled": false,
        "is_wheelchair_accessible": true,
        "is_air_conditioned": null,
        "short_name": "Os 9365"
      }
    },
    {
      "arrival_timestamp": {
        "predicted": "2023-07-10T23:29:30+02:00",
        "scheduled": "2023-07-10T23:29:30+02:00"
      },
      "delay": {
        "is_available": false,
        "minutes": null,
        "seconds": null
      },
      "departure_timestamp": {
        "predicted": "2023-07-10T23:29:30+02:00",
        "scheduled": "2023-07-10T23:29:30+02:00",
        "minutes": "17"
      },
      "last_stop": {
        "id": null,
        "name": null
      },
      "route": {
        "short_name": "S1",
        "type": 2,
        "is_night": false,
        "is_regional": true,
        "is_substitute_transport": false
      },
      "stop": {
        "id": "U454Z301",
        "platform_code": null
      },
      "trip": {
        "direction": null,
        "headsign": "Praha hl. n.",
        "id": "1301_9362_221211",
        "is_at_stop": false,
        "is_canceled": false,
        "is_wheelchair_accessible": true,
        "is_air_conditioned": null,
        "short_name": "Os 9362"
      }
    },
    {
      "arrival_timestamp": {
        "predicted": "2023-07-10T23:49:00+02:00",
        "scheduled": "2023-07-10T23:49:00+02:00"
      },
      "delay": {
        "is_available": false,
        "minutes": null,
        "seconds": null
      },
      "departure_timestamp": {
        "predicted": "2023-07-10T23:49:00+02:00",
        "scheduled": "2023-07-10T23:49:00+02:00",
        "minutes": "37"
      },
      "last_stop": {
        "id": null,
        "name": null
      },
      "route": {
        "short_name": "S1",
        "type": 2,
        "is_night": false,
        "is_regional": true,
        "is_substitute_transport": false
      },
      "stop": {
        "id": "U454Z301",
        "platform_code": null
      },
      "trip": {
        "direction": null,
        "headsign": "Nymburk hl. n.",
        "id": "1301_8619_221211",
        "is_at_stop": false,
        "is_canceled": false,
        "is_wheelchair_accessible": true,
        "is_air_conditioned": null,
        "short_name": "Os 8619"
      }
    },
    {
      "arrival_timestamp": {
        "predicted": "2023-07-11T00:51:00+02:00",
        "scheduled": "2023-07-11T00:51:00+02:00"
      },
      "delay": {
        "is_available": false,
        "minutes": null,
        "seconds": null
      },
      "departure_timestamp": {
        "predicted": "2023-07-11T00:51:00+02:00",
        "scheduled": "2023-07-11T00:51:00+02:00",
        "minutes": "99"
      },
      "last_stop": {
        "id": null,
        "name": null
      },
      "route": {
        "short_name": "S1",
        "type": 2,
        "is_night": false,
        "is_regional": true,
        "is_substitute_transport": false
      },
      "stop": {
        "id": "U454Z301",
        "platform_code": null
      },
      "trip": {
        "direction": null,
        "headsign": "Kolín",
        "id": "1301_9301_221210",
        "is_at_stop": false,
        "is_canceled": false,
        "is_wheelchair_accessible": true,
        "is_air_conditioned": null,
        "short_name": "Os 9301"
      }
    }
  ],
  "infotexts": []
}
Z toho vyplývá, že tak asi jediné, čím se lze orientovat je položka headsign, takže si zřejmě s tom javascriptu ukrytém v nodu odjezdy-list budete muset pohrát s podmínkou typu

Kód: Vybrat vše


if msg.MHDin.departures[i].trip.headsign.includes("Praha") {
....

};

Kdyz timhle obklíčíte stávající řádek 20 z toho javascriptu ukrytém v nodu odjezdy-list, kde je teď

Kód: Vybrat vše

    msg.payload = vystup.slice(0, 220)
tak by vám to do výstupu mělo psát jen to, co bude mít na čelní ceduli cokoliv, co obsahuje "Praha".

Tedy je to samo jen nápad a z hlediska opravdických programátorů (to nejsem) jistě i dost "na prase" a určitě by se to dalo filtrovat i dale, ale na výstupu přímo z API zřejmě není podle čeho nebo to tam nevidím.

lvondracek
Nováček na fóru
Nováček na fóru
Příspěvky: 5
Registrován: 09. červenec 2023, 23:18
Dal poděkování: 1 poděkování

Re: PID - Odjezdová tabule

Příspěvek od lvondracek »

Když teď tak koukám na ten požadavek jen na "Prahu" a nahlížím při tom do toho svého "zprasku", vidím, že tomu spousta věcí chybí. Například by to asi mělo na začátku nulovat ty helpery (to nedělá), aby v gridu byla fakt jen čerstvá data, taky by to asi mohlo nějak lépe počítat s těmi požadavky na filtry na výstupu (to taky nemam). kontrolovat počet nově získaných záznamů, mohlo by to i dynamicky měnit interval aktualizace na "až když nadejde odjezd toho nejbližšího spoje" apod. Spousta nápadů.

No, berte to tedy prosím spíš jako PoC, které z API nějak doluje nějaká data, s kterými už se nechá nějak něco podnikat. A hrajte si.

Odpovědět

Zpět na „Komplexní projekty“