Close Menu
    Facebook X (Twitter) Instagram
    • Home
    • Contact Us
    • About Us
    • Privacy Policy
    • Terms Of Service
    • Advertisement
    Sunday, July 5
    Facebook X (Twitter) Instagram Pinterest Vimeo
    ABS Africa TV
    • Breaking News
    • Trending
    • Africa News
    • World News
    • Features
    • Technology
    • Sports
    • Politics
    • More
      • Culture
      • Lifestyle
      • Travel
      • Business
      • Environment
      • Legal
      • Health
      • Cameroon
      • Ambazonia
      • AfroSingles
      • Environ/Climate
      • Editorial
      • The Leak Magazine
    • Donate
    Subscription
    ABS Africa TV
    Home»Breaking News»Local dealers push to break Kenya Power’s token meter monopoly
    Breaking News

    Local dealers push to break Kenya Power’s token meter monopoly

    Nouman mBy Nouman mJuly 5, 2026No Comments10 Mins Read
    Facebook Twitter Pinterest LinkedIn Tumblr Email
    Share
    Facebook Twitter LinkedIn Pinterest Email
    Post Views: 1

    Local dealers push to break Kenya Power’s token meter monopoly

    Local dealers push to break Kenya Power’s token meter monopoly

    Kenya Power officials attend to a customer at their stand during the 47th annual Kenya Secondary Schools Heads Association (KESSHA) conference and exhibition in Mombasa on June 28, 2024. (Photo: Kenya Power)

    Read this story aloud

    Listen to the clean text version of this article

    Ready
    4 min listen
    Audio reading is not supported on this browser.

    The Africa Smart Meter Association has raised concerns that Kenya Power’s control over token meter tendering has hindered the growth of local manufacturers

    Electricity users in Kenya may soon have the option to purchase token meters from authorised dealerships, challenging Kenya Power’s monopoly on the market.
    The move aims to provide consumers with greater flexibility in connecting to the power grid without being limited to purchasing meters from the state-owned utility.
    The Africa Smart Meter Association has raised concerns that Kenya Power’s control over token meter tendering has hindered the growth of local manufacturers.
    Industry representatives argue that just as the e-Tims rollout has diversified the market, Kenya Power should establish standards and authorise select dealers to improve access for consumers.
    During a recent Senate energy committee meeting on Tuesday, the association Secretary General James Ngomeli revealed that currently, less than 10 per cent of the smart meters used in Kenya are locally manufactured.
    He pointed out that the situation favours assembly plants that import parts rather than fostering local manufacturing.

    Latest Stories

    • Taita Taveta County unveils cooperative fund to boost rural access to credit
    • Lilian Odira targets personal best and Diamond League final after dream victory in Eugene
    • Karua, Matiang’i demand arrest and resignation of PS Fikirini over Cecil Ouma shooting
    • A Super El Niño is coming: Five hard‑won lessons the world can learn from Africa

    “However, we are confident that this figure could increase to 60 per cent if a compelling business case is established, similar to what has been achieved with laptop assembly plants,” Ngomeli added.
    Local manufacturers highlighted that the existing environment makes it nearly impossible to invest further in the sector.
    “There is a major issue with the lack of approved manufacturing standards for smart meters by the Energy and Petroleum Regulatory Authority (EPRA), creating uncertainty for producers,” Ngomeli added.
    He pointed out that significant investments are required to assemble smart meters, but high interest rates make competition challenging.
    A major concern raised was the absence of approved manufacturing standards for smart meters from the Energy and Petroleum Regulatory Authority (EPRA). This lack of clarity creates uncertainty for producers looking to enter the market.
    Long-term agreements
    Manufacturers are advocating for long-term framework agreements with major off-takers like Kenya Power to ensure a steady demand for locally produced smart meters.
    Currently, Kenya Power acquires between 800,000 and 1 million meters annually to address the growing need for new customer connections and the expansion of the prepaid meter system.
    Charles Kaloki, chairman of the association, underscored the importance of collaboration between universities, research institutions, and companies like Kenya Power to promote the use of locally produced components.
    This collaboration could enhance the sustainability of the industry.
    Nairobi Senator Edwin Sifuna inquired about the challenges local producers face in meeting Kenya Power’s needs.
    Kaloki responded by stressing that both the utility firm and EPRA have yet to establish localised standards tailored for local manufacturers.
    “There is no reason why they can’t authorise dealers and open up the space for more players,” he argued.
    Kaloki noted that by increasing local production of smart meters, the government and utility companies could significantly reduce reliance on imports.
    This could lower costs associated with tariffs, shipping, and currency exchange rates by up to $100 million (approximately Sh12.9 billion), making smart meter deployment more affordable.
    While there are currently four assembly plants operating in the country, the market remains highly competitive and somewhat secretive.
    Intense competition for Kenya Power tenders leads many players to keep their business strategies confidential. This secrecy stifles collaboration and broader participation in the industry.
    Despite these challenges, the association remains hopeful that opening up the market will lead to innovation and better opportunities for local manufacturers.

    Other Topics To Read

    Top Stories Today

    • Karua, Matiang’i demand arrest of PS Fikirini over Cecil Ouma shooting
    • Taita Taveta to launch cooperative fund to boost rural credit access
    • World Champion Lilian Odira beats Keely Hodgkinson in Eugene thriller
    • Coast leaders rally support for 10-point agenda, reject divisive politics
    • A Super El Niño is coming: Five lessons Africa can teach the world
    • Faith Kipyegon reveals hamstring injury after rare defeat in Eugene

    `;
    }

    return “;
    }

    function commentActionsMarkup(comment, canComment) {
    const likeLabel = comment.liked_by_me ? ‘Liked’ : ‘Like’;
    const likeCount = Number(comment.like_count || 0) > 0
    ? “
    : ”;

    const likeButton = canComment && comment.status === ‘approved’
    ? “
    : “;

    const replyButton = canComment && comment.status === ‘approved’
    ? “
    : ”;

    return `

    `;
    }

    function commentMarkup(comment, canComment, isReply = false) {
    const pendingBadge = comment.status && comment.status !== ‘approved’
    ? “
    : ”;

    const edited = comment.is_edited
    ? “
    : ”;

    const repliesHtml = Array.isArray(comment.replies) && comment.replies.length
    ? `

    `
    : “;

    return `

    `;
    }

    function replyFormMarkup(commentId) {
    return `

    `;
    }

    function setNotice(widget, message, type = ‘info’) {
    const notice = widget.querySelector(‘[data-role=”notice”]’);
    if (!notice) return;

    if (!message) {
    notice.hidden = true;
    notice.textContent = ”;
    notice.classList.remove(‘is-error’);
    return;
    }

    notice.hidden = false;
    notice.textContent = message;
    notice.classList.toggle(‘is-error’, type === ‘error’);
    }

    function setCount(widget, total) {
    const count = widget.querySelector(‘[data-role=”count”]’);
    if (!count) return;

    const num = Number(total || 0);
    count.textContent = num === 1 ? ‘1 comment’ : `${num} comments`;
    }

    function openReplyBox(widget, commentId) {
    widget.querySelectorAll(‘[data-role=”reply-box”]’).forEach(box => {
    box.hidden = true;
    box.innerHTML = ”;
    });

    const targetItem = widget.querySelector(`.ev-comments__item[data-comment-id=”${commentId}”]`);
    if (!targetItem) return;

    const replyBox = targetItem.querySelector(‘[data-role=”reply-box”]’);
    if (!replyBox) return;

    replyBox.hidden = false;
    replyBox.innerHTML = replyFormMarkup(commentId);

    const textarea = replyBox.querySelector(‘textarea’);
    if (textarea) textarea.focus();
    }

    function closeReplyBox(container) {
    if (!container) return;
    container.hidden = true;
    container.innerHTML = ”;
    }

    async function initCommentsWidget(widget) {
    const state = {
    articleId: Number(widget.dataset.articleId),
    loadUrl: widget.dataset.loadUrl,
    storeUrl: widget.dataset.storeUrl,
    commentsBaseUrl: widget.dataset.commentsBaseUrl,
    canComment: widget.dataset.canComment === ‘1’,
    page: 1,
    perPage: 10,
    sort: ‘newest’,
    total: 0,
    hasMore: false,
    busy: false
    };

    const list = widget.querySelector(‘[data-role=”list”]’);
    const loading = widget.querySelector(‘[data-role=”loading”]’);
    const empty = widget.querySelector(‘[data-role=”empty”]’);
    const loadMoreBtn = widget.querySelector(‘[data-role=”load-more”]’);
    const sortSelect = widget.querySelector(‘[data-role=”sort”]’);
    const composerForm = widget.querySelector(‘[data-role=”composer-form”]’);

    async function loadComments(reset = true) {
    if (state.busy) return;

    state.busy = true;
    setNotice(widget, ”);
    loading.hidden = false;

    if (reset) {
    state.page = 1;
    list.innerHTML = ”;
    empty.hidden = true;
    }

    try {
    const url = new URL(state.loadUrl, window.location.origin);
    url.searchParams.set(‘page’, state.page);
    url.searchParams.set(‘per_page’, state.perPage);
    url.searchParams.set(‘sort’, state.sort);

    const response = await requestJson(url.toString(), {
    method: ‘GET’,
    headers: {
    ‘Accept’: ‘application/json’,
    ‘X-Requested-With’: ‘XMLHttpRequest’
    }
    });

    const items = Array.isArray(response.data) ? response.data : [];
    const meta = response.meta || {};

    state.total = Number(meta.total || 0);
    state.hasMore = !!meta.has_more;

    setCount(widget, state.total);

    if (reset) {
    list.innerHTML = ”;
    }

    if (!items.length && reset) {
    empty.hidden = false;
    } else {
    empty.hidden = true;
    list.insertAdjacentHTML(
    ‘beforeend’,
    items.map(item => commentMarkup(item, state.canComment, false)).join(”)
    );
    }

    loadMoreBtn.hidden = !state.hasMore;
    } catch (error) {
    if (!list.children.length) {
    empty.hidden = false;
    empty.textContent = ‘Unable to load comments right now.’;
    }
    setNotice(widget, error.message || ‘Unable to load comments.’, ‘error’);
    } finally {
    loading.hidden = true;
    state.busy = false;
    }
    }

    async function submitTopLevelComment(form) {
    const textarea = form.querySelector(‘textarea[name=”content”]’);
    const button = form.querySelector(‘[data-role=”submit-comment”]’);

    if (!textarea) return;

    const content = textarea.value.trim();
    if (!content) return;

    const originalText = button ? button.textContent : ”;

    try {
    if (button) {
    button.disabled = true;
    button.textContent = ‘Posting…’;
    }

    const response = await requestJson(state.storeUrl, {
    method: ‘POST’,
    headers: buildJsonHeaders(),
    body: JSON.stringify({
    article_id: state.articleId,
    content: content,
    source_url: window.location.href
    })
    });

    textarea.value = ”;

    if (response?.data) {
    list.insertAdjacentHTML(
    ‘afterbegin’,
    commentMarkup(response.data, state.canComment, false)
    );
    empty.hidden = true;

    if ((response.data.status || ”) === ‘approved’) {
    state.total += 1;
    setCount(widget, state.total);
    }
    }

    setNotice(widget, response.message || ‘Comment posted successfully.’);
    } catch (error) {
    setNotice(widget, error.message || ‘Unable to post comment.’, ‘error’);
    } finally {
    if (button) {
    button.disabled = false;
    button.textContent = originalText || ‘Post comment’;
    }
    }
    }

    async function submitReply(form) {
    const commentId = Number(form.dataset.commentId || 0);
    const textarea = form.querySelector(‘textarea[name=”content”]’);
    const button = form.querySelector(‘.ev-comments__reply-submit’);

    if (!commentId || !textarea) return;

    const content = textarea.value.trim();
    if (!content) return;

    const originalText = button ? button.textContent : ”;

    try {
    if (button) {
    button.disabled = true;
    button.textContent = ‘Posting…’;
    }

    const response = await requestJson(`${state.commentsBaseUrl}/${commentId}/reply`, {
    method: ‘POST’,
    headers: buildJsonHeaders(),
    body: JSON.stringify({
    article_id: state.articleId,
    content: content,
    source_url: window.location.href
    })
    });

    if (response?.data) {
    const parentItem = widget.querySelector(`.ev-comments__item[data-comment-id=”${commentId}”]`);
    if (parentItem) {
    const repliesWrap = parentItem.querySelector(‘.ev-comments__replies’);
    if (repliesWrap) {
    repliesWrap.insertAdjacentHTML(
    ‘beforeend’,
    commentMarkup(response.data, state.canComment, true)
    );
    }
    }
    }

    closeReplyBox(form.closest(‘[data-role=”reply-box”]’));
    setNotice(widget, response.message || ‘Reply posted successfully.’);
    } catch (error) {
    setNotice(widget, error.message || ‘Unable to post reply.’, ‘error’);
    } finally {
    if (button) {
    button.disabled = false;
    button.textContent = originalText || ‘Post reply’;
    }
    }
    }

    async function toggleLike(button) {
    const commentId = Number(button.dataset.commentId || 0);
    if (!commentId) return;

    const originalHtml = button.innerHTML;

    try {
    button.disabled = true;
    button.innerHTML = ‘Working…’;

    const response = await requestJson(`${state.commentsBaseUrl}/${commentId}/like`, {
    method: ‘POST’,
    headers: buildJsonHeaders(),
    body: JSON.stringify({})
    });

    const liked = !!response?.data?.liked;
    const likeCount = Number(response?.data?.like_count || 0);

    button.classList.toggle(‘is-liked’, liked);
    button.innerHTML = `${liked ? ‘Liked’ : ‘Like’} ${likeCount > 0 ? “ : ”}`;
    } catch (error) {
    button.innerHTML = originalHtml;
    setNotice(widget, error.message || ‘Unable to update like.’, ‘error’);
    } finally {
    button.disabled = false;
    }
    }

    if (composerForm) {
    composerForm.addEventListener(‘submit’, function (e) {
    e.preventDefault();
    submitTopLevelComment(composerForm);
    });
    }

    if (sortSelect) {
    sortSelect.addEventListener(‘change’, function () {
    state.sort = this.value || ‘newest’;
    loadComments(true);
    });
    }

    if (loadMoreBtn) {
    loadMoreBtn.addEventListener(‘click’, function () {
    if (state.busy || !state.hasMore) return;
    state.page += 1;
    loadComments(false);
    });
    }

    widget.addEventListener(‘click’, function (e) {
    const likeBtn = e.target.closest(‘[data-action=”toggle-like”]’);
    if (likeBtn) {
    e.preventDefault();
    toggleLike(likeBtn);
    return;
    }

    const replyBtn = e.target.closest(‘[data-action=”toggle-reply”]’);
    if (replyBtn) {
    e.preventDefault();
    openReplyBox(widget, Number(replyBtn.dataset.commentId || 0));
    return;
    }

    const cancelReplyBtn = e.target.closest(‘[data-action=”cancel-reply”]’);
    if (cancelReplyBtn) {
    e.preventDefault();
    closeReplyBox(cancelReplyBtn.closest(‘[data-role=”reply-box”]’));
    }
    });

    widget.addEventListener(‘submit’, function (e) {
    const replyForm = e.target.closest(‘.ev-comments__reply-form’);
    if (replyForm) {
    e.preventDefault();
    submitReply(replyForm);
    }
    });

    loadComments(true);
    }

    document.addEventListener(‘DOMContentLoaded’, function () {
    document.querySelectorAll(‘.ev-comments’).forEach(initCommentsWidget);
    });
    })();

    Trending

    Eight arrested in Marsabit over Sh1.2 million SIM swap fraud
    Eight arrested in Marsabit over Sh1.2 million SIM swap fraudNorthern Kenya
    |Bashir Mbuthia
    |1 day ago
    Faith Kipyegon reveals hamstring injury after rare defeat as focus shifts to second half of season
    Faith Kipyegon reveals hamstring injury after rare defeat as focus shifts to second half of seasonAthletics
    |Erick Kariuki
    |3 hours ago
    Six killed as matatu, trailer collide head-on along Nakuru-Eldoret highway
    Six killed as matatu, trailer collide head-on along Nakuru-Eldoret highwayNews
    |Rachael Mutabasi
    |1 day ago
    Somali Embassy hosts Kenya leaders, diplomats for 66th Independence Day celebrations
    Somali Embassy hosts Kenya leaders, diplomats for 66th Independence Day celebrationsSomalia
    |Abdirahman Khalif
    |7 hours ago
    Court declares Ruaraka School land public, rules Sh1.5 billion payout illegalNews
    |Carolyne Kubwa
    |1 day ago
    Pakistan to host next round of US-Iran talks on July 11
    Pakistan to host next round of US-Iran talks on July 11Middle-East
    |XINHUA
    |7 hours ago
    Mbappé fires France past Paraguay into World Cup quarter-finals
    Mbappé fires France past Paraguay into World Cup quarter-finalsSports
    |Erick Kariuki
    |12 hours ago
    Invisible peacebuilders: How ‘diplomacy works’ to prevent conflict
    Invisible peacebuilders: How ‘diplomacy works’ to prevent conflictWorld
    |UN News
    |11 hours ago
    Machakos Mitumba Market traders suffer heavy losses after midnight fire
    Machakos Mitumba Market traders suffer heavy losses after midnight fireNews
    |Lucy Mumbi
    |9 hours ago
    Lilian Odira targets personal best and Diamond League final after dream victory in Eugene
    Lilian Odira targets personal best and Diamond League final after dream victory in EugeneAthletics
    |Erick Kariuki
    |1 hour ago

    break dealers KENYA local push
    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
    Nouman m
    • Website

    Related Posts

    Senegal presidency winner Bassirou Faye says he is a ‘break’ from establishment

    July 5, 2026

    Kenya discusses declining donkey population with AU, Brooke East Africa

    July 5, 2026

    Local dealers push to break Kenya Power’s token meter monopoly

    July 5, 2026
    Leave A Reply Cancel Reply

    Search
    Latest Post

    The Weirdest (and Most Delicious) Wild Game I’ve Ever Eaten

    July 5, 2026

    Refugees decry lack of adequate climate funding in most vulnerable regions

    July 5, 2026

    BRICS News Digest for the previous week

    July 5, 2026

    Eastern Africa Steps Up Disease Preparedness in Mombasa

    July 5, 2026

    SA’s Digital Learner Licence System Cuts Fraud as Pass Rate Drops from 68% to 40% | Law

    July 5, 2026

    Subscribe to Updates

    Get the latest creative news from FooBar about art, design and business.

    • Facebook
    • Twitter
    • Pinterest
    • Instagram
    • YouTube
    • TikTok
    ABS TV and ABS Network News is a leading Pan-African 24/7 broadcasting network delivering nonstop news, talk shows, lifestyle programs, and digital media content worldwide through Satellite, Streaming Platforms, and Roku TV.
     
    Based in the United States, we connect Africa to the world while empowering creators, journalists, and brands through innovative media and broadcasting services.
    Facebook X (Twitter) Pinterest WhatsApp Instagram

    Our Picks

    The Weirdest (and Most Delicious) Wild Game I’ve Ever Eaten

    Refugees decry lack of adequate climate funding in most vulnerable regions

    BRICS News Digest for the previous week

    Most Popular

    Eastern Africa Steps Up Disease Preparedness in Mombasa

    SA’s Digital Learner Licence System Cuts Fraud as Pass Rate Drops from 68% to 40% | Law

    Burna Boy Reclaims Top Spot as Most

    © 2026 Copyright. All Rights Reserved by ABSAFRICATV
    • Privacy Policy
    • Terms of Services

    Type above and press Enter to search. Press Esc to cancel.

    We use cookies to ensure that we give you the best experience on our website. If you continue to use this site we will assume that you are happy with it.