Announcement

Collapse
No announcement yet.

HS3 HSphone sample call-processing/blocking/HStouch-display script

Collapse
This topic is closed.
X
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    #76
    +1

    Originally posted by joegr View Post
    I'm still on HS2... So, between the 13th and the 31st, the CID logs in the phones don't have any call time/date info since the phone knows that months are only 1 to 12. Is there any chance that HS3 has corrected this?
    Like joegr, I am still on HS2 and hate this date problem. I too am interested whether HS3 has corrected this issue?

    Thanks
    Gary

    Comment


      #77
      I can tell you that I am getting all dates in HS3 Pro itself. It looks like this:

      Dial Outgoing 02/04/2015 19:04:28
      Dial Add Incoming 31/03/2015 12:24:25

      So all dates are logged.

      Take a look at this dropbox link:

      https://www.dropbox.com/s/27zefwjyf2...lerID.PNG?dl=0

      Or are you saying your phones can't read the CID date ?
      Last edited by Traction Tim; June 21, 2015, 02:13 AM. Reason: Note UK dd/mm/yyyy date format
      Win 11 Pro | HS4 Pro | Z wave plug in with UZB1 | BLUSBUIRT 2.0.11.0 | RFXtrx433 | Blue Iris CCTV | VU+ 4k with motorised dish | Emby | Hi-Phone HS2 | ESP32 with WLED |

      Comment


        #78
        Originally posted by Traction Tim View Post
        Or are you saying your phones can't read the CID date ?
        Yes, as joegr mentioned, the HS2 version seems to be sending a format incompatible with my phones (after the 13th of each month). Just Fyi, I couldn't see your dropbox image (no db account).

        Thanks
        Gary

        Comment


          #79
          Just Fyi, I couldn't see your dropbox image (no db account).
          That's odd, it's a public link
          Win 11 Pro | HS4 Pro | Z wave plug in with UZB1 | BLUSBUIRT 2.0.11.0 | RFXtrx433 | Blue Iris CCTV | VU+ 4k with motorised dish | Emby | Hi-Phone HS2 | ESP32 with WLED |

          Comment


            #80
            I just checked my house phone call log against the HS3 Caller ID page, and there is a call I made to the house phone from my mobile phone on the 22nd June 2015.

            HS3 Caller ID shows:

            Dial Incoming 22/06/2015 16:56:08 Tim <Surname>

            And the house phone shows:

            22 Jun 16:54
            Tim Mobo
            077----------

            So it appears to be working here after the 13th of the month in dd/mm/yyyy land, but it is showing the name from the phone rather than the one from HS3 - that is opposite to what ITguyHS found
            Win 11 Pro | HS4 Pro | Z wave plug in with UZB1 | BLUSBUIRT 2.0.11.0 | RFXtrx433 | Blue Iris CCTV | VU+ 4k with motorised dish | Emby | Hi-Phone HS2 | ESP32 with WLED |

            Comment


              #81
              I've had a Way2Call for about 7 years, that I gave up on when I read that the USGR01 model wouldn't read CWCID. I've been using a NetCallerID since then, to trigger a PA announcement when CID or CWCID data arrive. When I came across your thread about blocking the ever-increasing spam-scam-survey-political calls with the W2C, I thought I'd drag it out of the moth balls for another try.

              I upgraded the firmware and drivers and got the W2C to play nice with my HS3/Windows 10 rig. I now have HSPhone sending caller ID to my house phones, and have been able to block a few calls, thanks in large part to what I picked up reading this thread several times. I had to put a 3 second wait before sending the caller ID, as the second ring synced perfectly with and canceled out the SendLocalCID command. I had to replace CallerNumber with LookupNumber in the SendLocalCID command, as it appears that my phone system doesn't like the dashes in the CallerNumber. I won't say how many hours I spent trying to figure out these 2 issues, but I do have basic functionality now.

              I do have a name-only CID message show on the phone at the start of the second ring, which is quickly replaced by "Incoming Call" and then the name and number CID shortly after the second ring. I'm assuming it's HSPhone sending CID with dashes before your script sends the second name/number CID. Not a big deal, just an extra CID entry on the phones with each call.

              I was wondering if anyone has been able to get the date/time working properly. I've read the posts about date/time being rejected after the 12th of the month, so I don't know if that's my issue here, or if date/time is not being sent at all. Date and time work great with the W2C multi test app, but that's the only time I've seen the time stamp since I got W2C CID to the phones working.

              Next is to get my NetCallerID to help me out with CWCID. The Way2Call doesn't seem "see" the CID being sent during a CWCID event, but it is putting an annoying noise on the line when the NetCID toggles the line. Before I added the W2C after the NetCID, the NetCID muted the line while reading CWCID data. It wouldn't send the CID through to the phone in use, but BLNetCallerID announced the new caller over the PA. Hopefully, with some creative scripting, I can get a PA announcement, CWCID at the handsets and get rid of the noise (possibly place the NetCID after the W2C?).

              Thanks for all your work, guys! I'm looking forward to getting rid of the junk calls.

              Comment


                #82
                Hi Jerry,
                Glad to hear you're making some progress. I've never been able to get CWCID to work here, so I'll be watching to see if someone else reports in with some tips! The date/time thing is really hard to figure whether it's a W2C problem or a HS problem. When you look at the HS CID log, does it appear correctly there?
                Fred

                HomeSeer Pro 3.0.0.548, HS3Touch, Zwave 3.0.1.252, Envisalink DSC 3.0.0.40, WeatherXML, Z-stick, HS phone, Way2Call

                Comment


                  #83
                  Originally posted by Jerry S View Post
                  I was wondering if anyone has been able to get the date/time working properly. I've read the posts about date/time being rejected after the 12th of the month, so I don't know if that's my issue here, or if date/time is not being sent at all. Date and time work great with the W2C multi test app, but that's the only time I've seen the time stamp since I got W2C CID to the phones working.
                  Where are you seeing the date problem? Is it on the phone display or in the HSPhone call log?
                  Mike____________________________________________________________ __________________
                  HS3 Pro Edition 3.0.0.548, NUC i3

                  HW: Stargate | NX8e | CAV6.6 | Squeezebox | PCS | WGL 800RF | RFXCOM | Vantage Pro | Green-Eye | Edgeport/8 | Way2Call | Ecobee3 | EtherRain | Ubiquiti

                  Comment


                    #84
                    Originally posted by Uncle Michael View Post
                    Where are you seeing the date problem? Is it on the phone display or in the HSPhone call log?
                    There is no date or time appearing on my phone display, just the name and number. Callers.log shows the date and time properly
                    HTML Code:
                    11/21/2015 10:31:15 AM ~!~Caller ID~!~Line: 1 Number: 2069220865 Name: Amazon
                    but since the date and time in the log are so detailed, I'm sure that is HS putting a time stamp on the log entry. The raw data being received by my NetCallerID from AT&T for this same call is
                    HTML Code:
                    11/21/2015 10:31:15 AM : v2.0.31.0 - PhoneLine2DataReceived(): phoneLine2ComPortData --> 
                    ###DATE11211031...NMBR2069220865...NAMEAMAZON+++
                    In order for the phone to show the date and time, I believe it needs to receive the date in the same 11211031 format. It's the same way the date needs to be entered in the W2C Multi Test Application to produce simulated date and time on the handset. From what I've read on previous posts in this thread, it's possible that HS3 is generating and sending the date in ddmmtttt format but my US phone is expecting mmddtttt. Just a guess at this point, but that would explain why some have had the date/time appear on the phones until the 13th of the month, then the date/time portion is blank.

                    If I set "Mute Rings Only Until Caller-ID Available:" to NO while running this script, I get 2 CID entries on my phone:

                    AMAZON
                    206-922-0865 <---(after first ring)
                    10:31AM 11/21

                    -then-

                    AMAZON
                    206-922-0865 <---(after CID-in-V05.vb runs during second ring)


                    Since it's after the 12th of the month, I don't if it's HSPhone sending the incorrect format or if it's not sending a date/time string to the phone at all.

                    Comment


                      #85
                      I did a test to see the raw data that HS3 is sending to the handsets after processing by this script and HSPhone.

                      I connected my NetCallerID box after the Way2Call, called from my cell, and found the following in my BLNetCallerID log:
                      HTML Code:
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> #
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> #
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> #
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> D
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> A
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> T
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> E
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> .
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> .
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> .
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> N
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> M
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> B
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> R
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> 3
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> 0
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> 5
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> 5
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> 5
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> 5
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> 1
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> 2
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> 1
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> 2
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> .
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> .
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> .
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> N
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> A
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> M
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> E
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> J
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> e
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> r
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> r
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> y
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData -->  
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> S
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> +
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> +
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived() finished
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2_DataReceived() started
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): theData --> +
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): phoneLine2ComPortData --> 
                      ###DATE...NMBR3055551212...NAMEJerry S+++
                      Compared to the raw data received from AT&T on an earlier call, the W2C is sending in the same format as AT&T, but leaving out the data after the "DATE" portion of the CID string:
                      11/21/2015 10:31:15 AM : v2.0.31.0 - PhoneLine2DataReceived(): phoneLine2ComPortData --> ###DATE11211031...NMBR2069220865...NAMEAMAZON+++
                      11/21/2015 12:06:48 PM : v2.0.31.0 - PhoneLine2DataReceived(): phoneLine2ComPortData --> ###DATE...NMBR3055551212...NAMEJerry S+++
                      ****As a side note, placing the NetCID after the W2C resulted in a continuous loop of receive/process/retransmit the CID process in HS. I had to exit HS to stop.

                      Comment


                        #86
                        Originally posted by Jerry S View Post
                        There is no date or time appearing on my phone display, just the name and number.

                        In order for the phone to show the date and time, I believe it needs to receive the date in the same 11211031 format. It's the same way the date needs to be entered in the W2C Multi Test Application to produce simulated date and time on the handset. From what I've read on previous posts in this thread, it's possible that HS3 is generating and sending the date in ddmmtttt format but my US phone is expecting mmddtttt.
                        I think you are very likely correct.

                        Interestingly, I've never seen the problem with my Panasonic phones, but I just checked a little-used extension that is branded as 'AT&T' (but made in China). It shows the date as dd/mm until the 13th of the month. From there to the end of the month the date is --/--.

                        I assume my Panasonic phone must be supplying the date itself, based on your analysis.
                        Mike____________________________________________________________ __________________
                        HS3 Pro Edition 3.0.0.548, NUC i3

                        HW: Stargate | NX8e | CAV6.6 | Squeezebox | PCS | WGL 800RF | RFXCOM | Vantage Pro | Green-Eye | Edgeport/8 | Way2Call | Ecobee3 | EtherRain | Ubiquiti

                        Comment


                          #87
                          Initialize hi-phone device?

                          Originally posted by Uncle Michael View Post
                          I think you are very likely correct.

                          Interestingly, I've never seen the problem with my Panasonic phones, but I just checked a little-used extension that is branded as 'AT&T' (but made in China). It shows the date as dd/mm until the 13th of the month. From there to the end of the month the date is --/--.

                          I assume my Panasonic phone must be supplying the date itself, based on your analysis.
                          I purchased a new Panasonic cordless phone set (the AT&T was old, anyway), and it does stamp its own time on each CID message.

                          I have noticed a new problem, though. Any time I restart HS3, it seems to ignore the settings in HSPhone setup (ie: phones ring immediately, regardless of having set "Mute Rings Only Until Caller-ID Available:" to 'Yes'). However, HSPhone does its normal processing, call is announced, CID script is run, but rings are not muted. I have to go into the HSPhone setup, select the W2C in the "Select the modem to configure or add to the system:" box, then hit Save. After I do this, there is a line in the log that says:
                          Nov-24 1:54:52 PM Phone Line 1 Initializing Hi-Phone device...
                          All of my original settings are loaded, and when a call comes in, HS blocks rings until CID is received. Then all of my previous settings work fine. Until the next restart of HS.

                          Is there a box I haven't checked somewhere or a command that I need to issue at startup to initialize the hi-phone?

                          Comment


                            #88
                            I haven't seen that problem. As it turns out, I recently had occasion to restart HS3, so I have the startup log (edited, attached). I note that i got the 'Initializing Hi-Phone device... ' in the startup sequence. (Note, the file is ordered to put oldest entries at the bottom.)

                            I've also included a copy of my ini file for comparison in case you can see something that's different.
                            Attached Files
                            Mike____________________________________________________________ __________________
                            HS3 Pro Edition 3.0.0.548, NUC i3

                            HW: Stargate | NX8e | CAV6.6 | Squeezebox | PCS | WGL 800RF | RFXCOM | Vantage Pro | Green-Eye | Edgeport/8 | Way2Call | Ecobee3 | EtherRain | Ubiquiti

                            Comment


                              #89
                              New version to block scam area codes

                              After reading this article about area codes frequently used by telephone scammers, http://www.inc.com/joseph-steinberg/...ts-a-scam.html I decided to add area-code blocking to the script. This involves a new string array (AreaCodeBlocks) to hold the list of codes to block, a new function (GetAreaCode) to extract the area code from the CID number, and a new variable (AreaCode). If you decide to implement this, be aware that ALL calls from these areas are blocked! You should look through the list in the article to see if you receive calls from any of those countries, then remove those areas from the array if you don't want those codes blocked.
                              Code:
                              '////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                              '***  CID_in_V15.vb  2017-03-14
                              '***  Handle incoming call blocking and display of CID info in HStouch
                              '////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                              '==============================================================================================================
                              ' Note: if you are using HSphone voicemail with a Way2Call, DO NOT use the HSP.HIPSendLocalCID command!!  
                              '       Doing so corrupts the CID information in the voicemail message file.
                              '==============================================================================================================
                              '
                              ' Virtual Devices used by this script
                              '   NOTE:  Create these devices as virtual devices, NOT x10 or CM15 devices
                              '
                              '	The script uses device addresses instead of ref i.d. in order to make it more portable.
                              '	Device addresses may be set by the user, while ref i.d.'s are assigned by the system
                              '
                              '		Previous
                              '	Address	Address		Device Name	Properties	Notes
                              '	CID-T42	A42 		CID number	status only	formerly device ref 56
                              '	CID-T43	A43 		CID name	status only	formerly device ref 55
                              '	CID-T44	A44		CID blocked	status only	formerly device ref 57 
                              '=============================================================================================
                              '*** NOTES:
                              '***  There are many "hs.writelogex" statements in this script for debugging.  
                              '***  You can turn them off by changing the line "Logging_on = "On""
                              '***  to be "Logging_on = "Off"
                              '***  Once you are happy with the way the script runs, I suggest commenting out
                              '***  most or all of the log statements and their "if/endif" in order to reduce the amount of statements
                              '***  being processed by the script.
                              '***
                              '*** Change log
                              '*** 
                              '***	2017-03-14	Automatic hangup of all "foreign" area codes (look for array AreaCodeBlocks)
                              '***	2017-03-12	Automatic hangup of certain area codes used by phone scammers (473, 809, and 900)
                              '***	2016-09-03	If incoming call is a member of phonebook group "Me", and there are unread messages, then
                              '***			answer immediate.  The IVR script will be run by HS3 as soon as this script ends
                              '***	2016-08-20 	Remove use of "Last Caller" name and number
                              '***			Changed addresses to use expanded address of "CID" and "T" code range. 
                              '***		  	Example: CID-T42  
                              '***		  	This is to avoid any potential conflict with x10 devices that use address codes
                              '***		  	beginning with A through P.
                              '***		  	The use of the "T" code is just my preference.  All my telephone-related devices 
                              '***		  	use the "T" code. 
                              '***	2016-08-14	Use device addresses instead of device ref to update virtual devices
                              '***			This will make the script more portable.
                              '***	2016-08-14	Remove HSP.HIPSendLocalCID to see if that's what's interfering with CID data being
                              '***                    stored properly in the voicemail file
                              '***	2016-04-22	Remove HSP.HIPSendLocalCID if not in address book
                              '***			(this goes along with changing the setup so that calls not in the address book go straight to voicemail)
                              '***	2016-04-16	Reinstate HSP.HIPSendLocalCID
                              '***	2015-08-01	Add devices for answermachine function in HStouch
                              '***	2015-07-30	Display raw CID info in HSTouch as quickly as possible.
                              '***			Handle hangup for Toll Free Call, Out-of-area, and Private Caller before bothering
                              '***			to scan the address book
                              '***	2015-02-01	Remove need for formatting of LookupNumber.  Instead, strip all but digits
                              '***			from all phone numbers being compared
                              '***	2015-01-30	Add example of testing for address book "Group" value
                              '***			add examples of all the address book flags
                              '***			add debug step logging and debug on/off capability
                              '***    2015-01-28	Version 2
                              '***			Remove use of hs.LastCallerInfo
                              '***			Change all log entries generated by this script to be of type "CID script"
                              '***			use WriteLogEx so CID script entries are in green
                              '***			Change some variable names to be more self-explanatory
                              '***	2015-01-13	Remove some unused variables
                              '***			Comment out the speaking of the "Please go away" message to speed execution
                              '***			 (if you want this functionality, just un-comment the "hsp.waitMS" and the "hsp.speak" lines)
                              '=============================================================================================
                              
                              Sub Main(ByVal Parms As Object)
                              
                              Dim I As Integer
                              Dim AddrBkIndex As Integer = 0
                              Dim intAdrCount As Integer = hsp.ADRCount  'the number of entries in the address book
                              Dim AreaCode as String = ""
                              Dim AreaCodeBlocks() As String = {"242", "246", "268", "284", "345", "441", "473", "649", "664", "721", "758", "767", "784", "809", "829", "849", "868", "869", "876", "900"}
                              Dim CallerName as String
                              Dim CallerNumber as String
                              Dim LookupNumber as String = ""
                              Dim objContact As Scheduler.clsContact
                              Dim strAdrName As String
                              Dim strNumber As String = ""
                              Dim Logging_on as string
                              Dim CT_CIDFLAGS_BLOCKED as Boolean	' = 1  this ID is blocked
                              Dim CT_CIDFLAGS_ANNOUNCE as Boolean	' = 2  this ID is announced
                              Dim CT_CIDFLAGS_UNKNOWN as Boolean 	' = 3  unknown useage
                              Dim CT_CIDFLAGS_SPECIALGREET as Boolean	' = 4  play special greeting
                              Dim CT_CIDFLAGS_POPUP as Boolean	' = 5  pop up window with CID info
                              Dim CT_CIDFLAGS_PRIVATE as Boolean	' = 6  entry matches private CID calls
                              Dim CT_CIDFLAGS_OUTOFAREA as Boolean	' = 7  entry matches out of area calls
                              Dim CT_CIDFLAGS_FLAG8 as Boolean	' = 8  unknown use
                              Dim strValue as string
                              Dim CallerNameDev as integer
                              Dim CallerNumberDev as integer
                              Dim CallerBlockDev as integer
                              Dim mb 
                              '*** to turn on debug logging, change line below to be Logging_on = "On"
                              '*** to turn off debug logging, change line below to be Logging_on = "Off"
                              Logging_on = "Off"
                              
                              'Get the device refs for the HStouch devices
                              CallerNumberDev = hs.GetDeviceRef("CID-T42")
                              CallerNameDev = hs.GetDeviceRef("CID-T43")
                              CallerBlockDev = hs.GetDeviceRef("CID-T44")
                              
                              If Logging_on = "On"
                              	hs.WriteLogEx("CID script", "Version CID_in_V14", "#008000")
                              	hs.WriteLogEx("CID script", "DEBUG Step #1", "#008000")
                              End If
                              
                              '*** load the cid info into variables
                              CallerName = hsp.cidname(1) 	'the name provided by caller ID
                              CallerNumber = hsp.CIDNumber(1)	'the number provided by caller ID
                              strNumber = CallerNumber 
                              
                              If Logging_on = "On"
                              	hs.WriteLogEx("CID script", "DEBUG Step #2", "#008000")
                              End If
                              
                              '*** The following two traps should prevent errors with the string-manipulation 
                              '*** routines generating a "length error" for null values if the CID info is null or blank
                              
                              '*** if CallerName is null or blank, replace it with N/A.  
                              if CallerName = "" OR CallerName = " " Then 
                              	CallerName = "N/A"
                              End If
                              
                              '*** if CallerNumber is null or blank, replace it with "000"
                              if CallerNumber = "" OR CallerNumber = " " Then 
                              	CallerNumber = "000"
                              End If
                              
                              
                              AddrBkIndex = 0	
                              
                              '*** ====================================================================================
                              '*** Load info to HSTouch virtual devices, then show the CID screen
                              '*** Note that this will show the CID info for all callers, regardless of
                              '*** whether they are blocked.  If you want to show only callers that are not
                              '*** blocked, then comment out the "hs.triggerevent" line in this section and enable the same
                              '*** line that appears within the "If CT_CIDFLAGS_BLOCKED  = FALSE" test
                              
                              If Logging_on = "On"
                              	hs.WriteLogEx("CID script", "DEBUG Step #3", "#008000")
                              	hs.writelogex("CID script", "CID number: " & hsp.cidnumber(1), "#008000")
                              	hs.writelogex("CID script", "CID name: " & hsp.cidname(1), "#008000")
                              End If
                              
                              hs.SetDeviceString(CallerNameDev, CallerName, True)
                              hs.SetDeviceLastChange(CallerNameDev, Now)
                              
                              hs.SetDeviceString(CallerNumberDev, MkPhoneNum( CallerNumber ) , True)
                              hs.SetDeviceLastChange(CallerNumberDev, Now)
                              
                              hs.SetDeviceString(CallerBlockDev, " ", True)
                              hs.SetDeviceLastChange(CallerBlockDev, Now)
                              
                              hs.TriggerEvent("show CID screen")
                              
                              '*** ====================================================================================
                              '*** This section causes an immediate answer/hangup if any of the conditions are true.  The remainder of
                              '*** the script is not executed.  
                                
                              '*** if less than 6 characters in the number, then answer, optionally say "Please go away", then hangup.
                              '*** The number of characters test should block the "4-digit spam calls" that are a problem in Europe.
                              
                              If Logging_on = "On"
                              	hs.WriteLogEx("CID script", "DEBUG Step #4", "#008000")
                              End If
                              
                              '*** If you only want to test number of characters, uncomment this section.  If you want to also check for other
                              '*** "hangup" conditions, use the section after this instead
                              
                              '*** If strNumber.Length < 6 Then
                              '***	hs.writelogex("CID script", "Invalid number of digits - CID: " & CallerNumber, "#008000") 
                              '***	hsp.LINEAnswer(1)
                              '*** 	hsp.WaitMS(1000)
                              '*** 	hsp.SPEAK(1, "Please ,, go ,, away", 0)
                              '***	hsp.WaitMS(1000)
                              '***	hsp.LINEHangUp(1)
                              
                              '***	Exit sub
                              '*** End If
                              
                              '*** Use this section to perform multiple "hangup" tests.  You would use this instead of the test above.
                              '*** If any of the tests are true, immediate hangup and exit the script
                              
                              AreaCode = GetAreaCode( CallerNumber )
                              
                              If AreaCodeBlocks.Contains(AreaCode) Then
                              	hs.WriteLogEx("CID script", "Blocked area code found", "#008000")
                              End If
                              
                              If strNumber.Length < 6 OR 
                              	CallerName = "Toll Free Call" OR 
                              	CallerName = "TOLL FREE CALL" OR 
                              	CallerName = "O" OR 
                              	CallerName = "Private Caller" OR 
                              	CallerName = "PRIVATE CALLER" OR
                              	AreaCodeBlocks.Contains(AreaCode) Then
                              	hsp.LINEAnswer(1)
                              	hsp.WaitMS(1000)
                              	hsp.LINEHangUp(1)
                              	hs.WriteLogEx("CID script", "Blocked - hung up", "#008000")
                              	Exit sub
                              End If
                              
                              '*** ====================================================================================
                              
                              If Logging_on = "On"
                              	hs.WriteLogEx("CID script", "DEBUG Step #5", "#008000")
                              End If
                              
                              LookupNumber = CallerNumber
                              
                              If Logging_on = "On"
                              	hs.writelogex("CID script", "LookupNumber before stripping: " & LookupNumber, "#008000")
                              End If
                              
                              '*** strip the LookupNumber
                              LookupNumber = StripString(CallerNumber)
                              
                              If Logging_on = "On"
                              	hs.writelogex("CID script", "LookupNumber after stripping: " & LookupNumber, "#008000")
                              	hs.writelogex("CID script", "LookFor: " & CallerName & "  -or-  " & LookupNumber, "#008000")
                              End If
                              
                              '*** Search the address book for a match
                              
                              If Logging_on = "On"
                              	hs.WriteLogEx("CID script", "DEBUG Step #6", "#008000")
                              End If
                              
                              For I = 1 to intAdrCount            
                              
                                 objContact = hsp.ADRGet(I)
                              
                              	'** if the stripped CID phone number
                              	'** matches any of the stripped address book numbers
                              
                                 	If StripString(objContact.cell_phone) = LookupNumber OR 
                              		StripString(objContact.cell_phone_2) = LookupNumber OR
                              		StripString(objContact.home_phone) = LookupNumber OR 
                              		StripString(objContact.home_phone_2) = LookupNumber OR 
                              		StripString(objContact.business_phone) = LookupNumber OR
                              		StripString(objContact.business_phone_2) = LookupNumber Then 
                              
                              		'** save index of the match
                              		AddrBkIndex = I
                              
                              		'*** re-format the name to match the address book
                              		strAdrName = objContact.FIRST & " " & objContact.LAST
                              		CallerName = strAdrName
                              
                              		'** test the CID flags 
                              		CT_CIDFLAGS_BLOCKED = FALSE
                              		CT_CIDFLAGS_ANNOUNCE = FALSE
                              		CT_CIDFLAGS_UNKNOWN = FALSE
                              		CT_CIDFLAGS_SPECIALGREET = FALSE
                              		CT_CIDFLAGS_POPUP = FALSE
                              		CT_CIDFLAGS_PRIVATE = FALSE
                              		CT_CIDFLAGS_OUTOFAREA  = FALSE
                              		CT_CIDFLAGS_FLAG8 = FALSE
                              
                              		CT_CIDFLAGS_BLOCKED  = ExamineBit(objContact.CIDFLAGS, 1)
                              		CT_CIDFLAGS_ANNOUNCE = ExamineBit(objContact.CIDFLAGS, 2)
                              		CT_CIDFLAGS_UNKNOWN = ExamineBit(objContact.CIDFLAGS, 3)
                              		CT_CIDFLAGS_SPECIALGREET = ExamineBit(objContact.CIDFLAGS, 4)
                              		CT_CIDFLAGS_POPUP = ExamineBit(objContact.CIDFLAGS, 5)
                              		CT_CIDFLAGS_PRIVATE = ExamineBit(objContact.CIDFLAGS, 6)
                              		CT_CIDFLAGS_OUTOFAREA  = ExamineBit(objContact.CIDFLAGS, 7)
                              		CT_CIDFLAGS_FLAG8 = ExamineBit(objContact.CIDFLAGS, 8)
                              
                              		'*** if Blocked flag is false, send CID info to phones
                              		' If CT_CIDFLAGS_BLOCKED  = FALSE
                              		'	HSP.HIPSendLocalCID(1,CallerName, CallerNumber)
                              		' End if
                              
                              		'*** if blocked, set the virtual device used for displaying in HStouch
                                              '*** and immediately hangup
                              		If CT_CIDFLAGS_BLOCKED  = TRUE OrElse CT_CIDFLAGS_PRIVATE  = TRUE OrElse CT_CIDFLAGS_OUTOFAREA = TRUE Then
                              			' CallerBlockDev = hs.GetDeviceRef("CID-T44")
                              			hs.SetDeviceString(CallerBlockDev, "Blocked ", True)
                              			hs.SetDeviceLastChange(CallerBlockDev, Now)
                              	                hsp.LINEAnswer(1)
                              	                hsp.WaitMS(1000)
                              	                hsp.LINEHangUp(1)
                              
                              			If Logging_on = "On" 
                              	                	hs.WriteLogEx("CID script", "Blocked - hung up", "#008000")
                              			End if
                              		End if
                              
                              		'*** reset the Name virtual devices with the re-formatted caller name
                              		hs.SetDeviceString(CallerNameDev, CallerName, True)
                              		hs.SetDeviceLastChange(CallerNameDev, Now)         
                              
                              		If Logging_on = "On"        
                              			hs.WriteLogex("CID script", "AdrMatch  **Index: " & CStr(I) & "  **Number: " & strNumber & "  **AddrBK CID match: " & objContact.cid_name & "  **Blocked = " & CT_CIDFLAGS_BLOCKED, "#008000")    ' Match found
                              		End If
                              
                              		'*** write flags to log
                              		If Logging_on = "On"
                              			hs.writelogex("CID script", "Blocked flag: " & CT_CIDFLAGS_BLOCKED, "#008000")
                              			hs.writelogex("CID script", "Announce flag: " & CT_CIDFLAGS_ANNOUNCE, "#008000")
                              			hs.writelogex("CID script", "Unknown flag: " & CT_CIDFLAGS_UNKNOWN, "#008000")
                              			hs.writelogex("CID script", "Special Greeting flag: " & CT_CIDFLAGS_SPECIALGREET, "#008000")
                              			hs.writelogex("CID script", "Popup flag: " & CT_CIDFLAGS_POPUP, "#008000") 
                              			hs.writelogex("CID script", "Private flag: " & CT_CIDFLAGS_PRIVATE, "#008000")
                              			hs.writelogex("CID script", "Out-of-area flag: " & CT_CIDFLAGS_OUTOFAREA, "#008000")
                              			hs.writelogex("CID script", "Flag 8: " & CT_CIDFLAGS_FLAG8, "#008000")
                              			hs.WriteLogEx("CID script", "Group: " & objContact.cid_group_category, "#008000")
                              		End If
                              ' ===========================================================================================================
                              ' ** special processing for entries marked as "Me" group if there are unread voicemail messages
                              		'  hs.WriteLogEx("CID script", "Group Me entry", "#008000")
                              
                              		mb = hsp.MBGetDefault
                              		If objContact.cid_group_category = "Me" AND mb.unread_messages > 0 Then
                              			hsp.LineScriptHasControl(1, TRUE)
                              			hsp.LineClearDTMF(1)
                              	                hsp.LINEAnswer(1)
                              			hsp.Speak(1, "<silence msec='1000'></silence> There is unread voicemail.  Dial 9 to ring phones.", True)			
                              			' hsp.WaitMS(10000)
                              
                              			hs.WriteLogEx("CID script", "DTMF count: " & hsp.LINEgetDTMFcount(1), "#008000")
                              			hs.WriteLogEx("CID script", "DTMF string: " & hsp.LINEgetDTMFstring(1), "#008000")
                              
                              			If hsp.LINEgetDTMFcount(1) > 0 AND hsp.LINEgetDTMFstring(1) = "9" Then
                              				hs.WriteLogEx("CID script", "Ringing phones", "#008000")
                              				hsp.HIPCmd(1,&H87,7) 		' Ringer Off Period
                              				hsp.HIPCmd(1,&H97,4) 		' Ringer On Period
                              				hsp.HIPCmd(1,&H14,&H0) 		' Start Ringing
                              
                              				hs.WriteLogEx("CID script", "Handset: " & hsp.HandsetOnHook(1), "#008000")
                              				hs.WriteLogEx("CID script", "Status: " & hsp.LINEstatus(1), "#008000")
                              
                              				Do While hsp.HandsetOnHook(1) = "TRUE" AND hsp.LINEstatus(1) = 3
                              					hs.WriteLogEx("CID script", "Handset: " & hsp.HandsetOnHook(1), "#008000")
                              					hs.WriteLogEx("CID script", "Status: " & hsp.LINEstatus(1), "#008000")
                              					hs.WaitSecs(2)
                              				Loop
                              
                              				hs.WriteLogEx("CID script", "Stop ringing and exit script", "#008000")
                              				hsp.HIPCmd(1,&H4,&H0) 		' Stop Ringing
                              			End If
                              
                              		End If
                              ' ===========================================================================================================
                              
                              		'*** if a match was found, set I to the max to exit the loop
                              		I = intAdrCount
                              
                                    End If
                              
                                  Next
                              
                              If Logging_on = "On"
                              	hs.WriteLogEx("CID script", "DEBUG Step #7", "#008000")
                              
                              	'** if no match found in address book, AddrBkIndex will be zero. 
                              	If AddrBkIndex = 0
                              		hs.WriteLogex("CID script", "AdrMatch I: " & CStr(I) & " No match found", "#008000")    ' No match found
                              		hs.WriteLogex("CID script", "AddrBkIndex: " & CStr(AddrBkIndex) & " No match found", "#008000")    ' No match found
                              	End if
                              
                              	hs.WriteLogEx("CID script", "DEBUG Pgm end", "#008000")
                              End If
                              
                              End Sub
                              
                              '*********************************************************
                              '*** format the telephone number if it contains 7, 10, or 11 digits
                              '*** otherwise return the original number after removing punctuation
                              
                              '*** This formatting is for U.S. standard.  For other countries, you'll
                              '*** need to modify this function to give you the desired formatting
                              
                              Function MkPhoneNum(byVal number)
                              
                                  Dim tmp as string = " "
                              
                                  number = CStr( number)
                                  number = Trim( number)
                                  number = StripString( number )
                              
                                  Select Case Len( number )
                                     Case 7
                                        tmp = tmp & Mid( number, 1, 3 ) & "-"
                                        tmp = tmp & Mid( number, 4, 4 )
                                     Case 10
                                        tmp = tmp & "(" & Mid( number, 1, 3 ) & ") "
                                        tmp = tmp & Mid( number, 4, 3 ) & "-"
                                        tmp = tmp & Mid( number, 7, 4 )
                                     Case 11
                                          tmp = tmp & Mid( number, 1, 1 ) & " " 
                                          tmp = tmp & "(" & Mid( number, 2, 3 ) & ") " 
                                          tmp = tmp & Mid( number, 5, 3 ) & "-" 
                                          tmp = tmp & Mid( number, 8, 4 ) 
                                      Case Else 
                                          MkPhoneNum = number 
                                          Exit Function 
                                  End Select
                               
                                  MkPhoneNum = tmp 
                              
                              End Function  
                              '*********************************************************
                              '*** determine the area code if the number contains 10 or 11 digits
                              '*** otherwise set area code to null
                              Function GetAreaCode(byVal number)
                              
                                  Dim tmp as string = " "
                              
                                  number = CStr( number)
                                  number = Trim( number)
                                  number = StripString( number )
                              
                                  Select Case Len( number )
                                     Case 10
                                        tmp = Mid( number, 1,3)
                                     Case 11
                                          tmp = Mid( number, 2, 3 )
                                      Case Else 
                                          GetAreaCode = "" 
                                          Exit Function 
                                  End Select
                               
                                  GetAreaCode = tmp 
                                  hs.WriteLogEx("CID script", "Area Code: " & tmp, "#008000")
                              End Function  
                              '*********************************************************
                              '*** strip all but digits from the passed string
                              '*** if the resulting string is null, return the passed string 
                              
                              Function StripString(byVal Pstring)
                              
                              	Dim WorkString as string = Pstring
                              	Dim tmp as string = ""
                              	Dim Offset_pstring as integer = 0
                              	Dim Pass as integer = 1
                              	Dim TestChar as string = " "
                              
                              	For Pass = 1 to WorkString.length
                              
                              		TestChar = WorkString.Substring(Offset_pstring, 1)
                              		If TestChar = "0" Or TestChar = "1" Or TestChar = "2" Or TestChar = "3" Or TestChar = "4" Or TestChar = "5" Or TestChar = "6" Or TestChar = "7" Or TestChar = "8" Or TestChar = "9" Then
                              			tmp = tmp & TestChar
                              		End If
                              
                              		Offset_pstring = Offset_pstring +1
                                      Next
                              
                              	StripString = Tmp
                              
                              End Function
                              '***********************************************************
                              '*** examine the bits in a byte
                              '*** used in this script to extract the CID flag values from an address book entry
                              
                              Function ExamineBit(ByVal MyByte, ByVal MyBit) As Boolean
                              
                              	Dim BitMask As Int16
                              	BitMask = 2 ^ (MyBit - 1)
                              	ExamineBit = ((MyByte And BitMask) > 0)
                              End Function
                              Fred

                              HomeSeer Pro 3.0.0.548, HS3Touch, Zwave 3.0.1.252, Envisalink DSC 3.0.0.40, WeatherXML, Z-stick, HS phone, Way2Call

                              Comment

                              Working...
                              X