Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow for local RS485 adapters to be used #84

Open
colinmacgiolla opened this issue Feb 26, 2024 · 3 comments
Open

Allow for local RS485 adapters to be used #84

colinmacgiolla opened this issue Feb 26, 2024 · 3 comments

Comments

@colinmacgiolla
Copy link

Hi,

I'm trying to get it working with a local (rather then via remote IP socket) adapter like this one:

[Mon Feb 26 19:29:29 2024] usb 1-1.3: new full-speed USB device number 6 using dwc_otg
[Mon Feb 26 19:29:29 2024] usb 1-1.3: New USB device found, idVendor=1a86, idProduct=55d3, bcdDevice= 4.45
[Mon Feb 26 19:29:29 2024] usb 1-1.3: New USB device strings: Mfr=0, Product=2, SerialNumber=3
[Mon Feb 26 19:29:29 2024] usb 1-1.3: Product: USB Single Serial
[Mon Feb 26 19:29:29 2024] usb 1-1.3: SerialNumber: AAAA
[Mon Feb 26 19:29:29 2024] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device
[Mon Feb 26 19:29:29 2024] usbcore: registered new interface driver cdc_acm
[Mon Feb 26 19:29:29 2024] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters

But it looks like its hardcoded to expect a IP:port socket:
https://github.com/andylockran/heatmiserV3/blob/5778f5b876d60424bf7d789c3e308e32eee83c6b/heatmiserv3/connection.py#L18C9-L18C84

Testing with the serial library, it seems that the underlying library (and call) has no problem with a local device, but at the moment there is no way to pass that through.

>>> port = serial.serial_for_url("/dev/ttyACM0")
>>> port.open()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/srv/homeassistant/lib/python3.11/site-packages/serial/serialposix.py", line 318, in open
    raise SerialException("Port is already open.")

Happy to help out or test, but I don't know much about the HA side of the plugin...

Thanks

@andyloughran
Copy link
Contributor

Heya,
I'm going through a refactor so that it should be possible to send a different connection into the tool.

This should allow you to put your device in; lemme find some time to write you instructions to test - if so that might unblock you.

@6by9
Copy link

6by9 commented Feb 26, 2024

I'm not actively using it at present, and my tree is a tad old (1c262a3), but I have a Pi connected to a USB RS485 adapter talking to my 10 PRT-N (or similar) stats.
Diffs:

-- a/examples/set_temperature_tp_20.py
+++ b/examples/set_temperature_tp_20.py
@@ -15,20 +15,33 @@ PORT = "102"
 logging.basicConfig(level=logging.INFO)
 
 # Create a HeatmiserUH! connection
-HeatmiserUH1 = connection.HeatmiserUH1(IP_ADDRESS, PORT)
+HeatmiserUH1 = connection.HeatmiserUH1(dev="/dev/ttyUSB0")
diff --git a/heatmiserV3/connection.py b/heatmiserV3/connection.py
index 6e281a8..70c81dc 100644
--- a/heatmiserV3/connection.py
+++ b/heatmiserV3/connection.py
@@ -13,9 +13,15 @@ class HeatmiserUH1(object):
     connection, and can have multiple thermostats
     """
 
-    def __init__(self, ipaddress, port):
+    def __init__(self, ipaddress = None, port = 0, dev = None):
         self.thermostats = {}
-        self._serport = serial.serial_for_url("socket://" + ipaddress + ":" + port)
+        if (dev != None) :
+            self._serport = serial.serial_for_url(
+                    dev
+            )
+        elif (ipaddress != None) :
+            self._serport = serial.serial_for_url("socket://" + ipaddress + ":" + port)
+
         # Ensures that the serial port has not
         # been left hanging around by a previous process.
         serport_response = self._serport.close()

Everything else I've tried just works if you pass in dev when creating HeatmiserUH1. Hope that helps.

@colinmacgiolla
Copy link
Author

Thanks! Was thinking along the same lines this morning!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants