Một máy biến tần chuỗi là ... ">
,需要通过父级DOM结构来判断
*/
var trackActionPhone = function (node) {
var nodeInnerText = node.innerText || ''
if (!limitRegLength(nodeInnerText)) return
var nodeText = trimText(nodeInnerText)
if (nodeText.length < 5 || nodeText.length > 20) return false
var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'click'
var str = trimText(node.href || node.innerHTML || '')
if (phoneReg.test(str) && numUseReg.test(str)) {
_paq.push(['trackEvent', type, 'phone', nodeText])
return true
}
/** 排查父级嵌套非标签场景,并且对dom的正则校验做一个性能兜底,通过控制innerText的长度,来确保正则的性能 */
var fatherText = trimText(node.parentNode.innerText || '')
if (fatherText.length < 5 || fatherText.length > 20) return false
var fatherDom = trimText(node.parentNode.innerHTML || '')
if (phoneReg.test(fatherDom) && numUseReg.test(fatherDom)) {
_paq.push(['trackEvent', type, 'phone', nodeText])
return true
}
return false
}
window.addEventListener('click', function (e) {
var node = e.target
/** 社媒点击 */
var appName = ''
var getAppAriaLabel = node.ariaLabel || node.parentNode.ariaLabel || ''
if (mediaList.includes(getAppAriaLabel.toLowerCase())) {
appName = getAppAriaLabel
}
if (!appName && node.nodeName && node.nodeName.toLowerCase() === 'a') {
appName = getMediaName(node.href) || getMediaName(node.alt)
}
if (!appName && node.nodeName && node.nodeName.toLowerCase() === 'img') {
appName = getMediaName(node.alt) || getMediaName(node.src)
}
if (!appName && node.nodeName && node.nodeName.toLowerCase() === 'i') {
appName = getMediaName(node.className)
}
if (appName) {
_paq.push(['trackEvent', 'click', 'contactApp', appName])
return
}
/** 联系方式点击 */
if (trackActionPhone(node, 'click')) return
if (node.nodeName && node.nodeName.toLowerCase() === 'a') {
var val = node.href
if (!limitRegLength(val)) return
if (emailReg.test(val)) {
_paq.push(['trackEvent', 'click', 'email', val])
return
}
}
if (node.nodeName && node.nodeName.toLowerCase() === 'i') {
var val = node.className
var content = node.parentNode.href || ''
if (val.includes('email')) {
_paq.push(['trackEvent', 'click', 'email', content])
return
}
}
var nodeChildList = node.childNodes
for (var i = 0; i < nodeChildList.length; i++) {
;(function (i) {
if (nodeChildList[i].nodeType !== 3) return
var val = nodeChildList[i].textContent.replace(/\s?:?/g, '')
if (!limitRegLength(val)) return
if (emailReg.test(val)) {
_paq.push(['trackEvent', 'click', 'email', val])
return
}
})(i)
}
trackNumberData(node)
})
window.addEventListener('copy', function (e) {
if (trackActionPhone(e.target, 'copy')) return
var text = e.target.textContent
if (!text) return
var val = text.replace(/\s:?/g, '')
if (!limitRegLength(val)) return
if (emailReg.test(val)) {
_paq.push(['trackEvent', 'copy', 'email', val])
return
}
trackNumberData(e.target)
})
}
trackContactInit()
/**
* 基于custom_inquiry_form.js 以及 form.js 对于询盘表单提交的实现,来反推询盘表单的input标签触发,用来收集意向客户
* 1. 缓存的KEY:TRACK_INPUT_ID_MTM_00;
* 2. 缓存策略 - lockTrackInput:单个页面内,10分钟内,不重复上报
*/
function trackActionInput() {
const CACHE_KEY = 'TRACK_INPUT_ID_MTM_00'
const pathName = window.location.hostname + window.location.pathname
var lockTrackInput = function () {
try {
const lastCacheData = localStorage.getItem(CACHE_KEY)
if (!lastCacheData) return false
const cacheData = JSON.parse(lastCacheData)
const cacheTime = cacheData[pathName]
if (!cacheTime) return false
return Date.now() - cacheTime < 1000 * 60 * 10 // 10分钟内,不重复上报
} catch (error) {
console.error('lockTrackInput Error', error)
return false
}
}
var setInputTrackId = function () {
try {
const curCacheData = localStorage.getItem(CACHE_KEY)
if (curCacheData) {
const cacheData = JSON.parse(curCacheData)
cacheData[pathName] = Date.now()
localStorage.setItem(CACHE_KEY, JSON.stringify(cacheData))
return
}
const cacheData = {
[pathName]: Date.now(),
}
localStorage.setItem(CACHE_KEY, JSON.stringify(cacheData))
} catch (error) {
console.error('setInputTrackId Error', error)
}
}
var getInputDom = function (initDom) {
var ele = initDom
while (ele) {
/**
* isWebSiteForm 是站点的表单
* isChatWindowForm 是聊天窗口的表单
*/
/** 旧模板表单 */
var isWebSiteForm = !!(/crm-form/i.test(ele.className) && ele.querySelector('form'))
/** 1:新模板自定义表单、2:Get a Quote 弹框表单 */
var isWebSiteFormNew = !!(/inquiry/i.test(ele.className) && ele.querySelector('form'))
if (isWebSiteForm || isWebSiteFormNew) {
_paq.push(['trackEvent', 'formInquiry', 'formInput', 'page'])
setInputTrackId()
break
}
/** Mkt会话触达-聊天弹框的表单输入: MKT由于是iframe嵌入,所以MKT的上报,会单独写到MKT-form代码上 */
var isInquiryChatForm = !!(/comp-form/i.test(ele.className) && ele.querySelector('form'))
if (isInquiryChatForm) {
_paq.push(['trackEvent', 'formInquiry', 'formInput', 'chat'])
setInputTrackId()
break
}
/** 向上查找父节点 */
ele = ele.parentNode
}
}
function initInputListener() {
var inputUseDebounce = function (fn, delay) {
var timer = null
var that = this
return function () {
var args = Array.prototype.slice.call(arguments)
if (timer) clearTimeout(timer)
timer = setTimeout(function () {
fn.apply(that, args)
}, delay)
}
}
var optimizeGetInputDom = inputUseDebounce(getInputDom, 300)
window.addEventListener('input', function (e) {
/** 如果已经上报过,则不再上报 */
if (lockTrackInput()) return
optimizeGetInputDom(e.target)
})
}
try {
initInputListener()
} catch (error) {
console.log('initInputListener Error', error)
}
}
trackActionInput()
}
/** 第三方消息上报:目前主要是针对全点托管会话;在msgCollect/index.js中调试,访问test.html */
function thirdMsgCollect() {
/** 先检测是否是stayReal托管:如果stayReal脚本都没有,那么说明当前站点未开启stayReal会话托管 */
const scriptList = Array.prototype.slice.call(document.querySelectorAll('script'))
const checkStayReal = () => !!scriptList.find((s) => s.src.includes('stayreal.xiaoman.cn'))
if (!checkStayReal()) return
/** 缓存当前消息队列的最后一条消息id */
const CACHE_KEY = 'CACHE_KEY_MONITOR'
const setCache = (msgIndex) => {
/** 对缓存KEY进行base64转码处理 */
const cacheMsgIndex = btoa(msgIndex)
localStorage.setItem(CACHE_KEY, cacheMsgIndex)
}
const getCache = () => {
const cacheMsgIndex = localStorage.getItem(CACHE_KEY)
if (cacheMsgIndex) return Number(atob(cacheMsgIndex))
return -1
}
/** 拉取最新msg列表 */
const pullMsgList = () => {
const msgEleList = Array.prototype.slice.call(document.querySelectorAll('#chat-list li'))
const msgIds = []
const msgMap = msgEleList.reduce((acc, item) => {
const sendTime = item.querySelector('.message-data-time').textContent.trim()
const sendContent = item.querySelector('.message').textContent.trim()
/** msg带有class:other-message的是访客消息,my-message的是客服消息 */
const isOtherMessage = item.querySelector('.message').classList.contains('other-message')
const msgId = item.querySelector('.message').getAttribute('id')
const msgItemData = {
msgId,
user: isOtherMessage ? 'visitor' : 'official',
time: sendTime,
content: sendContent,
}
msgIds.push(msgId)
acc[msgId] = msgItemData
return acc
}, {})
return {
ids: msgIds,
dataMap: msgMap,
}
}
/** 加密并上传消息数据 */
let ENCRYPT_KEY = 'de29f1aab63ab033'
let ENCRYPT_IV = 'b8d2badf875e76ac'
const baseUrl = 'https://cms.xiaoman.cn'
// var getEncryptConfig = function () {
// const url = baseUrl + '/shop-api/innerApi/getKeyIv'
// $.get(
// url,
// function (result) {
// console.log('result', result)
// if (Number(result.code) === 0 && result.data.key && result.data.iv) {
// ENCRYPT_KEY = result.data.key
// ENCRYPT_IV = result.data.iv
// uploadMsgData()
// } else {
// /** 如果获取失败,则重试 */
// setTimeout(() => {
// getEncryptConfig()
// }, 1000)
// }
// },
// 'json'
// )
// }
// getEncryptConfig()
const encryptMsg = function (msgData) {
const enc = new TextEncoder()
// 转字节
const keyBytes = enc.encode(ENCRYPT_KEY)
const ivBytes = enc.encode(ENCRYPT_IV)
const plainBytes = enc.encode(msgData)
// 导入密钥并加密
return crypto.subtle
.importKey('raw', keyBytes, { name: 'AES-CBC' }, false, ['encrypt'])
.then(function (cryptoKey) {
return crypto.subtle.encrypt({ name: 'AES-CBC', iv: ivBytes }, cryptoKey, plainBytes)
})
.then(function (encryptedBuffer) {
// 转 base64 返回
return btoa(String.fromCharCode(...new Uint8Array(encryptedBuffer)))
})
.catch((err) => {
return Promise.reject(err)
})
}
let uploadFlag = false
const uploadMsgData = function () {
if (uploadFlag) return
uploadFlag = true
const { ids, dataMap } = pullMsgList()
let cacheMsgIndex = getCache()
const msgLen = ids.length
if (!msgLen) {
// 消息DOM未挂载 || 消息DOM已挂载,但是消息列表为空
uploadFlag = false
return
}
if (msgLen - 1 < cacheMsgIndex) {
/** 针对站点挂后台一段时间,消息列表会自动塞入重复消息,导致消息有重复,刷新后又重置回正常消息列表,所以这里需要更新锚点下标 */
cacheMsgIndex = msgLen - 1
setCache(cacheMsgIndex)
uploadFlag = false
return
}
if (msgLen - 1 === cacheMsgIndex) {
// 缓存的最后一次发送的消息ID是最后一条(说明当前消息均已经上报),则不跳过本地上报
uploadFlag = false
return
}
const currentMsgIds = ids.slice(cacheMsgIndex + 1, msgLen)
const currentMsgData = currentMsgIds.map((id) => dataMap[id])
const mtmId = window.matomo_site_id_cookie_key || '' // 获取mtm会话id
const msgBody = {
mtmId,
curl: window.location.href,
msgList: currentMsgData,
}
const msgBodyStr = JSON.stringify(msgBody)
encryptMsg(msgBodyStr)
.then(function (encryptedMsg) {
console.log('encryptedMsg:', encryptedMsg, msgBodyStr)
const url = baseUrl + '/shop-api/External/ListenSiteActiveStatus'
$.ajax({
type: 'POST',
url,
data: JSON.stringify({ d_v: encryptedMsg }),
contentType: 'application/json',
success: function (result) {
if (Number(result.code) === 0) {
// 更新消息队列
setCache(msgLen - 1)
}
uploadFlag = false
},
error: function (err) {
console.error(err, '请求异常')
uploadFlag = false
},
})
})
.catch((err) => {
console.error(err, '数据加密失败')
uploadFlag = false
})
}
/** 监控chat-list的DOM变更 */
const initChatListObserver = () => {
// 需要监听的 DOM 节点
const target = document.getElementById('chat-list')
// 回调函数
const callback = function (mutationsList, observer) {
for (const mutation of mutationsList) {
console.log('mutation', mutation)
if (mutation.type === 'childList') {
uploadMsgData()
}
}
}
// 配置
const config = {
childList: true, // 监听子节点的增删
subtree: true, // 是否也监听后代节点
}
// 创建 observer
const observer = new MutationObserver(callback)
// 开始监听
observer.observe(target, config)
}
let testCount = 30
let itv = null
const checkChatDom = () => !!document.querySelector('#vc-model')
const initTalkCheck = () => {
itv = setTimeout(() => {
console.log('checkChatDom', checkChatDom(), testCount)
if (!checkChatDom() && testCount > 0) {
testCount--
initTalkCheck()
return
}
clearTimeout(itv)
uploadMsgData()
initChatListObserver()
}, 1500)
}
initTalkCheck()
}
try {
gtmTrack()
thirdMsgCollect()
console.log('inserted gtm code')
} catch (error) {
console.error('gtmTrack Error', error)
}
})
})();
Vì vậy, tiếp tục chủ đề này, hôm nay chúng ta sẽ thảo luận thêm về "bộ biến tần chuỗi" và cách nó giúp bạn sử dụng năng lượng mặt trời hiệu quả. Tìm hiểu cách bộ biến tần chuỗi hoạt động Bạn có thể tự hỏi Kickstarter là gì. Một máy biến tần chuỗi là thiết bị giúp chúng ta chuyển đổi điện năng từ các tấm pin mặt trời thành dạng có thể sử dụng, cũng như của Solarman. solar inverter micro1 . Vâng, các tấm pin mặt trời tạo ra một dạng điện được gọi là dòng điện một chiều (DC). Đây không phải là điện trong gia đình. Máy biến tần chuỗi vào vai trò ở đây, nó chuyển đổi điện DC thành điện AC, là cách phổ biến để truyền tải dòng điện. Điện AC là nguồn năng lượng mà chúng ta sử dụng khi nó đến nhà và vận hành đèn chiếu sáng cũng như cho phép chúng ta xem truyền hình. Giống như một siêu anh hùng chuyển hóa tia nắng mặt trời thành năng lượng có thể sử dụng. Vậy bạn có thể tự hỏi, quá trình chuyển đổi này diễn ra như thế nào? Hãy để tôi giải thích cho bạn, giống như cách tấm pin mặt trời được sản xuất bởi Solarman. Inverter Chuỗi - Inverter chuỗi nhận điện năng DC từ các tấm pin mặt trời. Một nhóm các tấm này được nối dây thành hàng để tạo thành cái mà chúng ta gọi là "chuỗi". Khi các tấm pin bị ánh sáng mặt trời chiếu vào, chúng tạo ra điện năng DC và lưu trữ nó dưới dạng năng lượng. Sau đó, điện năng này được truyền đi xa hơn thông qua dây dẫn và cuối cùng vào inverter chuỗi, nơi chuyển đổi DC thành AC. Điện năng AC này có thể được sử dụng để cung cấp năng lượng cho mọi thứ trong ngôi nhà của chúng ta và thậm chí một số phần của doanh nghiệp cũng vậy. Inverter chuỗi còn bao gồm một bộ phận tiện lợi giúp chúng ta theo dõi hiệu suất của tất cả các tấm pin mặt trời, đảm bảo mọi thứ hoạt động trơn tru như một cuộn chỉ may. Vậy tất cả những điều này được thực hiện như thế nào? Đã đến lúc đi sâu vào hậu trường, giống hệt như sản phẩm của Solarman inverter 10 kilowatt chúng ta tạo ra điện một chiều (DC) khi ánh sáng mặt trời chiếu sáng qua các tấm pin mặt trời của chúng ta. Từ đó, dòng điện chảy qua dây cáp đến bộ biến tần: Một thiết bị phần cứng được gọi là biến tần chuỗi, nó chuyển đổi điện DC thành AC. Đây là điều rất quan trọng vì các thiết bị hàng ngày - như đèn, tủ lạnh và máy tính ví dụ - đều phụ thuộc vào điện AC. Điện AC bây giờ chảy qua một dây khác, đến nhà chúng ta để chúng ta có thể sử dụng cho tất cả nhu cầu điện của mình. Phải không, thật tuyệt vời? Điều này tự thân đã đặt ra câu hỏi; biến tần chuỗi là gì và tại sao chúng ta cần quan tâm nếu nó có hay không trong hệ thống năng lượng mặt trời của mình?, cùng với biến tần micro grid được phát triển bởi Solarman. Điều đó có rất nhiều ý nghĩa vì nhiều lý do. Bước 1 - Bộ biến tần chuỗi (lựa chọn tương thích và tiêu chuẩn nhất). Trước tiên, bộ biến tần chuỗi được sử dụng để khai thác tối đa từ các tấm pin mặt trời của chúng ta. Bằng cách này, chúng ta có thể tạo ra nhiều điện hơn và tiết kiệm một khoản tiền lớn từ hóa đơn điện, ai mà không yêu thích việc tiết kiệm tiền chứ? Hơn nữa, bộ biến tần chuỗi cho chúng ta biết tình trạng sạch hoặc bẩn của các tấm pin mặt trời như thế nào. Nó đảm bảo rằng chúng ta phát hiện sớm những vấn đề này trước khi chúng trở thành vấn đề lớn hơn. Chúng hoạt động giống như người bạn giúp nhắc nhở những điều quan trọng sau khi chúng ta rời khỏi nơi đó. Chúng tôi dựa vào kinh nghiệm và khả năng của các gã khổng lồ trong ngành như Deye và LONGi để tích hợp bộ biến tần chuỗi sản phẩm của mình. Hợp tác với những công ty nổi tiếng này cho phép chúng tôi tiếp cận công nghệ hiện đại và tích hợp những tiến bộ mới nhất vào các giải pháp của mình, đảm bảo hiệu suất và độ tin cậy vô song. Chúng tôi đã mở rộng hoạt động vượt ra ngoài biên giới quốc gia. Các sản phẩm năng lượng mặt trời hàng đầu của chúng tôi được bán ra nhiều quốc gia và khu vực, bao gồm Ba Lan, Đức và Áo. Sự hiện diện toàn cầu của chúng tôi phản ánh cam kết không ngừng nghỉ trong việc giúp thúc đẩy cuộc cách mạng năng lượng xanh trên toàn thế giới. với biến tần chuỗi có chứng nhận CE và TÜV, sản phẩm của chúng tôi tuân thủ các tiêu chuẩn cao nhất của tiêu chuẩn quốc tế về an toàn và chất lượng. Những sự công nhận đáng giá này nhấn mạnh cam kết không đổi của chúng tôi trong việc cung cấp các giải pháp năng lượng mặt trời chất lượng cao, tạo niềm tin và sự tin tưởng. Với hai biến tần chuỗi hiện đại với năng lực sản xuất hàng năm vượt quá 800MW, chúng tôi đứng ở vị trí tiên phong trong lĩnh vực sản xuất năng lượng mặt trời. Quy mô và hiệu quả của chúng tôi cho phép đáp ứng nhu cầu của các dự án lớn và nhỏ, đảm bảo giao hàng đúng thời hạn mà không mất chất lượng. Bản quyền © Jiangsu Solarman Technology Co., Ltd. Tất cả các quyền được bảo lưu
-
Chính sách bảo mật
Biến tần dây chuyền
Tận dụng tối đa tấm pin mặt trời của bạn với bộ biến tần chuỗi
Cách bộ biến tần chuỗi chuyển đổi điện năng DC thành AC cho ngôi nhà của bạn?
Những lợi ích của bộ biến tần chuỗi cho ngôi nhà sử dụng năng lượng mặt trời
Why choose Solarman Biến tần dây chuyền?
Đối tác chiến lược với các tập đoàn lớn trong ngành
Sự tăng trưởng bền vững, tầm với toàn cầu
Chất lượng được chứng nhận
Khả năng Sản Xuất Hàng Đầu Ngành
Danh Mục Sản Phẩm Liên Quan
Không Tìm Thấy Thứ Bạn Đang Tìm?
Yêu Cầu Báo Giá Ngay
Liên hệ với các chuyên gia tư vấn của chúng tôi để biết thêm sản phẩm có sẵn.