Tasmotalla sai aikayksinkertaisesti luotua todella monipuolisen huoneanturin. Lämpötilan ja kosteuden lisäksi halusin takan ja puilla lämmitettävän saunan takia häkämittauksen. Laiteen piti myös tunnistaa huoneessa olemista sekä toimia infrapuna ja 433 tai ikea/hue laitteiden siltana. Hinnan piti olla myös halpa. Osilla hinta jossain 20€ paikkeilla.
MQTT viesteinä tulee sensorit teleperiod asetuksen tahdissa tyyliin..
Koodi:
tele/xxxxxxxxx/SENSOR
{
"Time" : "2019-01-03T22:07:46",
"ANALOG" : {
"A0" : 479
},
"DS18S20" : {
"Temperature" : 23.9
},
"DHT11" : {
"Temperature" : 24.4,
"Humidity" : 13.0
},
"TempUnit" : "C"
}
433MHz MQTT viestit suoraan Tasmotalta tässä muodossa.
Koodi:
tele/xxxxxxxxxx/RESULT
{"SerialReceived":"20;B1;NewKaku;ID=xxxxxxxxxx;SWITCH=10;CMD=ON;"}
Infrapuna vastaanottaessa
Koodi:
tele/xxxxxxxxxx/RESULT
{"IrReceived":{"Protocol":"SAMSUNG","Bits":32,"Data":"E0E040BF"}}
NodeMcu pohjaksi jolle tehdään.
- MQ-7 moduli ebaysta häkäanturiksi. A0 modulilta A0 NodeMcu-kortille. Tasmotan firmwareen #define USE_ADC_VCC kohta pois käytöstä eli //#define USE_ADC_VCC
(Tämän hälytyslähdön joka potikka säätöinen voi kytkeä vaikka GPIO4 Switch2 tai jättää kytkemättä.)
- DHT11 kosteusmittausta varten (+ 5k6 ylösvetovastus). GPIO14
- DS18S20 tarkempaa lämpötilamittausta varten (+ 5k6 ylösvetovastus). GPIO5
- Arduino IR-trasmitter moduli ebaysta ir-kaukosäätimien lähetystä varten. GPIO13 liitäntään. Tasmotan firmwaressa #define USE_IR_REMOTE
- Arduino IR-receiver moduli ebaysta ir-kaukosäädintä vastaanottoa varten. GPIO15 liitäntään. Tasmotan firmwaressa #define USE_IR_RECEIVE
- Tutka-anturit ebaysta. GPIO12 Switch1
- Sarjaliikenne johon RFLink arduino-kortti kiinnitetään käyttäen hardware serial eli TX GPIO1 ja RX GPIO3. Tasmotan firmwaressa #define USE_SERIAL_BRIDGE
Merkinnät aika itsesään selittäviä..
NodeMCU piirin konfit Tasmotas
Lisäksi käydään poistamassa sarjaliikenteen logit laittamalla Serial log level 0 None tilaan.
Node-RED 433MHz vastaanottamisen puolelta missä vastaanotan MQTT-viestit muuttaen muotoon jonka OpenHAB ymmärtää ja lähettäen takaisin MQTT palvelimelle OpenHABin poimittavaksi items konfissa.
Eli kun Tasmota kuuluttaa MQTT info-viesteillään lykätään sille Baudrate funktiossa
Koodi:
msg.topic = "cmnd/xxxxxxxxxx/baudrate";
msg.payload = "57600";
return msg;
Sen lisäksi odotellaan hetki ja varmuuden vuoksi pingataan sitä. Tämä pakottaa oikeaan tilaan jos jostain syystä muuttanut tilaansa ensimmäisen lähetyksen jälkeisestä
Koodi:
msg.topic = "cmnd/xxxxxxxxxx/SerialSend";
msg.payload = "10;PING;";
return msg;
Parse Tasmota on
Koodi:
var tasmsg433 = {};
msg.payload = msg.payload.replace(/(\r\n|\n|\r)/gm,"");
var tasparts433 = msg.payload.split(":");
tasmsg433.p1 = tasparts433[0];
msg.payload = tasparts433[1];
msg.payload = msg.payload.slice(1,-2);
return msg;
Suurin osa tuosta Node-RED on valmiiksi netistä löytynyttä lisättynä Tasmota ja muutettuna vähän switch palikka protokollan mukaiseksi ID:n sijasta. Eli Property kohdassa on msg.msg433.name valintaperusteena ja RFLinkin käyttämä protokollan nimi kunkin lähdön kohdalla.
NewKaku jne.. funktio on
Koodi:
msg.payload ="";
msg.topic += msg.msg433.name + "/" + msg.msg433.ID + "/" + msg.msg433.SWITCH;
msg.payload = msg.msg433.CMD;
return msg;
Ja Stat kohta on vaan luomassa OpenHabin confiin paluuviestin jota ei 433 vehkeiltä saa.
Koodi:
msg.topic += "/stat";
msg.payload = msg.msg433.CMD;
return msg;
Elikkä OpenHABin default.items konfissa voi käyttää tähän malliin..
Koodi:
Switch SwitchLiike1 "Liiketunnistin tuulikaappi" <switch> (gMotion)
{ mqtt=">[mosquitto:433/EV1527/xxxxxxx/6:command:*:default],
<[mosquitto:433/EV1527/xxxxxxx/6/stat:state:default]" }
Lähettämiseen on oma flowsa käyttötarkoituksen mukaan Node-REDissä. Kuvan on yksi yksinkertaisempi osuus.
Kullekin 433 ohjattavalle laitteella on oma funktionsa joka tekee samalla tarvittavan komennon RFLinkkiä varten .
Koodi:
msg.name = "NewKaku";
msg.ID = "xxxxxxxx";
msg.SWITCH = "4";
msg.payload = "10;" + msg.name + ";" + msg.ID + ";" + msg.SWITCH + ";" + msg.payload + ";";
return msg;
Jonka jälkeen ne ohjataan oikealle laitteelle määrittämällä funktiossa vaan msg.topic sen mukaan mikä useammista RFLinkeistä eri puolella taloa signaalin lähettä. Uudemmassa on vaan parsinta on hiukan erilainen kun topic on Tasmotan kaltainen ja pitää lisätä SerialSend komento.
Häkä, DS18s20, DTH11, irsend/transmitter ja tutka-anturia en ala sen tarkemmin käsitteleen. Infrapuna vaatii vähän samanlaista kuin 433MHz laitteet lähetys komennon ollen vähän eri kuten IRSend, mutta muut menee suoraan OpenHABin items tiedostoon konfaamalla. JSONPath kun pistää päälle tranformationissa saa lueskeltua tyyliin
Koodi:
umber Sensortempip66 "TempIP66 [%.1f °C]" <temperature> (gTemp)
{ mqtt="<[mosquitto:tele/xxxxxxxxxx/SENSOR:state:JSONPATH($.DS18B20.Temperature)]"}
Osiin suorat linkit spoilerissa..