mariusz-ostoja-swierczynski / tech-controllers

TECH Controllers integration for Home Assistant
MIT License
96 stars 67 forks source link

[Feat]: I-2 support #117

Open uxieme opened 2 months ago

uxieme commented 2 months ago

The request

What needs to be done to add support for I-2? 🤔

type: "installation"
udid: "***"
version: "TECH: i-2+ PL (v.1.4.15)"

Additional information

No response

anarion80 commented 2 months ago

For starters, the raw json output from emodul for your live controller (redacted of course): https://github.com/mariusz-ostoja-swierczynski/tech-controllers/blob/main/CONTRIBUTING.md From that we can see what is returned and supported.

uxieme commented 2 months ago
{
    "zones": {
        "transaction_time": null,
        "elements": [],
        "globalSchedules": {
            "time": null,
            "duringChange": null,
            "elements": []
        },
        "controllerParameters": {}
    },
    "tiles": [
        {
            "id": 2006,
            "parentId": 4630,
            "type": 40,
            "menuId": 2006,
            "orderId": null,
            "visibility": true,
            "params": {
                "description": "Text information",
                "statusId": 608,
                "headerId": 814,
                "iconId": 3,
                "options": []
            }
        },
        {
            "id": 2040,
            "parentId": 0,
            "type": 50,
            "menuId": 0,
            "orderId": null,
            "visibility": true,
            "params": {
                "description": "Controller software version",
                "version": "1.4.15",
                "txtId": 1634,
                "iconId": 0,
                "companyId": 6,
                "controllerName": "i-2+ PL",
                "mainControllerId": 465
            }
        },
        {
            "id": 2050,
            "parentId": 4631,
            "type": 1,
            "menuId": 0,
            "orderId": null,
            "visibility": true,
            "params": {
                "description": "Temperature sensor",
                "workingStatus": true,
                "txtId": 192,
                "value": 434,
                "batteryLevel": null,
                "signalStrength": null
            }
        },
        {
            "id": 2051,
            "parentId": 4631,
            "type": 1,
            "menuId": 0,
            "orderId": null,
            "visibility": true,
            "params": {
                "description": "Temperature sensor",
                "workingStatus": true,
                "txtId": 194,
                "value": 470,
                "batteryLevel": null,
                "signalStrength": null
            }
        },
        {
            "id": 2052,
            "parentId": 4631,
            "type": 1,
            "menuId": 0,
            "orderId": null,
            "visibility": true,
            "params": {
                "description": "Temperature sensor",
                "workingStatus": false,
                "txtId": 795,
                "value": -2030,
                "batteryLevel": null,
                "signalStrength": null
            }
        },
        {
            "id": 2053,
            "parentId": 4631,
            "type": 1,
            "menuId": 0,
            "orderId": null,
            "visibility": true,
            "params": {
                "description": "Temperature sensor",
                "workingStatus": true,
                "txtId": 1040,
                "value": 171,
                "batteryLevel": null,
                "signalStrength": null
            }
        },
        {
            "id": 2054,
            "parentId": 4631,
            "type": 1,
            "menuId": 0,
            "orderId": null,
            "visibility": true,
            "params": {
                "description": "Temperature sensor",
                "workingStatus": true,
                "txtId": 196,
                "value": 201,
                "batteryLevel": null,
                "signalStrength": null
            }
        },
        {
            "id": 2055,
            "parentId": 4631,
            "type": 1,
            "menuId": 0,
            "orderId": null,
            "visibility": true,
            "params": {
                "description": "Temperature sensor",
                "workingStatus": true,
                "txtId": 197,
                "value": 173,
                "batteryLevel": null,
                "signalStrength": null
            }
        },
        {
            "id": 2056,
            "parentId": 4631,
            "type": 1,
            "menuId": 0,
            "orderId": null,
            "visibility": true,
            "params": {
                "description": "Temperature sensor",
                "workingStatus": false,
                "txtId": 1288,
                "value": -2030,
                "batteryLevel": null,
                "signalStrength": null
            }
        },
        {
            "id": 2057,
            "parentId": 4631,
            "type": 1,
            "menuId": 0,
            "orderId": null,
            "visibility": true,
            "params": {
                "description": "Temperature sensor",
                "workingStatus": false,
                "txtId": 1289,
                "value": -2030,
                "batteryLevel": null,
                "signalStrength": null
            }
        },
        {
            "id": 4057,
            "parentId": 4630,
            "type": 6,
            "menuId": 3203,
            "orderId": null,
            "visibility": true,
            "params": {
                "description": "Universal status with widgets",
                "statusId": 0,
                "iconId": 17,
                "widget1": {
                    "txtId": 0,
                    "value": 0,
                    "unit": -1,
                    "type": 0,
                    "params": [
                        0,
                        0,
                        0,
                        0,
                        0
                    ]
                },
                "widget2": {
                    "txtId": 573,
                    "value": 470,
                    "unit": 7,
                    "type": 9,
                    "params": [
                        0,
                        0,
                        0,
                        0,
                        0
                    ]
                }
            }
        },
        {
            "id": 4063,
            "parentId": 4630,
            "type": 23,
            "menuId": 2320,
            "orderId": null,
            "visibility": true,
            "params": {
                "description": "Built-in valve",
                "workingStatus": false,
                "valveNumber": 1,
                "currentTemp": 192,
                "returnTemp": 172,
                "setTempCorrection": 0,
                "openingPercentage": 0,
                "valvePump": 0,
                "boilerProtection": 0,
                "returnProtection": 0,
                "setTemp": 35,
                "txtId": 992
            }
        },
        {
            "id": 4064,
            "parentId": 4630,
            "type": 23,
            "menuId": 2420,
            "orderId": null,
            "visibility": true,
            "params": {
                "description": "Built-in valve",
                "workingStatus": false,
                "valveNumber": 2,
                "currentTemp": 197,
                "returnTemp": 172,
                "setTempCorrection": 0,
                "openingPercentage": 0,
                "valvePump": 0,
                "boilerProtection": 0,
                "returnProtection": 0,
                "setTemp": 45,
                "txtId": 993
            }
        },
        {
            "id": 4600,
            "parentId": 4633,
            "type": 6,
            "menuId": 8850,
            "orderId": null,
            "visibility": true,
            "params": {
                "description": "Universal status with widgets",
                "statusId": 0,
                "iconId": 167,
                "widget1": {
                    "txtId": 5320,
                    "value": 0,
                    "unit": -1,
                    "type": 0,
                    "params": [
                        0,
                        0,
                        0,
                        0,
                        0
                    ]
                },
                "widget2": {
                    "txtId": 571,
                    "value": 0,
                    "unit": -1,
                    "type": 0,
                    "params": [
                        0,
                        0,
                        0,
                        0,
                        0
                    ]
                }
            }
        },
        {
            "id": 4610,
            "parentId": 4632,
            "type": 11,
            "menuId": 0,
            "orderId": null,
            "visibility": true,
            "params": {
                "description": "Relay",
                "workingStatus": true,
                "txtId": 645,
                "iconId": 98
            }
        },
        {
            "id": 4611,
            "parentId": 4632,
            "type": 11,
            "menuId": 0,
            "orderId": null,
            "visibility": true,
            "params": {
                "description": "Relay",
                "workingStatus": true,
                "txtId": 646,
                "iconId": 98
            }
        },
        {
            "id": 4630,
            "parentId": 0,
            "type": 60,
            "menuId": 0,
            "orderId": null,
            "visibility": true,
            "expanded": null,
            "params": {
                "description": "Container",
                "txtId": 1290,
                "iconId": 138
            }
        },
        {
            "id": 4631,
            "parentId": 0,
            "type": 60,
            "menuId": 0,
            "orderId": null,
            "visibility": true,
            "expanded": null,
            "params": {
                "description": "Container",
                "txtId": 1617,
                "iconId": 87
            }
        },
        {
            "id": 4632,
            "parentId": 0,
            "type": 60,
            "menuId": 0,
            "orderId": null,
            "visibility": true,
            "expanded": null,
            "params": {
                "description": "Container",
                "txtId": 642,
                "iconId": 98
            }
        },
        {
            "id": 4633,
            "parentId": 0,
            "type": 60,
            "menuId": 0,
            "orderId": null,
            "visibility": true,
            "expanded": null,
            "params": {
                "description": "Container",
                "txtId": 729,
                "iconId": 167
            }
        }
    ],
    "tilesOrder": null,
    "tilesLastUpdate": "2024-09-19 23:21:57.166595+02"
}
uxieme commented 2 months ago
{
    "tiles": [
        {
            "id": 2051,
            "parentId": 4631,
            "type": 1,
            "menuId": 0,
            "orderId": null,
            "visibility": true,
            "params": {
                "description": "Temperature sensor",
                "workingStatus": true,
                "txtId": 194,
                "value": 470,
                "batteryLevel": null,
                "signalStrength": null
            }
        },
        {
            "id": 2054,
            "parentId": 4631,
            "type": 1,
            "menuId": 0,
            "orderId": null,
            "visibility": true,
            "params": {
                "description": "Temperature sensor",
                "workingStatus": true,
                "txtId": 196,
                "value": 198,
                "batteryLevel": null,
                "signalStrength": null
            }
        },
        {
            "id": 4057,
            "parentId": 4630,
            "type": 6,
            "menuId": 3203,
            "orderId": null,
            "visibility": true,
            "params": {
                "description": "Universal status with widgets",
                "statusId": 0,
                "iconId": 17,
                "widget1": {
                    "txtId": 0,
                    "value": 0,
                    "unit": -1,
                    "type": 0,
                    "params": [
                        0,
                        0,
                        0,
                        0,
                        0
                    ]
                },
                "widget2": {
                    "txtId": 573,
                    "value": 470,
                    "unit": 7,
                    "type": 9,
                    "params": [
                        0,
                        0,
                        0,
                        0,
                        0
                    ]
                }
            }
        },
        {
            "id": 4063,
            "parentId": 4630,
            "type": 23,
            "menuId": 2320,
            "orderId": null,
            "visibility": true,
            "params": {
                "description": "Built-in valve",
                "workingStatus": false,
                "valveNumber": 1,
                "currentTemp": 195,
                "returnTemp": 174,
                "setTempCorrection": 0,
                "openingPercentage": 0,
                "valvePump": 0,
                "boilerProtection": 0,
                "returnProtection": 0,
                "setTemp": 35,
                "txtId": 992
            }
        },
        {
            "id": 4064,
            "parentId": 4630,
            "type": 23,
            "menuId": 2420,
            "orderId": null,
            "visibility": true,
            "params": {
                "description": "Built-in valve",
                "workingStatus": false,
                "valveNumber": 2,
                "currentTemp": 200,
                "returnTemp": 174,
                "setTempCorrection": 0,
                "openingPercentage": 0,
                "valvePump": 0,
                "boilerProtection": 0,
                "returnProtection": 0,
                "setTemp": 45,
                "txtId": 993
            }
        }
    ],
    "zones": {
        "elements": [],
        "globalSchedules": {
            "elements": []
        }
    },
    "menu": [],
    "parents": [],
    "lastUpdate": "2024-09-19T23:25:27.10674+02:00",
    "moduleStatus": "active",
    "controllerStatus": "active",
    "init": false
}
uxieme commented 2 months ago

Ok, nvm, it looks like that after some time entities appeared and I can see values from my sensors. Thanks for help ;)

uxieme commented 2 months ago

Hey, would it be possible to passthrough pump status?

 {
            "id": 4057,
            "parentId": 4630,
            "type": 6,
            "menuId": 3203,
            "orderId": null,
            "visibility": true,
            "params": {
                "description": "Universal status with widgets",
                "statusId": 0, <--- statusId 1 = turned on, statusId: 0 turned off 
                "iconId": 17,
                "widget1": {
                    "txtId": 0,
                    "value": 0,
                    "unit": -1,
                    "type": 0,
                    "params": [
                        0,
                        0,
                        0,
                        0,
                        0
                    ]
                },
                "widget2": {
                    "txtId": 573,
                    "value": 517,
                    "unit": 7,
                    "type": 9,
                    "params": [
                        0,
                        0,
                        0,
                        0,
                        0
                    ]
                }
            }
        },
anarion80 commented 2 months ago

Yes, it would be doable, although this whole structure is still a bit unknown. For example, the DEMO site has a pump like this:

{
            "id": 4057,
            "parentId": 4630,
            "type": 6,
            "menuId": 3203,
            "orderId": null,
            "visibility": true,
            "params": {
                "description": "Universal status with widgets",
                "statusId": 1,
                "iconId": 17,
                "widget1": {
                    "txtId": 573,
                    "value": 45,
                    "unit": 6,
                    "type": 1,
                    "params": [
                        0,
                        0,
                        0,
                        0,
                        0
                    ]
                },
                "widget2": {
                    "txtId": 0,
                    "value": 44,
                    "unit": 6,
                    "type": 1,
                    "params": [
                        0,
                        0,
                        0,
                        0,
                        0
                    ]
                }
            }
        },

which (I assume) is represented by this: image

And it has different units, values under both widgets, so this is really not clear what is really represented here and how.

uxieme commented 1 month ago

Hmm I bet its mix of 2 requests:

modules/:id

 {
            "id": 4057,
            "parentId": 4630,
            "type": 6,
            "menuId": 3203,
            "orderId": null,
            "visibility": true,
            "params": {
                "description": "Universal status with widgets",
                "statusId": 0,
                "iconId": 17,
                "widget1": {
                    "txtId": 0,
                    "value": 0,
                    "unit": -1,
                    "type": 0,
                    "params": [
                        0,
                        0,
                        0,
                        0,
                        0
                    ]
                },
                "widget2": {
                    "txtId": 573,
                    "value": 477,
                    "unit": 7,
                    "type": 9,
                    "params": [
                        0,
                        0,
                        0,
                        0,
                        0
                    ]
                }
            }
        },

modules/:id/menu/MU

 {
                "menuType": "MU",
                "type": 1,
                "id": 3203,
                "parentId": 30027,
                "access": true,
                "txtId": 938,
                "wikiTxtId": 0,
                "iconId": 87,
                "params": {
                    "format": 1,
                    "value": 65,
                    "min": 5,
                    "max": 80,
                    "default": 45,
                    "txtId": 1035,
                    "description": "Number value control"
                },
                "duringChange": "f"
            },

And it looks like this:

image ^ screenshot was taken few mins later that's why temp is different

Flamy69 commented 1 month ago

Hi, I am not sure, if I should start new issue or continue here. I can not see state of binary output:

image

Can it be added please?

anarion80 commented 1 month ago

Hi, I am not sure, if I should start new issue or continue here. I can not see state of binary output:

image

Can it be added please?

@Flamy69 I don't see this is related, so please open a new issue and post a proper data according to https://github.com/mariusz-ostoja-swierczynski/tech-controllers/blob/main/CONTRIBUTING.md

Flamy69 commented 1 month ago

Hi, I am not sure, if I should start new issue or continue here. I can not see state of binary output: image Can it be added please?

@Flamy69 I don't see this is related, so please open a new issue and post a proper data according to https://github.com/mariusz-ostoja-swierczynski/tech-controllers/blob/main/CONTRIBUTING.md

Sorry, I didn't describe it thoroughly enough - I have an I-2 comntroller, which is why I thought my issue might be hidden under this.