A very beginner needs help - MySensors and OpenHab !
-
Thanks TimO, i didn't have time today to check your example but yesterday i deleted everything and started all over again following your example. During the tests I saw that if I add some new addresses in the hash map the local host is not refreshing anymore and in the server side I still see the updates but is just the hum or temp value without any label like livingTemp01 Temp: 31as it is if I delete the new addresses for the kWh like "101;18;" ->"livingkwh01".
Today il try your example from above and hopefully it will work :)
Many thanks and sorry for any spell mistakes, this time I'm writing on my phone too :)
Have a nice day! -
I have tested your example (above) and its not working. After i deleted all in the hashmap in the rule file, i can say its not refreshing the values on the localhost but i still can see them in the server monitor:
This is how it shows if i have only the temp and hum in the hashmap:2015-07-22 19:58:11.891 [INFO ] [runtime.busevents ] - livingTemp01 state updated to 33.0 Temp item: livingTemp01 temp: 33.0If i add another address in the hashmap like this:
"101;18;" -> "livingKwh18", // CHILD_ID_KWH == 18 changed in the sketch too! "livingKwh18" -> "101;18;",the local host is freezing but the server is still updating the values only that this time in a different way:
2015-07-22 20:08:53.140 [INFO ] [runtime.busevents ] - Arduino state updated to 0;0;3;0;9;read: 101-101-0 s=3,c=1,t=0,pt=7,l=5:33.0 101;3;1;0;0;33.0As for the Kwh i see something in the server side which i suppose is the Kwh value (don't have the CT sensor connected yet) but it doesn't appear in the localhost!
This is what it shows and i suppose the last value 0,6 is the value read on Arduino analog pin A0:2015-07-22 20:12:38.319 [INFO ] [runtime.busevents ] - Arduino state updated to 0;0;3;0;9;read: 101-101-0 s=17,c=1,t=17,pt=7,l=5:607246.3 101;17;1;0;17;607246.3 0;0;3;0;9;read: 101-101-0 s=18,c=1,t=18,pt=7,l=5:0.6 101;18;1;0;18;0.6Regarding the two switches, they are still dead after i added the items you gave me in the items file and i get this error on the server when i switch on /off any of them but it seems its still sending the command:
2015-07-22 20:46:43.839 [INFO ] [runtime.busevents ] - lightKitchenC abinet01 received command OFF 2015-07-22 20:46:43.840 [ERROR] [o.u.i.items.ItemUIRegistryImpl] - Cannot retrie ve item kLights for widget org.openhab.model.sitemap.Group 2015-07-22 20:46:43.844 [ERROR] [o.u.i.items.ItemUIRegistryImpl] - Cannot retrie ve item kLights for widget org.openhab.model.sitemap.Group 2015-07-22 20:46:43.845 [ERROR] [o.u.i.items.ItemUIRegistryImpl] - Cannot retrie ve item kLights for widget org.openhab.model.sitemap.Group 2015-07-22 20:46:43.846 [ERROR] [o.u.i.items.ItemUIRegistryImpl] - Cannot retrie ve item kLights for widget org.openhab.model.sitemap.Group 2015-07-22 20:46:43.847 [ERROR] [o.u.i.items.ItemUIRegistryImpl] - Cannot retrie ve item kLights for widget org.openhab.model.sitemap.Group 2015-07-22 20:46:44.151 [ERROR] [o.u.i.items.ItemUIRegistryImpl] - Cannot retrie ve item kLights for widget org.openhab.model.sitemap.Group 2015-07-22 20:46:44.156 [ERROR] [o.u.i.items.ItemUIRegistryImpl] - Cannot retrie ve item kLights for widget org.openhab.model.sitemap.Group 2015-07-22 20:46:44.157 [ERROR] [o.u.i.items.ItemUIRegistryImpl] - Cannot retrie ve item kLights for widget org.openhab.model.sitemap.Group 2015-07-22 20:46:44.158 [ERROR] [o.u.i.items.ItemUIRegistryImpl] - Cannot retrie ve item kLights for widget org.openhab.model.sitemap.Group 2015-07-22 20:46:44.159 [ERROR] [o.u.i.items.ItemUIRegistryImpl] - Cannot retrie ve item kLights for widget org.openhab.model.sitemap.Group 2015-07-22 20:46:44.312 [ERROR] [o.u.i.items.ItemUIRegistryImpl] - Cannot retrie ve item kLights for widget org.openhab.model.sitemap.Group 2015-07-22 20:46:44.315 [ERROR] [o.u.i.items.ItemUIRegistryImpl] - Cannot retrie ve item kLights for widget org.openhab.model.sitemap.Group 2015-07-22 20:46:44.316 [ERROR] [o.u.i.items.ItemUIRegistryImpl] - Cannot retrie ve item kLights for widget org.openhab.model.sitemap.Group 2015-07-22 20:46:44.317 [ERROR] [o.u.i.items.ItemUIRegistryImpl] - Cannot retrie ve item kLights for widget org.openhab.model.sitemap.Group 2015-07-22 20:46:44.317 [ERROR] [o.u.i.items.ItemUIRegistryImpl] - Cannot retrie ve item kLights for widget org.openhab.model.sitemap.Group 2015-07-22 20:46:58.925 [INFO ] [runtime.busevents ] - Arduino statewhich i suppose is related to the sitemap, items and the rule files and here i still can work until i lose the errors but the problem is (i think !) in the Arduino sketch because i dont think they match with that code I have right now from you, speaking about the same sketch you posted here http://forum.mysensors.org/topic/655/serial-gateway-connection-to-openhab/3.
Any chance to make it work? :(:cry: :weary: -
Remove the "item=kLights" that makes no sense and produces the error you posted.
{ Frame label="Dormitor" { Text item=livingTemp01 Text item=livingHum01 Text item=livingKwh01 } Frame label="Lights" { Group label="Lights" { Switch item=lightBar01 label="Bar Lights" Switch item=lightKitchenCabinet01 label="Cabinet Lights" } }The update of the Temperature looks good, can't figure out, why the value is not shown in on the webpage.
Here is my output :
Temp item: workTemp01 temp: 25.4 2015-07-22 21:53:14.902 [INFO ] [runtime.busevents ] - workTemp01 state updated to 25.4Did you refresh the webpage (silly question I know)?
Regarding the switches:
rule "lightBar04 Switch Rule" when Item lightBar04 changed then switchOperation.apply(lightBar04, Arduino, sensorToItemsMap.get("lightBar04"), V_LIGHT) endChange that to:
rule "Light" when Item lightBar01 received update then if(receivedCommand == ON) { sendCommand(Arduino, "101;1;1;0;2;1\n") } if(receivedCommand == OFF) { sendCommand(Arduino, "101;1;1;0;2;0\n") } endLet's see what works now. ;-)
-
Hi TimO,
There is no chance to make it work. The server is ok, receive info from both sides, from web switches (ok now with that stupid klight removed) and from sensors too one by one (it can be seeing by addresses: s0, s3, s4, s5) but the webpage (on localhost) is frozen, cant understand why!
Could you please test this files on your pc? bellow are the files modified according to your indications:
Openhab items, rules, sitemap:String Arduino "Arduino" { serial="COM4@115200" } Number livingTemp01 "Temperatura [%.1f °C]" <temperature> Number livingHum01 "Umiditate [%.1f %%]" <water> Number livingWatt01 "Consum Electric Watt [%.1f Watt]" <energy> Number livingKwh01 "Consum Electric Kilowattora [%.1f kWh]" <energy> Switch lightBar01 "Bar Lights" Switch lightKitchenCabinet01 "Cabinet Lights" =================================================================== import org.openhab.core.library.types.* import org.openhab.core.persistence.* import org.openhab.model.script.actions.* import org.joda.time.* import java.util.* import org.eclipse.xtext.xbase.lib.* import org.openhab.core.items.* var String ArduinoUpdate = "" var String sketchName = "" var int V_TEMP = 0 var int V_HUM = 1 var int V_LIGHT = 2 var int V_DIMMER = 3 var int V_PRESSURE = 4 var int V_FORECAST = 5 var int V_RAIN = 6 var int V_RAINRATE = 7 var int V_WIND = 8 var int V_GUST = 9 var int V_DIRECTION = 10 var int V_UV = 11 var int V_WEIGHT = 12 var int V_DISTANCE = 13 var int V_IMPEDANCE = 14 var int V_ARMED = 15 var int V_TRIPPED = 16 var int V_WATT = 17 var int V_KWH = 18 var int V_SCENE_ON = 19 var int V_SCENE_OFF = 20 var int V_HEATER = 21 var int V_HEATER_SW = 22 var int V_LIGHT_LEVEL = 23 var int V_VAR1 = 24 var int V_VAR2 = 25 var int V_VAR3 = 26 var int V_VAR4 = 27 var int V_VAR5 = 28 var int V_UP = 29 var int V_DOWN = 30 var int V_STOP = 31 var int V_IR_SEND = 32 var int V_IR_RECEIVE = 33 var int V_FLOW = 34 var int V_VOLUME = 35 var int V_LOCK_STATUS = 36 var int V_DUST_LEVEL = 37 var int V_VOLTAGE = 38 var int V_CURRENT = 39 var int msgPresentation = 0 var int msgSet = 1 var int msgReq = 2 var int msgInternal = 3 var int msgStream = 4 var int alarmArmor = 1 // Internal Commands var int I_BATTERY_LEVEL = 0 var int I_TIME = 1 var int I_VERSION = 2 var int I_ID_REQUEST = 3 var int I_ID_RESPONSE = 4 var int I_INCLUSION_MODE = 5 var int I_CONFIG = 6 var int I_FIND_PARENT = 7 var int I_FIND_PARENT_RESPONSE = 8 var int I_LOG_MESSAGE = 9 var int I_CHILDREN = 10 var int I_SKETCH_NAME = 11 var int I_SKETCH_VERSION = 12 var int I_REBOOT = 13 var int I_GATEWAY_READY = 14 // Mappings var HashMap<String, String> sensorToItemsMap = newLinkedHashMap( "101;0;" -> "livingHum01", // looks good "livingHum01" -> "101;0;", "101;1;" -> "lightBar01", "lightBar01" -> "101;1;", "101;2;" -> "lightKitchenCabinet01", "lightKitchenCabinet01" -> "101;2;", "101;3;" -> "livingTemp01", "livingTemp01" -> "101;3;" "101;4;" -> "livingWatt01", // CHILD_ID_KWH == 4 and in the sitemaps it is called livingKwh01!! "livingWatt01" -> "101;4;", "101;5;" -> "livingKwh01", // CHILD_ID_KWH == 5 and in the sitemaps it is called livingKwh01!! "livingKwh01" -> "101;5;", ) //receiving msg from mysensors gateway rule "Arduino sends to Openhab" when Item Arduino received update then var String lineBuffer = Arduino.state.toString.split("\n") for (String line : lineBuffer) { var String[] message = line.split(";") var Integer nodeId = new Integer(message.get(0)) var Integer childId = new Integer(message.get(1)) var Integer msgType = new Integer(message.get(2)) var Integer ack = new Integer(message.get(3)) var Integer subType = new Integer(message.get(4)) var String msg = message.get(5) if(msgType == 1 ){ if (subType == V_TEMP){ postUpdate(sensorToItemsMap.get( nodeId + ";" + childId + ";"), msg) println ("Temp item: " + sensorToItemsMap.get( nodeId + ";" + childId + ";") + " temp: " + msg ) } if (subType == V_HUM){ postUpdate(sensorToItemsMap.get( nodeId + ";" + childId + ";"), msg) println ("Hum item: " + sensorToItemsMap.get( nodeId + ";" + childId + ";") + " hum: " + msg ) } if (subType == V_WATT){ postUpdate(sensorToItemsMap.get( nodeId + ";" + childId + ";"), msg) println ("Watt item: " + sensorToItemsMap.get( nodeId + ";" + childId + ";") + " watt: " + msg ) } if (subType == V_KWH){ postUpdate(sensorToItemsMap.get( nodeId + ";" + childId + ";"), msg) println ("Kwh item: " + sensorToItemsMap.get( nodeId + ";" + childId + ";") + " kwh: " + msg ) } if (subType == V_LIGHT){ var String state var Integer statusInt = new Integer(message.get(5)) if(statusInt == 1) { state = "ON" } else { state = "OFF" } postUpdate(sensorToItemsMap.get( nodeId + ";" + childId + ";"), state) println ("Light Item: " + sensorToItemsMap.get( nodeId + ";" + childId + ";") + " Light: " + state ) } } // Internal Command if(msgType == 3){ if(subType == I_SKETCH_NAME){ println("Sketch name: " + msg ) sketchName=msg } if(subType == I_SKETCH_VERSION){ println("Sketch version: " + msg ) postUpdate(sensorToItemsMap.get( nodeId + ";" + childId + ";"), sketchName+" " +msg ) sketchName="" } } } } end rule "Light" when Item lightBar01 received update then if(receivedCommand == ON) { sendCommand(Arduino, "101;1;1;0;2;1\n") } if(receivedCommand == OFF) { sendCommand(Arduino, "101;1;1;0;2;0\n") } end ======================================================================= sitemap demo label="Acasa" { Frame label="Dormitor" { Text item=livingTemp01 Text item=livingHum01 Text item=livingWatt01 Text item=livingKwh01 } Frame label="Lights" { Group label="Lights" { Switch item=lightBar01 label="Bar Lights" Switch item=lightKitchenCabinet01 label="Cabinet Lights" } }and the same Arduino sketch:
// Example sketch showing how to control physical relays. // This example will remember relay state even after power failure. #include <MySensor.h> #include <SPI.h> #include <DHT.h> #include "EmonLib.h" // Include Emon Library EnergyMonitor emon1; #define NODE_ID 101 #define RELAY_1 3 // Arduino Digital I/O pin number for first relay (second on pin+1 etc) #define NUMBER_OF_RELAYS 2 // Total number of attached relays #define RELAY_ON 1 // GPIO value to write to turn on attached relay #define RELAY_OFF 0 // GPIO value to write to turn off attached relay #define CHILD_ID_HUM 0 // CHILD IDs 1 and 2 will be used by the relays!! ########################### #define CHILD_ID_TEMP 3 // ########################### #define CHILD_ID_WATT 4 // 17 should work too ########################### #define CHILD_ID_KWH 5 // 17 should work too ########################### #define HUMIDITY_SENSOR_DIGITAL_PIN 12 unsigned long SLEEP_TIME = 30000; // Sleep time between reads (in milliseconds) unsigned long lastSend; unsigned long SEND_FREQUENCY = 20000; // Minimum time between send (in milliseconds). We don't wnat to spam the gateway. MySensor gw(48, 49); DHT dht; float lastTemp; float lastHum; boolean metric = true; MyMessage msgHum(CHILD_ID_HUM, V_HUM); MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP); MyMessage IrmsMsg(CHILD_ID_WATT,V_WATT); MyMessage kWhMsg(CHILD_ID_KWH,V_KWH); unsigned long lastCheckTime = millis(); void setup() { // Initialize library and add callback for incoming messages gw.begin(incomingMessage, NODE_ID, true); // Send the sketch version information to the gateway and Controller gw.sendSketchInfo("Relay + Energy Meter", "1.0"); //gw.sendSketchInfo("Energy Meter", "1.0"); // Send the sketch version information to the gateway and Controller gw.present(CHILD_ID_KWH, S_POWER); // Register this device as power sensor emon1.current(A0, 29.0); // Current: input pin, calibration. // Fetch relay status for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++, pin++) { // Register all sensors to gw (they will be created as child devices) gw.present(sensor, S_LIGHT); // Then set relay pins in output mode pinMode(pin, OUTPUT); // Set relay to last known state (using eeprom storage) //digitalWrite(pin, gw.loadState(sensor)?RELAY_ON:RELAY_OFF); digitalWrite(pin, RELAY_OFF); } dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN); // Register all sensors to gw (they will be created as child devices) gw.present(CHILD_ID_HUM, S_HUM); gw.present(CHILD_ID_TEMP, S_TEMP); //metric = gw.getConfig().isMetric; } void loop() { // Alway process incoming messages whenever possible gw.process(); updateHumidityTemp(); unsigned long now = millis(); //emon1.serialprint(); // Print out all variables (realpower, apparent power, Vrms, Irms, power factor) double Irms = emon1.calcIrms(1480); bool sendTime = now - lastSend > SEND_FREQUENCY; if (sendTime) { gw.send(IrmsMsg.set((Irms*232.0)*1000, 1)); // Serial.print("Watt: "); // Serial.println(Irms*232.0); gw.send(kWhMsg.set((Irms*232.0)/1000, 1)); // Serial.print("kWH: "); // Serial.println((Irms*232.0)/1000); lastSend = now; } //gw.sleep(SLEEP_TIME); //sleep a bit } void updateHumidityTemp() { if(lastCheckTime + SLEEP_TIME < millis() || lastCheckTime == 0) { //delay(dht.getMinimumSamplingPeriod()); float humidity = dht.getHumidity(); if (isnan(humidity)) { Serial.println("Failed reading humidity from DHT"); } else if (humidity != lastHum) { lastHum = humidity; gw.send(msgHum.set(humidity, 1)); Serial.print("H: "); Serial.println(humidity); } lastCheckTime = millis(); } float temperature = dht.getTemperature(); if (isnan(temperature)) { Serial.println("Failed reading temperature from DHT"); } else if (temperature != lastTemp) { lastTemp = temperature; if (!metric) { temperature = dht.toFahrenheit(temperature); } gw.send(msgTemp.set(temperature, 1)); Serial.print("T: "); Serial.println(temperature); } } void incomingMessage(const MyMessage &message) { // We only expect one type of message from controller. But we better check anyway. if (message.type==V_LIGHT) { // Change relay state digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF); // Store state in eeprom gw.saveState(message.sensor, message.getBool()); // Write some debug info Serial.print("Incoming change for sensor:"); Serial.print(message.sensor); Serial.print(", New status: "); Serial.println(message.getBool()); } }Many thanks for your time.
-
About the sensors, if i add another address in the hashmap other than temp and hum the web freezes, if i leave only the temp and hum, the web page can be refreshed and will display the temp and hum values. In the mean time my server receive info as i said previously from both sides (webpage and sensors) but is not sending them forward.
have anyone made it with relay with button actuators and openhab? the task would be to switch on/off the relay from webpage and button and to get the status on the web page even if the relay is operated from that physical button.About the CT sensor, in the server monitor i get this msg:
2015-07-24 13:34:09.614 [WARN ] [.model.script.actions.BusEvent] - Item 'null' does not exist. Watt item: null watt: 621372.3 2015-07-24 13:34:13.805 [WARN ] [.model.script.actions.BusEvent] - Item 'null' does not exist. Kwh item: null kwh: 0.6I guess this "null" is because i didnt connect yet the CT sensor? Can anyone who have exp. with this kind of sensor help me? my Openhab config are above.
Thanks for any help. -
This post is deleted!
-
With this rule:
rule "Light" when Item lightBar01 received update then if(receivedCommand == ON) { sendCommand(Arduino, "101;1;1;0;2;1\n") } if(receivedCommand == OFF) { sendCommand(Arduino, "101;1;1;0;2;0\n") } endi get this error:
2015-07-24 17:40:02.994 [INFO ] [runtime.busevents ] - lightBar01 received command ON 2015-07-24 17:40:03.020 [ERROR] [o.o.c.s.ScriptExecutionThread ] - Error during the execution of rule 'Light': The name 'receivedCommand' cannot be resolved toan item or type.i cant believe that there are 1.7k users here, more than 1k online, more than 500 views (including mine (maybe half them :)) and nobody helps :eyes:
-
can anyone try my example above and tell me if it is working or not? speaking to hero members, not to those as me! Common people, please help us, we are not stealing your jobs or future, we just want to light a simple led on/off!
thanks to all intelligent people here :P -
i cant believe that there are 1.7k users here, more than 1k online, more than 500 views (including mine (maybe half them :)) and nobody helps :eyes:
People might not have run into the same problems as you're having you know. And the amount of community members running OpenHab+MQTT isn't that huge I guess. So even if many here would like to help you we don't have the time or possibility to re-create your environment.
A good approach to isolate the problem (shaving off as much as much irrelevant stuff as possible). You know that the wireless communication is working... so something must be wrong in the rules or you've found some kind of bug in OpenHab.
You don't need CTs to test sending in a value from the Arduino.. Just set and send any value using the API to test it. Mocking is a good approach when testing.
-
i cant believe that there are 1.7k users here, more than 1k online, more than 500 views (including mine (maybe half them :)) and nobody helps :eyes:
People might not have run into the same problems as you're having you know. And the amount of community members running OpenHab+MQTT isn't that huge I guess. So even if many here would like to help you we don't have the time or possibility to re-create your environment.
A good approach to isolate the problem (shaving off as much as much irrelevant stuff as possible). You know that the wireless communication is working... so something must be wrong in the rules or you've found some kind of bug in OpenHab.
You don't need CTs to test sending in a value from the Arduino.. Just set and send any value using the API to test it. Mocking is a good approach when testing.
@hek thanks for your replay! i'm not using OpenHab+MQTT but the serial gateway communication explained by @TimO and i got the errors shown above so my questions are point by point. i tried different ways to see if i can get loose of the errors but no chance and than i came here asking for help.
My idea was if somebody have the needed time to test my config (opehab + arduino) and to tell me if is working on their pc or not and maybe some instructions where or what needs to be changed, modified deleted or added.
I count on experienced people who can see quikly where is the mistake and who could give me useful information as for example @TimO did at one point.Once again, besides hum and temp that works at this hour i need to add a few buttons who could turn a light on/of from openhab and from physiscal buttons too and to understand why if i add a new device as CT sensor its not displaying anymore the rest of the devices.
Thanks for understanding. -
Hi @ewgor ,
could you make your whole configuration available for download? It is easier for us to help you to find the error.
@TimO what do you mean by " configuration available for download"? i'm combining different Arduino sketches found here on the site and i'm trying to find a way to match them with the Openhab configuration found here too! All my files are above but right now i'm trying to combine the Arduino sketch from above with this one for relay with button actuator from here http://www.mysensors.org/build/relay and its very difficult. couldn't do it today, maybe tomorrow :(
As a conclusion because i don't know if i was very clear: Could anyone help me combine Arduino sketch from above with the one for relay with button actuator for 2 (two relays and two buttons) devices and to check the Openhab config which are above too? As i already said, today o tried all day long to combine them but cant lose the errors, it cant compile :(Hoping for an answer ...
-
People, still struggling to get the relay with button actuator working with openhab!
This time im using the Arduino example from here http://www.mysensors.org/build/relay (the 2nd one) with this Openhab configuration:
Rules (forget the temp and hum part):import org.openhab.core.library.types.* import org.openhab.core.persistence.* import org.openhab.model.script.actions.* import org.joda.time.* import java.util.* import org.eclipse.xtext.xbase.lib.* import org.openhab.core.items.* var String ArduinoUpdate = "" var String sketchName = "" var int V_TEMP = 0 var int V_HUM = 1 var int V_LIGHT = 2 var int V_DIMMER = 3 var int V_PRESSURE = 4 var int V_FORECAST = 5 var int V_RAIN = 6 var int V_RAINRATE = 7 var int V_WIND = 8 var int V_GUST = 9 var int V_DIRECTION = 10 var int V_UV = 11 var int V_WEIGHT = 12 var int V_DISTANCE = 13 var int V_IMPEDANCE = 14 var int V_ARMED = 15 var int V_TRIPPED = 16 var int V_WATT = 17 var int V_KWH = 18 var int V_SCENE_ON = 19 var int V_SCENE_OFF = 20 var int V_HEATER = 21 var int V_HEATER_SW = 22 var int V_LIGHT_LEVEL = 23 var int V_VAR1 = 24 var int V_VAR2 = 25 var int V_VAR3 = 26 var int V_VAR4 = 27 var int V_VAR5 = 28 var int V_UP = 29 var int V_DOWN = 30 var int V_STOP = 31 var int V_IR_SEND = 32 var int V_IR_RECEIVE = 33 var int V_FLOW = 34 var int V_VOLUME = 35 var int V_LOCK_STATUS = 36 var int V_DUST_LEVEL = 37 var int V_VOLTAGE = 38 var int V_CURRENT = 39 var int msgPresentation = 0 var int msgSet = 1 var int msgReq = 2 var int msgInternal = 3 var int msgStream = 4 var int alarmArmor = 1 // Internal Commands var int I_BATTERY_LEVEL = 0 var int I_TIME = 1 var int I_VERSION = 2 var int I_ID_REQUEST = 3 var int I_ID_RESPONSE = 4 var int I_INCLUSION_MODE = 5 var int I_CONFIG = 6 var int I_FIND_PARENT = 7 var int I_FIND_PARENT_RESPONSE = 8 var int I_LOG_MESSAGE = 9 var int I_CHILDREN = 10 var int I_SKETCH_NAME = 11 var int I_SKETCH_VERSION = 12 var int I_REBOOT = 13 var int I_GATEWAY_READY = 14 // Mappings var HashMap<String, String> sensorToItemsMap = newLinkedHashMap( "101;0;" -> "livingHum01", // looks good "livingHum01" -> "101;0;", "101;3;" -> "livingTemp01", "livingTemp01" -> "101;3;" "101;1;" -> "lightBar01", "lightBar01" -> "101;1;" ) //receiving msg from mysensors gateway rule "Arduino sends to Openhab" when Item Arduino received update then var String lineBuffer = Arduino.state.toString.split("\n") for (String line : lineBuffer) { var String[] message = line.split(";") var Integer nodeId = new Integer(message.get(0)) var Integer childId = new Integer(message.get(1)) var Integer msgType = new Integer(message.get(2)) var Integer ack = new Integer(message.get(3)) var Integer subType = new Integer(message.get(4)) var String msg = message.get(5) if(msgType == 1 ){ if (subType == V_TEMP){ postUpdate(sensorToItemsMap.get( nodeId + ";" + childId + ";"), msg) println ("Temp item: " + sensorToItemsMap.get( nodeId + ";" + childId + ";") + " temp: " + msg ) } if (subType == V_HUM){ postUpdate(sensorToItemsMap.get( nodeId + ";" + childId + ";"), msg) println ("Hum item: " + sensorToItemsMap.get( nodeId + ";" + childId + ";") + " hum: " + msg ) } if (subType == V_WATT){ postUpdate(sensorToItemsMap.get( nodeId + ";" + childId + ";"), msg) println ("Watt item: " + sensorToItemsMap.get( nodeId + ";" + childId + ";") + " watt: " + msg ) } if (subType == V_KWH){ postUpdate(sensorToItemsMap.get( nodeId + ";" + childId + ";"), msg) println ("Kwh item: " + sensorToItemsMap.get( nodeId + ";" + childId + ";") + " kwh: " + msg ) } if (subType == V_LIGHT){ var String state var Integer statusInt = new Integer(message.get(5)) if(statusInt == 1) { state = "ON" } else { state = "OFF" } postUpdate(sensorToItemsMap.get( nodeId + ";" + childId + ";"), state) println ("Light Item: " + sensorToItemsMap.get( nodeId + ";" + childId + ";") + " Light: " + state ) } } // Internal Command if(msgType == 3){ if(subType == I_SKETCH_NAME){ println("Sketch name: " + msg ) sketchName=msg } if(subType == I_SKETCH_VERSION){ println("Sketch version: " + msg ) postUpdate(sensorToItemsMap.get( nodeId + ";" + childId + ";"), sketchName+" " +msg ) sketchName="" } } } } end rule "Light" when Item lightBar01 received update then if(receivedCommand == ON) { sendCommand(Arduino, "101;1;1;0;2;1\n") } if(receivedCommand == OFF) { sendCommand(Arduino, "101;1;1;0;2;0\n") } enditems:
String Arduino "Arduino" { serial="COM4@115200" } Number livingTemp01 "Temperatura [%.1f °C]" <temperature> Number livingHum01 "Umiditate [%.1f %%]" <water> Number livingWatt01 "Consum Electric Watt [%.1f Watt]" <energy> Number livingKwh01 "Consum Electric Kilowattora [%.1f kWh]" <energy> Switch lightBar01 "Bar Lights" Switch lightKitchenCabinet01 "Cabinet Lights"sitemap:
sitemap demo label="Acasa" { Frame label="Dormitor" { Text item=livingTemp01 Text item=livingHum01 Text item=livingWatt01 Text item=livingKwh01 } Frame label="Lights" { Group label="Lights" { Switch item=lightBar01 label="Bar Lights" Switch item=lightKitchenCabinet01 label="Cabinet Lights" } }The physical button is connected to digital pin 3 and a LED to digital pin 4.
If the LED is switched on/ off from physical button the server shows this:2015-07-31 11:36:02.067 [INFO ] [runtime.busevents ] - Arduino state updated to 0;0;3;0;9;read: 101-101-0 s=1,c=1,t=2,pt=2,l=2:1 0;0;3;0;9;send: 0-0-101-101 s=1,c=1,t=2,pt=2,l=2,st=ok:1 101;1;1;0;2;1If the Openhab switch is activated on/off the server shows this:
2015-07-31 11:38:13.435 [INFO ] [runtime.busevents ] - lightBar01 re ceived command ONbut the LED is not switching on or off.
On the other hand when pressing the physical button on / off the LED is working but the switch in Openhab is not moving or refreshing.i'm trying to take it easy! please help masters :)
-
Update:
i noticed that if i leave only the light Openhab config as bellow, when pressing the physical button on my breadboard it turns the led on or off and it changes the Openhab switch state from on to off and vice-versa but it doesn't work from Openhab to Arduino.
Openhab configuration (sitemap, items, rules):// items String Arduino "Arduino" { serial="COM4@115200" } Switch lightBar01 "Bar Lights" ===================================================== //sitemap sitemap demo label="Acasa" { Frame label="Lights" { Switch item=lightBar01 label="Bar Lights" } ====================================================== //rules import org.openhab.core.library.types.* import org.openhab.core.persistence.* import org.openhab.model.script.actions.* import org.joda.time.* import java.util.* import org.eclipse.xtext.xbase.lib.* import org.openhab.core.items.* var String ArduinoUpdate = "" var String sketchName = "" var int V_TEMP = 0 var int V_HUM = 1 var int V_LIGHT = 2 var int V_DIMMER = 3 var int V_PRESSURE = 4 var int V_FORECAST = 5 var int V_RAIN = 6 var int V_RAINRATE = 7 var int V_WIND = 8 var int V_GUST = 9 var int V_DIRECTION = 10 var int V_UV = 11 var int V_WEIGHT = 12 var int V_DISTANCE = 13 var int V_IMPEDANCE = 14 var int V_ARMED = 15 var int V_TRIPPED = 16 var int V_WATT = 17 var int V_KWH = 18 var int V_SCENE_ON = 19 var int V_SCENE_OFF = 20 var int V_HEATER = 21 var int V_HEATER_SW = 22 var int V_LIGHT_LEVEL = 23 var int V_VAR1 = 24 var int V_VAR2 = 25 var int V_VAR3 = 26 var int V_VAR4 = 27 var int V_VAR5 = 28 var int V_UP = 29 var int V_DOWN = 30 var int V_STOP = 31 var int V_IR_SEND = 32 var int V_IR_RECEIVE = 33 var int V_FLOW = 34 var int V_VOLUME = 35 var int V_LOCK_STATUS = 36 var int V_DUST_LEVEL = 37 var int V_VOLTAGE = 38 var int V_CURRENT = 39 var int msgPresentation = 0 var int msgSet = 1 var int msgReq = 2 var int msgInternal = 3 var int msgStream = 4 var int alarmArmor = 1 // Internal Commands var int I_BATTERY_LEVEL = 0 var int I_TIME = 1 var int I_VERSION = 2 var int I_ID_REQUEST = 3 var int I_ID_RESPONSE = 4 var int I_INCLUSION_MODE = 5 var int I_CONFIG = 6 var int I_FIND_PARENT = 7 var int I_FIND_PARENT_RESPONSE = 8 var int I_LOG_MESSAGE = 9 var int I_CHILDREN = 10 var int I_SKETCH_NAME = 11 var int I_SKETCH_VERSION = 12 var int I_REBOOT = 13 var int I_GATEWAY_READY = 14 // Mappings var HashMap<String, String> sensorToItemsMap = newLinkedHashMap( "101;1;" -> "lightBar01", // looks good "lightBar01" -> "101;1;", ) //receiving msg from mysensors gateway rule "Arduino sends to Openhab" when Item Arduino received update then var String lineBuffer = Arduino.state.toString.split("\n") for (String line : lineBuffer) { var String[] message = line.split(";") var Integer nodeId = new Integer(message.get(0)) var Integer childId = new Integer(message.get(1)) var Integer msgType = new Integer(message.get(2)) var Integer ack = new Integer(message.get(3)) var Integer subType = new Integer(message.get(4)) var String msg = message.get(5) if(msgType == 1 ){ if (subType == V_LIGHT){ var String state var Integer statusInt = new Integer(message.get(5)) if(statusInt == 1) { state = "ON" } else { state = "OFF" } postUpdate(sensorToItemsMap.get( nodeId + ";" + childId + ";"), state) println ("Light Item: " + sensorToItemsMap.get( nodeId + ";" + childId + ";") + " Light: " + state ) } } // Internal Command if(msgType == 3){ if(subType == I_SKETCH_NAME){ println("Sketch name: " + msg ) sketchName=msg } if(subType == I_SKETCH_VERSION){ println("Sketch version: " + msg ) postUpdate(sensorToItemsMap.get( nodeId + ";" + childId + ";"), sketchName+" " +msg ) sketchName="" } } } } end rule "Light" when Item lightBar01 received update then if(receivedCommand == ON) { sendCommand(Arduino, "101;1;1;0;2;1\n") } if(receivedCommand == OFF) { sendCommand(Arduino, "101;1;1;0;2;0\n") } endThe server returns this error but its still working:
2015-07-31 17:52:01.787 [INFO ] [runtime.busevents ] - lightBar01 st ate updated to ON Light Item: lightBar01 Light: ON 2015-07-31 17:52:01.795 [ERROR] [o.o.c.s.ScriptExecutionThread ] - Error during the execution of rule 'Light': The name 'receivedCommand' cannot be resolved to an item or type.If i delete the rule "light" (the last part of rule file) the server doesn't show the error and the server still works so pressing the physical button it turns on or off the LED and it change the Openhab switch from on to off but from Openhab to Arduino, the same, still not communicating, not turning any LED!
This is how the server looks if i delete the rule "light" and i press the physical button on my breadboard:2015-07-31 17:56:03.448 [INFO ] [runtime.busevents ] - lightBar01 st ate updated to OFF Light Item: lightBar01 Light: OFFand switching from Openhab but without changing the LED real state:
2015-07-31 17:57:43.719 [INFO ] [runtime.busevents ] - lightBar01 re ceived command ON 2015-07-31 17:57:45.004 [INFO ] [runtime.busevents ] - lightBar01 re ceived command OFFThis makes sens and the problem i know is on the rule file. Now is there anyone who can help me make this work from Openhab to Arduino too? thanks all for your kindness :)
PS: using the Arduino relay with button actuator sketch on which i added the node id 101 and the pins 48,49 for my Arduino mega.
-
Found it!
"received command" not "received update"!
rule "Light" when Item lightBar01 received command then if(receivedCommand == ON) { sendCommand(Arduino, "101;1;1;0;2;1\n") } if(receivedCommand == OFF) { sendCommand(Arduino, "101;1;1;0;2;0\n") } end -
Found it!
"received command" not "received update"!
rule "Light" when Item lightBar01 received command then if(receivedCommand == ON) { sendCommand(Arduino, "101;1;1;0;2;1\n") } if(receivedCommand == OFF) { sendCommand(Arduino, "101;1;1;0;2;0\n") } end -
Hi,
@TimO finally I managed to add the dht 11 too and it works fine. Can you please tell me what to change in the rule file to add more buttons (same as this one that works)? I tried to change some parts of the light address but it doesn't work.
I would like to add a normal button too (not like a switch) with a door symbol like door open or close for my exit door and to change its status from blue to red when you push the button.Thank you for the help you gave me by now!
All the best! -
Hi All,
Can anyone please tell me if I want to add a few more buttons (same as this one with relay with button actuator) what should i change in the Openhab rules and in the Arduino sketch too? can it be done as the relay actuator example ?
#define RELAY_1 3 // Arduino Digital I/O pin number for first relay (second on pin+1 etc)i mean first relay is connected to pin 3 and the next relay to pin 3+1=4, pin 4+1=5 and so on and the buttons pins to be alocated in the same way? is there any way to do it like this but for the relay with button actuator example?
In the Openhab rules i tried to modify as i said above some of the addresses of the commands on or off from here:
sendCommand(Arduino, "101;1;1;0;2;1\n")except the last numbers which i understand are like 1 for ON and 0 for OFF but it didn't work.
The last thing that i would like to add is related only to Openhab if ill get an answer or a suggestion to my ask here above is a normal button (not like a slider) to control an electrical strike through a relay so when pressed once door open for 5 seconds or more and than close again. I know that here are more to discuss because maybe the door its not gonna be psychically closed but the Openhab status could show that the door is closed but this can be solved with a magnetic contact (i think) that can be added so the Openhab rules should be made like so: if the magnetic contact is connected than the door is closed and locked, else the door is open / unlocked even the electrical strike is closed until the magnetic contact will be connected! or to close the electrical strike only after the magnetic contact is closed.
OH too much talking, I know this is maybe too much for me but theoretical speaking I know how to make it and I think i know how to set up the connection but physically is impossible because of missing knowledge in programming Arduino or Openhab!Lets take it one by one: Can anyone help me with first part of my request, how to add a few more buttons same as the only one working now?
Thanks all