Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst] Datum mit Uhrzeit in Unixzeit umwandeln

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [gelöst] Datum mit Uhrzeit in Unixzeit umwandeln

    This topic has been deleted. Only users with topic management privileges can see it.
    • O
      Oli last edited by Oli

      Hallo zusammen,

      ich befasse mich erst seit kurzen mit dem Thema ioBroker und Javascript, aus diesem Grund stoße ich auch immer wieder an meine Grenzen.

      Ich möchte aber allen Teilnehmer ein großes Lob und Dankeschön ausrichten, was ihr hier alles leistet ist echt Top!!!

      Nun aber zu meinem Problem:

      Ich rufe mir mit einem Script hier aus dem Forum die Busverbindung über Google Api auf, nun möchte ich aber nicht nur die nächste Verbindung, sondern auch die übernächste Verbindung abrufen.

      Nach Angaben von Google muss die Abfahrtszeit in Unixzeit angegeben werden, also dachte ich mir, ich nehme das aktuelle Datum, plus die Abfahrtszeit der ersten Verbindung, plus einen Zuschlag von 2 Minuten.

      Nur wie schaffe ich es, eine zusammengebaute Variable in Unixzeit umzurechnen?

      Das vorhanden Script füge ich mit bei.

      // Busfahrplan per Google Maps
      //
      // Beschreibung der API: https://developers.google.com/maps/documentation/directions/intro?hl=de#traffic-model
      // API-Key: https://console.developers.google.com/apis/dashboard?project=iobroker-privat&duration=PT1H
        
      //Infos : http://forum.iobroker.net/viewtopic.php?f=8&t=4019&p=38235#p38226
      
      var apikey              = "xxxxxxxxxxxxxxxxxxxxx"; //(Mein Key wurde eingetragen)
      var origin              = "49.352588,11.144985"; // Koordinaten Startadresse
      var destination         = "49.444155,11.084046"; // Koordinaten Zieladresse
      
      var request = require('request');
      var logging = true;
       
      createState('Busfahrplan.Aktualisieren', false, {
              desc: 'Werte aktualisieren',
              type: 'boolean',
              def:  false,
              role: 'indicator'    
      });
      createState('Busfahrplan.Bus1.Startzeit', 0, {
      		});
      createState('Busfahrplan.Bus1.Abfahrtszeit', 0, {
      		});		
      createState('Busfahrplan.Bus1.Ankunftszeit', 0, {
      		});
      createState('Busfahrplan.Bus1.Haltestelle', 0, {
      		});
      createState('Busfahrplan.Bus1.Linie', 0, {
      		});
      createState('Busfahrplan.Bus1.Verkehrsmittel', 0, {
      		});	
      createState('Busfahrplan.Bus2.Startzeit', 0, {
      		});
      createState('Busfahrplan.Bus2.Abfahrtszeit', 0, {
      		});		
      createState('Busfahrplan.Bus2.Ankunftszeit', 0, {
      		});
      createState('Busfahrplan.Bus2.Haltestelle', 0, {
      		});
      createState('Busfahrplan.Bus2.Linie', 0, {
      		});
      createState('Busfahrplan.Bus2.Verkehrsmittel', 0, {
      		});	
       
      function datenlesen() {
          //Hochkreuzalle nach HBF ohne Waypoints
          //var link = 'https://maps.googleapis.com/maps/api/directions/json?origin=place_id:ChIJ_xXrLmzkvkcRQacjsrOKAv0&&destination=place_id:ChIJAwsLOp_hvkcRMZDtxvyPpBc&key=###API_KEY_EINFÜGEN###&mode=transit&language=de' ;
          var link = 'https://maps.googleapis.com/maps/api/directions/json'  
                   + '?origin=' + origin             
                   + '&destination=' + destination 
                   + '&departure_time=now'
                   + '&mode=transit'
                   + '&language=de-DE'
                   + '&key=' + apikey;  
          
          log('Google Daten einlesen');
          request(link, function (error, response, body) {
              if (!error && response.statusCode == 200) {
                  var result;
                  try{
                      result = JSON.parse(body);
       
                      if (logging) log('Kein Fehler beim Einlesen Google Daten');
       
                  } catch (e) {
                      log('Parse Fehler (Roofi Modul):' + e);
                  }    
                  if (result) {
       
                      var Startzeit;
                      var Abfahrtszeit;
                      var Ankunftszeit;
                      var Haltestelle;
                      var Linie;
                      var Verkehrsmittel;
       
                      if (logging) log(result.routes[0].legs[0].departure_time.text);
                      if (logging) log(result.routes[0].legs[0].steps[1].transit_details.departure_time.text);
                      if (logging) log(result.routes[0].legs[0].arrival_time.text);
                      if (logging) log(result.routes[0].legs[0].steps[1].transit_details.departure_stop.name);
                      if (logging) log(result.routes[0].legs[0].steps[1].transit_details.line.short_name);
                      if (logging) log(result.routes[0].legs[0].steps[1].transit_details.line.vehicle.name);
       
                      Startzeit = result.routes[0].legs[0].departure_time.text;
                      Abfahrtszeit = result.routes[0].legs[0].steps[1].transit_details.departure_time.text;
                      Ankunftszeit = result.routes[0].legs[0].arrival_time.text;
                      Haltestelle = result.routes[0].legs[0].steps[1].transit_details.departure_stop.name;
                      Linie = result.routes[0].legs[0].steps[1].transit_details.line.short_name;
                      Verkehrsmittel = result.routes[0].legs[0].steps[1].transit_details.line.vehicle.name;               
      
                      setState("javascript.0.Busfahrplan.Bus1.Startzeit",Startzeit);
                      setState("javascript.0.Busfahrplan.Bus1.Abfahrtszeit",Abfahrtszeit);
                      setState("javascript.0.Busfahrplan.Bus1.Ankunftszeit",Ankunftszeit);
                      setState("javascript.0.Busfahrplan.Bus1.Haltestelle",Haltestelle);
                      setState("javascript.0.Busfahrplan.Bus1.Linie",Linie);
                      setState("javascript.0.Busfahrplan.Bus1.Verkehrsmittel",Verkehrsmittel);             
                     
                  }
              } else log('Fehler (Google Daten Abfrage: ' + error);
          });   // Ende request 
          log('Google Daten eingelesen');
      }
      
      schedule("*/10 5,4-22,44 * * *", function () { // alle 10 Minuten die Werte abfragen
           datenlesen ();
       });
        
       // Beim Skriptstart die Werte abfragen
       setTimeout(datenlesen,1000);
      

      Vielen Dank für eure Hilfe.
      Gruß Oliver

      Homoran paul53 3 Replies Last reply Reply Quote 0
      • Homoran
        Homoran Global Moderator Administrators @Oli last edited by Homoran

        @Oliver-Böhm

        Beim Skripten kann ich dir nicht helfen, aber vielleicht hift das:

        Unixzeit ist die Anzahl der vergangenen Sekunden seit dem 1.1.1970 um 00:00

        Außerdem mal bei npm nach Modulen gesehen?

        https://www.npmjs.com/package/unix-time

        1 Reply Last reply Reply Quote 0
        • O
          Oli last edited by

          Hallo @Homoran,

          danke für deine Antwort, dass weis ich, mir fehlt nur die Erfahrung bein scripen, was ich bis jetzt hinbekommen habe ist folgenden:

          var Test = Date.parse('28 Dec 2019 00:00:00 GMT');
          setState("javascript.0.Test.Unixtime.Tage",Test);
          

          sobald ich das Datum als "28.12.2019 00:00:00 " eingebe bekomme ich schon einen Fehler, als Variable Zusammenstellung bekomme ich es gar nicht hin.

          Homoran 1 Reply Last reply Reply Quote 0
          • Homoran
            Homoran Global Moderator Administrators @Oli last edited by

            @Oliver-Böhm
            Wie gesagt kann ich dir beim Skripten mangels Wissen nicht helfen.

            Auf Github steht beim npm Modul leider nicht in welchem Format das Datum eingegeben werden muss.
            Ich kann mir aber vorstellen, dass es sich um US-Notation handeln wird.

            Es gibt aber noch weitere Module.
            Mein Link war nur ein Beispiel

            1 Reply Last reply Reply Quote 0
            • O
              Oli last edited by

              @Homran,

              trotzdem Danke für deine schnelle Antwort.

              1 Reply Last reply Reply Quote 0
              • D
                dwm last edited by

                Du suchst "getTime()"...

                siehe https://www.w3schools.com/jsref/jsref_gettime.asp

                var theDate = new Date("28 Dec 2019 00:00:00 GMT");
                log (theDate.getTime());
                

                liefert
                1577491200000

                Achtung: Das liefert die Millisekunden, evt. durch 1000 teilen 🙂

                1 Reply Last reply Reply Quote 0
                • paul53
                  paul53 @Oli last edited by

                  @Oliver-Böhm sagte:

                  Abfahrtszeit = result.routes[0].legs[0].steps[1].transit_details.departure_time.text;

                  Anstelle von .text gibt es sicherlich noch andere Möglichkeiten ? Vielleicht in s oder ms, mit denen es kein Problem ist, 2 Minuten (120 s) zu addieren.

                  1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @Oli last edited by

                    @Oliver-Böhm:
                    Doku:

                    arrival_time contains the estimated time of arrival for this leg. This property is only returned for transit directions. The result is returned as a Time object with three properties:

                    value the time specified as a JavaScript Date object.

                    Dann sollte es etwa so funktionieren:

                    var dep = result.routes[0].legs[0].steps[1].transit_details.departure_time.value;
                    // Unix-Zeit in s 2 Minuten später  
                    var next = Math.round(dep.setMinutes(dep.getMinutes() + 2) / 1000);
                    
                    1 Reply Last reply Reply Quote 0
                    • O
                      Oli last edited by

                      @paul53 said in Datum mit Uhrzeit in Unixzeit umwandeln:

                      var dep = result.routes[0].legs[0].steps[1].transit_details.departure_time.value; // Unix-Zeit in s 2 Minuten später var next = Math.round(dep.setMinutes(dep.getMinutes() + 2) / 1000);

                      Da bringt er mir folgende Fehler:

                      b09e2d09-5200-4448-b507-528d7a3995ae-image.png

                      paul53 1 Reply Last reply Reply Quote 0
                      • paul53
                        paul53 @Oli last edited by

                        @Oliver-Böhm
                        Dann ist es kein Javascript Date object. Was sagt ?

                        log(dep + ' ' + typeof dep);
                        
                        1 Reply Last reply Reply Quote 0
                        • O
                          Oli last edited by

                          Habe den Fehler gefunden :-),

                          deine 1. Codezeile wirft den Wert schon in Sekunden aus, super vielen Dank!!

                          Jetzt habe ich aber noch eine Anfängerfrage.

                          Wie packe ich jetzt beide anfragen in einen Code?

                          paul53 1 Reply Last reply Reply Quote 0
                          • paul53
                            paul53 @Oli last edited by

                            @Oliver-Böhm sagte:

                            Wie packe ich jetzt beide anfragen in einen Code?

                            Keine Ahnung, ich kenne die Schnittstelle nicht, sondern müsste mich auch durch die API-Doku wälzen. Das mit .value habe ich zufällig entdeckt.

                            1 Reply Last reply Reply Quote 0
                            • O
                              Oli last edited by

                              ich habe jetzt pro Verbindungsabfrage ein Script angelegt und lassen mir bei der ersten Abfragen die neue Abfragezeit in einen Datenpunkt eintragen.

                              Wie kann ich jetzt dem 2. Script sagen "führe Abfrage durch, sobald sich der Datenpunkt ändert"?

                              Und wie kann ich diesen Forumsbeitrag als gelöst kennzeichnen?

                              paul53 1 Reply Last reply Reply Quote 0
                              • paul53
                                paul53 @Oli last edited by

                                @Oliver-Böhm sagte:

                                "führe Abfrage durch, sobald sich der Datenpunkt ändert"

                                on(idDatenpunkt, function(dp) { // triggert bei Wertänderung
                                    var zeit = dp.state.val;
                                    // Abfrage
                                });
                                

                                @Oliver-Böhm sagte in Datum mit Uhrzeit in Unixzeit umwandeln:

                                wie kann ich diesen Forumsbeitrag als gelöst kennzeichnen?

                                Durch Editieren der Überschrift.

                                1 Reply Last reply Reply Quote 1
                                • O
                                  Oli last edited by

                                  @paul53 said in Datum mit Uhrzeit in Unixzeit umwandeln:

                                  on(idDatenpunkt, function(dp) { // triggert bei Wertänderung var zeit = dp.state.val; // Abfrage });

                                  Vielen Dank für deine Hilfe!!

                                  1 Reply Last reply Reply Quote 0
                                  • First post
                                    Last post

                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  806
                                  Online

                                  31.6k
                                  Users

                                  79.5k
                                  Topics

                                  1.3m
                                  Posts

                                  4
                                  15
                                  1846
                                  Loading More Posts
                                  • Oldest to Newest
                                  • Newest to Oldest
                                  • Most Votes
                                  Reply
                                  • Reply as topic
                                  Log in to reply
                                  Community
                                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                  The ioBroker Community 2014-2023
                                  logo