• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

wirenboard / wb-mqtt-w1 / 50

31 Jul 2026 10:39AM UTC coverage: 61.341% (-0.5%) from 61.795%
50

push

github

web-flow
Use exported vars instead of MAKEFLAGS for coverage options (#36)

172 of 248 branches covered (69.35%)

311 of 507 relevant lines covered (61.34%)

4.55 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

70.42
/onewire_driver.cpp
1
#include "onewire_driver.h"
2
#include <functional>
3

4
#include <algorithm>
5

6
#define LOG(logger) logger.Log() << "[w1 driver] "
7

8
using namespace std;
9
using namespace WBMQTT;
10

11
namespace
12
{
13
    void DeleteControl(const TSysfsOneWireThermometer& sensor, PLocalDevice device, PDriverTx& tx, TLogger& infoLogger)
1✔
14
    {
15
        LOG(infoLogger) << "RemoveControl of: " << sensor.GetId();
1✔
16
        device->RemoveControl(tx, sensor.GetId()).Sync();
1✔
17
    }
1✔
18

19
    void UpdateValue(const TSysfsOneWireThermometer& sensor, PLocalDevice device, PDriverTx& tx, TLogger& errorLogger)
×
20
    {
21
        try {
22
            device->GetControl(sensor.GetId())->SetValue(tx, sensor.GetTemperature()).Sync();
×
23
        } catch (const exception& er) {
×
24
            LOG(errorLogger) << er.what();
×
25
            device->GetControl(sensor.GetId())->SetError(tx, "r").Sync();
×
26
        }
×
27
    }
×
28

29
    void CreateControl(const TSysfsOneWireThermometer& sensor, PLocalDevice device, PDriverTx& tx, TLogger& errorLogger)
5✔
30
    {
31
        try {
32
            device
33
                ->CreateControl(tx,
15✔
34
                                TControlArgs{}
5✔
35
                                    .SetId(sensor.GetId())
5✔
36
                                    .SetType("temperature")
10✔
37
                                    .SetReadonly(true)
5✔
38
                                    .SetRawValue(FormatFloat(sensor.GetTemperature())))
10✔
39
                .GetValue();
10✔
40
        } catch (const exception& er) {
×
41
            LOG(errorLogger) << er.what();
×
42
            device
43
                ->CreateControl(
×
44
                    tx,
45
                    TControlArgs{}.SetId(sensor.GetId()).SetType("temperature").SetReadonly(true).SetError("r"))
×
46
                .GetValue();
×
47
        }
×
48
    }
5✔
49
} // namespace
50

51
TOneWireDriverWorker::TOneWireDriverWorker(const string& deviceId,
3✔
52
                                           const PDeviceDriver& mqttDriver,
53
                                           TLogger& infoLogger,
54
                                           TLogger& debugLogger,
55
                                           TLogger& errorLogger,
56
                                           const string& thermometersSysfsDir)
3✔
57
    : MqttDriver(mqttDriver),
3✔
58
      OneWireManager(thermometersSysfsDir, debugLogger, errorLogger),
3✔
59
      InfoLogger(infoLogger),
3✔
60
      DebugLogger(debugLogger),
3✔
61
      ErrorLogger(errorLogger),
3✔
62
      DeviceId(deviceId),
3✔
63
      FirstTime(true)
3✔
64
{
65
    auto tx = MqttDriver->BeginTx();
3✔
66
    Device = tx->CreateDevice(TLocalDeviceArgs{}
9✔
67
                                  .SetId(DeviceId)
3✔
68
                                  .SetTitle("1-wire Thermometers", "en")
12✔
69
                                  .SetTitle("Термометры 1-wire", "ru")
15✔
70
                                  .SetIsVirtual(true)
3✔
71
                                  .SetDoLoadPrevious(false))
72
                 .GetValue();
3✔
73
}
3✔
74

75
void TOneWireDriverWorker::RunIteration()
5✔
76
{
77
    LOG(DebugLogger) << "Rescan bus";
5✔
78
    auto devices = OneWireManager.RescanBusAndRead();
5✔
79
    auto tx = MqttDriver->BeginTx();
5✔
80

81
    for (auto sensor: devices) {
11✔
82
        switch (sensor->GetStatus()) {
6✔
83
            case TSysfsOneWireThermometer::New:
5✔
84
                CreateControl(*sensor, Device, tx, ErrorLogger);
5✔
85
                break;
5✔
86
            case TSysfsOneWireThermometer::Connected:
×
87
                UpdateValue(*sensor, Device, tx, ErrorLogger);
×
88
                break;
×
89
            case TSysfsOneWireThermometer::Disconnected:
1✔
90
                DeleteControl(*sensor, Device, tx, InfoLogger);
1✔
91
                break;
1✔
92
        }
93
    }
6✔
94

95
    if (FirstTime) {
5✔
96
        Device->RemoveUnusedControls(tx).Wait();
3✔
97
        FirstTime = false;
3✔
98
    }
99
}
5✔
100

101
TOneWireDriverWorker::~TOneWireDriverWorker()
6✔
102
{
103
    try {
104
        MqttDriver->BeginTx()->RemoveDeviceById(DeviceId).Sync();
6✔
105
    } catch (const std::exception& e) {
×
106
        LOG(ErrorLogger) << "Exception during ~TOneWireDriverWorker: " << e.what();
×
107
    } catch (...) {
×
108
        LOG(ErrorLogger) << "Unknown exception during ~TOneWireDriverWorker";
×
109
    }
×
110
}
6✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc