emacs lisp & yasnippet templates

On my home machines I keep a journal and used some fu to determine which machine the journal entry was written on. I also keep a daily log for work normally this consists of start time, mileage to be claimed so the snippet template resembles

# -*- mode: snippet -*-
# name: daily
# key: daily
# --
** `(format-time-string "%Y-%m-%d-%H:%m" (current-time))`
:PROPERTIES:
:LOCATION:
:MILEAGE:
:START: `(format-time-string "%H:%M" (current-time))`
:FINISH:
:END: 

At the start of everyday when i open up the laptop emacs is always there waiting and in the log for this year i type daily hit tab and voila my entry for the day commences

** 2020-06-05-14:06
   :PROPERTIES:
   :LOCATION: 
   :MILEAGE:
   :START: 14:06
   :FINISH:
   :END: 

Location, mileage and end time are manually entered and normally i keep location as a set of abbreviations that match the mileage to claim this means using dynamic column view i can get a nice table of times/locations such as;

ITEM LOCATIONS START FINISH MILEAGE EXPENSE TAGS
July 2018       745 207.03  
20180705   05:56 15:10   0.00 :clockanamoly:
20180706   07:40 14:00   0.00  
20180709 MEA-WAR 10:25 17:00 90 0.00 :clockanamoly:travel:
20180710 WAR 07:40 17:00   0.00 :travel:
20180711 WAR 07:40 17:00   3.30 :travel:
20180712 WAR-MEA 07:40 13:30 90 48.45 :travel:clockanamoly:
20180713 MEA-TAM-MEA 07:45 14:00 25 0.00  
20180716 MEA-BHX-PARIS 05:00 20:00 25 29.00 :travel:clockanamoly:
20180717 PARIS 08:30 18:30   0.00 :travel:clockanamoly:
20180718 PARIS-BHX-MEA 08:30 00:00 25 0.00 :travel:clockanamoly:

This then at the top of the file gets rendered into a smaller dynamic table so i can see cumulative mileage by month

ITEM LOCATIONS START FINISH MILEAGE TAGS
April 2018       400  
May 2018       689  
June 2018       682  
July 2018       745  
August 2018       155  

now i'm working from home due to COVID i got tired of typing "home" everytime but i know there will be site & supplier visits coming up so i didnt want to alter the template and just add the text "home" so back to the point of this post which was to use a bit of emacs-lisp fu to get the snippet template to auto update location but how?

After a little thinking i came to the conclusion the easiest way would be to identify the network address the laptop is currently on, now admittedly this falls down if by some miracle everywhere i go has the same 192.168.1 start for IP address but i'll test that when on the road. I started by reading up on network commands via

https://www.gnu.org/software/emacs/manual/html_node/elisp/Misc-Network.html

i then searched and found https://emacs.stackexchange.com/questions/7653/elisp-code-to-check-for-internet-connection and this was discussing auto updating packages if the connection was alive.

A bit of playing around i could see network-interface-list contained the info i wanted

(print (network-interface-list))

#+RESULTS:
: ((lo0 . [127 0 0 1 0]) (lo0 . [0 0 0 0 0 0 0 1 0]) (eth1 . [169 254 195 98 0]) (eth1 . [65152 0 0 0 2226 39545 32787 50018 0]) (wlan2 . [169 254 127 144 0]) (wlan2 . [65152 0 0 0 20906 64385 58821 32656 0]) (wlan1 . [169 254 218 84 0]) (wlan1 . [65152 0 0 0 12504 37352 2860 55892 0]) (wlan0 . [169 254 231 54 0]) (wlan0 . [65152 0 0 0 41016 7035 59478 59190 0]) (eth0 . [192 168 1 14 0]) (eth0 . [65152 0 0 0 4387 56520 32424 30320 0]))

but then reading the first site also gave me network-interface-info so specifying the wireless network or in this case ethernet (i'm writing this on my main m\c) gives

(print (network-interface-info "eth0"))

#+RESULTS:
: ([192 168 1 14 0] [192 168 1 255 0] [255 255 255 0 0] (1 . [244 77 48 24 93 135]) (dynamic running multicast broadcast up))

ok so i have the data what next? a little trial and error follows;

(print (network-interface-info "wlan0"))
(setq x (nth 0 (network-interface-info "wlan0")))
(print x)
(format "%s" x)
(if (string-match-p "192 168 1" (format "%s" x))
"home"
"work")
home

there's a lot wrong with the above and i've learned a bit more however given i start with zero emacs-lisp fu i think i can be spared a little leeway however it does ultimately work and can be pared down to the following;

(if (string-match-p "192 168 1" (format "%s" (network-interface-info "wlan0")))
"home"
"work")
home

All that needs to happen now is for the code to be incorporated into the snippet;

# -*- mode: snippet -*-
# name: daily
# key: daily
# --
** `(format-time-string "%Y-%m-%d-%H:%m" (current-time))`

:PROPERTIES:
`(if (string-match-p "192 168 1" (format "%s" (network-interface-info "wlan0")))
":LOCATION: HOME"
":LOCATION: ")`
:MILEAGE:
:START: `(format-time-string "%H:%M" (current-time))`
:FINISH:
:END:

Basically an hour of research and testing to save me what? 20s per day? thats going to be a long ROI before it pays off but i like learning and how knows what else may now be automated now that i have a little more fu.

Date: 2020-06-05 Fri 00:00

Emacs 30.0.92 (Org mode 9.7.11)