//by @liv-in-sky 15.1.2021 13:10
//dank an @JayR https://forum.iobroker.net/topic/37979/blitzer-%C3%BCber-api-abfragen
const myBASE_URL="https://cdn2.atudo.net/api/1.0/vl.php?type=0,1,2,3,4,5,6&box="
const config = getObject('system.config');
const mylat = config.common.latitude; //*/"48.427656" //
const mylong = config.common.longitude; //*/"13.211891"// 48.427656, 13.211891
//WICHTIG - IN BEIDE RICHTUNGEN EINTRAGEN
const myLATITUDE_START= [mylat ,"48.402426",mylat ,"48.647364",mylat ,"48.566209",mylat ,"48.474108",mylat ,"48.827975"]; //Daheim,Freising,Daheim,Mainburg,Daheim,Au,Dahei,Moosburg.Daheim,Gögging
const myLONGITUDE_START=[mylong ,"11.744568",mylong ,"11.784530",mylong ,"11.741535",mylong ,"11.967363",mylong ,"11.778147"];
const myLATITUDE_DEST= ["48.402426",mylat ,"48.647364",mylat ,"48.566209",mylat ,"48.474108",mylat ,"48.827975",mylat ]; //Freising,Daheim,Mainburg,Daheim,Au,Daheim,Moosburg,Daheim,Gögging,Daheim
const myLONGITUDE_DEST= ["11.744568",mylong ,"11.784530",mylong ,"11.741535",mylong ,"11.967363",mylong ,"11.778147",mylong ];
const APIKEY_GEOCODING="4dd2056xxxxxxxxxxxxxxx
const myStandardMarker=mylat+","+mylong //
let mySchedule=" */15 8-20 * * *"
let myRes=[];
let kurzBlitzerAnzeige=[];
let counterAbfrage;
let myAddressDatabase=[];
function getContent( LATITUDE_START,LONGITUDE_START,LATITUDE_DEST,LONGITUDE_DEST) {
// kein async!
return new Promise((resolve) => {
// kein async!
const url = myBASE_URL + LATITUDE_START + "," + LONGITUDE_START + "," + LATITUDE_DEST + "," + LONGITUDE_DEST
// log(url)
request(url, function (err, response, json) { //log(json.length);log(err)
// let myjson=Testing2
// log("get die Blitzer "+myjson.pois[0].lat)
// log(JSON.stringify(response))
// log(json)
//log(response.body)
//log(json.indexOf("<"))
json=json.replace(/\n/gm,"")
if(json.indexOf("<")>=0) json=json.replace(/.+?({.+)/,"$1")
//// log(json)
if(err==null && json.length>25) {////log("hat key")
// if(json.length>25 && err==null) {log("hat key")
const myjson = JSON.parse(json).pois;
//// log(JSON.stringify(json))
let myBlitzRes=[]; let myOldLat=""; let myOldLng="";
for(let i=0;i<myjson.length;i++){
if(myOldLat!=myjson[0].lat && myOldLng!=myjson[0].lng ) // for(let i=0;i<myjson.pois.length;i++){
myBlitzRes.push({
lat: myjson[0].lat,
lng: myjson[0].lng
// lat: myjson.pois[0].lat,
// lng: myjson.pois[0].lng
});
myOldLat=myjson[0].lat
myOldLng=myjson[0].lng
} resolve(myBlitzRes)
} else{resolve(["empty"])}
});
});
}
function getAddress(lat, long) {
// kein async!
return new Promise((resolve) => {
let gefunden=false
for (let i=0;i<myAddressDatabase.length;i++){
if(lat==myAddressDatabase[i].lat && long==myAddressDatabase[i].long){
myRes=myAddressDatabase[i].address
gefunden=true
}
}
if(gefunden) {//log("hab es gefunden " + myRes);
resolve(myRes)} else{
counterAbfrage++;
// kein async!
let geoCodeUrl = 'https://api.opencagedata.com/geocode/v1/json'
geoCodeUrl = geoCodeUrl + '?' + 'key=' + APIKEY_GEOCODING + '&q=' + lat + ',' + long + '&pretty=1'
// log(geoCodeUrl)
request(geoCodeUrl, function (err, response, json) {
// log(JSON.parse(json).results[0].formatted);
if (err==null){
// log(JSON.stringify(response))
// log("--------------- "+json)
//log(response.body)
const myRes = JSON.parse(json).results[0].formatted;
// Direkte Rückgabe des Wertes:
//log(myRes)
myAddressDatabase.push({
"lat":lat,
"long":long,
"address":myRes
})
resolve(myRes)} else {resolve("keine Adress-Auflösung möglich")}
});
}
});
}
async function doStuff() {
kurzBlitzerAnzeige=[];
//für einzelne Koordinaten Abfrage
if (!(await existsStateAsync("javascript." + instance + ".CheckRadar.Daheim"))) {
await createStateAsync("CheckRadar.Daheim", myStandardMarker,{type: "string", name: "Daheim", role: "value", read: true, write: true, } ); }
if (!(await existsStateAsync("javascript." + instance + ".CheckRadar.MYBlitzer"))) {
await createStateAsync("CheckRadar.MYBlitzer", "",{type: "string", name: "MYBlitzer-für Überwachung", role: "value", read: true, write: true, } ); }
if (!(await existsStateAsync("javascript." + instance + ".CheckRadar.EinzelAbfrage.Abfrage"))) {
await createStateAsync("CheckRadar.EinzelAbfrage.Abfrage", "leer", {type: "string", name: "Einzelabfrage Abfrage - Komma Sep", role: "value", read: true, write: true, } ); }
//if (!(await existsStateAsync("javascript." + instance + ".CheckRadar.EinzelAbfrage.AbfrageLng"))) {
// await createStateAsync("CheckRadar.EinzelAbfrage.AbfrageLng", {type: "string", name: "Einzelabfrage AbfrageLng", role: "value", read: true, write: true, } ); }
if (!(await existsStateAsync("javascript." + instance + ".CheckRadar.EinzelAbfrage.Abfrage-Ergebnis"))) {
await createStateAsync("CheckRadar.EinzelAbfrage.Abfrage-Ergebnis", "leer",{type: "string", name: "Einzelabfrage Abfrage-Ergebnis", role: "value", read: true, write: true, } ); }
//-------------------------------
if (!(await existsStateAsync("javascript." + instance + ".CheckRadar.DailyAbrage"))) {
counterAbfrage=0;//log( counterAbfrage.toString())
await createStateAsync("CheckRadar.DailyAbrage", 0,{type: "number", name: "DailyAbrage-Koordinaten", role: "value", read: true, write: true, } ); }
else{counterAbfrage= (await getStateAsync("javascript." + instance + ".CheckRadar.DailyAbrage")).val}
for(let b=0;b<myLATITUDE_START.length;b++){
if (!(await existsStateAsync("javascript." + instance + ".CheckRadar."+b+".StandortBlitzer"))) {
await createStateAsync("CheckRadar."+b+".StandortBlitzer", {type: "string", name: "StandortBlitzer", role: "value", read: true, write: true, } ); }
if (!(await existsStateAsync("javascript." + instance + ".CheckRadar."+b+".StandortBlitzerKoordinaten1"))) {
await createStateAsync("CheckRadar."+b+".StandortBlitzerKoordinaten1", {type: "string", name: "StandortBlitzerKoordinaten1", role: "value", read: true, write: true, } ); }
if (!(await existsStateAsync("javascript." + instance + ".CheckRadar."+b+".StandortBlitzerKoordinaten2"))) {
await createStateAsync("CheckRadar."+b+".StandortBlitzerKoordinaten2", {type: "string", name: "StandortBlitzerKoordinaten2", role: "value", read: true, write: true, } ); }
if (!(await existsStateAsync("javascript." + instance + ".CheckRadar."+b+".ZusätzlicheBlitzer"))) {
await createStateAsync("CheckRadar."+b+".ZusätzlicheBlitzer", "",{type: "string", name: "ZusätzlicheBlitzer", role: "value", read: true, write: true, } ); }
if (!(await existsStateAsync("javascript." + instance + ".CheckRadar."+b+".StandardMarker"))) {
await createStateAsync("CheckRadar."+b+".StandardMarker", {type: "string", name: "StandardMarker", role: "value", read: true, write: true, } ); }
if (!(await existsStateAsync("javascript." + instance + ".CheckRadar."+b+".Abfahrt"))) {
await createStateAsync("CheckRadar."+b+".Abfahrt", {type: "string", name: "Start", role: "value", read: true, write: true, } ); }
if (!(await existsStateAsync("javascript." + instance + ".CheckRadar."+b+".Destination"))) {
await createStateAsync("CheckRadar."+b+".Destination", {type: "string", name: "Destination", role: "value", read: true, write: true, } ); }
if (!(await existsStateAsync("javascript." + instance + ".CheckRadar."+b+".ZielKoordinaten"))) {
await createStateAsync("CheckRadar."+b+".ZielKoordinaten", {type: "string", name: "ZielKoordinaten - wenn nicht Daheim", role: "value", read: true, write: true, } ); }
// for(let c=0;c<myLATITUDE_DEST.length;c++){
if(myLATITUDE_DEST[b]!=mylat) await setStateAsync("javascript." + instance + ".CheckRadar."+b+".ZielKoordinaten",myLATITUDE_DEST[b]+","+myLONGITUDE_DEST[b])
// }
// await setStateAsync("javascript." + instance + ".CheckRadar.MYBlitzer","")
const myBlitzer = await getContent(myLATITUDE_START[b],myLONGITUDE_START[b],myLATITUDE_DEST[b],myLONGITUDE_DEST[b]);
////log("meine blitzer "+JSON.stringify(myBlitzer))
//let myVon=await getAddress(myLATITUDE_START[b],myLONGITUDE_START[b])
setState("javascript." + instance + ".CheckRadar."+b+".Abfahrt",await getAddress(myLATITUDE_START[b],myLONGITUDE_START[b]))
// let myNach=await getAddress(myLATITUDE_DEST[b],myLONGITUDE_DEST[b])
setState("javascript." + instance + ".CheckRadar."+b+".Destination",await getAddress(myLATITUDE_DEST[b],myLONGITUDE_DEST[b]))
// log(myVon+" "+myNach)
let myRes2=[];
if(myBlitzer[0]!="empty") {
setState("javascript." + instance + ".CheckRadar."+b+".StandortBlitzerKoordinaten1",myBlitzer[0].lat+","+myBlitzer[0].lng);
setState("javascript." + instance + ".CheckRadar."+b+".StandortBlitzerKoordinaten2",myBlitzer[0].lat+";"+myBlitzer[0].lng);
setState("javascript." + instance + ".CheckRadar."+b+".StandardMarker",myBlitzer[0].lat+";"+myBlitzer[0].lng);
// log(myBlitzer[0].lat); log(myBlitzer[0].lng)
for(let i=0;i<myBlitzer.length;i++){
// await getAddress(myBlitzer[i].lat, myBlitzer[i].lng);
myRes2.push(await getAddress(myBlitzer[i].lat, myBlitzer[i].lng))
}
//log(myRes.toString())
//// log( "------"+myRes.toString())
kurzBlitzerAnzeige.push(myRes2[0]);
setState("javascript." + instance + ".CheckRadar."+b+".StandortBlitzer",myRes2[0]);log(myRes2[0])
let addBlitzer=""
for( let a=1;a<myRes2.length;a++){
if(myRes2[a]!=myRes2[a-1]){; //log(a+":"+myRes[a]);setState("javascript." + instance + ".CheckRadar."+b+".ZusätzlicheBlitzer",myRes[a]);
addBlitzer=addBlitzer+";"+myRes2[a] }
} setState("javascript." + instance + ".CheckRadar."+b+".ZusätzlicheBlitzer",addBlitzer);
//setState("javascript." + instance + ".CheckRadar."+b+".ZusätzlicheBlitzer",myRes[1]);
// setState("javascript." + instance + ".CheckRadar."+b+".StandardMarker",myRes[0]);
} else {/*log("KEINE BLITZER !!!!!");*/ setState("javascript." + instance + ".CheckRadar."+b+".StandortBlitzer","Keine Blitzer");
setState("javascript." + instance + ".CheckRadar."+b+".StandardMarker",myStandardMarker);
} setState("javascript." + instance + ".CheckRadar.DailyAbrage",counterAbfrage) ;
}
let alterWert="";let myGesamt=""
//log(kurzBlitzerAnzeige.length.toString())
for(let d=0;d<kurzBlitzerAnzeige.length;d++) {
if(alterWert!=kurzBlitzerAnzeige[d]) { //log("alt: "+alterWert+" neu: "+kurzBlitzerAnzeige[d])
myGesamt=myGesamt+kurzBlitzerAnzeige[d].replace(", Germany","")+"</br>"
alterWert=kurzBlitzerAnzeige[d] }
} setState("javascript." + instance + ".CheckRadar.MYBlitzer",myGesamt)
}
schedule( mySchedule, function () {
doStuff();
});
doStuff();
schedule("0 0 * * *", async function () {
setState("javascript." + instance + ".CheckRadar.DailyAbrage",0)
});
on({id: "javascript." + instance + ".CheckRadar.EinzelAbfrage.Abfrage", change: "any"}, async function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
if (existsState("javascript." + instance + ".CheckRadar.EinzelAbfrage.Abfrage") && getState("CheckRadar.EinzelAbfrage.Abfrage").val!="leer") {
let myValueArr=value.split(",")
let myAbfrage=await getAddress(myValueArr[0],myValueArr[1]);
setState("javascript." + instance + ".CheckRadar.EinzelAbfrage.Abfrage-Ergebnis",myAbfrage)
setState("javascript." + instance + ".CheckRadar.DailyAbrage",counterAbfrage)}
});