parent
4a005b866c
commit
dd5c8444af
@ -0,0 +1,34 @@
|
||||
#include "DoorOpener.h"
|
||||
#include "log.h"
|
||||
|
||||
#include <QDebug>
|
||||
|
||||
DoorOpener::DoorOpener(QObject* parent)
|
||||
{
|
||||
Q_UNUSED(parent);
|
||||
LOG_DBG("Initializing DoorOpener:");
|
||||
LOG_DBG("\t - Host: " + _hostname);
|
||||
LOG_DBG("\t - Port: " + std::to_string(_port));
|
||||
|
||||
_client = new QMqttClient();
|
||||
_client->setHostname(_hostname.c_str());
|
||||
_client->setPort(_port);
|
||||
_client->connectToHost();
|
||||
|
||||
if (_client->state() == QMqttClient::Connected) {
|
||||
LOG_INF("Connected to host " + _hostname + ".");
|
||||
}
|
||||
else {
|
||||
LOG_ERR("Unable to connect to host " + _hostname + ".");
|
||||
}
|
||||
}
|
||||
|
||||
bool DoorOpener::open()
|
||||
{
|
||||
LOG_DBG("Trying to send MQTT message to server with topic " + _topic + ".");
|
||||
qint32 retval { _client->publish(QMqttTopicName(_topic.c_str()), QByteArray(MQTT_ACCESS_TOKEN)) };
|
||||
|
||||
LOG_DBG("publish() returned " + std::to_string(retval) + ".");
|
||||
|
||||
return 0 == retval;
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
#ifndef DOOROPENER_H
|
||||
#define DOOROPENER_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QByteArray>
|
||||
#include <QMqttClient>
|
||||
|
||||
#define MQTT_ACCESS_TOKEN "SCJFMzEauiJvaHaQ0f50TM0safyZR0sq_taiOpenHeimDall"
|
||||
|
||||
class DoorOpener : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
DoorOpener(QObject *parent = nullptr);
|
||||
~DoorOpener() = default;
|
||||
|
||||
public slots:
|
||||
bool open();
|
||||
|
||||
private:
|
||||
QMqttClient* _client { nullptr };
|
||||
// TODO
|
||||
std::string _hostname { "localhost" };
|
||||
std::uint32_t _port { 1883 };
|
||||
std::string _topic { "taibsu_at_home/heimdall" };
|
||||
};
|
||||
|
||||
#endif // DOOROPENER_H
|
@ -0,0 +1,109 @@
|
||||
#ifndef LOG_H
|
||||
#define LOG_H
|
||||
|
||||
#include <iostream>
|
||||
#include <chrono>
|
||||
#include <ctime>
|
||||
#include <sstream>
|
||||
#include <thread>
|
||||
|
||||
#define QSTR(x) QObject::tr(x)
|
||||
|
||||
namespace tai {
|
||||
class Log {
|
||||
public:
|
||||
|
||||
~Log() {}
|
||||
|
||||
enum class Level {
|
||||
DEBUG = 0,
|
||||
INFO,
|
||||
WARNING,
|
||||
ERROR,
|
||||
FATAL
|
||||
};
|
||||
|
||||
static Log& logger() {
|
||||
static Log _inst;
|
||||
return _inst;
|
||||
}
|
||||
|
||||
static std::string threadIdToStr(std::thread::id const& tid)
|
||||
{
|
||||
std::stringstream ss;
|
||||
ss << tid;
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
std::string currentTime()
|
||||
{
|
||||
time_t now = time(nullptr);
|
||||
tm* ltm = localtime(&now);
|
||||
|
||||
std::string currentTime =
|
||||
std::to_string(ltm->tm_mday) + "." +
|
||||
std::to_string(ltm->tm_mon) + "." +
|
||||
std::to_string(ltm->tm_year + 1900) + ", ";
|
||||
|
||||
if (ltm->tm_hour < 10)
|
||||
currentTime += "0";
|
||||
|
||||
currentTime += std::to_string(ltm->tm_hour) + ":";
|
||||
|
||||
if (ltm->tm_min < 10)
|
||||
currentTime += "0";
|
||||
|
||||
currentTime += std::to_string(ltm->tm_min) + ":";
|
||||
|
||||
if (ltm->tm_sec < 10)
|
||||
currentTime += "0";
|
||||
|
||||
currentTime += std::to_string(ltm->tm_sec);
|
||||
|
||||
return currentTime;
|
||||
}
|
||||
|
||||
void log(std::string const& msg, Level lv = Level::DEBUG) {
|
||||
|
||||
std::string log_level;
|
||||
|
||||
switch (lv) {
|
||||
case Level::DEBUG:
|
||||
log_level = "DEBUG\t";
|
||||
break;
|
||||
case Level::INFO:
|
||||
log_level = "INFO\t";
|
||||
break;
|
||||
case Level::WARNING:
|
||||
log_level = "WARNING\t";
|
||||
break;
|
||||
case Level::ERROR:
|
||||
log_level = "ERROR\t";
|
||||
break;
|
||||
case Level::FATAL:
|
||||
log_level = "FATAL\t";
|
||||
break;
|
||||
default:
|
||||
log_level = "UNKNOWN\t";
|
||||
break;
|
||||
}
|
||||
|
||||
std::cerr << log_level << " | "
|
||||
<< "(" << currentTime() << ") "
|
||||
<< msg << std::endl;
|
||||
}
|
||||
|
||||
private:
|
||||
Log() {}
|
||||
Log(const Log&);
|
||||
Log& operator=(const Log&) = delete;
|
||||
};
|
||||
|
||||
} // namespace tai
|
||||
#define LOG_DBG(x) tai::Log::logger().log(x, tai::Log::Level::DEBUG)
|
||||
#define LOG_INF(x) tai::Log::logger().log(x, tai::Log::Level::INFO)
|
||||
#define LOG_WRN(x) tai::Log::logger().log(x, tai::Log::Level::WARNING)
|
||||
#define LOG_ERR(x) tai::Log::logger().log(x, tai::Log::Level::ERROR)
|
||||
#define LOG_FTL(x) tai::Log::logger().log(x, tai::Log::Level::FATAL)
|
||||
#define LOG_UKN(x) tai::Log::logger().log(x, tai::Log::Level::UNKNOWN)
|
||||
#endif // LOG_H
|
After Width: | Height: | Size: 17 KiB |
@ -1,5 +1,9 @@
|
||||
<RCC>
|
||||
<qresource prefix="/">
|
||||
<file>main.qml</file>
|
||||
<file>mute.png</file>
|
||||
<file>mute_white.png</file>
|
||||
<file>bg.jpg</file>
|
||||
<file>test_picture.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
After Width: | Height: | Size: 59 KiB |
Reference in new issue