155void begin(T& mesh,
double frequency = 2) {
156 auto tracker = std::make_shared<TrackMap>();
157 auto sendPkg = std::make_shared<PerformancePackage>();
160 auto pkg = var.to<PerformancePackage>();
162 if (!tracker->count(pkg.from)) {
163 tracker->operator[](pkg.from) = Track();
164 if (pkg.id > 0) tracker->operator[](pkg.from).lastId = pkg.id - 1;
167 tracker->operator[](pkg.from).nodeId = pkg.from;
168 tracker->operator[](pkg.from).hardware = pkg.hardware;
169 ++tracker->operator[](pkg.from).hits;
170 if (pkg.id < tracker->operator[](pkg.from).lastId)
171 tracker->operator[](pkg.from).lastId = pkg.id;
173 tracker->operator[](pkg.from).misses +=
174 (pkg.id - tracker->operator[](pkg.from).lastId) - 1;
176 tracker->operator[](pkg.from).lastId = pkg.id;
177 tracker->operator[](pkg.from).delay.update(
178 ((
int)mesh.getNodeTime() - pkg.time) / 1000);
179 tracker->operator[](pkg.from).stability.update(pkg.stability);
180 tracker->operator[](pkg.from).freeMemory.update(pkg.freeMemory);
184 sendPkg->from = mesh.getNodeId();
185 mesh.addTask(frequency * TASK_SECOND, TASK_FOREVER, [sendPkg, &mesh]() {
187 sendPkg->time = mesh.getNodeTime();
188 sendPkg->stability = mesh.stability;
189 sendPkg->freeMemory = ESP.getFreeHeap();
190 mesh.sendPackage(sendPkg.get());
193 mesh.addTask(TASK_MINUTE, TASK_FOREVER, [tracker, &mesh]() {
194 for (
auto&& pair : (*tracker)) {
195 if (mesh.isConnected(pair.first))
196 ++pair.second.present;
198 ++pair.second.absent;
200 protocol::Variant var(tracker.get());
203#ifdef PAINLESSMESH_ENABLE_STD_STRING
204 std::cout << str << std::endl;