NEWS
HttpGet liefert 403
-
@homoran ja so ist es. Und wenn man weiter googelt kommt der User-Agent ins spiel.
Hier mal mein Code:
function GeoState(lat, lon, sDP='') { httpGet('https://nominatim.openstreetmap.org/reverse?format=geojson&lat='+lat+'&lon='+lon, { timeout: 15000,"headers":{"User-Agent":"'" + RUA() + "'"}}, (error, response) => { if (!error && response.statusCode == 200) { var info = JSON.parse(response.data); var dummy = JSON.stringify(info); dummy = JSON.parse(dummy).features[0].properties.address; setState(sDP, JSON.stringify(dummy), true); info = ''; dummy = ''; } else { console.error('Nominatim: '+response.statusCode); } }) } //Aufruf: GeoState (getState('owntracks.0.users.XXXXX.latitude').val, getState('owntracks.0.users.XXXXX.longitude').val, XXXXXZIEL_JSONDPXXXXX);
function UAChrome() { const Plattform = Math.floor(Math.random() * 2) const chromeVersion = Math.floor(Math.random() * 20) + 60; const webkitVersion = Math.floor(Math.random() * 700) + 500; const osPlatform = Plattform == 1 ? 'Win64; x64' : 'Macintosh; Intel Mac OS X 10_15_0'; const userAgent = `Mozilla/5.0 (${osPlatform}) AppleWebKit/${webkitVersion}.36 (KHTML, like Gecko) Chrome/${chromeVersion}.0.3163.100 Safari/${webkitVersion}.36`; return userAgent; } function UAFirefox() { const Plattform = Math.floor(Math.random() * 2) const firefoxVersion = Math.floor(Math.random() * 5) + 55; const geckoVersion = Math.floor(Math.random() * 30) + 20100101; const osPlatform = Plattform == 1 ? 'Win64; x64' : 'Macintosh; Intel Mac OS X 10_15_0'; const userAgent = `Mozilla/5.0 (${osPlatform}; rv: ${firefoxVersion}.0) Gecko/${geckoVersion} Firefox/${firefoxVersion}.0`; return userAgent; } function UASafari() { const Plattform = Math.floor(Math.random() * 2) const safariVersion = Math.floor(Math.random() * 5) + 10; const osPlatform = Plattform == 1 ? 'Win64; x64' : 'Macintosh; Intel Mac OS X 10_15_0'; const userAgent = `Mozilla/5.0 (${osPlatform}) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/${safariVersion}.1.15 Safari/605.1.15`; return userAgent; } function UAAndroid() { const androidVersion = Math.floor(Math.random() * 5) + 5; const chromeVersion = Math.floor(Math.random() * 20) + 60; const webkitVersion = Math.floor(Math.random() * 700) + 500; const osPlatform = `Linux; Android ${androidVersion}.${Math.floor(Math.random() * 10)}; en-us; Nexus 6 Build/LYZ28M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${chromeVersion}.0.3163.98 Mobile Safari/${webkitVersion}.36`; const userAgent = `Mozilla/5.0 (${osPlatform}`; return userAgent; } function UAIos() { const iosVersion = Math.floor(Math.random() * 5) + 9; const safariVersion = Math.floor(Math.random() * 5) + 600; const webkitVersion = Math.floor(Math.random() * 700) + 500; const osPlatform = `CPU iPhone OS ${iosVersion}_${Math.floor(Math.random() * 10)} like Mac OS X) AppleWebKit/${webkitVersion}.60 (KHTML, like Gecko) Version/${safariVersion}.0 Mobile/15E148 Safari/${webkitVersion}.60`; const userAgent = `Mozilla/5.0 (${osPlatform}`; return userAgent; } function RUA() { const UA = Math.floor(Math.random() * 4) var UserAgent = ''; if (UA == 0) { UserAgent = UAChrome(); } else if (UA == 1) { UserAgent = UAFirefox(); } else if (UA == 2) { UserAgent = UASafari(); } else if (UA == 3) { UserAgent = UAAndroid(); } else if (UA == 4) { UserAgent = UAIos(); } return UserAgent; }
In diesem Beispiel kommt immer ein neuer User-Agent ins spiel. Ich habe das bei mir noch geändert, dass aller 6 Stunden nur ein neuer Agent zum tragen kommt.
Ro75.
-
@david-g sagte in HttpGet liefert 403:
Ich warte mal, ob @haus-automatisierung einen Vorschlag für eine Lösung mittels Blockly hat.
Ich habe lange überlegt, ob ich eigene HTTP-Header auch im Blockly-Baustein erlaube. Aber nach den letzten Wochen hier, sind die meisten schon mit den einfachsten Bautein-Kombinationen überfordert. Selbst der neue http POST-Baustein überfordert schon die meisten...
Also ich möchte den erstmal nicht noch komplexer machen.
-
@david-g sagte in HttpGet liefert 403:
Der Test hat im selben Netz stattgefunden, glaube also nicht, dass meine IP geblockt wurde.
Die Beobachtung ist korrekt. Nominatim blockt nicht eine spezielle IP, sondern einen IP-Adressbereich in Verbindung mit dem User-Agent.
Daher läuft der Aufruf vom PC ohne Probleme und der Linux-Server mit ioBroker (httpget mit vermutlich immer dem gleichen User-Agent - sofern nichts übergeben) wird geblockt.
Ro75.
-
Weist du, ob man von selber freigegeben wird nach einer gewissen Zeit oder man es beantragen muss?
-
@david-g brauchst gar nichts machen. Einfach mal ne Stunde pausieren und zukünftig aber mit dem User-Agent in httpget arbeiten!
Ro75.
-
Bist du auch ein wenig fit in Blockly?
Kannst du mir sagen, wie deine beiden Scripte aussehen müssten, um die beiden Funktionen zu befüllen?
-
@david-g Blockly nicht mein Ding. Nur JS.
Ro75.
-
@david-g sagte in HttpGet liefert 403:
um die beiden Funktionen zu befüllen
Warum zwei Funktionen? Eine reicht doch?!
-
Darf auch gerne eine sein wo ich nur Koordinaten übergebe, hatte es nur so aufgeteilt da es von @Ro75 2 Teile waren.
-
@david-g der erste Teil war die eigentliche Abfrage von Nominatim. Der zweite Teil ist der zufällige User-Agent, der von der ersten mit aufgerufen wird. Nur bessere Übersicht.
Ro75.
-
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="r,(xv@.d$c;=YdJMPX80">lon</variable> <variable id="g{2,u1PfjN1:=CyqH3*m">lat</variable> <variable id="-@Osx@[T`D-%M3P0(~3!">sDP</variable> </variables> <block type="procedures_defcustomnoreturn" id="^(d~V_hm.^xis(f6DkUY" x="88" y="188"> <mutation statements="false"> <arg name="lon" varid="r,(xv@.d$c;=YdJMPX80"></arg> <arg name="lat" varid="g{2,u1PfjN1:=CyqH3*m"></arg> <arg name="sDP" varid="-@Osx@[T`D-%M3P0(~3!"></arg> </mutation> <field name="NAME">osmResolve</field> <field name="SCRIPT">ZnVuY3Rpb24gVUFDaHJvbWUoKSB7CiAgICBjb25zdCBQbGF0dGZvcm0gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyKQogICAgY29uc3QgY2hyb21lVmVyc2lvbiA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDIwKSArIDYwOwogICAgY29uc3Qgd2Via2l0VmVyc2lvbiA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDcwMCkgKyA1MDA7CiAgICBjb25zdCBvc1BsYXRmb3JtID0gUGxhdHRmb3JtID09IDEgPyAnV2luNjQ7IHg2NCcgOiAnTWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAxMF8xNV8wJzsKICAgIGNvbnN0IHVzZXJBZ2VudCA9IGBNb3ppbGxhLzUuMCAoJHtvc1BsYXRmb3JtfSkgQXBwbGVXZWJLaXQvJHt3ZWJraXRWZXJzaW9ufS4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8ke2Nocm9tZVZlcnNpb259LjAuMzE2My4xMDAgU2FmYXJpLyR7d2Via2l0VmVyc2lvbn0uMzZgOwogICAgcmV0dXJuIHVzZXJBZ2VudDsKfQogCmZ1bmN0aW9uIFVBRmlyZWZveCgpIHsKICAgIGNvbnN0IFBsYXR0Zm9ybSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDIpCiAgICBjb25zdCBmaXJlZm94VmVyc2lvbiA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDUpICsgNTU7CiAgICBjb25zdCBnZWNrb1ZlcnNpb24gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAzMCkgKyAyMDEwMDEwMTsKICAgIGNvbnN0IG9zUGxhdGZvcm0gPSBQbGF0dGZvcm0gPT0gMSA/ICdXaW42NDsgeDY0JyA6ICdNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDEwXzE1XzAnOwogICAgY29uc3QgdXNlckFnZW50ID0gYE1vemlsbGEvNS4wICgke29zUGxhdGZvcm19OyBydjogJHtmaXJlZm94VmVyc2lvbn0uMCkgR2Vja28vJHtnZWNrb1ZlcnNpb259IEZpcmVmb3gvJHtmaXJlZm94VmVyc2lvbn0uMGA7CiAgICByZXR1cm4gdXNlckFnZW50Owp9CiAKZnVuY3Rpb24gVUFTYWZhcmkoKSB7CiAgICBjb25zdCBQbGF0dGZvcm0gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyKQogICAgY29uc3Qgc2FmYXJpVmVyc2lvbiA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDUpICsgMTA7CiAgICBjb25zdCBvc1BsYXRmb3JtID0gUGxhdHRmb3JtID09IDEgPyAnV2luNjQ7IHg2NCcgOiAnTWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAxMF8xNV8wJzsKICAgIGNvbnN0IHVzZXJBZ2VudCA9IGBNb3ppbGxhLzUuMCAoJHtvc1BsYXRmb3JtfSkgQXBwbGVXZWJLaXQvNjA1LjEuMTUgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLyR7c2FmYXJpVmVyc2lvbn0uMS4xNSBTYWZhcmkvNjA1LjEuMTVgOwogICAgcmV0dXJuIHVzZXJBZ2VudDsKICB9CiAKZnVuY3Rpb24gVUFBbmRyb2lkKCkgewogICAgY29uc3QgYW5kcm9pZFZlcnNpb24gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1KSArIDU7CiAgICBjb25zdCBjaHJvbWVWZXJzaW9uID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMjApICsgNjA7CiAgICBjb25zdCB3ZWJraXRWZXJzaW9uID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNzAwKSArIDUwMDsKICAgIGNvbnN0IG9zUGxhdGZvcm0gPSBgTGludXg7IEFuZHJvaWQgJHthbmRyb2lkVmVyc2lvbn0uJHtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMCl9OyBlbi11czsgTmV4dXMgNiBCdWlsZC9MWVoyOE0pIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8ke2Nocm9tZVZlcnNpb259LjAuMzE2My45OCBNb2JpbGUgU2FmYXJpLyR7d2Via2l0VmVyc2lvbn0uMzZgOwogICAgY29uc3QgdXNlckFnZW50ID0gYE1vemlsbGEvNS4wICgke29zUGxhdGZvcm19YDsKICAgIHJldHVybiB1c2VyQWdlbnQ7Cn0KIApmdW5jdGlvbiBVQUlvcygpIHsKICAgIGNvbnN0IGlvc1ZlcnNpb24gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1KSArIDk7CiAgICBjb25zdCBzYWZhcmlWZXJzaW9uID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNSkgKyA2MDA7CiAgICBjb25zdCB3ZWJraXRWZXJzaW9uID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNzAwKSArIDUwMDsKICAgIGNvbnN0IG9zUGxhdGZvcm0gPSBgQ1BVIGlQaG9uZSBPUyAke2lvc1ZlcnNpb259XyR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTApfSBsaWtlIE1hYyBPUyBYKSBBcHBsZVdlYktpdC8ke3dlYmtpdFZlcnNpb259LjYwIChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi8ke3NhZmFyaVZlcnNpb259LjAgTW9iaWxlLzE1RTE0OCBTYWZhcmkvJHt3ZWJraXRWZXJzaW9ufS42MGA7CiAgICBjb25zdCB1c2VyQWdlbnQgPSBgTW96aWxsYS81LjAgKCR7b3NQbGF0Zm9ybX1gOwogICAgcmV0dXJuIHVzZXJBZ2VudDsKfQogCmZ1bmN0aW9uIFJVQSgpIHsKICAgIGNvbnN0IFVBID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNCk7CiAKICAgIGlmIChVQSA9PSAwKSB7CiAgICAgICAgcmV0dXJuIFVBQ2hyb21lKCk7CiAgICB9IGVsc2UgaWYgKFVBID09IDEpIHsKICAgICAgICByZXR1cm4gVUFGaXJlZm94KCk7CiAgICB9IGVsc2UgaWYgKFVBID09IDIpIHsKICAgICAgICByZXR1cm4gVUFTYWZhcmkoKTsKICAgIH0gZWxzZSBpZiAoVUEgPT0gMykgewogICAgICAgIHJldHVybiBVQUFuZHJvaWQoKTsKICAgIH0gZWxzZSBpZiAoVUEgPT0gNCkgewogICAgICAgIHJldHVybiBVQUlvcygpOwogICAgfQoKICAgIHJldHVybiAnJzsKfQoKaHR0cEdldCgKICAgIGBodHRwczovL25vbWluYXRpbS5vcGVuc3RyZWV0bWFwLm9yZy9yZXZlcnNlP2Zvcm1hdD1nZW9qc29uJmxhdD0ke2xhdH0mbG9uPSR7bG9ufWAsCiAgICB7CiAgICAgICAgdGltZW91dDogMTUwMDAsCiAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAnVXNlci1BZ2VudCc6IFJVQSgpLAogICAgICAgIH0sCiAgICB9LAogICAgKGVyciwgcmVzcG9uc2UpID0+IHsKICAgICAgICBpZiAoIWVyciAgJiYgcmVzcG9uc2Uuc3RhdHVzQ29kZSA9PSAyMDApIHsKICAgICAgICAgICAgY29uc3QgaW5mbyA9IEpTT04ucGFyc2UocmVzcG9uc2UuZGF0YSk7CiAgICAgICAgICAgIGNvbnN0IGFkZHJlc3MgPSBpbmZvLmZlYXR1cmVzWzBdLnByb3BlcnRpZXMuYWRkcmVzczsKCiAgICAgICAgICAgIHNldFN0YXRlKHNEUCwgSlNPTi5zdHJpbmdpZnkoYWRkcmVzcyksIHRydWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYE5vbWluYXRpbTogJHtyZXNwb25zZS5zdGF0dXNDb2RlfWApOwogICAgICAgIH0KICAgIH0KKTsK</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> </xml>
-
Vielen Dank.
sDP ist ein DP wo die json reingeschrieben wird? -
-
Danke für deine Umsetzung.
Wie kann ich die ZeilesetState(sDP, JSON.stringify(address), true);
abändern, damit das Ergebnis in eine Variable geschrieben wird mit der ich in Blockly weiterarbeiten kann?
sDP würde ich dann aus der Funktion entfernen.
-
@david-g sagte in HttpGet liefert 403:
abändern, damit das Ergebnis in eine Variable geschrieben wird mit der ich in Blockly weiterarbeiten kann?
Du musst ein Promise zurückliefern. Oder mit httpGetAsync arbeiten...
-
Also nicht einfach
und anstatt in die Variable in das Result von der Funktion schreiben (habe es bisher nicht geschafft^^)?
Falls das nicht so leicht ist, gehe ich einfach über den DP als Zwischenschritt.
-
@david-g Nein, weil httpGet ja asynchron ausgeführt wird und nicht auf den Callback gewartet wird.
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="r,(xv@.d$c;=YdJMPX80">lon</variable> <variable id="g{2,u1PfjN1:=CyqH3*m">lat</variable> </variables> <block type="procedures_defcustomreturn" id="Yf![9|Fz[uw]ZE3)hfFf" x="138" y="288"> <mutation statements="false"> <arg name="lon" varid="r,(xv@.d$c;=YdJMPX80"></arg> <arg name="lat" varid="g{2,u1PfjN1:=CyqH3*m"></arg> </mutation> <field name="NAME">osmResolve</field> <field name="SCRIPT">ZnVuY3Rpb24gVUFDaHJvbWUoKSB7CiAgICBjb25zdCBQbGF0dGZvcm0gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyKQogICAgY29uc3QgY2hyb21lVmVyc2lvbiA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDIwKSArIDYwOwogICAgY29uc3Qgd2Via2l0VmVyc2lvbiA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDcwMCkgKyA1MDA7CiAgICBjb25zdCBvc1BsYXRmb3JtID0gUGxhdHRmb3JtID09IDEgPyAnV2luNjQ7IHg2NCcgOiAnTWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAxMF8xNV8wJzsKICAgIGNvbnN0IHVzZXJBZ2VudCA9IGBNb3ppbGxhLzUuMCAoJHtvc1BsYXRmb3JtfSkgQXBwbGVXZWJLaXQvJHt3ZWJraXRWZXJzaW9ufS4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8ke2Nocm9tZVZlcnNpb259LjAuMzE2My4xMDAgU2FmYXJpLyR7d2Via2l0VmVyc2lvbn0uMzZgOwogICAgcmV0dXJuIHVzZXJBZ2VudDsKfQogCmZ1bmN0aW9uIFVBRmlyZWZveCgpIHsKICAgIGNvbnN0IFBsYXR0Zm9ybSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDIpCiAgICBjb25zdCBmaXJlZm94VmVyc2lvbiA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDUpICsgNTU7CiAgICBjb25zdCBnZWNrb1ZlcnNpb24gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAzMCkgKyAyMDEwMDEwMTsKICAgIGNvbnN0IG9zUGxhdGZvcm0gPSBQbGF0dGZvcm0gPT0gMSA/ICdXaW42NDsgeDY0JyA6ICdNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDEwXzE1XzAnOwogICAgY29uc3QgdXNlckFnZW50ID0gYE1vemlsbGEvNS4wICgke29zUGxhdGZvcm19OyBydjogJHtmaXJlZm94VmVyc2lvbn0uMCkgR2Vja28vJHtnZWNrb1ZlcnNpb259IEZpcmVmb3gvJHtmaXJlZm94VmVyc2lvbn0uMGA7CiAgICByZXR1cm4gdXNlckFnZW50Owp9CiAKZnVuY3Rpb24gVUFTYWZhcmkoKSB7CiAgICBjb25zdCBQbGF0dGZvcm0gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyKQogICAgY29uc3Qgc2FmYXJpVmVyc2lvbiA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDUpICsgMTA7CiAgICBjb25zdCBvc1BsYXRmb3JtID0gUGxhdHRmb3JtID09IDEgPyAnV2luNjQ7IHg2NCcgOiAnTWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAxMF8xNV8wJzsKICAgIGNvbnN0IHVzZXJBZ2VudCA9IGBNb3ppbGxhLzUuMCAoJHtvc1BsYXRmb3JtfSkgQXBwbGVXZWJLaXQvNjA1LjEuMTUgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLyR7c2FmYXJpVmVyc2lvbn0uMS4xNSBTYWZhcmkvNjA1LjEuMTVgOwogICAgcmV0dXJuIHVzZXJBZ2VudDsKICB9CiAKZnVuY3Rpb24gVUFBbmRyb2lkKCkgewogICAgY29uc3QgYW5kcm9pZFZlcnNpb24gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1KSArIDU7CiAgICBjb25zdCBjaHJvbWVWZXJzaW9uID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMjApICsgNjA7CiAgICBjb25zdCB3ZWJraXRWZXJzaW9uID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNzAwKSArIDUwMDsKICAgIGNvbnN0IG9zUGxhdGZvcm0gPSBgTGludXg7IEFuZHJvaWQgJHthbmRyb2lkVmVyc2lvbn0uJHtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMCl9OyBlbi11czsgTmV4dXMgNiBCdWlsZC9MWVoyOE0pIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8ke2Nocm9tZVZlcnNpb259LjAuMzE2My45OCBNb2JpbGUgU2FmYXJpLyR7d2Via2l0VmVyc2lvbn0uMzZgOwogICAgY29uc3QgdXNlckFnZW50ID0gYE1vemlsbGEvNS4wICgke29zUGxhdGZvcm19YDsKICAgIHJldHVybiB1c2VyQWdlbnQ7Cn0KIApmdW5jdGlvbiBVQUlvcygpIHsKICAgIGNvbnN0IGlvc1ZlcnNpb24gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1KSArIDk7CiAgICBjb25zdCBzYWZhcmlWZXJzaW9uID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNSkgKyA2MDA7CiAgICBjb25zdCB3ZWJraXRWZXJzaW9uID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNzAwKSArIDUwMDsKICAgIGNvbnN0IG9zUGxhdGZvcm0gPSBgQ1BVIGlQaG9uZSBPUyAke2lvc1ZlcnNpb259XyR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTApfSBsaWtlIE1hYyBPUyBYKSBBcHBsZVdlYktpdC8ke3dlYmtpdFZlcnNpb259LjYwIChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi8ke3NhZmFyaVZlcnNpb259LjAgTW9iaWxlLzE1RTE0OCBTYWZhcmkvJHt3ZWJraXRWZXJzaW9ufS42MGA7CiAgICBjb25zdCB1c2VyQWdlbnQgPSBgTW96aWxsYS81LjAgKCR7b3NQbGF0Zm9ybX1gOwogICAgcmV0dXJuIHVzZXJBZ2VudDsKfQogCmZ1bmN0aW9uIFJVQSgpIHsKICAgIGNvbnN0IFVBID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNCk7CiAKICAgIGlmIChVQSA9PSAwKSB7CiAgICAgICAgcmV0dXJuIFVBQ2hyb21lKCk7CiAgICB9IGVsc2UgaWYgKFVBID09IDEpIHsKICAgICAgICByZXR1cm4gVUFGaXJlZm94KCk7CiAgICB9IGVsc2UgaWYgKFVBID09IDIpIHsKICAgICAgICByZXR1cm4gVUFTYWZhcmkoKTsKICAgIH0gZWxzZSBpZiAoVUEgPT0gMykgewogICAgICAgIHJldHVybiBVQUFuZHJvaWQoKTsKICAgIH0gZWxzZSBpZiAoVUEgPT0gNCkgewogICAgICAgIHJldHVybiBVQUlvcygpOwogICAgfQoKICAgIHJldHVybiAnJzsKfQoKdHJ5IHsKICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgaHR0cEdldEFzeW5jKAogICAgICAgIGBodHRwczovL25vbWluYXRpbS5vcGVuc3RyZWV0bWFwLm9yZy9yZXZlcnNlP2Zvcm1hdD1nZW9qc29uJmxhdD0ke2xhdH0mbG9uPSR7bG9ufWAsCiAgICAgICAgewogICAgICAgICAgICB0aW1lb3V0OiAxNTAwMCwKICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiBSVUEoKSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgKTsKCiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA9PSAyMDApIHsKICAgICAgICBjb25zdCBpbmZvID0gSlNPTi5wYXJzZShyZXNwb25zZS5kYXRhKTsKCiAgICAgICAgcmV0dXJuIGluZm8uZmVhdHVyZXM/LlswXT8ucHJvcGVydGllcz8uYWRkcmVzcyA/PyB7fTsKICAgIH0KCiAgICByZXR1cm4ge307Cn0gY2F0Y2ggKGVycikgewogICAgcmV0dXJuIHsgZXJyIH07Cn0=</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="debug" id="oiKGA}Q9)CzpggWzL@D," x="138" y="338"> <field name="Severity">info</field> <value name="TEXT"> <shadow type="text" id="6vmy!f|F/3]XC|V|^Q+!"> <field name="TEXT">test</field> </shadow> <block type="procedures_callcustomreturn" id="Kbg~m223+L?EN/wyNdQ]"> <mutation name="osmResolve"> <arg name="lon"></arg> <arg name="lat"></arg> </mutation> <value name="ARG0"> <block type="math_number" id="#C5g9?loG*SF1`Go-.B0"> <field name="NUM">8.5</field> </block> </value> <value name="ARG1"> <block type="math_number" id="+y%uX{IEB}6~T9CJCZ|s"> <field name="NUM">51.7</field> </block> </value> </block> </value> </block> </xml>
-
Danke, teste ich nachher.
Werde bei Gelegenheit mal einen Feature Request beim Places Adapter erstellen, ob man da OSM einbauen kann. Einen Ordner address wo alles aus der json in einem eigenem DP steht.
Im Moment hat der glaube nur Google, was sehr umständlich ist.Ich mag den Adapter sehr, da man dort alle verschiedenen Adapter die GPS Daten liefern zusammenführen kann. Auch, dass man für ein Gerät Daten von verschiedenen Quellen kombinieren kann.
-
@david-g Ganz unbedarfte Frage:
wofür braucht man 2500 mal am Tag seinen Standort in Klartext? -
@homoran 2500 ist das Limit.
Für meine VIS: Bei Änderung der GPS Koordinaten (über 111m) übersetze ich die Daten in eine Adresse (Land, PLZ, Ort, Straße, Besonderheiten). Aber auf mehr als 1000 Änderungen (3 Geräte) komme ich nicht, da ich wie gesagt nur Änderungen verfolge mit mehr als 111m.
Ro75.