-
Notifications
You must be signed in to change notification settings - Fork 7
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
[FEATURE] SAI #8
Comments
@felisida : What is the difference between the attributes that are set to |
I know, however it could be useful to read the sensors on the windows and volumetric to use them in other scenarios or to know if there are open windows, even if you cannot arm or disarm the alarm. I tried to reproduce the second parto fo contribute, and the is the result <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns="urn:xmethods-dpadws"> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns="urn:xmethods-dpadws"> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns="urn:xmethods-dpadws"> I too download from safari the whole inspector web |
unfortunately that is again, the response from the webserver. the request for any status change can be found in the headers or request tab: the payload should look like this (it has a <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body><service-runonelement xmlns="urn:xmethods-dpadws">
<payload>1</payload>
<hashcode>NO-HASHCODE</hashcode>
<optionals>NO-OPTIONALS</optionals>
<callsource>WEB-DOMUSPAD_SOAP</callsource>
<sessionid>xxxxxxx</sessionid>
<waittime>10</waittime>
<idobject>710</idobject>
<operation>SETVALUE</operation>
</service-runonelement>
</soapenv:Body></soapenv:Envelope> there are many, many other requests going on when you have the webserver oben: those are the regular status updates (can be identified because they have |
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">soapenv:BodyNO-PAYLOADNO-HASCHODENO-OPTIONALWEB-DOMUSPAD_SOAP5ef4af65c7f255DML-SQLSELECTSELECT ID,NAME,STATUS_ID,CURRENT_VALUE FROM DPADD_OBJECT WHERE ID IN (229,265,269,270,273,8548,10958,10959,10960,10961,10962,10963,10964,10965,10966,10967,10968,10969,10970,10971,10978,10985,10992,10999,11006,11013,11020,11027,11034,11041,11048,11055,11062,11069,11076);270</soapenv:Body></soapenv:Envelope> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">soapenv:BodyNO-PAYLOADNO-HASCHODENO-OPTIONALWEB-DOMUSPAD_SOAP5ef4af65c7f255DML-SQLSELECTSELECT ID,NAME,STATUS_ID,CURRENT_VALUE FROM DPADD_OBJECT WHERE ID IN (229,265,269,270,273,8548,10958,10959,10960,10961,10962,10963,10964,10965,10966,10967,10968,10969,10970,10971,10978,10985,10992,10999,11006,11013,11020,11027,11034,11041,11048,11055,11062,11069,11076);270</soapenv:Body></soapenv:Envelope> |
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> |
@felisida you are in the right tab now - those requests are sent, like every second to update the status of the gui. If you change something - e.g. switch a light on - there should be an extra request sent, that is a little bit different than the others. Instead of having a "SELECT", the payload should include a I am very well aware that all of you already take efforts that go beyond a regular bug report 😄 - and I want to thank you again for sticking to this and bearing with all those teething troubles 👏 |
before enter the code after the code <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">soapenv:BodyNO-PAYLOADNO-HASCHODENO-OPTIONALWEB-DOMUSPAD_SOAP5ef5aa22396435DML-SQLSELECTSELECT ID FROM DPADD_OBJECT WHERE TYPE='SAI2_USER' AND MSP = '1';65</soapenv:Body></soapenv:Envelope> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">soapenv:BodyNO-PAYLOADNO-HASCHODENO-OPTIONALWEB-DOMUSPAD_SOAP5ef5aa22396435DML-SQLSELECTSELECT * FROM DPADD_OBJECT WHERE ID IN (11174) ORDER BY ID ;60</soapenv:Body></soapenv:Envelope> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">soapenv:BodyNO-PAYLOADNO-HASCHODENO-OPTIONALWEB-DOMUSPAD_SOAP5ef5aa22396435DML-SQLSELECTSELECT * FROM DPADD_OBJECT_RELATION WHERE PARENTOBJ_ID IN (11174) OR CHILDOBJ_ID IN (11174) ORDER BY ORDER_NUM,ID ;115</soapenv:Body></soapenv:Envelope> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">soapenv:BodyNO-PAYLOADNO-HASCHODENO-OPTIONALWEB-DOMUSPAD_SOAP5ef5aa22396435DML-SQLSELECTSELECT * FROM DPADD_OBJECT WHERE NAME='_DPAD_DBCONSTANT_VIMAR_BYME_TRIGGEROBJECT_SAI2_CENTRAL_WARNING_14';106</soapenv:Body></soapenv:Envelope> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">soapenv:BodyNO-PAYLOADNO-HASCHODENO-OPTIONALWEB-DOMUSPAD_SOAP5ef5aa22396435DML-SQLSELECTSELECT D_O.*,D_WP.IS_EVENT AS IS_EVENT,D_WP.IS_EXECUTABLE AS IS_EXECUTABLE FROM DPADD_OBJECT AS D_O LEFT JOIN (SELECT CLASSNAME,IS_EVENT,IS_EXECUTABLE FROM DPAD_WEB_PHPCLASS) AS D_WP ON (D_O.PHPCLASS=D_WP.CLASSNAME) WHERE D_O.TYPE = 'SAI2_GROUP' ORDER BY ID ASC;262</soapenv:Body></soapenv:Envelope> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">soapenv:BodyNO-PAYLOADNO-HASCHODENO-OPTIONALWEB-DOMUSPAD_SOAP5ef5aa22396435DML-SQLSELECTSELECT D_O.*,D_WP.IS_EVENT AS IS_EVENT,D_WP.IS_EXECUTABLE AS IS_EXECUTABLE FROM DPADD_OBJECT AS D_O LEFT JOIN (SELECT CLASSNAME,IS_EVENT,IS_EXECUTABLE FROM DPAD_WEB_PHPCLASS) AS D_WP ON (D_O.PHPCLASS=D_WP.CLASSNAME) WHERE D_O.NAME='_DPAD_DBCONSTANT_VIMAR_BYME_TRIGGEROBJECT_SAI2_LOG_INFO' OR D_O.NAME='_DPAD_DBCONSTANT_VIMAR_BYME_TRIGGEROBJECT_SAI2_LOG_ALARM' ORDER BY ID ASC;376</soapenv:Body></soapenv:Envelope> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">soapenv:BodyNO-PAYLOADNO-HASCHODENO-OPTIONALWEB-DOMUSPAD_SOAP5ef5aa22396435DML-SQLSELECTSELECT ID, TIMESTAMP, EVENT_TYPE, ITEM_ID, ITEM_NUMBER, ITEM_NAME, LEVEL FROM DPADD_SAI2_LOG ORDER BY TIMESTAMP DESC, ID DESC LIMIT 3;134</soapenv:Body></soapenv:Envelope> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">soapenv:BodyNO-PAYLOADNO-HASCHODENO-OPTIONALWEB-DOMUSPAD_SOAP5ef5aa22396435DML-SQLSELECTSELECT ID,NAME,STATUS_ID,CURRENT_VALUE FROM DPADD_OBJECT WHERE ID IN (269,270,8548);84</soapenv:Body></soapenv:Envelope> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">soapenv:BodyNO-PAYLOADNO-HASCHODENO-OPTIONALWEB-DOMUSPAD_SOAP5ef5aa22396435DML-SQLSELECTSELECT * FROM DPADD_OBJECT_RELATION WHERE PARENTOBJ_ID IN (10958) OR CHILDOBJ_ID IN (10958) ORDER BY ORDER_NUM,ID ;115</soapenv:Body></soapenv:Envelope> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">soapenv:BodyNO-PAYLOADNO-HASCHODENO-OPTIONALWEB-DOMUSPAD_SOAP5ef5aa22396435DML-SQLSELECTSELECT * FROM DPADD_OBJECT_RELATION WHERE PARENTOBJ_ID IN (269,270) OR CHILDOBJ_ID IN (269,270) ORDER BY ORDER_NUM,ID ;119</soapenv:Body></soapenv:Envelope> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">soapenv:BodyNO-PAYLOADNO-HASCHODENO-OPTIONALWEB-DOMUSPAD_SOAP5ef5aa22396435DML-SQLSELECTSELECT * FROM DPADD_OBJECT_RELATION WHERE PARENTOBJ_ID IN (10959,10960,10961,10962,10963,10964,10965,10966,10967,10968,10969,10970) OR CHILDOBJ_ID IN (10959,10960,10961,10962,10963,10964,10965,10966,10967,10968,10969,10970) ORDER BY ORDER_NUM,ID ;247</soapenv:Body></soapenv:Envelope> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">soapenv:BodyNO-PAYLOADNO-HASCHODENO-OPTIONALWEB-DOMUSPAD_SOAP5ef5aa22396435DML-SQLSELECTSELECT DISTINCT DP.* FROM DPADD_RENDERING_PROTOTYPE AS DP INNER JOIN DPADD_RENDERING_VIEW_PROTOTYPE AS DWP ON (DP.ID=DWP.PROTOTYPE_ID) WHERE ((DWP.RENDERING_ID IN (622)) AND DP.THEME='vimar') ORDER BY DP.ID ;208</soapenv:Body></soapenv:Envelope> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">soapenv:BodyNO-PAYLOADNO-HASCHODENO-OPTIONALWEB-DOMUSPAD_SOAP5ef5aa22396435DML-SQLSELECTSELECT ID,NAME,STATUS_ID,CURRENT_VALUE FROM DPADD_OBJECT WHERE ID IN (269,270,8548,10958,10959,10960,10961,10962,10963,10964,10965,10966,10967,10968,10969,10970,10971,10978,10985,10992,10999,11006,11013,11020,11027,11034,11041,11048,11055,11062,11069,11076);258</soapenv:Body></soapenv:Envelope> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">soapenv:BodyNO-PAYLOADNO-HASCHODENO-OPTIONALWEB-DOMUSPAD_SOAP5ef5aa22396435DML-SQLSELECTSELECT ID,NAME,STATUS_ID,CURRENT_VALUE FROM DPADD_OBJECT WHERE ID IN (269,270,273,8548,10958,10959,10960,10961,10962,10963,10964,10965,10966,10967,10968,10969,10970,10971,10978,10985,10992,10999,11006,11013,11020,11027,11034,11041,11048,11055,11062,11069,11076);262</soapenv:Body></soapenv:Envelope> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">soapenv:BodyNO-PAYLOADNO-HASCHODENO-OPTIONALWEB-DOMUSPAD_SOAP5ef5aa22396435DML-SQLSELECTSELECT ID,NAME,STATUS_ID,CURRENT_VALUE FROM DPADD_OBJECT WHERE ID IN (269,270,273,8548,10958,10959,10960,10961,10962,10963,10964,10965,10966,10967,10968,10969,10970,10971,10978,10985,10992,10999,11006,11013,11020,11027,11034,11041,11048,11055,11062,11069,11076);262</soapenv:Body></soapenv:Envelope> when I press on the gear button <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">soapenv:BodyNO-PAYLOADNO-HASCHODENO-OPTIONALWEB-DOMUSPAD_SOAP5ef5aa22396435DML-SQLSELECTSELECT * FROM DPADD_OBJECT WHERE NAME='_DPAD_DBCONSTANT_VIMAR_BYME_TRIGGEROBJECT_SAI2_CENTRAL_WARNING_14';106</soapenv:Body></soapenv:Envelope> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">soapenv:BodyNO-PAYLOADNO-HASCHODENO-OPTIONALWEB-DOMUSPAD_SOAP5ef5aa22396435DML-SQLSELECTSELECT D_O.*,D_WP.IS_EVENT AS IS_EVENT,D_WP.IS_EXECUTABLE AS IS_EXECUTABLE FROM DPADD_OBJECT AS D_O LEFT JOIN (SELECT CLASSNAME,IS_EVENT,IS_EXECUTABLE FROM DPAD_WEB_PHPCLASS) AS D_WP ON (D_O.PHPCLASS=D_WP.CLASSNAME) WHERE D_O.TYPE = 'SAI2_GROUP' ORDER BY ID ASC;262</soapenv:Body></soapenv:Envelope> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">soapenv:BodyNO-PAYLOADNO-HASCHODENO-OPTIONALWEB-DOMUSPAD_SOAP5ef5aa22396435DML-SQLSELECTSELECT * FROM DPADD_OBJECT_RELATION WHERE PARENTOBJ_ID IN (273) OR CHILDOBJ_ID IN (273) ORDER BY ORDER_NUM,ID ;111</soapenv:Body></soapenv:Envelope> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">soapenv:BodyNO-PAYLOADNO-HASCHODENO-OPTIONALWEB-DOMUSPAD_SOAP5ef5aa22396435DML-SQLSELECTSELECT * FROM DPADD_OBJECT_RELATION WHERE PARENTOBJ_ID IN (10958) OR CHILDOBJ_ID IN (10958) ORDER BY ORDER_NUM,ID ;115</soapenv:Body></soapenv:Envelope> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">soapenv:BodyNO-PAYLOADNO-HASCHODENO-OPTIONALWEB-DOMUSPAD_SOAP5ef5aa22396435DML-SQLSELECTSELECT DISTINCT DP.* FROM DPADD_RENDERING_PROTOTYPE AS DP INNER JOIN DPADD_RENDERING_VIEW_PROTOTYPE AS DWP ON (DP.ID=DWP.PROTOTYPE_ID) WHERE ((DWP.RENDERING_ID IN (622)) AND DP.THEME='vimar') ORDER BY DP.ID ;208</soapenv:Body></soapenv:Envelope> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">soapenv:BodyNO-PAYLOADNO-HASCHODENO-OPTIONALWEB-DOMUSPAD_SOAP5ef5aa22396435DML-SQLSELECTSELECT * FROM DPADD_OBJECT_RELATION WHERE PARENTOBJ_ID IN (10959,10960,10961,10962,10963,10964,10965,10966,10967,10968,10969,10970) OR CHILDOBJ_ID IN (10959,10960,10961,10962,10963,10964,10965,10966,10967,10968,10969,10970) ORDER BY ORDER_NUM,ID ;247</soapenv:Body></soapenv:Envelope> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">soapenv:BodyNO-PAYLOADNO-HASCHODENO-OPTIONALWEB-DOMUSPAD_SOAP5ef5aa22396435DML-SQLSELECTSELECT * FROM DPADD_OBJECT_RELATION WHERE PARENTOBJ_ID IN (10985,10992,10999,11006,11013,11020,11027,11034,11041,11048,11055,11062,11069,11076,10971,10978) OR CHILDOBJ_ID IN (10985,10992,10999,11006,11013,11020,11027,11034,11041,11048,11055,11062,11069,11076,10971,10978) ORDER BY ORDER_NUM,ID ;295</soapenv:Body></soapenv:Envelope> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">soapenv:BodyNO-PAYLOADNO-HASCHODENO-OPTIONALWEB-DOMUSPAD_SOAP5ef5aa22396435DML-SQLSELECTSELECT * FROM DPADD_OBJECT WHERE ID IN (10972,10973,10974,10975,10976,10977,10979,10980,10981,10982,10983,10984,10986,10987,10988,10989,10990,10991,10993,10994,10995,10996,10997,10998,11000,11001,11002,11003,11004,11005,11007,11008,11009,11010,11011,11012,11014,11015,11016,11017,11018,11019,11021,11022,11023,11024,11025,11026,11028,11029,11030,11031,11032,11033,11035,11036,11037,11038,11039,11040,11042,11043,11044,11045,11046,11047,11049,11050,11051,11052,11053,11054,11056,11057,11058,11059,11060,11061,11063,11064,11065,11066,11067,11068,11070,11071,11072,11073,11074,11075,11077,11078,11079,11080,11081,11082) ORDER BY ID ;630</soapenv:Body></soapenv:Envelope> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">soapenv:BodyNO-PAYLOADNO-HASCHODENO-OPTIONALWEB-DOMUSPAD_SOAP5ef5aa22396435DML-SQLSELECTSELECT ID, NAME, CURRENT_VALUE, MSP FROM DPADD_OBJECT WHERE TYPE='SAI2_ZONE' AND ID IN (10985,10992,10999,11006,11013,11020,11027,11034,11041,11048,11055,11062,11069,11076,10971,10978) ORDER BY CAST(MSP AS INTEGER);215</soapenv:Body></soapenv:Envelope> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">soapenv:BodyNO-PAYLOADNO-HASCHODENO-OPTIONALWEB-DOMUSPAD_SOAP5ef5aa22396435DML-SQLSELECTSELECT ID,NAME,STATUS_ID,CURRENT_VALUE FROM DPADD_OBJECT WHERE ID IN (269,270,273,8548,10958,10959,10960,10961,10962,10963,10964,10965,10966,10967,10968,10969,10970,10971,10978,10985,10992,10999,11006,11013,11020,11027,11034,11041,11048,11055,11062,11069,11076);262</soapenv:Body></soapenv:Envelope> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">soapenv:BodyNO-PAYLOADNO-HASCHODENO-OPTIONALWEB-DOMUSPAD_SOAP5ef5aa22396435DML-SQLSELECTSELECT ID, TIMESTAMP, EVENT_TYPE, ITEM_ID, ITEM_NUMBER, ITEM_NAME, LEVEL FROM DPADD_SAI2_LOG ORDER BY TIMESTAMP DESC, ID DESC LIMIT 3;134</soapenv:Body></soapenv:Envelope> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">soapenv:BodyNO-PAYLOADNO-HASCHODENO-OPTIONALWEB-DOMUSPAD_SOAP5ef5aa22396435DML-SQLSELECTSELECT ID,NAME,STATUS_ID,CURRENT_VALUE FROM DPADD_OBJECT WHERE ID IN (269,270,273,8548,10958,10959,10960,10961,10962,10963,10964,10965,10966,10967,10968,10969,10970,10971,10978,10985,10992,10999,11006,11013,11020,11027,11034,11041,11048,11055,11062,11069,11076);262</soapenv:Body></soapenv:Envelope> |
<SOAP-ENV:Envelope xmlns:SOAP-ENV xmlns:SOAP-ENC xmlns:xsi xmlns:xsd xmlns:ns <SOAP-ENV:Body SOAP-ENV:encodingStyle <ns:service-databasesocketoperationResponse <result-len Response payload length: 8057 <result DPCM-0000 <payload-len 8057 <payload Response: DBMG-000 </ns:service-databasesocketoperationResponse> |
no updates for this? |
@tempod hi ! it should say something like "Unsupported object returned from web server .." or "Unknown object returned from web server:" followed by the available states. |
I don't have the SAI but the By-Alarm FIRST SCREEN CODE
SECOND SCREEN CODE (after secure code)
THIRD SCREEN CODE (before exclude "camera")
FOURTH SCREEN CODE (after exclude "camera")
debug mode does not show any components |
I see - but I meant debug mode in home-assistant - right? |
Yes, is in debug mode:
but no show components for allarm. |
I see - as I expected I do not even get the SAI devices listed from the web server :\ |
Hi h4de5, If you want some doc or trials count on me.
|
the "autodiscovery" is responsible to get access to the devices configured within vimar. without this, I cannot add them to HA. even if we add a flag indicating that there is a SAI system in place, I would still have no way to query for any of the sensors. you may find a way to get the right query from your own installation using the method described here: https://github.com/h4de5/home-assistant-vimar/blob/master/CONTRIBUTING.md but be warned, that this may take quite a while to figure out the right calls and I still may not be able to add them the way it would make sense for a SAI system. |
Maybe the first milestone can be the "Zone" or "Area" handling. The single sensor handling can be added later, if neded. For now the Login: This is the result of pressing the OK button on the virtual keypad showed by "Antiintrusione" tab.
Can I emulate the calls via SoapUI? Maybe in this way can give you more infos |
Well... with SoapUI the Login is working without any problems on first try... i'll followup with more infos. |
So.....here we are... I hope that this is enough data to kickstart the coding process ^__^', let me know if you need someting else. Login: Request:
Response:
List&Status the Zones (Groups) Request:
Response:
List&Status Children Group: Request:
Response:
Manage Area(Single Group): Request:
Response:
Get Info About SAI_USER: Request:
Response:
Manage all areas: Request:
Response:
|
Hi, can I help further? The project is alive? |
Hi - yes it is. I just need to work on other things currently: |
I've understood. Take your time then, you had to be paid by Vimar for your efforts... Have you ever considered donations by paypal? |
Hi, any news? I'm actively using the integration and I must say that is great. |
Hi, |
Hi, is this feature in development? Or it's dead? |
open for PRs. |
Any updates on implementing the alarm part from the webserver into HA? Our alarm bus is separated from the normal vimar bus. But it would be nice to have access to thoose parts as well. For example, the window sensors for automation. |
you need a programmer interface an a .db file of your plant. |
/edit: reformat list
The text was updated successfully, but these errors were encountered: