NEWS
[Geschlossen] Blitzer über API abfragen
-
Hallo zusammen,
gibt es eine Möglichkeit über ein Script zu prüfen ob auf meinem Arbeitsweg ein Blitzer steht?
Kennt jemand eine API wo man solche Informationen abfragen kann? -
@JayR said in Blitzer über API abfragen:
Hallo zusammen,
gibt es eine Möglichkeit über ein Script zu prüfen ob auf meinem Arbeitsweg ein Blitzer steht?
Kennt jemand eine API wo man solche Informationen abfragen kann?Mir sind keine API der Polizei bekannt, auf denen diese Infos zur Verfügung gestellt werden.
Ich kenne nur die mehr oder weniger vollständigen Infos von - meist lokalen - Radiosendern.Alternativ gibt's ja die relativ einfache Methode, sich an die geltenden Gesetze und Regeln zu halten. Dann gibt auch bei einer nicht bekannten Radarkontrolle keine unangenehmen Überraschung.
Das scheint eben der kleine Unterschied zu sein:
Bei Corona fordert jeder, dass er persönlich vollständig geschützt wird.
Im Straßenverkehr ist der Schutz anderer Verkehrsteilnehmer (insbesondere vor Rasern) ziemlich tabu.
Maske nicht aufgesetzt: 250 EUR
90 km/h in der Innenstadt: 120 EUR (https://www.adac.de/verkehr/recht/bussgeld-punkte/bussgeldrechner/)
Was da wohl besser ist ? -
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.
-
@bahnuhr sagte in Blitzer über API abfragen:
Klappt sehr gut.
Ist das so?
Die verschoben sich doch immer -
@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 ?
-
@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
-
@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.
-
@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!
-
blitzer.de gäbe es da
-
@bahnuhr Danke für den Tipp. Kannst du mir ein RegEx Bsp geben
-
@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.
-
@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?) -
@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.
-
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.
-
@JayR hi
wirst du das ganze script - wenn fertig - mit uns teilen ? hätte interesse daran
-
@JayR da ich gerade versuche, sowas auch richtig umzusetzen - kannst mal hier schauen
-
@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 ********************************/
-
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
-
@liv-in-sky : Hab den Beitrag gerade gesehen. Klar kein Problem. Ich hoffe, dass wir mit Script vielen helfen können.
-
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 !