本帖最后由 没内涵 于 2024-12-29 02:40 编辑
首先说一下这个区间触发判断
在极客版中也可以看到,ES3的触发有人包含了从1到255,它是按照触发有人的区间的二进制来转换的
8段触发的区间,从近到远,有人是1,无人是0,屏蔽区间为0
打个比方,比如0到0.75米(第1段)触发有人,那么二进制表示就是00000001,转换成10进制就是1
0到0.75米(第1段)以及0.75到1.5米(第2段)同时触发有人,那么二进制表示就是00000011,转换成10进制就是3
以此类推,1到255分别代表了不同触发区间
以下是代码
from custom_components.xiaomi_gateway3.core.devices import *
DEVICES = [{
20731: ["Linptech", "Presence Sensor ES3", "ES3BB", "linp.sensor_occupy.es2"],
"spec": [
BoolConv("occupancy", "binary_sensor", mi="2.p.1078"),
MapConv("occupancy_status", "sensor", mi="2.p.1078", map={0: "NoOne", 1: "HasOne", 2: "HasOne", 3: "HasOne", 4: "HasOne", 5: "HasOne", 6: "HasOne", 7: "HasOne", 8: "HasOne", 9: "HasOne", 10: "HasOne", 11: "HasOne", 12: "HasOne", 13: "HasOne", 14: "HasOne", 15: "HasOne", 16: "HasOne", 17: "HasOne", 18: "HasOne", 19: "HasOne", 20: "HasOne", 21: "HasOne", 22: "HasOne", 23: "HasOne", 24: "HasOne", 25: "HasOne", 26: "HasOne", 27: "HasOne", 28: "HasOne", 29: "HasOne", 30: "HasOne", 31: "HasOne", 32: "HasOne", 33: "HasOne", 34: "HasOne", 35: "HasOne", 36: "HasOne", 37: "HasOne", 38: "HasOne", 39: "HasOne", 40: "HasOne", 41: "HasOne", 42: "HasOne", 43: "HasOne", 44: "HasOne", 45: "HasOne", 46: "HasOne", 47: "HasOne", 48: "HasOne", 49: "HasOne", 50: "HasOne", 51: "HasOne", 52: "HasOne", 53: "HasOne", 54: "HasOne", 55: "HasOne", 56: "HasOne", 57: "HasOne", 58: "HasOne", 59: "HasOne", 60: "HasOne", 61: "HasOne", 62: "HasOne", 63: "HasOne", 64: "HasOne", 65: "HasOne", 66: "HasOne", 67: "HasOne", 68: "HasOne", 69: "HasOne", 70: "HasOne", 71: "HasOne", 72: "HasOne", 73: "HasOne", 74: "HasOne", 75: "HasOne", 76: "HasOne", 77: "HasOne", 78: "HasOne", 79: "HasOne", 80: "HasOne", 81: "HasOne", 82: "HasOne", 83: "HasOne", 84: "HasOne", 85: "HasOne", 86: "HasOne", 87: "HasOne", 88: "HasOne", 89: "HasOne", 90: "HasOne", 91: "HasOne", 92: "HasOne", 93: "HasOne", 94: "HasOne", 95: "HasOne", 96: "HasOne", 97: "HasOne", 98: "HasOne", 99: "HasOne", 100: "HasOne", 101: "HasOne", 102: "HasOne", 103: "HasOne", 104: "HasOne", 105: "HasOne", 106: "HasOne", 107: "HasOne", 108: "HasOne", 109: "HasOne", 110: "HasOne", 111: "HasOne", 112: "HasOne", 113: "HasOne", 114: "HasOne", 115: "HasOne", 116: "HasOne", 117: "HasOne", 118: "HasOne", 119: "HasOne", 120: "HasOne", 121: "HasOne", 122: "HasOne", 123: "HasOne", 124: "HasOne", 125: "HasOne", 126: "HasOne", 127: "HasOne", 128: "HasOne", 129: "HasOne", 130: "HasOne", 131: "HasOne", 132: "HasOne", 133: "HasOne", 134: "HasOne", 135: "HasOne", 136: "HasOne", 137: "HasOne", 138: "HasOne", 139: "HasOne", 140: "HasOne", 141: "HasOne", 142: "HasOne", 143: "HasOne", 144: "HasOne", 145: "HasOne", 146: "HasOne", 147: "HasOne", 148: "HasOne", 149: "HasOne", 150: "HasOne", 151: "HasOne", 152: "HasOne", 153: "HasOne", 154: "HasOne", 155: "HasOne", 156: "HasOne", 157: "HasOne", 158: "HasOne", 159: "HasOne", 160: "HasOne", 161: "HasOne", 162: "HasOne", 163: "HasOne", 164: "HasOne", 165: "HasOne", 166: "HasOne", 167: "HasOne", 168: "HasOne", 169: "HasOne", 170: "HasOne", 171: "HasOne", 172: "HasOne", 173: "HasOne", 174: "HasOne", 175: "HasOne", 176: "HasOne", 177: "HasOne", 178: "HasOne", 179: "HasOne", 180: "HasOne", 181: "HasOne", 182: "HasOne", 183: "HasOne", 184: "HasOne", 185: "HasOne", 186: "HasOne", 187: "HasOne", 188: "HasOne", 189: "HasOne", 190: "HasOne", 191: "HasOne", 192: "HasOne", 193: "HasOne", 194: "HasOne", 195: "HasOne", 196: "HasOne", 197: "HasOne", 198: "HasOne", 199: "HasOne", 200: "HasOne", 201: "HasOne", 202: "HasOne", 203: "HasOne", 204: "HasOne", 205: "HasOne", 206: "HasOne", 207: "HasOne", 208: "HasOne", 209: "HasOne", 210: "HasOne", 211: "HasOne", 212: "HasOne", 213: "HasOne", 214: "HasOne", 215: "HasOne", 216: "HasOne", 217: "HasOne", 218: "HasOne", 219: "HasOne", 220: "HasOne", 221: "HasOne", 222: "HasOne", 223: "HasOne", 224: "HasOne", 225: "HasOne", 226: "HasOne", 227: "HasOne", 228: "HasOne", 229: "HasOne", 230: "HasOne", 231: "HasOne", 232: "HasOne", 233: "HasOne", 234: "HasOne", 235: "HasOne", 236: "HasOne", 237: "HasOne", 238: "HasOne", 239: "HasOne", 240: "HasOne", 241: "HasOne", 242: "HasOne", 243: "HasOne", 244: "HasOne", 245: "HasOne", 246: "HasOne", 247: "HasOne", 248: "HasOne", 249: "HasOne", 250: "HasOne", 251: "HasOne", 252: "HasOne", 253: "HasOne", 254: "HasOne", 255: "HasOne"}),
MathConv("illuminance", "sensor", mi="2.p.1005", min=0, max=10000),
MathConv("customized-service-for-ble", "sensor", mi="5.p.1018", min=0, max=255),
BaseConv("battery", "sensor", mi="4.p.1003", entity=ENTITY_LAZY),
],
}] + DEVICES
添加方法就不赘述了,就是加到xiaomi_gateway3.py里面
试了下这个customized-service-for-ble应该是近距区间触发的判定,判定值应该就是同上面说的二进制转化,总归该值大于0就是近距区间内有人,等于0则是无人
更新了一版把HasOne的255个状态改成了数字
可以通过数字判定是哪边触发的,比如近距离触发或者是远距离触发
可以间接判断人的方位
from custom_components.xiaomi_gateway3.core.devices import *
DEVICES = [{
20731: ["Linptech", "Presence Sensor ES3", "ES3BB", "linp.sensor_occupy.es3"],
"spec": [
# main sensors
BoolConv("occupancy", "binary_sensor", mi="2.p.1078"),
MapConv("occupancy_status", "sensor", mi="2.p.1078", map={0: "0", 1: "1", 2: "2", 3: "3", 4: "4", 5: "5", 6: "6", 7: "7", 8: "8", 9: "9", 10: "10", 11: "11", 12: "12", 13: "13", 14: "14", 15: "15", 16: "16", 17: "17", 18: "18", 19: "19", 20: "20", 21: "21", 22: "22", 23: "23", 24: "24", 25: "25", 26: "26", 27: "27", 28: "28", 29: "29", 30: "30", 31: "31", 32: "32", 33: "33", 34: "34", 35: "35", 36: "36", 37: "37", 38: "38", 39: "39", 40: "40", 41: "41", 42: "42", 43: "43", 44: "44", 45: "45", 46: "46", 47: "47", 48: "48", 49: "49", 50: "50", 51: "51", 52: "52", 53: "53", 54: "54", 55: "55", 56: "56", 57: "57", 58: "58", 59: "59", 60: "60", 61: "61", 62: "62", 63: "63", 64: "64", 65: "65", 66: "66", 67: "67", 68: "68", 69: "69", 70: "70", 71: "71", 72: "72", 73: "73", 74: "74", 75: "75", 76: "76", 77: "77", 78: "78", 79: "79", 80: "80", 81: "81", 82: "82", 83: "83", 84: "84", 85: "85", 86: "86", 87: "87", 88: "88", 89: "89", 90: "90", 91: "91", 92: "92", 93: "93", 94: "94", 95: "95", 96: "96", 97: "97", 98: "98", 99: "99", 100: "100", 101: "101", 102: "102", 103: "103", 104: "104", 105: "105", 106: "106", 107: "107", 108: "018", 109: "109", 110: "110", 111: "111", 112: "112", 113: "113", 114: "114", 115: "115", 116: "116", 117: "117", 118: "118", 119: "119", 120: "120", 121: "121", 122: "122", 123: "123", 124: "124", 125: "125", 126: "126", 127: "127", 128: "128", 129: "129", 130: "130", 131: "131", 132: "132", 133: "133", 134: "134", 135: "135", 136: "136", 137: "137", 138: "138", 139: "139", 140: "140", 141: "141", 142: "142", 143: "143", 144: "144", 145: "145", 146: "146", 147: "147", 148: "148", 149: "149", 150: "150", 151: "151", 152: "152", 153: "153", 154: "154", 155: "155", 156: "156", 157: "157", 158: "158", 159: "159", 160: "160", 161: "161", 162: "162", 163: "163", 164: "164", 165: "165", 166: "166", 167: "167", 168: "168", 169: "169", 170: "170", 171: "171", 172: "172", 173: "173", 174: "174", 175: "175", 176: "176", 177: "177", 178: "178", 179: "179", 180: "180", 181: "181", 182: "182", 183: "183", 184: "184", 185: "185", 186: "186", 187: "187", 188: "188", 189: "189", 190: "190", 191: "191", 192: "192", 193: "193", 194: "194", 195: "195", 196: "196", 197: "197", 198: "198", 199: "199", 200: "200", 201: "201", 202: "202", 203: "203", 204: "204", 205: "205", 206: "206", 207: "207", 208: "208", 209: "209", 210: "210", 211: "211", 212: "212", 213: "213", 214: "214", 215: "215", 216: "216", 217: "217", 218: "218", 219: "219", 220: "220", 221: "221", 222: "222", 223: "223", 224: "224", 225: "225", 226: "226", 227: "227", 228: "228", 229: "229", 230: "230", 231: "231", 232: "232", 233: "233", 234: "234", 235: "235", 236: "236", 237: "237", 238: "238", 239: "239", 240: "240", 241: "241", 242: "242", 243: "243", 244: "244", 245: "245", 246: "246", 247: "247", 248: "248", 249: "249", 250: "250", 251: "251", 252: "252", 253: "253", 254: "254", 255: "255"}),
MathConv("illuminance", "sensor", mi="2.p.1005", min=0, max=10000),
MathConv("customized-service-for-ble", "sensor", mi="5.p.1018", min=0, max=255),
BaseConv("battery", "sensor", mi="4.p.1003", entity=ENTITY_LAZY),
],
}] + DEVICES
|