[mh] Misterhouse and Tasmota and other MQTT/HTML devices

Giles Godart-Brown <[email protected]>
Newsgroups gmane.comp.misc.misterhouse.user
Message-ID <[email protected]>
Starting a new thread on this topic.

_My Experiences to date_

Here is my experience of using Misterhouse to interface with Tasmota 
devices;

By default to turn a relay (like a sonoff S20)  on and off from 
Misterhouse you need to set it up in MH like this;

$Workshop_cutout_relay = new mqtt_Item( $mqtt_1, 
"cmnd/Workshop_cutout/POWER" );

The misterhouse will publish appropriate on and off commands to this device.

There are a few wrinkles in the MQTT  implementation in MH, so here is 
what I have found works for me;

I normally use a generic MH variable for my switches in a group called 
IPswitches, with a member change handler that sends the appropriate html 
(http://ipaddress/cm?cmnd=Power on) when MH changes its state, this is 
for historic reasons and I really should change them all to native MQTT 
devices as above (its on a very long list of things to do), but as Jeff 
has said this way you dont HAVE to have a working  MQTT broker to 
communicate with these devices.

Whenever a Tasmota switch changes state (or any sensor for that matter) 
it publishes an MQTT message that changes the value of an MQTT variable 
in Misterhouse e.g.
If I look at the console for my outside xmas tree light switch and press 
the button on it, it both toggles the lights  locally and sends this 
MQTT message;

topic= stat/Outside_tree_lights/POWER  payload = ON

so if you have a device set up in MH like;

$Outside_tree_lights = new mqtt_Item( $mqtt_1, 
"stat/Outside_tree_lights/POWER" );

The MH value will be kept in sync with the state of the switch. This is 
a bit of a kludge because the stat message is sent because the relay 
changed state, and not the switch.

In another  example I use this for my doorbell switch that's connected 
to a WEMOS D1 mini running Tasmota. and is defined in MH as 
$Front_doorbell = new mqtt_Item( $mqtt_1, "stat/Front_doorbell/SWITCH" );

You can also use rules in tasmota to make it publish any message you 
like e.g.

Rule1 on Switch1#state do Publish stat/MHdevicename/whatever %value%

Here is the rule I use for PIRs that are connected to Wemos D1 Minis to 
change it so they turn on the local LED and send motion and still 
instead of on and off

Rule1
on Switch1#state=1 do Backlog LedPower1 1; Publish stat/%topic%/PIR1 
motion endon
on Switch1#state=0 do Backlog LedPower1 0; Publish stat/%topic%/PIR1 
still endon

If its more complex, e.g. 1-wire temp sensors then by default Tasmota 
sends a JSON encoded message e.g.

tele/Roof_1_temperatures/SENSOR = 
{"Time":"2020-12-12T23:26:03","DS18S20-1":{"Id":"0008019F913C","Temperature":18.5},"DS18S20-2":{"Id":"0008019FAADB","Temperature":21.1},"DS18S20-3":{"Id":"000801B89032","Temperature":19.5},"DS18S20-4":{"Id":"000801F5AF58","Temperature":48.0},"DS18B20-5":{"Id":"0000026B4C3F","Temperature":19.8},"DS18B20-6":{"Id":"000002E07AEE","Temperature":14.6},"TempUnit":"C"}

However I've found that MH filters out commands that start tele so I 
have a small listener process that subscribes to all tele/+/SENSOR 
topics and when it gets a message and  re publishes it as stat/+/SENSOR 
then I have in MH an item

$MQTT_Roof_1_temperatures =  new mqtt_Item( $mqtt_1, 
"stat/Roof_1_temperatures/SENSOR" );

I then use an on change handler for the  MH MQTT object 
Roof_1_temperatures to use JSON decode to translate the serial numbers 
into Room names and set up the temperatures.

As an aside, I  use the same listener to subscribe to tele/+/LWT and 
look for mqtt Last will and testament offline and online messages then 
email me when devices go on or off line. With the default settings it 
detects Tasmota devices within 15 seconds of them being disconnected.

_Propsed actions_

Jeff is working on a Table_A implementation to support Tasmota devices 
via http, I'd like to help by adding MQTT native support, I suggest 
something like;

MQTT_GATEWAY, name_of_gateway, LWT_topic e.g. MQTT_GATEWAY, 
mqtt1,tele/Misterhousemaster/LWT

Then for the device;

MQTT_DEVICE, name_of_device, name_of_gateway, topic, groups e.g. 
MQTT_DEVICE, Kitchen_lamp, mqtt1, cmnd/Workshop_cutout/POWER, Lamps|Kitchen

I'm assuming the ip address,port,  id and password etc.of the MQTT 
broker will be .ini parameters.

It would be really helpful if mqtt.pl could subscribe to more than one 
topic because Tasmotas default way of communicating sensor changes is 
via a tele rather than stat topic and it would save users from having to 
create rules on their devices for communicating with MH. I'd like to be 
able to have a .ini parameter like  mqtt_topic=stat/#,tele/# and have 
the appropriate devices receive the messages but I'm blowed if I can see 
where to make the change, can someone please help?

It would also be great to incorporate the LWT proposal above to 
regularly ping the broker so that external systems can verify that 
misterhouse is still up.

As we make progress I will  update the wiki with this and my notes about 
the Tasmota environment (like Tazmotizer, TDM , MQTTfx etc)

Regards

Giles

________________________________________________________
To unsubscribe from this list, go to: https://lists.sourceforge.net/lists/listinfo/misterhouse-users
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.