Jump to content

get_value() doesn't return relay state


Oberon

Recommended Posts

Hi there, complete electronics and coding newbie here. Thanks for your patience.
 

I'm using an ESP32 brick controlling a Dual Relay bricklet. I can connect, auth and send set_monoflop and set_value commands and get the relay to trigger with my python script. But when I send

idr.get_value()

or whatever variant of that (put the function in a variable and print it, etc..), I get this :

Traceback (most recent call last):
  File "C:\Users\U\PycharmProjects\Tinkerforge_test\Pump_control.py", line 70, in <module>
    idr.get_value()
  File "C:\Users\U\PycharmProjects\Tinkerforge_test\venv\lib\site-packages\tinkerforge\bricklet_industrial_dual_relay.py", line 123, in get_value
    self.check_validity()
  File "C:\Users\U\PycharmProjects\Tinkerforge_test\venv\lib\site-packages\tinkerforge\ip_connection.py", line 506, in check_validity
    device_identifier = self.ipcon.send_request(self, 255, (), '', 33, '8s 8s c 3B 3B H')[5] # <device>.get_identity
  File "C:\Users\U\PycharmProjects\Tinkerforge_test\venv\lib\site-packages\tinkerforge\ip_connection.py", line 1314, in send_request
    raise Error(Error.TIMEOUT, msg, suppress_context=True)
tinkerforge.ip_connection.Error: Did not receive response for function 255 in time (-1)


Any pointers on what I'm doing wrong to get the relay state ?

Thanks in advance

Edited by Oberon
Link to comment
Share on other sites

The Bricklet doesn't respond to a request in time. The first thing to check in that case is that you use the correct UID to address the Bricklet. But because other functions work, I think you are using the correct UID already.

Do you have a load connected to the relay? If yes, does the problem go away when you disconnect the load from the relay?

Can you show your complete Pump_control.py?

Link to comment
Share on other sites

Thanks for the answer, I believe the UID is the correct one as it's the one also visible in bricky.

EDIT forgot to add I have no load connected to the relay, didn't get to that point yet.

Attached you'll find the .py file, I didn't edit anything except the auth secret.

Basically only the lines 57-70 are from me, the rest has been put together from the enumeration/auth/IDR example file.

When commenting out lines 57-58 the rest works (tested with lower time values)

 

Pump_control_tinkerunity.py

Edited by Oberon
Link to comment
Share on other sites

I've just tested the temp/humidity sensor, including having only that bricklet connected. Modified the script based on the simple code example and it gives the same error at the humidity = h.get_humidity() line also mentioning a timeout on function 255. That sensor and same ESP board works using brickv, same for the relays and other bricklets I have.

Link to comment
Share on other sites

The way you structured the code you call idr.get_value() a little bit to early. You call idr.get_value() directly after the ipcon.connect() call. At that moment the authentication probably has not completed yet and the ESP32 Brick rejects all requests.

I modifed your example to wait for a few milliseconds before the idr.get_value() call for the authentication to complete. Please test the modification, it should fix the problem.

Pump_control_tinkerunity_v2.py

  • Thanks 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...