Jump to content
  • 0

[SCENE] Smart Message Hub {v1.2} - NEW RELEASE


Question

Hi Everyone

 

Smart Message Hub v1.2 (SMsgH v1.2) is now available.

This release includes fixes tor three bugs that had various impacts and support for international characters.

Thanks to @Sankotronic and @szmyk for locating the faults and extra feature for international characters

 

"FIRST TIME USERS" -  Please read below and follow the instructions laid out for first time users

UPGRADING FROM 1.1b to 1.2 - Please use this Post  - if you are a current user and may wish to consider  avail of the fixes or extra feature

 

This scene enables a user to send a message from either a scene or a virtual device to a number of notification and TTS services with a startScene call

fibaro:startScene(682, {message, target})   -- Using ID of scene
fibaro:startScene(SMsgH, {message, target}) -- Using HomeTable reference 

The scene also enables messages to be re-routed or queued depending on whether the house is set to Away mode, Sleep mode or if internet is not available. (See below for more details)

 

A demo  VD {v1.1} is also available to help demonstrate the scene features.

 

SCENE FEATURES

Smart Configuration options include the ability to re-route and/or queue all messages under certain conditions. (Internet unavailability , home occupancy mode presentState = Away)

Messages with international characters are also supported

  • Notification messages can be redirected to Home Center 2 Popup notification service if the internet is offline or unavailable
  • Notification messages can be queued if the internet is offline or unavailable. 
    • All Messages in the queue will be released as one combined message once the internet come s back online.
  • All TTS messages can be redirected to Home Center 2 Popup notification service if the internet is unavailable or offline or if the sonosAPI is offline if this solution is being leveraged
    • All TTS messages can be queued if presentsState = Away. 
  • All TTS messages in the queue will be announced once presentsState = Home
  • Simplified the message invocation method to startScene
    • Invoked via startScene(SMsgHid, {message string} (SMsgHid is the id of the SMsgH scene when it is saved to your system )
    • See below for examples
    • messageHub global no longer required (please delete when you have migrated all your scenes to using 1.1)
  • Added support for sleepState (no TTS messages if set to Sleep)
  • Additional support for HC2 popup notifications
    • Types (Critical, Successs, Info, Warning)
    • Images (use full url)
    • Buttons (represented as a table) - See @Sankotronic [TUTORIAL] on popup notifications to see how to format
    • Added ability to delay unloading of TTS messages by predefined time in seconds
    • Added support for custom language in for TTS and Notify redirects default Popup title and subtitle
    • Minor bug fixing and code cleaning

 

Configuration options also include a default message notification target, title, subtitle and volume but all these can also be specified as part of the message invocation.

There are three levels of debug verbosity. In normal mode there is a minimal amount of information displayed as the scene is triggered.

The two other modes allow for much more expressive displaying of scene variables as well as configuration settings if enabled

deBgVar is enabled in the scene so you can see the interactions- it can be disabled in normal running mode

 

SCENE MESSAGING OPTIONS
The supported services in this release include the following (supported in 1.0 & 1.1)

 

I have also included a Companion Demo VD. The virtual device will allow the user to demonstrate the scenes queuing/unloading capabilities.

CAUTION: The companion VD in demo mode can adjust the presentState and sleepState globals and will cause any other scene you may have with this as a trigger to execute

 

A simplified version of the LAN Monitor VD called  the WWWAPI Monitor will monitor just the sonos-api if desired and does not any in-built notification options like the LAN Monitor VD 2.5.Smart Message Hub users should use either the WWWAPI Monitor or LAN Monitor 2.6

 

Special thanks extended to  @Sankotronic @petergebruers, @jompa68 and @szmyk for their contributions leading to 1.2

 

Once the scene configuration is complete I would recommend running the demonstration virtual device.

This will give you a better understanding of the options and features as well providing some sample messages that you can run.

 

Ideas for subsequent revisions are always welcome
_f

    
  RELEASE CHANGELOG
  v1.0  - First release (march 4th 2017)

  v1.1 - Second release (march 17th 2017)

  v1.2 - Third Release (june 24th 2017) 

 

 

                                                                            ================================================

                                                                             FIRST TIME USERS - INSTALLATION & CONFIGURATION

                                                                            ================================================
The code is available in both lua and txt format below

Paste code into scene and run - All global variables will be automatically created (Please do not adjust global triggers in scene header)

  • Configure options as required at top of scene (line 100 onwards)
  • Configure enable smart redirects
  • Configure HC2 email settings, HC2 push settings and TTS services
  • Configure default message titles, subtitles and volume
  • Configuration notification settings, tokens, etc
  • Enable/Disable increased debug and config verbosity for troubleshooting

  
MESSAGE INVOCATION
  This message hub can be called from either a scene or a virtual device using a startScene call. The following is an example Sample invocations are included below

Please see the section on Message Invocation lower down in this post of you wish to send messages with international characters

local message    = "Warning: Utility room freezer temperature is 10 degrees"
local target     = "hc2popup"
local volume     = "25" -- (can be left as "" if not TTS message)
local title      = "new alert title"
local subtitle   = "new subtitle"
local popType    = "Critcal"
local popImg     = ""
local popButtons = ""

fibaro:startScene(IDofSMsgHscene, {message, target, volume, title, subtitle, popType, popImg, popButtons})

Note: Replace IDofSMsgHscene with HomeTable reference of numerical ID of the SMsgH scene when it is installed on your system    

You need to include all parameters up to last one you populate. For example, if you want to specify a subtitle, you need to include message, target, volume and title as well.

You CANNOT leave out a parameter in the call. Leave as "" if not used/required and default will be invoked.

 

**USER CONFIGURATIONS & SETTINGS**


OPTIONS FOR SMART RE-ROUTING OF MESSAGES
The following four options can be set to true or false depending on what features you wish to enable.

local tts2popup      = "true"

Set to true to enables re-routing of sonos TTS messages from either the Sonos VD or the sonos-api solution to HC2 notification Popup if the sonos-http-api or Internet is unavailable/offline to your local LAN  

local tts2queue      = "true" 

Enable to Silence  TTS announcement in sleepState, TTS announcements are NOT queued, they are simply discarded

local tts2sleep      = "true"    

 

Enable a Delay before TTS announcements are unloaded (seconds). Leave as "" for no delay

local ttsUnloadDelay = "" -- seconds   

 

Set to true to enable Sonos TTS messages to queue when presentState = 'Away'. When presentState is set to Home it triggers the scene to automatically unload all the messages in the TTS queue to the default player that has been named in the configuration section  

local notify2popup   = "true"   

Set to true to enable all notifications to re-route to HC2Popup notifications if the internet is unavailable/offline to your local LAN  

local notify2queue   = "true" 

Set to true to enable all notifications to queue when presentState= 'Away'. When presentState is set to Home it triggers the scene automatically and unloads the message in the notifications queue to the default notification service that has been named in the configuration section below

 

The scene as provided has all these 4 options set to true and this is the recommended setup if you wish to leverage full functionality and the demo
  
OPTIONS TO MONITOR THE INTERNET STATUS
To achieve the most benefit from this scene the internet and sonos-api should be dynamically monitored. Dynamically monitoring the internet will enable messages (TTS and notifications) to be queued while the internet if offline. Queued message can also be sent as hc2 pop notifications on the local LAN. The preferred monitoring option is named here. The example below is setup to use the LAN Monitor VD 2.5

local ipMonitor      = "networkTable" 

There are 3 options available: 

  • Select 'manual' if you wish internet and sonos-api to be permanently set to online. Please 
  • note that this option does NOT enable queuing of notification messages.
  • Select 'networkTable' to leverage the LAN Monitor VD 2.5, 
  • Select 'wwwapiTable' to leverage the new simplified WWWAPI Monitor 1.0

                               
 

HC2 EMAIL CONFIGURATION

hc2emailUsers = {["su"]="2", ["frank"]="1564", ["sylvia"]="1565"} 

List all users that you want to be able send messages to. The user id's are located from the HC2. Select Configuration, then Access Control to see the current users.

 

 

HC2 PUSH CONFIGURATION

hc2pushUsers = {["DadiPh"]="563", ["MumiPh"]="155", ["DogiPa"]="175"} 

List all users that you want to be able send push messages to. The mobile devices ID can be found by going to http://<HC_IP>/docs/ and looking under iosDevices section. 

local defhc2pushUser = "563"  -- identify default hc2push user         

Select a default user from this list and this is used if there is no user specified as part of the message invocation. 

                               
 

TTS PREFERENCES

Select your TTS preference. If you use the sonos-http-api solution please enter API. 
If you use the Sonos VD Remote solution please enter REM. 

local ttsMethod      = "API"

Default volume for TTS announcements

local defTTSvolume   = "12"    

This allows you to select a default volume and this aplies to both the API and REM sonos solutions. This volume can be changed by including a different volume in the message invocation

 

 

SONOS-API PREFERENCES
Configure this section if you have selected API in the above section.

APIplayers = {"hallway","kitchen","bed5_office","landing"}   

List all the sonos players you want to send TTS messages to.

The zone/player names must match exactly what is on your sonos native application

local defAPIzone     = "bed5_office"    

The default player/zone selected is used to unload the TTS message when presentState = Home.

The default player must be included in the overall players list above

local APIipaddress   = "192.168.1.89"                       
local APIport        = "5005"     

                          

The ip address and port are of the device that is hosting the sonos-api

local defAPIlanguage = "Amy" 

The final item here is the language or voice code for the respective TTS service. Thisoculd be something like en-gb for google or Amy for AWS Polly
                                 

 

SONOS REMOTE VD PREFERENCES
Configure this section if you have selected REM in the above section.

REMplayers = { 
  ["kitchen"] = {vd="295", btn="28"}, 
  ["hall"] = {vd="765", btn="27"}, 
}      

List all the sonos player virtual devices you want to send TTS messages to. The virtual device id's and process button id’s much match exactly what is on your HC2 for each virtual device. Please note the process button may differ if you have modified the standard virtual device. 

local defREMvd       = "hall"    -- Id of player vd for unloading queue         

The default player/zone is user to unload the TTS message when presentState = Home.

This zone must be included in the overall REMplayers table and the name must match exactly.

local defREMlanguage = "en-gb"

The final item in this section is the language or voice code for the respective TTS service

 

 

DEFAULT TITLES AND SUBTITLES

This scene has default titles and subtitles and these are used if no title or subtitle is included in the message invocation. 

local defTitle      = "Alert Title"                     
local defSubtitle   = "Alert Subtitle"              

Adjust the default titles and subtitles as you require. Note: Subtitles are only used for PopUp Notifications

 

 

NOTIFICATION SERVICES
There is a broad range of notification services available to use. Some are native to the home center and others are third party services provided by external vendors.

 local defmessageSvc = "pushover"      

                               
Select the default notification service that you wish to use. This default service will be used if no service is invoked in the message and is also used as the service to unload the queued messages when presentState = Home

 

 

PUSHOVER CONFIGURATION
This service is provided by pushover.org. You will need to register with them and obtain a token and user key.

local POtkn         = ""                
local POusr         = ""           

     
Once registered you will need to select the devices that you wish to send the pushover notifications to. Once they are added to your pushover account you will need to add their details below. Currently there is only one setting for device which means that all messages to pushover will be send to the devices named in this list. Priority can be set at ) like I have below

local POdevice      = "Dad_Ph, Kit_iPad, Landing iPad"         
local POpriority    = "0"          

                                  
TELEGRAM CONFIGURATION
This service is provided by telegram.org. You will need to register with them and obtain a token and a chat ID

local TGtoken       = ""                                              
local TGchatID      = ""     

DEBUG VERBOSITY OPTIONS
This allows a number of levels of debug verbosity. There is a minimal amount of debug window responses running in normal mode but these two capabilities allow the user to observe extra information in the debug window when  the scene is running. 

local deBugVar      = true    -- deBugVar will display the scene variables                                         
local deBugCfg      = false   -- deBugCfg will display the scene configaution that you have set

 

OCCUPANCY/PRESENCE STATE

I am also supporting the presentState as it is defined by Sankotronic and others.
-- "PresentState" is predefined global value that determines if you are at home
-- or away. This variable value is set by other scene or VD. Enter name of your
-- global variable between "" if called different or leave as it is

local presentState        = "PresentState";

-- Enter corresponding values that you use for presence in your language. Change
-- the one in quotes or leave as it is

local presentStateMapping = {Home="Home", Away="Away"};


HOMETABLE
There is also support for the hometable solution. Hometable is a approach to storing all device ID in a global variable. Please Uncomment the following line if you wish to use Hometable data in scene

-- local jT = json.decode(fibaro:getGlobalValue("HomeTable"));

 

 

POPUP MESSAGE TYPES

Default popup message type, possible values: Success, Info, Warning, Critical.

Please define popup message default popup type, button caption and buttons if you wish

These defaults can be left as is or modified/translated into your own language 

local defPopType   = "Info"                                                           
local defPopCaption = "OK"
local defPopButton = { { caption = defPopCaption, sceneId = 0 }}

Please refer to Sankotronic Tutorial "Popup Notifications and Custom Images" for format and examples

 

POPUP REDIRECT TITLES AND SUBTITLES

Please amend the text sent to PopUp Notification when Internet or TTS is offline to your own language if you wish. Both Title and subtitle can be modified

local TTSofflineTitle     = "Announcement"
local TTSofflineSubtitle  = "TTS is offline, TTS announcement sent as popup notification"
local WWWofflineSubtitle  = "Internet is offline, TTS announcement sent as popup notification"

 
SAMPLE MESSAGE INVOCATIONS
The message function can be invoked with as little as one parameter or as many as five parameters. The following examples will provide a good understanding. 
 
Send message to default notification service, with default titles/subtitles

fibaro:startScene(682, {message})    -- Replace 682 with id of your SMsgH v1.1 scene or a hometable reference

Send message to specific notification service
(The notification service must match exactly what is contained in the notifySve table in the variables section)

fibaro:startScene(682, {message, target}) 

(The hc2user in the message invocation must match exactly what is contained in the hc2emailUsers table in the user configuration section)

fibaro:startScene(682, {message, "hc2email"})          - send to superuser
fibaro:startScene(682, {message, "hc2email frank"})    - send to user frank
fibaro:startScene(682, {message, "hc2email frank su"}) - send to user frank and superuser

(The hc2push device in the message invocation must match exactly what is contained in the hc2emailUsers table in the user configuration section)

fibaro:startScene(682, {message, "hc2push DadiPhone"})          		- send to superuser
fibaro:startScene(682, {message, "hc2push MumiPhone SarahiPhone"})   - send to mumphone and sarah phone

(The sonos player name in the message invocation must match exactly what is contained in either the APIplayers or REMplayers table in the user configuration section)

 

The target can also specify sonos player or VD id for TTS with options

fibaro:startScene(682, {message, "kitchen"})       -send TTS to kitchen,  default volume
fibaro:startScene(682, {message, "hallway", "10"}) -send TTS to kicthen,  volume=10

Custom titles and subtitles can also be specified. These will overwrite the default titles and subtitles. Subtitles are only available for HC2 Popup notifications. They can be used with or with a target notification. If the target is omitted it will send to the default notification service that has been named in the configuration section

local message = "what ever the message is"
fibaro:startScene(682, {message, "", "", "Alert !!", "The wine fridge temp is rising"})

Finally an example of a Message to popup with specified popup type

 

local message = "kitchen window has been breached"
fibaro:startScene(682, {message, "hc2popup", "", "Alarm", "House Breach", "Critical"})

 

MESSAGE WITH INTERNATIONAL CHARACTERS

 

If you want to send message with special characters just use urlencode function:

 
fibaro:startScene(682, {"message", "hc2email", "", "title"}) -- without special chars
fibaro:startScene(682, {urlencode("message ąść"), "hc2email", "", "title"}) -- with special chars
fibaro:startScene(682, {urlencode("message ąść"), "hc2email", "", urlencode("title ČčĆ抚ĐđŽžáäéè")}) -- with special chars

 

COMPANION DEMONSTRATION VD INSTRUCTIONS (1.1)

A number of sample notification and TTS messages can be activated  giving the user an understanding of the message invocation format and options
Demonstration mode enabled the toggling of 'Internet online/offline', presentState Home/Away, sleepState Sleep/Awake modes. This capability allows the used to observe the queuing and unloading of queued notification messages and TTS messages in action. 

 

Import the VD into your home center 2.

Review the messages and adjust based on your own implementation of Smart Message Hub
Send messages and TTS as required
To demonstrate the queuing and unload of queue’s

  1. Set demo mode to ON. 
  2. Send messages and TTS and observe in selected notification services and apps, 
  3. Set internet to offline, sent messages and observe queuing, 
  4. Set internet to online, observer unloading of queue. 
  5. Set presetState to Away, send messages and observe queuing. 
  6. Set presentState to Home and observe unloading of queue. 
  7. Set sleepState to Sleep and observe TTS are silenced. 
  8. For normal operation - set Demo mode to OFF

 

 

FILES

[Smart Message Hub SCENE]  

SMsgH 1.2.lua    (lua file)

 

WWWAPI Monitor Virtual Device

[VIRTUAL DEVICE] WWWAPI_Monitor_1.0.vfib

 

Companion Virtual Device

[VIRTUAL DEVICE] SMsgH_Demo_1.1.vfib

  

Edited by AutoFrank
Link to post
Share on other sites
  • Answers 209
  • Created
  • Last Reply

Top Posters For This Question

Top Posters For This Question

Popular Posts

Hi Everyone   Smart Message Hub v1.2 (SMsgH v1.2) is now available. This release includes fixes tor three bugs that had various impacts and support for international characters. T

@AutoFrank, @Sankotronic, @DonQuischopp   I've found a solution   Add this code to the SMsgH at "HELPER FUNCTIONS" section: function urldecode(s) return string.gsub(s, '%%(%x

@RubberDuck, @AutoFrank, there are indeed two small bugs I found in the popup service (I struggled to get it working as well...).   First one is on line 799, where local button = {{ capt

Posted Images

Recommended Posts

  • 0
1 hour ago, AutoFrank said:

 

@Desmo Thanks, Let me know how you get on

its not going well for me.. I am trying to use hometable, but I am getting all sorts of issues with the Scene, I have moved the local hometable variable to the top of the script, but now I get :-

line 74: bad argument #1 to 'match' (string expected, got nil)

 

line 74 is part of your  rem lines, so its syntax probably for the devices (sonos and iPhone etc) that are using hometable..

 

I suspect this line..

REMplayers = {
  ["MasterBed"] = {vd=jT.bedroom1.sonos1, btn="28"},
  }     

Edited by shaunfrost
addition
Link to post
Share on other sites
  • 0
1 hour ago, shaunfrost said:

its not going well for me.. I am trying to use hometable, but I am getting all sorts of issues with the Scene, I have moved the local hometable variable to the top of the script, but now I get :-

line 74: bad argument #1 to 'match' (string expected, got nil)

 

line 74 is part of your  rem lines, so its syntax probably for the devices (sonos and iPhone etc) that are using hometable..

 

I suspect this line..

REMplayers = {
  ["MasterBed"] = {vd=jT.bedroom1.sonos1, btn="28"},
  }     

Hi @shaunfrost

 

Try and get it working without sonos and hometable.  These can be configured later. The scene has no hometable dependencies.

 

The easiest way to start is to set the default notification for something like hc2email. You can configure extra hc2 email users later but the superuser ( in your hc2 login) is already set up 

 

Then import the demo vd and click the hc2email demo button and this should send an email and you'll see this action echoed in the debug window and the email.  If you want to see more set deBugVar = true 

 

After that you can select addition notifications to try ....

 

Later you can select your sonos solution and configure that 

 

I'll be online later and we can talk some more then 

Link to post
Share on other sites
  • 0
13 hours ago, AutoFrank said:

Hi @shaunfrost

 

Try and get it working without sonos and hometable.  These can be configured later. The scene has no hometable dependencies.

 

The easiest way to start is to set the default notification for something like hc2email. You can configure extra hc2 email users later but the superuser ( in your hc2 login) is already set up 

 

Then import the demo vd and click the hc2email demo button and this should send an email and you'll see this action echoed in the debug window and the email.  If you want to see more set deBugVar = true 

 

After that you can select addition notifications to try ....

 

Later you can select your sonos solution and configure that 

 

I'll be online later and we can talk some more then 

 

Hi @shaunfrost

 

let me know how you got on after we talked over PM last evening.

I fixed the bug you found with the globals creation and the updated scene have been added to post 1

 

Thanks also for pointing out that it you have some scene that is triggered by (global) presentState  changing from either Home --> Away or from Away --> Home , my companion vd for this scene may do the same thing. I added a caution note to post1 

 

-f

Link to post
Share on other sites
  • 0
23 hours ago, AutoFrank said:

 

Hi @shaunfrost

 

let me know how you got on after we talked over PM last evening.

I fixed the bug you found with the globals creation and the updated scene have been added to post 1

 

Thanks also for pointing out that it you have some scene that is triggered by (global) presentState  changing from either Home --> Away or from Away --> Home , my companion vd for this scene may do the same thing. I added a caution note to post1 

 

-f

Hi there,

All seems good here, I am going to create all the other message style accounts to have a go, but the TTS is already in place and retro fit into my existing scenes.

Thanks @AutoFrank

Link to post
Share on other sites
  • 0
29 minutes ago, shaunfrost said:

Hi there,

All seems good here, I am going to create all the other message style accounts to have a go, but the TTS is already in place and retro fit into my existing scenes.

Thanks @AutoFrank

Thanks @shaunfrost

I've also starting to 'clean sweep' my own setup to only use this for messages and this has allowed me to consolidate a huge amounts already

win win all round..

 

Link to post
Share on other sites
  • 0

@AutoFrank, i want to send same message to 2 or more different accounts for example, 1 to push and 1 to telegram or to SonosTTS.

When i setup 2 lines of SendMsg it only target the last one and i understand why.

 

      local message = MyGCal[i].Name
      local volume = "50"
      local target = "vardagsrum"
      SendMsg(message, target, volume)
      SendMsg(message, "telegram")

 

Link to post
Share on other sites
  • 0
6 minutes ago, jompa68 said:

@AutoFrank, i want to send same message to 2 or more different accounts for example, 1 to push and 1 to telegram or to SonosTTS.

When i setup 2 lines of SendMsg it only target the last one and i understand why.

 

      local message = MyGCal[i].Name
      local volume = "50"
      local target = "vardagsrum"
      SendMsg(message, target, volume)
      SendMsg(message, "telegram")

 

 

Hi @jompa68

Have you tried a short sleep between the two 

maybe 500ms or 1sec

Link to post
Share on other sites
  • 0

Hi @AutoFrank,

 

While we were testing scene I forgot to ask you for one more thing. Fibaro popup service has also type of popup message like "Success", "Info", "Warning" and "Critical" which defines color of popup message frame and also icon. Is it possible to add possibility to define this value from message invocation function in next release?

 

I use popup service in many different occasions with different message types so it would be really nice to have possibility to define this instead of using only one default type. Thank you!

 

Link to post
Share on other sites
  • 0
22 minutes ago, Sankotronic said:

Hi @AutoFrank,

 

While we were testing scene I forgot to ask you for one more thing. Fibaro popup service has also type of popup message like "Success", "Info", "Warning" and "Critical" which defines color of popup message frame and also icon. Is it possible to add possibility to define this value from message invocation function in next release?

 

I use popup service in many different occasions with different message types so it would be really nice to have possibility to define this instead of using only one default type. Thank you!

 

 

@Sankotronic

 

yes - shouldn't be an issue.

I'll drop you some ideas via PM

Link to post
Share on other sites
  • 0

Been working very irregular the last 2 weeks, when I'm back in a normal ritme this scene is up for testing :)

Link to post
Share on other sites
  • 0
1 minute ago, jimicr said:

Been working very irregular the last 2 weeks, when I'm back in a normal ritme this scene is up for testing :)

 

@jimicr

 

That would be great.. thx :-D

A couple of users have it running and seem pleased with it.

I just integrating it across my own system at the moment and already getting rid of a lot of TTS and canned message 'vd buttons'

Link to post
Share on other sites
  • 0

Hi @AutoFrank,

 

I already added this feature in my copy of scene. I will send it to you on PM. Can you please correct message function by changing last subtitle to msubtitle:

      local msgStr = { message= mstr, target = mtarget, volume = mvol, title = mtitle, subtitle = msubtitle }

otherwise subtitle will never be forwarded to the scene.

Link to post
Share on other sites
  • 0
3 minutes ago, Sankotronic said:

Hi @AutoFrank,

 

I already added this feature in my copy of scene. I will send it to you on PM. Can you please correct message function by changing last subtitle to msubtitle:

      local msgStr = { message= mstr, target = mtarget, volume = mvol, title = mtitle, subtitle = msubtitle }

otherwise subtitle will never be forwarded to the scene.

 

Thanks @Sankotronic

Post corrected

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...