@skywatch If your project is free and open, where i can look at it? At the moment i need to solve same problem. On your graph what will be 0% ? For mine devices it is minimum 1.9v, for few it is 2.2v
Posts made by nekitoss
-
RE: 💬 Battery Powered Sensors
-
RE: MYSBootloader 1.3 pre-release & MYSController 1.0.0beta
Today i suddenly find out, that Tekka updated app. Old app said "there is an update" and i've clicked link, which lead me to dropbox page.
So anyone, who previously blocked all traffic for program (@iguaan , @nfj25 , @Mac65 , @tplet) - you may want unblock it in your firewall and update.
I just replaced MYSController.exe and MYSController.ini files, leaving all other - it worked! Did not yet tested all functionality. But still make backup of all files for sure before dong that. Also you may need click on sensor and choose "settings->offline FOTA update" in order OTA to work. I'm wondering what does "online" version mean...
Thank you very much, Tekka! -
RE: Use of BH1750 light sensor in low power node
@gerritv Thank you for pointing the problem. I was updating my code, while library was updated and found that i had funtion, that does not exists in library - i've added it in local copy in library, then it updated and my local patch was gone.
I've investigated previosly mentioned PR - and must admit that later they removed that re-initialisation when reading.
I will try a PR to slightly improve that behaviour, but looks like library is becoming abandoned.Now look it should work next way: after previous measurement done you must run
lightSensor.configure(ONE_TIME_)
so it starts measuring - this is shown in their example BH1750onetime.ino. Then we have to wait, butmeasurementReady()
relies on_delay_ms
, which (as i remember) won't tick during sleep so you can't sleep. We can sleep but we can't get exact measurement time for current settings. Soto save battery we sleep max time - which, according to library is 180ms. Then we get reading. On next cycle - repeat.As i understand maximum battery saving code will look like:
void setup() { Wire.begin(); // Initialize the I2C bus (BH1750 library doesn't do this automatically) lux_init_status = lightMeter.begin(BH1750::ONE_TIME_LOW_RES_MODE); //init ONE_TIME - at same time it will start measuring, but we will ignore this and double-call start measuring if (lux_init_status == false) { send(deb_msg.set("ErrorInitLux")); //notify us about failure } } void loop() { if (lux_init_status) { //making it fail-safe - if BH1750 brokes then other sensors will still work lightMeter.configure(BH1750::ONE_TIME_LOW_RES_MODE); //this will start measuring, after it sensor will go into power-down mode //note, that configure has 10ms sleep built-in sleep(180); //this is guarantee time in this library with any config. We can't get that externally as for v1.3.0 long lux = lightMeter.readLightLevel(); //actually get results } sleep(SLEEP_TIME);//sleep between measurements }
note that
.configure()
that is also called by.begin
has built-in 10ms delay -
RE: 💬 Battery Powered Sensors
@skywatch Thank you very much! Your advice helped. Not shure what it was on BOTH devices - my mistake or some corruption of fuses/program.
On first device (where i found problem) - there were different fuse bits (but according to my eyes BOD was even disabed, but not shure). On the second (where i tested) fuses were checked and were correct. I tried to play with fuses and erase chip... and something strange happened - or chip memory was broken or i can't verify program when box "erase flash and eeprom" is checked... so i took fresh nano, programmed it and resoldered MCU into the second device.
So both devices now are fixed and tested - both work till ~1.9V.
Thanks, you saved my brains! -
RE: 💬 Battery Powered Sensors
@nekitoss said in Battery Powered Sensors:
It would be great to add to this arctle that if you want to be battery powered outdoors with temperature below zero - you have to use lithium batteries (FR6 for AA) (yes, batteries, not li-ion accumulators!) (for example ultimate lithium energizer, also could be found lithium batteries from other vendors), because Alkaline (LR6 for AA) will be frozen and loose their capacity heavily. If i remember it is >50% at -10 C and death at -20 C. Same problem for li-ion accumulators - when liquid is frozen - electrons are stucked...
Also would be great to add some link about battery/accumulator types, advanteges and disadvantages, but i have no links in english, easy-to-read and in one place...But i have very great link about battery-powering that really should be added here, but in advanced section:
http://www.gammon.com.au/power@zboblamont how your alkaline batteries experience after 2 years(temperatures, lasting time)? my freshly installed (yes, it was long develop and test...) Lithium AA - when few weeks ago it was -20 .. stopped transmitting! Fixed resetting power when it become little warmer. Possibly same problem with 2.7V or exactly there may be wrong BOD...
-
RE: 💬 Battery Powered Sensors
I have a problem: when batteries go around 2.7V radio will stop transmitting. Board still take current, but no messages.
I'm using own board with barebone 328p (8mHz internal) and SMD/mini nrf24l01 (pretty shure china)
Did anyone had same issues?I've checked programmaticaly (yes, it is possible!) my fuse bits: Low=0xE2, High=0xD2, Extended=0xFE (0x06)
(BOD = 1.8V)
I've have three same boards (water leak) and used other not-yet-installed with specially made low-voltage regulated source (with 2200 uF capacitor and resistor load to eliminate voltage drop at transmission) to test - same result.
Sometimes i can go lower to 2.5V but not guaranteed, sometimes even corrupted messages (i.e. node id 168 instead 8).
Tests were without UART, only MYSController to monitor messages flooding each 5sec to approve life.Did anyone had same problems with nrf24l01 modules? All i see people say the can go to around 2.0 V.
According to article https://www.gammon.com.au/power (and datasheet)
at 8mHz i'm safe down to 2.4V (something like that i also measured)
nrf should go down to 1.9...Also it would be great to add into advanced section possible voltages and problems with NiMh, china modules & 2.7V(if not only me), [not]possible currents from coin cells and metioned article.
-
RE: Own action on heatbeat request
@wimd Could you share how you done that?
I also want to check if gate is alive (backup-batterypowered node - if mains or gateway died, send me a message).
I also use domoticz. -
RE: Problem with battery powered temperature sensor
Hi, @waspie !
First of all i'd like to say about value "85" - according to DS18B20 datasheet page 6, note after table 4.1:
*The power-on reset value of the temperature register is +85°C.
Your code looks fine and similar to my mains-powered DS18B20 sensor (because we used same example).
I have some thoughts:
-
you may have power problems:
a. from logs i see that you have 1 sensor, but you left defined#define MAX_ATTACHED_DS18B20 16
. If (suddenly) you would have 16 sensors - when you ask them for conversion they would consume 16* 1.5mA(max at 5v) = 24mA which is above recomended 20mA for atmega pin
b. you are powering from battery: DS18B20 oficially requres minimum of 3 v (as for datasheet). People say that with lower voltage it may have strange readings or even do not work at all
c. you are powering from battery through pin: is voltage raise fast enougth before start reading? is voltage drop low enought so voltage supplied to ds18b20 is >=3v?
i'd suggest you to measure voltages (but multimeter won't show you short drop-outs when start conmsuming) and try to feed VCC of DS18b20 directly from power source. If not possible - at least measure voltage and try to add some wait() after powering up pin (or also before measure start or after sleep). -
When running from 3v, what frequency of atmega processor is? If it is 16mHz - that it is not in safe operating area for that voltage. you should run 8 mHz. (>=2.4v for 8mHz and >=3.78v for 16mHz)
Also i suggest you try to change
sleep(conversionTime);
withwait(conversionTime);
and check if it will change anything (especially when ds18b20 directly powered from source). Also try with fresh batteries.If nothing helped, then for "85" value simple solution will be
if (temperature != 85) send();
because it is very rarely that people need to measure 85 degrees of Celsius at home...
~~ ~~
For advanced battery-powering i highly recommend to read this. Also you can find there about frequency vs voltage.And for internal battery voltage reading:
i don't remember where i found it: here1 or here2 or somwhere else..
but you may want to get more accurate readings by measuring and setting Internal Reference Voltage value and using it in the code, and give it some time to stabilize and/or use some type of averaging. -
-
RE: Detect missing/unresponsive sensor.
Hi, @grumpazoid !
PossiblysendHeartbeat();
could help you, but currently domoticz doesn't work correctly with it (without sending data).
I've opened an issue on github, at latest beta gizmocuz make a fix, but as i tested - heartbeat will update last seen time only in devices, not in hardware. - But that if you don't send sensor data, but you are. So try it, but remeber it is beta...
Also check last seen in hardware, not in devices. They may differ.
You may create additional switch, and send opposite bool each time (1-0-1-0-1-0), if you want to do some scripting...
Or just change to a switch type and create dummy alert dvice and update it via script (if switch is 1, then activate alert, and do not deactivate on switch 0) -
RE: sonda PH
Hi, @szybki946 !
Code in your post is working or not?
If yes - you want to someone modify it, so it will send yourpH
to domoticz from MySensors node?
If yes - if you use nrf24l01+ radio - maybe you want this code:#include <Average.h> #define MY_NODE_ID 100 //set node fixed id #define MY_BAUD_RATE 9600 //set serial baud rate #define MY_RADIO_RF24 //if you use nrf24l01+ #include <MySensors.h> #define PH_CHILD_ID 0 MyMessage ph_msg(PH_CHILD_ID, V_PH); Average<float> sredniaPH(100); //średnia ze 100 pomiarów void presentation() { sendSketchInfo("PH_meter", "1.0"); // Send the sketch version information to the gateway and Controller present(PH_CHILD_ID, S_WATER_QUALITY, "average_ph"); } void setup() { //Serial.begin(9600); //don't need it because of #define MY_BAUD_RATE 9600 } void loop() { int Volty = analogRead(A7); float V =(float) Volty * 5.0 / 1024.0; float peha =(float) V*3.5; sredniaPH.push(peha); sredniaPH.mean(); float pH =((float) sredniaPH.mean()); Serial.println(pH); send(ph_msg.set(pH, 2)); //2 = number of digits after comma wait(1000); //in mysensors do not use delay - use wait() or sleep() }
(change IDs, texts and numbers of digits after comma as you want)
-
bme280 sensor missing/combining/domoticz heartbeat and battery level
Re: BME280 temp/humidity/pressure sensor
Re2: DS18B20 ans SHT31-D show up as combined sensors on Domoticz
Re3: Heartbeat working or not?I'm trying to make outdoors(now debugging indoors) sleep node with tqfp32 atmega328p internal 8mhz + bme280 + BH1750 (in future battery powered with two lithium AA batteries (not accumulators).
I'm using Domoticz stable Version 4.9700 (June 23th 2018)
and MySensors 2.3.0 at nodes and at gateway(almost shure about gateway version)Note, that according MYSController (by tekka) all messages and presentations are received and sent normally, so no problems in my pcb, radiochannel and gateway are expected. Only in code order and/or domoticz processing.
I've faced three problems:
First is related to combining sensors - i do not fully understand, how to avoid and how to not avoid. To avoid i've tried to change code, so to present humidity before temperature(but not id's), as mentioned in topic: humidity - temperature - pressure. But it didn't helped - temperature and humidity sensors are combined.
I've also couldn't find topic about combining, mentioned in issue on git by gizmocuz.
Second might be related to first. I see all presented childs in my node in domoticz hardware. But in devices i'm missing one of them (temp-hum-pres-lux). For code that i will show below - i'm missing pressure. That code uses @sundberg84 order of ID's and order of presenting, taken from his post here because he mentioned that he avoided combining. And what are "red nodes" in domoticz?
(also i have one boolean and one text - for debugging and to be sure have reboot, it was before i found about smarts sleep "true". Also i have a lot of defines and ifdefs - to easily test this problem - about this later)
Here is my code at the moment://The maximum payload size is 25 bytes! The NRF24L01+ has a maximum of 32 bytes. The MySensors library (version 2.0) uses 7 bytes for the message header. //mysensors 8mhz bits L=0xE2 H=0xD2 E=0x06 L=0x3F #define MY_NODE_ID 4 #define MY_BAUD_RATE 9600 //#define MY_DEBUG #define MY_SPECIAL_DEBUG #define MY_RADIO_RF24 #define MY_RF24_IRQ_PIN (8) #define DEB_ID 88 #define PRES_BME_ID 0 #define TEMP_BME_ID 1 #define HUMID_BME_ID 2 #define LIGHT_LUX_ID 3 #define REBOOT_ID 10 #define MEASURE_BATT_FUNCT //uncomment to measure and send battery level #define LUX_FUNCT //uncomment to enable light measuring #define LUX_AUTOAJUST //uncomment to enable auto-ajust resolution of sensor #define BME_FUNCT //uncomment to enable bme measuring #define SLEEP_TIME 20000UL // sleep time between reads (seconds * 1000 milliseconds) #include <MySensors.h> #define BME_PRES_FUNCT //uncomment to enable sending pressure #define BME_TEMP_FUNCT //uncomment to enable sending temperature #define BME_HUM_FUNCT //uncomment to enable sending humidity #if defined(LUX_FUNCT) || defined(BME_FUNCT) # include <Wire.h> #endif #ifdef LUX_FUNCT # include <BH1750.h> BH1750 lightMeter; MyMessage light_msg(LIGHT_LUX_ID, V_LEVEL); //VARIABLE_TYPE: V_TEXT - из второй таблицы https://www.mysensors.org/download/serial_api_20#set,-req #endif #ifdef BME_FUNCT # include "SparkFunBME280.h" BME280 bme; MyMessage pressure_msg(PRES_BME_ID, V_PRESSURE); //VARIABLE_TYPE: V_TEXT -set,req table https://www.mysensors.org/download/serial_api_20#set,-req MyMessage temperature_msg(TEMP_BME_ID, V_TEMP); //VARIABLE_TYPE: V_TEXT -set,req table https://www.mysensors.org/download/serial_api_20#set,-req MyMessage humidity_msg(HUMID_BME_ID, V_HUM); //VARIABLE_TYPE: V_TEXT -set,req table https://www.mysensors.org/download/serial_api_20#set,-req #endif //MyMessage(uint8_t childSensorId, uint8_t variableType); MyMessage deb_msg(DEB_ID, V_TEXT); //VARIABLE_TYPE: V_TEXT -set,req table https://www.mysensors.org/download/serial_api_20#set,-req MyMessage reboot_msg(REBOOT_ID, V_STATUS); int oldBatteryPcnt = 0; long old_lux = 0; float old_t = 0; int old_h = 0; int old_p = 0; bool bme_init_status = false; bool lux_init_status = false; bool got_reboot_response = false; bool metric = false; /* * before * connect * present * setup * loop */ void(* resetFunc) (void) = 0; //declare reset function @ address 0 void before() { } void presentation() { // Send the sketch version information to the gateway and Controller //void sendSketchInfo(const char *name, const char *version, bool ack); sendSketchInfo("lodjiya", "0.1"); //void present(uint8_t childSensorId, uint8_t sensorType, const char *description, bool ack); present(DEB_ID, S_INFO, "lodjiya_Debug");//SENSOR_TYPE: S_INFO - из таблицы presentation https://www.mysensors.org/download/serial_api_20#presentation #ifdef BME_FUNCT # ifdef BME_PRES_FUNCT present(PRES_BME_ID, S_BARO, "lodjiya_bme_pres"); wait(100); # endif #endif #ifdef LUX_FUNCT present(LIGHT_LUX_ID, S_LIGHT_LEVEL, "lodjiya_lux_light"); #endif #ifdef BME_FUNCT # ifdef BME_TEMP_FUNCT present(TEMP_BME_ID, S_TEMP, "lodjiya_bme_t"); wait(100); # endif #endif present(REBOOT_ID, S_BINARY, "lodjiya_reboot_bool"); #ifdef BME_FUNCT # ifdef BME_HUM_FUNCT present(HUMID_BME_ID, S_HUM, "lodjiya_bme_humid"); wait(100); # endif #endif } void setup() { analogReference(INTERNAL); // use the 1.1 V internal reference send(deb_msg.set("")); #if defined(LUX_FUNCT) || defined(BME_FUNCT) Wire.begin(); // Initialize the I2C bus (BH1750 library doesn't do this automatically) #endif #ifdef LUX_FUNCT lux_init_status = lightMeter.begin(BH1750::ONE_TIME_LOW_RES_MODE); if (lux_init_status == false) send(deb_msg.set("ErrorInitLux")); #endif #ifdef BME_FUNCT bme.setI2CAddress(0x76); bme_init_status = bme.beginI2C(); if (bme_init_status == false) send(deb_msg.set("ErrorInitBme")); bme.setMode(MODE_SLEEP); //Sleep for now #endif send(reboot_msg.set(false)); } void loop() { //wait(5000); //ждать команды bool wait(unsigned long ms, uint8_t cmd, uint8_t msgtype); unsigned long timer = millis(); got_reboot_response = false; request(REBOOT_ID, V_STATUS); #ifdef MEASURE_BATT_FUNCT { int batteryPcnt = getBandgap() / 3.3; if (oldBatteryPcnt != batteryPcnt) { sendBatteryLevel(batteryPcnt);// Power up radio after sleep oldBatteryPcnt = batteryPcnt; wait(50); } } #endif #ifdef LUX_FUNCT if (lux_init_status) { long lux = lightMeter.readLightLevel(); # ifdef LUX_AUTOAJUST /* After the measurement the MTreg value is changed according to the result: lux > 40000 ==> MTreg = 32 lux < 40000 ==> MTreg = 69 (default) lux < 10 ==> MTreg = 138 */ if (lux < 0) { send(deb_msg.set("ErrorLuxMsr")); } else { if (lux > 40000.0) // reduce measurement time - needed in direct sun light { if (!lightMeter.setMTreg(32)) send(deb_msg.set("ErrorSetMTReg32")); } else { if (lux > 10.0) // typical light environment { if (!lightMeter.setMTreg(69)) send(deb_msg.set("ErrorSetMTReg69")); } else { if (lux <= 10.0) //very low light environment { if (!lightMeter.setMTreg(138)) send(deb_msg.set("ErrorSetMTReg138")); } } } } # endif if (old_lux != lux) { send(light_msg.set(lux)); old_lux = lux; wait(50); } } #endif #ifdef BME_FUNCT if (bme_init_status) { bme.setMode(MODE_FORCED); int p = bme.readFloatPressure()/133; int h = bme.readFloatHumidity(); float t = bme.readTempC(); bme.setMode(MODE_SLEEP); if (abs(old_t - t) > 0.1) { # ifdef BME_TEMP_FUNCT send(temperature_msg.set(t, 1)); # endif old_t = t; wait(50); } if (old_h != h) { # ifdef BME_HUM_FUNCT send(humidity_msg.set(h)); # endif old_h = h; wait(50); } if (old_p != p) { # ifdef BME_PRES_FUNCT send(pressure_msg.set(p)); # endif old_p = p; wait(50); } } #endif // send(deb_msg.set(( abs(millis() - timer) ))); //50-60ms if (!got_reboot_response) { wait(3000, C_REQ, V_STATUS);//wait(const uint32_t waitingMS, const uint8_t cmd, const uint8_t msgType) // send(deb_msg.set("endwait1")); } // send(deb_msg.set(( abs(millis() - timer) ))); //800-900ms // sleep(SLEEP_TIME, true); wait(SLEEP_TIME); //void requestTime(); //answer will be back to void receiveTime(uint32_t ts); } const long InternalReferenceVoltage = 1068; // Adjust this value to your board's specific internal BG voltage // Code courtesy of "Coding Badly" and "Retrolefty" from the Arduino forum // results are Vcc * 100 // So for example, 5V would be 500. int getBandgap() { // REFS0 : Selects AVcc external reference // MUX3 MUX2 MUX1 : Selects 1.1V (VBG) ADMUX = bit (REFS0) | bit (MUX3) | bit (MUX2) | bit (MUX1); ADCSRA |= bit( ADSC ); // start conversion while (ADCSRA & bit (ADSC)) { } // wait for conversion to complete int results = (((InternalReferenceVoltage * 1024) / ADC) + 5) / 10; return results; } // end of getBandgap void receive(const MyMessage &message) //handles received message { // send(deb_msg.set(message.type)); // send(deb_msg.set(message.sensor)); // send(deb_msg.set(mGetCommand(message))); if (message.type == V_STATUS) { if (message.sensor == REBOOT_ID) { got_reboot_response = true; // send(deb_msg.set("got answer")); if (message.getBool()) resetFunc(); } } }
How i tried to test this behaviour:
(a)comment in code one of (temp-hum-pres) ... start upload in MYSController
while uploading code to node via MYSController (so node doesn't send any presentation or child data to domoticz)
i go to domoticz-devices, select all devices realated to this node and in upper left corned press bucket to delete them (to do that i present all sensors with names, starting with "lodjiya", so i can find them by sorting by name. also remember to press "all devices" and choose in upper left to show all, not only 25 devices)
then i go to hardware-mysensors-setup select node and delete it (or delete only testing childs)
but domoticz may prevent them from appearing/registering/presentating again, so
i go to my putty window and dosudo service domoticz.sh restart
after that code is finished uploading, device reboots, present nodes, send first-time data for each sensor.
then i checked and printsreened domoticz list of this node childs (that they all appeared and send their data, confirm identical for all last seen time) and same for list of devices
(b)then uncomment sensor that was commented, and upload code (so "new" child-sensor will present himself and sent his data after upload and reboot while other sensors already present in domoticz system)
after doing checking and printscreenenig i go and comment next one of (temp-hum-pres) and start from beginningAlso i tested case without commenting any sensor (all appear at once after domoticz restart)
ID's: lux=commented,disabled; p=1; t=2; hum=3; presenting order don't remember, but i think temperature was presented last
I've got next results: (i have screens, bu will not post them, because it is already big and hard to read post)
Note: in all cases in hardware all childs were present with all latest data!
so, below are described DEVICES status only- all sensors: t+h not combined, because temperature is missed in devices, h and p present
- p+h: a)ok b) t is missed, so nothing combined, p+h still present
- p+t: a)ok b) h is missed, so nothing combined, p+t still present
- t+h: a)ok b) p is missed, t+h still present and still combined (as one temp sensor and temp+hum WTGR800 device)
so in all cases i always miss one of (temp-hum-pres), even if i tried to present to domoticz later
Third is related to sendHeartbeat or sendbatterylevel without sending any sensors data or having no sensors.
I've asked in old closed issue here (there is something about workaround after issue was closed, but i wasn't able to find in commits).
So i've opened new issue, and i think i must look at line 470 which is called at line 1819 but i see only 12 types.
And i do not understand if it is possible to update only node (first table) last seen time and/or #255 child (second table in hardware in domoticz in mysensors setup).
If send no sensor data, but only heartbeat (with wait or with smartsleep) - node and childs will not update "last seen". Nor wait neither smart sleep. Only on presentation (without sending sensor data).
Same for battery level if i send only battery level without any sensors data it seems not to update nor last seen neither battery level. Nor wait neither smart sleep. Only on presentation (if i do not send sensor data)...
Function is called at line 1797 looks like must update all childs... -
RE: 💬 Battery Powered Sensors
It would be great to add to this arctle that if you want to be battery powered outdoors with temperature below zero - you have to use lithium batteries (FR6 for AA) (yes, batteries, not li-ion accumulators!) (for example ultimate lithium energizer, also could be found lithium batteries from other vendors), because Alkaline (LR6 for AA) will be frozen and loose their capacity heavily. If i remember it is >50% at -10 C and death at -20 C. Same problem for li-ion accumulators - when liquid is frozen - electrons are stucked...
Also would be great to add some link about battery/accumulator types, advanteges and disadvantages, but i have no links in english, easy-to-read and in one place...But i have very great link about battery-powering that really should be added here, but in advanced section:
http://www.gammon.com.au/power -
RE: 💬 In Wall AC/DC Pcb (with Relay) for MySensors (SMD)
I was wondering if 73 defree for thermal fuse is long-operating temperature or blow temperature? (i looked at well-known for you all test, where it heated around 63 degrees at 1hour rated load)
In any case long-time 73C thermal fuse will have around 100C blow temperature (looked at my local store). I'm asking because on ebay link they are rated as 240C...Other moment i woul like to aware - (as you know, not shure about others) - there are counterfeit G3MB-202P relays everywhere, which are officially discontinued March 2011 (!).
You correcly put there a G3MC-202P relay. But someone may not notice those difference in one letter and buy a counterfeight relay in local store...
Also i was sitting and reading a lot about safety, especially about counterfeits in this high-voltage parts, and found this picture which shows, what happened with those (i think, because of post date)bad relay with 1 Amp load with incandescent lamps.
That is also a problem of all SSR relays - that they heat. So i was wondering how much heats original relay and if it is good idea and possible (i understand that it is very hard to update such small pcb) to move thermal fuse between relay and HLK-PM01, so it can protect both? Or put it verticall (not shure about clearance and creepage in this case) in corner between them.I was dissapointed about price of relay, especially against counterfeit, but safety is worth it! Also you can make same simple sheme as inside relay (even from datasheet on moc30xx), but you must know a lot in electonics to make it as safe as sealed factory relay i think (but in oppsite in such shemas over internet ushually resistor are recommended up to 2Watt (for 16A shemas) while smd resistors have much less watts...).
Also it would be nice to add in description to what this relay can be applied to. Because not everyone may understand that incandescent lamps at start have bigger current, and at the moment filament is broken a short-ciruit with arc appears. And ssr relays usually die at short-circuit and you need fast fuse to save them, but they are expensive... And you should not use it with motors, etc or use with lower ratings...
I really think they must be warned, even shortly.And only 100% way to buy original HLK-PM01, is to buy from manufacturer site. but i'm wondering how much will cost shipping. Wholesale price (which is in basket) is even lower than ebays. At the moment it is 2.50$
Sorry for so much text, i may somewhere be wrong, feel free to correct me and discuss. But when it is about safety - i cannot stand aside.