Réparation d’un lave linge Laden FL1281 (Whirlpool)

J’ai décidé de rédigé cet article en français, une version anglaise devrait suivre ..

Il y a peu, notre lave linge Laden (FL1281) est tombé en panne. Symptômes : Il ne s’allume plus du tout, aucun voyant de la facade ne s’éclaire, et aucun bruit .. rien. Il vient tout juste d’avoir 3 ans. Il s’avère (je vais le découvrir par la suite) que c’est une panne connue et visiblement très courante.

Vu le prix de la bête, et son âge, je décide de l’ouvrir en me disant que cela ne doit pas être bien grave, un fusible, un fil coupé ? Il n’y a donc pas de fusible, étrange, en même temps la norme NF C 15-100 (bâtiment) dit que l’on doit avoir un fusible séparé pour le lave linge donc .. why not. Le 220v est bien présent jusqu’au bornier du panneau de commande.

Panneau frontal Whirlpool FL1281

En démontant le panneau on constate plusieurs choses : La carte électronique porte une référence spécifique Whirlpool; rien ne semble avoir brulé; l’arrivée du 220v est raccordé directement sur le sélecteur principal qui sert de bouton ON/OFF. Cela évite d’avoir une alimentation pour gérer cela, mais nécessite un sélecteur assez sécurisé (ca me choque un peu, et le sélecteur coute du coup, une blinde).

Après quelques tests de continuité, tout semble Ok, le sélecteur fonctionne, il faut donc suivre les pistes, à la sortie du sélecteur on trouve une grosse résistance de 3w nommée R020 (la bien aimée). Elle est HS, elle a donc fait office de fusible.

R020 + LNK304PN

Cette résistance sert en fait à abaisser la tension 220v (et faire fusible au besoin), avant d’attaquer un régulateur à découpage tout intégré 220v AC =>12v DC : LNK304PN. Il y a très peu de régulateurs permettant de faire cela sur le marché avec si peu de composants externes. On notera que Whirlpool dans son extrème bienveillance a quand même pris la peine d’ajouter un tranformateur d’isolement en sortie du LNK304PN. Après un test rapide, je m’aperçois bien entendu que le LNK est HS. (court-circuit entre la patte D entrée et les pattes S)

Schéma d’utilisation typique d’un LNK304PN (datasheet)

Je commande donc les composants suivants chez RadioSpares (les seuls à avoir des LNK304PN en stock). La résistance, la self (par sureté), le régulateur.

  • Résistance oxyde métallique 33R 3W (code RS : 2142550)
  • LNK304PN, 12V dc, PDIP (code RS : 5254151
  • Inductance traversante Epcos, 470uH, 280mA (code RS : 1911169)

Bilan 10.86 € livraison comprise pour 5 jeux complets. Deux jours plus tard, je change le tout, je remonte, ça repart! Banco, Madame est contente, et nous avons économiser 230€. En effet, après recherche, la carte électronique se trouve en SAV pour 145€, il faut à cela rajouter 50€ de frais de programmation. La carte est utilisée sur pleins de modèles de lave ligne Whirlpool, il faut donc programmé une petite EEPROM en fonction du modèle de la machine (Whirlpool, Laden ..) On ajoute à cela les 35€ de main d’oeuvre, et le compte est bon.

Mais pourquoi ? Je me suis tout de suite demandé pourquoi avoir utilisé ce régulateur étrange qui semble être fragile. En fait, en cherchant sur Google, on se rend compte qu’il est utilisé sur quasiment tous les modèles de lave-linge, sèche-linge et lave-vaisselle récents de la marque et que visiblement je ne suis pas le seul à avoir des soucis : https://www.google.fr/search?q=whirlpool+R020&tbm=isch !!

Ce composant a deux avantages majeurs. Il coute quasiment rien, moins de 1€ et remplace un transformateur classique coutant au moins 3 fois plus (et aussi bcp + gros). La référence est stable; il existe des tonnes de régulateurs chinois faisant la même chose (en plus complexe), mais ils ne sont pas pérennes.

En conclusion, en voulant gagner qques euros sur le prix d’un lave-linge à 400€, Whirlpool vend des produits dont la durabilité semble très aléatoire. Une simple surtension suffit à rendre le produit “bon pour la poubelle”. Il ne faut pas se tromper à 230€ la réparation, je pense que la majorité des produits finiront à la déchèterie au bout de qques années (3 c’est pas bcp quand même).  De mon côté, j’ai sourcé le 5 jeux de composants, j’ai donc encore droit à 4 pannes ;)

Aimer la lessive ? non pas vraiment

 

Les objets déconnectés de demain

En ce début d’année 2014, la presse (et surtout notre Ministre) tourne en boucle sur la thématique des objets connectés. Pour exemple voici un extrait d’un article du Journal du Net :

D’après le cabinet Gartner, le marché des objets connectés devraient représenter d’ici 2020 en valeur 1 900 milliards de dollars et près de 30 milliards d’unités (contre 2,5 milliards d’unités en 2009). Une explosion du marché qui s’explique notamment par le développement des technologies embarquées au sein de tout ce qui nous entoure…

Tout cela semble bien merveilleux, sauf que les journalistes ont la mémoire un peu courte. L’un des premiers objets connectés vendu fut bien le Nabaztag, mais les journalistes oublient que ça vie fut relativement chaotique, et sa mort lente après seulement 5 années. En effet comme une majorité des objets connectés développés actuellement, le lapin de Violet fonctionnait exclusivement via un accès distant aux serveurs de l’entreprise. Le lapin n’était en fait qu’une coque en plastique, 2 servos moteurs, un haut-parleur et qques maigres circuits électroniques. Le totalité des traitements (vocalisation, API de contrôle …) était opéré à distance. Le jour ou l’entreprise Violet a rencontré des problèmes commerciaux et quand la direction a décidé d’abandonner le produit, le mignon petit lapin avec des oreilles motorisées c’est transformé en vulgaire bout de plastique sans aucune utilité.

Les temps ont changé, la technologie a évolué, mais même si maintenant un service hébergé s’appelle “le claoud”, les enjeux sont les mêmes. Les objets connectés sont toujours des simples micro-contrôleurs bardés de capteurs, et dont l’intelligence est ailleurs. Il y a pleins de raisons à cela :

  • Coût de l’objet lui-même : Pas besoin d’un système très évolué. Même un geek un peu débutant peut facilement développer un objet connecté, à faible cout.
  • Facilité de développement et d’évolution : Pas de mise à jour à faire chez le client, SAV plus simple.. Il suffit d’apporter de nouveaux services sur les serveurs de l’entreprise. Et surtout un développeur d’API web coute beaucoup moins cher qu’un spécialiste des systèmes embarqués.
  • La valeur de la donnée : Bien entendu avoir accès aux habitudes des clients (température de l’habitat, condition météo extérieure, fréquence des joggings..) sont autant d’informations monnayables. Si c’est gratuit, vous êtes le produit, comme dit l’autre.

Je dois avouer que si demain, on me demandait de designer un objet connecté, je ferais exactement la même chose que Violet en son temps, que Google avec le Nest, ou encore que Netatmo. Sauf que cela ne peut fonctionner qu’un temps, il est vrai que pour le Nabaztag cela n’a pas vraiment eu d’impact : Quelques milliers de clients déçus, mais le lapin n’était qu’un gadget pour geek attardé ou pour enfant. (Ok, j’avoue j’en ai un qui prend la poussière sur une étagère). Mais je suis pas sûr que les clients de Nest voient la chose d’un même oeil, le jour ou Google décidera d’arrêter le support, et que le chauffage de l’habitat cessera de fonctionner. Les plus croyants de mes lecteurs diront que cela n’arrivera pas, sauf qu’ils oublient une chose importante. La durée de vie d’un thermostat d’ambiance doit être de l’ordre d’une quinzaine d’année (on le change en même temps que la chaudière ou que le radiateur électrique..). Un cycle dans le domaine des nouvelles technologie c’est quoi 3 ans / 5 ans .. Dans 5 ans, que va-t-il se passer, est-ce que l’ensemble de ces objets connectés auront finis à la poubelle  ? Certains survivront sans aucun doute mais quid des milliers de clients déçus ?

Alors même si certains des produits vendus (développés) actuellement sont vraiment bien conçus, bien produits, il est important de regarder en détails comment le service est réellement opéré. Avez-vous accès aux sources, avez-vous une API locale ? Le système fonctionne-t-il sans connexion internet (en bluetooth par ex). Ou alors, êtes vous prêt à l’acheter en sachant que vous payer non pas pour un objet connecté, mais pour une dépendance assumée.

 

Norauto Brest : Changement des rotules de direction

Cet article est très différent des articles habituels du site, mais une fois n’est pas coutume, parlons en français et voiture.

Client depuis de nombreuses années chez Norauto, je n’avais jusqu’à présent jamais rien eu à redire. Le service est rapide, les pneus, plaquettes etc pas de soucis. Néanmoins je n’avais jamais eu affaire à eux pour d’autres travaux.

Il y a maintenant 2 ans, lors du passage au contrôle de ma voiture, une Mégane II de 2003 (et voui 10 ans déjà), le verdict est tombé : Un problème sur la direction, pas de contre-visite, mais des travaux à prévoir. Je me dirige donc chez Norauto (j’habite juste à côté). Le devis s’élève à environ 360€. Changement des rotules intérieures et extérieures, droite et gauche (rien que ça). Cela arrive souvent apparamment sur les Méganes II. Soit (à vrai dire le CT indiquait juste un problème à droite mais il était plus sage de tout changer d’après Norauto). Les travaux sont effectués, je passe à la caisse, là premier effet kiss-kool. La facture s’élève à 420€ (et des bananes). Je râle, mais je ne peux prouver ma bonne fois, je n’ai pas le devis, et pour cause, il se trouve dans la boite à gants du véhicule. Fin du premier acte.

Deux ans plus tard (cad il y a 1 mois), rebelote : Contrôle technique, et là à ma grande surprise : Monsieur il y a un problème sur la direction côté gauche. Curieux et agacé je décide de regarder par moi même. Voici le résultat :

Photo travaux Norauto

  • Les rotules sont pleines de rouille de manière identique droite et gauche. Le bras de suspension (qui à 11 ans de plus) parait neuf à côté. Cherchez l’erreur.
  • Le caoutchouc de la rotule extérieure gauche est cuit. Il est percé à des endroits, je ne préfère pas trop le toucher de peur qui ne se déchire totalement.
  • Il y a un jeu de plusieurs millimètres sur la rotule extérieure gauche.
  • Les soufflets des rotules intérieures se balladent sur l’axe. En fait, je l’apprendrais plus tard, mais Norauto n’a pas changé les soufflets car cela n’était pas inscrit sur le devis. (2 soufflets à moins de 10€, mais 180€ de main d’oeuvre pour les changer par la suite).

Je décide donc d’aller au Norauto afin d’avoir des explications sur l’état des pièces changées. Pour infos, les pièces ont moins de 20 000 Km (je roule pas des masses), et 18 mois. On me demande de repasser un autre jour en semaine afin d’examiner la voiture. RDV est pris.

La voiture est donc mise sur le pont, le mécano tombe les roues, constate le jeu sur la rotule extérieure gauche, idem sur l’intérieure droite, mais moins flagrant. Il faut changer, monsieur, je lui demande des explications, il n’en a pas à me fournir. Son collègue vient voir, fait la grise-mine sans rien dire. Retour à l’intérieur du magasin. Au bout d’un long moment, un des vendeurs se dévoue, et me tend donc un devis long comme un jour sans pain. rotule ext gauche + intérieure droite + soufflet + soufflet cardan gauche ..

Je demande encore des explications sur l’état des pièces, et les raisons qui peuvent expliquer le jeu dans la direction. La personne n’a aucun argument à me fournir, c’est une Mégane monsieur, elle a fait 155 000 Km avec la direction d’origine, mais là 20 000 c’était trop !!. Je m’emporte, j’en arrive à  demander s’ils ont réellement fait les travaux la première fois, ou c’est simplement des pièces de merde qui ont été installées. Je demande à parler au chef mécano, vu que c’est lui qui a préparé le devis, impossible, ce n’est pas son rôle. Le vendeur finit par me dire qu’effectivement 20 000Km c’est pas beaucoup, qu’il peut éventuellement faire un geste commercial sur les pièces (25€ de pièce chez Oscaro, et c’est la même marque). Je cherche à avoir une explication (que je n’aurai jamais), et annonce que je vais aller chez Renault pour avoir le cœur net. A partir de ce moment, cela a été la fin : “Allez chez Renault, je sais ce qu’ils vont dire, Norauto a monté des pièces de merde” (texto dans le texte).

En sortant, je n’ai pas résisté pour aller voir le directeur de ce centre Norauto qui était à la caisse à attendre le client (il n’y avait personne), pour lui dire que j’étais très étonné de son attitude, non pas qu’il ne veuille pas aller contre l’avis de son chef mécano, mais plutôt qu’il laisse ses vendeurs face aux clients mécontents, qu’il ne prenne pas ses responsabilités, et qu’il joue à la caissière pendant ce temps.

Direction, la concession Renault, le mécano monte la voiture sur le pont. M’annonce que la rotule extérieure gauche doit être changée, le reste ça peut attendre. Les rotules extérieures ont bien été changées (J’avais vraiment un doute, et j’étais loin d’être le seul). Ce ne sont pas des pièces d’origine. (pour les rotules intérieures le mystère reste entier, il n’y a pas de marquage). Il est étonné que l’ensemble de la direction ai été changé, et surtout de l’état de celle-ci en si peu de temps. Les soufflets sont à changer (le droit devra attendre un peu). Ils ont été fixés avec des colliers zip et non les colliers ferrailles.. Bilan des courses 170€.

Je ne sais pas trop quoi penser de tout cela, certes les pièces Norauto sont moins chères mais vu l’état après 2 ans …(pour info, j’ai regardé les mêmes pièces sur une Mégane un peu plus récente ~ 145 000Km, il n’y a pas photo, et pourtant elles n’ont jamais été  changées). D’un autre côté, je me dis que des pièces de ce type sont installés tous les jours dans les centres auto.

 

 

Backup Linux embedded system firmware (Heden, Foscam, WRT..)

This post talk about a cheap Heden clone outdoor camera but should work on most Linux embedded systems.

Here the little story : A friend ask me to repair his bricked Heden cam copy (no-name). So let’s open it, find a serial port and look what’s going on. I used the bus-pirate of course. I discovered that only the bootloader is working, the whole flash seems empty.I searched a long time, and tried severals stuffs, but I was unable to find the right firmware (in the right format) for his no-name camera.

NetOS opened camera

So my friend sent the camera back (warranty), and receive a new one. Now, he ask me to backup the flash memory, to fix the problem if this occurs in a few months again.

The main issue is : The camera has no backup web interface, no MTD dump shell binary (nor ftp, scp..), and it’s not really easy to compile the mtd tools because the system has no library installed (only a few static binary files). I’m unable to backup the firmware throught the OS. Let’s try see the bootloader.

The bootloader has no backup firmware features, but it can dump the memory content (flash included), and it has a builtin “ls” like command that display base memory segments. With the simple “d 0xAAAA”, you can dump the memory at 0xAAAA address. Fine, I decided to write a little script that walk the memory, dump the content and rebuild the binary file.

#!/usr/bin/env python2
import serial,sys,string

log_file = None

def ser_open():
    ser = serial.Serial("/dev/ttyUSB0", 115200, timeout = 0.1)
    return ser

def log(line):
    l=string.split(line,' ')
    data='%s%s%s%s' % (l[1],l[2],l[4],l[5])
    for i in range(0,32,2):
        octet = int(data[i:i+2],16)
        log_file.write('%s' % chr(octet))

def dump(ser,addr):
    s = "d -s 0x%x\n" % addr
    ser.write(s)

    l=[]
    i = 0
    while 1:
        data = ser.read()
        if not data:break
        l.append(data)
        if (data=='\r'):
            s = string.join(l,'')
            if (s[0] == '['):
                log(s)
            l=[]

d = ser_open()
log_file = open('log.raw','a')

img_start = 0x7F0E0000
img_size = 0xC3C00

for i in range(img_start,img_start+img_size+0x100,0x100):
    dump(d,i)
    print "0x%x"% i

As you can see, this code isn’t really clean and well written, but it give me a nice binary file for a given offset and size. Simply dump the memory through serial port, do a little parsing, and store the result in binary file named log.raw.

I used this to backup the camera linux.bin file, and the romfs.img. Of course you can use this to dump the whole memory too. To check if the files are Ok, you can try to g-unzip the Linux Kernel, and mount the romfs.

To check the romfs, I simply mount it with : mount -t roomfs -o loop log.raw ./log

So now, I have a backup for this no-name camera, and next time the whole memory will drop, I will try to restore it ;).

This method seems really crude (and dirty), but it work without too much trouble, and can be tweaked for a lot of systems. It should work on every Linux embedded system with an dump memory feature in the bootloader (quite every one).

Enjoy memory ;)

Howto enable hibernate on a Linux Manjaro

I run into some issues with my current Debian systems. In fact, I use Debian on a lot of computers, but most of the time the sessions are consistent, some have nautilus working some don’t .. same for automount, grub-updater, and so on.

I decided to switch my desktop computer to another distro. After about 5 years with the same Debian Sid install, I switched to Manjaro. Manjaro use the same base system as Arch Linux but seems to be more user friendly.

Anyway, the hibernate don’t work out-of-the-box. When you restart the computer, it doesn’t restore the hibernate image from the swap. You can fix that quickly. Edit /etc/mkinitcpio.conf file and add “resume” to the HOOK flag like this.

HOOKS="base udev autodetect modconf block resume filesystems keyboard fsck"

After that, you must rebuild the initcpio file :

 sudo mkinitcpio -p linux39

That’s enough, you can now test with a simple pm-hibernate.

/Enjoy Linux again.

Howto : Change Spotify font size (for 42″ TV display)

I use Spotify for my every day listening, and I decided to use it on a big screen : My 42″ LCD TV. Simply launch Spotify in a one-line .xinitrc script. It fit perfectly in full screen mode without any tweak. But of course nothing is perfect,  we have to live with a very small font on a such big screen. Spotify use a skin for the client app, so changing QT4 fonts doesn’t change anything, we have to fix the skin directly.

So, first step : search the file resources.zip (in /opt/spotify/spotify-client/Data/ on Debian). Extract the file skin.xml. In this file, search for line like this.

<font ci="FriendsListFont" color="#dddddd" shadow="#333333" size="11" />

So change all font sizes, save the file, re-pack the ressources file .. and Voila. You can fix this manually (or with a special XML editor), but the file contain 245 font definitions. I decided to fix with a Python script.

import xml.etree.ElementTree as xml

tree = xml.parse("./skin.xml")
root = tree.getroot()

for f in root.findall('font'):
	taille = f.get('size')
	if taille:
		taille = int(taille) + 4
		f.set('size',str(taille))


file = open("new_skin.xml", 'w')

xml.ElementTree(root).write(file)

Let’s try this new skin :  

This should be a easier for the big screen :)

/Enjoy music

WordPress update

Just installed the new wordpress 3.5 version. Everything seems to be fine right now. Feel free to post a comment if you see something wrong. Switching to a new theme is a pure nightmare, I hate this stuff (editing PHP file, testing, adding google adsense …) grr

That’s enough !

Change the default sound card in Spotify : Alsa + Monkey Patching

I’m a long time Spotify user right now. I decided to opt for a unlimited account due to the price. The main issue : Spotify for Linux is a closed source software, doesn’t allow the user to change the sound card and I want to use my almost finished USB DAC.

In fact, if you use Jackd (and perhaps Pulse) you can change the sound card used by Spotify, but this is overkill for my needs (mainly cause, I use Spotify on a litte old netbook and Jackd is a nightmare to configure)

After some strace dump, Alsa (libasound2) source reading, I decided to fix it by myself. Let’s go for some Monkey Patching. Monkey patching on closed source binary isn’t that easy, the hard step : find the right function to hack. Here the Alsa tutorial come to rescue (ldd of course too). So we need to modify the snd_pcm_open call.

Let’s give it a try : First we need to dynamically re-route this call to a wrapper. The easier way to do this, is to build a special library and to force Spotify to use the wrapper with an LD_PRELOAD hack. (see code below). In fact, Spotify call the snd_pcm_open with name=”default” which is the default sound card, so we can change this to “usb” for example, and fix the .asoundrc to point “usb” sound card to the right hardware card.

That’s enough, let’s code :

#define _GNU_SOURCE

#include <dlfcn.h>
#include <stdio.h>
#include <alsa/asoundlib.h>

static int (*wrap_snd_pcm_open)(snd_pcm_t **pcm, const char *name, snd_pcm_stream_t stream, int mode) = NULL;

void * wrap(void * func,char *name)
{
    char *msg;
    if (func == NULL) {
        func = dlsym(RTLD_NEXT, name);
        fprintf(stderr, "** wrapping %s =>  %p\n", name,func);
        if ((msg = dlerror()) != NULL) {
            fprintf(stderr, "** %s: dlopen failed : %s\n", name,msg);
            exit(1);
        } else {
            fprintf(stderr, "** %s: wrapping done\n",name);
        }
    }
    return func;
}

int snd_pcm_open(snd_pcm_t **pcm, const char *name, snd_pcm_stream_t stream, int mode)
{
    int temp;

    sprintf(name,"usb");

    wrap_snd_pcm_open = wrap(wrap_snd_pcm_open,"snd_pcm_open");
    temp = wrap_snd_pcm_open(pcm,name,stream,mode);
    fprintf(stderr, "** Calling snd_pcm_open for path:[%s] => fd:[%d]\n",name,temp);
    fflush(stderr);
    return temp;

}

As you can see in the code, I use a generic wrapper function because during my code session, I used this function to re-route some other functions. To build the library :

gcc -g -fPIC -shared -Wl,-soname,preload.so -ldl -o preload.so  main.c

Load the lib, with export LD_PRELOAD=./preload.so before running Spotify. Spotify (and all other software using Alsa) will use “usb” as default sound card.

Note: C reader will note that name is a const char pointer, and so we can’t change it, but even if gcc raise a big warning, the code do trick fine.

Enjoy good quality sound even w/ closed source

Cheap DIY USB Tube DAC

Due to lot of homework, I haven’t found a lot of time to have fun electronic for some times. I decided to change this by building an cheap USB DAC with tube output.

There is a bunch of USB DAC on the market right now, but most of them aren’t really top quality. As I don’t want to loose some time to build the USB part, I decided to buy a USB DAC Kit. After a little search on Ebay I found this one :

This kit sports an CS8416+CS4398 combot plus an NE5532 output buffer, but as I want it to be a little audiophile, I will drop the NE5532 in favor of an simple tube preamp.

For the tube part, I think I will go for an 12AX7 or something similar. I really think 6SN7 are better, but this tube are overkill for an preamp I think.

Update, some links for the tube output :

/Enjoy tube sound

Automatic FTP backup for servers

Today I need to find a way to do some backup on an FTP server. Of course there is a lot of way to do that, but I need something automatic that does some full (monthly) and incremental (daily) backup. I decided to use duplicity because it’s a really simple and effective software. The main issue, is that duplicity command line is a bit hard to remember for me. So why not simply write a simple python script that does the job for me.

So here, we are :

#!/usr/bin/python 
# Edit DATA and DEST
DATA='/var/www'
DEST='ftp://username:password@ftp.server/backup'

import os
import sys

def backup(b_type='incr'):
    dup_cmd ='nice -n 19 duplicity %s  --volsize 512 --no-encryption --asynchronous-upload ' % (b_type,)
    temp = '%s %s %s' % (dup_cmd,DATA,DEST)
    os.system(temp)

def info():
    dup_cmd='duplicity collection-status  %s' % (DEST)
    os.system(dup_cmd)

def list_files():
    dup_cmd='duplicity list-current-files  %s' % (DEST)
    os.system(dup_cmd)

def clean():
    dup_cmd='duplicity remove-all-but-n-full 1 --force %s' % (DEST)
    os.system(dup_cmd)

def usage():
    print "%s [-incr|-full|-list|-info|-clean]" % sys.argv[0]

if __name__=='__main__':
    if len(sys.argv) > 1:
        if sys.argv[1] == '-incr':
            backup('inc')
        elif sys.argv[1] == '-full':
            backup('full')
        elif sys.argv[1] == '-info':
            info()
        elif sys.argv[1] == '-list':
            list_files()
        elif sys.argv[1] == '-clean':
            clean()
        else:
            usage()
    else:
        usage()

Please note that I disabled the PGP encryption for this backup. Mainly because, I don’t want to deal w/ lost keys when I will need to restore the backup. But this can be done easily. I will post a complete guide if someone ask.

The next step call the script in cron.d for example with something like this : 30  3   *  *  *

Feel happy no more stress with backup ;)