Closed jaroslawp closed 3 months ago
Tu veux dire que tu voudrais récupérer que le qualifier ou la partie flags ou seulement le d0 ( il y a du d1)? Mais seulement pour ce type X2D Il faut voir comment le différencier ?
Le 'd0' ne donne pas trop d;information permettant de definir l'etat du sensor ('TamperFlag') .. ca fluctue entre les valeurs ~ 16000 , ~ 500 et 0 (sans savoir que ceci veut dire .... et quels sont les valeurs exactes attandues...). Je pense que optimal serait de recuperer le 'qualifier' (et peut etre aussi 'qualifier flags') en plus de flags 'd' - sans differencier le type de sensor X2D et sans changer ce qui est recupere a present.
Pour la question est-ce que ca devrait etre plustot en attributes d'un seul sensor ou presente comme sensors a part je pense que c;est ton choix comme le developeur de l'integration..
Regarde comment est fait la déclaration des senseurs dans la partie du fichier infotypes.py def infoType_11_decode
pour le x2d
Merci pour info, une simple modification:
--- rflib/infotypes.py.org
+++ rflib/infotypes.py
@@ -341,6 +341,7 @@
fields_found["subType"]=infos.get("subTypeMeaning")
if fields_found["subType"] == None or fields_found["subType"] == "" : fields_found["subType"]=infos.get("subType")
fields_found["qualifier"]=infos["qualifier"]
+ fields_found["flags"]=''
elements={'functionMeaning':'','stateMeaning':'','modeMeaning':'','d0':'','d1':'','d2':'','d3':''}
for measure,value in infos.items():
@@ -350,6 +351,7 @@
fields_found[measure+'_unit']= elements[measure]
if 'flags' in infos['qualifierMeaning']:
+ fields_found['flags']=",".join(infos['qualifierMeaning']['flags'])
for flag in infos['qualifierMeaning']['flags']:
fields_found[flag]=1
--- rflib/rfpparser.py.org
+++ rflib/rfpparser.py
@@ -44,6 +44,8 @@
"fnc":"functionMeaning",
"sta":"stateMeaning",
"mod":"modeMeaning",
+ "qua":"qualifier",
+ "fla":"flags",
"d0":"d0",
"d1":"d1",
"d2":"d2",
me permet d'obtenir l'etat du detecteur dans home assistant .. le seul bemol: maintenant ca genere 7 entites par detecteur ...ca serait probablement mieux de generer une entite avec 7 attributs ? (mais ca serait une grosse modification du code affectant autres protocoles aussi ...). [ pour le champ 'flags' -> je ne sais pas si il peut y avoir des valeurs multiples - mes detecteurs y rapportent toujours une seule .. donc pour automatismes dans hassio je vais utliiser la valeur numerique du 'qualifier' ]
+ fields_found["flags"]=''
ne doit pas servir car on remet à vide la totale au début par fields_found = {}
Aprés il faut que tu me montres un Packet pour que je test , avec le
Packet : ZIA33{ "frame" :{"header": {
Il faut voir ce que tu veux remonter, on peut tester le subTypeMeaning== Detector/Sensor,
pour avoir seulement ce qui peut ĂȘtre intĂ©ressant ! Mais a vĂ©rifier pour autre X2D ?
PS et voir fields_found[flag]=1
si tu récupÚres directement la valeur ?
if 'flags' in infos['qualifierMeaning']:
for flag in infos['qualifierMeaning']['flags']:
> + fields_found["command"]=flag
fields_found[flag]= 1
fields_found["id"]=infos["id"]
Ou si test du Detector/Sensor
peut-ĂȘtre plus sĂ»r ?
if 'flags' in infos['qualifierMeaning']:
for flag in infos['qualifierMeaning']['flags']:
> + if fields_found["subType"] == "Detector/Sensor" : fields_found["command"]=flag
fields_found[flag]= 1
Tu auras le cmd qui remonte l'info, c'est sĂ»r que peut-ĂȘtre trop d'info avec les dx !
X2D 2662852864cmd Alarm
X2D 2662852864 d0509
X2D 2662852864d1 0
X2D 2662852864d2 0
X2D 2662852864d3 0
X2D 2662852864typ Detector/Sensor
def infoType_11_decode(infos:list,allowEmptyID:bool=False) -> list:
if infotypes_debug: log.debug("Decode InfoType 11 : %d",infos)
fields_found = {}
fields_found["subType"]=infos.get("subTypeMeaning")
if fields_found["subType"] == None or fields_found["subType"] == "" : fields_found["subType"]=infos.get("subType")
fields_found["qualifier"]=infos["qualifier"]
if 'flags' in infos['qualifierMeaning']:
for flag in infos['qualifierMeaning']['flags']:
if fields_found["subType"] == "Detector/Sensor" : fields_found["command"]=flag
fields_found[flag]=1
elements={'d0':'','d1':''}
else:
elements={'functionMeaning':'','stateMeaning':'','modeMeaning':'','d0':'','d1':'','d2':'','d3':''}
for measure,value in infos.items():
if measure in elements:
fields_found[measure] = value
if elements[measure] != '':
fields_found[measure+'_unit']= elements[measure]
fields_found["id"]=infos["id"]
if fields_found["id"]!="0" or allowEmptyID:
return fields_found
đ
Oui, ceci va fonctionner aussi bien sur (dans le cas de fermeture du detecteur le XXXXcmd va etre vide : "")
mais peut-etre il serait mieux d'utiliser:
fields_found["status"]=flag
au lieu de fields_found["command"]=flag
(donc obtenir XXXXsta pas XXXXcmd comme ce qui est rapporte c'est un statut ? - en meme temps ceci serait homogene avec ce que une Starbox utilsant InfoType_10 rapporte -> son mode actuel de fonctionnement est dans XXXXsta)
Bien que dans mon cas les champs 'd2' et 'd3' rapportent toujours '0' peut-etre ca pourrrait etre utile pour autres types de detecteurs X2D donc faudrait pas les eliminer ?
def infoType_11_decode(infos:list,allowEmptyID:bool=False) -> list:
if infotypes_debug: log.debug("Decode InfoType 11 : %d",infos)
fields_found = {}
fields_found["subType"]=infos.get("subTypeMeaning")
if fields_found["subType"] == None or fields_found["subType"] == "" : fields_found["subType"]=infos.get("subType")
fields_found["qualifier"]=infos["qualifier"]
if 'flags' in infos['qualifierMeaning']:
for flag in infos['qualifierMeaning']['flags']:
if fields_found["subType"] == "Detector/Sensor" : fields_found["status"]=flag
fields_found[flag]=1
elements={'functionMeaning':'','stateMeaning':'','modeMeaning':'','d0':'','d1':'','d2':'','d3':''}
for measure,value in infos.items():
if measure in elements:
fields_found[measure] = value
if elements[measure] != '':
fields_found[measure+'_unit']= elements[measure]
fields_found["id"]=infos["id"]
if fields_found["id"]!="0" or allowEmptyID:
return fields_found
(plus le mapping: "qua":"qualifier",
dans rfpparser.py: comme ceci on peut utliser directement la valeur numerique: laquelle etait converti en texte dans ancienne version de l'integration -> DTC_STATUS_LOOKUP - c'est qui n;'st plus le cas? )
Slt.
Pour le qualifier, je ne vois pas trop l'interet car il est déjà traduit dans le "qualifierMeaning": { "flags": ["TEST/ASSOC"] ou ["Alarm"] ou []}
Ce qui correspond au bit comme dans la doc suivant le subtype !
Avec les valeurs des dx associé ?
qualifier SubType=0 D0 : Tamper Flag, D1: Alarm Flag, D2: Low Batt Flag, D3: - , D4: Test/Assoc D5 : Domestic frame D7:6 : X2D variant
SubType=1 On : 1 Off : 2 Stop : 3
2024-03-17 10:30:13.763 DEBUG (MainThread) [custom_components.rfplayer.rflib.rfpparser] Packet : ZIA33{ "frame" :{"header": {"frameType": "0", "cluster": "0", "dataFlag": "1", "rfLevel": "-93", "floorNoise": "-100", "rfQuality": "2", "protocol": "8", "protocolMeaning": "X2D", "infoType": "11", "frequency": "868350"},"infos": {"subType": "0", "subTypeMeaning": "Detector/Sensor", "id": "2662852864", "qualifier": "16", "qualifierMeaning": { "flags": ["TEST/ASSOC"]}, "d0": "64528", "d1": "177", "d2": "0", "d3": "0"}}}
ICI Qualifier =16 en binaire 00010000 donc bit 4 => D4: Test/Assoc
2024-03-17 10:30:56.395 DEBUG (MainThread) [custom_components.rfplayer.rflib.rfpparser] Packet : ZIA33{ "frame" :{"header": {"frameType": "0", "cluster": "0", "dataFlag": "1", "rfLevel": "-93", "floorNoise": "-104", "rfQuality": "2", "protocol": "8", "protocolMeaning": "X2D", "infoType": "11", "frequency": "868350"},"infos": {"subType": "0", "subTypeMeaning": "Detector/Sensor", "id": "2662852864", "qualifier": "2", "qualifierMeaning": { "flags": ["Alarm"]}, "d0": "509", "d1": "0", "d2": "0", "d3": "0"}}}
ICI Qualifier =2 en binaire 00000010 donc bit 1 => D1: Alarm Flag
2024-03-17 10:31:01.995 DEBUG (MainThread) [custom_components.rfplayer.rflib.rfpparser] Packet : ZIA33{ "frame" :{"header": {"frameType": "0", "cluster": "0", "dataFlag": "1", "rfLevel": "-82", "floorNoise": "-103", "rfQuality": "5", "protocol": "8", "protocolMeaning": "X2D", "infoType": "11", "frequency": "868350"},"infos": {"subType": "0", "subTypeMeaning": "Detector/Sensor", "id": "2662852864", "qualifier": "0", "qualifierMeaning": { "flags": []}, "d0": "16893", "d1": "0", "d2": "0", "d3": "0"}}}
ICI Qualifier =0 en binaire 00000000 donc aucun bit Ă 1 => ""
Oui, un de deux - qualifier
ou qualifierMeaning
sera suffisant pour determiner l'etat du detecteur.
(plus le mapping: "qua":"qualifier", dans rfpparser.py:
Si je fais cela , le qualifier va remonter automatiquement dans chaque entité qui en ont un ? donc encore un de plus !
Alors qu'il faudrait faire un test sur ce qualifier pour remonter un stat ou cmd avec la bonne valeur traduite, donc ici le flag !
Oui, en effet. La valeur etait traduite dans l'ancienne version de l'integration ? Mais si c;est un probleme pour les autres protocoles juste remonter le fla sera suffisant:
Slt.. J'ai fais une mise Ă jour:
Ajout retour divers Ajout :
- retour PING
- retour EDISIOFRAME en cours de décodage
- Possibilité de DIM en % [ en cours]
- j'ai ajouté aussi le flag [ sur autre avant]
Merci, ca marche pour moi ! (bon, toujours le petit probleme de initialisation - https://github.com/Doubledom45/TEST-RFPLAYER/issues/4 - je vois que tu as ajoute une copie d'initialisation dans connection_made() - mais juste le fait que init_commands() se termine pour moi avec exception python resulte en 'initialization failed')
La nouvelle version d'integration produit 5 sensors pour chaque detecteur X2D:
x2d_2679630080typ, x2d_2679630080d0, x2d_2679630080d1, x2d_2679630080d2, x2d_2679630080d3
la ou ancienne version de GCE Electronics produisait un seul sensor:x2d_2679630080
Est-ce que le 'typ' 'd0' 'd1' 'd2' 'd3' ne devrait pas etre plus tot les attributes d'un seul sensor ?En plus - bien que la doc (https://github.com/Doubledom45/TEST-RFPLAYER/blob/main/Information/rfplayer_api_v1.8.pdf, page 31, 5.2.2.18 InfosType 11) mentionne que l'information est a recuperer dans les flags d0,d1,d2,d3,d4, etc ... ceci ne semble pas etre le cas des sensor X2D DeltaDore Tyxal MicroCOBX:
Ce detecteur peut envoyer 3 messages:
.. mais les informations ne se trouvent pas dans les flags (d1 ou d4) mais dans les champs 'qualifier' et 'qualifierMeaning : { flags }': donc implementation actuelle ne me donne pas d'information au sujet de l'etat du detecteur... (dans la version de GCE Elctronics : https://github.com/gce-electronics/HA_RFPlayer/blob/main/custom_components/rfplayer/rflib/rfpparser.py#L108 ceci etait pris en compte)
Message assoc/test:
Message ouverture:
Message fermeture: