# HG changeset patch # User Michiel Broek # Date 1532198402 -7200 # Node ID ee1bcad035f02a674619465b544f21c87a896276 # Parent 2924fe4911d96f7032d71c72c3c7e58db12dd936 Versie 0.8.2. Node NBIRTH payload heeft nu netwerk informatie. diff -r 2924fe4911d9 -r ee1bcad035f0 configure --- 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" diff -r 2924fe4911d9 -r ee1bcad035f0 configure.ac --- 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) diff -r 2924fe4911d9 -r ee1bcad035f0 thermferm/mqtt.c --- 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 diff -r 2924fe4911d9 -r ee1bcad035f0 thermferm/thermferm.h --- a/thermferm/thermferm.h Fri Jul 20 21:37:45 2018 +0200 +++ b/thermferm/thermferm.h Sat Jul 21 20:40:02 2018 +0200 @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include