temp. sensing at philipps desk, send to python and to influxdb
This commit is contained in:
parent
7275a716bc
commit
513d4a0188
@ -19,6 +19,7 @@ void resetSensor() {
|
|||||||
|
|
||||||
// Configure MAC address and IP:
|
// Configure MAC address and IP:
|
||||||
byte mac[] = {0x61, 0x2C, 0xF2, 0x09, 0x73, 0xBE};
|
byte mac[] = {0x61, 0x2C, 0xF2, 0x09, 0x73, 0xBE};
|
||||||
|
char T[20];
|
||||||
|
|
||||||
// the real one IPAddress ip(10, 11, 1, 22); // Static IP
|
// the real one IPAddress ip(10, 11, 1, 22); // Static IP
|
||||||
|
|
||||||
@ -27,7 +28,7 @@ byte mac[] = {0x61, 0x2C, 0xF2, 0x09, 0x73, 0xBE};
|
|||||||
#define W5500_CS_PIN 10 // 8 in E LEGO
|
#define W5500_CS_PIN 10 // 8 in E LEGO
|
||||||
#define W5500_RST_PIN 9 //10 in E LEGO
|
#define W5500_RST_PIN 9 //10 in E LEGO
|
||||||
IPAddress serverIP(10, 44, 1, 238); // Computer
|
IPAddress serverIP(10, 44, 1, 238); // Computer
|
||||||
IPAddress W5500_ip(10, 11, 1, 22); // Change the last digit
|
IPAddress W5500_ip(10, 44, 1, 22); // Change the last digit
|
||||||
|
|
||||||
// Don't change
|
// Don't change
|
||||||
const int port = 5005;
|
const int port = 5005;
|
||||||
@ -76,24 +77,37 @@ void setup() {
|
|||||||
Serial.println(Ethernet.localIP());
|
Serial.println(Ethernet.localIP());
|
||||||
|
|
||||||
// Send a message through socket
|
// Send a message through socket
|
||||||
Serial.print("Sending test message");
|
Serial.println("Sending test message");
|
||||||
delay (1000);
|
delay (1000);
|
||||||
if (client.connect (serverIP, port)) {
|
if (client.connect (serverIP, port)) {
|
||||||
client.write("test");
|
client.write("test");
|
||||||
client.stop();
|
client.stop();
|
||||||
Serial.print("Test Message sent");
|
Serial.println("Test Message sent");
|
||||||
} else {
|
} else {
|
||||||
Serial.print("Connection failed");}
|
Serial.println("Connection failed");}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
// put your main code here, to run repeatedly:
|
// put your main code here, to run repeatedly:
|
||||||
|
// Measure temp. and humidity every 5 seconds
|
||||||
|
delay (30000);
|
||||||
|
float t = sht31.readTemperature();
|
||||||
|
float h = sht31.readHumidity();
|
||||||
|
// Send to Eilon's computer
|
||||||
|
|
||||||
|
|
||||||
|
if (!isnan(h)) {
|
||||||
|
Serial.print("Humidity = "); Serial.println(h); }
|
||||||
|
|
||||||
|
if (client.connect (serverIP, port)) {
|
||||||
|
if (!isnan(t)) {
|
||||||
|
dtostrf(t, 6, 2, T);
|
||||||
|
client.write(T);
|
||||||
|
client.stop(); }
|
||||||
|
} else {
|
||||||
|
Serial.println("Connection failed");}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
28
In work/Temp. sensors/basic_read_Ard_mic_SHT31_W5500.py
Normal file
28
In work/Temp. sensors/basic_read_Ard_mic_SHT31_W5500.py
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
import socket
|
||||||
|
import time
|
||||||
|
from datetime import datetime
|
||||||
|
import pandas as pd
|
||||||
|
import os
|
||||||
|
|
||||||
|
ip = "0.0.0.0" # Listen to all channels
|
||||||
|
port = 5005 # Should match .ino
|
||||||
|
|
||||||
|
time.sleep (5)
|
||||||
|
|
||||||
|
Data_to_influx = pd.DataFrame ({"Date": [], "Time": [], "Temperature": []})
|
||||||
|
|
||||||
|
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
|
||||||
|
s.bind((ip, port))
|
||||||
|
s.listen()
|
||||||
|
print(f"Listening")
|
||||||
|
while True:
|
||||||
|
conn, addr = s.accept()
|
||||||
|
with conn:
|
||||||
|
data = conn.recv(1024)
|
||||||
|
if data:
|
||||||
|
print(f"Received from {addr} at {datetime.now()}: {data.decode().strip()}")
|
||||||
|
row = pd.DataFrame ({"Date": [str (datetime.now()) [:10]], "Time": [str (datetime.now()) [11:19]], "Temperature": [data.decode().strip()]})
|
||||||
|
Data_to_influx = pd.concat ([Data_to_influx, row], ignore_index= 1)
|
||||||
|
csv_file_name = "C:/Users/Iluz1/Desktop/Data/a.csv"
|
||||||
|
Data_to_influx.to_csv (csv_file_name)
|
||||||
|
|
109
In work/Temp. sensors/phillips_desk_data_to_influx.py
Normal file
109
In work/Temp. sensors/phillips_desk_data_to_influx.py
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
#region import libraries
|
||||||
|
|
||||||
|
import socket
|
||||||
|
import time
|
||||||
|
from datetime import datetime
|
||||||
|
import pandas as pd
|
||||||
|
import os
|
||||||
|
import logging
|
||||||
|
import influxdb_client
|
||||||
|
from influxdb_client.client.influxdb_client import InfluxDBClient
|
||||||
|
from influxdb_client.client.write_api import SYNCHRONOUS, WriteApi
|
||||||
|
from pyModbusTCP.client import ModbusClient
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
# Update interval in seconds
|
||||||
|
update_interval = 30
|
||||||
|
|
||||||
|
# Tell the computer from where to read data
|
||||||
|
ip = "0.0.0.0"
|
||||||
|
port = 5005
|
||||||
|
|
||||||
|
# InfluxDB settings
|
||||||
|
BUCKET = "Data_FerDy"
|
||||||
|
ORG = "QF"
|
||||||
|
TOKEN = "hm_S3eCnpU72215MwHyDYljHpvw7bxtxtRhEJmUkeBTa1wEJsGv02kZF1jwaMJ2Jeo-gY-57kOQEDTP8bOc0Fg=="
|
||||||
|
URL = "http://smartlab.physi.uni-heidelberg.de:8086/"
|
||||||
|
|
||||||
|
|
||||||
|
#region define functions
|
||||||
|
def init_influxdb(url: str, token: str, org: str):
|
||||||
|
"""initiate influxDB client"""
|
||||||
|
client = influxdb_client.InfluxDBClient(
|
||||||
|
url=url,
|
||||||
|
token=token,
|
||||||
|
org=org)
|
||||||
|
write_api = client.write_api(write_options=SYNCHRONOUS)
|
||||||
|
print('InfluxDB client and influx write_API started.')
|
||||||
|
return client, write_api
|
||||||
|
|
||||||
|
def write_data_to_influxDB(influx_client: InfluxDBClient, write_api: WriteApi, record):
|
||||||
|
"""check if influxDB is alive and write data to influxDB, else start influxDB client"""
|
||||||
|
try:
|
||||||
|
# check if influxDB is ready
|
||||||
|
influx_client.ping()
|
||||||
|
# write data points
|
||||||
|
write_api.write(bucket=BUCKET, org=ORG, record=record)
|
||||||
|
print('Data written to influxDB.')
|
||||||
|
except:
|
||||||
|
print('InfluxDB ping not successful. InfluxDB cannot be reached.')
|
||||||
|
try:
|
||||||
|
# try to open the influx DB client and write API
|
||||||
|
influx_client, write_api = init_influxdb(URL, TOKEN, ORG)
|
||||||
|
except Exception as e:
|
||||||
|
print('Error with InfluxDB: {}'.format(e))
|
||||||
|
print('Data not written.')
|
||||||
|
time.sleep(10)
|
||||||
|
return influx_client, write_api
|
||||||
|
|
||||||
|
def setup_logger(logName):
|
||||||
|
|
||||||
|
# creat logger
|
||||||
|
log_dir = "logs"
|
||||||
|
os.makedirs(log_dir, exist_ok=True)
|
||||||
|
|
||||||
|
# setup logging
|
||||||
|
log_file = os.path.join(log_dir, f"%s - {datetime.now():%Y-%m-%d}.log" %logName)
|
||||||
|
logging.basicConfig(
|
||||||
|
filename=log_file,
|
||||||
|
level=logging.INFO,
|
||||||
|
format="%(asctime)s - %(levelname)s - %(message)s",
|
||||||
|
encoding="utf-8"
|
||||||
|
)
|
||||||
|
|
||||||
|
# sync output to termianl
|
||||||
|
console = logging.StreamHandler()
|
||||||
|
console.setLevel(logging.INFO)
|
||||||
|
logging.getLogger().addHandler(console)
|
||||||
|
|
||||||
|
# example
|
||||||
|
logging.info("Logger set up complete")
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
def read_temp (ip, port, influx_client, write_api):
|
||||||
|
with socket.socket (socket.AF_INET, socket.SOCK_STREAM) as s:
|
||||||
|
s.bind ((ip, port))
|
||||||
|
s.listen()
|
||||||
|
# print ("Listening")
|
||||||
|
conn, addr = s.accept()
|
||||||
|
with conn:
|
||||||
|
data = conn.recv (1024)
|
||||||
|
return data.decode().strip()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
influx_client, write_api = init_influxdb(URL, TOKEN, ORG)
|
||||||
|
setup_logger ("PhillipsDeskTemp.")
|
||||||
|
logging.info ("Reading the temperature on Phillip's desk")
|
||||||
|
|
||||||
|
while 1:
|
||||||
|
T = read_temp (ip, port, influx_client, write_api)
|
||||||
|
if (T is not None and T != "test"):
|
||||||
|
T = float (T)
|
||||||
|
p1 = influxdb_client.Point ("Office").tag("Table", "Phillip's").field ("temp_on_desk", T)
|
||||||
|
influx_client, write_api = write_data_to_influxDB (influx_client, write_api, p1)
|
||||||
|
time.sleep (update_interval)
|
@ -1,5 +1,6 @@
|
|||||||
import socket
|
import socket
|
||||||
import time
|
import time
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
ip = "0.0.0.0" # Listen to all channels
|
ip = "0.0.0.0" # Listen to all channels
|
||||||
port = 5005 # Should match .ino
|
port = 5005 # Should match .ino
|
||||||
@ -17,5 +18,5 @@ with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
|
|||||||
with conn:
|
with conn:
|
||||||
data = conn.recv(1024)
|
data = conn.recv(1024)
|
||||||
if data:
|
if data:
|
||||||
print(f"Received from {addr}: {data.decode().strip()}")
|
print(f"Received from {addr} at {datetime.now()}: {data.decode().strip()}")
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user