Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Tester
  4. ...nicht in offiziellem Repo
  5. Test Adapter public-transport v0.1.x GitHub/npm

NEWS

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    328

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    9
    1
    297

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    927

Test Adapter public-transport v0.1.x GitHub/npm

Geplant Angeheftet Gesperrt Verschoben ...nicht in offiziellem Repo
öpnvfahrplanhaltestellenwidget
15 Beiträge 6 Kommentatoren 197 Aufrufe 8 Beobachtet
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • T Offline
    T Offline
    TT-Tom
    schrieb am zuletzt editiert von TT-Tom
    #1
    Aktuelle Test Version 0.2.0
    Veröffentlichungsdatum xx.xx.xxxx
    Github Link https://github.com/tt-tom17/ioBroker.public-transport

    Der Adapter nutzt zwei API's, HAFAS für regionale Fahrpläne, Österreich und VENDO für die Deutsche Bahn.

    Es können Abfahrten einer Station/Haltestelle und/oder Verbindungen zwischen zwei Stationen abgerufen.

    Zusätzlich bietet er Widgets für Vis 1 an. Wichtig, die Widgets werden von der KI geschrieben. nach meinen Vorgaben.

    Das Widget für die Verbindungen hat einen zusätzliches Popup mit den Details zur Route.
    Bildschirmfoto 2026-04-01 um 20.49.34.png
    Bildschirmfoto 2026-04-01 um 20.49.55.png Bildschirmfoto 2026-04-01 um 20.50.39.png

    Installation über die Katze und dann npm.
    Weitere Infos sind in der Readme auf Github inkl. link zur deutschen Version.

    Ich bin sehr dankbar um jegliches Feedback hier oder als Issue in GitHub.

    Gruß Tom
    https://github.com/tt-tom17
    Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

    NSPanel Script Wiki
    https://github.com/joBr99/nspanel-lovelace-ui/wiki

    NSPanel Adapter Wiki
    https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

    1 Antwort Letzte Antwort
    4
    • HomoranH Homoran verschob dieses Thema von Tester am
    • HomoranH Homoran verschob dieses Thema von ...nicht in offiziellem Repo am
    • mcm1957M Online
      mcm1957M Online
      mcm1957
      schrieb am zuletzt editiert von
      #2

      @homoran
      Der Adapter ist noch nicht im Repro. Bitte in ".....nicht in offiziellem Repo" verschieben.
      https://github.com/ioBroker/ioBroker.repositories/pull/5751

      Entwicklung u Betreuung: envertech-pv, hoymiles-ms, ns-client, pid, snmp Adapter;
      Support Repositoryverwaltung.

      Wer 'nen Kaffee spendieren will: https://paypal.me

      LESEN - gute Forenbeitrage

      1 Antwort Letzte Antwort
      0
      • HomoranH Homoran verschob dieses Thema von Tester am
      • T Offline
        T Offline
        TT-Tom
        schrieb am zuletzt editiert von
        #3

        Neue Version verfügbar 0.2.0

        ich habe das Widget für die Abfahrten geändert und für die Info - Spalte ein Popup gebaut. Mir hat nicht gefallen, dass der Text dort zum Teil sehr viel / groß ist. Jetzt sind dort drei Symbole zu sehen, je nachdem welche Info vorhanden ist.

        Bildschirmfoto 2026-04-21 um 10.40.14.png

        • rotes Ausrufezeichen im Kreis für Warnungen
        • gelbes Dreieck für Hinweise
        • "i" im Kreis für Statusmeldungen

        wenn man jetzt auf die Symbole klickt, öffnet sich das Popup mit allen Informationen zu dieser Abfahrt. Der Link in den Hinweisen funktioniert ;)

        Bildschirmfoto 2026-04-21 um 10.41.08.png

        Wichtig
        Um das neue Popup zu nutzen, kann es möglich sein das der Adapter neu installiert werden muss. War bei mir nötig, weil das Widget nicht sauber aktualisiert wurde.

        Gruß Tom
        https://github.com/tt-tom17
        Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

        NSPanel Script Wiki
        https://github.com/joBr99/nspanel-lovelace-ui/wiki

        NSPanel Adapter Wiki
        https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

        1 Antwort Letzte Antwort
        0
        • B Offline
          B Offline
          booleeny
          schrieb am zuletzt editiert von
          #4

          Bei mir funktioniert der Adapter ganz super. Wow richtig gut! Vielen lieben Dank. Nutze zur Zeit die Vendo DB Anbindung. Da kommt die Info gefühlt schneller als HAFAS. Bei der ersten Installation wurde nicht automatisch eine Instanz erstellt die musste ich erst durch den klick auf + erstellen. Aber vielleicht ist das auch normal bei der Installation über "Developer Github Katze". Mir war das Widget für meinen vorhandenen Dashboard Platz zu groß. Außerdem Nutzte ich vis-2 und bin mir nicht sicher ob das Widget dafür auch gemacht ist. Daher habe ich den vis-jsontemplate Adapter installiert. Der klappt ganz großartig und mit ClaudeAI ist ratzfatz ein individuelles Widget erstellt. Man muss nur den JSON Datenpunkt angeben und in Vorlage z.B. folgenden Code kopieren:

          <% 
          if (typeof data !== 'undefined' && data && data.journeys && Array.isArray(data.journeys)) { 
              function formatTime(isoString) {
                  if (!isoString) return "--:--";
                  var date = new Date(isoString);
                  var h = date.getHours().toString();
                  var m = date.getMinutes().toString();
                  return (h.length < 2 ? '0' + h : h) + ":" + (m.length < 2 ? '0' + m : m);
              }
          
              var firstJourney = data.journeys[0];
              var stationTitle = "Verbindung";
              
              if (firstJourney && firstJourney.legs && firstJourney.legs[0]) {
                  var l0 = firstJourney.legs[0];
                  if (l0.origin && l0.destination) {
                      stationTitle = l0.origin.name + " → " + l0.destination.name;
                  }
              }
          %>
          <div style="color: white; font-family: RobotoCondensed-Bold; padding: 5px;">
            
            <div style="font-size: 0.9em; color: #aaaaaa; margin-bottom: 6px;">
              <%= stationTitle %>
            </div>
          
            <table style="width: 100%; border-collapse: collapse; font-size: 14px; margin-top: 0px;">
              <thead>
                <tr style="text-align: left; border-bottom: 1px solid #444; color: #888; font-size: 0.72em; text-transform: uppercase; letter-spacing: 0.05em;">
                  <th style="padding: 6px 8px;">Linie</th>
                  <th style="padding: 6px 8px;">Abfahrt</th>
                  <th style="padding: 6px 8px;">Ankunft</th>
                  <th style="padding: 6px 8px;">Info</th>
                </tr>
              </thead>
              <tbody>
                <% for (var i = 0; i < data.journeys.length; i++) { 
                   var journey = data.journeys[i];
                   var leg = (journey.legs && journey.legs[0]) ? journey.legs[0] : null;
                   if (!leg) continue;
                   
                   var depDelay = Math.round((leg.departureDelay || 0) / 60);
                   var arrDelay = Math.round((leg.arrivalDelay || 0) / 60);
                   var hasDepDelay = depDelay > 0;
                   var hasArrDelay = arrDelay > 0;
          
                   var lineName = (leg.line && leg.line.name) ? leg.line.name : "?";
                   var depPlat = leg.departurePlatform ? "Gl. " + leg.departurePlatform : "";
                   var plannedDepPlat = leg.plannedDeparturePlatform ? leg.plannedDeparturePlatform : "";
                   var platChanged = depPlat && plannedDepPlat && leg.departurePlatform !== leg.plannedDeparturePlatform;
          
                   var warnings = [];
                   if (leg.remarks && leg.remarks.length > 0) {
                       for (var j = 0; j < leg.remarks.length; j++) {
                           if (leg.remarks[j].type === "warning") {
                               warnings.push(leg.remarks[j].summary || leg.remarks[j].text);
                           }
                       }
                   }
                   if (platChanged) {
                       warnings.unshift("Gl. " + leg.departurePlatform + " (statt " + leg.plannedDeparturePlatform + ")");
                   }
                   var warningText = warnings.join(" · ");
          
                   // Zeilenfarbe: leicht rot hinterlegt bei Verspätung
                   var rowBg = (hasDepDelay || hasArrDelay) ? "background-color: rgba(255,60,60,0.07);" : "";
                %>
                <tr style="border-bottom: 1px solid #222; <%= rowBg %>">
          
                  <!-- Linie -->
                  <td style="padding: 8px; vertical-align: middle;">
                    <div style="display: inline-block; background: #1a6bbf; color: white; font-weight: bold; font-size: 0.85em; padding: 2px 7px; border-radius: 4px; white-space: nowrap;">
                      <%= lineName %>
                    </div>
                    <% if (depPlat) { %>
                    <div style="font-size: 0.7em; color: <%= platChanged ? '#ffaa00' : '#888' %>; margin-top: 3px;">
                      <%= platChanged ? '⚠ ' : '' %><%= depPlat %>
                    </div>
                    <% } %>
                  </td>
          
                  <!-- Abfahrt -->
                  <td style="padding: 8px; vertical-align: middle;">
                    <% if (hasDepDelay) { %>
                      <!-- Geplante Zeit durchgestrichen in rot -->
                      <div style="color: #ff4444; font-size: 0.85em; text-decoration: line-through; opacity: 0.8;">
                        <%= formatTime(leg.plannedDeparture) %>
                      </div>
                      <!-- Echte (hochgerechnete) Abfahrtzeit groß -->
                      <div style="font-weight: bold; font-size: 1.4em; color: #ff4444;">
                        <%= formatTime(leg.departure) %>
                        <span style="font-size: 0.8em; font-weight: normal; margin-left: 4px;">+<%= depDelay %> min</span>
                      </div>
                    <% } else { %>
                      <div style="font-weight: bold; font-size: 1.4em; color: #ffffff;">
                        <%= formatTime(leg.plannedDeparture) %>
                        <span style="color: #44cc44; font-size: 0.6em; font-weight: normal; margin-left: 4px;">✓</span>
                      </div>
                    <% } %>
                  </td>
          
                  <!-- Ankunft -->
                  <td style="padding: 8px; vertical-align: middle;">
                    <% if (hasArrDelay) { %>
                      <div style="color: #ff4444; font-size: 0.85em; text-decoration: line-through; opacity: 0.8;">
                        <%= formatTime(leg.plannedArrival) %>
                      </div>
                      <div style="font-weight: bold; font-size: 1.4em; color: #ff4444;">
                        <%= formatTime(leg.arrival) %>
                        <span style="font-size: 0.8em; font-weight: normal; margin-left: 4px;">+<%= arrDelay %> min</span>
                      </div>
                    <% } else { %>
                      <div style="font-weight: bold; font-size: 1.4em; color: #ffffff;">
                        <%= formatTime(leg.plannedArrival) %>
                        <span style="color: #44cc44; font-size: 0.6em; font-weight: normal; margin-left: 4px;">✓</span>
                      </div>
                    <% } %>
                  </td>
          
                  <!-- Warnungen / Info -->
                  <td style="padding: 8px; font-size: 0.68em; color: #ffcc00; font-style: italic; line-height: 1.3; vertical-align: middle; max-width: 140px;">
                    <%= warningText %>
                  </td>
          
                </tr>
                <% } %>
              </tbody>
            </table>
          </div>
          <% } else { %>
              <div style="color: #666; font-family: sans-serif; padding: 10px;">⏳ Warte auf Daten...</div>
          <% } %>
          

          fd2ca4ab-c018-4ffb-87ab-00da5e6f57fc-image.jpeg

          f3f5f978-4579-4348-b70b-ba47e400d31f-image.jpeg

          OliverIOO T 2 Antworten Letzte Antwort
          1
          • B booleeny

            Bei mir funktioniert der Adapter ganz super. Wow richtig gut! Vielen lieben Dank. Nutze zur Zeit die Vendo DB Anbindung. Da kommt die Info gefühlt schneller als HAFAS. Bei der ersten Installation wurde nicht automatisch eine Instanz erstellt die musste ich erst durch den klick auf + erstellen. Aber vielleicht ist das auch normal bei der Installation über "Developer Github Katze". Mir war das Widget für meinen vorhandenen Dashboard Platz zu groß. Außerdem Nutzte ich vis-2 und bin mir nicht sicher ob das Widget dafür auch gemacht ist. Daher habe ich den vis-jsontemplate Adapter installiert. Der klappt ganz großartig und mit ClaudeAI ist ratzfatz ein individuelles Widget erstellt. Man muss nur den JSON Datenpunkt angeben und in Vorlage z.B. folgenden Code kopieren:

            <% 
            if (typeof data !== 'undefined' && data && data.journeys && Array.isArray(data.journeys)) { 
                function formatTime(isoString) {
                    if (!isoString) return "--:--";
                    var date = new Date(isoString);
                    var h = date.getHours().toString();
                    var m = date.getMinutes().toString();
                    return (h.length < 2 ? '0' + h : h) + ":" + (m.length < 2 ? '0' + m : m);
                }
            
                var firstJourney = data.journeys[0];
                var stationTitle = "Verbindung";
                
                if (firstJourney && firstJourney.legs && firstJourney.legs[0]) {
                    var l0 = firstJourney.legs[0];
                    if (l0.origin && l0.destination) {
                        stationTitle = l0.origin.name + " → " + l0.destination.name;
                    }
                }
            %>
            <div style="color: white; font-family: RobotoCondensed-Bold; padding: 5px;">
              
              <div style="font-size: 0.9em; color: #aaaaaa; margin-bottom: 6px;">
                <%= stationTitle %>
              </div>
            
              <table style="width: 100%; border-collapse: collapse; font-size: 14px; margin-top: 0px;">
                <thead>
                  <tr style="text-align: left; border-bottom: 1px solid #444; color: #888; font-size: 0.72em; text-transform: uppercase; letter-spacing: 0.05em;">
                    <th style="padding: 6px 8px;">Linie</th>
                    <th style="padding: 6px 8px;">Abfahrt</th>
                    <th style="padding: 6px 8px;">Ankunft</th>
                    <th style="padding: 6px 8px;">Info</th>
                  </tr>
                </thead>
                <tbody>
                  <% for (var i = 0; i < data.journeys.length; i++) { 
                     var journey = data.journeys[i];
                     var leg = (journey.legs && journey.legs[0]) ? journey.legs[0] : null;
                     if (!leg) continue;
                     
                     var depDelay = Math.round((leg.departureDelay || 0) / 60);
                     var arrDelay = Math.round((leg.arrivalDelay || 0) / 60);
                     var hasDepDelay = depDelay > 0;
                     var hasArrDelay = arrDelay > 0;
            
                     var lineName = (leg.line && leg.line.name) ? leg.line.name : "?";
                     var depPlat = leg.departurePlatform ? "Gl. " + leg.departurePlatform : "";
                     var plannedDepPlat = leg.plannedDeparturePlatform ? leg.plannedDeparturePlatform : "";
                     var platChanged = depPlat && plannedDepPlat && leg.departurePlatform !== leg.plannedDeparturePlatform;
            
                     var warnings = [];
                     if (leg.remarks && leg.remarks.length > 0) {
                         for (var j = 0; j < leg.remarks.length; j++) {
                             if (leg.remarks[j].type === "warning") {
                                 warnings.push(leg.remarks[j].summary || leg.remarks[j].text);
                             }
                         }
                     }
                     if (platChanged) {
                         warnings.unshift("Gl. " + leg.departurePlatform + " (statt " + leg.plannedDeparturePlatform + ")");
                     }
                     var warningText = warnings.join(" · ");
            
                     // Zeilenfarbe: leicht rot hinterlegt bei Verspätung
                     var rowBg = (hasDepDelay || hasArrDelay) ? "background-color: rgba(255,60,60,0.07);" : "";
                  %>
                  <tr style="border-bottom: 1px solid #222; <%= rowBg %>">
            
                    <!-- Linie -->
                    <td style="padding: 8px; vertical-align: middle;">
                      <div style="display: inline-block; background: #1a6bbf; color: white; font-weight: bold; font-size: 0.85em; padding: 2px 7px; border-radius: 4px; white-space: nowrap;">
                        <%= lineName %>
                      </div>
                      <% if (depPlat) { %>
                      <div style="font-size: 0.7em; color: <%= platChanged ? '#ffaa00' : '#888' %>; margin-top: 3px;">
                        <%= platChanged ? '⚠ ' : '' %><%= depPlat %>
                      </div>
                      <% } %>
                    </td>
            
                    <!-- Abfahrt -->
                    <td style="padding: 8px; vertical-align: middle;">
                      <% if (hasDepDelay) { %>
                        <!-- Geplante Zeit durchgestrichen in rot -->
                        <div style="color: #ff4444; font-size: 0.85em; text-decoration: line-through; opacity: 0.8;">
                          <%= formatTime(leg.plannedDeparture) %>
                        </div>
                        <!-- Echte (hochgerechnete) Abfahrtzeit groß -->
                        <div style="font-weight: bold; font-size: 1.4em; color: #ff4444;">
                          <%= formatTime(leg.departure) %>
                          <span style="font-size: 0.8em; font-weight: normal; margin-left: 4px;">+<%= depDelay %> min</span>
                        </div>
                      <% } else { %>
                        <div style="font-weight: bold; font-size: 1.4em; color: #ffffff;">
                          <%= formatTime(leg.plannedDeparture) %>
                          <span style="color: #44cc44; font-size: 0.6em; font-weight: normal; margin-left: 4px;">✓</span>
                        </div>
                      <% } %>
                    </td>
            
                    <!-- Ankunft -->
                    <td style="padding: 8px; vertical-align: middle;">
                      <% if (hasArrDelay) { %>
                        <div style="color: #ff4444; font-size: 0.85em; text-decoration: line-through; opacity: 0.8;">
                          <%= formatTime(leg.plannedArrival) %>
                        </div>
                        <div style="font-weight: bold; font-size: 1.4em; color: #ff4444;">
                          <%= formatTime(leg.arrival) %>
                          <span style="font-size: 0.8em; font-weight: normal; margin-left: 4px;">+<%= arrDelay %> min</span>
                        </div>
                      <% } else { %>
                        <div style="font-weight: bold; font-size: 1.4em; color: #ffffff;">
                          <%= formatTime(leg.plannedArrival) %>
                          <span style="color: #44cc44; font-size: 0.6em; font-weight: normal; margin-left: 4px;">✓</span>
                        </div>
                      <% } %>
                    </td>
            
                    <!-- Warnungen / Info -->
                    <td style="padding: 8px; font-size: 0.68em; color: #ffcc00; font-style: italic; line-height: 1.3; vertical-align: middle; max-width: 140px;">
                      <%= warningText %>
                    </td>
            
                  </tr>
                  <% } %>
                </tbody>
              </table>
            </div>
            <% } else { %>
                <div style="color: #666; font-family: sans-serif; padding: 10px;">⏳ Warte auf Daten...</div>
            <% } %>
            

            fd2ca4ab-c018-4ffb-87ab-00da5e6f57fc-image.jpeg

            f3f5f978-4579-4348-b70b-ba47e400d31f-image.jpeg

            OliverIOO Offline
            OliverIOO Offline
            OliverIO
            schrieb am zuletzt editiert von OliverIO
            #5

            @booleeny

            Super,
            Da mach ich mal bei json-Template gleich eine Referenz hier drauf rein.
            Schöner Anwendungsfall für eine individuelle Anwendung.

            https://github.com/oweitman/ioBroker.vis-jsontemplate#more-use-cases

            Meine Adapter und Widgets
            TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
            Links im Profil

            1 Antwort Letzte Antwort
            1
            • B booleeny

              Bei mir funktioniert der Adapter ganz super. Wow richtig gut! Vielen lieben Dank. Nutze zur Zeit die Vendo DB Anbindung. Da kommt die Info gefühlt schneller als HAFAS. Bei der ersten Installation wurde nicht automatisch eine Instanz erstellt die musste ich erst durch den klick auf + erstellen. Aber vielleicht ist das auch normal bei der Installation über "Developer Github Katze". Mir war das Widget für meinen vorhandenen Dashboard Platz zu groß. Außerdem Nutzte ich vis-2 und bin mir nicht sicher ob das Widget dafür auch gemacht ist. Daher habe ich den vis-jsontemplate Adapter installiert. Der klappt ganz großartig und mit ClaudeAI ist ratzfatz ein individuelles Widget erstellt. Man muss nur den JSON Datenpunkt angeben und in Vorlage z.B. folgenden Code kopieren:

              <% 
              if (typeof data !== 'undefined' && data && data.journeys && Array.isArray(data.journeys)) { 
                  function formatTime(isoString) {
                      if (!isoString) return "--:--";
                      var date = new Date(isoString);
                      var h = date.getHours().toString();
                      var m = date.getMinutes().toString();
                      return (h.length < 2 ? '0' + h : h) + ":" + (m.length < 2 ? '0' + m : m);
                  }
              
                  var firstJourney = data.journeys[0];
                  var stationTitle = "Verbindung";
                  
                  if (firstJourney && firstJourney.legs && firstJourney.legs[0]) {
                      var l0 = firstJourney.legs[0];
                      if (l0.origin && l0.destination) {
                          stationTitle = l0.origin.name + " → " + l0.destination.name;
                      }
                  }
              %>
              <div style="color: white; font-family: RobotoCondensed-Bold; padding: 5px;">
                
                <div style="font-size: 0.9em; color: #aaaaaa; margin-bottom: 6px;">
                  <%= stationTitle %>
                </div>
              
                <table style="width: 100%; border-collapse: collapse; font-size: 14px; margin-top: 0px;">
                  <thead>
                    <tr style="text-align: left; border-bottom: 1px solid #444; color: #888; font-size: 0.72em; text-transform: uppercase; letter-spacing: 0.05em;">
                      <th style="padding: 6px 8px;">Linie</th>
                      <th style="padding: 6px 8px;">Abfahrt</th>
                      <th style="padding: 6px 8px;">Ankunft</th>
                      <th style="padding: 6px 8px;">Info</th>
                    </tr>
                  </thead>
                  <tbody>
                    <% for (var i = 0; i < data.journeys.length; i++) { 
                       var journey = data.journeys[i];
                       var leg = (journey.legs && journey.legs[0]) ? journey.legs[0] : null;
                       if (!leg) continue;
                       
                       var depDelay = Math.round((leg.departureDelay || 0) / 60);
                       var arrDelay = Math.round((leg.arrivalDelay || 0) / 60);
                       var hasDepDelay = depDelay > 0;
                       var hasArrDelay = arrDelay > 0;
              
                       var lineName = (leg.line && leg.line.name) ? leg.line.name : "?";
                       var depPlat = leg.departurePlatform ? "Gl. " + leg.departurePlatform : "";
                       var plannedDepPlat = leg.plannedDeparturePlatform ? leg.plannedDeparturePlatform : "";
                       var platChanged = depPlat && plannedDepPlat && leg.departurePlatform !== leg.plannedDeparturePlatform;
              
                       var warnings = [];
                       if (leg.remarks && leg.remarks.length > 0) {
                           for (var j = 0; j < leg.remarks.length; j++) {
                               if (leg.remarks[j].type === "warning") {
                                   warnings.push(leg.remarks[j].summary || leg.remarks[j].text);
                               }
                           }
                       }
                       if (platChanged) {
                           warnings.unshift("Gl. " + leg.departurePlatform + " (statt " + leg.plannedDeparturePlatform + ")");
                       }
                       var warningText = warnings.join(" · ");
              
                       // Zeilenfarbe: leicht rot hinterlegt bei Verspätung
                       var rowBg = (hasDepDelay || hasArrDelay) ? "background-color: rgba(255,60,60,0.07);" : "";
                    %>
                    <tr style="border-bottom: 1px solid #222; <%= rowBg %>">
              
                      <!-- Linie -->
                      <td style="padding: 8px; vertical-align: middle;">
                        <div style="display: inline-block; background: #1a6bbf; color: white; font-weight: bold; font-size: 0.85em; padding: 2px 7px; border-radius: 4px; white-space: nowrap;">
                          <%= lineName %>
                        </div>
                        <% if (depPlat) { %>
                        <div style="font-size: 0.7em; color: <%= platChanged ? '#ffaa00' : '#888' %>; margin-top: 3px;">
                          <%= platChanged ? '⚠ ' : '' %><%= depPlat %>
                        </div>
                        <% } %>
                      </td>
              
                      <!-- Abfahrt -->
                      <td style="padding: 8px; vertical-align: middle;">
                        <% if (hasDepDelay) { %>
                          <!-- Geplante Zeit durchgestrichen in rot -->
                          <div style="color: #ff4444; font-size: 0.85em; text-decoration: line-through; opacity: 0.8;">
                            <%= formatTime(leg.plannedDeparture) %>
                          </div>
                          <!-- Echte (hochgerechnete) Abfahrtzeit groß -->
                          <div style="font-weight: bold; font-size: 1.4em; color: #ff4444;">
                            <%= formatTime(leg.departure) %>
                            <span style="font-size: 0.8em; font-weight: normal; margin-left: 4px;">+<%= depDelay %> min</span>
                          </div>
                        <% } else { %>
                          <div style="font-weight: bold; font-size: 1.4em; color: #ffffff;">
                            <%= formatTime(leg.plannedDeparture) %>
                            <span style="color: #44cc44; font-size: 0.6em; font-weight: normal; margin-left: 4px;">✓</span>
                          </div>
                        <% } %>
                      </td>
              
                      <!-- Ankunft -->
                      <td style="padding: 8px; vertical-align: middle;">
                        <% if (hasArrDelay) { %>
                          <div style="color: #ff4444; font-size: 0.85em; text-decoration: line-through; opacity: 0.8;">
                            <%= formatTime(leg.plannedArrival) %>
                          </div>
                          <div style="font-weight: bold; font-size: 1.4em; color: #ff4444;">
                            <%= formatTime(leg.arrival) %>
                            <span style="font-size: 0.8em; font-weight: normal; margin-left: 4px;">+<%= arrDelay %> min</span>
                          </div>
                        <% } else { %>
                          <div style="font-weight: bold; font-size: 1.4em; color: #ffffff;">
                            <%= formatTime(leg.plannedArrival) %>
                            <span style="color: #44cc44; font-size: 0.6em; font-weight: normal; margin-left: 4px;">✓</span>
                          </div>
                        <% } %>
                      </td>
              
                      <!-- Warnungen / Info -->
                      <td style="padding: 8px; font-size: 0.68em; color: #ffcc00; font-style: italic; line-height: 1.3; vertical-align: middle; max-width: 140px;">
                        <%= warningText %>
                      </td>
              
                    </tr>
                    <% } %>
                  </tbody>
                </table>
              </div>
              <% } else { %>
                  <div style="color: #666; font-family: sans-serif; padding: 10px;">⏳ Warte auf Daten...</div>
              <% } %>
              

              fd2ca4ab-c018-4ffb-87ab-00da5e6f57fc-image.jpeg

              f3f5f978-4579-4348-b70b-ba47e400d31f-image.jpeg

              T Offline
              T Offline
              TT-Tom
              schrieb zuletzt editiert von
              #6

              @booleeny sagte:

              Nutze zur Zeit die Vendo DB Anbindung. Da kommt die Info gefühlt schneller als HAFAS.

              Danke das du meinen Adapter testest. Die DB unterstützt HAFAS nicht mehr bzw. nur vereinzelt. Sie ist auf Vendo umgestiegen.

              Du hast recht, Installationen über die Katze müssen die Instanzen von Hand angelegt werden.

              @booleeny sagte:

              Mir war das Widget für meinen vorhandenen Dashboard Platz zu groß. Außerdem Nutzte ich vis-2

              Welches Widget ist zu groß? Was wäre eine optimale Größe?
              in wie Weit diese Vis-2 kompatibel sind, kann ich dir nicht sagen, nutze selber Vis-1.
              Werde es aber auf die ToDo-Liste setzen und testen.
              Danke für dein Feedback

              Gruß Tom
              https://github.com/tt-tom17
              Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

              NSPanel Script Wiki
              https://github.com/joBr99/nspanel-lovelace-ui/wiki

              NSPanel Adapter Wiki
              https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

              O 1 Antwort Letzte Antwort
              0
              • T TT-Tom

                @booleeny sagte:

                Nutze zur Zeit die Vendo DB Anbindung. Da kommt die Info gefühlt schneller als HAFAS.

                Danke das du meinen Adapter testest. Die DB unterstützt HAFAS nicht mehr bzw. nur vereinzelt. Sie ist auf Vendo umgestiegen.

                Du hast recht, Installationen über die Katze müssen die Instanzen von Hand angelegt werden.

                @booleeny sagte:

                Mir war das Widget für meinen vorhandenen Dashboard Platz zu groß. Außerdem Nutzte ich vis-2

                Welches Widget ist zu groß? Was wäre eine optimale Größe?
                in wie Weit diese Vis-2 kompatibel sind, kann ich dir nicht sagen, nutze selber Vis-1.
                Werde es aber auf die ToDo-Liste setzen und testen.
                Danke für dein Feedback

                O Online
                O Online
                Oli
                schrieb zuletzt editiert von
                #7

                @TT-Tom
                Was ist denn der Unterschied zwischen deinem und dem Fahrplan Adapter?

                Gruß
                Oliver

                T 1 Antwort Letzte Antwort
                0
                • O Oli

                  @TT-Tom
                  Was ist denn der Unterschied zwischen deinem und dem Fahrplan Adapter?

                  T Offline
                  T Offline
                  TT-Tom
                  schrieb zuletzt editiert von
                  #8

                  @Oli

                  Die Fahrplandaten sind die selben. Ich biete für Abfahrten und Verbindungen Widgets an.
                  Da der Fahrplan-Adapter zur Zeit nicht gepflegt wird, habe ich mich entschieden einen eigenen zuschreiben.

                  Bin jetzt auch dabei, weitere Anbieter ein zu bauen, wie aktuell VBN (Bremen/Niedersachsen).

                  Gruß Tom
                  https://github.com/tt-tom17
                  Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

                  NSPanel Script Wiki
                  https://github.com/joBr99/nspanel-lovelace-ui/wiki

                  NSPanel Adapter Wiki
                  https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

                  mcm1957M 1 Antwort Letzte Antwort
                  0
                  • T TT-Tom

                    @Oli

                    Die Fahrplandaten sind die selben. Ich biete für Abfahrten und Verbindungen Widgets an.
                    Da der Fahrplan-Adapter zur Zeit nicht gepflegt wird, habe ich mich entschieden einen eigenen zuschreiben.

                    Bin jetzt auch dabei, weitere Anbieter ein zu bauen, wie aktuell VBN (Bremen/Niedersachsen).

                    mcm1957M Online
                    mcm1957M Online
                    mcm1957
                    schrieb zuletzt editiert von mcm1957
                    #9

                    @TT-Tom sagte:

                    Da der Fahrplan-Adapter zur Zeit nicht gepflegt wird, habe ich mich entschieden einen eigenen zuschreiben.

                    Ähhmm
                    Worauf bezieht sich deine Aussage dass der Adapter nicht gepflegt wird?

                    Die letzte Release ist noch nicht mal ein Jahr alt. Und die Anzahl der offenen Issues ist ziemlich gernig. Hier zu behaupten dass etwas nicht gepflegt wird ist doch eher gewagt. Welches Issue hast du angelegt? Hast du den dev vesucht zu ereichen?

                    d0e7d806-38f6-4a58-81a7-6c5522573dd4-image.jpeg

                    Nicht böse sei, aber ich bin mal gespannt wie lange du deinen Adapter im Monatsabstand aktualisiserts ...

                    In jedem Fall gebührt auch dir ein DANKE dass du Zeit aufwendest. Aber denk mal über deine Formulierungen und deine Einstellung zu freiwilliger Arbeit anderer nach.

                    Entwicklung u Betreuung: envertech-pv, hoymiles-ms, ns-client, pid, snmp Adapter;
                    Support Repositoryverwaltung.

                    Wer 'nen Kaffee spendieren will: https://paypal.me

                    LESEN - gute Forenbeitrage

                    1 Antwort Letzte Antwort
                    1
                    • T Nicht stören
                      T Nicht stören
                      ticaki
                      schrieb zuletzt editiert von
                      #10

                      Ein Adapter der 6 Monate kaputt ist, ist nicht gepflegt

                      Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                      Spenden

                      1 Antwort Letzte Antwort
                      0
                      • mcm1957M Online
                        mcm1957M Online
                        mcm1957
                        schrieb zuletzt editiert von mcm1957
                        #11

                        Ok - wenn es so ist.
                        Ist für mich aus den Issues nicht sofort ersichtlich.

                        Gehts um das Issue https://github.com/gaudes/ioBroker.fahrplan/issues/478 ?
                        Oder welches issue beshcreibt einen Totalausfall?

                        EDIT:
                        Wenn der Adapter wirklich nicht mehr funktioniert damnn sollte er aus den Repos raus. Nur dazu brauch ich greifbare Issues / Reklamationen / Bestätigungen. Meldungen eines Users dass seine Installation nicht funktionier sind für so einen Schritt zu dünn...

                        Entwicklung u Betreuung: envertech-pv, hoymiles-ms, ns-client, pid, snmp Adapter;
                        Support Repositoryverwaltung.

                        Wer 'nen Kaffee spendieren will: https://paypal.me

                        LESEN - gute Forenbeitrage

                        T 1 Antwort Letzte Antwort
                        0
                        • mcm1957M mcm1957

                          Ok - wenn es so ist.
                          Ist für mich aus den Issues nicht sofort ersichtlich.

                          Gehts um das Issue https://github.com/gaudes/ioBroker.fahrplan/issues/478 ?
                          Oder welches issue beshcreibt einen Totalausfall?

                          EDIT:
                          Wenn der Adapter wirklich nicht mehr funktioniert damnn sollte er aus den Repos raus. Nur dazu brauch ich greifbare Issues / Reklamationen / Bestätigungen. Meldungen eines Users dass seine Installation nicht funktionier sind für so einen Schritt zu dünn...

                          T Nicht stören
                          T Nicht stören
                          ticaki
                          schrieb zuletzt editiert von
                          #12

                          @mcm1957 sagte:

                          EDIT:
                          Wenn der Adapter wirklich nicht mehr funktioniert damnn sollte er aus den Repos raus. Nur dazu brauch ich greifbare Issues / Reklamationen / Bestätigungen. Meldungen eines Users dass seine Installation nicht funktionier sind für so einen Schritt zu dünn...

                          Ich weiß nur davon weil ich öffters mit Tom rede und er darüber geklaggt hat:

                          https://github.com/gaudes/ioBroker.fahrplan/issues/478#issuecomment-3411125556

                          Da steht das es bei dem Nutzer nicht mehr geht. Da hat sich anscheiend die api geändert.

                          Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                          Spenden

                          1 Antwort Letzte Antwort
                          0
                          • mcm1957M Online
                            mcm1957M Online
                            mcm1957
                            schrieb zuletzt editiert von mcm1957
                            #13

                            Ich hab dann mal ein TIMEOUT Issue erstellt.
                            https://github.com/gaudes/ioBroker.fahrplan/issues/543

                            Wenn kein Feedback kommt fliegt er aus den Repos.

                            Und damit nichts falsch rüber kommt:
                            Es ist voll OK einen zweiten Adapter zu entwickeln. inbesondere wenn es Probleme gibt.
                            Und DANKE an tt-tom für deine Arbeit

                            Es wäre aber auch sehr sinnvoll bei Verdacht dass ein Dev nicht mehr aktiv ist ein ganz klares Issue mit der Frage ob der Adapter noch gewartet wird zu verfassen. Es kann nie ausgeschlossen werden, dass ein Dev ein Issue in seiner Wichtigkeit auch falsch einschätzt.

                            Und es ist nach Abklärung mit Core auch jederzeit möglich verwaiste Adapter zu übernehmen sodass andere diese warten können. Damit ersparen sich User ggF eine Migration und eine spätere Zweigleisigkeit wird vermieden.

                            Entwicklung u Betreuung: envertech-pv, hoymiles-ms, ns-client, pid, snmp Adapter;
                            Support Repositoryverwaltung.

                            Wer 'nen Kaffee spendieren will: https://paypal.me

                            LESEN - gute Forenbeitrage

                            T 1 Antwort Letzte Antwort
                            0
                            • mcm1957M mcm1957

                              Ich hab dann mal ein TIMEOUT Issue erstellt.
                              https://github.com/gaudes/ioBroker.fahrplan/issues/543

                              Wenn kein Feedback kommt fliegt er aus den Repos.

                              Und damit nichts falsch rüber kommt:
                              Es ist voll OK einen zweiten Adapter zu entwickeln. inbesondere wenn es Probleme gibt.
                              Und DANKE an tt-tom für deine Arbeit

                              Es wäre aber auch sehr sinnvoll bei Verdacht dass ein Dev nicht mehr aktiv ist ein ganz klares Issue mit der Frage ob der Adapter noch gewartet wird zu verfassen. Es kann nie ausgeschlossen werden, dass ein Dev ein Issue in seiner Wichtigkeit auch falsch einschätzt.

                              Und es ist nach Abklärung mit Core auch jederzeit möglich verwaiste Adapter zu übernehmen sodass andere diese warten können. Damit ersparen sich User ggF eine Migration und eine spätere Zweigleisigkeit wird vermieden.

                              T Offline
                              T Offline
                              TT-Tom
                              schrieb zuletzt editiert von
                              #14

                              Hi @mcm1957

                              ich will dem Entwickler nichts vorwerfen und weiss selber das Privat und Arbeit vor dem Hobby kommt. Würde auch gerne mehr in die Entwicklung stecken und kann es auch gut einschätzen, was da alles dran hängt.
                              ich hatte Februar 25 mein Issue angelegt https://github.com/gaudes/ioBroker.fahrplan/issues/443
                              und auch ein Lösungsvorschlag als PR unterbreitet, was dann irgendwann im Sande verlief. Da mein Fork funktioniert, nutzte ich diesen auch im Produktivsystem. Die andren offen Issues hatte dann in meinem Fork dann so gut es ging auch behoben und im Issue auch dokumentiert.

                              Irgendwann hatte ich mich entschieden selber ein Adapter zu schreiben und diesen auch hier an zu bieten.

                              Deine Arbeit hier und auch auf Telegramm schätze ich sehr, wobei es doch manchmal sehr direkt ist.

                              Ich werde den Adapter weiterentwickeln, über eine Aufnahme ins Repo können wir uns dann separat noch einmal verständigen.

                              Gruß Tom
                              https://github.com/tt-tom17
                              Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

                              NSPanel Script Wiki
                              https://github.com/joBr99/nspanel-lovelace-ui/wiki

                              NSPanel Adapter Wiki
                              https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

                              1 Antwort Letzte Antwort
                              0
                              • mcm1957M Online
                                mcm1957M Online
                                mcm1957
                                schrieb zuletzt editiert von mcm1957
                                #15

                                @tt-tom

                                Wie schon im ersten post kurz erwähnt möchte ich hier nochmals ganz groß DANKE sagen dass du deine Zeit und dein Wissen für einen Adapter einsetzt.

                                Mir war auf Grund des Blicks auf das Repo in Bezug auf Issueanzahl und Releasedaten nicht klar, dass der Adapter ein echtes Problem hat und deine Bezeichnung als "nicht gepflegt" vollkommen richtig war bzw. ist. Ich hätte vor meiner Anmerkung genauer nachforschen sollen.

                                Sorry

                                Und danke für deinen Ersatz.

                                P.S. Bitte häng an den Latest PR noch den Object Dump an. Das steht zwar im ersten Antwortcommit (https://github.com/ioBroker/ioBroker.repositories/pull/5751#issuecomment-4188664955) dürfte aber untergegangen sein.
                                DANKE

                                Entwicklung u Betreuung: envertech-pv, hoymiles-ms, ns-client, pid, snmp Adapter;
                                Support Repositoryverwaltung.

                                Wer 'nen Kaffee spendieren will: https://paypal.me

                                LESEN - gute Forenbeitrage

                                1 Antwort Letzte Antwort
                                1

                                Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                                Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                                Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                                Registrieren Anmelden
                                Antworten
                                • In einem neuen Thema antworten
                                Anmelden zum Antworten
                                • Älteste zuerst
                                • Neuste zuerst
                                • Meiste Stimmen


                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                394

                                Online

                                32.8k

                                Benutzer

                                82.8k

                                Themen

                                1.3m

                                Beiträge
                                Community
                                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                ioBroker Community 2014-2025
                                logo
                                • Anmelden

                                • Du hast noch kein Konto? Registrieren

                                • Anmelden oder registrieren, um zu suchen
                                • Erster Beitrag
                                  Letzter Beitrag
                                0
                                • Home
                                • Aktuell
                                • Tags
                                • Ungelesen 0
                                • Kategorien
                                • Unreplied
                                • Beliebt
                                • GitHub
                                • Docu
                                • Hilfe