Skip to content

Feature Requests

Got a feature request you'd like to see? Give us a shout here.
223 Topics 1.4k Posts
  • Serial 2 MQTT Gateway

    3
    0 Votes
    3 Posts
    1k Views
    YveauxY
    @siouxme if you connect the moteino as serial gateway to the system running node-red, only a few blocks are required to go from serial to mqtt (or node-red, whatever suits you best)
  • 0 Votes
    54 Posts
    11k Views
    KoreshK
    @d00616 said in Better security without the need of a cryptoprocessor: out-of-band authentication: For long range sub GHz is the better choice. This is physics. You are right. But almost in every country RF laws allow to use 2.4G transmitters up to 100mw (+20dbm) without permitions. It would extend the range a lot. Please help by reporting the issues you have found, so we can create stable 32 bit platform support. I will try :wink:
  • This topic is deleted!

    1
    0 Votes
    1 Posts
    36 Views
    No one has replied
  • Make MySensor network nodes detectable/scanable

    4
    0 Votes
    4 Posts
    1k Views
    L
    Ok, thank you!
  • Setting parameters in nodes

    14
    2 Votes
    14 Posts
    7k Views
    stefaanvS
    @FredRoot Your mqtt-eventbus.cfg configuration should look like this broker=mosquitto statePublishTopic=openHAB/out/${item}/state stateSubscribeTopic=openHAB/in/${item}/state commandSubscribeTopic=openHAB/in/${item}/command
  • MQTT- and Ethernet-Gateway at the same time

    11
    0 Votes
    11 Posts
    2k Views
    S
    @Yveaux Yes you are right, didn't thought about the ack's. Another question. I would like to intercept the message flow in both directions in the gateway to put my logic in (smart sleep). Could you pinpoint me the method where this happens?
  • SmartSleep a feature of the Gateway

    smartsleep gateway openhab
    3
    0 Votes
    3 Posts
    2k Views
    S
    Nice. Didn't know that. But still it would be a great feature for the gateway to give every one the feature of smartSleep despite the controller.
  • Bridge between RF24 and RS485

    17
    1 Votes
    17 Posts
    6k Views
    gohanG
    @ArduiSens actually it should be working with all gateway types
  • Exploit the mysensors network

    6
    0 Votes
    6 Posts
    2k Views
    gohanG
    Yes, that's what I use it. Just connect gateway to domoticz and you have all data from the sensors
  • Domoticz full integration

    79
    1 Votes
    79 Posts
    61k Views
    P
    V_HVAC_FLOW_MODE, V_HVAC_SPEED and V_HVAC_FLOW_STATE handling still missing. No smartSleep implementation yet.
  • Extra command message type for local data requests

    4
    0 Votes
    4 Posts
    2k Views
    BartEB
    OK i did make a prototype implementation using the V_CUSTOM message type. This works for Vera only. I had to change only one file: L_Arduino.lua The function starting on line 244 has te be extened with this if statement: -- Handle Local Request variables if (varType == "CUSTOM") then local bit = require("bit") local varReqIndex = bit.band(tonumber(value), 0xFF); local varVeraId = bit.rshift(tonumber(value), 8); local varReqType = tVarLookupNumType[varReqIndex] local varReq = tVarTypes[varReqType] if (varReq[2] ~= nil) then log("Local request '" .. varReq[3] .. "' from Device ID: ".. varVeraId .. " sensor type '" .. varReqType .. "'") local localValue = luup.variable_get(varReq[2], varReq[3], varVeraId) if (localValue ~= nil) then -- Send variable value to actuator sendRequestResponse(nodeId .. ";" .. childId, varReqType, localValue) end end else The complete function will then look like this: local function setVariable(incomingData, childId, nodeId) if (childId ~= nil) then -- Set variable on child sensor. local index = tonumber(incomingData[5]); local varType = tVarLookupNumType[index] local var = tVarTypes[varType] local value = incomingData[6] local timestamp = os.time() -- Handle Local Request variables if (varType == "CUSTOM") then local bit = require("bit") local varReqIndex = bit.band(tonumber(value), 0xFF); local varVeraId = bit.rshift(tonumber(value), 8); local varReqType = tVarLookupNumType[varReqIndex] local varReq = tVarTypes[varReqType] if (varReq[2] ~= nil) then log("Local request '" .. varReq[3] .. "' from Device ID: ".. varVeraId .. " sensor type '" .. varReqType .. "'") local localValue = luup.variable_get(varReq[2], varReq[3], varVeraId) if (localValue ~= nil) then -- Send variable value to actuator sendRequestResponse(nodeId .. ";" .. childId, varReqType, localValue) end end elseif (var[2] ~= nil) then log("Setting variable '".. var[3] .. "' to value '".. value.. "'") setVariableIfChanged(var[2], var[3], value, childId) -- Handle special variables battery level and tripped which also -- should update other variables to os.time() if (varType == "TRIPPED" and value == "1") then local variable = tVeraTypes["LAST_TRIP"] setVariableIfChanged(variable[2], variable[3], timestamp, childId) else local variable = tVeraTypes["LAST_UPDATE"] setVariableIfChanged(variable[2], variable[3], timestamp, childId) end end -- Always update LAST_UPDATE for node if (nodeId ~= nil) then local nodeDevice = childIdLookupTable[nodeId .. ";" .. NODE_CHILD_ID] setLastUpdate(nodeDevice) end end end Now the Vera HA-contoller response on V_CUSTOM messages. Use the feature in a MySensors node: void requestValue(byte type, unsigned int id) { MyMessage msgRequest(1, V_CUSTOM); unsigned long msgData; msgData = type + ((unsigned long)id * 0x100); send(msgRequest.set(msgData)); } void loop() { // Request the status from Vera Device 4 requestValue(V_STATUS, 4); // Request the dimn level from Vera Device 20 requestValue(V_LEVEL, 20); // etc.. } Make sure you can handle the incoming messages void receive(const MyMessage &message) { if (message.type==V_STATUS) { Serial.print(" New value: "); Serial.println(message.getBool()); } if (message.type==V_LEVEL) { Serial.print(" New value: "); Serial.println(message.getByte()); } if (message.type==V_TEMP) { Serial.print(" New value: "); Serial.println(message.getFloat()); } } If you need the same value type from different Device a different sensor id can be used, the requestValue will then look like this: void requestValue(byte type, unsigned int id, byte sensorid) { MyMessage msgRequest(sensorid, V_CUSTOM); unsigned long msgData; msgData = type + ((unsigned long)id * 0x100); send(msgRequest.set(msgData)); } In the receive function "message.sensor" can be used to determine for which device a request was made
  • Transport overhead optimization

    8
    0 Votes
    8 Posts
    3k Views
    mfalkviddM
    @mihai.aldea That is because it was written before I knew you were using LoRa. Look at the sentence just before that question. It says "If I understand correctly, you are using the fsk mode of the rfm96?"
  • One-time init only

    9
    0 Votes
    9 Posts
    2k Views
    ChristWC
    Here are my sketches: The TimeMaster: #define CHILD_ID_TIME 1 #define CHILD_ID_SIGNAL 2 #define TARGET 27 // #define TARGET 26 MyMessage msgTime(CHILD_ID_TIME, V_CUSTOM); MyMessage msgSignal(CHILD_ID_SIGNAL, V_STATUS); #include "DCF77.h" #include "Time.h" #define DCF_PIN 2 // Connection pin to DCF 77 device #define DCF_INTERRUPT digitalPinToInterrupt(DCF_PIN) // Interrupt number associated with pin time_t time; bool bPresented = false; DCF77 DCF = DCF77(DCF_PIN, DCF_INTERRUPT); void startDCF() { static bool bDCFStarted = false; if (!bDCFStarted) { DCF.Start(); pinMode(DCF_PIN, INPUT_PULLUP); Serial.println("Waiting for DCF77 time ... "); Serial.println("It will take at least 2 minutes until a first update can be processed."); bDCFStarted = true; } } void preHwInit() { Serial.begin(MY_BAUD_RATE); Serial.println(); startDCF(); } void setup() { msgSignal.setDestination(TARGET); msgTime.setDestination(TARGET); } void presentation() { present(CHILD_ID_TIME, S_CUSTOM); present(CHILD_ID_SIGNAL, S_BINARY); } bool bHaveTime = false; unsigned long lastSentTime = 0; void loop() { time_t DCFtime = DCF.getTime(); // Check if new DCF77 time is available if (DCFtime != 0) { Serial.println("Time is updated"); setTime(DCFtime); bHaveTime = true; lastSentTime = minute(); } if (bHaveTime) { if (DCFtime != 0) { Serial.println("Just obtained time. Send a message!"); msgTime.set(DCFtime); send(msgTime); } if (minute() != lastSentTime) { Serial.println("A minute has passed. Send a message!"); msgTime.set(now()); send(msgTime); lastSentTime = minute(); } } } The night light: #define MY_RADIO_NRF24 #define MY_DEBUG // #define MY_NODE_ID 27 // #define MY_GATEWAY_SERIAL #include <MySensors.h> #include <SPI.h> #include <Adafruit_NeoPixel.h> #include <avr/power.h> #include <EEPROM.h> #include <Time.h> #define colorNight(s) (s.Color(255, 20, 147)) // Purple #define colorDay(s) (s.Color( 0, 0, 0)) // Black #define colorMorn(s) (s.Color( 44, 201, 13)) // Green #define colorError(s) (s.Color(255, 0, 0)) #define colorUp(s) (s.Color( 0, 255, 0)) #define colorDown(s) (s.Color( 0, 0, 255)) #define PIN 6 Adafruit_NeoPixel strip = Adafruit_NeoPixel(1, PIN, NEO_GRB + NEO_KHZ800); unsigned long colorPixel = 0; unsigned long colorOld = 0xffff; bool bHaveTime = false; bool bEmergencyMode = false; bool bEmergencyModeChecked = false; void setPixelColor(unsigned long color) { colorPixel = color; } void doSetPixelColor(long color) { if (!bEmergencyMode || color == colorMorn(strip) || color == colorNight(strip)) { strip.setPixelColor(0, color); strip.show(); } } void doSetPixelColor() { if (colorOld != colorPixel) { doSetPixelColor(colorPixel); colorOld = colorPixel; } } void receive(const MyMessage &message) { if (!bHaveTime && message.type == V_STATUS) { setPixelColor(message.getBool() ? colorUp(strip) : colorDown(strip)); } else if (message.type == V_CUSTOM) { time_t timeNow = message.getULong(); setTime(timeNow); bHaveTime = true; } } void presentation() { setPixelColor(colorUp(strip)); present(0, S_LIGHT); } void before() { strip.begin(); doSetPixelColor(colorDown(strip)); strip.show(); // Initialize all pixels to 'off' } void setup() { // This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket #if defined (__AVR_ATtiny85__) if (F_CPU == 16000000) clock_prescale_set(clock_div_1); #endif // End of trinket special code Serial.begin(115200); EEPROM.write(300 + 2, EEPROM.read(300 + 1)); EEPROM.write(300 + 1, EEPROM.read(300 + 0)); EEPROM.write(300 + 0, 0xff); } void loop() { static unsigned long int lastLoop = -1; if (lastLoop == -1 || millis() < lastLoop || millis() - lastLoop > 60000) { // request(0, V_CUSTOM, 42); lastLoop = millis(); } if (!bEmergencyModeChecked && millis() < 5000) { bEmergencyMode = false; bEmergencyModeChecked = true; bool bNeedEmergencyMode = true; for (int t = 0; t <= 2; ++t) { if (EEPROM.read(300 + t) != 0xff) { bNeedEmergencyMode = false; } } bEmergencyMode = bNeedEmergencyMode; if (bEmergencyMode) { setPixelColor(colorNight(strip)); } } if (bEmergencyModeChecked && millis() >= 10000) { EEPROM.write(300 + 0, 0); bEmergencyModeChecked = false; } if (bEmergencyMode && millis() > 12L * 60 * 60 * 1000) { setPixelColor(colorMorn(strip)); } if (bHaveTime) { if (hour() >= 19 || hour() < 7) { setPixelColor(colorNight(strip)); } else if (hour() >= 8) { setPixelColor(colorDay(strip)); } else if (hour() >= 7) { setPixelColor(colorMorn(strip)); } } doSetPixelColor(); } Emergency mode on the night light is triggered by starting and stopping it three times within 10 seconds each time, so that if it can't find a time source, you can still get 12 hours of 'night light' followed by 'day light'. In the night light, I commented out the request() call (and I took out the receive() implementation in the TimeMaster) because I ran into the DCF time receiver starting again every time. Any more info you need right now? Just shout!
  • Add V_FREQUENCY

    1
    1 Votes
    1 Posts
    687 Views
    No one has replied
  • Add new V_ACTION behavior for window shade/cover (and perhaps others)

    6
    0 Votes
    6 Posts
    2k Views
    pansenP
    Why, just always send V_STATUS=ON and implement it properly in your node (i.e. toggle on reception).
  • Z-uno Gateway

    2
    0 Votes
    2 Posts
    1k Views
    FotoFieberF
    @thomme This gateway has to remember all the sensors on the mysensors network. If you would add a new sensor, you would have to detach and reattach the Z-Uno from zWave network. I don't think you have enough memory on the Z-Uno to do such a gateway and AFAIK the sensor types supported on the Z-Uno are very limited. My solution for integrating different iot systems is mqtt with node-red. All systems have an adapter to a generic message structure and can be connected to all the others. I use a mix of homegear,/homematic mysensors, netatmo, zWave, owntracks, Alexa, imperihome, Sonoff...
  • Registration bug : no captcha

    2
    3 Votes
    2 Posts
    912 Views
    hekH
    Thanks for reporting!
  • Copy code from posts

    1
    2 Votes
    1 Posts
    722 Views
    No one has replied
  • Error Handling

    3
    0 Votes
    3 Posts
    1k Views
    mfalkviddM
    I googled a bit and found out this: Vera seems to support email and sms http://wiki.micasaverde.com/index.php/Set_up_of_Notifications And more notification options can be added by installing plugins such as this http://www.veramate.com/faq/push-notifications
  • Requesting a garage door sensor type.

    21
    0 Votes
    21 Posts
    6k Views
    dbemowskD
    @RoushRS3 said: it needs tot turn on and then immediately turn off, and it does not do that. If you look at the code for my garage door node, mine does that. Everything for that is handled by the node This is the code in the main loop that does that: //If the relay is on, shut it off if ( digitalRead( DOOR_ACTUATOR_RELAY ) == 1) { relayOff(); } In the relayOff method the relay is shut off and then informs the controller that it has been shut off: /** * relayOff - Used to turn off the door opener relay after the TOGGLE_INTERVAL */ void relayOff() { digitalWrite( DOOR_ACTUATOR_RELAY, RELAY_OFF ); //Added this to tell the controller that we shut off the relay send( msgOpener.set(0) ); } //End relayOff So on the controller, you should see the switch turn on, and then immediately shut off.

8

Online

11.7k

Users

11.2k

Topics

113.1k

Posts