Topic: Trying to create Geofence in Wialon through Python
Hello,
I am trying to create a new geozone, or to update an existing one, using python requests.
The command I am using is update_zone.
But whatever I am trying the result is always the same, WRONG_PARAMS.
I suspect that the problem is with the resource id ("rid"), or the geofence flag("f") I am using, but what is the way to find the existing geozone's rid and flag?
The first part of the script logs in succesfully btw, so no worries there.
Below is the python code for both tasks:
import requests
import json
base_url = hst-api.wialon.com #(no link accepted)
token = "token"
def wialon_login(token):
    # Parameters for login request
    params = {
        'svc': 'token/login',
        'params': '{"token": "' + token + '"}'
    }
    
    # Make the request
    response = requests.get(base_url, params=params)
    
    # Parse response
    if response.status_code == 200:
        result = response.json()
        if 'eid' in result:
            session_id = result['eid']  # This is your session ID
            print(f"Successfully logged in! Session ID: {session_id}")
            return session_id
        else:
            print(f"Login failed: {result}")
            return None
    else:
        print(f"Error: {response.status_code} - {response.text}")
        return None
def update_geozone(session_id):
    # Wialon API endpoint for creating a line layer
    BASE_URL = hst-api.wialon.com/wialon/ajax.html?sid={session_id} #(no links accepted)
    url = f"{BASE_URL}&svc=resource/update_zone&"   
    print(url)
    # Parameters for the request
    params = {
            "t":3, # type: 1 - line, 2 - polygon, 3 - circle 
            "w":5000, #line thickness or circle radius 
            "f":590, # geofence flags (see below) 
            "c":2568583984, #color (ARGB)
            "tc":16733440, #text color RGB
            "ts":12, #font size
            "min":0, #show on map from this zoom
            "max":18, #show on map till this zoom 
            "libId":"", #id of icon library , 0 - id for default icon library 
            "path":"", #short path to default icon
#            "p":[{"x":-3.715235,"y":40.415273,"r":10000}], #
#            "itemId":37, #
            "id":0, # zone id inside resource/account zone array
            "callMode":"update", #
            "rid":''
        }
    response = requests.post(url, json={"params": params})
    return response.json()
def create_geozone(session_id, x, y):
    # Wialon API endpoint for creating a line layer
    BASE_URL = hst-api.wialon.com/wialon/ajax.html?sid={session_id} #(no links accepted)
    url = f"{BASE_URL}&svc=resource/update_zone&"   
    print(url)
    # Parameters for the request
    params = {
            "n": 'test1asdiadgiasdgi asdadsuaids',       # Name of the geofence
            "itemId":37,
            "rid":'dionsa',
            "id": 1,            # Resource ID (0 for global resource)
            "callMode": "create",
            "t": 3,            # Type of geofence: 3 for circle
            "p":[{ "x":x, "y":y, "r":1000 }]
        }
    response = requests.post(url, json={"params": params})
    return response.json()
session_id = wialon_login(token)
geozone_update = update_geozone(session_id)
geozone_create = create_geozone(session_id, 38.2658, 23.7273)
wialon_logout(session_id)I am grateful for your time.
