ents 2.3.2__py3-none-any.whl → 2.3.4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
ents/cli.py CHANGED
@@ -464,9 +464,9 @@ def calibrate(args):
464
464
  V_STOP = 2.0
465
465
  V_STEP = 0.5
466
466
 
467
- I_START = -0.009
468
- I_STOP = 0.009
469
- I_STEP = 0.0045
467
+ I_START = -0.0009
468
+ I_STOP = 0.0009
469
+ I_STEP = 0.00045
470
470
 
471
471
  def record_calibrate(start, stop, step, name: str):
472
472
  """Record and calibrate
@@ -0,0 +1,119 @@
1
+ import requests
2
+ from datetime import datetime, timezone
3
+ import pandas as pd
4
+ from tabulate import tabulate
5
+
6
+
7
+ class DirtVizClient:
8
+ BASE_URL = "https://dirtviz.jlab.ucsc.edu/api/"
9
+
10
+ def __init__(self):
11
+ self.session = requests.Session()
12
+
13
+ def cell_from_name(self, name, start=None, end=None):
14
+ """Get power data for a specific cell"""
15
+
16
+ def get_power_data(self, cell_id, start=None, end=None):
17
+ """Get power data for a specific cell"""
18
+ endpoint = f"power/{cell_id}"
19
+ params = {}
20
+
21
+ if start and end:
22
+ params = {
23
+ "startTime": start.strftime("%a, %d %b %Y %H:%M:%S GMT"),
24
+ "endTime": end.strftime("%a, %d %b %Y %H:%M:%S GMT"),
25
+ }
26
+
27
+ response = self.session.get(f"{self.BASE_URL}{endpoint}", params=params)
28
+ response.raise_for_status()
29
+ return response.json()
30
+
31
+
32
+ def format_data_display(df, cell_id):
33
+ """Format the data output with timestamp as first column"""
34
+
35
+ # Ensure timestamp exists and is first column
36
+ if "timestamp" in df.columns:
37
+ cols = ["timestamp"] + [col for col in df.columns if col != "timestamp"]
38
+ df = df[cols]
39
+
40
+ # Format timestamp nicely
41
+ df["timestamp"] = pd.to_datetime(df["timestamp"])
42
+ df["timestamp"] = df["timestamp"].dt.strftime("%m-%d-%Y %H:%M:%S")
43
+
44
+ # Calculate statistics
45
+ stats = {
46
+ "Cell ID": cell_id,
47
+ "Time Range": (
48
+ f"{df['timestamp'].iloc[0]} to {df['timestamp'].iloc[-1]}"
49
+ if len(df) > 0
50
+ else "N/A"
51
+ ),
52
+ "Data Points": len(df),
53
+ "Avg Voltage (mV)": f"{df['v'].mean():.2f}" if "v" in df.columns else "N/A",
54
+ "Max Voltage (mV)": f"{df['v'].max():.2f}" if "v" in df.columns else "N/A",
55
+ "Avg Current (µA)": f"{df['i'].mean():.2f}" if "i" in df.columns else "N/A",
56
+ "Avg Power (µW)": f"{df['p'].mean():.2f}" if "p" in df.columns else "N/A",
57
+ }
58
+
59
+ column_rename = {
60
+ "timestamp": "Measurement Times",
61
+ "v": "Voltage (mV)",
62
+ "i": "Current (µA)",
63
+ "p": "Power (µW)",
64
+ }
65
+ # Apply renaming
66
+ df = df.rename(columns=column_rename)
67
+
68
+ # Display header
69
+ print("\n" + "=" * 60)
70
+ print(f"CELL {cell_id} POWER DATA SUMMARY".center(60))
71
+ for key, value in stats.items():
72
+ print(f"• {key:<20}: {value}") # Display the summary information
73
+ print("=" * 60 + "\n")
74
+
75
+ # Display sample data with timestamp first
76
+ if len(df) > 0:
77
+ print("DATA BY TIMESTAMPS:")
78
+ print(
79
+ tabulate(
80
+ df,
81
+ headers="keys",
82
+ tablefmt="grid", # Changed to grid for better column alignment
83
+ stralign="center", # Right-align numbers
84
+ showindex=False,
85
+ numalign="center",
86
+ )
87
+ )
88
+ else:
89
+ print("No data available to display")
90
+
91
+ print("\n" + "=" * 80)
92
+
93
+
94
+ if __name__ == "__main__":
95
+ client = DirtVizClient()
96
+
97
+ try:
98
+ cell_id = 893 # Figure out how to do by name on DirtViz
99
+ start = datetime(2025, 8, 12, tzinfo=timezone.utc)
100
+ end = datetime.now(timezone.utc)
101
+
102
+ print(f"\nFetching power data for cell {cell_id}...")
103
+ data = client.get_power_data(cell_id, start, end)
104
+
105
+ if data:
106
+ df = pd.DataFrame(data)
107
+ format_data_display(df, cell_id)
108
+
109
+ # Save to CSV with timestamp first
110
+ # df.to_csv(f"cell_{cell_id}_power_data.csv", index=False)
111
+ # print(f"Data saved to cell_{cell_id}_power_data.csv")
112
+ else:
113
+ print("No data received for the specified time range.")
114
+
115
+ except requests.exceptions.HTTPError as e:
116
+ print(f"\nHTTP Error: {e}")
117
+ print(f"Response: {e.response.text[:500]}...")
118
+ except Exception as e:
119
+ print(f"\n⚠️ Unexpected error: {str(e)}")
ents/proto/decode.py CHANGED
@@ -51,13 +51,15 @@ def decode_measurement(data: bytes, raw: bool = True) -> dict:
51
51
  # convert meta into dict
52
52
  if not meas.HasField("meta"):
53
53
  raise KeyError("Measurement missing metadata")
54
- meta_dict = MessageToDict(meas.meta)
54
+ meta_dict = MessageToDict(meas.meta, always_print_fields_with_no_presence=True)
55
55
 
56
56
  # decode measurement
57
57
  if not meas.HasField("measurement"):
58
58
  raise KeyError("Measurement missing data")
59
59
  measurement_type = meas.WhichOneof("measurement")
60
- measurement_dict = MessageToDict(getattr(meas, measurement_type))
60
+ measurement_dict = MessageToDict(
61
+ getattr(meas, measurement_type), always_print_fields_with_no_presence=True
62
+ )
61
63
 
62
64
  # store measurement type
63
65
  meta_dict["type"] = measurement_type
@@ -2,7 +2,7 @@
2
2
  # Generated by the protocol buffer compiler. DO NOT EDIT!
3
3
  # NO CHECKED-IN PROTOBUF GENCODE
4
4
  # source: soil_power_sensor.proto
5
- # Protobuf Python Version: 6.30.1
5
+ # Protobuf Python Version: 6.31.1
6
6
  """Generated protocol buffer code."""
7
7
  from google.protobuf import descriptor as _descriptor
8
8
  from google.protobuf import descriptor_pool as _descriptor_pool
@@ -12,7 +12,7 @@ from google.protobuf.internal import builder as _builder
12
12
  _runtime_version.ValidateProtobufRuntimeVersion(
13
13
  _runtime_version.Domain.PUBLIC,
14
14
  6,
15
- 30,
15
+ 31,
16
16
  1,
17
17
  '',
18
18
  'soil_power_sensor.proto'
@@ -24,17 +24,17 @@ _sym_db = _symbol_database.Default()
24
24
 
25
25
 
26
26
 
27
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17soil_power_sensor.proto\"E\n\x13MeasurementMetadata\x12\x0f\n\x07\x63\x65ll_id\x18\x01 \x01(\r\x12\x11\n\tlogger_id\x18\x02 \x01(\r\x12\n\n\x02ts\x18\x03 \x01(\r\"4\n\x10PowerMeasurement\x12\x0f\n\x07voltage\x18\x02 \x01(\x01\x12\x0f\n\x07\x63urrent\x18\x03 \x01(\x01\"P\n\x12Teros12Measurement\x12\x0f\n\x07vwc_raw\x18\x02 \x01(\x01\x12\x0f\n\x07vwc_adj\x18\x03 \x01(\x01\x12\x0c\n\x04temp\x18\x04 \x01(\x01\x12\n\n\x02\x65\x63\x18\x05 \x01(\r\"6\n\x12Teros21Measurement\x12\x12\n\nmatric_pot\x18\x01 \x01(\x01\x12\x0c\n\x04temp\x18\x02 \x01(\x01\"<\n\x13Phytos31Measurement\x12\x0f\n\x07voltage\x18\x01 \x01(\x01\x12\x14\n\x0cleaf_wetness\x18\x02 \x01(\x01\"L\n\x11\x42ME280Measurement\x12\x10\n\x08pressure\x18\x01 \x01(\r\x12\x13\n\x0btemperature\x18\x02 \x01(\x05\x12\x10\n\x08humidity\x18\x03 \x01(\r\"\x84\x02\n\x0bMeasurement\x12\"\n\x04meta\x18\x01 \x01(\x0b\x32\x14.MeasurementMetadata\x12\"\n\x05power\x18\x02 \x01(\x0b\x32\x11.PowerMeasurementH\x00\x12&\n\x07teros12\x18\x03 \x01(\x0b\x32\x13.Teros12MeasurementH\x00\x12(\n\x08phytos31\x18\x04 \x01(\x0b\x32\x14.Phytos31MeasurementH\x00\x12$\n\x06\x62me280\x18\x05 \x01(\x0b\x32\x12.BME280MeasurementH\x00\x12&\n\x07teros21\x18\x06 \x01(\x0b\x32\x13.Teros21MeasurementH\x00\x42\r\n\x0bmeasurement\"X\n\x08Response\x12$\n\x04resp\x18\x01 \x01(\x0e\x32\x16.Response.ResponseType\"&\n\x0cResponseType\x12\x0b\n\x07SUCCESS\x10\x00\x12\t\n\x05\x45RROR\x10\x01\"\x8b\x01\n\x0c\x45sp32Command\x12$\n\x0cpage_command\x18\x01 \x01(\x0b\x32\x0c.PageCommandH\x00\x12$\n\x0ctest_command\x18\x02 \x01(\x0b\x32\x0c.TestCommandH\x00\x12$\n\x0cwifi_command\x18\x03 \x01(\x0b\x32\x0c.WiFiCommandH\x00\x42\t\n\x07\x63ommand\"\xb6\x01\n\x0bPageCommand\x12.\n\x0c\x66ile_request\x18\x01 \x01(\x0e\x32\x18.PageCommand.RequestType\x12\x17\n\x0f\x66ile_descriptor\x18\x02 \x01(\r\x12\x12\n\nblock_size\x18\x03 \x01(\r\x12\x11\n\tnum_bytes\x18\x04 \x01(\r\"7\n\x0bRequestType\x12\x08\n\x04OPEN\x10\x00\x12\t\n\x05\x43LOSE\x10\x01\x12\x08\n\x04READ\x10\x02\x12\t\n\x05WRITE\x10\x03\"\x82\x01\n\x0bTestCommand\x12\'\n\x05state\x18\x01 \x01(\x0e\x32\x18.TestCommand.ChangeState\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x05\"<\n\x0b\x43hangeState\x12\x0b\n\x07RECEIVE\x10\x00\x12\x13\n\x0fRECEIVE_REQUEST\x10\x01\x12\x0b\n\x07REQUEST\x10\x02\"\xc1\x01\n\x0bWiFiCommand\x12\x1f\n\x04type\x18\x01 \x01(\x0e\x32\x11.WiFiCommand.Type\x12\x0c\n\x04ssid\x18\x02 \x01(\t\x12\x0e\n\x06passwd\x18\x03 \x01(\t\x12\x0b\n\x03url\x18\x04 \x01(\t\x12\x0c\n\x04port\x18\x08 \x01(\r\x12\n\n\x02rc\x18\x05 \x01(\r\x12\n\n\x02ts\x18\x06 \x01(\r\x12\x0c\n\x04resp\x18\x07 \x01(\x0c\"2\n\x04Type\x12\x0b\n\x07\x43ONNECT\x10\x00\x12\x08\n\x04POST\x10\x01\x12\t\n\x05\x43HECK\x10\x02\x12\x08\n\x04TIME\x10\x03\"\xdc\x02\n\x11UserConfiguration\x12\x11\n\tlogger_id\x18\x01 \x01(\r\x12\x0f\n\x07\x63\x65ll_id\x18\x02 \x01(\r\x12$\n\rUpload_method\x18\x03 \x01(\x0e\x32\r.Uploadmethod\x12\x17\n\x0fUpload_interval\x18\x04 \x01(\r\x12\'\n\x0f\x65nabled_sensors\x18\x05 \x03(\x0e\x32\x0e.EnabledSensor\x12\x15\n\rVoltage_Slope\x18\x06 \x01(\x01\x12\x16\n\x0eVoltage_Offset\x18\x07 \x01(\x01\x12\x15\n\rCurrent_Slope\x18\x08 \x01(\x01\x12\x16\n\x0e\x43urrent_Offset\x18\t \x01(\x01\x12\x11\n\tWiFi_SSID\x18\n \x01(\t\x12\x15\n\rWiFi_Password\x18\x0b \x01(\t\x12\x18\n\x10\x41PI_Endpoint_URL\x18\x0c \x01(\t\x12\x19\n\x11\x41PI_Endpoint_Port\x18\r \x01(\r*O\n\rEnabledSensor\x12\x0b\n\x07Voltage\x10\x00\x12\x0b\n\x07\x43urrent\x10\x01\x12\x0b\n\x07Teros12\x10\x02\x12\x0b\n\x07Teros21\x10\x03\x12\n\n\x06\x42ME280\x10\x04*\"\n\x0cUploadmethod\x12\x08\n\x04LoRa\x10\x00\x12\x08\n\x04WiFi\x10\x01\x62\x06proto3')
27
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17soil_power_sensor.proto\"E\n\x13MeasurementMetadata\x12\x0f\n\x07\x63\x65ll_id\x18\x01 \x01(\r\x12\x11\n\tlogger_id\x18\x02 \x01(\r\x12\n\n\x02ts\x18\x03 \x01(\r\"4\n\x10PowerMeasurement\x12\x0f\n\x07voltage\x18\x02 \x01(\x01\x12\x0f\n\x07\x63urrent\x18\x03 \x01(\x01\"P\n\x12Teros12Measurement\x12\x0f\n\x07vwc_raw\x18\x02 \x01(\x01\x12\x0f\n\x07vwc_adj\x18\x03 \x01(\x01\x12\x0c\n\x04temp\x18\x04 \x01(\x01\x12\n\n\x02\x65\x63\x18\x05 \x01(\r\"6\n\x12Teros21Measurement\x12\x12\n\nmatric_pot\x18\x01 \x01(\x01\x12\x0c\n\x04temp\x18\x02 \x01(\x01\"<\n\x13Phytos31Measurement\x12\x0f\n\x07voltage\x18\x01 \x01(\x01\x12\x14\n\x0cleaf_wetness\x18\x02 \x01(\x01\"L\n\x11\x42ME280Measurement\x12\x10\n\x08pressure\x18\x01 \x01(\r\x12\x13\n\x0btemperature\x18\x02 \x01(\x05\x12\x10\n\x08humidity\x18\x03 \x01(\r\"7\n\x12SEN0308Measurement\x12\x0f\n\x07voltage\x18\x01 \x01(\x01\x12\x10\n\x08humidity\x18\x02 \x01(\x01\"7\n\x12SEN0257Measurement\x12\x0f\n\x07voltage\x18\x01 \x01(\x01\x12\x10\n\x08pressure\x18\x02 \x01(\x01\"\"\n\x12YFS210CMeasurement\x12\x0c\n\x04\x66low\x18\x01 \x01(\x01\"\xfc\x02\n\x0bMeasurement\x12\"\n\x04meta\x18\x01 \x01(\x0b\x32\x14.MeasurementMetadata\x12\"\n\x05power\x18\x02 \x01(\x0b\x32\x11.PowerMeasurementH\x00\x12&\n\x07teros12\x18\x03 \x01(\x0b\x32\x13.Teros12MeasurementH\x00\x12(\n\x08phytos31\x18\x04 \x01(\x0b\x32\x14.Phytos31MeasurementH\x00\x12$\n\x06\x62me280\x18\x05 \x01(\x0b\x32\x12.BME280MeasurementH\x00\x12&\n\x07teros21\x18\x06 \x01(\x0b\x32\x13.Teros21MeasurementH\x00\x12&\n\x07sen0308\x18\x07 \x01(\x0b\x32\x13.SEN0308MeasurementH\x00\x12&\n\x07sen0257\x18\x08 \x01(\x0b\x32\x13.SEN0257MeasurementH\x00\x12&\n\x07yfs210c\x18\t \x01(\x0b\x32\x13.YFS210CMeasurementH\x00\x42\r\n\x0bmeasurement\"X\n\x08Response\x12$\n\x04resp\x18\x01 \x01(\x0e\x32\x16.Response.ResponseType\"&\n\x0cResponseType\x12\x0b\n\x07SUCCESS\x10\x00\x12\t\n\x05\x45RROR\x10\x01\"\xe9\x01\n\x0c\x45sp32Command\x12$\n\x0cpage_command\x18\x01 \x01(\x0b\x32\x0c.PageCommandH\x00\x12$\n\x0ctest_command\x18\x02 \x01(\x0b\x32\x0c.TestCommandH\x00\x12$\n\x0cwifi_command\x18\x03 \x01(\x0b\x32\x0c.WiFiCommandH\x00\x12*\n\x0fmicrosd_command\x18\x04 \x01(\x0b\x32\x0f.MicroSDCommandH\x00\x12\x30\n\x12irrigation_command\x18\x05 \x01(\x0b\x32\x12.IrrigationCommandH\x00\x42\t\n\x07\x63ommand\"\xb6\x01\n\x0bPageCommand\x12.\n\x0c\x66ile_request\x18\x01 \x01(\x0e\x32\x18.PageCommand.RequestType\x12\x17\n\x0f\x66ile_descriptor\x18\x02 \x01(\r\x12\x12\n\nblock_size\x18\x03 \x01(\r\x12\x11\n\tnum_bytes\x18\x04 \x01(\r\"7\n\x0bRequestType\x12\x08\n\x04OPEN\x10\x00\x12\t\n\x05\x43LOSE\x10\x01\x12\x08\n\x04READ\x10\x02\x12\t\n\x05WRITE\x10\x03\"\x82\x01\n\x0bTestCommand\x12\'\n\x05state\x18\x01 \x01(\x0e\x32\x18.TestCommand.ChangeState\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x05\"<\n\x0b\x43hangeState\x12\x0b\n\x07RECEIVE\x10\x00\x12\x13\n\x0fRECEIVE_REQUEST\x10\x01\x12\x0b\n\x07REQUEST\x10\x02\"\xfe\x01\n\x0bWiFiCommand\x12\x1f\n\x04type\x18\x01 \x01(\x0e\x32\x11.WiFiCommand.Type\x12\x0c\n\x04ssid\x18\x02 \x01(\t\x12\x0e\n\x06passwd\x18\x03 \x01(\t\x12\x0b\n\x03url\x18\x04 \x01(\t\x12\x0c\n\x04port\x18\x08 \x01(\r\x12\n\n\x02rc\x18\x05 \x01(\r\x12\n\n\x02ts\x18\x06 \x01(\r\x12\x0c\n\x04resp\x18\x07 \x01(\x0c\"o\n\x04Type\x12\x0b\n\x07\x43ONNECT\x10\x00\x12\x08\n\x04POST\x10\x01\x12\t\n\x05\x43HECK\x10\x02\x12\x08\n\x04TIME\x10\x03\x12\x0e\n\nDISCONNECT\x10\x04\x12\x0e\n\nCHECK_WIFI\x10\x05\x12\r\n\tCHECK_API\x10\x06\x12\x0c\n\x08NTP_SYNC\x10\x07\"\x86\x03\n\x0eMicroSDCommand\x12\"\n\x04type\x18\x01 \x01(\x0e\x32\x14.MicroSDCommand.Type\x12\x10\n\x08\x66ilename\x18\x02 \x01(\t\x12&\n\x02rc\x18\x03 \x01(\x0e\x32\x1a.MicroSDCommand.ReturnCode\x12\x1c\n\x04meas\x18\x04 \x01(\x0b\x32\x0c.MeasurementH\x00\x12 \n\x02uc\x18\x05 \x01(\x0b\x32\x12.UserConfigurationH\x00\" \n\x04Type\x12\x08\n\x04SAVE\x10\x00\x12\x0e\n\nUSERCONFIG\x10\x01\"\xab\x01\n\nReturnCode\x12\x0b\n\x07SUCCESS\x10\x00\x12\x11\n\rERROR_GENERAL\x10\x01\x12\x1e\n\x1a\x45RROR_MICROSD_NOT_INSERTED\x10\x02\x12#\n\x1f\x45RROR_FILE_SYSTEM_NOT_MOUNTABLE\x10\x03\x12\x1d\n\x19\x45RROR_PAYLOAD_NOT_DECODED\x10\x04\x12\x19\n\x15\x45RROR_FILE_NOT_OPENED\x10\x05\x42\x06\n\x04\x64\x61ta\"\x94\x01\n\x11IrrigationCommand\x12%\n\x04type\x18\x01 \x01(\x0e\x32\x17.IrrigationCommand.Type\x12\'\n\x05state\x18\x02 \x01(\x0e\x32\x18.IrrigationCommand.State\"\x11\n\x04Type\x12\t\n\x05\x43HECK\x10\x00\"\x1c\n\x05State\x12\x08\n\x04OPEN\x10\x00\x12\t\n\x05\x43LOSE\x10\x01\"\xdc\x02\n\x11UserConfiguration\x12\x11\n\tlogger_id\x18\x01 \x01(\r\x12\x0f\n\x07\x63\x65ll_id\x18\x02 \x01(\r\x12$\n\rUpload_method\x18\x03 \x01(\x0e\x32\r.Uploadmethod\x12\x17\n\x0fUpload_interval\x18\x04 \x01(\r\x12\'\n\x0f\x65nabled_sensors\x18\x05 \x03(\x0e\x32\x0e.EnabledSensor\x12\x15\n\rVoltage_Slope\x18\x06 \x01(\x01\x12\x16\n\x0eVoltage_Offset\x18\x07 \x01(\x01\x12\x15\n\rCurrent_Slope\x18\x08 \x01(\x01\x12\x16\n\x0e\x43urrent_Offset\x18\t \x01(\x01\x12\x11\n\tWiFi_SSID\x18\n \x01(\t\x12\x15\n\rWiFi_Password\x18\x0b \x01(\t\x12\x18\n\x10\x41PI_Endpoint_URL\x18\x0c \x01(\t\x12\x19\n\x11\x41PI_Endpoint_Port\x18\r \x01(\r*O\n\rEnabledSensor\x12\x0b\n\x07Voltage\x10\x00\x12\x0b\n\x07\x43urrent\x10\x01\x12\x0b\n\x07Teros12\x10\x02\x12\x0b\n\x07Teros21\x10\x03\x12\n\n\x06\x42ME280\x10\x04*\"\n\x0cUploadmethod\x12\x08\n\x04LoRa\x10\x00\x12\x08\n\x04WiFi\x10\x01\x62\x06proto3')
28
28
 
29
29
  _globals = globals()
30
30
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
31
31
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'soil_power_sensor_pb2', _globals)
32
32
  if not _descriptor._USE_C_DESCRIPTORS:
33
33
  DESCRIPTOR._loaded_options = None
34
- _globals['_ENABLEDSENSOR']._serialized_start=1790
35
- _globals['_ENABLEDSENSOR']._serialized_end=1869
36
- _globals['_UPLOADMETHOD']._serialized_start=1871
37
- _globals['_UPLOADMETHOD']._serialized_end=1905
34
+ _globals['_ENABLEDSENSOR']._serialized_start=2759
35
+ _globals['_ENABLEDSENSOR']._serialized_end=2838
36
+ _globals['_UPLOADMETHOD']._serialized_start=2840
37
+ _globals['_UPLOADMETHOD']._serialized_end=2874
38
38
  _globals['_MEASUREMENTMETADATA']._serialized_start=27
39
39
  _globals['_MEASUREMENTMETADATA']._serialized_end=96
40
40
  _globals['_POWERMEASUREMENT']._serialized_start=98
@@ -47,26 +47,44 @@ if not _descriptor._USE_C_DESCRIPTORS:
47
47
  _globals['_PHYTOS31MEASUREMENT']._serialized_end=350
48
48
  _globals['_BME280MEASUREMENT']._serialized_start=352
49
49
  _globals['_BME280MEASUREMENT']._serialized_end=428
50
- _globals['_MEASUREMENT']._serialized_start=431
51
- _globals['_MEASUREMENT']._serialized_end=691
52
- _globals['_RESPONSE']._serialized_start=693
53
- _globals['_RESPONSE']._serialized_end=781
54
- _globals['_RESPONSE_RESPONSETYPE']._serialized_start=743
55
- _globals['_RESPONSE_RESPONSETYPE']._serialized_end=781
56
- _globals['_ESP32COMMAND']._serialized_start=784
57
- _globals['_ESP32COMMAND']._serialized_end=923
58
- _globals['_PAGECOMMAND']._serialized_start=926
59
- _globals['_PAGECOMMAND']._serialized_end=1108
60
- _globals['_PAGECOMMAND_REQUESTTYPE']._serialized_start=1053
61
- _globals['_PAGECOMMAND_REQUESTTYPE']._serialized_end=1108
62
- _globals['_TESTCOMMAND']._serialized_start=1111
63
- _globals['_TESTCOMMAND']._serialized_end=1241
64
- _globals['_TESTCOMMAND_CHANGESTATE']._serialized_start=1181
65
- _globals['_TESTCOMMAND_CHANGESTATE']._serialized_end=1241
66
- _globals['_WIFICOMMAND']._serialized_start=1244
67
- _globals['_WIFICOMMAND']._serialized_end=1437
68
- _globals['_WIFICOMMAND_TYPE']._serialized_start=1387
69
- _globals['_WIFICOMMAND_TYPE']._serialized_end=1437
70
- _globals['_USERCONFIGURATION']._serialized_start=1440
71
- _globals['_USERCONFIGURATION']._serialized_end=1788
50
+ _globals['_SEN0308MEASUREMENT']._serialized_start=430
51
+ _globals['_SEN0308MEASUREMENT']._serialized_end=485
52
+ _globals['_SEN0257MEASUREMENT']._serialized_start=487
53
+ _globals['_SEN0257MEASUREMENT']._serialized_end=542
54
+ _globals['_YFS210CMEASUREMENT']._serialized_start=544
55
+ _globals['_YFS210CMEASUREMENT']._serialized_end=578
56
+ _globals['_MEASUREMENT']._serialized_start=581
57
+ _globals['_MEASUREMENT']._serialized_end=961
58
+ _globals['_RESPONSE']._serialized_start=963
59
+ _globals['_RESPONSE']._serialized_end=1051
60
+ _globals['_RESPONSE_RESPONSETYPE']._serialized_start=1013
61
+ _globals['_RESPONSE_RESPONSETYPE']._serialized_end=1051
62
+ _globals['_ESP32COMMAND']._serialized_start=1054
63
+ _globals['_ESP32COMMAND']._serialized_end=1287
64
+ _globals['_PAGECOMMAND']._serialized_start=1290
65
+ _globals['_PAGECOMMAND']._serialized_end=1472
66
+ _globals['_PAGECOMMAND_REQUESTTYPE']._serialized_start=1417
67
+ _globals['_PAGECOMMAND_REQUESTTYPE']._serialized_end=1472
68
+ _globals['_TESTCOMMAND']._serialized_start=1475
69
+ _globals['_TESTCOMMAND']._serialized_end=1605
70
+ _globals['_TESTCOMMAND_CHANGESTATE']._serialized_start=1545
71
+ _globals['_TESTCOMMAND_CHANGESTATE']._serialized_end=1605
72
+ _globals['_WIFICOMMAND']._serialized_start=1608
73
+ _globals['_WIFICOMMAND']._serialized_end=1862
74
+ _globals['_WIFICOMMAND_TYPE']._serialized_start=1751
75
+ _globals['_WIFICOMMAND_TYPE']._serialized_end=1862
76
+ _globals['_MICROSDCOMMAND']._serialized_start=1865
77
+ _globals['_MICROSDCOMMAND']._serialized_end=2255
78
+ _globals['_MICROSDCOMMAND_TYPE']._serialized_start=2041
79
+ _globals['_MICROSDCOMMAND_TYPE']._serialized_end=2073
80
+ _globals['_MICROSDCOMMAND_RETURNCODE']._serialized_start=2076
81
+ _globals['_MICROSDCOMMAND_RETURNCODE']._serialized_end=2247
82
+ _globals['_IRRIGATIONCOMMAND']._serialized_start=2258
83
+ _globals['_IRRIGATIONCOMMAND']._serialized_end=2406
84
+ _globals['_IRRIGATIONCOMMAND_TYPE']._serialized_start=2359
85
+ _globals['_IRRIGATIONCOMMAND_TYPE']._serialized_end=2376
86
+ _globals['_IRRIGATIONCOMMAND_STATE']._serialized_start=2378
87
+ _globals['_IRRIGATIONCOMMAND_STATE']._serialized_end=2406
88
+ _globals['_USERCONFIGURATION']._serialized_start=2409
89
+ _globals['_USERCONFIGURATION']._serialized_end=2757
72
90
  # @@protoc_insertion_point(module_scope)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ents
3
- Version: 2.3.2
3
+ Version: 2.3.4
4
4
  Summary: Python package for Environmental NeTworked Sensor (ENTS)
5
5
  Project-URL: Homepage, https://github.com/jlab-sensing/soil-power-sensor-firmware
6
6
  Project-URL: Issues, https://github.com/jlab-sensing/soil-power-sensor-firmware/issues
@@ -12,7 +12,7 @@ Classifier: Programming Language :: Python :: 3
12
12
  Requires-Python: >=3.11
13
13
  Requires-Dist: matplotlib
14
14
  Requires-Dist: pandas
15
- Requires-Dist: protobuf>5.0.0
15
+ Requires-Dist: protobuf==6.31.1
16
16
  Requires-Dist: pyserial
17
17
  Requires-Dist: requests
18
18
  Requires-Dist: scikit-learn
@@ -1,5 +1,5 @@
1
1
  ents/__init__.py,sha256=KyqH3dz_BdFHWxD9n4DFItgsrxO7rDtt2IObWkdLsns,582
2
- ents/cli.py,sha256=QhH7ZQtpEEfM9pyF3SrpfHVPw5IMbLZSIe6ng9C4y_c,16570
2
+ ents/cli.py,sha256=O071Ot2u7yeMFZyoOY--hp4UepXOHEX2nNiiQ5TxpI4,16573
3
3
  ents/calibrate/PingSMU.py,sha256=1iXozKaPE0ucgB3qsTI5mVk__n6pqC8Z2nV_GRfU2gA,1253
4
4
  ents/calibrate/PingSPS.py,sha256=pNQN1ngWQ2Z7Q1DoWCIe4DN02hZfNOrKpLH7I0bAd8U,1876
5
5
  ents/calibrate/README.md,sha256=ctdpfS5tN-PnDBn8sCTAn4gi0E-ZLUDXYnLZuqleDmM,109
@@ -7,20 +7,20 @@ ents/calibrate/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
7
  ents/calibrate/linear_regression.py,sha256=U-m55mRn-kMj9m-lP-YsbVwIU5ZuA8PiHfNiibefokY,1717
8
8
  ents/calibrate/plots.py,sha256=RmuvyL_oTxA4oMNqDR5k82XelvF6whRfYKXNmFbeYeo,2411
9
9
  ents/calibrate/recorder.py,sha256=fce5cW2DiCSOMQ-CSRL7raghbR2Yeg8Nx9obyY-0yOg,18416
10
- ents/calibrate/requirements.txt,sha256=zgyk2vKGVKLGatxI_q9Eik4JIOdtTAc6Gkuo-E7zbRI,87
11
10
  ents/config/README.md,sha256=SRtr5YuM64MSZQdy60F8Ib_AI2MR-MbbAdjS3jcjVD4,4447
12
11
  ents/config/__init__.py,sha256=3eyHUKg-ZPx82h2CGiNyzaaI7Y7koEOUX9pzrlnVcJw,51
13
12
  ents/config/adv_trace.py,sha256=hEDBNbVslJ2lJ-8tfJhPXxQMZN9Nylqv8RK42waRhsM,1290
14
13
  ents/config/user_config.py,sha256=SAudV12wyE-5Z0weZJQzBELRXR3-oevIgbrimUF2TmI,39198
14
+ ents/demo/demoPullRequests.py,sha256=YSTVa59puMtER8sjOppiMshUCDjdsIikXLNOM0U6zmU,3864
15
15
  ents/proto/__init__.py,sha256=5THafGlxirjEUATIXB2EVpdOY5APEjztzOAHlRGNG2c,720
16
- ents/proto/decode.py,sha256=rVnfCBYK637EXYj9FJBOGUSDRQ0xVrqAo7ZHyNRcCCk,2864
16
+ ents/proto/decode.py,sha256=_dn9Agv41YgUtMVHZ7l5-Y13ci3hnjyXrRPGKDIHzvo,2964
17
17
  ents/proto/encode.py,sha256=kPAD5-bL6zNEjh6z1n1FusdM9z5UretypxHHAiuGGA4,7753
18
18
  ents/proto/esp32.py,sha256=4QOHZNH1SqkJg4TLvJgrAbhdJg88ZNtqoMNLBcWUX2U,4657
19
- ents/proto/soil_power_sensor_pb2.py,sha256=63Wthg0WROwYX6gkTYsHmY2KZYkPmv_Q6Jjkjcb4ZB4,6729
19
+ ents/proto/soil_power_sensor_pb2.py,sha256=sNf-97udroXqmimooH0x1IWOTSm-4IoRsFzbyb9aLRg,9491
20
20
  ents/simulator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
21
  ents/simulator/node.py,sha256=vDdt_Q2BiEo1Z-aMZnm9_Y-aAtPU_lhcWW-xSDYR54c,4444
22
- ents-2.3.2.dist-info/METADATA,sha256=kYwyrbAbaLcxzxOGaP7_USrNQsWDsaJnmdg3EnzeRbA,5256
23
- ents-2.3.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
24
- ents-2.3.2.dist-info/entry_points.txt,sha256=1U6ViZDTy4vv1jFp5RisBPC0NFqmtV3f18eUnWKX0Nk,95
25
- ents-2.3.2.dist-info/licenses/LICENSE,sha256=2WLObzfS99jXXcPS5INqnmDVZ1nlO8Rj8mzQn2xkn14,1086
26
- ents-2.3.2.dist-info/RECORD,,
22
+ ents-2.3.4.dist-info/METADATA,sha256=FMxd6PnezpUeq3ZBVty08iRL-CzgVo5YTugULlzxHZ4,5258
23
+ ents-2.3.4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
24
+ ents-2.3.4.dist-info/entry_points.txt,sha256=1U6ViZDTy4vv1jFp5RisBPC0NFqmtV3f18eUnWKX0Nk,95
25
+ ents-2.3.4.dist-info/licenses/LICENSE,sha256=2WLObzfS99jXXcPS5INqnmDVZ1nlO8Rj8mzQn2xkn14,1086
26
+ ents-2.3.4.dist-info/RECORD,,
@@ -1,9 +0,0 @@
1
- matplotlib
2
- pandas
3
- pyserial
4
- tqdm
5
- scikit-learn
6
- rocketlogger
7
- pyyaml
8
- ents
9
- protobuf==4.25.5
File without changes