Configuration automatique POP/IMAP

Quand on configure sous Outlook un compte Exchange, Office 365, Google et quelques autres fournisseurs, celà se fait tout seul, il suffit de rentrer son adresse mail et son mot de passe et un obscur mécanisme nommé AutoDiscover se mets en place et le tour est joué. Vous imaginez qu'il y a un peu de mécanique derrière cette automatisation. Que ça utilise MAPI ou EAS, votre fournisseur le fera pour vous et si vous gérez votre propre serveur Exchange on premise vous trouverez plein de documentation en ligne sur ce sujet.

Et en POP3/IMAP4 ?

C'est pareil, certains gros services de mail proposent cette automatisation (Google par exemple), par contre si vous gérez votre propre serveur de messagerie ou que vous utilisez votre nom de domaine sur les serveurs de Gandi ou OVH par exemple, il y a peu de chances que celà se fasse tout seul et il faudra que vos utilisateurs renseignent manuellement les noms de serveurs IMAP/POP/SMTP, les différents ports en SSL/TLS, etc... C’est fastidieux, d'un autre âge et c'est également pitoyable que des fournisseurs tels OVH ou Gandi laissent leurs services de mail en l'état, ils ne proposent d'ailleurs toujours pas de connexion EAS pour les mobiles.

Il ne reste donc plus qu'à faire le travail.

La première solution consiste à aller déposer un fichier /autodiscover/autodiscover.xml sur un serveur que l'on adressera dans le DNS avec un CNAME du genre autodiscover.domain.tld. Ça peut suffire dans certains cas, mais à cause d'un bugg dans Outlook on ne récupérera que le username sans le domaine. Et si le serveur l'exige il faudra alors terminer la configuration manuellement. Ce n'est pas très propre et tant qu'à automatiser autant aller au bout des choses.

La seconde solution consiste à mettre un peu de code et la façon la plus simple que j'ai trouvée, j'y ai tout de même passé 8 heures..., est de le faire en PHP. On monte un petit serveur web avec du PHP, on crée un enregistrement DNS autodiscover.domain.tld qui pointe dessus et on le configure avec un certificat valide (un Let's Encrypt par exemple). Ce point est important car sans SSL Outlook ne reconnaîtra rien. On teste que ça fonctionne et que le certificat est valide. Dans la racine on crée un fichier autodiscover.php, en gros c'est surtout un XML, la partie PHP ne servant qu'à récupérer l'adresse mail pour la transformer en LoginName. Bien sur on adapte aux besoin, POP/IMAP, etc...

<?php
//get raw POST data so we can extract the email address
$data = file_get_contents("php://input");
preg_match("/\<EMailAddress\>(.*?)\<\/EMailAddress\>/", $data, $matches);

//set Content-Type
header("Content-Type: application/xml");
?>
<?php echo '<?xml version="1.0" encoding="utf-8" ?>'; ?>

<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/responseschema/2006">
    <Response xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
        <Account>
            <AccountType>email</AccountType>
            <Action>settings</Action>
            <Protocol>
                <Type>IMAP</Type>
                <Server>mail.gandi.net</Server>
                <Port>993</Port>
                <DomainRequired>off</DomainRequired>
                <LoginName><?php echo $matches[1]; ?></LoginName>
                <SPA>off</SPA>
                <SSL>on</SSL>
                <AuthRequired>on</AuthRequired>
            </Protocol>
            <Protocol>
                <Type>SMTP</Type>
                <Server>mail.gandi.net</Server>
                <Port>465</Port>
                <DomainRequired>off</DomainRequired>
                <LoginName><?php echo $matches[1]; ?></LoginName>
                <SPA>off</SPA>
                <Encryption>TLS</Encryption>
                <AuthRequired>on</AuthRequired>
                <UsePOPAuth>off</UsePOPAuth>
                <SMTPLast>off</SMTPLast>
            </Protocol>
        </Account>
    </Response>
</Autodiscover>

Ensuite on va faire en sorte que le serveur retourne le contenu XML nécessaire à Outlook quelque soit l'URL ou la casse utilisée. Si dans le monde Windows il n'y a pas de différence entre les majuscules et les minuscules, ce n’est pas le cas sous Linux. Et Microsoft à codé en dur dans ses clients de messagerie tantôt en majuscule tantôt en minuscule, voire souvent la première lettre en majuscule, il va falloir ajuster... Pour y palier on va utiliser la fonction REWRITE et coller ça dans un fichier .htacess si on utilise un serveur Apache :

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ autodiscover.php [NC,L]

Ou le convertir (ici) et le placer dans le fichier de configuration si on utilise un serveur Nginx :

if (-e $request_filename){
	set $rule_0 1;
}
if ($request_filename ~ "-l"){
	set $rule_0 1;
}
if (-d $request_filename){
	set $rule_0 1;
}
if ($rule_0 = "1"){
#ignored: "-" thing used or unknown variable in regex/rew 
}
	rewrite ^/.*$ /autodiscover.php last;

Il ne reste plus qu'à tester sous Outlook ou Courrier (Mail) sous Windows 10.

Attention toutefois, sous Outlook 2016/2019 Microsoft a changé les règles du jeu. Le pernicieux but est certainement de pousser les clients vers Office 365, ce système s'appuie sur la fonction Simplified Account Creation introduite après le rachat de la société Acompli (Outlook mobile). Ce système gère les domaines Microsoft, ceux enregistrés sur Office 365 et quelques autres selon leur importance et de façon plus ou moins obscure. On ne trouve nulle par le moyen d'ajouter un domaine à ce service et certaines discutions qui en parlaient sur les forums Technet sont maintenant effacées. On peu donc penser à des ajouts de gré à gré pour les sociétés sous contrat avec Microsoft.

il ne faut donc pas ajouter un compte depuis Outlook mais contourner la chose en passant par l'ancien panneau de contrôle (WIN+R+Control) tant qu'il existe. C'est d'autant plus curieux que ça fonctionne très bien sous l'application Courrier de Windoiws 10, qui au passage s'est bien améliorée. Il existe toutefois un moyen simple de désactiver Simplified Account Creation via le registre ou par GPO.

Et si j'ai plusieurs domaines ?

Dans tous les cas il faudra un serveur web par fournisseur de messagerie. Par contre ayant plusieurs domaines chez Gandi je vais pouvoir tout concentrer sur un seul serveur. Pour y parvenir, deux solutions :

Avec un enregistrement SRV par domaine

Je crée un serveur web générique, par exemple avec comme adresse

autodiscover-gandi.domain-gen.tld

(SSL activé) et dans le DNS de mes domaines je crée un enregistrement SRV de type

_autodiscover._tcp 1800 IN SRV 10 10 443 autodiscover-gandi.domain-gen.tld. 

La résolution sera un peu plus longue car c’est la dernière chose que recherchera Outlook, mais ça fonctionnera.

Avec un certificat multiple sur le serveur

Dans ce cas je fais pointer tous mes domaines sur le même serveur, par contre j'ajoute tous ces domaines (autodiscover.domain1.tld, autodiscover.domain2.tld...) au certificat du serveur, ce qui du reste est très facile avec Let's Encrypt.

Et Thunderbird ?

Même si plus grand monde utilise ce client, il existe une possibilité (que je n'ai pas testé et je suis preneur de vos retours). Et cette possibilité semble plus simple car elle permet de base de gérer plusieurs domaines que l'on appellera depuis le client avec une url : 

http://autoconfig.domain.tld/mail/[email protected]

Je ne pense pas qu'il soit utile de disposer de PHP, un simple fichier XML faisant l'affaire :

/wwwroot/domains/domain.tld/public_html/autoconfig/mail/config-v1.1.xml

<clientConfig version="1.1">
 <emailProvider id="domain.tld">
   <domain>domain.tld</domain>
   <displayName>%EMAILADDRESS%</displayName>
   <incomingServer type="imap">
     <hostname>mail.domain.tld</hostname>
     <port>993</port>
     <socketType>SSL</socketType>
     <username>%EMAILADDRESS%</username>
     <authentication>password-cleartext</authentication>
   </incomingServer>
   <outgoingServer type="smtp">
     <hostname>smtp.domain.tld</hostname>
     <port>587</port>
     <socketType>STARTTLS</socketType>
     <username>%EMAILADDRESS%</username>
     <authentication>password-cleartext</authentication>
   </outgoingServer>
 </emailProvider>
</clientConfig>

Une dernière chose, pour faire tout ça j'ai utilisé aaPanel, j'en parlerais bientôt mais je vous encourage à découvrir !

Sources

Etant donné que je n'ai bien sur rien inventé, voici de la lecture...

 

Imprimantes et numérisation

On nous annonçait jadis que l’informatique conduirait au zéro papier, mais ce n'est pas le cas ! Et les imprimantes constituent toujours un problème. J'imprime peu, je déteste les jets d'encre qui se bouchent et j'ai une préférence pour les laser couleur. Bon, c’est cher, mais dans tous les cas c’est toujours cher d'imprimer quelques feuilles. Et puis il faut aussi numériser, donc depuis quelques années j'ai opté pour un multifonction.

Pour sortir un peu des sentiers battus (HP depuis la LaserJet 1 dans les années 90) je m'étais offert une Samsung C460w avec chargeur de documents (la division print de Samsung a depuis été rachetée par HP et on se demande pourquoi). J'ai toujours eu des problèmes avec cet appareil, mauvaise impression, sortie de veille impossible à la débrancher, et depuis quelques temps des bourrages récurrents dus à une pièce défectueuse, une cale en plastique de 1 cm, mais il faudrait des heures et de la patience pour la changer (voir 1 - 2 ). Donc même si la numérisation a toujours bien fonctionné, ça reste un modèle à éviter. Faute de temps je me suis résolu à la mettre à la casse (si ça intéresse quelqu'un...), après avoir longtemps hésité car je venais de changer les 4 toners.

Pour la remplacer il me fallait un modèle peu profond afin de pouvoir l'installer au même endroit. Mon choix s'est porté sur la Lexmark MC3326awde. Le coût à l'impression est élevé, mais j'imprime peu et ils offrent une garantie de 4 ans.

Coté impression rien à redire, elle est reconnue tant sous Windows que MacOS. Coté numérisation ça se complique. Si sous MacOS tout est facile et qu'il n'y a rien à télécharger, sous Windows c’est un peu différent, le pilote Twain pour l'utiliser avec NASP2 date d'un autre age et surtout il nécessite d'aller valider la numérisation sur le panneau de l'imprimante, quant à WSD déjà que ça a du mal pour imprimer, pour numériser ça ne fonctionne simplement pas (merci MS d'avoir boycotté Twain). Lexmark fournit un ersatz de logiciel (ScanBack) qui lui aussi impose d'aller valider sur l'appareil.

Heureusement il y a des alternatives qui consistent à lancer la numérisation depuis le panneau de contrôle avec des paramètre que l'on aura prédéfinis. On peut ainsi numériser vers une destination SMB ou FTP, c'est vraiment pas simple à configurer et hors de portée du grand public, ou vers une adresse mail, ce n'est pas plus simple et ça imprime chaque fois une inutile page de confirmation. Il est également possible de numériser vers un Cloud Drive (Box, Dropbox, Google Drive ou OneDrive) quand on a compris la procédure...

Mais les habitudes ont la vie dure, moi je veux juste numériser depuis NAPS2 comme je ne faisais avant. Et ça c'est juste impossible sans passer par cette étape ridicule : 

D'autant plus ridicule que sous MacOS cela se passe très bien et sans avoir rien à installer. Alors j'ai cherché et j'ai fini par trouver un logiciel commercial, VueScan, qui lui permet de faire le travail. Leur point fort est de reconnaître tous les scanners via leur pilote TWAN universel. Hélas ce pilote n'est utilisable que par leur application et si on l’appelle depuis NAPS2 il lance VueScan.

Une fois de plus on se rend compte qu'il y a des produits qui n'évoluent pas, les imprimantes multifonctions en font partie avec une partie logicielle très désuète. Par exemple cet appareil joue également le rôle de télécopieur, mais qui a encore une ligne dédiée Fax ? Pour ceux qui en ont encore besoin, une innovation aurait peut être été une compatibilité SIP ou avec des prestataires de fax. Et je passe sur l'écran tactile qui à la taille minuscule d'un téléphone du début du siècle ou il est impossible de saisir quelque chose sans se tromper, sans oublier les touches situées à coté non rétro éclairées et donc invisible dans la pénombre de mon bureau... Bref, il faudra faire avec car avec ses 20 kg. elle ne va pas rentrer dans la boite aux lettres pour un retour Amazon facile. Et je ne suis pas sur de trouver mieux chez les autres fabricants.

Autres problèmes...

Du coup j'ai essayé de faire fonctionner VueScan avec deux copieurs Ricoh 3003/3004 d'un client qui ne sont plus mis à jour et imposent du SMB1 si on veut faire du scan vers PC. Nada, bien que dans la liste ils ne sont pas reconnus, pas plus que NAPS2 ne reconnait les pilotes Twain de la marque... Encore un bel exemple d’obsolescence programmée.

Gérer ses VM Azure...

Ceci est un Notepad en évolution... Revenez...

Start / Stop

Un des intérêts d'une VM dans le cloud, c’est de n'en payer que l'usage. Pour la faire courte et pour donner suite à mon article sur les Bureaux à distance, je me suis retrouvé pour ce client avec VM qui n'était pas assez puissante. Sous Azure, c’est facile, en deux clics on change la taille de la VM, on choisit une instance avec plus de CPU, RAM, IO et bien sur le tarif augmente... Et si Azure est fonctionnellement remarquable, les tarifs sont purement stratosphériques si on les compare à une VM sur un serveur dédié chez Scaleway ou OVH (qu'il faudra bien sur géré, ce qui a aussi un coût et n’est pas faisable facilement par tout le monde). Bien sur ont peut facilement imaginer que les grand comptes obtiennent des remises tout aussi conséquents, sauf que pour une PME ça reste bien souvent inaccessible.

Vu que cette VM ne va être utilisée qu'aux heures de bureau, une façon de faire quelques économies va consister à programmer une heure de démarrage et une heure d'arrêt. Pour l’arrêt c’est facile, il suffit de configurer ça dans les paramètres de la VM. Mais allez donc savoir pourquoi il n'y a pas la même facilité pour la démarrer ? Chez Microsoft il appellent ça By Design. Il doit bien y avoir une raison puisque qu'il semblerait que ce soit à peu près le même fonctionnement chez les autres fournisseurs d'instances cloud et même chez OVH ou Scaleway. Bref, ce serait trop facile.

Il y plusieurs solution pour palier à ça !

Azure CLI

On peu bricoler quelque chose avec Azure CLI (Linux, Mac, Windows) et ainsi lancer un script qui va lancer ou stopper a VM. Pas très sexy ni trop sécurisé. 

Attention : Il ne faut pas se contenter d’arrêter la VM depuis l'O/S car si cela arrêtera bien la VM, elle continuera à être facturée, simple, mais sans intérêt. Pour qu'elle ne soit plus facturé il faut la désallouer (Deallocate) et ainsi seul le stockage continuera à être facturée.

Démarrer la VM

az vm start --name MyVM --resource-group MyVMGroup

Arrêter et désallouer

az vm stop --name MyVM --resource-group MyVMGroup
az vm deallocate --name MyVM --resource-group MyVMGroup

Il est également possible de faire ça en utilisant directement les ID des VM

az start --ids "/subscriptions/a35d316a-2a2a-48e2-8834-55481f7bbb48/resourceGroups/WIN16VM/providers/Microsoft.Compute/virtualMachines/Win16VM"
az stop --ids "/subscriptions/a35d316a-2a2a-48e2-8834-55481f7bbb48/resourceGroups/WIN16VM/providers/Microsoft.Compute/virtualMachines/Win16VM"
az deallocate --ids "/subscriptions/a35d316a-2a2a-48e2-8834-55481f7bbb48/resourceGroups/WIN16VM/providers/Microsoft.Compute/virtualMachines/Win16VM"

Azure Automation

Tout ça n'est pas très sexy ni user friendly. Une autre façon de faire va consister pour l'administrateur de programmer le démarrage de la VM et son arrêt en considérant que l'utilisateur s'en servira à heures fixes. Pour l’arrêt on va se servir de la fonction intégrée car elle est capable de base d'envoyer un mail à l’utilisateur lui proposant d'outrepasser l’arrêt programmé sans avoir à se connecter. Pratique.

Pour le démarrage par contre ça va être un peu plus compliqué. On va commencer par créer un compte Automation, simplement en cherchant dans la barre de recherche. Comme tout sur Azure, ce service est également payant, mais dans sa grande bonté Microsoft nous offre (jusqu'à quand ?) un petit forfait gratuit tous les mois qui sera amplement suffisant pour ce qu'on va faire.

Une fois dans notre compte Automation on va créer un Runbook, on lui donne un nom et on choisit un Flux de travail PowerShell (PowerShell Workflow) et on le crée. Une fois créé on va aller l'éditer

workflow Start-Ma-VM
{
# Association to the Azure subscribtion
$Conn = Get-AutomationConnection -Name AzureRunAsConnection
Add-AzureRMAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint

# Start the virtual machine
Start-AzureRMVM -ResourceGroupName "MonGroupeDeRessources" -Name "MaVM"
}

Il ne reste plus qu'à aller dans le menu Planifications et d'en ajouter une en configurant l'heure de démarrage et la récurrence, sans oublier de choisir le bon fuseau horaire. Si on veut envoyer une notification par un mail ou faire autre chose il est bien sur possible de le faire dans le script.

A ce stade ça reste toutefois limité, la VM va démarrer tous les jours, même quand personne ne travaille.

Heureusement il est également possible de créer un WebHook et ainsi démarrer la VM depuis une URL. Ici depuis PowerShell mais on peut tout à fait imaginer intégrer ça dans un portail intranet ou un simple raccourcis sur le poste de l'utilisateur... Ou mieux utiliser un planificateur évolué tenant compte des jours fériés et des week-ends, voire interagir avec un agenda Google ou Microsoft 365...

PS C:\Users\Lionel> Invoke-WebRequest -Uri https://6bc1fsdfs-aesdf4c2f-8d31dsfsdf7fsd5f.webhook.we.azure-automation.net/webhooks?token=ZHuMYFqgqgfqsqgdgB%2qsdgfqsdgjc%3d -Method POST

Alternatives

Si la lecture de la documentation n'est pas toujours très lisibles, il faut bien admettre qu'Azure est très complet. Et si cela ne vous suffit pas il existe des fournisseurs de service qui se sont spécialisés dans la planification des VM et plus globalement vous aideront à réduire les coûts du cloud, que ce soit sur Azure, AWS ou GoogleCloud. Je pense par exemple à ParkMyCloud ou MyCloudToolbox, mais il y en d'autres. Se posera alors la question de la confiance que vous accorderez à ces services.

L'accès des clients aux VM

Comme on l'a vu le plus simple consiste à utiliser le client d'accès à distance. Le protocole RDP n'étant pas franchement des plus sur. Sécuriser RDP imposerait de passer par des certificats et une passerelle complexe et coûteuse ou par une alternative non Microsoft du genre Royal TS Server. La logique impose de passer par un VPN. Azure propose bien entendu tout une panoplie de solutions de sécurité, n'ayant ni envie de passer à la caisse ni celle de me compliquer la vie pour ce type d'utilisation, je vais simplement utiliser ZeroTier. C'est plus un SDN qu'un VPN, c'est OpenSource et gratuit et ça fait parfaitement le travail (j'en avais déjà parlé et on trouve maintenant une multitude d'articles).

On donnera une IP fixe au serveur et tous les clients autorisés pourront accéder au serveur RDP. Ensuite on prendra soin de ne plus autoriser l'accès via l'IP externe Azure ou de forcer un ACL sur une IP cliente sure. Easy, d'autant plus que mon client utilise déja cette solution pour sécuriser l'accès à des ressources SMB distantes.

Scénario pratique....

Sur le poste de on prépare un script PowerShell qui va lancer le WebHook pour démarrer la VM Azure, attendre que le serveur soit lancé, tester le port RDP et lancer le Bureau à distance, et au passage notifier un IT si quelque chose se passe mal. S'il doit y revenir dans la journée il ne lancera que le client RDP (Bureau à distance), en fin de journée le serveur sera programmé pour s’arrêter tout seul et si l’utilisateur veut faire des heures supplémentaires il n'aura qu'à cliquer dans le mail reçu pour reprogrammer l’arrêt...

On commence par brouiller à minima le mot de passe du mail...

"P4ssww0rd!" | Convertto-SecureString -AsPlainText -Force | ConvertFrom-SecureString | Out-file C:\Users\User1\admin.txt

Et ensuite on prépare un petit script qui se lancera depuis un raccourcis sur le bureau...

$password = Get-Content C:\Users\User1\admin.txt | Convertto-SecureString # On récupère le mot de passe encrypté dans un fichier...
$username = "[email protected]"
$From = "[email protected]"
$To = "[email protected]"
$SMTPServer = "mail.gandi.net"
$SMTPPort = 587
$subject = "Client : Utilisateur (Machine)"
$Credential = New-Object System.Management.Automation.PSCredential ($username, $password)

try {
    $response = Invoke-WebRequest -Uri https://6bcghgdfh-afgh-4ghgfdf-8ghfgdh5f.webhook.we.azure-automation.net/webhooks?token=ZHuMYFshghshhh5+fgshs+f5h5+65sh -Method POST
    if($response.StatusCode -eq 202) {
        Write-Host "waiting..."
        sleep 60   # Temps d’attente estimé pour le démarrage de la VM
        if (Test-NetConnection 10.17.22.15 -Port 3389 | ? { $_.TcpTestSucceeded } ) {
            C:\Users\User1\vm.rdp  # On lance le client RDP
        } else {
            cls
	    Write-Output "RDP 1" # Si test NetConnection échoue (pas de réponse)
            Send-MailMessage -To $To -From $From -Subject $subject -SmtpServer $SMTPServer -Body 'Erreur NetConnection Fail' -Credential $Credential  -Port $SMTPPort -UseSsl
	    sleep 15
        }
    } else {
        cls
	Write-Output "Erreur RDP (l'administrateur a recu un mail d'avertissement et va intervenir !)" # Si NetConnection code autre que 202
        Send-MailMessage -To $To -From $From -Subject $subject -SmtpServer $SMTPServer -Body 'Erreur NetConnection 40x ou 500x' -Credential $Credential  -Port $SMTPPort -UseSsl
	sleep 15
    }
} catch {
    cls
    Write-Output "Erreur VM (l'administrateur a recu un mail d'avertissement et va intervenir !)" # Erreur NetConnection code 40x ou 50x
    Send-MailMessage -To $To -From $From -Subject $subject -SmtpServer $SMTPServer -Body 'Erreur au lancement de la VM' -Credential $Credential  -Port $SMTPPort -UseSsl
    sleep 15
}

Ainsi, contrairement à une planification en début de journée, la VM ne sera lancée que quand l'utilisateur en a l'usage afin d'économiser sur la facture Azure. Au besoin on peut également faire un petit script pour l'éteindre.

Migration

Dans un autre contexte je dois migrer une VM Azure vers ESXi. Expérience à venir.

Sources

 

Bureau à distance Windows et imprimantes

En ces temps ou les télétravail s'impose, l'IT doit s'adapter et proposer des solutions à chaque cas. Beaucoup de salariés se sont retrouvés à bosser sur le PC familial au détriment des règles de sécurité les plus élémentaires. Sachant par ailleurs que le télétravail comporte un cadre réglementaire  qui impose la fourniture des équipement nécessaires par l'employeur ainsi qu'un défraiement pour les frais occasionnés.

Au delà de ces considérations, s'il est facile de travailler à distance sur des applications web ou sur des fichiers gérés dans le cloud avec des applications classiques du genre Office, la chose se complexifie dès lors que l'on travaille sur des applications lourdes qui nécessitent une installation spécifiques sur le poste de travail. Je pense ici par exemple à des application de compta ou de paie (Sage pour ne pas les citer, mais ils sont loin d'être les seuls) ou le simple fait de déplacer l'application d'un poste à un autre nécessite l'intervention d'un partenaire agréé pendant plusieurs heures, je ne pense pas trop me tromper en affirmant que la complexité est ici orchestrée dans le seul but de générer du revenu... Un vaste débat, un autre débat que je n'aborderais pas ici ou je vais me contenter de contourner le problème.

Au départ j'avais j'avais naïvement pensé mettre les fichiers de données sur un cloud synchronisé. Impossible car au fil du temps ces solutions reposent souvent sur du SQL même en local. Les éditeurs proposent eux de configurer un serveur, solution coûteuse et surdimensionnée dans les TPE ou il n'y a bien souvent qu'un seul utilisateur. Installer ce genre de solutions sur un laptop que le salarié risque de perdre ou de se faire voler n'est pas non plus une solution.

L'alternative consiste à se servir un d'un logiciel de prise de main à distance, genre TeamViewer ou AnyDesk, ou carrément d'une session RDP (Bureau à distance) qui offre un bien meilleur confort. Reste à s'affranchir de la lenteur possible du poste de travail distant et de sa connectivité pas toujours à la hauteur.

Il existe une alternative plus durable et plus fonctionnelle. Isoler nos logiciels lourds sur un serveur dans une session RDP. L'avantage est que cette session sera accessible par la ou le(s) personne(s) qui en ont besoin, ou qu'elle soient et tout en se basant sur une application mono poste (donc une seule licence et donc une seule utilisation concurrente). Cela permet également à des salariés disposant d'un Mac d'utiliser des applications Windows.

Dans la pratique ce serveur, qui peut être un Windows 10 ou un Windows Serveur, sera de préférence installé dans un espace sécurisé (data center, Azure, AWS, un VPS ou encore un serveur dédié). Sécurisé en terme d'accès, sécurisé physiquement (vol, incendie, etc...), mais également au niveau de sauvegardes.

On a deux choix possibles, soit on installe un Windows 10 Pro, soit un Windows Serveur. L'avantage du Windows Serveur étant qu'il permettra de base une session RDP pour l'administrateur et une autre pour le client. Les coûts ne sont pas identiques. De plus selon la taille de l'entreprise une solution Windows Serveur pourra évoluer avec RDS (et les licences qui vont avec) vers une solution multi-utilisateurs distants.

La pratique

Installer une instance Windows, une VM, sur une infrastructure se fait en quelques clics. Ensuite on crée une session pour le client avec des droits utilisateur, on lui permet l'accès distant et le tour est joué. Il n'y a plus qu'à lancer le client Bureau à distance sur le PC ou le Mac de utilisateur et ça fonctionne, en mode fenêtré ou plein écran selon la taille des on écran. De plus RDP est bien pus confortable au quotidien qu'une prise de main à distance. A partir de là on demande au prestataire Sage (ou autre) de venir y transférer ses logiciels dont lui seul possède le savoir faire nécessaire et le tour est joué.

Sauf que...

Les utilisateurs de ce genre de logiciels génèrent beaucoup d’impressions. C'est prévu, le client Bureau à distance (Windows et Mac, mais pas celui que l'on trouve sur le Windows Store) permet d'utiliser ses imprimantes locales qu'il redirige dans la session RDP. Si dans la pratique si ça peut fonctionner de façon transparente pour quelques imprimantes qui utilisent des pilotes standards fournis par Windows, dans la majorité des cas il faudra installer les pilotes des imprimantes du poste client sur le serveur, (sauf peut être si on installe RDS avec EasyPrint, ça reste à vérifier et je n'ai pas pris cette peine). Hélas il sera impossible d’installer directement certains pilotes sur le serveur, soit leur module d’installation ne peux fonctionner que sur Windows 10, soit parce qu’il nécessitent que l'imprimante soit en ligne. Il va donc falloir ruser un peu pour disposer des pilotes correspondant aux imprimantes de nos clients sur le serveur.

Il existe sous Windows (sauf la version Home) un outil de migration qui va permettre d'exporter les files d'impression d'un client ou serveur et de les réimporter en réinstallant les pilotes et les imprimantes sur la cible. On va donc lancer PrintBrmUi.exe sur le poste des clients et réimporter le fichier obtenu sur le serveur avec le même outil. Cette opération permettra également l’importation de pilotes 32 bits si ce genre de poste client existe toujours...

Attention cet outil n’est pas fait pour ça mais pour migrer des serveurs d’impression… donc il exporte / importe des files d’impression avec les drivers. Il faudra donc prendre soin de ne pas écraser les pilotes existants et ensuite d’aller faire le ménage dans les imprimantes déclarées sur le serveur mais inutiles car seule nous importe la présence des pilotes. Le plus simple étant bien sur de tout faire avec la console printmanagement.msc qui va nous permettre de visualiser les pilotes installés et de retirer les imprimantes inutiles tout en conservant les pilotes.

Sources

 

 

Home Assistant et les coupures électriques

Pour surveiller des parties de mon réseau électrique, on va dire chaque rangées de mon tableau, j'utilisais auparavant des modules ITS23 en 433 Mhz. qui fonctionnait sur piles et envoyaient une alerte en cas de coupure. Exit le 433 Mhz, je cherche donc une solution alternative adaptée à Home Assistant, l'idée étant de recevoir un SMS si le différentiel qui alimente le congélateur tombe à cause d'un orage par exemple... Sachant que pour une coupure générale j'ai la remontée SNMP des onduleurs...

Vu que j'ai des modules Shelly un peu partout, je me suis dit que ce serait une bonne piste...

Ping

Avec l'intégration ping: il est facilement possible de surveiller et d'alerter. Hélas, il arrive parfois que ça fasse de faux positifs, peut être si le ping se fait à un moment ou le Shelly fait une maintenance ? Il doit y avoir moyen de consolider ça avec un template pour prendre en compte une période plus large de test. On crée un binary_sensor: et si off on envoie une notification avec une petite automation.

- platform: ping
  host: 192.168.210.31
  name: Switchboard 1
  count: 2

MQTT

On peut activer MQTT et ainsi avoir un retour du status online. Mais activer MQTT fait sauter le Cloud Shelly et devient impossible de piloter les équipements depuis Alexa... Ici aussi un binary_sensor: et si off on envoie une notification avec une petite automation.

- platform: mqtt
  name: "Shelly Plug 2"
  state_topic: "shellies/shellyplug-s-51xx67/relay/0"
  payload_on: "on"
  payload_off: "off"
  availability_topic: "shellies/shellyplug-s-51xx67/online"
  payload_available: "true"
  payload_not_available: "false"
  qos: 1
  device_class: power

Les attributs

Un Shelly, ou d'autres modules, retournent plusieurs attributs qui passeront à indisponible si le Shelly n'est plus alimenté. Reste à faire un template pour palier à une indisponibilité temporaire...

 
shelly_type: Shelly 1 PM
shelly_id: 76xx39
ip_address: 192.168.210.119
protocols:
  - CoAP-msg
  - poll
  - mDns
  - CoAP-discovery
over_temp: false
has_firmware_update: false
cloud_status: connected
switch: false
over_power: false
friendly_name: Shelly 1 PM - 76xx39
 
Ensuite on va bricoler un peu pour tester un des attributs, temporiser et notifier...

Le Graal !

Tout en cherchant je me disais qu'il devait bien y avoir quelque part une solution clé en main sous Home Assistant. J'ai commencé par trouver ce projet qui peut s'avérer très intéressant, mais c’est une brique en plus et je ne sais pas comment il sera maintenu. Et puis je suis tombé sur l'intégration alert: qui sera parfaite pour ce boulot !
tableau_1:
  name: Diff 1 is down
  entity_id: switch.shelly_1_fp
  state: 'unavailable'   # Optional, 'on' is the default value
  repeat:
    - 10
    - 30
    - 60
    - 300
  can_acknowledge: true  # Optional, default is true
  skip_first: false  # Optional, false is the default
  message: "{{ states.sensor.date_time.state}} > ALERTE | Différentiel 1 : OFF"
  done_message: "{{ states.sensor.date_time.state}} > ALERTE | Différentiel 1 : OK"
  notifiers:
    - slack_hass_canaletto
    - free_mobile
Je ne notifie pas tout de suite, j'attends 10 minutes et je répète ensuite quelquefois... Simple et efficace, on peut également s'en servir pour notifier autre chose, en combinaison avec un Template pour surveiller les piles ou pour garder un œil sur un capteurs capricieux...
 
 
 
 

 

 

De ISA/TMG à pfsense / HA Proxy

Il y a 20 ans Microsoft s’était mis en tête de proposer un firewall / reverse proxy maison. A l’époque on ne parlait pas encore de cloud à toutes les sauces, mais juste de permettre aux itinérants de se connecter aux applications d’entreprise, quelques une en web, mais surtout des applications lourdes via le VPN maison (PPTP). Mais surtout Microsoft a réussit à imposer ISA Serveur à beaucoup de ses clients disposant de serveurs Exchange, qui succédait alors à MS Mail, en saupoudrant le tout d’un peu de complexité plus ou moins utile et en imposant de coûteux certificats SAN. Ainsi nous avons eu ISA 2000, ISA 2004, ISA 2006, au passage Microsoft a même produit des appliances avec HP pour terminer par TMG 2010 qui était la dernière itération de la série.

Et après ? Et bien Microsoft a (quasiment) du jour au lendemain décidé que la sécurité d’accès ce n’était pas leur job et en gros ils ont planté là tout le monde. Démerdez vous. Bien sur d’autres éditeurs et constructeurs ont pris le relais (Kemp par exemple) mais la transition n’a pas été facile pour tout le monde, principalement pour des questions de coût. Résultat on trouve encore aujourd’hui des installations basées, dans le meilleur des cas, sur la dernière itération du produit Microsoft, qui dans le meilleur des cas tourne sur un Windows 2008R2 qui comme toute la famille W7 ne reçoit plus de mises à jour, sans passer à la caisse.

Il arrive un moment ou il faut se résoudre à détruire ces vieilleries et se tourner vers quelque chose de plus moderne, et ce d'autant plus qu'on parle ici de sécurité, en gros la porte d'entrée numérique de l'entreprise. Si les grands comptes ont les moyens de leur sécurité en s’offrant des pare-feu et autres équilibreurs de charge à plusieurs milliers d’Euros, voire dizaine de millier d’euros, les PME, quand elles sont malines, peuvent se tourner vers l’open source.

Après avoir un peu cherché, il existe plusieurs pistes, j’ai choisit une base pfsense (on peut partir aussi sur OPNsense) avec HA Proxy comme composant reverse proxy. On peut également utiliser Squid, l’avantage de HA Proxy étant qu’il s’agit d’un bon équilibreur de charge et qu'il sera également possible de s'en servir pour publier d'autres sites sur une ou plusieurs IP publiques. L’autre avantage de pfsense est le support total de Acme et qu’il est ainsi possible de générer automatiquement un certificat SAN nécessaire à Exchange.

En version eco point d’appliance pfsense, je l’ai donc installé sur une VM ESXi selon les recommandation de l’éditeur, avec un WAN et un LAN. Je ne vais pas vous décrire, c’est très bien expliqué ici.

Une fois notre pfsense installé on va lui ajouter quelques packages en allant dans System/Packages ou est disponible tout un catalogue de composant additionnels. Encore une fois la règle est la même, moins on installe de choses, mieux on se porte...

  • Open VMWare Tools : pour faire le lien avec l'hyperviseur
  • Acme : pour générer des certificats SSL Let'Encrypt en se basant sur les API des DNS (chez nous Gandi ou OVH par exemple).
  • HA Proxy : car on est venu pour lui !

Je passe sur Acme qui est assez intuitif et on va voir comment publier un serveur Exchange. Dans cet exemple je l'ai fait sans répartition de charge, mais il est tout à fait possible de publier un (ou plusieurs) FrontEND et coté BackEND répartir la charge sur plusieurs serveurs Exchange selon des règles à définir, soit en spécialisant les serveurs (EAS, Mapi, etc...) soit en hiérarchisant leur importance et leur besoin de disponibilité en fonction du type d'utilisateurs (petit peuple, VIP, etc...). Ce ne sont que des exemples et les serveurs peuvent êtres (ou pas) multipliés (plusieurs serveurs, plusieurs hyperviseurs, plusieurs SAN, etc...) selon la sensibilité de l'infrastructure.

Alors vous allez me dire, pourquoi encore maintenir des serveurs Exchange à l'heure du cloud ? Si pour de petites structures ça n'a pas trop de sens, pour certaines entreprise sensibles il peut s'agit d'une question de confidentialité qu'aucun cloud ne pourra offrir, et pour d'autres simplement pour une question de coût, car même en additionnant le coût des licences (prohibitif, genre 80% d'un projet), le matériel, l'infrastructure, l’exploitation et de bons consultants, au delà d'un certain seuil c'est très rentable par rapport à des licences 365 à 15 € / mois.

Mais au lieu de polémiquer, revenons à notre HA Proxy...

HA Proxy se décompose en deux parties principales. Le FrontEND, c'est ce qui va recevoir les connections entrantes, et le BackEND ou seront connecté les serveurs internes et ou on redirigera les flux après les avoir isolés. Je dis bien isolés car ici on ne fait pas de routage mais du proxy. D'ailleurs pour s'en rendre compte, le serveur Exchange n'a pas besoin d'avoir le serveur pfsense / HA Proxy en passerelle par défaut...

Dans les paramètres généraux on déterminera le nombre de connexions maximum, ce qui a une incidence directe sur l'occupation mémoire, mais également un serveur SysLog si on veut deboguer un peu la chose...

Sur le FrontEND on va configurer une entrée en utilisant une des IP publique disponibles et on va la configurer en type http/https (offloading). Logique et important.

En option et pour plus de sécurité on va fixer des ACL sur les chemins utilisés par Exchange. Çà fonctionne bien sur sans, mais c’est une sécurité supplémentaire recommandable. C'est également la possibilité de rediriger des chemins (path), donc des services vers des serveurs différents via plusieurs BackEND, par exemple le web mail /OWA vers un serveur et les mobiles /Microsoft-Server-ActiveSync vers un ou plusieurs autres serveurs via un second BackEND.

Sur cette même page de configuration au chapitre SSL Offloading on choisira notre certificat (préalablement créé avec Acme ou simplement importé) et surtout on cochera la bonne case afin de restreindre les requêtes aux seul domaines et sous domaines déclarés dans en Subjet Alternative Name de notre certificat SAN, cela nous évite d'avoir à déclarer d'autres ACL plus haut ou en des entrées en SNI.

Il est bien sur possible d'ajouter d'autres sécurités, comme des certificats client, mais comme je ne bosse pas pour un service secret je me suis abstenu.

Passons maintenant au BackEND. On va ici définir le ou les serveur(s) qui seront utilisés pour nos différents services. En l’occurrence je n'en ai qu'un seul sans quoi j'aurais créé plusieurs entrées ou plusieurs BackEND si je souhaitait répartir les services.

Je vais identifier mon serveur par son adresse IP et son port. Ensuite je vais choisir si ce serveur répond en SSL et s'il est nécessaire de vérifier la validité du certificat. Exchange répond en SSL, mais s'agissant de trafic interne je pourrais très bien à l'avenir choisir de ne pas vérifier la validité de son certificat ou utiliser un certificat ausigné. Le poids n'est à renseigner que si on a plusieurs serveurs en BackEND à équilibrer.

Pour d'autres types de serveurs web je peux également y accéder seulement en HTTP en interne, sachant que le client externe lui le verra en HTTPS. C'est un choix lié au niveau de sécurité de l'infrastructure, mais dans bien des cas on ne se préoccupe pas de chiffrer l'interne.

Le cas échéant on réglera plus loin la méthode d'équilibrage, un Timeout à passer 10000 pour Exchange, une méthode pour tester la disponibilité des serveurs et si l'on souhaite ou pas des statistiques, statistiques très utiles pour valider une répartition / équilibrage de charge.


Le FrontEND


Le BackEND

Voilà, à partir de là on a quelque chose de fonctionnel pour tous les ports HTTPS. Il va nous reste à traiter les ports TCP nécessaires au fonctionnement d'un serveur de messagerie (SMTP, POP, IMAP). Si POP et IMAP sont peu en vogue dans les entreprises qui utilisent Exchange, le port SMTP (25) sera nécessaire pour le trafic entrant. Cependant Exchange assurant un service minimum au niveau de la protection certains choisiront de faire transiter le trafic entrant par une passerelle de sécurité (Anti Spam, Anti Virus, etc...).

Dans l'absolu il est possible d'utiliser HA Proxy pour répartir la charge du trafic TCP en configurant un FrontEND TCP et en lui associant un ou plusieurs BackEND.

J'ai du louper quelque chose car le trafic sur ces ports n'était pas stable, alors que d'autres l'ont fait avec de bons résultats. J'ai donc fait un rétropédalage rapide sur ce point et pour l’instant je me suis contenté de faire du NAT classique, donc sans possibilité de répartition de charge. A suivre prochainement.

DNS public

Pour ce qui est du DNS public j'ai fait le choix le plus simple consistant à utiliser uniquement mon nom de domaine. D'autres feront le choix d'utiliser un sous domaine du genre mail.domaine.tld...

@ 3600 IN A 55.235.45.30
@ 3600 IN MX 10 domaine.tld. 
@ 3600 IN TXT "v=spf1 mx mx:domaine.tls~all" 
_autodiscover 3600 IN SRV 10 10 443 domaine.tld. 
autodiscover 3600 IN CNAME  domaine.tld.

Il ne reste plus qu'à tester en configurant les trois types de clients utilisant HTTPS :

  • Un client Outlook sur Mac ou PC sous MAPI qui va utiliser le processus AutoDiscovery pour trouver son serveur en se basant uniquement sur l'adresse mail de l'utilisateur.
  • Un client mobile IOS ou Android qui utilisera ActiveSync (EAS) et AutoDiscovery pour s'y retrouver. A noter que l'application Courrier proposée sur Windows 10 utilise ce même protocole.
  • Et enfin un client web mail en pointant sur domaine.tld/owa

Si tout se passe bien on valide le SMTP entrant / sortant, éventuellement IMAP et POP et il est possible de facturer le client.

Sources

 

Redimensionner un disque Hassio sur ESXi

Pour redimensionner un disque ESXi sous Windows c'est facile. On change la taille du disque dans la console VMWare et on agrandit la partition avec le gestionnaire de disque Windows. Il est également possible de réduire, mais c’est plus compliqué et je vous laisse un peu chercher car ce n’est pas le but de cet article.

Dans le cas d'une partition Linux c’est un peu différent. J'avais le cas avec ma VM Home Assistant HASSIO qui de base est configurée avec 6 GO, ce qui s'avère rapidement trop juste.

Avec les dernières versions de ESXi on doit pouvoir faire la partie VMWare directement en augmentant directement la taille dans la la console (à condition de ne pas avoir de snapshot), sauf que dans mon cas (ESXi 5.5) c'est impossible, grisé dans le client VShere et erreur dans le client web. Et sans ça impossible d'aller plus loin.

La solution

Elle passe par SSH après avoir arrêté la VM :

1 - on va dans le répertoire ou se trouve notre disque virtuel
cd /vmfs/volumes/datastore1/hassio/
2 - on clone le disque virtuel existant
vmkfstools -i hassio.vmdk hassio_clone.vmdk
3 - on redimensionne le clone
vmkfstools -X 40g hassio_clone.vmdk
4 - on le renomme si on le souhaite...
vmkfstools -E "originalname.vmdk" "newname.vmdk"

Redimensionner

Maintenant on va pouvoir réellement redimensionner la partition :

  1. Dans les paramètres de la machine on supprime l'ancien disque et on ajoute le nouveau et on sauvegarde.
  2. On ouvre à nouveau les paramètres pour ajouter un lecteur de CD qui pointe sur l'ISO de GParted que l'on aura au préalable téléchargé ici.
  3. Dans les options de la VM on change le boot de EFI vers BIOS et on sauvegarde.
  4. On lance la VM qui va démarrer sur le CD de GParted (une petite vidéo pour vous faire une idée).
  5. Important, quand GParted vous demande de réparer (fix) la partition vous répondez OUI !
  6. Ensuite il suffit de redimensionner la partition /dev/sda8 sans oublier d'appliquer votre choix.
  7. On ferme tout ça et on édite la VM pour retirer le lecteur de CD virtuel et surtout repasser le boot en mode EFI.
  8. On sauvegarde et on peu relancer la VM avec son disque ainsi redimensionné. Si tout va bien on fera le ménage en supprimant l'ancien VMDK.

Sources

 

Windows 10 au long cours....

Suite à ma migration tardive vers Windows 10 je continue à éplucher les problèmes que je n'avais pas sous Windows 7 et qui me donnent ce sentiment de régression, là ou la tech est censée apporter plus de progrès. Je reviendrais vous parler de la gestion calamiteuse de mes écrans, mais ce dossier est loin d'être clos !

Un autre problème est la gestion de la mémoire.

Je fais partie de ces personnes qui n'éteignent jamais leur PC, je sais ce n'est pas très écolo, on ne peut pas l'être sur tout. Bref, là ou j'avais dressé mon Windows 7 à tenir des mois sans redémarrage, avec une stabilité déconcertante (à condition d'éviter certaines mises à jour destinées à le tuer), force est de constater que je suis obligé de redémarrer mon Windows 10 régulièrement car il devient inutilisable au bout d'une semaine...

J'ai alors ouvert une enquête, inutile bien sur de faire appel au support, sur les forums les agents mandatés par Microsoft ne savent que conseiller un redémarrage, voire une réinstallation, sérieux !

Dans les faits le processus System occupe de plus en plus la CPU, environ 1 à 2 % de plus par jour. En allant chercher des détails avec Process Explorer, je me suis rendu compte que mon PC passait son temps à compresser la mémoire. Il se trouve que j'ai 32 GO de RAM et qu'il en reste toujours au moins 1/3 de libre, je considère donc que cette option est inutile et contre productive.

Dans la pratique ça peut s'expliquer. Microsoft force tout le monde à migrer vers Windows 10, mais W10 consomme plus de CPU et pour ceux ceux qui migrent de vieux PC avec 2 ou 4 GO de RAM, heureusement qu'il existe quelques artifices, même s'il me semblent illusoires ! Il ne faut pas non plus oublier que Windows 10 n'est jamais que le résultat du tripatouillage d'un code hérité au fil des décennies, ainsi des artifices utiles avec un PC des années 90 et son disque dur lent sont inutile avec un PC actuel pourvut d'un SSD, pourtant des réglages persistent !  Et de toutes façons la majorité des utilisateurs allument leur PC, puis l'éteignent quand ils ne l'utilisent plus. Donc leur PC est à nouveau frais et dispo le lendemain...

Utilisant par ailleurs des serveurs, ça m'a poussé à regarder si le problème constaté sous Windows 10 est présent sous Windows Server 2016/2019, et la réponse est non. En effet le code est proche, mais les réglages différents. Je n'ai pas ce problème sur les versions serveur, on peu penser que l'éditeur considère que sur un serveur l'administrateur dimensionne les ressources en fonction des besoins et que ces artifices sont inutiles. Pour vérifier ce point il existe une commande PowerShell :

Résultat sous Windows 10

PS C:\WINDOWS\system32> get-mmagent
ApplicationLaunchPrefetching : True
ApplicationPreLaunch : True
MaxOperationAPIFiles : 256
MemoryCompression : True
OperationAPI : True
PageCombining : True

Résultat sous Windows Server 2016/2019

PS C:\Users\Administrator> get-mmagent
ApplicationLaunchPrefetching : False
ApplicationPreLaunch : False
MaxOperationAPIFiles : 256
MemoryCompression : False
OperationAPI : False
PageCombining : False

Inutile d'être un expert pour constater des réglage bien différents de la gestion et l'inutilisation de la mémoire. On va donc changer quelques réglages, tout ceci n'étant pas sans risque, si vous ne savez pas ce que vous faites, je vous conseille d'aller jouer ailleurs ou de faire appel à un expert.

On va commencer par désactiver la compression mémoire et redémarrer :

PS C:\Windows\system32> disable-mmagent -mc
PS C:\Windows\system32> Restart-Computer

Etant donné qu'il ne sera pas possible d'apprécier immédiatement le résultat je propose de désactiver également Prefetch et SuperFetch avec regedit (on désactive  EnablePrefetcher et EnableSuperfetch, (au besoin on crée les entrée si elles ne sont pas présentes)

HKEY_LOCAL_MACHINE>SYSTEM>CurrentControlSet>Control>Session Manager>Memory Management>PrefetchParameters
  • 0 = Désactivé
  • 1 = Actif sur les applications
  • 2 = Actif au démarrage
  • 3 = Actif sur tout

Et on termine en désactivant les services associés (SysMain, ou SuperFetch sur des versions antérieures) avec le gestionnaire des services (WIN+R + services.msc), ou en PowerShell si vous y êtes plus à l'aise :

PS C:\Windows\system32> Set-Service SysMain -StartupType Disabled

Après un redémarrage on obtient :

PS C:\Windows\system32> Get-mmagent
ApplicationLaunchPrefetching : False
ApplicationPreLaunch : False
MaxOperationAPIFiles : 256
MemoryCompression : False
OperationAPI : False
PageCombining : False

 

Je touche du bois car mon PC est beaucoup plus stable depuis une semaine, j'espère que ça va durer et qu'une nouvelle mise à jour ne va pas me contrarier !

EDIT Avril 2020 : deux mois après je constate que oui le PC est bien plus stable, mais si je n'ai plus de processus qui me bouffe la CPU, Windows gère toujours très mal la RAM et j'ai beau fermer toutes les applications gourmandes, je me retrouve au mieux avec 16 GO sur 32... Mais il parait que c'est normal, que j'utilise mal mon ordi et qu'il faut le redémarrer. Je tenterais bien un Mac équivalent, mais quand je vois le comportement de mon Mac Book Pro qui souffle comme un âne dès que je lance une vidéo et deux trois sites, j'hésite à confier mes économie à Apple !

EDIT Juin 2020 : Après la mise à jour 2004, surprise, toutes ces customisations sont remises à leur valeur initiale.

Sources

Unifi Protect & Alexa

Unifi Protect pour gérer ses caméras (Unifi) de surveillance c'est top. Sauf qu'on est face à une solution professionnelle et qu'en se sens ils ne se préoccupent pas de l'intégration avec Alexa. J'ai récemment acheté un Alexa Echo Show 5 pour remplacer mon radio réveil et je me disait que ce serait bien que je puisse lui demander de voir le flux vidéo de mes caméras, fonctionnalité non proposée de base par Unifi Protect.

En cherchant un peu j'ai trouvé un service qui pourrait m'aider, service par ailleurs pas réservé aux caméras Unifi puisque basé sur le protocole RSTP. Et cerise sur le gâteau Monocle va me permettre de demander à Alexa de voir le flux de mes caméras, sans pour autant que ce flux circule à l'extérieur de mon réseau local. Pour y parvenir il faut faire tourner localement un petit service (Linux, Windows, OSX, Docker, Synology) à caser sur une machine existante qui servira de relais, Monocle ne servant alors qu'çà aiguiller les requêtes et les flux entre les serveurs et devices Alexa et les caméras locales (via le NVR pour Unifi Protect).

On part bien sur du principe que les caméras sont installées, et fonctionnent correctement avec Unifi Protect dans notre cas. 

La première chose à faire sera de se créer un compte sur le site https://www.monoclecam.com. Ensuite on va sur la page de configuration d'Unifi Protect activer le flux RSTP (le medium me semble suffisant) et on copie le lien correspondant, que l'on pourra au passage tester en se servant de VLC.

Lien que l'on reportera sur le dasboard Monocle lors de la création de la caméra, avec simplement son adresse IP locale (rien à faire coté routeur puisque la passerelle Monocle servira de relais) et dans notre cas le TAG @tunnel, cette balise sera utilisée pour demander à Monocle de transférer les connexions d'un appareil Alexa vers la caméra de votre réseau local. Cela indique à Monocole de créer une connexion tunnel sécurisée directement entre la caméra et l'appareil Alexa sans faire transiter le flux à l'extérieur.

Il va maintenant falloir configurer la passerelle locale. Cette passerelle communique avec le Skill Alexa hébergé dans le cloud Monocle et qui utilise les détails configurés dans les étapes ci-dessus pour dire à mon Echo Show comment communiquer avec ma caméra locale. La documentation fournie par Monocle contient d'excellentes instructions sur la façon de configurer la passerelle sur différents systèmes différents, mais dans mon exemple, je vais simplement la configurer sur une VM Windows Server disponible pour ce test.

J'ai donc simplement téléchargé la version x64 de la passerelle, que j'ai décompressée dans le répertoire c:\monocle, ensuite je suis allé créé et télécharger la clé API sur mon compte Monocle et je l'ai copiée dans ce même répertoire. Il suffit ensuite de lancer monocle-gateway.exe en ligne de commande. Et voilà ! (en mode production on pourra bien sur installer cette passerelle en tant que service Windows comme décrit dans la documentation).

Coté Alexa on installe le Skill Monocle depuis l'application mobile, ce qui permettra de faire remonter les cameras dans Alexa et de les affecter à des pièces, et ensuite on demande à Alexa sur l'Echo Show de vous montrer la caméra, et miracle ça marche du premier coup !

Sources

De la ZiBase à Jeedom, la suite 2019

Il y a un peu plus d'un an j'écrivais un article pour exprimer mes questionnements quant à l'évolution de la Zibase vers Jeedom. Jeedom n'est pas la panacée, mais c'est une boite à outils. Voici donc points par points en reprenant le fil de 2018 comment ça a évolué.

L'objectif est de rendre tout cela le plus WAF possible, de sortir de Jeedom ce qui ne sert à rien et de piloter de plus en plus d'équipements via Alexa tout en conservant un contrôle local hors cloud.

Se pose également la question du passage à la v4 de Jeedom, mais ça attendra une version bien finalisée, en tous les cas pas avant la fin de l'hiver !

Objectifs

Le chauffage électriques sur 6 zones avec divers scénarios.

  • Le plugin Thermostat est parfait
  • Les plugins Agenda, Présence et Mode permettent de gérer manuellement ou automatiquement en fonction de calendriers et des événements (j’ai des amis pour diner, périodes de vacances scolaires, etc…).
  • J'ai viré toutes les sondes Oregon peu esthétiques au profit de sondes Xiaomi / Aquara en Zigbee ou Bluetooth. Je n'en pouvais plus de devoir ré-appairer les sondes à chaque changement de piles.

Le chauffe-eau

  • Le mode nuit du chauffe-eau était géré par la ZiBase, il est maintenant géré par un agenda une nuit sur deux pendant les heures creuses. J'ai abandonné l'idée d'y intégrer une sonde.

La VMC

  • Je ne la gérais pas mais il doit être simple de la gérer via Jeedom à partir de l’hygrométrie de la salle de bain ou de la cuisine (article). C'est chose faite en fonction de l'hygrométrie ambiante dans la salle de bains.

Simulation de présence

  • Pour l’instant, j’ai choisi de ne pas intégrer cette fonction à Jeedom mais de la gérer en autonome avec des prises WiFi et l’application Tuya. Jeedom dispose maintenant d'un plugin qui fait le job.

Confort et éclairage

  • Idem, c’est facilement géré en autonome avec des ampoules ou des prises WiFi et l’application Tuya, la commande se faisant depuis un smartphone, une tablette ou mieux en vocal avec Google Home (Alexa possible, j’aime bien sa voix…). Bref, c’est plus naturel. Pas de design ou de tablette, on ne contrôle pas une centrale nucléaire et je pars du principe que la domotique doit se faire oublier. Uniquement Alexa en vocal ou via son interface qui constitue une alternative à la désastreuse application mobile proposée par Jeedom.
  • Donc il n’est pas utile pour l’instant de reporter ça dans Jeedom, sauf si on veut que certains équipements soient actifs quand les habitants sont présents. J’ai bon espoir de voir l’arrivée du plugin idoine. Ça reste possible en IFTTT, mais c’est un peu lent (2 sec environ)
  • Jeedom dispose maintenant du plugin SmartLife / Tuya pour les prises et ampoules, d'autres ampoules Xiaomi / Yellight sont également gérées, ainsi que les modules Shelly. J'aime bien ces modules car ils permettent de conserver l’appareillage original (interrupteur) et d’ajouter une entrée domotique, pilotable via Jeedom grâce à un plugin et sur Alexa. Il ne faut pas que la domotique supprime les fonctionnalités de base de la maison, n'importe doit pouvoir continuer à allumer un luminaire !

Consommation des appareils énergivores

  • Les prises Konyks via Tuya gèrent la consommation, notamment en veille, et parfois ça fait peur. De plus elles permettent de gérer des scénarios de base et un minuteur (genre, j’allume le home cinéma et celui-ci s’éteindra dans deux heures, soit après que j’ai regardé mon film). Tout cela est finalement un peu gadget, la domotique apporte du confort, pas des économies !
  • Comme pour l’éclairage, on n’encombre pas Jeedom pour l’instant avec ça.

Les coupures EDF

Pourquoi en utiliser plusieurs points de détection ? En province il y a souvent des coupures EdF (vent, orages, vétusté) mais aussi parfois des différentiels de section qui tombent (surement d’humidité quelque part). Et dans ce cas il est important de savoir ce qui s’est passé à distance afin de pouvoir faire intervenir et guider un proche afin de ne pas retrouver un congélateur perdu au retour de voyage.

  • Sur la ZiBase j’utilisais des micro-modules InterTechno alimentés sur piles pour déclencher une action en cas de coupure EdF. Ça doit être réutilisable sous Jeedom via le RFPlayer. C'est fait, même si le RFPlayer et sont plugin sont la partie la plus désastreuse de l'installation !
  • Pour la partie informatique je devrais pouvoir récupérer les infos des onduleurs APC avec le plugin SNMP.
  • Notification SMS / Pushbullet et / ou action voire IFTTT. J'ai basculé toutes notifications vers Slack.

Alarmes

  • Le système d’alarme Visonic est autonome. C’est un principe minimal de sécurité.
  • Par contre la remonté des capteurs sur Jeedom peut être intéressante afin d’identifier ce qui a déclenché une alarme à distance, voire déclencher une action secondaire en cas d’intrusion. Contrairement à la Zibase les RFPlayer dont il est issu remonte très mal les infos Visonic, enfin, c'est plutôt le plugin qui ne fait pas le job, mais visiblement a décidé de le laisser à l'abandon, et comme Ziblue est en liquidation ça laisse peu de perspectives...
  • Plus pratique, se servir des contacts d’ouverture pour désactiver un radiateur ou des capteurs de présence en temporisant pour réduire l’éclairage ou la climatisation (gadget en phase 2…). Ce seront plutôt des capteurs d'ouverture en Xiaomi en Zibgee qui feront un jour ce travail...

Présence

  • Déterminer via la localisation du mobile la mise en route du chauffage ou climatisation. Il y a je crois un plugin pour ça… Rien de stable, donc rien place...
  • Gérer l’éclairage extérieur à l’approche de la maison via le WiFi. J'ai fait quelques test en BLEA avec un porte clés Tile, ça fonctionne.

Les logiciels

  • Jeedom
  • Application mobile Jeedom (je ne suis pas fan). Définitivement oublié. Il vaut mieux je pense utiliser l'interface web en mode mobile....
  • Application mobile ImpériHome (je m'en servait déja sur la ZiBase) via le plugin idoine dans Jeedom. Le plugin est abandonné mais je m'en sert encore, il faudra un jour trouver une alternative.
  • Application mobile TuyaSmart, complétée par Xiaomi et Shelly pour les setups, mais surtout par Alexa.

Le matériel

Serveur, box domotique

Jeedom est installé sur un Raspberry Pi3 et les dongles USB utiles. Evolution possible dans une VM VMWare ESXi. Toujours sur un RPI afin que la domotique reste indépendant de tout le reste. C'est aussi plus simple pour gérer les clés des protocoles.

Avant que l’on me pose la question je vais expliquer pourquoi  je n’ai pas utilisé de Z-Wave, qui est pourtant le protocole roi dans cet univers, protocole ayant eu le soutien de tous les boutiquiers de la domotique (maintenant remplacés par Amazon…). Bref, je n’en ai jamais utilisé sur la ZiBase et j’ai pu m’en passer. Et surtout c’est trop cher, le moindre module Z-Wave étant affiché à 50 €.

Sondes de température :

  • Oregon : j’en ai plusieurs, elles étaient reconnues par le ZiBase et elles fonctionnent correctement via la clé RFPlayer (125 €) et le plugin idoine. Inconvénient, elles sont moches et il faut refaire l’appairage à chaque changement de piles ce qui est une corvée à l’usage. Vendues et replacées par des Xiaomi / Aquara.
  • Xianomi et Xiaomi Aquara en Zigbee (6/12 €) : Fonctionnement OK via la clé ZiGate (45 €) et le plugin idoine. En cas de longue distance on peut mailler avec une prise Zigbee. Ces sondes esthétiques et très discrètes ne transmettent les infos (température, humidité, pression) que s’il y a un changement d’état et / ou très aléatoirement s’il n’y a pas de changement. Le modèle carré (Aquara) semble plus volubile. A valider en période de chauffage. J'ai abandonné la clé ZiGate dont les évolutions rendaient l'installation instable au profit d'une Combee II installée sur un second RPI qui fait office de passerelle Zigbee universelle (Phoscon / Deconz). C'est stable.
  • Xiaomi en Bluethoth 12/18 € : reconue par le plugin BLEA. Intervalle réglable. Elles sont très esthétiques. La portée est réduite avec le Bluetooth intégré au Pi mais ça devient correct (100 m²) avec une clé Bluetooth longue portée (UD100, 45 €). Test ici. Je m'en sert là ou j'ai besoin d'une sonde avec afficheur, elles sont hélas un peu généreuses, +1°...

Présence

  • Capteurs d’alarme Visonic via le RFPlayer toujours en chantier...
  • Capteurs Xianomi via la ZiGate Replacé par Combee II
  • BLEA + tag Nutt Tag Tile
  • WiFI via les smartphones : Pas vraiment exploitable car les smartphones mettent de plus en plus le WIFI en veille. Il faudrait le faire en Bluetooth, je crois qu'un plugin est en préparation.

Notifications

  • SMS (Free API)
  • Pushbullet Remplacé par Slack que j'utilise au quotidien.

Alarmes et sécurité

  • (voir présence)

Eclairages et appareils

  • Prise et ampoules Konyks ou Sonoff, WiFi via TuyaLes prises Sonoff S26 permettent de gérer l'état à la mise sous tension, ce n'est pas le cas des prises Konyks ou c'est plus aléatoire. J'ai disqualifié Konyks (cher pour ce que c'est), Sonoff (pas CE/NF) au profit de Shelly.
  • Possible extension en Philips Hue, Osram, Ikea and co (Zigbee) via la ZiGate et son plugin Les ampoules Xiaomi SmartBulb en WIFI sont très bien.

Actionneurs

  • IPX800 : pour l’instant j’ai une IPX800 v2.
    C’est une simple carte 8 relais qui me sert pour l’instant à actionner les radiateurs et le chauffe-eau. En sortie j’ai câblé des contacteurs de puissance Finder avec le bon pouvoir de coupure et de ne pas forcer sur les relais de la carte. L’intérêt de ces contacteurs est de disposer d’un bypass manuel et ainsi de pouvoir passer les équipements en manuel en cas de défaillance de la domotique. Les versions 3 et 4 de l’IPX800 n’ont pas d’intérêt dans mon cas.
  • Prises et modules Chacon : ils se pilotent via le RFPLayer, mais ça reste un protocole peu fiable.
    Etat aléatoire lors de la remise en tension après une coupure EdF, auquel cas il est gênant de retrouver la moitié des prises ON… Impossibilité également d’utiliser deux équipements proches, c’est by design. Donc mon aventure Chacon / DI-O est terminée. J'élimine Chacon / DI-O au profit de prises Tuya et des modules Shelly avec retour d'état.
  • X2D : Je n’utilisais qu’un seul module DeltaDore pour commander le sèche-serviettes et je dois pouvoir le gérer avec le RFPlayer. Il est toujours présent, mais il passera à la trappe bientôt...
    Cette solution permet de gérer le fil pilote, mais il est vrai que je pourrais le faire avec un jeu de diodes. A voir.
  • Prises et ampoules Zigbee : via la ZiGate et son plugin. J’ai une Osram qui me fait le maillage. Remplacé par Combee II
  • Prise et ampoules WiFi : via Tuya, plugin en devenir ? Pas d’urgence. Plugin OK

Réseau et Wi-Fi

  • Le réseau et le WiFi sont gérés depuis longtemps avec du matériel Unifi (AP AC Pro et USG). Le top ! Au-delà de cette solution qui reste un peu complexe pour un particulier je recommande Amplfi de chez Unifi ou la solution WiFi proposée par Google. Un bon réseau est une base impérative en domotique et généralement le WiFi proposé par les box est à oublier. On attends la Dream Machine Pro...

Vidéo surveillance

  • Caméras et PVR Unifi (je sais, je suis fan de cette marque) dans une VM VMWare. C’est géré à part de façon autonome. J'ai remplacé le NVR soft par Unifi Protect sur une Cloud Key II, c'ets le jour et la nuit....

Multimédia

Vidéo

  • Emby (j’y reviendrai dans un post à part) en remplacement de Kodi. Des box NVidia Shield et Xaomi Mi Box 3S sous Android TV ont remplacé les PI. Elles supportent également Netflix et Amazon Vidéo.
  • TV : Tuner réseau HDHome Run qui permet de recevoir les chaînes sur les box Android TV et les autres devices (même si dans la pratique je ne regarde pas la TV). Ce n’est pas compatible Canal, ce n’est pas mon problème car je ne suis pas fan, mais le cas échéant il est toujours possible d’installer MyCanal ou Molotow sur les box.

Musique

  • Sonos dans toutes les pièces, certains équipements datent de 2005 et n’ont pas pris une ride. On ne change rien. Spotify et base locale de CD numérisés. Je me suis fait plaisir avec un Sonos AMP auquel j'ai ajouté des voies arrière avec deux petites enceintes Ikea by Sonos, au départ c'était pour la musique mais le rendu en home cinéma est fabuleux !