• 0 Posts
  • 6 Comments
Joined 2 years ago
cake
Cake day: December 20th, 2023

help-circle
  • I didn’t get one, strangely - here’s the article:

    Denmark’s KFC restaurants shut down amid food safety revelations Michael Barrett Published: 25 Jun, 2025 CET. Updated: Wed 25 Jun 2025 10:21 CET

    Denmark’s KFC restaurants shut down amid food safety revelations Illustration photo. KFC is to close its restaurants in Denmark until a new franchise operator is found following reports of poor food safety. Photo by Aleks Dorohovich on Unsplash

    The 11 branches of fast food chain KFC in Denmark are to be shut down until further notice while the company looks for a new franchise operator.

    Each of the 11 Danish branches of American fast food chain KFC are to close on a temporary basis after broadcaster DR exposed bad food hygiene practices at the restaurants.

    The company’s West European head office told DR it was shutting shop in Denmark until a new company is found to take over the franchise. The current franchise owner is Isken ApS, which will not continue.

    That comes after DR’s Kontant programme spoke with former employees who described how expiry dates on chicken used in the restaurants were extended.

    If thawed chicken wasn’t used by its expiry date, new labels were printed and placed on the packaging, the former workers said.

    The company reportedly told DR on June 10th that this was a breach of the terms and obligations set out in its franchise agreements.

    KFC in Denmark has restaurants in Rødovre, Greve, Tilst, Horsens, Vejle, Herning, two in Odense and three in Copenhagen.

    The restaurants also fared poorly in recent inspections by food hygiene authorities.

    The Danish Veterinary and Food Administration’s inspection unit visited each of the 11 KFC restaurants across the country in early June, with every restaurant given either a “neutral” or an “unhappy” smiley rating on the agency’s scale for hygiene standards.

    None of the KFCs in Denmark received the top rating, which is a “happy” smiley.

    In total, the authority issued four unhappy smileys and seven neutral ones following the June 2nd inspections.

    The “smiley” rating system has been used by the food authority since 2001 to help consumers gauge hygiene standards at cafés, shops and restaurants.

    An inspection report from KFC Odense noted signs of mould-like growth, dust accumulation and cobwebs.

    “The fridge used for storing chicken was unclean, with marinade or food residues on surfaces and trays,” the report stated according to DR.

    Inspectors at the Amager branch in Copenhagen meanwhile found bags of chicken placed next to the dishwashing area, with temperatures variously measured at 13.1°C, 13.7°C and 14.9°C. The ambient temperature was 24.2°C.

    Staff told inspectors that the meat would be discarded immediately, according to the report.


  • I’ve been running three of these for about the same length of time - two things surprised me, but both are documented in their manual. First, the working temperature is -9.9℃-60℃/14℉-140℉, so if you plan to use one in an environment colder than ~10℃, the readout will flatline. Second, they use a CR2450 battery, which is a little more difficult to find where I live than a CR2032.

    Neither of these are criticisms, just things I wish I had noticed sooner.


  • Edit: Once you “grab” your input device with python-evdev (dev.grab()), the input will be absorbed until it is un-grabed (dev.ungrab()). If you grab your only keyboard input, you’ll be stuck and will need a secondary keyboard to get unstuck.

    I have a bad habit of speculating too much, I’m gonna try to stick to just what I did in case I’m remembering some of the why details incorrectly. I’ll use the details from my device, anywhere you see “Azeron LTD Azeron Keypad”, “16d0”, or “1103”, you need to replace the values with your device-

    Start by finding the info for the input device you want to monitor:

    cat /proc/bus/input/devices | more
    

    This should result in a list of input devices with various details, I used the ‘Name’ to identify mine:

    N: Name="Azeron LTD Azeron Keypad"
    

    When you have found the device, save the vendor ID and product ID for the next step:

    I: Bus=0003 Vendor=16d0 Product=1103 Version=0111
    N: Name="Azeron LTD Azeron Keypad"
    

    Add a udev rule so that you can read the input from the device, and another for python-evdev to create a virtual device. I use link_priority 71 (as seen in the file name). The rule I’m using to let the virtual device be created could be better - this is something you might want to research more for a permanent solution, but this rule can be removed later if you just wanted to test with it:

    sudo nano /etc/udev/rules.d/71-azeron-uaccess.rules
    

    Write the file contents:

    #Access to read from "Azeron LTD Azeron Keypad"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="1103", TAG+="uaccess"
    
    #Access for python-evdev to create a new device
    KERNEL=="uinput", SUBSYSTEM=="misc", OPTIONS+="static_node=uinput", TAG+="uaccess", MODE="0660"
    

    Restart udev:

    sudo udevadm control --reload-rules && sudo udevadm trigger
    

    At this point, you should have access to the device from python-evdev and also be able to create a virtual device with python-evdev. I don’t know if it will help, but I figured I can add a bit of my code here:

    import evdev, subprocess, re
    from evdev import UInput, InputDevice, ecodes
    from select import select
    
    virtual_device_name = 'python-mouse-device'
    input_mouse = '/dev/input/'
    input_keyboard = '/dev/input/'
    
    # These Regex's may need to be updated per-device. These match 
    # my Azeron Cyro Mouse and Key Inputs.
    input_keyboard_regex = "^.*Azeron_LTD_Azeron_Keypad_2053388B5942.*event-kbd.*"
    input_mouse_regex = "^.*Azeron_LTD_Azeron_Keypad_2053388B5942.*event-mouse.*"
    
    # Get the path to the input devices. These are dynamic, and can change on system reboot.
    devices_by_id = subprocess.run(["ls", "-l", "/dev/input/by-id"], encoding='utf-8', stdout=subprocess.PIPE)
    devices_by_id = devices_by_id.stdout.split('\n')
    
    for device_id in devices_by_id:
        device_match = re.search(input_mouse_regex, device_id)
        if device_match:
            input_mouse = input_mouse + re.search("event[0-9]{1,}", device_match.group()).group()
            
        device_match = re.search(input_keyboard_regex, device_id)
        if device_match:
            input_keyboard = input_keyboard + re.search("event[0-9]{1,}", device_match.group()).group()
    
    if input_mouse == '/dev/input/' or not input_mouse:
        sys.exit("Mouse not found")
    
    if input_keyboard == '/dev/input/' or not input_keyboard:
        sys.exit("Keyboard not found")
    
    #Create the virtual mouse
    ui = UInput.from_device(InputDevice(input_mouse), name=virtual_device_name)
    
    try:
    	#Define the devices
    	devices = map(InputDevice, (input_keyboard, input_mouse))
    	devices = {dev.fd: dev for dev in devices}
    	#for dev in devices.values(): print(dev)
    	
    	#Grab the devices to block their native input
    	for dev in devices.values(): dev.grab()
    
    	#Read and handle events from the devices and translate it to the virtual device
    	r, w, x = select(devices, [], [])
    	for fd in r:
    		for event in devices[fd].read():
    			if event.type == ecodes.EV_MSC and event.code == 4 and event.value == 458767:
    				#remap or add a script to perform
    			#Add more if / elif as needed for different keys or key combinations
    
    			#If you didn't remap the key, pass the input through as normal
    			ui.write(event.type, event.code, event.value)
    finally:
    	for dev in devices.values(): dev.ungrab()
    

    The code above I run as a service, but my explanation is getting a bit long-winded already, so if any of this ends up being helpful, and you actually do want to run it as a background service, if you need help doing that let me know!