Störningsinformation

Hej!

Tidigare kunde man få ut dessa event direkt från ert API som har blivit ersatt:

EventMajor => "Avstängt"
EventMinor => "Stor påverkan"
EventGood => "Inga större störningar"
EventPlanned => "Inga större störningar" with boolean flag Planned = true.

Var hittar jag denna information nu?
Peter

Kommentarer

  • Hej Peter,

    Du kan använda importance, influence och urgency för att komma fram till dessa nivåer.

    SL multiplicerar dessa tre värden för att ta fram ett enda priority värde. Sen jämförs det antagligen med några gränsvärden för att bestämma en allvarlighetsgrad som visas på webbsidan. Det går att göra lika dant, och kan återskapas med lite testning.

    Man vet tex att "Förseningar på som mest 10 minuter för Tvärbanan 30 på grund av bilköer. Förseningarna beräknas pågå till cirka kl 18:30." med en prioritet av 56 klassas som större (meddelanden från https://sl.se/reseplanering/trafiklaget?locationType=TRANSPORT_TYPE&name=Sp%C3%A5rvagn%2FLokalbana&transportType=TRAM går att leta upp i API:et), samtidigt som en inställd avgång med prioritet 35 inte klassas som större, så gränsen går nog någonstans mellan 40-50. Genom att hitta lite fler testvärden i det intervallet och att jämföra med sidan kan man återskapa exakt samma beteende.

    Hälsningar,
    Bert
    Bert på Trafiklab
  • Hej Bert,

    Tack för snabbt svar. Misstänkte att det kunde vara dessa man skulle använda sig av för detta men då det står i fet stil: "only used to sort messages" så blev man lite fundersam =)

    De specifika tröskelvärde som SL använder för att klassificera dessa nivåer, är det något man skulle kunna kan ta del av?

    Peter
  • Hej igen =)

    Inte helt säker men verkar som att 25 är gränsen mellan "Inga störningar" och "Inga allvarliga störningar"

    API Response for METRO:
    /:398 Priority Score: 6
    /:398 API Response for BUS:
    /:398 Priority Score: 35
    /:398 API Response for TRAM:
    /:398 Priority Score: 21
    /:398 API Response for LOKALBANA:
    /:398 Priority Score: 25
    /:398 API Response for TRAIN:
    /:398 Priority Score: 35
    /:398 API Response for FERRY:
    /:398 Mode: FERRY, No data available

    Känns aningen tråkigt att behöva vänta på en allvarligare incident som behöver inträffa för att man ska kunna testa sig fram till det tröskelvärdet.
    Peter
  • Denna markeras som "större störning" av SL.

    Kan det vara så att SL endast använder sig av de två första parametrarna då urgency_level verkar vara 1 på alla meddelanden? Multiplicerar man importance och influence så är det, det högsta talet jämfört med de andra mindre störningarna.

    "priority": {
    "importance_level": 7,
    "influence_level": 7,
    "urgency_level": 1
    },
    "message_variants": [
    {
    "header": "Inställd avgång",
    "details": "AGA - Ropsten kl 15:09\nRopsten - Gåshaga brygga kl 15:22, 16:15, 17:07, 18:00, 18:52\nGåshaga brygga - Ropsten kl 15:50, 16:43, 17:35, 18:28 är inställd på grund av vagnbrist.",
    "scope_alias": "Lidingöbanan 21",
    "language": "sv"
    }

    Peter
  • Nu verkar jag ha lyckats med att replikera statusen med sammalika som finns på startsidan hos sl.se genom att hämta API data enskilt från varje transportmedel separat och sedan visa felmeddelande baserat på den högsta summan, exempelvis 7+7+1=15 som verkar vara det högsta resultatet.

    Kan eventuellt behöva justeras något, men här är del av koden.

    // Define transport modes, translations, and icons
    $transport_modes = [
    'METRO' => ['name' => 'Tunnelbana', 'icon' => 'subway', 'apiUrl' => 'https://deviations.integration.sl.se/v1/messages?future=false&transport_mode=METRO'],
    'BUS' => ['name' => 'Buss', 'icon' => 'directions_bus', 'apiUrl' => 'https://deviations.integration.sl.se/v1/messages?future=false&transport_mode=BUS'],
    'TRAM' => ['name' => 'Spårvagn', 'icon' => 'tram', 'apiUrl' => 'https://deviations.integration.sl.se/v1/messages?future=false&transport_mode=TRAM'],
    ......

    // Function to calculate priority score and determine status
    function calculate_priority_status($priority) {
    $score = $priority->importance_level + $priority->influence_level + $priority->urgency_level;

    // Log the calculated score to the console
    echo "<script>console.log('Priority Score: $score');</script>";

    if ($score >= 15) {
    return 'EventMajor'; // Major event (Större störning)
    } elseif ($score >= 10 && $score < 15) {
    return 'EventMinor'; // Minor event (Inga större störningar)
    } else {
    return 'EventGood'; // No significant disruptions (Inga störningar)
    }
    }
    Peter

Kommentera eller skriv ett nytt inlägg

Ditt namn och inlägg kan ses av alla. Din e-post visas aldrig publikt.