Skip to content

Commit 2acdd1a

Browse files
Merge branch 'jmashon/working-branch' of https://github.com/FarmBot-Labs/sidecar-starter-pack into jmashon/working-branch
2 parents 2ff5b02 + 5d7caa2 commit 2acdd1a

File tree

4 files changed

+72
-36
lines changed

4 files changed

+72
-36
lines changed

api_functions.py

+3-15
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ def get_token(self, email, password, server='https://my.farm.bot'):
1414

1515
def get_info(self, endpoint, id=None):
1616
return self.api_connect.get(endpoint, id)
17-
# return self.api_connect.get(endpoint, id)...
1817

1918
def set_info(self, endpoint, field, value, id=None):
2019
new_value = {
@@ -23,7 +22,6 @@ def set_info(self, endpoint, field, value, id=None):
2322

2423
self.api_connect.patch(endpoint, id, new_value)
2524
return self.api_connect.get(endpoint, id)
26-
# return self.api_connect.get(endpoint, id)...
2725

2826
def env(self, id=None, field=None, new_val=None):
2927
if id is None:
@@ -50,37 +48,27 @@ def log(self, message, type=None, channel=None):
5048
def safe_z(self):
5149
json_data = self.get_info('fbos_config')
5250
return json_data['safe_height']
53-
# return json_data['safe_height']...
5451

5552
def garden_size(self):
5653
json_data = self.get_info('firmware_config')
5754

58-
# Get x axis length in steps
5955
x_steps = json_data['movement_axis_nr_steps_x']
60-
61-
# Get number of steps per millimeter on the x axis
6256
x_mm = json_data['movement_step_per_mm_x']
6357

64-
# Get y axis length in steps
6558
y_steps = json_data['movement_axis_nr_steps_y']
66-
67-
# Get number of steps per millimeter on the y axis
6859
y_mm = json_data['movement_step_per_mm_y']
6960

7061
length_x = x_steps / x_mm
7162
length_y = y_steps / y_mm
7263
area = length_x * length_y
7364

74-
# return print(f'Garden size:\n\tx length = {length_x:.2f}\n\ty length = {length_y:.2f}\n\tarea = {area:.2f}')
7565
return print(f'Garden size:\n'
76-
f'\tx length = {length_x:.4f}\n'
77-
f'\ty length = {length_y:.3f}\n'
78-
f'\tarea = {area:.5f}')
66+
f'\tx length = {length_x:.2f}\n'
67+
f'\ty length = {length_y:.2f}\n'
68+
f'\tarea = {area:.2f}')
7969

8070
def group(self, id):
8171
return self.get_info('point_groups', id)
82-
# return self.get_info('point_groups', id)...
8372

8473
def curve(self, id):
8574
return self.get_info('curves', id)
86-
# return self.get_info('curves', id)...

broker_connect.py

+41-14
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ def __init__(self):
99
self.token = None
1010
self.client = None
1111

12+
self.last_message = None
13+
1214
def connect(self):
1315
"""Establish persistent connection with message broker."""
1416
self.client = mqtt.Client()
@@ -41,30 +43,55 @@ def publish(self, message):
4143
payload=json.dumps(message)
4244
)
4345

44-
def on_connect(self, *_args):
45-
# Subscribe to all channels
46-
self.client.subscribe(f"bot/{self.token['token']['unencoded']['bot']}/#")
46+
# def on_connect(self, *_args):
47+
# # Subscribe to all channels
48+
# self.client.subscribe(f"bot/{self.token['token']['unencoded']['bot']}/#")
49+
50+
# def on_message(self, _client, _userdata, msg):
51+
# print('-' * 100)
52+
# # print channel
53+
# print(f'{msg.topic} ({datetime.now().strftime("%Y-%m-%d %H:%M:%S")})\n')
54+
# # print message
55+
# print(json.dumps(json.loads(msg.payload), indent=4))
56+
57+
# def listen(self):
58+
# if self.client is None:
59+
# self.connect()
60+
61+
# self.client.on_connect = self.on_connect
62+
# self.client.on_message = self.on_message
63+
64+
# # Start loop in a separate thread
65+
# self.client.loop_start()
66+
67+
# # Sleep for five seconds to listen for messages
68+
# time.sleep(5)
69+
70+
# # Stop loop and disconnect after five seconds
71+
# self.client.loop_stop()
72+
# self.client.disconnect()
73+
74+
def on_connect(self, _client, _userdata, _flags, _rc, channel):
75+
# Subscribe to specified channel
76+
self.client.subscribe(f"bot/{self.token['token']['unencoded']['bot']}/{channel}")
4777

4878
def on_message(self, _client, _userdata, msg):
49-
print('-' * 100)
50-
# print channel
51-
print(f'{msg.topic} ({datetime.now().strftime("%Y-%m-%d %H:%M:%S")})\n')
52-
# print message
53-
print(json.dumps(json.loads(msg.payload), indent=4))
79+
message = json.loads(msg.payload)
80+
81+
self.last_message = message # Update last_message
5482

55-
def listen(self):
83+
def listen(self, duration, channel='#'):
5684
if self.client is None:
5785
self.connect()
5886

59-
self.client.on_connect = self.on_connect
87+
# Wrap on_connect and on_message methods to pass channel argument
88+
self.client.on_connect = lambda client, userdata, flags, rc: self.on_connect(client, userdata, flags, rc, channel)
6089
self.client.on_message = self.on_message
6190

62-
# Start loop in a separate thread
6391
self.client.loop_start()
6492

65-
# Sleep for five seconds to listen for messages
66-
time.sleep(5)
93+
# Listen to messages for duration (seconds)
94+
time.sleep(duration)
6795

68-
# Stop loop and disconnect after five seconds
6996
self.client.loop_stop()
7097
self.client.disconnect()

broker_functions.py

+26-5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import json
2+
13
from broker_connect import BrokerConnect
24
from api_functions import ApiFunctions
35

@@ -26,16 +28,23 @@ def read_status(self):
2628
}
2729

2830
self.broker_connect.publish(status_message)
29-
# return ...
31+
self.broker_connect.listen(5, 'status')
32+
33+
status_tree = self.broker_connect.last_message
34+
35+
return status_tree
36+
37+
def read_sensor(self, id):
38+
peripheral_str = self.api.get_info('peripherals', id)
39+
mode = peripheral_str['mode']
3040

31-
def read_sensor(self, id, mode, label='---'):
3241
read_sensor_message = {
3342
**RPC_REQUEST,
3443
"body": [{
3544
"kind": "read_pin",
3645
"args": {
3746
"pin_mode": mode,
38-
"label": label,
47+
"label": '---',
3948
"pin_number": {
4049
"kind": "named_pin",
4150
"args": {
@@ -47,7 +56,6 @@ def read_sensor(self, id, mode, label='---'):
4756
}]
4857
}
4958

50-
self.broker_connect.publish(read_sensor_message)
5159
# return ...
5260

5361
def message(self, message, type=None, channel=None):
@@ -298,7 +306,20 @@ def detect_weeds(self):
298306
self.broker_connect.publish(detect_weeds_message)
299307
# return ...
300308

301-
# get_xyz() --> requires read_status() --> LUA
309+
def get_xyz(self):
310+
tree_data = self.read_status()
311+
312+
position = tree_data["position"]
313+
314+
x_val = position['x']
315+
y_val = position['y']
316+
z_val = position['z']
317+
318+
return print(f'Garden size:\n'
319+
f'\tx = {x_val:.2f}\n'
320+
f'\ty = {y_val:.2f}\n'
321+
f'\tz = {z_val:.2f}')
322+
302323
# check_position() --> requires read_status() --> LUA
303324

304325
def move(self, x, y, z):

main.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ def curve(self, id):
5050
def read_status(self):
5151
return self.broker.read_status()
5252

53-
def read_sensor(self, id, mode, label='---'):
54-
return self.broker.read_sensor(id, mode, label)
53+
def read_sensor(self, id):
54+
return self.broker.read_sensor(id)
5555

5656
def message(self, message, type=None, channel=None):
5757
return self.broker.message(message, type, channel)

0 commit comments

Comments
 (0)