Skip to content
This repository was archived by the owner on May 7, 2025. It is now read-only.
This repository was archived by the owner on May 7, 2025. It is now read-only.

virtual_write for map widget point updates  #46

Open

Description

@kindmartin

hi all. I'm struggling with this python lib trying to update points in a blynk app map/

I was reading https://community.blynk.cc/t/solved-maps-with-http-rest-api/15826/54 where a possible solution is to use that REST API to update.
Also https://community.blynk.cc/t/blynk-map-interface-update-from-blynk-library-python/27289 without a solution.

how I can update a map widget here with python lib, I fact I'm using an ESP32 running last official Micropython 1.15.
any hint?
thanks in advance.

M

Activity

  1. kindmartin commented on May 6, 2021

    @kindmartin
    Author

    More details, for the REST API get method vs a virtualWrite @ arduino, I compiled a c/arduino sketch and all worked right.
    REST API I was trying this python code:
    ...
    value = '60,1,-34.754129,-56.6964227,test1'
    r = lib.urequests.get("http://192.168.1.2:8080/WXiw3UFznFCQxP3rcWpYZf9fV9ydNMYX/update/V60?value="+str(value))

    ...
    it worked for a simple text input widget, not map.

    For map, I also captured in input text wigget what was send to V60 virtual pin where I attached the widget map and get this:
    '1,-34.754129,-56.6964227,test1'

    But with Arduino I have got 0-34.507-56.128position#61 that seems the same but I note some control caracters between values like 0[non ascii]-34.507[non ascii]-56.128[non ascii]position#61

    _#define BLYNK_PRINT Serial
    #include <WiFi.h>
    #include <WiFiClient.h>
    #include <BlynkSimpleEsp32.h>
    char ssid[] = "PlantaAlta.2Ghz";
    char pass[] = "************************";
    char auth[] = "**************************NMYX";

    WidgetMap myMap(V60);

    void setup()
    {
    // Debug console
    Serial.begin(115200);

    Blynk.begin(auth, ssid, pass,IPAddress(192,168,1,2),8080);

    int index = 0;
    float lat = -34.5074;
    float lon = -56.1278;

    myMap.location(index, lat, lon, "position#2");

    Blynk.virtualWrite(V61, 0, lat, lon, "position#61");
    Serial.println( string(0), string(lat), string(lon), "position#61");
    }

    void loop()
    {
    Blynk.run();
    }_

  2. antohaUa commented on May 6, 2021

    @antohaUa
    Collaborator

    Hi Kindmartin!
    Simple blynk.virtual_write(pin, 2, -33.754129, -56.6964227, 'test2') should work for you.
    This should add point with certain location to map somewhere in Uruguay ))

    When you can do it ( write value)?
    Blynk.run means that here hidden auth connect , hadlers registration etc.
    For example you can add value widget to display pin value each 10 sec

    @blynk.handle_event('read V11')
    def read_virtual_pin_handler(pin):
         blynk.virtual_write(pin, 2, -33.754129, -56.6964227, 'test2')
    

    To learn more about lib implementation capabilities I suggest you to examine examples for different operations
    and try to play with them - to get expertise for read/write pin calls
    https://github.com/blynkkk/lib-python/tree/master/examples
    Each example has great description and schema in header. I think they might be very helpful for your findings.

  3. kindmartin commented on May 6, 2021

    @kindmartin
    Author

    Thanks, Anto, I will re-try and update. I think I tested a lot before on blynk.virtual_write(pin, 2, -33.754129, -56.6964227, 'test2') and similar, but for an unknown something it doesn't works (probably due the usual silly reason I cannot see). I will update soon.

    M

  4. kindmartin commented on May 6, 2021

    @kindmartin
    Author

    It worked.... thanks and sorry for taking time without more self testing,
    btw, Im from Buenos Aires Argentina so those coordinates are some ones I wrote ramdombly.

    /M

  5. kindmartin commented on May 7, 2021

    @kindmartin
    Author

    one more thing before close this one. in arduino we can clean the widget map using myMap.clear() (related to WidgetMap myMap(Pin) )

    how we could clean/delete old points ?

    ,M

  6. antohaUa commented on May 7, 2021

    @antohaUa
    Collaborator

    Kindmartin!

    how we could clean/delete old points ?
    As I can see within https://github.com/blynkkk/blynk-library/blob/master/src/WidgetMap.h

    void clear() {
            Blynk.virtualWrite(mPin, "clr");
        }
    

    Let's try this approach with python lib )) -> blynk.virtual_write(pin, "clr")

  7. kindmartin commented on May 10, 2021

    @kindmartin
    Author

    It worked charmingly!

    Thanks Anto!

    PD I still have to understand fix why I get some IOerrors when I try to virtual write vpins

    _>>> bkwupdateBlynkLoc each 20 seg")
    mem free loop: 3738304

    bkw.blynk.disconnect()
    [DISCONNECT_EVENT]
    .===>>>> memory pre update {'ram': {'lat': -34.52522, 'QtyWifis': 11, 'uid': 'fcf5c43cfb60', 'FlagA9GENA': True, 'FlagA9GData': False, 'timestamp': '20210510 13:39:25', 'QtyCells': 2, 'accuracy': 20, 'lon': -58.49915, 'FlagAlarmed': 0}}

    Traceback (most recent call last):
    File "", line 1, in
    File "blynklib.py", line 303, in virtual_write
    File "blynklib.py", line 166, in send
    NameError: name 'IOError' isn't defined

    bkw.blynk.virtual_write(60, "clr")mem free 2: 3734048

    Traceback (most recent call last):
    File "", line 1, in
    File "blynklib.py", line 303, in virtual_write
    File "blynklib.py", line 166, in send
    NameError: name 'IOError' isn't defined

    AGPS position -34.52527,-58.49914 2Cells 8wifis (accuracy= 20m, rt:3s)
    ===>>>> memory after update {'ram': {'lat': -34.52527, 'QtyWifis': 8, 'uid': 'fcf5c43cfb60', 'FlagA9GENA': True, 'FlagA9GData': False, 'timestamp': '20210510 13:39:53', 'QtyCells': 2, 'accuracy': 20, 'lon': -58.49914, 'FlagAlarmed': 0}}
    [CONNECT_EVENT]
    -34.52527 -58.49914 Home #2,20210510 13:39:53
    bkw.blynk.virtual_write(60, "clr")
    14
    updateBlynkLoc each 20 seg
    mem free loop: 3597632_

    now as a workaround I force to blynk.disconnect() then connect() then do the virtual writes.

    Like:

    lib. is a module where I just import libraries for this project

    bkw. is another module where I have all hw related real pins declarations and class instances
    fun. is just a module with all non task especific functions. That’s fun!

    ….

    **async def loop_garbageC(each_s=60):
    #print('async loop_garbageC')
    while True:
    await lib.uasyncio.sleep(each_s)
    lib.gc.collect()
    print('mem free loop:',lib.gc.mem_free())

    async def updateBlynkLoc(each_s=5):
    p = 0
    while True:
    print("updateBlynkLoc each {} seg".format(each_s))
    print('mem free loop:',lib.gc.mem_free())

        print('>>>>> bkw.blynk.disconnect()')
        bkw.blynk.disconnect()
        try:
            print('===>>>> memory pre update', bkw.memory)
            (lat,lon,QtyCells,QtyWifis,accuracy,responseTime) = fun.getAGPS(apikey =  'AIzaSyCW-qcNeQc_-***- _M')
            bkw.memory["ram"]["lat"] = lat
            bkw.memory["ram"]["lon"] = lon
            bkw.memory["ram"]["QtyCells"] = QtyCells
            bkw.memory["ram"]["QtyWifis"] = QtyWifis
            bkw.memory["ram"]["accuracy"] = accuracy  
            bkw.memory["ram"]["timestamp"] = fun.nowString()
            print('===>>>> memory after update', bkw.memory)
        except Exception as error:
            print('===>> error')
            print(error)
            print('-----------')
        bkw.blynk.connect()
        while bkw.blynk.connected() is False:
            pass
        info = 'Home #'+str(p)+','+fun.nowString( lib.time.localtime(lib.time.time() + bkw.TMZ ) )
        bkw.blynk.virtual_write(60, p, bkw.memory["ram"]["lat"], bkw.memory["ram"]["lon"], info )
        print(bkw.memory["ram"]["lat"], bkw.memory["ram"]["lon"],info)
        p += 1
        bkw.blynk.virtual_write(51, 'lat: {:.5f}'.format(bkw.memory["ram"]["lat"])) 
        bkw.blynk.virtual_write(52, 'lon: {:.5f}'.format(bkw.memory["ram"]["lon"])) 
        bkw.blynk.virtual_write(53, 'qtyCells: {}'.format(bkw.memory["ram"]["QtyCells"]))
        bkw.blynk.virtual_write(54, 'qtyWifis: {}'.format(bkw.memory["ram"]["QtyWifis"])) 
        bkw.blynk.virtual_write(55, 'accuracy: {}'.format(bkw.memory["ram"]["accuracy"]))
        bkw.blynk.virtual_write(56, 'timestamp: {}'.format(bkw.memory["ram"]["timestamp"]))
        await lib.uasyncio.sleep(each_s)
    

    async def loop_blynk(each_ms=500):
    while True:
    bkw.blynk.run()
    await lib.uasyncio.sleep_ms(each_ms)**

  8. antohaUa commented on May 16, 2021

    @antohaUa
    Collaborator

    Kindmartin!

    NameError: name 'IOError' isn't defined

    Can be related to HW python specific.

    I fact I'm using an ESP32 running last official Micropython 1.15

    You mentioned micro_python - thus you need to import not c_python but micro_python lib in your script
    https://github.com/blynkkk/lib-python/blob/master/blynklib_mp.py

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions