In preparation for porting here is an updated guide to help you move from Blueface efficiently and easily.

  1. Prepare your devices.
    Note the name, extension, email, model, MAC, IP for each device in a spreadsheet.
    To find the IP address of a phone press the Menu key, scroll to System Settings -> Status -> IPv4 Settings -> IP Address
  2. Contact Blueface on +353 1 524 2000. 
     Provide the MAC addresses of the telephones to be removed from the Blueface system.
  3. Factory Default the telephones.
    Press Menu – scroll to System Settings, hit enter.
    Type #136 and a confirmation should appear on screen.  Select Yes.
  4. Enable the Web Interface of the device.
     Press Menu – scroll to System Settings -> Network Settings -> Embedded Web -> Set this to On. 
    You should now be able to log onto the web interface of the device using http://ip_address.
      The default username is ‘admin’ the default password is ‘adminpass’.
  5. Programming
    Editing the function keys on each handset can be a repetitive and tiresome task, so we’ve written a simple script you can use to autofill the configuration.
    Log onto the phones web portal, click the heading ‘Telephone’, then select ‘Flexible Key Settings’.
    Press F12 to launch your browsers developer tools, and under ‘Console’ paste in the below code. 
    N.B. On Chrome you need to enter ‘allow pasting’ before the code can be executed.

 /* 
 1. Edit button values in the array below 
 2. Open console and paste the entire code 
 3. Hit enter 
 4. Save the page. 
  
 Don't use inspector to drill down into the html: Panasonic uses multiple documents in frames, 
 if the wrong document is selected with inspector the script will fail. Fix: Select the 
 top html tag in inspector to ensure the main document is selected. 
 */ 
     
 (() => { 
   //Define key values  
   let buttons = [  
     {type:'line', parameter: 1, label: 'Line 1'},  
     {type:'line', parameter: 1, label: 'Line 1'},  
     {type:'park', parameter: '701_tenant101', label: 'Park 1'},  
     {type:'park', parameter: '702_tenant101', label: 'Park 2'},  
     {type:'blf', parameter: '222_tenant101', label: 'Joseph Dredd'},  
     {type:'blf', parameter: '223_tenant101', label: 'Johnny Alpha'},  
     {type:'dial', parameter: '016190619', label: 'Speechpath'},  
   ];  
  
   //Map type to value for select  
   let values = {dial:1, blf:2, line:3, park:16};   
  
   //Find content
   let content = document.querySelector('frame[name="contents"]').contentDocument;
   
   //Find & filter dss key rows
   let trElements = content
     .getElementsByTagName('form')[0]
     .getElementsByTagName('tbody')[1]
     .getElementsByTagName('tr');

   let trs = Array.from(trElements)
     .filter(tr => !!tr.lastChild.getElementsByTagName('input').length );   
  
   //Clear all inputs  
   trs.forEach(tr => {  
     tr.querySelector(`select option[value="0"]`).selected = true;  
     Array.from(tr.querySelectorAll('input')).forEach(input => input.value = '');  
   });  
  
   //Insert values  
   buttons.forEach(button => {  
     let tr = trs.shift();  
     let typeValue = values[button.type];  
     let textinputs = tr.querySelectorAll('input');  
     tr.querySelector(`select option[value="${typeValue}"]`).selected = true;  
     textinputs[0].value = button.parameter;  
     textinputs[1].value = button.label;  
   });  
 })();