public override bool IsMyMessage(SensorMessage message) { return MySensorsPlugin.IsMessageFromSensor(message, SensorSwitch) || MySensorsPlugin.IsMessageFromSensor(message, SensorLightSwitch) || MySensorsPlugin.IsMessageFromSensor(message, SensorPh); }
public void Send(SensorMessage message) { if (IsStarted && message != null) { try { Debug.WriteLine("Send: " + message.ToRawMessage()); serialPort.WriteLine(message.ToRawMessage()); Thread.Sleep(1); } catch (Exception) { Debug.WriteLine("Error send: " + message.ToRawMessage()); } } }
public SensorMessageEventArgs(SensorMessage message) { Message = message; }
public virtual void MessageReceived(SensorMessage message) { Process(); }
public virtual void MessageCalibration(SensorMessage message) { }
private void NotifyMessageReceivedForPlugins(SensorMessage msg) { Run(SensorMessageHandlers, x => x(msg)); }
private void MessageCalibration(SensorMessage message) { foreach (ControllerBase controller in controllers) if (controller.IsMyMessage(message)) { controller.MessageCalibration(message); break; } }
public override void MessageReceived(SensorMessage message) { if (MySensorsPlugin.IsMessageFromSensor(message, SensorTemperature)) lastSensorValue = message.PayloadFloat; base.MessageReceived(message); }
public override bool IsMyMessage(SensorMessage message) { return MySensorsPlugin.IsMessageFromSensor(message, SensorInSwitch) || MySensorsPlugin.IsMessageFromSensor(message, SensorOutSwitch) || MySensorsPlugin.IsMessageFromSensor(message, SensorDistance); }
public void Send(SensorMessage message) { if (isConnected) { } }
private void NotifyMessageReceivedForScripts(SensorMessage msg) { this.RaiseScriptEvent(x => x.OnMessageReceivedForScripts, msg.NodeNo, msg.SensorNo, msg.Type, msg.SubType, msg.Payload); }
private void ProcessSensorMessage(SensorMessage message) { Debug.WriteLine(message.ToString()); bool isNodeMessage = message.NodeNo == 0 || message.SensorNo == 255; Node node = GetNode(message.NodeNo); Sensor sensor = GetSensor(message.NodeNo, message.SensorNo); // if message.SensorID == 255 it returns null switch (message.Type) { #region Presentation case SensorMessageType.Presentation: // sent by a nodes when they present attached sensors. if (isNodeMessage) { if (node == null) { node = new Node { Id = Guid.NewGuid(), NodeNo = message.NodeNo, Type = (SensorType)message.SubType, ProtocolVersion = message.Payload }; Save(node); } else { node.Type = (SensorType)message.SubType; node.ProtocolVersion = message.Payload; SaveOrUpdate(node); } NotifyMessageReceivedForPlugins(message); NotifyMessageReceivedForScripts(message); NotifyForSignalR(new { MsgId = "NodePresentation", Data = BuildNodeRichWebModel(node) }); } else // sensor message { if (node != null) { if (sensor == null) { sensor = new Sensor() { Id = Guid.NewGuid(), NodeNo = node.NodeNo, SensorNo = message.SensorNo, Type = (SensorType)message.SubType, ProtocolVersion = message.Payload }; Save(sensor); } else { sensor.Type = (SensorType)message.SubType; sensor.ProtocolVersion = message.Payload; SaveOrUpdate(sensor); } NotifyMessageReceivedForPlugins(message); NotifyMessageReceivedForScripts(message); NotifyForSignalR(new { MsgId = "SensorPresentation", Data = BuildSensorRichWebModel(sensor) }); } } break; #endregion #region Set case SensorMessageType.Set: // sent from or to a sensor when a sensor value should be updated if (sensor != null) { NotifyMessageCalibrationForPlugins(message); // before saving to DB plugins may adjust the sensor value due to their calibration params var sv = SaveSensorValueToDB(message); NotifyForSignalR(new { MsgId = "MySensorsTileContent", Data = BuildTileContent() }); // update MySensors tile NotifyMessageReceivedForPlugins(message); NotifyMessageReceivedForScripts(message); NotifyForSignalR(new { MsgId = "SensorValue", Data = sv }); // notify Web UI } break; #endregion #region Request case SensorMessageType.Request: // requests a variable value (usually from an actuator destined for controller) break; #endregion #region Internal case SensorMessageType.Internal: // special internal message InternalValueType ivt = (InternalValueType)message.SubType; switch (ivt) { case InternalValueType.BatteryLevel: // int, in % if (node != null) { var dtDB = DateTime.UtcNow; var dt = DateTime.Now; BatteryLevel bl = new BatteryLevel() { Id = Guid.NewGuid(), NodeNo = message.NodeNo, TimeStamp = dtDB, Level = byte.Parse(message.Payload) }; Save(bl); bl.TimeStamp = dt; NotifyMessageReceivedForPlugins(message); NotifyMessageReceivedForScripts(message); NotifyForSignalR(new { MsgId = "BatteryLevel", Data = bl }); } break; case InternalValueType.Time: var result = Convert.ToInt64(DateTime.Now.Subtract(unixEpoch).TotalSeconds).ToString(); gatewayProxy.Send(new SensorMessage(message.NodeNo, message.SensorNo, SensorMessageType.Internal, false, (byte)InternalValueType.Time, result)); break; case InternalValueType.Version: break; case InternalValueType.IDRequest: GetNextAvailableNodeID(); break; case InternalValueType.IDResponse: break; case InternalValueType.InclusionMode: break; case InternalValueType.Config: gatewayProxy.Send(new SensorMessage(message.NodeNo, 255, SensorMessageType.Internal, false, (byte)InternalValueType.Config, GetSetting("UnitSystem").Value)); break; case InternalValueType.FindParent: break; case InternalValueType.FindParentResponse: break; case InternalValueType.LogMessage: break; case InternalValueType.Children: break; case InternalValueType.SketchName: case InternalValueType.SketchVersion: if (node != null) { if (ivt == InternalValueType.SketchName) node.SketchName = message.Payload; else node.SketchVersion = message.Payload; SaveOrUpdate(node); NotifyMessageReceivedForPlugins(message); NotifyMessageReceivedForScripts(message); NotifyForSignalR(new { MsgId = "NodePresentation", Data = BuildNodeRichWebModel(node) }); } break; case InternalValueType.Reboot: break; case InternalValueType.GatewayReady: break; } break; #endregion #region Stream case SensorMessageType.Stream: //used for OTA firmware updates switch ((StreamValueType)message.SubType) { case StreamValueType.FirmwareConfigRequest: //var fwtype = pullWord(payload, 0); //var fwversion = pullWord(payload, 2); //sendFirmwareConfigResponse(sender, fwtype, fwversion, db, gw); break; case StreamValueType.FirmwareConfigResponse: break; case StreamValueType.FirmwareRequest: break; case StreamValueType.FirmwareResponse: //var fwtype = pullWord(payload, 0); //var fwversion = pullWord(payload, 2); //var fwblock = pullWord(payload, 4); //sendFirmwareResponse(sender, fwtype, fwversion, fwblock, db, gw); break; case StreamValueType.Sound: break; case StreamValueType.Image: break; } break; #endregion } CheckRebootRequest(node); }
private void NotifyMessageCalibrationForPlugins(SensorMessage msg) { Run(SensorMessageCalibrationHandlers, x => x(msg)); }
private SensorValue SaveSensorValueToDB(SensorMessage message) { //SensorValue lastSV = GetLastSensorValue(message.NodeNo, message.SensorNo); //if (lastSV != null && lastSV.Type == (SensorValueType)message.SubType && lastSV.Value == message.PayloadFloat) // return lastSV; var dtDB = DateTime.UtcNow; var dt = DateTime.Now; SensorValue sv = new SensorValue() { Id = Guid.NewGuid(), NodeNo = message.NodeNo, SensorNo = message.SensorNo, TimeStamp = dtDB, Type = (SensorValueType)message.SubType, Value = message.PayloadFloat }; Save(sv); sv.TimeStamp = dt; return sv; }
public static SensorMessage FromRawMessage(string str) { if (string.IsNullOrEmpty(str)) return null; string[] parts = str.Split(new char[] { ';' }, StringSplitOptions.None); if (parts.Length != 6) return null; SensorMessage msg = null; try { msg = new SensorMessage( byte.Parse(parts[0]), byte.Parse(parts[1]), (SensorMessageType)byte.Parse(parts[2]), byte.Parse(parts[3]) == 1, byte.Parse(parts[4]), parts[5].Trim()); } catch (Exception) { } return msg; }
public override void MessageCalibration(SensorMessage message) { if (MySensorsPlugin.IsMessageFromSensor(message, SensorTemperature)) message.PayloadFloat += configuration.TemperatureCalibration; }
private void MessageReceived(SensorMessage message) { if (MySensorsPlugin.IsMessageFromSensor(message, SensorTemperatureInner) || MySensorsPlugin.IsMessageFromSensor(message, SensorHumidityInner) || MySensorsPlugin.IsMessageFromSensor(message, SensorTemperatureOuter) || MySensorsPlugin.IsMessageFromSensor(message, SensorHumidityOuter) || MySensorsPlugin.IsMessageFromSensor(message, SensorAtmospherePressure) || MySensorsPlugin.IsMessageFromSensor(message, SensorForecast)) NotifyForSignalR(new { MsgId = "MeteoStationTileContent", Data = BuildTileContent() }); }
public override bool IsMyMessage(SensorMessage message) { return MySensorsPlugin.IsMessageFromSensor(message, SensorTemperature) || MySensorsPlugin.IsMessageFromSensor(message, SensorSwitch); }
public abstract bool IsMyMessage(SensorMessage message);
private void MessageReceived(SensorMessage message) { foreach (ControllerBase controller in controllers) if (controller.IsMyMessage(message)) controller.MessageReceived(message); }
public static bool IsMessageFromSensor(SensorMessage msg, Sensor sensor) { return msg != null && sensor != null && sensor.NodeNo == msg.NodeNo && sensor.SensorNo == msg.SensorNo; }