thermferm/mqtt.h

Fri, 19 Apr 2024 20:56:55 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Fri, 19 Apr 2024 20:56:55 +0200
changeset 689
f94b525f7563
parent 677
c867eb3f7fc1
permissions
-rw-r--r--

Create global_json() for all and expanded the data to the complete setup. Added design for the global setup.

499
602d9968960f Created mqtt sourcefiles. Use flags to trigger publish messages. The main source does not know and does not care if MQTT messages will be sent. Version 0.5.5
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1 #ifndef _MQTT_H
602d9968960f Created mqtt sourcefiles. Use flags to trigger publish messages. The main source does not know and does not care if MQTT messages will be sent. Version 0.5.5
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2 #define _MQTT_H
602d9968960f Created mqtt sourcefiles. Use flags to trigger publish messages. The main source does not know and does not care if MQTT messages will be sent. Version 0.5.5
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
3
602d9968960f Created mqtt sourcefiles. Use flags to trigger publish messages. The main source does not know and does not care if MQTT messages will be sent. Version 0.5.5
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
4
602d9968960f Created mqtt sourcefiles. Use flags to trigger publish messages. The main source does not know and does not care if MQTT messages will be sent. Version 0.5.5
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
5 #define STATUS_CONNECTING 0
602d9968960f Created mqtt sourcefiles. Use flags to trigger publish messages. The main source does not know and does not care if MQTT messages will be sent. Version 0.5.5
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
6 #define STATUS_CONNACK_RECVD 1
602d9968960f Created mqtt sourcefiles. Use flags to trigger publish messages. The main source does not know and does not care if MQTT messages will be sent. Version 0.5.5
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
7 #define STATUS_WAITING 2
602d9968960f Created mqtt sourcefiles. Use flags to trigger publish messages. The main source does not know and does not care if MQTT messages will be sent. Version 0.5.5
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
8
598
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
9 #ifndef HAVE_WIRINGPI_H
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
10
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
11 // Pi model types and version numbers
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
12 // Intended for the GPIO program Use at your own risk.
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
13
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
14 #define PI_MODEL_A 0
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
15 #define PI_MODEL_B 1
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
16 #define PI_MODEL_AP 2
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
17 #define PI_MODEL_BP 3
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
18 #define PI_MODEL_2 4
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
19 #define PI_ALPHA 5
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
20 #define PI_MODEL_CM 6
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
21 #define PI_MODEL_07 7
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
22 #define PI_MODEL_3B 8
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
23 #define PI_MODEL_ZERO 9
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
24 #define PI_MODEL_CM3 10
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
25 #define PI_MODEL_ZERO_W 12
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
26 #define PI_MODEL_3BP 13
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
27 #define PI_MODEL_3AP 14
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
28 #define PI_MODEL_CM3P 16
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
29
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
30 #define PI_VERSION_1 0
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
31 #define PI_VERSION_1_1 1
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
32 #define PI_VERSION_1_2 2
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
33 #define PI_VERSION_2 3
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
34
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
35 #define PI_MAKER_SONY 0
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
36 #define PI_MAKER_EGOMAN 1
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
37 #define PI_MAKER_EMBEST 2
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
38 #define PI_MAKER_UNKNOWN 3
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
39
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
40
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
41 #endif
363dc36d2450 Added wiringPi hardware detection code.
Michiel Broek <mbroek@mbse.eu>
parents: 557
diff changeset
42
499
602d9968960f Created mqtt sourcefiles. Use flags to trigger publish messages. The main source does not know and does not care if MQTT messages will be sent. Version 0.5.5
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
43
602d9968960f Created mqtt sourcefiles. Use flags to trigger publish messages. The main source does not know and does not care if MQTT messages will be sent. Version 0.5.5
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
44 /*
602d9968960f Created mqtt sourcefiles. Use flags to trigger publish messages. The main source does not know and does not care if MQTT messages will be sent. Version 0.5.5
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
45 * Public functions
602d9968960f Created mqtt sourcefiles. Use flags to trigger publish messages. The main source does not know and does not care if MQTT messages will be sent. Version 0.5.5
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
46 */
515
7ab5cf2afc0c Only send domoticz changed values
Michiel Broek <mbroek@mbse.eu>
parents: 506
diff changeset
47 void pub_domoticz_temp(int, int);
7ab5cf2afc0c Only send domoticz changed values
Michiel Broek <mbroek@mbse.eu>
parents: 506
diff changeset
48 void pub_domoticz_output(int, int);
499
602d9968960f Created mqtt sourcefiles. Use flags to trigger publish messages. The main source does not know and does not care if MQTT messages will be sent. Version 0.5.5
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
49 void mqtt_connect(void);
602d9968960f Created mqtt sourcefiles. Use flags to trigger publish messages. The main source does not know and does not care if MQTT messages will be sent. Version 0.5.5
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
50 void mqtt_disconnect(void);
533
49580ca85ab7 Versie 0.6.3. MQTT device berichten alleen als een fermenter ingeschakeld is. MQTT fermenter birth en death berichhten als een fementer in of uitgeschakeld wordt. MQTT node death bericht bij normaal afsluiten van de daemon. Alle MQTT persistent berichten worden nu goed opgeruikmd.
Michiel Broek <mbroek@mbse.eu>
parents: 515
diff changeset
51
689
f94b525f7563 Create global_json() for all and expanded the data to the complete setup. Added design for the global setup.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
52 char *global_json(void);
677
c867eb3f7fc1 Server json unit data list added
Michiel Broek <mbroek@mbse.eu>
parents: 598
diff changeset
53 char *unit_data(units_list *unit, bool birth);
c867eb3f7fc1 Server json unit data list added
Michiel Broek <mbroek@mbse.eu>
parents: 598
diff changeset
54
533
49580ca85ab7 Versie 0.6.3. MQTT device berichten alleen als een fermenter ingeschakeld is. MQTT fermenter birth en death berichhten als een fementer in of uitgeschakeld wordt. MQTT node death bericht bij normaal afsluiten van de daemon. Alle MQTT persistent berichten worden nu goed opgeruikmd.
Michiel Broek <mbroek@mbse.eu>
parents: 515
diff changeset
55 /**
547
0e4d4b45249f Versie 0.8.0. Fixed eerste DBIRTH fout geinitialiseerde waardes.
Michiel Broek <mbroek@mbse.eu>
parents: 545
diff changeset
56 * @brief Publish DBIRTH for all active units. If there are no active units, don't
0e4d4b45249f Versie 0.8.0. Fixed eerste DBIRTH fout geinitialiseerde waardes.
Michiel Broek <mbroek@mbse.eu>
parents: 545
diff changeset
57 * publish anything. This function should be called at program start.
0e4d4b45249f Versie 0.8.0. Fixed eerste DBIRTH fout geinitialiseerde waardes.
Michiel Broek <mbroek@mbse.eu>
parents: 545
diff changeset
58 */
0e4d4b45249f Versie 0.8.0. Fixed eerste DBIRTH fout geinitialiseerde waardes.
Michiel Broek <mbroek@mbse.eu>
parents: 545
diff changeset
59 void publishDBirthAll(void);
0e4d4b45249f Versie 0.8.0. Fixed eerste DBIRTH fout geinitialiseerde waardes.
Michiel Broek <mbroek@mbse.eu>
parents: 545
diff changeset
60
0e4d4b45249f Versie 0.8.0. Fixed eerste DBIRTH fout geinitialiseerde waardes.
Michiel Broek <mbroek@mbse.eu>
parents: 545
diff changeset
61 /**
533
49580ca85ab7 Versie 0.6.3. MQTT device berichten alleen als een fermenter ingeschakeld is. MQTT fermenter birth en death berichhten als een fementer in of uitgeschakeld wordt. MQTT node death bericht bij normaal afsluiten van de daemon. Alle MQTT persistent berichten worden nu goed opgeruikmd.
Michiel Broek <mbroek@mbse.eu>
parents: 515
diff changeset
62 * @brief Publish unit data.
49580ca85ab7 Versie 0.6.3. MQTT device berichten alleen als een fermenter ingeschakeld is. MQTT fermenter birth en death berichhten als een fementer in of uitgeschakeld wordt. MQTT node death bericht bij normaal afsluiten van de daemon. Alle MQTT persistent berichten worden nu goed opgeruikmd.
Michiel Broek <mbroek@mbse.eu>
parents: 515
diff changeset
63 * @param unit Unit data structure.
49580ca85ab7 Versie 0.6.3. MQTT device berichten alleen als een fermenter ingeschakeld is. MQTT fermenter birth en death berichhten als een fementer in of uitgeschakeld wordt. MQTT node death bericht bij normaal afsluiten van de daemon. Alle MQTT persistent berichten worden nu goed opgeruikmd.
Michiel Broek <mbroek@mbse.eu>
parents: 515
diff changeset
64 */
49580ca85ab7 Versie 0.6.3. MQTT device berichten alleen als een fermenter ingeschakeld is. MQTT fermenter birth en death berichhten als een fementer in of uitgeschakeld wordt. MQTT node death bericht bij normaal afsluiten van de daemon. Alle MQTT persistent berichten worden nu goed opgeruikmd.
Michiel Broek <mbroek@mbse.eu>
parents: 515
diff changeset
65 void publishDData(units_list *unit);
49580ca85ab7 Versie 0.6.3. MQTT device berichten alleen als een fermenter ingeschakeld is. MQTT fermenter birth en death berichhten als een fementer in of uitgeschakeld wordt. MQTT node death bericht bij normaal afsluiten van de daemon. Alle MQTT persistent berichten worden nu goed opgeruikmd.
Michiel Broek <mbroek@mbse.eu>
parents: 515
diff changeset
66
49580ca85ab7 Versie 0.6.3. MQTT device berichten alleen als een fermenter ingeschakeld is. MQTT fermenter birth en death berichhten als een fementer in of uitgeschakeld wordt. MQTT node death bericht bij normaal afsluiten van de daemon. Alle MQTT persistent berichten worden nu goed opgeruikmd.
Michiel Broek <mbroek@mbse.eu>
parents: 515
diff changeset
67 /**
49580ca85ab7 Versie 0.6.3. MQTT device berichten alleen als een fermenter ingeschakeld is. MQTT fermenter birth en death berichhten als een fementer in of uitgeschakeld wordt. MQTT node death bericht bij normaal afsluiten van de daemon. Alle MQTT persistent berichten worden nu goed opgeruikmd.
Michiel Broek <mbroek@mbse.eu>
parents: 515
diff changeset
68 * @brief Publish unit birth.
49580ca85ab7 Versie 0.6.3. MQTT device berichten alleen als een fermenter ingeschakeld is. MQTT fermenter birth en death berichhten als een fementer in of uitgeschakeld wordt. MQTT node death bericht bij normaal afsluiten van de daemon. Alle MQTT persistent berichten worden nu goed opgeruikmd.
Michiel Broek <mbroek@mbse.eu>
parents: 515
diff changeset
69 * @param unit Unit data structure.
49580ca85ab7 Versie 0.6.3. MQTT device berichten alleen als een fermenter ingeschakeld is. MQTT fermenter birth en death berichhten als een fementer in of uitgeschakeld wordt. MQTT node death bericht bij normaal afsluiten van de daemon. Alle MQTT persistent berichten worden nu goed opgeruikmd.
Michiel Broek <mbroek@mbse.eu>
parents: 515
diff changeset
70 */
49580ca85ab7 Versie 0.6.3. MQTT device berichten alleen als een fermenter ingeschakeld is. MQTT fermenter birth en death berichhten als een fementer in of uitgeschakeld wordt. MQTT node death bericht bij normaal afsluiten van de daemon. Alle MQTT persistent berichten worden nu goed opgeruikmd.
Michiel Broek <mbroek@mbse.eu>
parents: 515
diff changeset
71 void publishDBirth(units_list *unit);
49580ca85ab7 Versie 0.6.3. MQTT device berichten alleen als een fermenter ingeschakeld is. MQTT fermenter birth en death berichhten als een fementer in of uitgeschakeld wordt. MQTT node death bericht bij normaal afsluiten van de daemon. Alle MQTT persistent berichten worden nu goed opgeruikmd.
Michiel Broek <mbroek@mbse.eu>
parents: 515
diff changeset
72
49580ca85ab7 Versie 0.6.3. MQTT device berichten alleen als een fermenter ingeschakeld is. MQTT fermenter birth en death berichhten als een fementer in of uitgeschakeld wordt. MQTT node death bericht bij normaal afsluiten van de daemon. Alle MQTT persistent berichten worden nu goed opgeruikmd.
Michiel Broek <mbroek@mbse.eu>
parents: 515
diff changeset
73 /**
49580ca85ab7 Versie 0.6.3. MQTT device berichten alleen als een fermenter ingeschakeld is. MQTT fermenter birth en death berichhten als een fementer in of uitgeschakeld wordt. MQTT node death bericht bij normaal afsluiten van de daemon. Alle MQTT persistent berichten worden nu goed opgeruikmd.
Michiel Broek <mbroek@mbse.eu>
parents: 515
diff changeset
74 * @brief Publish death of a unit.
49580ca85ab7 Versie 0.6.3. MQTT device berichten alleen als een fermenter ingeschakeld is. MQTT fermenter birth en death berichhten als een fementer in of uitgeschakeld wordt. MQTT node death bericht bij normaal afsluiten van de daemon. Alle MQTT persistent berichten worden nu goed opgeruikmd.
Michiel Broek <mbroek@mbse.eu>
parents: 515
diff changeset
75 * @param unit Unit data structure.
49580ca85ab7 Versie 0.6.3. MQTT device berichten alleen als een fermenter ingeschakeld is. MQTT fermenter birth en death berichhten als een fementer in of uitgeschakeld wordt. MQTT node death bericht bij normaal afsluiten van de daemon. Alle MQTT persistent berichten worden nu goed opgeruikmd.
Michiel Broek <mbroek@mbse.eu>
parents: 515
diff changeset
76 */
49580ca85ab7 Versie 0.6.3. MQTT device berichten alleen als een fermenter ingeschakeld is. MQTT fermenter birth en death berichhten als een fementer in of uitgeschakeld wordt. MQTT node death bericht bij normaal afsluiten van de daemon. Alle MQTT persistent berichten worden nu goed opgeruikmd.
Michiel Broek <mbroek@mbse.eu>
parents: 515
diff changeset
77 void publishDDeath(units_list *unit);
49580ca85ab7 Versie 0.6.3. MQTT device berichten alleen als een fermenter ingeschakeld is. MQTT fermenter birth en death berichhten als een fementer in of uitgeschakeld wordt. MQTT node death bericht bij normaal afsluiten van de daemon. Alle MQTT persistent berichten worden nu goed opgeruikmd.
Michiel Broek <mbroek@mbse.eu>
parents: 515
diff changeset
78
49580ca85ab7 Versie 0.6.3. MQTT device berichten alleen als een fermenter ingeschakeld is. MQTT fermenter birth en death berichhten als een fementer in of uitgeschakeld wordt. MQTT node death bericht bij normaal afsluiten van de daemon. Alle MQTT persistent berichten worden nu goed opgeruikmd.
Michiel Broek <mbroek@mbse.eu>
parents: 515
diff changeset
79 /**
554
ab9f22ab57b5 Versie 0.8.5. Implementatie product code en product naam. Implementatie DLOG MQTT berichten. Verminderde server rotocol debug berichten.
Michiel Broek <mbroek@mbse.eu>
parents: 547
diff changeset
80 * @brief Publish log data.
ab9f22ab57b5 Versie 0.8.5. Implementatie product code en product naam. Implementatie DLOG MQTT berichten. Verminderde server rotocol debug berichten.
Michiel Broek <mbroek@mbse.eu>
parents: 547
diff changeset
81 * @param unit Unit data structure.
ab9f22ab57b5 Versie 0.8.5. Implementatie product code en product naam. Implementatie DLOG MQTT berichten. Verminderde server rotocol debug berichten.
Michiel Broek <mbroek@mbse.eu>
parents: 547
diff changeset
82 */
ab9f22ab57b5 Versie 0.8.5. Implementatie product code en product naam. Implementatie DLOG MQTT berichten. Verminderde server rotocol debug berichten.
Michiel Broek <mbroek@mbse.eu>
parents: 547
diff changeset
83 void publishDLog(units_list *unit);
ab9f22ab57b5 Versie 0.8.5. Implementatie product code en product naam. Implementatie DLOG MQTT berichten. Verminderde server rotocol debug berichten.
Michiel Broek <mbroek@mbse.eu>
parents: 547
diff changeset
84
ab9f22ab57b5 Versie 0.8.5. Implementatie product code en product naam. Implementatie DLOG MQTT berichten. Verminderde server rotocol debug berichten.
Michiel Broek <mbroek@mbse.eu>
parents: 547
diff changeset
85 /**
533
49580ca85ab7 Versie 0.6.3. MQTT device berichten alleen als een fermenter ingeschakeld is. MQTT fermenter birth en death berichhten als een fementer in of uitgeschakeld wordt. MQTT node death bericht bij normaal afsluiten van de daemon. Alle MQTT persistent berichten worden nu goed opgeruikmd.
Michiel Broek <mbroek@mbse.eu>
parents: 515
diff changeset
86 * @brief Publish Node data or birth message.
49580ca85ab7 Versie 0.6.3. MQTT device berichten alleen als een fermenter ingeschakeld is. MQTT fermenter birth en death berichhten als een fementer in of uitgeschakeld wordt. MQTT node death bericht bij normaal afsluiten van de daemon. Alle MQTT persistent berichten worden nu goed opgeruikmd.
Michiel Broek <mbroek@mbse.eu>
parents: 515
diff changeset
87 * @param birth If true send a birh message, else a regular data update.
49580ca85ab7 Versie 0.6.3. MQTT device berichten alleen als een fermenter ingeschakeld is. MQTT fermenter birth en death berichhten als een fementer in of uitgeschakeld wordt. MQTT node death bericht bij normaal afsluiten van de daemon. Alle MQTT persistent berichten worden nu goed opgeruikmd.
Michiel Broek <mbroek@mbse.eu>
parents: 515
diff changeset
88 * @param flag Bit flag to enable control messages.
49580ca85ab7 Versie 0.6.3. MQTT device berichten alleen als een fermenter ingeschakeld is. MQTT fermenter birth en death berichhten als een fementer in of uitgeschakeld wordt. MQTT node death bericht bij normaal afsluiten van de daemon. Alle MQTT persistent berichten worden nu goed opgeruikmd.
Michiel Broek <mbroek@mbse.eu>
parents: 515
diff changeset
89 */
49580ca85ab7 Versie 0.6.3. MQTT device berichten alleen als een fermenter ingeschakeld is. MQTT fermenter birth en death berichhten als een fementer in of uitgeschakeld wordt. MQTT node death bericht bij normaal afsluiten van de daemon. Alle MQTT persistent berichten worden nu goed opgeruikmd.
Michiel Broek <mbroek@mbse.eu>
parents: 515
diff changeset
90 void publishNData(bool birth, int flag);
499
602d9968960f Created mqtt sourcefiles. Use flags to trigger publish messages. The main source does not know and does not care if MQTT messages will be sent. Version 0.5.5
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
91
545
c382a6c58c20 Fixed compiling whithout mqtt support.
Michiel Broek <mbroek@mbse.eu>
parents: 533
diff changeset
92
c382a6c58c20 Fixed compiling whithout mqtt support.
Michiel Broek <mbroek@mbse.eu>
parents: 533
diff changeset
93 #endif

mercurial