Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [Geschlossen] Blitzer über API abfragen

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    [Geschlossen] Blitzer über API abfragen

    This topic has been deleted. Only users with topic management privileges can see it.
    • bahnuhr
      bahnuhr Forum Testing Most Active last edited by

      Ich lese die Blitzer per Adapter "parser" von der Internet-Seite "osthessen-news blitzer" aus.

      Beim Regex hat mir homoran damals sehr geholfen.

      Und diese schreibe ich dann in Objekte die dann per telegram auf handy kommen.

      Klappt sehr gut.

      Homoran JayR 2 Replies Last reply Reply Quote 0
      • Homoran
        Homoran Global Moderator Administrators @bahnuhr last edited by

        @bahnuhr sagte in Blitzer über API abfragen:

        Klappt sehr gut.

        Ist das so?
        Die verschoben sich doch immer

        bahnuhr 1 Reply Last reply Reply Quote 0
        • bahnuhr
          bahnuhr Forum Testing Most Active @Homoran last edited by

          @Homoran sagte in Blitzer über API abfragen:

          Ist das so?

          Ja

          @Homoran sagte in Blitzer über API abfragen:

          Die verschoben sich doch immer

          Was verschiebt sich da ?

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

            @bahnuhr sagte in Blitzer über API abfragen:

            Was verschiebt sich da ?

            einige Einträge aus der kompletten Liste von Hessenblitzer waren mal da und mal nicht

            bahnuhr 1 Reply Last reply Reply Quote 0
            • bahnuhr
              bahnuhr Forum Testing Most Active @Homoran last edited by

              @Homoran sagte in Blitzer über API abfragen:

              einige Einträge aus der kompletten Liste von Hessenblitzer waren mal da und mal nicht

              Ne, klappt sehr gut.

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

                @bahnuhr sagte in Blitzer über API abfragen:

                @Homoran sagte in Blitzer über API abfragen:

                einige Einträge aus der kompletten Liste von Hessenblitzer waren mal da und mal nicht

                Ne, klappt sehr gut.

                Super!

                1 Reply Last reply Reply Quote 0
                • OliverIO
                  OliverIO @JayR last edited by

                  @JayR

                  blitzer.de gäbe es da

                  1 Reply Last reply Reply Quote 0
                  • JayR
                    JayR @bahnuhr last edited by

                    @bahnuhr Danke für den Tipp. Kannst du mir ein RegEx Bsp geben

                    bahnuhr 1 Reply Last reply Reply Quote 0
                    • bahnuhr
                      bahnuhr Forum Testing Most Active @JayR last edited by

                      @JayR sagte in Blitzer über API abfragen:

                      @bahnuhr Danke für den Tipp. Kannst du mir ein RegEx Bsp geben

                      "blitzer"><strong class="time">(.+?)</p>

                      Es kommt aber auf die Homepage an.

                      1 Reply Last reply Reply Quote 1
                      • J
                        J_Paul @JayR last edited by

                        @JayR Moin, vielleicht hilft dir das weiter, aber unter Vorbehalt, da ich nur mal ein paar Minuten was geguckt hatte. So wie ich es verstehe, nutzt Blitzer.de den Datenbestand von Atudo.net. Wenn man den Link:
                        https://cdn2.atudo.net/api/1.0/vl.php?type=0,1,2,3,4,5,6&box=53.527656,10.024888,53.520012,10.048231
                        aufruft, kommt zumindest eine JSON, dessen result man auswerten könnte. Am Ende der URL sind die Koordinaten vom Start und vom Ende der geplanten Tour. Kannst ja mal mit rumspielen und Bescheid geben, wie man das auswerten könnte. (Telegram, Alexa Ansage, oder?)

                        JayR 1 Reply Last reply Reply Quote 1
                        • JayR
                          JayR @J_Paul last edited by JayR

                          @J_Paul : Super vielen Dank für den Tipp. Ich habe das Script fast fertig. Brauche aber nochmal die Hilfe von euch.
                          Ich muss 2 API calls machen einmal um den Content von der Blitzer API zu bekommen und einmal um LATITUDE und LONGITUDE in eine richtige Adresse aufzulösen. Dabei bin ich auf ein Problem gestoßen.

                          Weiß jemand wie ich ein return aus einer Callback function machen kann, sodass ich mit den Werten weiterarbeiten kann. Ich würde also gerne ein

                          return body[0].formatted;
                          

                          Dies geht aber leider nicht

                          function getContent(){
                              var url = BASE_URL + LATITUDE_START + "," + LONGITUDE_START + "," + LONGITUDE_START + "," + LATITUDE_DEST  + "," + LONGITUDE_DEST
                          
                              request(url, callback)
                              function callback (error, response, body) {
                                  var json = JSON.parse(body);
                                  json = json.pois;
                                  
                                  json.forEach(function(radar) {
                                      getAddress(radar.lat, radar.lng, function(err,body){
                                          if(LOGGING && VERBOSE)    log('Reverse geolocation: ' + json);
                                          body = body.results
                                          return body[0].formatted;
                                      });   
                                  });
                              }; 
                          }
                          
                          
                          function getAddress(lat, long, callback){
                              var geoCodeUrl = 'https://api.opencagedata.com/geocode/v1/json' 
                              geoCodeUrl = geoCodeUrl + '?' + 'key=' + APIKEY_GEOCODING + '&q=' + lat + ',' + long + '&pretty=1'
                              
                              request(geoCodeUrl, function (error, resp, body) {
                                  return callback(error, JSON.parse(body));
                              });
                          }  
                          

                          Ich habe jetzt mehrere Funktionen in Funktionen und weiß nicht wie ich da wieder zurück komme.

                          OliverIO liv-in-sky 3 Replies Last reply Reply Quote 0
                          • OliverIO
                            OliverIO @JayR last edited by OliverIO

                            @JayR

                            Du packst die Verarbeitung, die danach passieren soll in eine eigene Funktion. Die Referenz auf diese Funktion übergibst du oben als Callback Parameter. Diesen Callback rufst du auf, wenn du oben fertig bist.

                            Eine andere Alternative wäre das über promises zu machen.

                            1 Reply Last reply Reply Quote 0
                            • liv-in-sky
                              liv-in-sky @JayR last edited by

                              @JayR hi

                              wirst du das ganze script - wenn fertig - mit uns teilen ? hätte interesse daran

                              1 Reply Last reply Reply Quote 0
                              • liv-in-sky
                                liv-in-sky @JayR last edited by

                                @JayR da ich gerade versuche, sowas auch richtig umzusetzen - kannst mal hier schauen

                                https://forum.iobroker.net/post/511273

                                JayR 1 Reply Last reply Reply Quote 1
                                • JayR
                                  JayR @liv-in-sky last edited by JayR

                                  @liv-in-sky : Vielen Dank für deine Hilfe und Anpassungen von meinem Code. Ich habe das Script von dir noch etwas optimiert:

                                  /*****************************************************************************
                                   * Created: 29.10.2020
                                   * Created by: JayR
                                   * Description: Get radar info
                                   * Notes:
                                   * Source:
                                   * ToDo: nothing
                                   * Version:  1.0
                                   * Changes:  1.0 - Initial creation
                                  ******************************************************************************/
                                  /*****************************************************************************/
                                  
                                  /********************************
                                   * Configuration
                                  ********************************/
                                  /*****Default*****/
                                  const LOGGING = true;   //if(LOGGING)   log('');                     //Log
                                  const VERBOSE = false;  //if(LOGGING && VERBOSE)    log('');        //Verbose log
                                  const STATE_PATH = '0_userdata.0.' + 'notification.radar.';
                                  const STATES = ['lastMessage']; 
                                  /*****Custom*****/
                                  const LATITUDE_START = 'XX.XXXXXX';
                                  const LONGITUDE_START = 'XX.XXXXXX';
                                  const LATITUDE_DEST = 'XX.XXXXXX';
                                  const LONGITUDE_DEST = 'XX.XXXXXX';
                                  
                                  //Radar
                                  const BASE_URL = "https://cdn2.atudo.net/api/1.0/vl.php?type=0,1,2,3,4,5,6&box="
                                  
                                  //Geocoding
                                  const APIKEY_GEOCODING = '5b3bxxxxxxxxxxx2007a9d'; // https://opencagedata.com/
                                  
                                  //Whatsapp
                                  const WHATSAPP_STATE = 'whatsapp-cmb.0.sendMessage';
                                  /********************************
                                   * Start/Init
                                  ********************************/
                                  getRadarControll();
                                  
                                  /********************************
                                   * Functions
                                  ********************************/
                                  
                                  async function getRadarControll(){
                                      const radar = await getContent();
                                      let message = "";
                                      if(radar[0]!="empty") {
                                          if(LOGGING && VERBOSE)    log('The following radar conrolls was found: ' + JSON.stringify(radar));        //Verbose log
                                          message = "Die folgenden Biltzer wurden gefunden: ";
                                          for(let i=0;i<radar.length;i++){
                                                  let addresse = await getAddress(radar[i].lat, radar[i].lng)
                                                  message = message + "\n -" + addresse 
                                          }
                                          if(LOGGING && VERBOSE)    log('Message: ' + message); //Verbose log
                                      } else {
                                          message = "No"
                                      }
                                  
                                      //Send Message
                                      const lastMessage = getState(STATE_PATH + 'lastMessage').val;
                                      if(lastMessage != message && message != "No") {
                                          setState(STATE_PATH + 'lastMessage', message); 
                                          setState(WHATSAPP_STATE, message);    
                                      }  
                                      log(message);
                                      
                                      return message
                                  
                                  }
                                  
                                  
                                  function getContent(){
                                      return new Promise((resolve) => {
                                          const url = BASE_URL + LATITUDE_START + "," + LONGITUDE_START + "," + LONGITUDE_START + "," + LATITUDE_DEST  + "," + LONGITUDE_DEST
                                          request(url, function(err, response, json) {
                                              if(LOGGING && VERBOSE)    log('Content from radar API: ' + json); //Verbose log
                                              const myjson = JSON.parse(json).pois;
                                              
                                              if(json.length>25 && err==null){
                                                  var myBlitzRes=[];
                                                  for(let i=0;i<myjson.length;i++){
                                                      myBlitzRes.push({
                                                          lat: myjson[i].lat,
                                                          lng: myjson[i].lng,
                                                          radType: myjson[i].type,
                                                      });
                                                  }
                                                  resolve(myBlitzRes)
                                              }else{
                                                  resolve(["empty"])
                                              } 
                                          });
                                      });
                                  } 
                                              
                                  function getAddress(lat, long) {
                                      return new Promise((resolve) => {
                                          let geoCodeUrl = 'https://api.opencagedata.com/geocode/v1/json'
                                          geoCodeUrl = geoCodeUrl + '?' + 'key=' + APIKEY_GEOCODING + '&q=' + lat + ',' + long + '&pretty=1'
                                          request(geoCodeUrl, function (err, response, json) {
                                              if (err==null){
                                                  const myRes = JSON.parse(json).results[0].formatted;
                                                  resolve(myRes)
                                              } else {
                                                  resolve("Address resolution not possible")
                                              }
                                          });
                                      });
                                  } 
                                  
                                  
                                  /********************************
                                   * Trigger
                                  ********************************/
                                  schedule('2 * * * *', function() {
                                      getRadarControll();
                                  });
                                  
                                  /********************************
                                   * Create States
                                  ********************************/
                                  STATES.forEach(function(STATE_NAME) {
                                      var STATE = STATE_PATH + STATE_NAME;
                                      if(!getObject(STATE)) {
                                          createState(STATE);
                                          if(LOGGING && VERBOSE) log('Create state: "' + STATE + '"');    //Verbose log
                                      }
                                  });
                                  
                                  /********************************
                                   * End
                                  ********************************/
                                  
                                  liv-in-sky 1 Reply Last reply Reply Quote 0
                                  • liv-in-sky
                                    liv-in-sky @JayR last edited by

                                    @JayR

                                    https://forum.iobroker.net/topic/38168/script-radar-kontrolle-und-koordinaten-übersetzer

                                    🙂 🙂

                                    ist hoffentlich in ordnng für dich - ich war grad so drin- da habe ich einfach weitergemacht

                                    JayR 1 Reply Last reply Reply Quote 1
                                    • JayR
                                      JayR @liv-in-sky last edited by

                                      @liv-in-sky : Hab den Beitrag gerade gesehen. Klar kein Problem. Ich hoffe, dass wir mit Script vielen helfen können.

                                      🙂

                                      liv-in-sky 1 Reply Last reply Reply Quote 0
                                      • liv-in-sky
                                        liv-in-sky @JayR last edited by

                                        @JayR

                                        ich wollt ja eigentlich nur das wait und async mal richtig integrieren - aber letztlich fand ich auch die idee gut

                                        einen blitzer hat er mir schon angezeigt auf einen meiner wege !

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

                                        Support us

                                        ioBroker
                                        Community Adapters
                                        Donate

                                        944
                                        Online

                                        31.9k
                                        Users

                                        80.2k
                                        Topics

                                        1.3m
                                        Posts

                                        javascript
                                        7
                                        20
                                        5714
                                        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