Supereg / homebridge-http-switch

Powerful http switch for Homebridge: https://github.com/homebridge/homebridge
ISC License
222 stars 37 forks source link

statusPattern not working as expected #106

Closed mbotalend closed 1 year ago

mbotalend commented 2 years ago

Describe the bug

I'm not sure this is being a bug. More likely a support request to setup a working statusPattern...

I've got this endpoint http://hyperhdr.local/json-rpc?xxxx It returns me the following JSON body (truncated version):

{
    "command": "serverinfo",
    "info": {
        "videomodehdr": 0
    },
    "success": true,
    "tan": 0
}

I would like to use the videomodehdr property to get the state of my stateful switch:

To do so I set up the statusPattern property as following: "statusPattern": "/.*\"videomodehdr\": 1.*/gms"

But the switch status is aways being detected as OFF.

Expected behavior The statusPattern/RegEx "statusPattern": "/.*\"videomodehdr\": 1.*/gms" to correctly set my switch status.

Version (output of npm list -g homebridge homebridge-http-switch)

Configuration

{
    "accessory": "HTTP-SWITCH",
    "name": "Ambi HDR",
    "switchType": "stateful",
    "onUrl": "http://hyperhdr.local:8090/json-rpc?request=%7B%22command%22:%22componentstate%22,%22componentstate%22:%7B%22component%22:%22HDR%22,%22state%22:true%7D%7D",
    "offUrl": "http://hyperhdr.local:8090/json-rpc?request=%7B%22command%22:%22componentstate%22,%22componentstate%22:%7B%22component%22:%22HDR%22,%22state%22:false%7D%7D",
    "statusUrl": "http://hyperhdr.local:8090/json-rpc?request=%7B%22command%22:%22serverinfo%22%7D",
    "statusPattern": "/.*\"videomodehdr\": 1.*/gms",
    "debug": true,
    "pullInterval": 50000
}
TheRealSimon42 commented 2 years ago

Hey @mbotalend, i had a similar issue and found out i need to "skip" whitespaces, beause the get striped out by the plugin. I guess the Phrasing of the Return-Body is the issue here.

However, if you enable debug mode and just copy the Logged status-Body, you'll see there are no whitespaces or returns. So, you'll need to test your regex with this "truncaded" response body.

In my Case, this is the response from the API (Postman):

{
    "isok": true,
    "data": {
        "online": true,
        "device_status": {
            "unixtime": 1651765690,
            "uptime": 969775,
            "mqtt": {
                "connected": false
            },
            "update": {
                "status": "idle",
                "has_update": false,
                "new_version": "20220209-095044/v1.11.8-g8c7bb8d",
                "old_version": "20220209-095044/v1.11.8-g8c7bb8d"
            },
            "actions_stats": {
                "skipped": 0
            },
            "time": "18:10",
            "wifi_sta": {
                "connected": true,
                "ssid": "Media",
                "ip": "192.168.20.71",
                "rssi": -67
            },
            "ram_total": 49960,
            "fs_free": 146835,
            "relays": [
                {
                    "ison": false,
                    "has_timer": false,
                    "timer_started": 0,
                    "timer_duration": 0,
                    "timer_remaining": 0,
                    "source": "cloud"
                },
                {
                    "ison": true,
                    "has_timer": false,
                    "timer_started": 0,
                    "timer_duration": 0,
                    "timer_remaining": 0,
                    "source": "cloud"
                }
            ],
            "has_update": false,
            "mac": "98CDAC252550",
            "serial": 28132,
            "cloud": {
                "enabled": true,
                "connected": true
            },
            "ext_humidity": [],
            "inputs": [
                {
                    "input": 0,
                    "event": "",
                    "event_cnt": 0
                },
                {
                    "input": 0,
                    "event": "",
                    "event_cnt": 0
                }
            ],
            "_updated": "2022-05-05 16:10:24",
            "ext_sensors": [],
            "ext_temperature": [],
            "fs_size": 233681,
            "ram_free": 38472,
            "cfg_changed_cnt": 1,
            "adcs": [
                {
                    "voltage": 0
                }
            ]
        }
    }
}

This is processed by the Plugin (copied from Terminal viewing the hb-log): {"isok":true,"data":{"online":true,"device_status":{"unixtime":1651765690,"uptime":969775,"mqtt":{"connected":false},"update":{"status":"idle","has_update":false,"new_version":"20220209-095044\/v1.11.8-g8c7bb8d","old_version":"20220209-095044\/v1.11.8-g8c7bb8d"},"actions_stats":{"skipped":0},"time":"18:06","wifi_sta":{"connected":true,"ssid":"Media","ip":"192.168.20.71","rssi":-67},"ram_total":49960,"fs_free":146835,"relays":[{"ison":false,"has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"source":"cloud"},{"ison":true,"has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"source":"cloud"}],"has_update":false,"mac":"98CDAC252550","serial":28059,"cloud":{"enabled":true,"connected":true},"ext_humidity":[],"inputs":[{"input":0,"event":"","event_cnt":0},{"input":0,"event":"","event_cnt":0}],"_updated":"2022-05-05 16:06:56","ext_sensors":[],"ext_temperature":[],"fs_size":233681,"ram_free":38472,"cfg_changed_cnt":1,"adcs":[{"voltage":0.02}]}}}

I guess, in your case, this whitespace here is the /.*\"videomodehdr\": ← Problem

By the way, it took me only 2 Hours to find this out 🤯 😁