Neues FTUI Widget - Departure

Begonnen von setstate, 27 Januar 2016, 15:51:08

Vorheriges Thema - Nächstes Thema

Pumba9876

Ok danke
Das hört sich gut an aber habe keine Ahnung wie das gehen soll ich kann doch nur die class im Widget ändern.  ??? Hast du vielleicht einen Ansatz für mich. Brauche immer erst ein Ideenanstoß das ich weiter machen kann.
1x FB7590 1x RPI3B 4xShelly 2.5 2x Shelly1Philips Hue ,Teufel Soundbar ,Ones, foscam Kamera

Ulm32b

Zitat von: Pumba9876 am 22 Februar 2020, 08:38:34
... keine Ahnung wie das gehen soll ich kann doch nur die class im Widget ändern.  ??? Hast du vielleicht einen Ansatz für mich. Brauche immer erst ein Ideenanstoß das ich weiter machen kann.
Bau doch erstmal die im Wiki dargestellte Lösung zur Umstellung zwischen relativer und absoluter Abfahrtszeit nach. Der Quellcode ist dort weitgehend niedergelegt. Danach liest Du im Wiki die Dokumentation von Classchanger nach und wirst nach und nach verstehen, was da eigentlich passiert. Die Erstellung des Wikis für (fast) alle Widgets war mit einigem Aufwand verbunden. Die Ernte soll jetzt eingefahren werden.

Pumba9876

Ok ich versuche mal mein Glück
Schreibe dann wenn ich es hin bekommen habe.
1x FB7590 1x RPI3B 4xShelly 2.5 2x Shelly1Philips Hue ,Teufel Soundbar ,Ones, foscam Kamera

Pumba9876

#318
Nabend ,
Update von meinem Projekt es läuft ohne fehler  ;D
<li class="round border-lightgray" data-row="3" data-col="1" data-sizex="6" data-sizey="6">
<div class="vbox">
<div class="w3x" data-type="select" data-items='["Halt2","Halt1","Halt3"]'
data-device="Busplan" data-get="Haltestelle"
data-cmd="setreading">
</div>
<div data-type="classchanger" data-device="Busplan" data-get="Haltestelle" data-get-off="Halt2"
data-get-on="(Halt1|Halt3)" data-on-class="hide" data-off-class="cell">
<div data-type="classchanger" data-device="Busplan" data-get="Zeit" data-get-on="on" data-on-class="hide" data-off-class="">
<div class="DVB alternate" data-width="300px" data-height="250px"
data-type="departure" data-device="Busplan" data-get="Halt2"
data-icon="" data-interval="30">
</div>
</div>
<div data-type="classchanger" data-device="Busplan" data-get="Zeit" data-get-on="off" data-on-class="hide" data-off-class="">
<div class="DVB alternate deptime" data-width="300px" data-height="250px"
data-type="departure" data-device="Busplan" data-get="Halt2"
data-icon="" data-interval="30">
</div>
</div>
</div>
<div data-type="classchanger" data-device="Busplan" data-get="Haltestelle" data-get-off="Halt1"
data-get-on="(Halt2|Halt3)" data-on-class="hide" data-off-class="cell">
<div data-type="classchanger" data-device="Busplan" data-get="Zeit" data-get-on="on" data-on-class="hide" data-off-class="">
<div class="DVB alternate" data-width="300px" data-height="250px"
data-type="departure" data-device="Busplan" data-get="Halt1"
data-icon="" data-interval="30">
</div>
</div>
<div data-type="classchanger" data-device="Busplan" data-get="Zeit" data-get-on="off" data-on-class="hide" data-off-class="">
<div class="DVB alternate deptime" data-width="300px" data-height="250px"
data-type="departure" data-device="Busplan" data-get="Halt1"
data-icon="" data-interval="30">
</div>
</div>
</div>
<div data-type="classchanger" data-device="Busplan" data-get="Haltestelle" data-get-off="Halt3"
data-get-on="(Halt2|Halt1)" data-on-class="hide" data-off-class="cell">
<div data-type="classchanger" data-device="Busplan" data-get="Zeit" data-get-on="on" data-on-class="hide" data-off-class="">
<div class="DVB alternate" data-width="300px" data-height="250px"
data-type="departure" data-device="Busplan" data-get="Halt3"
data-icon="" data-interval="30">
</div>
</div>
<div data-type="classchanger" data-device="Busplan" data-get="Zeit" data-get-on="off" data-on-class="hide" data-off-class="">
<div class="DVB alternate deptime" data-width="300px" data-height="250px"
data-type="departure" data-device="Busplan" data-get="Halt3"
data-icon="" data-interval="30">
</div>
</div>
</div>
<div class="hbox top-narrow">
<div class="inline top-space" data-type="label" data-limits-get="Busplan:Zeit"
data-limits='["on", "off"]' data-colors='["#8C8C8C", "white"]'>Abfahrt in ... Min.</div>
<div class="small inline" data-type="checkbox" data-on-background-color="grey" data-get="Zeit"
data-off-background-color="grey" data-device="Busplan"
data-cmd="setreading" data-set="Zeit"></div>
<div class="inline top-space" data-type="label" data-limits-get="Busplan:Zeit"
data-limits='["off", "on"]' data-colors='["#8C8C8C", "white"]'>Abfahrt um ...</div>
</div>
</div>
</li>


danke für den Tipp,
und im Anschluss noch Device
defmod Busplan HTTPMOD none 0
attr Busplan userattr get01Name get01Regex get01URL get02Name get02Regex get02URL get03Name get03Regex get03URL get0URL
attr Busplan event-on-change-reading state
attr Busplan get01Name Halt1
attr Busplan get01Regex (\[\[.*\]\]).*
attr Busplan get01URL https://transport.stefan-biermann.de/publictransportapi/rest/departure/FHEM?from=Halt1&provider=Vrn
attr Busplan get02Name Halt2
attr Busplan get02Regex (\[\[.*\]\]).*
attr Busplan get02URL https://transport.stefan-biermann.de/publictransportapi/rest/departure/FHEM?from=Halt2&provider=Vrn
attr Busplan get03Name Halt3
attr Busplan get03Regex (\[\[.*\]\]).*
attr Busplan get03URL https://transport.stefan-biermann.de/publictransportapi/rest/departure/FHEM?from=Halt3&provider=Vrn
attr Busplan group Auswertung
attr Busplan icon time_clock
attr Busplan room Büro -> Kalender
attr Busplan stateFormat Haltestelle
attr Busplan timeout 30

setstate Busplan 2020-02-22 17:19:31 Haltestelle Halt1
setstate Busplan 2020-02-13 12:11:27 Halt1 xxxxxxxxxx
setstate Busplan 2020-02-22 17:48:10 Halt2 xxxxxxxxxx
setstate Busplan 2020-02-22 17:23:40 Halt3 xxxxxxxxxx
setstate Busplan 2020-02-22 17:29:31 Zeit off


das einzigste was noch ist ,es aktualisiert sich nicht automatisch wenn ich die Haltestelle ändere oder wenn ich zwischen Minuten und Uhrzeit umschalte ,
bräuchte da noch mal hilfe.
1x FB7590 1x RPI3B 4xShelly 2.5 2x Shelly1Philips Hue ,Teufel Soundbar ,Ones, foscam Kamera

Ulm32b

Zitat von: Pumba9876 am 22 Februar 2020, 17:55:57
... das einzigste was noch ist ,es aktualisiert sich nicht automatisch wenn ich die Haltestelle ändere oder wenn ich zwischen Minuten und Uhrzeit umschalte ,
bräuchte da noch mal hilfe.

Zunächst einmal: Dein data-interval="30" halte ich für übertrieben kurz, denn jede Abfrage hat Netzwerk-Traffic zur Folge. Dein Anliegen (Aktualisierung beim Umschalten zwischen den Ansichten) könnte folgendermaßen realisiert werden (ohne Gewähr): Zusammen mit dem Befehl zum Umschalten setzt Du einen Befahl an FHEM ab, der die Daten neu holt. Etwa so:
data-cmd="get Busplan Halt1"

Pumba9876

Mit dem Befehl tut sich leider nichts  :-\
Muss die Seite immer manuell aktualisieren
1x FB7590 1x RPI3B 4xShelly 2.5 2x Shelly1Philips Hue ,Teufel Soundbar ,Ones, foscam Kamera

Ulm32b

Zitat von: Pumba9876 am 23 Februar 2020, 20:34:18
Mit dem Befehl tut sich leider nichts  :-\

Der Reihe nach: In Deinem FHEM-device Busplan sollte es (u.a.) das Reading Halt1 geben, in dem die Abfahrtsdaten angezeigt werden.
Wenn Du nun im FHEM-Eingabefeld get Busplan Halt1eingibst, sollte im Widget departure (also FTUI) die Anzeige aktualisiert werden. Wenn das nicht so ist (bei mir tut es), ist meine Kompetenzgrenze erreicht. Wenn es geht, reduziert sich die Herausforderung darauf, von FTUI aus den genannten FHEM-Befehl im richtigen Augenblick abzusetzen. Und dies wäre in Deinem Szenario die Umschaltung zwischen den Haltestellen.

Übrigens: Wenn es bei dem Umschalten zwischen Haltestellen nur darum geht, auf der FTUI-Oberfläche Platz zu sparen, lautet ein Alternativansatz: Mit Pagebutton eine eigene Seite mit allen Haltestellen aufrufen.

Pumba9876

#322
ZitatDein Anliegen (Aktualisierung beim Umschalten zwischen den Ansichten) könnte folgendermaßen realisiert werden (ohne Gewähr): Zusammen mit dem Befehl zum Umschalten setzt Du einen Befahl an FHEM ab, der die Daten neu holt
Geht doch aber immer nur für eine Haltestelle wenn dann müssten sich alle gleichzeitig aktualisieren damit ich egal welche ich ausgewählt habe auch aktuell sind
1x FB7590 1x RPI3B 4xShelly 2.5 2x Shelly1Philips Hue ,Teufel Soundbar ,Ones, foscam Kamera

Ulm32b

Zitat von: Pumba9876 am 24 Februar 2020, 09:45:09
Geht doch aber immer nur für eine Haltestelle wenn dann müssten sich alle gleichzeitig aktualisieren damit ich egal welche ich ausgewählt habe auch aktuell sind
Dann musst Du eben alle drei readings aktualisieren mit
get Busplan Halt1;; get Busplan Halt2;; get Busplan Halt3
(Ich bin mir nicht sicher, ob die Einzelbefehle richtig mit ";;" getrennt werden.)

Pumba9876

Mit get Busplan Maximilianpark; get Busplan Pelzerstrasse; get Busplan Künstlerwinkel; setreading
Aktualisiert zwar die readings im DEVICE aber nicht die Seite
Aber immer hin funktioniert es jetzt mit Aktualisieren im device wenn ich die Haltestelle ändere.
Das ist ja schon mal etwas.
Danke für deine Hilfe . :)
1x FB7590 1x RPI3B 4xShelly 2.5 2x Shelly1Philips Hue ,Teufel Soundbar ,Ones, foscam Kamera

kotaro

Hallo,

gibt es eine Möglichkeit, das Modul Departure in das FTUI-Widged Departure einzubinden?
Ich hatte es mal gesucht, aber in diesem Thread nix gefunden...

vielen dank euch

mr_petz

#326
Für alle die im header "Linie", "Richtung" und "Zeit" bzw. "in Min" vermissen. ich habe da mal was im Code der widget_departure.js angepasst (Zeile 114)...:


        // prepare list header
        $('<div class="header">').append(elem.hasClass('deptime') ? '<div class="line">Linie</div><div class="destination">Richtung</div><div class="minutes">Zeit</div></div>' : '<div class="line">Linie</div><div class="destination">Richtung</div><div class="minutes">in Min</div></div>')
        .appendTo(innerElem);



man muss aber noch die css anpassen:


.departure .header{
    color: #222;
    position: absolute;
    left: 1px;
    top: 40px;
    width: 99%;
    font-weight: bold;
    font-size: 12px;
}


wenn es bei allen geht, könnte es ja eingecheckt werden...


Ulm32b

Zitat von: mr_petz am 11 Mai 2020, 23:13:29
[...]
wenn es bei allen geht, könnte es ja eingecheckt werden...
"Bei allen" weiß ich nicht, aber bei mir geht es. Vielen Dank.

mr_petz

#328
habe mal die webapi und nicht die widgetapi von der vvo genommen, weil die api bis in den nächsten Tag die Verbindungen anzeigt. Kann man als json oder xml einlesen. Also wer auch aus dem Raum DD

    NVBW (Nahverkehrsgesellschaft Baden-Württemberg)
    Ruhrbahn
    DVB
    VVO
    VBB
    DB
    VRR (Verkehrsverbund Rhein-Ruhr)
    Naldo (Verkehrsverbund Neckar-Alb-Donau)
    VMS (Verkehrsverbund Mittelsachsen)
    KVV (Karlsruher Verkehrsverbund)
    Verkehrsverbund Steiermark

kommt, kann es vielleicht gebrauchen.
Bsp.:


defmod BusfahrPlan_ZOB HTTPMOD none 0
attr BusfahrPlan_ZOB userattr get01Expr get01Name get01Regex get01URL
attr BusfahrPlan_ZOB get01Expr VVOExpr($val)
attr BusfahrPlan_ZOB get01Name ZOB
attr BusfahrPlan_ZOB get01Regex DlId":"(.*)RouteChanges
attr BusfahrPlan_ZOB get01URL https://webapi.vvo-online.de/dm?format=json&mot=CityBus&mot=IntercityBus&stopid=33003371&limit=32
attr BusfahrPlan_ZOB timeout 30


99_myUtils.pm:

sub VVOExpr($)
{
  my ($all) = @_;
  my @time1 = ($all=~/ScheduledTime\"\:\"\\\/Date\((.*?)000\-0000\)/g);
  my @time2 = ($all=~/RealTime\"\:\"\\\/Date\((.*?)000\-0000\)/g);
  my @line = ($all=~/LineName\"\:\"(.*?)\"\,\"Direction\"/g);
  my @dest = ($all=~/Direction\"\:\"(.*?)\"\,\"Platform\"/g);
  my $ret='[';

  for( my $i=0;$i<@time2; $i++ ) {
    next if !defined $time2[$i] || 0 == length($time2[$i]);
    $time1[$i] = $time2[$i]   if $time1[$i] < $time2[$i];
}
  for my $i (0 .. $#line)
  {
$ret=$ret.'["'.$line[$i].'",'.'"'.$dest[$i].'",'.'"'.strftime("%H:%M", localtime($time1[$i])).'"]';
if ($i<$#line) {$ret=$ret.',';}
}
  return $ret.']';
}


In der 99_myUtils wird im ersten "for" die eventuelle Verspätung aus time2 in time1 geschrieben.
Im zweiten "for" alles aufbereitet und die unixzeit in HH:MM umgerechnet.
vielleicht kann das jemand noch ein bisschen anpassen.

mögliche Verbindungen:
    "Tram",
    "CityBus",
    "IntercityBus",
    "SuburbanRailway",
    "Train",
    "Cableway",
    "Ferry",
    "HailedSharedTaxi"

hier noch der Link zur GitHub webapi (kann man noch einiges mehr machen):
https://github.com/kiliankoe/vvo/blob/master/documentation/webapi.md

stefan-dd

Ich möchte für die einzelnen Daten einzelne Readings erzeugen?
Dies kann man mit "extractAllJSON" machen.
Das entstehende Problem ist die Zeitangabe im Format /Date(1595894520000-0000)/
Wie kann man diesen Wert umrechnen?

Alternativ, wie bekommt man diese Werte ["A","Weißeritzpark","27"],["A","Löbtau","34"]]aus den Klammern in einzelne Readings?