Sat, 21 Jul 2018 20:40:02 +0200
Versie 0.8.2. Node NBIRTH payload heeft nu netwerk informatie.
configure | file | annotate | diff | comparison | revisions | |
configure.ac | file | annotate | diff | comparison | revisions | |
thermferm/mqtt.c | file | annotate | diff | comparison | revisions | |
thermferm/thermferm.h | file | annotate | diff | comparison | revisions |
--- a/configure Fri Jul 20 21:37:45 2018 +0200 +++ b/configure Sat Jul 21 20:40:02 2018 +0200 @@ -2035,7 +2035,7 @@ PACKAGE="mbsePi-apps" -VERSION="0.8.1" +VERSION="0.8.2" COPYRIGHT="Copyright (C) 2014-2018 Michiel Broek, All Rights Reserved" CYEARS="2014-2018"
--- a/configure.ac Fri Jul 20 21:37:45 2018 +0200 +++ b/configure.ac Sat Jul 21 20:40:02 2018 +0200 @@ -8,7 +8,7 @@ dnl General settings dnl After changeing the version number, run autoconf! PACKAGE="mbsePi-apps" -VERSION="0.8.1" +VERSION="0.8.2" COPYRIGHT="Copyright (C) 2014-2018 Michiel Broek, All Rights Reserved" CYEARS="2014-2018" AC_SUBST(PACKAGE)
--- a/thermferm/mqtt.c Fri Jul 20 21:37:45 2018 +0200 +++ b/thermferm/mqtt.c Sat Jul 21 20:40:02 2018 +0200 @@ -634,8 +634,59 @@ } payload = xstrcat(payload, (char *)"}"); } + + /* + * Find our network information + */ + FILE *f; + char line[100], *ifname, *c, ip[NI_MAXHOST]; + struct ifaddrs *ifaddr, *ifa; + int family, s; + + if (birth && (f = fopen("/proc/net/route" , "r"))) { + while (fgets(line, 100, f)) { + ifname = strtok(line , " \t"); + c = strtok(NULL , " \t"); + + // Take the entry with destination '00000000' + if (ifname != NULL && c != NULL && (strcmp(c , "00000000") == 0)) { + + if (getifaddrs(&ifaddr) == -1) { + syslog(LOG_NOTICE, "error getifaddrs error %d", errno); + goto neterr; + } + + //Walk through linked list, maintaining head pointer so we can free list later + for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) { + if (ifa->ifa_addr == NULL) { + continue; + } + + family = ifa->ifa_addr->sa_family; + + if ((strcmp( ifa->ifa_name, ifname) == 0) && (family == AF_INET)) { + s = getnameinfo(ifa->ifa_addr, (family == AF_INET) ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6), ip, NI_MAXHOST, NULL, 0, NI_NUMERICHOST); + if (s != 0) { + syslog(LOG_NOTICE, "getnameinfo() error=%d for %s", errno, ifname); + goto neterr; + } + payload = xstrcat(payload, (char *)",\"net\":{\"address\":\""); + payload = xstrcat(payload, ip); + payload = xstrcat(payload, (char *)"\",\"ifname\":\""); + payload = xstrcat(payload, ifname); + payload = xstrcat(payload, (char *)"\",\"rssi\":0}"); + // TODO: get rssi if wlan interface. + } + } + + freeifaddrs(ifaddr); + } + } + fclose(f); + } +neterr: + payload = xstrcat(payload, (char *)"}}"); - if (birth) publisher(mosq, topic_base((char *)"NBIRTH"), payload, true); else