From 528a4435a964f1212d8a7c9b5d3eea5345ed8543 Mon Sep 17 00:00:00 2001
From: jomjol <30766535+jomjol@users.noreply.github.com>
Date: Thu, 20 May 2021 21:58:37 +0200
Subject: [PATCH] Rolling 20210520
---
README.md | 3 +++
.../ClassFlowMakeImage.cpp | 12 ++++++++++++
.../ClassFlowPostProcessing.cpp | 1 +
.../components/jomjol_mqtt/interface_mqtt.cpp | 3 ++-
.../components/jomjol_time_sntp/time_sntp.cpp | 11 +++++++++++
code/components/jomjol_time_sntp/time_sntp.h | 2 ++
code/main/version.cpp | 4 ++--
code/version.cpp | 4 ++--
firmware/bootloader.bin | Bin 25264 -> 25264 bytes
firmware/firmware.bin | Bin 1765664 -> 1765504 bytes
10 files changed, 35 insertions(+), 5 deletions(-)
diff --git a/README.md b/README.md
index 319badeb..9fed9621 100644
--- a/README.md
+++ b/README.md
@@ -44,9 +44,12 @@ In other cases you can contact the developer via email:
height = image_height;
/////////////////////////////////////////////////////////////////////////////////////
Camera.CaptureToBasisImage(rawImage, flashdauer);
+ time(&TimeImageTaken);
+ localtime(&TimeImageTaken);
+
if (SaveAllFiles) rawImage->SaveToFile(namerawimage);
}
@@ -169,6 +175,9 @@ bool ClassFlowMakeImage::doFlow(string zwtime)
esp_err_t ClassFlowMakeImage::SendRawJPG(httpd_req_t *req)
{
int flashdauer = (int) (waitbeforepicture * 1000);
+ time(&TimeImageTaken);
+ localtime(&TimeImageTaken);
+
return Camera.CaptureToHTTP(req, flashdauer);
}
@@ -179,6 +188,9 @@ ImageData* ClassFlowMakeImage::SendRawImage()
ImageData *id;
int flashdauer = (int) (waitbeforepicture * 1000);
Camera.CaptureToBasisImage(zw, flashdauer);
+ time(&TimeImageTaken);
+ localtime(&TimeImageTaken);
+
id = zw->writeToMemoryAsJPG();
delete zw;
return id;
diff --git a/code/components/jomjol_flowcontroll/ClassFlowPostProcessing.cpp b/code/components/jomjol_flowcontroll/ClassFlowPostProcessing.cpp
index e9119239..809b847b 100644
--- a/code/components/jomjol_flowcontroll/ClassFlowPostProcessing.cpp
+++ b/code/components/jomjol_flowcontroll/ClassFlowPostProcessing.cpp
@@ -392,6 +392,7 @@ bool ClassFlowPostProcessing::doFlow(string zwtime)
time_t currenttime;
time(¤ttime);
localtime(¤ttime);
+// currenttime =
double difference = difftime(currenttime, lastvalue); // in Sekunden
difference /= 60; // in Minuten
FlowRateAct = (Value - PreValue) / difference;
diff --git a/code/components/jomjol_mqtt/interface_mqtt.cpp b/code/components/jomjol_mqtt/interface_mqtt.cpp
index 8ba42fec..7fde4733 100644
--- a/code/components/jomjol_mqtt/interface_mqtt.cpp
+++ b/code/components/jomjol_mqtt/interface_mqtt.cpp
@@ -74,6 +74,7 @@ void MQTTInit(std::string _mqttURI, std::string _clientid, std::string _user, st
.client_id = _clientid.c_str(),
.lwt_topic = _LWTContext.c_str(),
.lwt_msg = _zwmessage.c_str(),
+ .lwt_retain = 1,
.lwt_msg_len = _lzw,
.keepalive = _keepalive
};
@@ -88,5 +89,5 @@ void MQTTInit(std::string _mqttURI, std::string _clientid, std::string _user, st
esp_mqtt_client_register_event(client, esp_mmqtt_ID, mqtt_event_handler, client);
esp_mqtt_client_start(client);
- MQTTPublish(_LWTContext, "");
+ MQTTPublish(_LWTContext, "", 1);
}
diff --git a/code/components/jomjol_time_sntp/time_sntp.cpp b/code/components/jomjol_time_sntp/time_sntp.cpp
index 4be9b8f2..51f9175d 100644
--- a/code/components/jomjol_time_sntp/time_sntp.cpp
+++ b/code/components/jomjol_time_sntp/time_sntp.cpp
@@ -27,6 +27,17 @@ void time_sync_notification_cb(struct timeval *tv)
ESP_LOGI(TAG, "Notification of a time synchronization event");
}
+std::string ConvertTimeToString(time_t _time, const char * frm)
+{
+ struct tm timeinfo;
+ char strftime_buf[64];
+ localtime_r(&_time, &timeinfo);
+ strftime(strftime_buf, sizeof(strftime_buf), frm, &timeinfo);
+
+ std::string result(strftime_buf);
+ return result;
+}
+
std::string gettimestring(const char * frm)
{
time_t now;
diff --git a/code/components/jomjol_time_sntp/time_sntp.h b/code/components/jomjol_time_sntp/time_sntp.h
index 930bfa35..da37ae0b 100644
--- a/code/components/jomjol_time_sntp/time_sntp.h
+++ b/code/components/jomjol_time_sntp/time_sntp.h
@@ -15,5 +15,7 @@
void setup_time(void);
std::string gettimestring(const char * frm);
+std::string ConvertTimeToString(time_t _time, const char * frm);
+
void setTimeZone(std::string _tzstring);
void reset_servername(std::string _servername);
\ No newline at end of file
diff --git a/code/main/version.cpp b/code/main/version.cpp
index 4bc409dd..e2ed3c43 100644
--- a/code/main/version.cpp
+++ b/code/main/version.cpp
@@ -1,4 +1,4 @@
-const char* GIT_REV="58eb0b1";
+const char* GIT_REV="9b791bb";
const char* GIT_TAG="";
const char* GIT_BRANCH="rolling";
-const char* BUILD_TIME="2021-05-20 06:55";
\ No newline at end of file
+const char* BUILD_TIME="2021-05-20 21:43";
\ No newline at end of file
diff --git a/code/version.cpp b/code/version.cpp
index 4bc409dd..e2ed3c43 100644
--- a/code/version.cpp
+++ b/code/version.cpp
@@ -1,4 +1,4 @@
-const char* GIT_REV="58eb0b1";
+const char* GIT_REV="9b791bb";
const char* GIT_TAG="";
const char* GIT_BRANCH="rolling";
-const char* BUILD_TIME="2021-05-20 06:55";
\ No newline at end of file
+const char* BUILD_TIME="2021-05-20 21:43";
\ No newline at end of file
diff --git a/firmware/bootloader.bin b/firmware/bootloader.bin
index 7cfe644e5efb4a279934e1685f0a33a09862ef34..24cac60c6ddde355b9e88f7b6a1806d72ce4679d 100644
GIT binary patch
delta 61
zcmdmRlyL(P$q9298Csc`SQ(p6W@M4rY$qJ(ulQh1+>W{X!(MZ(x|*1gQC)YkbmQK>
RNbVa)15ftt-QdlU3INT38SDT6
delta 61
zcmdmRlyL(P$q929m|2;cSs9y8W@M4rY$qJ(ulVG5#|FzOQ?97V&5F&{*>Wd}rRjpP
RpQVsc#DxtX7VRu}0RXFd7_$HX
diff --git a/firmware/firmware.bin b/firmware/firmware.bin
index 6d95200f500d31ef77eff084ebe790843087e05b..91fdeca54bf65eb01ab6442d15538cdcc85fa38f 100644
GIT binary patch
delta 369789
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