Skip to content

My Project

Show off and share your great projects here! We love pictures!
961 Topics 13.4k Posts
  • When 3D printing and electronics work together!

    6
    3
    4 Votes
    6 Posts
    1k Views
    XFionaChX
    The idea is really good, I like it very much! I also like to work with 3D printers because my elder brother is producing custom pieces for cars and this is very interesting for me. Also I am designing new forms in 3D programs, so the your idea with 3D printing is great. Now I am studying pcb basics and I want to work with them as well. I saw a few videos and read a few guides and it seemed easy and interesting. Now I want to study more and invent things like this. I hope I will do something useful as your inclinometer.
  • 2 Votes
    3 Posts
    87 Views
    NeverDieN
    Another way is to align the header pins landing pattern in a zig-zag so as to make a temporary solderless connection held in place by the spring tension of the misaligned header pins: [image: Connectorless-self-clamping-zigzag-FTDI-connector.jpg] I've tried it and it works, but because of the wear on the through-hole plating it's not really appropriate for frequent use. For a once-and-done setup though it seems to work just fine. For instance, Ideally you'd install a wireless bootloader just once and then from then on you don't need a physical connection.
  • MQTT gateway - MQTT connection status

    3
    0 Votes
    3 Posts
    72 Views
    pgeensP
    @lood29 said in MQTT gateway - MQTT connection status: bool PubSubClient::connected() Did not work like this: it works with if (!_MQTT_client.connected()) {
  • Gateway - I2C Advanced button and led

    httpsgist.github.comclclon
    2
    1
    1 Votes
    2 Posts
    49 Views
    C
    small fix of the patch, removed "contact bounce" in the inclusive button.
  • Ethernet / MQTT PoE gateway for 16 reed switches

    4
    3
    2 Votes
    4 Posts
    96 Views
    T
    So I finally changed the splitter connector to USB micro and it is a bit more polished now :) [image: 1601294578027-img_20200928_134535.jpg] I also connected it to openHab2 via MQTT binding. So in case any one is interested here is the configuration for the thing and items. Bridge mqtt:broker:openhab [ host="localhost" ] { Thing topic mag "Magnety" { Channels: Type contact : pin17 [ stateTopic="mag-out/0/17/1/0/16", on="1", off="0"] Type contact : pin16 [ stateTopic="mag-out/0/16/1/0/16", on="1", off="0"] Type contact : pin15 [ stateTopic="mag-out/0/15/1/0/16", on="1", off="0"] Type contact : pin14 [ stateTopic="mag-out/0/14/1/0/16", on="1", off="0"] Type contact : pin1 [ stateTopic="mag-out/0/1/1/0/16", on="1", off="0"] Type contact : pin0 [ stateTopic="mag-out/0/0/1/0/16", on="1", off="0"] Type contact : pin2 [ stateTopic="mag-out/0/2/1/0/16", on="1", off="0"] Type contact : pin3 [ stateTopic="mag-out/0/3/1/0/16", on="1", off="0"] Type contact : pin4 [ stateTopic="mag-out/0/4/1/0/16", on="1", off="0"] Type contact : pin5 [ stateTopic="mag-out/0/5/1/0/16", on="1", off="0"] Type contact : pin6 [ stateTopic="mag-out/0/6/1/0/16", on="1", off="0"] Type contact : pin7 [ stateTopic="mag-out/0/7/1/0/16", on="1", off="0"] Type contact : pin8 [ stateTopic="mag-out/0/8/1/0/16", on="1", off="0"] Type contact : pin9 [ stateTopic="mag-out/0/9/1/0/16", on="1", off="0"] Type contact : pin19 [ stateTopic="mag-out/0/19/1/0/16", on="1", off="0"] Type contact : pin18 [ stateTopic="mag-out/0/18/1/0/16", on="1", off="0"] } } Contact mag17 "Magnet 17" <window> { channel="mqtt:topic:openhab:mag:pin17" } Contact mag16 "Magnet 16" <window> { channel="mqtt:topic:openhab:mag:pin16" } Contact mag15 "Magnet 15" <window> { channel="mqtt:topic:openhab:mag:pin15" } Contact mag14 "Magnet 14" <window> { channel="mqtt:topic:openhab:mag:pin14" } Contact mag1 "Magnet 1" <window> { channel="mqtt:topic:openhab:mag:pin1" } Contact mag0 "Magnet 0" <window> { channel="mqtt:topic:openhab:mag:pin0" } Contact mag2 "Magnet 2" <window> { channel="mqtt:topic:openhab:mag:pin2" } Contact mag3 "Magnet 3" <window> { channel="mqtt:topic:openhab:mag:pin3" } Contact mag4 "Magnet 4" <window> { channel="mqtt:topic:openhab:mag:pin4" } Contact mag5 "Magnet 5" <window> { channel="mqtt:topic:openhab:mag:pin5" } Contact mag6 "Magnet 6" <window> { channel="mqtt:topic:openhab:mag:pin6" } Contact mag7 "Magnet 7" <window> { channel="mqtt:topic:openhab:mag:pin7" } Contact mag8 "Magnet 8" <window> { channel="mqtt:topic:openhab:mag:pin8" } Contact mag9 "Magnet 9" <window> { channel="mqtt:topic:openhab:mag:pin9" } Contact mag19 "Magnet 19" <window> { channel="mqtt:topic:openhab:mag:pin19" } Contact mag18 "Magnet 18" <window> { channel="mqtt:topic:openhab:mag:pin18" } Quick preview in openHab2 PaperUI [image: 1601295373963-openhab.png] I would also like to share the arduino code as I have some question. #include <Ethernet.h> #include <MySensors.h> #define SKETCH_NAME "Magnety" #define SKETCH_MAJOR_VER "1" #define SKETCH_MINOR_VER "0" byte pins[] = { 17, 16, 15, 14, 1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 19, 18 }; int sentValues[16] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; MyMessage messages[16] = { MyMessage( 17, V_TRIPPED ) ,MyMessage( 16, V_TRIPPED ) ,MyMessage( 15, V_TRIPPED ) ,MyMessage( 14, V_TRIPPED ) ,MyMessage( 1, V_TRIPPED ) ,MyMessage( 0, V_TRIPPED ) ,MyMessage( 2, V_TRIPPED ) ,MyMessage( 3, V_TRIPPED ) ,MyMessage( 4, V_TRIPPED ) ,MyMessage( 5, V_TRIPPED ) ,MyMessage( 6, V_TRIPPED ) ,MyMessage( 7, V_TRIPPED ) ,MyMessage( 8, V_TRIPPED ) ,MyMessage( 9, V_TRIPPED ) ,MyMessage( 19, V_TRIPPED ) ,MyMessage( 18, V_TRIPPED ) }; void setup() { byte pinsCount = sizeof( pins ) / sizeof( pins[0] ); for( byte i = 0; i < pinsCount; i++ ) { pinMode( pins[i], INPUT ); } } void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo(SKETCH_NAME, SKETCH_MAJOR_VER "." SKETCH_MINOR_VER); byte pinsCount = sizeof( pins ) / sizeof( pins[0] ); for( byte i = 0; i < pinsCount; i++ ) { //This seems not to be usefull with openhab mqtt bindings //present( pins[i], S_DOOR ); //But this seems to be more uefull when controller is started after gateway send( messages[i].set( sentValues[i] ) ); } } void loop() { int value; // Short delay to allow buttons to properly settle sleep(5); byte pinsCount = sizeof( pins ) / sizeof( pins[0] ); for( byte i = 0; i < pinsCount; i++ ) { value = digitalRead( pins[i] ); if ( value != sentValues[i] ) { // Value has changed from last transmission, send the updated value send( messages[i].set( value==HIGH ? 1 : 0 ) ); sentValues[i] = value; } } } I noticed the gateway sends the presentation of sensors all the time but that is not of much use in my setup. On the other hand it is useful to send the actual state periodically as it is known without remembering or if the controller started later than GW. But I have a feeling that I might misused the presentation function. Does any one know if this approach is ok by the "mysensors way"? Of course I welcome any suggestion for improvments :) Thanks
  • 12v Solar battery monitor

    59
    7 Votes
    59 Posts
    34k Views
    nurul amiraN
    @Boots33 thank you for your time to reply me 😁.
  • Power Meter Pulse Sensor for multiple meters

    mysensors
    1
    0 Votes
    1 Posts
    38 Views
    No one has replied
  • Ethernet Gateway Library

    gateway
    6
    0 Votes
    6 Posts
    57 Views
    R
    thanks Mr @mfalkvidd .
  • Getting Alexa to speak sensor values.

    1
    1 Votes
    1 Posts
    38 Views
    No one has replied
  • Wireless Peacefair PZEM-004T Energy Monitor on Audrino Web Server

    7
    0 Votes
    7 Posts
    15k Views
    Z
    @Karolis-Kirna Just a bit late but here it is. [image: 1599663992896-arduino-nrf24l01-pzem_2.jpg] [image: 1599664007159-pzem-004t_2a.jpg][image: 1599664028578-arduino-mini-3.3v-8mhz-nrf24l01.jpg] [image: 1599664064713-meter_panel.jpg] [image: 1599664070912-meter_log1.jpg] The code: /* * Send Watt and Kwh to gateway * using PZEM-004t * 26/8/2020 cambiato linea 45, 21-23 */ /*++++++++++++++ Global Settings +++++++++++++++++*/ #define SN "PZEM Monitor" #define SV "0.4" // Enable and select radio type attached #define MY_RADIO_NRF24 #define MY_NODE_ID 9 #define MY_PARENT_NODE_ID 11 // from domoticz log #define MY_PARENT_NODE_IS_STATIC /*+++++++++++++ Local Settings ++++++++++++++++++++*/ #define SEND_ONLY_IF_CHANGED //#define MY_DEBUG //#define DEBUG //#define TEST // Aggiunge codice di test da levare #if F_CPU == 8000000L #define MY_BAUD_RATE 9600 #endif #include <debugpaolo.h> #include <SPI.h> #include <MySensors.h> //#include <SoftwareSerial.h> // Arduino IDE <1.6.6 #include <PZEM004T.h> #define RX_PIN 4 #define TX_PIN 5 PZEM004T pzem(RX_PIN,TX_PIN); // RX pin,TX pin IPAddress ip(192,168,1,1); #define CHILD_WATT_ID 0 #define VOLTAGE_ID 1 unsigned long lastSend=0; unsigned long SEND_FREQUENCY = 40000; // Minimum time between send (in milliseconds). We don't want to spam the gateway. MyMessage wattMsg(CHILD_WATT_ID,V_WATT); MyMessage kWhMsg(CHILD_WATT_ID,V_KWH); //MyMessage kwhSaveMsg(CHILD_WATT_ID,V_VAR1); //MyMessage varMsg(CHILD_WATT_ID,V_VAR); // chi lo sa non va in domoticz double oldKwh=0.0; double oldwh=0.0; float oldwatt=0.0; #ifdef TEST double whtest=0.0; #endif #ifdef SEND_ONLY_IF_CHANGED int kwh_counter; #define KWH_COUNTER_MAX 33 //dopo 23 volte(15 min) invia comunque #endif MyMessage msgVoltage(VOLTAGE_ID, V_VOLTAGE); float lastv=0; #define V_COUNTER_MAX 70 int v_counter=0; int BATTERY_SENSE_PIN = A3; // select the input pin for the battery sense point int oldBatteryPcnt = 0; #define MAX_BATTERY_CHECK 56 // 56*40 sec = 56 min circa int battery_check; #define VREF 1.106 #define RBATT 5.73305 // ((1578+333.4)/333.4)? #define VFACTOR RBATT*VREF/1023 // /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++ SETUP +++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ void setup() { // begin(incomingMessage); analogReference(INTERNAL); pzem.setAddress(ip); battery_check = MAX_BATTERY_CHECK; } /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++ Presentation ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo(SN, SV); present(CHILD_WATT_ID, S_POWER); present(VOLTAGE_ID, S_MULTIMETER); } /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++ Loop +++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ void loop() { /* +++++++++++++++++++++++++++++++++++++++++++ ++++ PZEM section +++++++++ +++++++++++++++++++++++++++++++++++++++++++*/ float v = pzem.voltage(ip); if (v < 0.5) { delay(500); // check v twice v = pzem.voltage(ip); if (v < 0.5 ) v = 0.0; } DEBUG_PRINT(v);DEBUG_PRINT("V; "); #ifdef DEBUG float i = pzem.current(ip); if(i >= 0.0){ DEBUG_PRINT(i);DEBUG_PRINT("A; "); } float VA=v*i; if(VA >= 0.0){ DEBUG_PRINT(VA);DEBUG_PRINTLN("VA; "); } #endif /* --------------------------- *------- Sezione potenza ---- ----------------------------*/ float watt = pzem.power(ip); #ifdef TEST watt=kwh_counter*2; #endif DEBUG_PRINT(watt);DEBUG_PRINT("W ");DEBUG_PRINT(VA);DEBUG_PRINTLN("VA "); if (watt <=0 ) { DEBUG_PRINT(watt);DEBUG_PRINTLN("W. Sensore NC o assenza rete! "); if ( oldwatt>0) { watt =0; send(wattMsg.set(watt,1)); // Send watt value to gw oldwatt=0.0; } } else { if ( oldwatt==0.0) { send(wattMsg.set(watt,1)); // Send watt value to gw DEBUG_PRINT(watt);DEBUG_PRINTLN("Rete ritornata! "); oldwatt = watt; } else { DEBUG_PRINT(watt);DEBUG_PRINTLN("W; "); float diffwatt=abs(watt-oldwatt); if ( diffwatt >= 49.9 ) { // watt in aumento di 50watt DEBUG_PRINT("Differenza ");DEBUG_PRINT(diffwatt);DEBUG_PRINTLN("W; "); oldwatt = watt; send(wattMsg.set(watt,1)); // Send watt value to gw } else { float perc = 100.0*diffwatt/oldwatt; // oldwatt o watt? DEBUG_PRINT("Perc ");DEBUG_PRINT(perc);DEBUG_PRINTLN("% "); if ( perc >= 49.9 ) { // variazione del 50% DEBUG_PRINT("Percentuale Diff ");DEBUG_PRINT(perc);DEBUG_PRINTLN("%; "); oldwatt = watt; send(wattMsg.set(watt,1)); // Send watt value to gw // send(varMsg.set(watt,1)); // non va in domoticz } else { if ( (perc >= 15.0) && (diffwatt>=8) ) { DEBUG_PRINT("Diff ");DEBUG_PRINT(diffwatt); DEBUG_PRINT("Perc ");DEBUG_PRINT(perc);DEBUG_PRINTLN("%; "); oldwatt = watt; send(wattMsg.set(watt,1)); // Send watt value to gw } } } } } //send(wattMsg.set(watt,1)); // Send watt value to gw /* --------------------------- *------- Sezione energia ---- ---------------------------*/ float wh = pzem.energy(ip); #ifdef TEST whtest+=10.0; wh=whtest; #endif if(wh >= 0.0){ DEBUG_PRINT(wh);DEBUG_PRINT("Wh; "); } else wh = 0.0; DEBUG_PRINTLN(); #ifdef SEND_ONLY_IF_CHANGED if ( (kwh_counter==0) ||(abs(wh-oldwh) > 187) ) { // 100 wh #else if ( wh > 0.0 ) { #endif double kwh = (double)wh/(double)1000.0; send(kWhMsg.set(kwh, 3)); // Send kwh value to gw oldwh=wh; #ifdef SEND_ONLY_IF_CHANGED kwh_counter=0; #endif } #ifdef SEND_ONLY_IF_CHANGED DEBUG_PRINT("kwh_counter="); kwh_counter++; DEBUG_PRINT(kwh_counter);DEBUG_PRINT(" "); if (kwh_counter == KWH_COUNTER_MAX ) kwh_counter = 0; DEBUG_PRINTLN(); #endif /* +++++++++++++++++++++++++++++++++++++++++++ ++++ Battery check section +++++++++ +++++++++++++++++++++++++++++++++++++++++++*/ if ( battery_check == MAX_BATTERY_CHECK) { analogRead(BATTERY_SENSE_PIN); // needed for accuracy int sensorValue = analogRead(BATTERY_SENSE_PIN); DEBUG_PRINT("A0 Value = ");DEBUG_PRINTLN(sensorValue); float batteryV = sensorValue * VFACTOR; // 100% 4.0v 0% 3.3v int batteryPcnt = ( batteryV - 3.3) / (4.0 - 3.3) * 100; batteryPcnt = (batteryPcnt > 100) ? 100 : batteryPcnt; batteryPcnt = (batteryPcnt < 0) ? 0 : batteryPcnt; DEBUG_PRINT("Battery Voltage: ");DEBUG_PRINT(batteryV);DEBUG_PRINTLN(" V"); DEBUG_PRINT("Battery Percent: ");DEBUG_PRINT(batteryPcnt);DEBUG_PRINTLN(" %"); //if (oldBatteryPcnt != batteryPcnt) { sendBatteryLevel(batteryPcnt); oldBatteryPcnt = batteryPcnt; //} battery_check=0; } else { battery_check++; DEBUG_PRINT("Check = "); DEBUG_PRINTLN(battery_check); } /* +++++++++++++++++++++++++++++++++++++++++++ ++++ 230 Voltage section +++++++++ +++++++++++++++++++++++++++++++++++++++++++*/ #ifdef SEND_ONLY_IF_CHANGED float diffv= abs(v-lastv); if ( ((v_counter == 0) || ( diffv > 3.50)) ) { DEBUG_PRINT("v diff: ");DEBUG_PRINT(diffv);DEBUG_PRINTLN("V "); if ( diffv > 3.50 ) v_counter = 0; else v_counter++; DEBUG_PRINT("v_counter : ");DEBUG_PRINTLN(v_counter); #endif send(msgVoltage.set(v, 1)); lastv = v; #ifdef SEND_ONLY_IF_CHANGED } else { v_counter++; if (v_counter >= V_COUNTER_MAX ) v_counter = 0; DEBUG_PRINT("v_counter : ");DEBUG_PRINTLN(v_counter); } #endif sleep(SEND_FREQUENCY); delay(500); // ??? }
  • test

    3
    0 Votes
    3 Posts
    68 Views
    C
    Sorry, that was the test :) the text is irrelevant to the topic. But, since we are talking about 64-bit numbers on Arduino-like platforms, I'm ready to translate the code that solves this situation. Int64String.h #if !defined(INT64STRING_H) # define INT64STRING_H 1 # if (defined(ARDUINO) && (ARDUINO >= 100)) # include "Arduino.h" # else # include "WString.h" # endif String Int64ToString(uint64_t, uint8_t = DEC, bool = false, bool = false); String Int64ToString(int64_t, uint8_t = DEC, bool = false); uint64_t StringToInt64(String); uint64_t StringToInt64(const char*, uint16_t); #endif Int64String.cpp #include "Int64String.h" #define base16char(A) ("0123456789ABCDEF"[A]) String Int64ToString(uint64_t value, uint8_t base, bool prefix, bool sign) { if (base < 2) base = 2; else if (base > 16) base = 16; uint8_t i = 64; char buffer[66] = {0}; if (value == 0) buffer[i--] = '0'; else { uint8_t base_multiplied = 3; uint16_t multiplier = base * base * base; if (base < 16) { multiplier *= base; base_multiplied++; } if (base < 8) { multiplier *= base; base_multiplied++; } while (value > multiplier) { uint64_t q = value / multiplier; uint16_t r = value - q * multiplier; for (uint8_t j = 0; j < base_multiplied; j++) { uint16_t rq = r / base; buffer[i--] = base16char(r - rq * base); r = rq; } value = q; } uint16_t remaining = value; while (remaining > 0) { uint16_t q = remaining / base; buffer[i--] = base16char(remaining - q * base); remaining = q; } } if (base == DEC && sign) buffer[i--] = '-'; else if (prefix) { if (base == HEX) { buffer[i--] = 'x'; buffer[i--] = '0'; } else if (base == OCT) buffer[i--] = '0'; else if (base == BIN) buffer[i--] = 'B'; } return String(&buffer[i + 1]); } String Int64ToString(int64_t value, uint8_t base, bool prefix) { bool sign = base == DEC && value < 0; uint64_t uvalue = sign ? -value : value; return Int64ToString(uvalue, base, prefix, sign); } uint64_t StringToInt64(String str) { return StringToInt64(str.c_str(), str.length()); } uint64_t StringToInt64(const char *s, uint16_t sz = 0U) { uint64_t val = 0ULL; if (s == nullptr) return val; if (sz <= 0) sz = strlen(s); if (sz <= 2) return val; uint16_t i = (((s[0] == '0') && ((s[1] == 'x') || (s[1] == 'X'))) ? 2U : 0U); for (; i < sz; i++) { const char c = s[i]; if (!isxdigit(c)) return -1ULL; val *= 16; val += (c >= '0' && c <= '9') ? c - '0' : c - 'A' + 10; } return val; } I gave the sources as an apology for the created topic :)
  • Development Boards for Atmega328 and Esp32 DevKit

    1
    0 Votes
    1 Posts
    27 Views
    No one has replied
  • 3dprint case for motion, temp and humidity sensors with radio and batteries

    18
    5 Votes
    18 Posts
    6k Views
    S
    @ikkeT what cap did you put on the nrf? because i also did have problems with transmission and i solved it with other caps in parrallel on vcc and gnd! when on batteries: 10uf elektrolitic 0.1nf ceramic 100uf tantalum on the voltage regulator i think also before 0.1nf and a 10uf to lower the noise on the power line output what you think about that? grtz
  • 1 Votes
    3 Posts
    73 Views
    A
    I completely forgot to mention that it used to make loud noises, and we had to switch it off most of the time to give our brain to rest. Once I came home and saw a lot of water around this purifier. We spent a lot of money to repair it. As a result, it went to the trash where it was supposed to be. Recently we faced another problem. A lot of giant spiders appeared in our house. We were searching for different methods online on how to get rid of them, and we found this article (spam link removed by moderator). Also, we found there another air purifier, and we ordered it straight away.
  • pressure sensor MPS20N0040D

    mysensors
    3
    1
    0 Votes
    3 Posts
    34 Views
    mfalkviddM
    When you post the sketch, please post the text, not a photo of the screen.
  • [RFM95] Ant Switch/TxRx switch pins

    2
    0 Votes
    2 Posts
    46 Views
    tekkaT
    @eiten A similar approach was used for a NRF5 +PA/LNA module: https://github.com/mysensors/MySensors/pull/1414/files#diff-7b958e4728831b83d2359a08827bcae1R64-R80
  • ESP8266 nRF24L01 Gateway - photos of the finished device

    1
    5
    3 Votes
    1 Posts
    42 Views
    No one has replied
  • VEML6075 reading value with STM32 HAL library

    1
    3
    0 Votes
    1 Posts
    28 Views
    No one has replied
  • Pi 4 ethernet gateway with NRF24L01 + PA and LNA & Domoticz

    gateway
    17
    0 Votes
    17 Posts
    156 Views
    mfalkviddM
    Cool project @bsmtdweller New thread or stay in this doesn't matter much, but for people searching the forum (or their favorite search engine) in the future, I think a new thread with a subject containing "incubator" will be more clear. I would build it with multiple nodes. Smaller chunks of code, easier wiring, easier to isolate individual parts which helps tremendously when troubleshooting, easer to reuse code for one node in case you (or someone else) want to expand the project later, easier to remove a part if you (or someone else) don't need it. The non-mysensors code is more important, so I would start with that, but make sure all parameters that you want to be able to change are stored in variables and not hardcoded. Then add the MySensors code to update the values of the variables. The autonomy will be hard. Normally I would prefer to have all logic in the controller, since a controller has much better ways to program and debug stuff. Not fun to write - and maintain - in C with very rudamentary debugging tools. But as you say, being reliant on having Domoticz working all the time might not be good. Having the system fail gracefully will be a challenge. A start could be to search the forum for MY_TRANSPORT_WAIT_READY_MS to see what others have done. And maybe - to make the system as reliable as possible - you should add everything to a single node instead of splitting it up into multiple nodes.
  • Wattermeter from GWF - Readout with M-Bus Port - How to?

    1
    0 Votes
    1 Posts
    27 Views
    No one has replied

39

Online

11.7k

Users

11.2k

Topics

113.1k

Posts