Tonepie Cat Litter

sorry i can just put 1 item per post… also I can reply just 3 times lol

Thanks for the info. If I saw correctly from the photo, I see the following

XL1509E-5.0, DC-DC converter Buck 5V 3A 150kHz [ESOP-8] (=XL1509-5.0E1)

SDC9150 351DDD

AMS1117 T33F82LC


so these are the ones i could find. sorry for the bad quality pictures, this is what it is xD
thanks for the lookup!

I post a photo of the back of the case

Where to unscrew the self-tapping screws to remove the back cover

What’s inside?

Ionizer LZSS12-02H

Turbine TD5015 M20S 12V - 0.07A

Turbine dimensions



Hi guys, I just bought a tonepie-like cat litter box but it behaves very strange. If it has no litter, it performs a bigger rotation than when it has litter in it. Also, it does not levels the litter after the cleaning procedure but when I press the litter levelling button, the litter does levels correctly. Tried to change every setting I could, any ideas? Thank you in advance

Hey Divan, nice pics! Ijust received mine yesterday and during some first tests I found the ionizing function very very noisy! Something like a motor spinning touching the plastic enclousure…weird cause I tought the Ionizer was just an electronic static system, but with your teardown pics now I see there is a turbine inside! My doubt is that my problem could be that I tested it on a non-perfectly flat surface, I have to test it placed directly on the floor.

Just want to share my project/automation that I have made (with chatgpt support) to register who used the litter based on the weight different (I have two cats, Anacleto and Athena), increase a counter to alert me when I have to change litter/bag.

The litter is itegrated via Local Tuya integration:

I needed to add a custom integration for permanent variables:
GitHub - enkama/hass-variables: Home Assistant variables component.

Basically the automation listen to a certain state of litter sensors, and in a cicle registers the maximum weight from the litter sensor during the presence on a permanent variable.
Based on the weight registered it stores the data (weight, lenght of visit and cat name) on permanent variables (if above 5kg it’s Anacleto, if below Athena, else “Qualcuno” aka “Someone”), increment the usage counter, and send a push notification.
When the usages are 15en or more (above 14en) another notification is sent to alert that the bag needs to be changed.

I hope I made myself clear.
Here is the code of the automation:

alias: "Notifica: Visita Lettiera"
triggers:
  - entity_id: binary_sensor.lettiera_occupancy
    from: "on"
    to: "off"
    trigger: state
    id: detected-to-clear
conditions:
  - condition: numeric_state
    entity_id: sensor.lettiera_cat_weight
    above: 0
  - condition: state
    entity_id: switch.lettiera_smart_clean
    state: "off"
actions:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - detected-to-clear
        sequence:
          - action: variable.update_sensor
            target:
              entity_id:
                - sensor.variable_max_durata_gatto
                - sensor.variable_max_peso_gatto
            data:
              value: "0"
          - action: variable.update_sensor
            data:
              value: Qualcuno
            target:
              entity_id: sensor.variable_nome_gatto
          - repeat:
              until:
                - condition: state
                  entity_id: binary_sensor.lettiera_occupancy
                  state: "off"
                  for:
                    hours: 0
                    minutes: 2
                    seconds: 30
              sequence:
                - delay: "00:00:05"
                - if:
                    - condition: template
                      value_template: >-
                        {{ states('sensor.lettiera_cat_weight') | float >
                        states('sensor.variable_max_peso_gatto') | float and
                        states('sensor.lettiera_cat_weight') | float > 2 }}
                  then:
                    - action: variable.update_sensor
                      target:
                        entity_id: sensor.variable_max_peso_gatto
                      data:
                        replace_attributes: false
                        value: |
                          {{ states('sensor.lettiera_cat_weight') | float }}
                    - action: variable.update_sensor
                      target:
                        entity_id: sensor.variable_max_durata_gatto
                      data:
                        replace_attributes: false
                        value: |
                          {{ states('sensor.lettiera_time_spent_today') | int }}
                    - action: variable.update_sensor
                      target:
                        entity_id: sensor.variable_nome_gatto
                      data:
                        replace_attributes: false
                        value: >
                          {% if states('sensor.variable_max_peso_gatto') | float
                          >= 5 %}
                            Anacleto
                          {% elif states('sensor.variable_max_peso_gatto') |
                          float <= 5 %}
                            Athena
                          {% else %}
                            Qualcuno
                          {% endif %}
  - if:
      - condition: numeric_state
        entity_id: sensor.variable_max_peso_gatto
        above: 2
      - condition: numeric_state
        entity_id: sensor.variable_max_durata_gatto
        above: 0
    then:
      - choose:
          - conditions:
              - condition: template
                value_template: "{{ states('sensor.variable_nome_gatto') == 'Anacleto' }}"
            sequence:
              - action: variable.update_sensor
                data:
                  value: "{{ now().strftime('%Y-%m-%d %H:%M:%S') }}"
                  attributes:
                    peso: "{{ states('sensor.variable_max_peso_gatto') | float }} kg"
                    durata: "{{ states('sensor.variable_max_durata_gatto') | int }} sec"
                target:
                  entity_id: sensor.statistiche_lettiera_anacleto
          - conditions:
              - condition: template
                value_template: "{{ states('sensor.variable_nome_gatto') == 'Athena' }}"
            sequence:
              - action: variable.update_sensor
                data:
                  value: "{{ now().strftime('%Y-%m-%d %H:%M:%S') }}"
                  attributes:
                    peso: "{{ states('sensor.variable_max_peso_gatto') | float }} kg"
                    durata: "{{ states('sensor.variable_max_durata_gatto') | int }} sec"
                target:
                  entity_id: sensor.statistiche_lettiera_athena
          - conditions:
              - condition: template
                value_template: "{{ states('sensor.variable_nome_gatto') == 'Qualcuno' }}"
            sequence:
              - action: variable.update_sensor
                data:
                  value: "{{ now().strftime('%Y-%m-%d %H:%M:%S') }}"
                  attributes:
                    peso: "{{ states('sensor.variable_max_peso_gatto') | float }} kg"
                    durata: "{{ states('sensor.variable_max_durata_gatto') | int }} sec"
                target:
                  entity_id: sensor.statistiche_lettiera_qualcuno
  - if:
      - condition: numeric_state
        entity_id: sensor.variable_max_peso_gatto
        above: 2
    then:
      - data:
          title: "{{ states('sensor.variable_nome_gatto') }} è stata in lettiera"
          message: >
            per {{ states('sensor.variable_max_durata_gatto') }} secondi, peso
            {{ states('sensor.variable_max_peso_gatto') }} kg. {% if
            is_state('switch.lettiera_auto_clean', 'on') %}A breve partirà la
            pulizia automatica. {% else %}Pulizia Automatica disattivata,
            provvedere manualmente all'avvio. {% endif %}
          data:
            url: /dashboard-cats/litter
        action: notify.family_mobile_app
      - action: counter.increment
        metadata: {}
        data: {}
        target:
          entity_id: counter.utilizzi_lettiera
      - if:
          - condition: numeric_state
            entity_id: counter.utilizzi_lettiera
            above: 14
        then:
          - action: notify.family_mobile_app
            metadata: {}
            data:
              title: ATTENZIONE
              message: La lettiera ha il sacco pieno, sostituiscilo il prima possibile
              data:
                url: /dashboard-cats/litter
mode: single

im hoping someone can help me. i have this litter box purchased in feb and now its not doing a cycle says abnormal position. i have cleaned out, washed and wiped i dont know what is wrong. no clue where senors are any help would be wonderful im losing my mind

Try the following steps. If none of the steps work, the problem is likely related to the sensors or electronics. In this case, I recommend contacting a service center or requesting a refund if the device is still under warranty.

Step-by-step instructions:

  1. Unplug the tray from the power supply. Make sure that the device is completely de-energized.
  2. Remove the tank and set the mat’s position horizontally.
  3. Fill the tank with the filling material.
  4. Plug the tray back into the power supply. The device will automatically start the calibration process: the tank will start rotating and will stop once the process is complete. This indicates that the tray is ready for use.

Every time the filler or bag is replaced:

  1. Be sure to unplug the tray before any manipulation.
  2. Only fill the filler when the device is turned off.
  3. Plug the tray into the outlet only after you have installed the tank in place.

This is necessary for proper calibration: when the device is turned on, it weighs the filler and adjusts the sensors.

Just for info, I did the DivanX10 modification, changed the Tuya WBR3 device to an ESP32-C3 supermini Plus(V2). This does work … but … there is no really good way to find what Datapoints are used in my version of the Tonepie Ti Pro 25. It has the same layout of the front display as the older versions but… RX/TX is 115200 not 9600 and some DP’s work but there a few other. Impossible to find a good reference so it is a work of trial and error.
The internals seem the same but the ionizer is completely different = cheaper and up to now I did not find how to enable it.
Even a good user manual is impossible to find for my version. Frustrating at least.
If there is some interest in my modification or some pictures… just give a yell!

In the mean time I did work on this Tonepie cat litter project for some time and now my moggy is very happy.
I will for now just include my esphome .yaml file for those interested. Have a look. The datapoints of my device are different from the initial Divanx you also find here. One of the main differences is the TX/RX serial speed, io. 9600 I had to use 115200!
I used some AI especially for finding references in the Tuya mess that are often only available in chinese and because I fluently speak at least 4 languages chinese is not one of them. The Tonepie MCU also seems to go into sleep mode if nothing happens, this gave me some head-scratching… but seems normal, as soon as the moggy enters it awakens. I used an ESP32-C3 supermini plus(V2) that has a multicoloured LED that I exposed to the outside of the litterbox. It was a great help in debugging as accessing the internals of the box is quite difficult.
So now this “Tuya” device became a completely opensource ESPHome thingy!
I will publish the complete project later on Codeberg (I’m living in EU…) in English and Dutch… so even Home-assistant upper tsar “Paulus Schoutsen” can read it… :rofl::rofl::rofl::rofl::rofl: I just have to find some time for this now…

And yes, it took me some time, but I did this for my cat(s)… AND myself not having to clean catshit every day! :weary_cat:

Another thing, I had to use ESPHome 2025.7 for building as the latest Builder has problems with “tuya”…

I do not know if the latest Tonepie catshit boxes are still compatible. Don’t blame me if not.

Enjoy & have fun :smiling_cat_with_heart_eyes: :kissing_cat:

Jacques.

I will post the Esphome yaml asap because it is too large to put it here.
Keep looking here for news.