Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Unsolved
Collapse
Discussion Forum to share and further the development of home control and automation, independent of platforms.
K

kfxo

@kfxo
[Solved] Rulesets with multiple groups in Set Reaction not working post-26116
G
Topic thumbnail image
Multi-System Reactor
Reactor (Multi-System/Multi-Hub) Announcements
toggledbitsT
Build 21228 has been released. Docker images available from DockerHub as usual, and bare-metal packages here. Home Assistant up to version 2021.8.6 supported; the online version of the manual will now state the current supported versions; Fix an error in OWMWeatherController that could cause it to stop updating; Unify the approach to entity filtering on all hub interface classes (controllers); this works for device entities only; it may be extended to other entities later; Improve error detail in messages for EzloController during auth phase; Add isRuleSet() and isRuleEnabled() functions to expressions extensions; Implement set action for lock and passage capabilities (makes them more easily scriptable in some cases); Fix a place in the UI where 24-hour time was not being displayed.
Multi-System Reactor
Reactor build 26116: empty group reaction
therealdbT
I have a couple of rules that has group reactions with empty conditions. I notice, in particular on one that's called every 5 secs, that it was not working. I added an empty comment as condition and it started working again. I don't know if saving was enough to "reset" it, but I'm reporting anyway. No errors in the logs, but the MQTT message was not published, so I had an easy path to check the rule. I have others like these, but not easy to test. @toggledbits maybe some stuck status data? (I restarted a couple of times after the last update). Thanks.
Multi-System Reactor
Temperature control with TRVs
CatmanV2C
Morning lovely people. Having just had some new rads put in, I dumped the old TRVs for snacky enw Zigbee ones, which work great. Currently my gas boiler has a Horstman Z-wave relay bound to a remote thermostat so only comes on depending on when the thermostat puts out a call for heat Has anyone else got all their rads on TRVs and if so, how are you managing boiler control? I'm thinking about using a Reaction that effectively says 'If any TRV is 'on', turn the boiler on by raising the setpoint on the thermostat' and vice versa. Currently this isn't great as we have two rads (one in the kitchen (which has underfloor heating) and in the hall, (where the remote thermostat is) which don't have TRVs. If I set the thermostat to 25 (say) when a rad calls for heat, those two rooms get roasting no matter what else is going on. So my thoughts are: Add TRVs to these two rads and all will be well. Is this a sensible approach, or is there a better way of doing it? Thanks, as ever! C
General Discussion
Upcoming Storage Change -- Got Back-ups?
toggledbitsT
TL;DR: Format of data in storage directory will soon change. Make sure you are backing up the contents of that directory in its entirety, and you preserve your backups for an extended period, particularly the backup you take right before upgrading to the build containing this change (date of that is still to be determined, but soon). The old data format will remain readable (so you'll be able to read your pre-change backups) for the foreseeable future. In support of a number of other changes in the works, I have found it necessary to change the storage format for Reactor objects in storage at the physical level. Until now, plain, standard JSON has been used to store the data (everything under the storage directory). This has served well, but has a few limitations, including no real support for native JavaScript objects like Date, Map, Set, and others. It also is unable to store data that contains "loops" — objects that reference themselves in some way. I'm not sure exactly when, but in the not-too-distant future I will publish a build using the new data format. It will automatically convert existing JSON data to the new format. For the moment, it will save data in both the new format and the old JSON format, preferring the former when loading data from storage. I have been running my own home with this new format for several months, and have no issues with data loss or corruption. A few other things to know: If you are not already backing up your storage directory, you should be. At a minimum, back this directory up every time you make big changes to your Rules, Reactions, etc. Your existing JSON-format backups will continue to be readable for the long-term (years). The code that loads data from these files looks for the new file format first (which will have a .dval suffix), and if not found, will happily read (and convert) a same-basenamed .json file (i.e. it looks for ruleid.dval first, and if it doesn't find it, it tries to load ruleid.json). I'll publish detailed instructions for restoring from old backups when the build is posted (it's easy). The new .dval files are not directly human-readable or editable as easily as the old .json files. A new utility will be provided in the tools directory to convert .dval data to .json format, which you can then read or edit if you find that necessary. However, that may not work for all future data, as my intent is to make more native JavaScript objects directly storable, and many of those objects cannot be stored in JSON. You may need to modify your backup tools/scripts to pick up the new files: if you explicitly name .json files (rather than just specifying the entire storage directory) in your backup configuration, you will need to add .dval files to get a complete, accurate backup. I don't think this will be an issue for any of you; I imagine that you're all just backing up the entire contents of storage regardless of format/name, that is the safest (and IMO most correct) way to go (if that's not what you're doing, consider changing your approach). The current code stores the data in both the .dval form and the .json form to hedge against any real-world problems I don't encounter in my own use. Some future build will drop this redundancy (i.e. save only to .dval form). However, the read code for the .json form will remain in any case. This applies only to persistent storage that Reactor creates and controls under the storage tree. All other JSON data files (e.g. device data for Controllers) are unaffected by this change and will remain in that form. YAML files are also unaffected by this change. This thread is open for any questions or concerns.
Multi-System Reactor
Next Release?
CatmanV2C
Morning. Do we have a roadmap for the next release, at all? I only ask as there's a breaking HA change and I have many packages now out of date. Cheers! C
Multi-System Reactor
Controller Z-Wave JS UI: "Location" attribute not visible in Reactor entities
N
Hi, I'm on Docker/NAs (latest-26011-c621bbc7) with Zwave js ui (last version). I have set the 'Location' for each device in the Z-Wave JS UI dashboard, I cannot find this information among the Entity Attributes in the Reactor. I tried and the result is an empty array []. It seems the 'Location' metadata from Z-Wave JS is not being mapped to a standard attribute in Reactor. Location is equale to Rooms for me. When comparing this to the Vera or Ezlo Controller, Reactor automatically creates Room Icons also in the Reactor Dashboard and places the various devices under those room categories. This is a very convenient way to keep the dashboard organized and quickly find lights to turn off with a click (especially when something isn't switched off as expected for me:) ). Is there a way to map the Z-Wave JS UI 'Location' attribute and a dashboard organization, just like it does with Vera/Ezlo? Thanks in advance for all the great tips you've shared
Multi-System Reactor
Do you Matter?
akbooerA
Is anyone using the Matter protocol to connect devices?
General Discussion
Variables not updating properly
tunnusT
Topic thumbnail image
Multi-System Reactor
[Solved] Loading Screen Safari
S
Topic thumbnail image
Multi-System Reactor
VEC Virtual Switch Auto Off
S
I use Virtual Entity Controller virtual switches which I turn on via webhooks from other applications. Once a switch triggers and turns on, I can then activate associated rules. I would like each virtual switch to automatically turn off after a configurable time (e.g., 5 seconds, 10 seconds). Is there a better way to achieve this auto-off behavior instead of creating a separate rule for each switch that uses the 'Condition must be sustained for' option to turn it off? With a large number of these switches (and the associated turn-off rules), I'm checking to see if there is a simpler approach.If not, could this be a feature request to add an auto-off timer directly to the virtual switches. Thanks Reactor (Multi-hub) latest-26011-c621bbc7 VirtualEntityController v25356 Synology Docker
Multi-System Reactor
Changes operator does not always detect change
tunnusT
I've had similar problems before, but now this issue has resurfaced. Using build 26011 on Docker. As I copied one old rule as a "template" for a similar new rule, where I have multiple conditions using changes operator (from any to any, and with delay reset of 900), these conditions do not detect change in attributes. Even if I manually reset the rule, reset delay timers do not restart. If I do a new rule from scratch, and do not copy/import anything old, the same conditions work properly. Also, if I modify copied rule's conditions (put a random number to "from" & "to" fields), then save, and after that remove those modifications, rule begins to function normally. Just editing e.g. delay reset value does not do any good in this context. @toggledbits, I can DM logs & related rule files to you, if you just send me instructions.
Multi-System Reactor
Dynamic MQTT topics and parameters
M
Topic thumbnail image
Multi-System Reactor
Condition for trend
T
Topic thumbnail image
Multi-System Reactor
Struggling to setup my first Tasmota device and MQTT
cw-kidC
Topic thumbnail image
Multi-System Reactor
Raspberry Pi 4 dual RAM variant introduced to mitigate RAM price increases
toggledbitsT
Article here that may be of interest to some: https://www.cnx-software.com/2026/02/05/raspberry-pi-4-dual-ram-variant-introduced-to-mitigate-ram-price-increases-and-supply-challenges/
SBC
Existing Rule stopped working HTTP command fetching IP address from website
cw-kidC
Topic thumbnail image
Multi-System Reactor
Set reaction triggering wrong z-wave device
T
Topic thumbnail image
Multi-System Reactor
Can you run MSR on Home Assistant OS ?
cw-kidC
Looking at using Home Assistant for the first time, either on a Home Assistant Green, their own hardware or buying a cheap second hand mini PC. Sounds like Home Assistant OS is linux based using Docker for HA etc. Would I also be able to install things like MSR as well on their OS ? On the same box? Thanks.
Multi-System Reactor
RPi Alternative: Orange Pi 4 LTS (3GB RAM/16GB eMMC)
toggledbitsT
The last of four boards I'm trying in this batch is the Orange Pi 4 LTS. I purchased a 3GB RAM + 16GB eMMC model from Amazon for $83, making it the most costly of the four boards tried, but still well under my US$100 limit. This board is powered by a Rockchip RK3399-T processor, ARM-compatible with dual Cortex-A72 cores and quad Cortex-A53 cores at 1.6Ghz (1.8Ghz for the 4GB model); compare this to the RPi 3B+ with four Cortex-A53 and the RPi 4B with four Cortex-A72, this board is a hybrid that I would expect to stand in the performance middle between the two RPi models. It's available in 3GB and 4GB DDR4 RAM configurations, with and without 16GB eMMC storage. It has a MicroSDHC slot, gigabit Ethernet, WiFi and BT, two USB 2.0 type A ports, one USB 3.0 type C port, a mini PCIe ribbon-cable connector (requires add-on board for standard connector), two each RPi-compatible camera and LCD ports, HDMI type A, and can be powered (5VDC/3A) via USB-C or DC type C (3.8mm OD/1.1mm ID) jack (center-positive), an odd and perhaps unwelcome departure from the more common type A (5.5mm/2.1mm). A serial port for console/debug can be connected by using a (not included) USB-TTL adapter (3.3V) via pin headers like the Orange Pi Zero 2. The included dual-band antenna connects via U.FL connector to the board, so it's easy substituting for another if you prefer. The manufacturer recommends use of a heat sink (which was included in the box). A metal cooling case is also offered by the manufacturer (a bundle with the metal case and a power supply is sold on Amazon for $90 as of this writing). The Orange Pi 4 LTS is somewhat longer than the RPi 4B, and although the boards are the same width, the mounting hole placement is different both in length and (oddly) width. Between this and the differences in connector locations, neither board is a drop-in replacecment for the other and their respective cases are not interchangeable. The 26-pin header is a subset of the RPi 4B's 40-pin header, so some HATs for the RPi may work (although the mounting hole differences will make securing them "interesting"), and some HATs will surely not. Models with eMMC storage have an OS installed and boot immediately with SSH daemon running and ready for login. Mine was running Debian Bullseye, which would probably be fine for most users. It had clearly been on there a while, because it needed a lot of updates, but it's a current distro, so you're running out of the box with something that will last. A different OS can be installed by downloading an image (once again I chose Ubuntu Jammy) and writing it to a MicroSD card, then booting the system from the SD card. You can either leave the system in that state (running the OS from the SD card), or copy the OS from the SD card to the eMMC. The latter is done by a script; documentation for the process is best described in the downloadable PDF User Manual. This took about 10 minutes and went smoothly, and I was able to boot the system without the SD card after the process completed. I have lingering questions around the value of the eMMC storage. It's definitely faster than using MicroSD or USB-based storage (I got 311MB/s average on a 4GB write, compared to MicroSD performance around 15MB/s), but it would take a long-term test of this product to determine if the on-board eMMC option has the stamina to take the write counts typical of Linux systems, and if its wear-leveling and error correction are sufficient to assure a long, error-free life. Given the high premium apparently being paid for including eMMC on the board, it should be fast and durable, but only time and experience (perhaps painful) would tell the latter. A careful configuration with other Flash-friendly filesystems could be used to reduce wear, but this is an advanced configuration/cookbook topic and beyond the scope of this writing. This question is also not unique to eMMC — MicroSD cards are also known to fail with high write cycles, so the use of a "high endurance" product is recommended for any and all systems using MicroSD as primary storage. The board has Mini PCIe capability, and that may be a storage alternative, but read on... Also bear in mind that the eMMC storage is fixed-size forever; it cannot be expanded, and 16GB can run out pretty quickly these days. Users of MicroSD cards for primary storage can upgrade to bigger cards, but when users of eMMC primary storage outgrow it, the only choice is to add a MicroSD card or other "external" storage to the system, move part of the filesystem to it, and then manage both storage devices and deal with the limitations and risks of both. As I mentioned with the Orange Pi Zero 2, if you are going to use this board as a home automation controller/gateway or similar role, it should (IMO) have a battery-backed real time clock (RTC), and Orange Pi offers an add-on module that connects directly to the 26-pin header on the board. An available expansion board provides a standard Mini PCIe interface and SIM card slot (hmm...), but it connects to the main board via a short ribbon cable, and its mounting holes have no complement on the main board, so it seems like it would be a fragile dangly thing that's a nuisance to deal with. I want to like this board more, and it's very capable, but I'm concerned about value. The limited options for eMMC (16GB or none), the question mark of the eMMC's longevity vs cost, the strange DC power connector choice, the lack of 40-pin GPIO on a full-size (plus) board, the inconsistent hole placement, and the fragile Mini PCIe arrangement, are all "cons" that devalue this board in my view. The price point is clearly driven by the additional capabilities of the board (camera support, ports, six core CPU, extra RAM, on-board eMMC storage), but unfortunately, a great many of these features may not be useful for home automation, and therefore potentially a waste of money. In terms of overall value, I still believe the Libre "Le Potato" seems a better choice to me, and the Orange Pi Zero 2 (very) a close second, but I'll admit I'm focused on a particular application and your needs may be better suited to what this board offers than mine. Passmark Results: OrangePi 4 LTS Cortex-A72 (aarch64) 6 cores @ 1200 MHz | 2.9 GiB RAM Number of Processes: 6 | Test Iterations: 1 | Test Duration: Medium -------------------------------------------------------------------------- CPU Mark: 583 Integer Math 12037 Million Operations/s Floating Point Math 2542 Million Operations/s Prime Numbers 4.5 Million Primes/s Sorting 3141 Thousand Strings/s Encryption 153 MB/s Compression 4049 KB/s CPU Single Threaded 154 Million Operations/s Physics 80.5 Frames/s Extended Instructions (NEON) 244 Million Matrices/s Memory Mark: 498 Database Operations 551 Thousand Operations/s Memory Read Cached 2524 MB/s Memory Read Uncached 2602 MB/s Memory Write 3182 MB/s Available RAM 1947 Megabytes Memory Latency 119 Nanoseconds Memory Threaded 6243 MB/s --------------- eMMC storage write 311MB/s average for 4GB; MicroSD (Samsung 32GB class 10) storage write 15MB/s.
SBC
About
Posts
80
Topics
6
Shares
0
Groups
0
Followers
0
Following
0

Posts

Recent Best Controversial

  • Switched from RaZberry to UZB
    K kfxo

    Night and day difference for me. I think I was getting a lot of interference in my media closet. Devices were very slow to respond and sometimes not at all. Switched to UZB and used a USB extender to place it a good 5 ft from the location of my pi. Now things are fast and reliable.

    Z-Wave.me

  • Moving to Docker
    K kfxo

    @akbooer
    I have been messing with this today. I do not currently run openluup through docker so this may not even be the best way to do this but it is what I did to get it up and running and with the ability to easily see and manipulate all openluup files within "File Station" on the synology.

    I created three folders on my synology:
    /docker/openLuup/cmh-ludl
    /docker/openLuup/logs
    /docker/openLuup/backups

    Then I created three volumes with a bind to the created folders
    'openluup-env' bound to '/volume1/docker/openLuup/cmh-ludl'
    'openluup-logs' bound to '/volume1/docker/openLuup/logs'
    'openluup-backups' bound to '/volume1/docker/openLuup/backup'

    I used portianer but you can ssh into your synology and use the command line to create these volumes with the binds, see this

    Then I created the container using portainer making sure to set the correct ports and volume mappings, which can also be done in the command line with

    docker run -d \
           -v openluup-env:/etc/cmh-ludl/ \
           -v openluup-logs:/etc/cmh-ludl/logs/ \
           -v openluup-backups:/etc/cmh-ludl/backup/ \
           -p 3480:3480
           vwout/openluup:alpine
    

    Hope this helps.

    Edit: The binds are not necessary, I only did it to make it easy to access the files. Without the bindings, the volumes are somewhat hidden on synology that is not easily accessible for example at '/volume1/@docker/volumes/openluup-env/_data'

    Docker

  • Delete all device in Room 101
    K kfxo

    @akbooer said in Delete all device in Room 101:

    Yes, absolutely (although I kind of wonder how you reached that figure...!)

    The openLuup plugin has an action EmptyRoom101 with the parameter named AreYouSure which requires the value yes (to save nasty accidents.)

    Thanks. I see it. They are all old verabridge devices ( and some z-way devices that I had to repair) that are no longer needed as I am fully cloned to z-way and mostly vera free 😀 (still have two zigbee door sensors on vera).

    openLuup

  • Change Parameter of Z-wave device through Z-way API
    K kfxo

    Parameters of devices can be set through the api using this URL

    YOURIP:8083/ZWaveAPI/Run/devices[DEVICE#].instances[0].Configuration.Set(PARAMETER,PARAMETER_VALUE,size=PARAMETER_SIZE)

    Replace:
    YOURIP with the IP of Z-way for example 192.168.1.2.
    DEVICE# with the Z-way device # of the devices parameter you want to change
    Parameter with the parameter # you want to change
    VALUE with the Parameter value
    PARAMETER_SIZE with the size of the parameter (should be 1, 2, or 4)

    An example to change device 51's parameter 3 to a value of 1 with a size of 1:

    192.168.1.2:8083/ZWaveAPI/Run/devices[51].instances[0].Configuration.Set(3,1,size=1)

    To run it in Luup code

    local status, result = luup.inet.wget("192.168.1.2:8083/ZWaveAPI/Run/devices[51].instances[0].Configuration.Set(3,1,size=1)", 5)
    
    Code/Snippet library

  • MSR in Alpine Docker
    K kfxo

    @toggledbits said in MSR in Alpine Docker:

    OK. Let's see how this does in your hands. I've installed and uninstalled 3-4 times and it seems OK. In the bug tracker, go to #58, in the notes you'll find a download link and draft installation instructions. You can use the "monitor" function to follow that PR (emails you when things are posted--might get chatty with a lot of people in there, though). Please use that PR for reporting install-related issues.

    This loads up nicely. Running unconfigured right now. I will transfer over my configs later and test it out.

    Multi-System Reactor

  • Multi-System Reactor Developer Preview AVAILABLE
    K kfxo

    Another good release. Confirming that 0000078 and 0000077 are tested and working on my system.

    Multi-System Reactor

  • Delete all device in Room 101
    K kfxo

    @rafale77 said in Delete all device in Room 101:

    Congrats on the move! Please report back on positive or negative effects.

    Will do. Still working through things and figuring stuff out. So far, the experience has been mostly positive with a few minor hiccups. I also have some scripts I wrote that I plan to share that helped ease my transition.

    openLuup

  • MQTT – setup and use
    K kfxo

    Which synology NAS are you looking at? I have a DS920+ and run MQTT in a docker container. Works great and easy to set up. Some of the lower end ones may not support docker.

    General Discussion

  • Almost there!
    K kfxo

    Spinning up a dedicated VM on my synology right now in anticipation of the first preview. Can't wait!

    Multi-System Reactor

  • Imperihome - missing devices
    K kfxo

    @perh said in Imperihome - missing devices:

    While i wait for a replacement app for my local UI devices, i want to use imperihome as long as I can.. But i'm missing a lot of devices!

    All Z-Way bridge devices, all security/smoke and motion sensors (local RFXtrx child devices)..

    Found the "include vera bridge" in imperihome.lua, what else could cause this?

    I had the same issue. Check that the attribute "disabled" is not set to '1' for the missing devices. See this thread

    openLuup

  • Moving to Docker
    K kfxo

    @akbooer said in Moving to Docker:

    • but I can't access it at all or work out where the openLuup files go.

    You are using the synology docker package to create and deploy your container, correct? At minimum, to get the container accessible, change the port settings to 3480(local):3480(container). Then you should be able access it at http://YourSynologyIP:3480/

    Docker

  • MQTT Plugin
    K kfxo

    @rafale77 It does allow you to subscribe.

    You can subscribe to a topic by creating a child device :

    Add a new device and choose a type (e.g. "D_BinaryLight1.xml" or "D_TemperatureSensor1.xml").
    Reload LUUP engine.
    Change the attribut "id_parent" with the id of the MQTT plugin device.
    Reload LUUP engine and refresh your browser.
    You should see variables "mqttTarget" and "mqttTopic" in your newly created device.
    Set the topic you want to subcribe to and the target (format: service,variable=(formula in LUA)).
    Reload LUUP engine.
    If the payload of the received message is in JSON, the plugin will try to decode it and put it in the variable "payload" in the context of the LUA formula.

    Plugins

  • Multi-System Reactor Developer Preview AVAILABLE
    K kfxo

    @therealdb said in Multi-System Reactor Developer Preview AVAILABLE:

    Can't wait for guidance on apdaters/plugins to contribute with Shelly and MQTT 🙂

    MQTT will be huge.

    Multi-System Reactor

  • Moving to Docker
    K kfxo

    @akbooer said in Moving to Docker:

    I understand that to make any changes last across container/NAS restarts, I need to make the volumes external to the container, as per the above yaml. So this is my next step.

    Any further insights welcomed. Perhaps Portainer is that next step?

    You cannot create named volumes through the synology GUI. You will need to use portainer or you can ssh into your synology and run the manual commands as outlined by vwout/openluup

    You can also do this manually. Start by creating docker volumes:

    docker volume create openluup-env
    docker volume create openluup-logs
    docker volume create openluup-backups

    Create an openLuup container, e.g. based on Alpine linux and mount the created (still empty) volumes:

    docker run -d
    -v openluup-env:/etc/cmh-ludl/
    -v openluup-logs:/etc/cmh-ludl/logs/
    -v openluup-backups:/etc/cmh-ludl/backup/
    -p 3480:3480
    vwout/openluup:alpine

    Docker

  • MQTT Plugin
    K kfxo

    @rafale77 Have you seen this mqtt plugin? i have been using it to subscribe to topics for some time. Maybe it has some hints as to your issue.

    Plugins

  • Sunset with offset didn't run
    K kfxo

    @cw-kid said in Sunset with offset didn't run:

    Also I have seen this saving problem on more than just one rule.

    I've seen in on a few rules when either adding items like additional triggers or removing items.

    Then you cannot click either of the two save buttons.

    Only the red exit w/o saving button works.

    I have been able to possibly reproduce your saving issue. I have noticed with rules that have a Date/Time After Trigger cannot be modified and saved.

    Multi-System Reactor

  • Moving to Docker
    K kfxo

    I think I had this same issue. If you copy the files in cmh-ludl from an existing openluup install into ' /OpenLuup/openluup-env' it should start right up.

    Docker

  • MSR in Alpine Docker
    K kfxo

    @kfxo said in MSR in Alpine Docker:

    @toggledbits said in MSR in Alpine Docker:

    OK. Let's see how this does in your hands. I've installed and uninstalled 3-4 times and it seems OK. In the bug tracker, go to #58, in the notes you'll find a download link and draft installation instructions. You can use the "monitor" function to follow that PR (emails you when things are posted--might get chatty with a lot of people in there, though). Please use that PR for reporting install-related issues.

    This loads up nicely. Running unconfigured right now. I will transfer over my configs later and test it out.

    Just an update, I copied over config and storage directories to the mounted docker volume and Reactor would not start until I also created a 'logs' directory in the mounted docker volume. All looked well after that but going to continue to run it on my Debian VM for now.

    Multi-System Reactor

  • Moving to Docker
    K kfxo

    There is a post from me above in this thread (sorry don't know how to link specific post) that explains how I got it to work. Have you tried that? I think the issue is synology gui does not support the correct type of volumes and you have to ssh into synology and run the correct docker command to set it up.

    Docker

  • Timers in my log
    K kfxo

    That actually makes perfect sense and upon further inspection I see that the timers I was noticing in the logs are with respect to one rule that I had recently turned on that resets often.

    Multi-System Reactor
  • Login

  • Don't have an account? Register

  • Login or register to search.
  • First post
    Last post
0
  • Categories
  • Recent
  • Tags
  • Popular
  • Unsolved