lundi 28 janvier 2019

PowerShell et PC distant






Il faut être Administrateur de la machine distante !


c: 
start powershell -credential ""
ou 
start powershell -credential "domain\username" 



Avoir les process en cours sur un PC Distant
get-process -computername NOM_PC

Killer un Process avec son Nom sur un PC Distant
(Get-WmiObject Win32_Process -ComputerName NOM_PC | ?{ $_.ProcessName -match "NOM_PROCESS" }).Terminate()

Killer un Process avec son ID sur un PC DISTANT
(Get-WmiObject Win32_Process -ComputerName NOM_PC | where{$_.ProcessId -eq "4772" }).Terminate()

Changer le type de demarrage d'un service en Auto sur un PC DISTANT
Set-Service -name remoteregistry -ComputerName NOM_PC -startuptype "auto"

Démarrer un service sur un PC Distant
(Get-Service -ComputerName NOM_PC -Name "RemoteRegistry").Start()

jeudi 24 janvier 2019

Arduino Episode 10 : Bouton Poussoir

Arduino Épisode 10 : Bouton Poussoir
Quoi de plus simple qu'un bouton poussoir.Et bah non !
Pour des raisons de retour d’électricité et avoir un comportement cohérent avec ce que l'on veut, il faut utiliser une résistance, mais je n'en n'ai pas sous la main.
Il y a une fonction qui utilise une résistance intégré:
INPUT_PULL UP
seulement le résultat est inversé
retourne 1 si non appuyé et
retourne 0 si appuyé.
d'où le changement d'état par la ligne etatBouton = !etatBouton
(Voir le résultat dans la console Série en 9600 baud)

Branchements:

NANO <-> Bouton
GND --- une PIN du bouton d'un côté
D10 --- l'autre PIN du bouton du même côté


Code: 


int pinBouton;

void setup() {
  Serial.begin(9600);
  pinBouton = 10;
  pinMode(pinBouton, INPUT_PULLUP);
}

void loop() {
  boolean etatBouton = digitalRead(pinBouton);
  etatBouton = !etatBouton;
  Serial.println(etatBouton);
}

et pour allumer la LED interne :

void setup() {
  Serial.begin(9600);
  pinMode(10, INPUT_PULLUP);
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  boolean etatBouton = digitalRead(10);
  etatBouton = !etatBouton;
  digitalWrite(LED_BUILTIN, etatBouton);
  Serial.println(etatBouton);
}

mercredi 16 janvier 2019

Météo et API





Voici mon retour sur l'utilisation d'une API: OpenWeatherMap
Une API qui permet d'obtenir les informations météorologiques.

1°) Se connecter

2°) Demander une Clef
3°) Trouver sa localisation

4°) Creer sa requete

5°) Le code


1°) Se connecter
https://home.openweathermap.org/users/sign_up
Créer un compte c'est rapide et gratuit (sur ce que l'on veux faire) 

2°) Demander une Clef
 Se connecter avec son compte et demander une Clef:
https://home.openweathermap.org/api_keys
(32 Hexas)

3°)Trouver sa localisation:
On télécharge le fichier suivant: http://bulk.openweathermap.org/sample/city.list.json.gz
On le dézippe et ouvre le fichier avec excel (Oui quand même l'ouvrir)
Ctrl-F, on cherche PARIS, on reprend le code juste au dessus: 6455259

4°) Creer sa requete
Une fois la requête créer il ne restera plus qu'a la mettre dans le navigateur

Voici le début de la requête :
http://api.openweathermap.org/data/2.5/weather

Ensuite on cherche la localisation  (voir paragraphe 3)
?id=6455259

Ici on ajoute la clef (voir paragraphe 2)
&APPID=1234567890abcdef1234567890abcdef

Ici on choisi la langue
&lang=fr

Ici les unités (Farenheit ou Celcius)
&units=metric


5°) Le code
C'est en regardant la vidéo de Anthony Welc que j'ai voulu reproduire ce qu'il avait fait et l'adapter à mon tour.

https://www.youtube.com/watch?v=nop5geuxP3s

Voici mon code: (sans ma clef ou ma localisation)



<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>API Meteo</title></head>
<body>
https://www.youtube.com/watch?v=nop5geuxP3s
exemple Requete:<br>


<script>
window.fetch('http://api.openweathermap.org/data/2.5/weather?id=6444014&APPID=18dd96c0cfb2f065d69889c070e03ee4&lang=fr&units=metric')
.then(res => res.json())

.then(resJson => {

document.write(resJson.name);
document.write("<br>");
document.write(resJson.weather[0].description);

document.write("<br>min: "+ resJson.main.temp_min + " max: " + resJson.main.temp_max + " now: " + resJson.main.temp);
document.write("<br>Humidite: " + resJson.main.humidity);

heureleve=new Date(resJson.sys.sunrise*1000)
heurecouche=new Date(resJson.sys.sunset*1000)
document.write("<br>");
document.write("Leve: "+ heureleve.toLocaleTimeString('fr-FR') + " Couche: " + heurecouche.toLocaleTimeString('fr-FR'));
})

//console.log(window.navigator);
</script>
</body>
</html>

lundi 14 janvier 2019

Windows 10, changer le comportement de la touche CapLock

Voici rapidement comment créer un lien vers la configuration des touches CAPLOCK et MAJ (Shift)

Créer un raccourcis avec ceci dedans :

C:\Windows\System32\rundll32.exe Shell32.dll,Control_RunDLL input.dll,,{C07337D3-DB2C-4D0B-9A93-B722A6C106E2}

Et pour atteindre le bon onglet directement :

C:\Windows\System32\rundll32.exe Shell32.dll,Control_RunDLL input.dll,,{C07337D3-DB2C-4D0B-9A93-B722A6C106E2}{HOTKEYS}

mardi 8 janvier 2019

Arduino Episode 9 : NFC (PN532 + LCD)





Projet sympa et presque complétement abouti.

Ici, un lecteur de tag NFC connecté sur un Arduino Nano + écran LCD pour afficher l'UID du tag (en Hexa, en Décimal et en mode MSB (reverse HEXA ou reverse Decimal).

Branchements:

NANO - LCD ou PN532
GND -- (LCD) GND

5V -- (LCD) VCC
A5-- (LCD) SCL
A4-- (LCD) SDA

3V3-- (PN532) 5V

GND --(PN532) GND
D9 -- (PN532) (non connecté)
D10 -- (PN532) SCL
D11 -- (PN532) MOSI
D12 -- (PN532) MISO
D13 -- (PN532) SCK

La boite :
-Une boite en carton
-une ouverture pour l'écran (tient tout seul)
-une ouverture pour le cable d'alimentation
-le lecteur NFC fixé à la paroi avant de la boite
et le reste (cables, arduino, rallonge de cable USB) jeté en vrac


Code: 
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_PN532.h>
#include <LiquidCrystal_I2C.h>
#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();
LiquidCrystal_I2C lcd(0x27, 20, 4);

// If using the breakout with SPI, define the pins for SPI communication.
#define PN532_SCK (13)
#define PN532_MOSI (12)
#define PN532_SS (10)
#define PN532_MISO (11)

// If using the breakout or shield with I2C, define just the pins connected
// to the IRQ and reset lines. Use the values below (2, 3) for the shield!
#define PN532_IRQ (2)
#define PN532_RESET (3) // Not connected by default on the NFC Shield

// Uncomment just _one_ line below depending on how your breakout or shield
// is connected to the Arduino:

// Use this line for a breakout with a SPI connection:
//Adafruit_PN532 nfc(PN532_SCK, PN532_MISO, PN532_MOSI, PN532_SS);

// Use this line for a breakout with a hardware SPI connection. Note that
// the PN532 SCK, MOSI, and MISO pins need to be connected to the Arduino's
// hardware SPI SCK, MOSI, and MISO pins. On an Arduino Uno these are
// SCK = 13, MOSI = 11, MISO = 12. The SS line can be any digital IO pin.
Adafruit_PN532 nfc(PN532_SS);

// Or use this line for a breakout or shield with an I2C connection:
//Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET);

void setup(void) {
Serial.begin(115200);
Serial.println("Hello!");

lcd.init();

nfc.begin();

uint32_t versiondata = nfc.getFirmwareVersion();
if (! versiondata) {
Serial.print("Didn't find PN53x board");
while (1); // halt
}

// Got ok data, print it out!
Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX);
Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC);
Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC);

// Set the max number of retry attempts to read from a card
// This prevents us from waiting forever for a card, which is
// the default behaviour of the PN532.
nfc.setPassiveActivationRetries(0xFF);

// configure board to read RFID tags
nfc.SAMConfig();

Serial.println("Waiting for an ISO14443A card");
lcd.backlight();
}

void loop(void) {
boolean success;
uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID
uint8_t uidLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type)

lcd.clear();
lcd.setCursor(5,1);
lcd.print("DISPONIBLE");
lcd.setCursor(5,2);
lcd.print("==========");



// Wait for an ISO14443A type cards (Mifare, etc.). When one is found
// 'uid' will be populated with the UID, and uidLength will indicate
// if the uid is 4 bytes (Mifare Classic) or 7 bytes (Mifare Ultralight)
success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLength);

if (success) {

Serial.println("Found a card!");
Serial.print("UID Length: ");Serial.print(uidLength, DEC);Serial.println(" bytes");
String cardIDH = "";
String cardIDRH = "";
uint32_t cardIDD;
uint32_t cardIDRD;


for (uint8_t i=0; i < uidLength; i++)
{
//Serial.print(" 0x");Serial.print(uid[i], HEX);
cardIDH += String(uid[i], HEX);
cardIDRH = String(uid[i], HEX) + cardIDRH;

cardIDRD += (uint32_t) uid[i] << (i*8);
cardIDD += (uint32_t) uid[int(uidLength)-i-1] << (i*8);

}

//cardIDD = (uint32_t) uid[3] << 0 | (uint32_t) uid[2] << 8 | (uint32_t) uid[1] << 16 | (uint32_t) uid[0] << 24;
//cardIDRD = (uint32_t) uid[0] << 0 | (uint32_t) uid[1] << 8 | (uint32_t) uid[2] << 16 | (uint32_t) uid[3] << 24;

Serial.println("");
Serial.print("UID HexaDecimal : ");Serial.println(cardIDH);
Serial.print("UID Reverse HexaDecimal : ");Serial.println(cardIDRH);
Serial.print("UID Decimal : ");Serial.println(cardIDD);
Serial.print("UID Reverse Decimal : ");Serial.println(cardIDRD);
Serial.println("");Serial.println("");

lcd.clear();

lcd.setCursor(0,0);
lcd.print("HEX :"+cardIDH);

lcd.setCursor(0,1);
lcd.print("DEC :");
lcd.setCursor(5,1);
lcd.print(cardIDD);

lcd.setCursor(0,2);
lcd.print("RHEX:"+cardIDRH);

lcd.setCursor(0,3);
lcd.print("RDEC:");
lcd.setCursor(5,3);
lcd.print(cardIDRD);

// Wait 1 second before continuing
delay(10000);
lcd.clear();
}
else
{
// PN532 probably timed out waiting for a card
Serial.println("Timed out waiting for a card");
}
}


.

NFC et Windows





Je vous présente 2 outils pour Windows pour gérer le NFC.
Bien sûr, l'ordinateur doit avoir un lecteur matériel de NFC ainsi que le driver adéquate.

1°) NFC TOOL GUI
Outils qui affiche les informations d'une carte NFC, très simple et assez complet.
Avantage:
Très simple
Inconveniant :
ne lis que les cartes sur 4 Hexa et pas 7
les informations disparaissent lorsqu'on retire le tag



2°)ReadCard (Community Edition)
Outils qui affiche les informations d'une carte NFC, avec pas mal d'options pour les personnes qui maitrisent un peu plus le NFC, le LSB et MSB, binaire, hexa, decimal...
Avantage:
Assez simple et très complet 
Inconveniant :
Connaitre un peu le NFC
les informations disparaissent lorsqu'on retire le tag
PopUp au démarrage

3°) Script pour passer de HEXA en Decimal LSB ou MSB:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Hexa2Dec V1.0.2</title>
<!-- Hexa2Dec -->
<!-- V 1.0.2 -->
<!-- 07:01 19/11/2018 -->
<!-- Script permettant de convertir un HexaDecimal en Decimal avec option MSB ou LSB -->

<script>

function toDec(){
var regHexa = /^[a-f\d]+$/i;
document.f1.valeur.value=document.f1.valeur.value.replace(/\:|\-|\ /g,'');
var initial = document.f1.valeur.value.toUpperCase();

if (document.f1.methode.value=="LSB") {

sortie="";
boucle=(initial.length/2);

for(var i = 0; i < boucle; i++ ) {
longueur=initial.length;
sortie=sortie+initial.charAt(longueur-2);
sortie=sortie+initial.charAt(longueur-1);
initial=initial.substr(0, longueur-2);
}
initial=sortie;
}

if(regHexa.test(initial)){
var converti = parseInt(initial,16);
converti=converti.toString();
document.f1.result.value=converti;
}
else{
alert('La valeur entrée n\'est pas hexadécimale !');
}
}


</script>
</head>

<body>
<fieldset><legend>Hex2Dec MSB+LSB 1.0.2</legend>
<form name=f1>
Valeur HEXA : <input type="text" name="valeur" value="DBADC950">
<select name="methode" >
<option value="MSB">MSB - ordre normal</option>
<option value="LSB">LSB - ordre inversé</option>
</select>

<input type="button" onclick="toDec()" value="Convertir en décimal" /><br>
Resultat en DECIMALE: <input type="text" name="result" /><br />

</form>
</fieldset>
</body>
</html>

jeudi 3 janvier 2019

Arduino Episode 8 : RFID (RC522 + LCD)





Arduino nano et LCD et RFID

J'ai vu chez ma Veto un super truc pour lire la puce electronique de mon chat.
Je me suis dis je vais faire pareil, j'ai un écran LCD, un arduino et un lecteur RFID.
(Mauvaise fréquence pour le lecteur RFID mais c'est pas grave)
(Je voulais utiliser mon nouveau MAX7219, mais le lecteur RFID utilise les mêmes ports I2C donc il aurait fallu acheter une carte d'entrée sortie, donc je me suis rabatu sur l'écran LCD qui intégre un module arduino qui gère l'I2C(si j'ai bien compris) de plus, les pins sont différentes, et les alimentations également :D )

Branchements:

NANO / LCD
 GND sur GND
5V sur 5V
A4 sur SDA
A5 sur SCL

NANO / RFID-RC522
D10 sur SDA
D13 sur SCK
D11 sur MOSI
D12 sur MISO
ne pas brancher l'IRQ du RC522
GND<> GND
D9 sur RST
3.3V<> 3.3V

Code:
#include <LiquidCrystal_I2C.h>
#include <RCSwitch.h>
#include <SPI.h>
#include <MFRC522.h>


#define SS_PIN 10
#define RST_PIN 9
 
MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class

MFRC522::MIFARE_Key key; 

// Init array that will store new NUID 
byte nuidPICC[4];

//config ecran
RCSwitch mySwitch = RCSwitch();
LiquidCrystal_I2C lcd(0x27, 20, 4);


void setup() { 
  Serial.begin(9600);
  lcd.init();
  SPI.begin(); // Init SPI bus
  rfid.PCD_Init(); // Init MFRC522 

  for (byte i = 0; i < 6; i++) {
    key.keyByte[i] = 0xFF;
  }

  Serial.println(F("This code scan the MIFARE Classsic NUID."));
  Serial.print(F("Using the following key:"));
  printHex(key.keyByte, MFRC522::MF_KEY_SIZE);
}
 
void loop() {

lcd.backlight();




  // Look for new cards
  if ( ! rfid.PICC_IsNewCardPresent())
    return;

  // Verify if the NUID has been readed
  if ( ! rfid.PICC_ReadCardSerial())
    return;

  Serial.print(F("PICC type: "));
  MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
  Serial.println(rfid.PICC_GetTypeName(piccType));

  // Check is the PICC of Classic MIFARE type
  if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&  
    piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
    piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
    Serial.println(F("Your tag is not of type MIFARE Classic."));
    return;
  }

  if (rfid.uid.uidByte[0] != nuidPICC[0] || 
    rfid.uid.uidByte[1] != nuidPICC[1] || 
    rfid.uid.uidByte[2] != nuidPICC[2] || 
    rfid.uid.uidByte[3] != nuidPICC[3] ) {
    Serial.println(F("A new card has been detected."));

    // Store NUID into nuidPICC array
    for (byte i = 0; i < 4; i++) {
      nuidPICC[i] = rfid.uid.uidByte[i];
    }
   
    Serial.println(F("The NUID tag is:"));
    Serial.print(F("In hex: "));
    printHex(rfid.uid.uidByte, rfid.uid.size);
    Serial.println();
    Serial.print(F("In dec: "));
    printDec(rfid.uid.uidByte, rfid.uid.size);
    Serial.println();
  }
  else Serial.println(F("Card read previously."));

  // Halt PICC
  rfid.PICC_HaltA();

  // Stop encryption on PCD
  rfid.PCD_StopCrypto1();
}


/**
 * Helper routine to dump a byte array as hex values to Serial. 
 */
void printHex(byte *buffer, byte bufferSize) {
  String cardID = "";
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
    Serial.print(buffer[i], HEX);
    cardID += String(buffer[i], HEX);

  }
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print(cardID);
}

/**
 * Helper routine to dump a byte array as dec values to Serial.
 */
void printDec(byte *buffer, byte bufferSize) {
  
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
    Serial.print(buffer[i], DEC);
    
  }
}

Un code plus simple que le mien:
https://www.hackster.io/ravee-tansangworn/reading-rfid-card-or-key-ring-and-display-on-lcd-b2f70d

#include "LiquidCrystal_I2C.h"
#include "RFID.h"

#define SS_PIN      A2
#define RST_PIN     D3

int led1 = D7;

MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
LiquidCrystal_I2C lcd(0x27,20,4);

void setup()
{ 
  lcd.init();
  lcd.backlight();
    SPI.begin();
    SPI.setClockDivider(SPI_CLOCK_DIV8);
 pinMode(led1, OUTPUT);
    mfrc522.PCD_Init();
}

void loop() {
    
    digitalWrite(led1, LOW);
    // Look for new cards, if nothing found, quit
    if ( ! mfrc522.PICC_IsNewCardPresent()) {
     return;
    
    }
    
    // Select one of the cards, if nothing found, quit
    if ( ! mfrc522.PICC_ReadCardSerial()) {
     return;
    }
    
    String cardID = "";
    
    for (byte i = 0; i < mfrc522.uid.size; i++) {
        cardID += String(mfrc522.uid.uidByte[i] < 0x10 ? "0" : "");
        cardID += String(mfrc522.uid.uidByte[i], HEX);
    }
    digitalWrite(led1, HIGH);
    lcd.print(cardID);
    mfrc522.PICC_HaltA();
    delay(10000);
    lcd.clear();
}

mardi 1 janvier 2019

Configuration Firefox about:config





Vous avez plusieurs utilisateurs de firefox et devez configurer un paramétre dans chaque session du about:config de chaque utilisateur. Trop long, trop compliqué.

Voici comment déployer un paramètre.

Exemple, pour récupérer un certificat windows sur Firefox:
Normalement nous ouvrons firefox puis about:config et changeons

security.enterprise_roots en enable



Sinon
Créez un fichier EnableRoots.js
 avec ceci dedans:
/* Allows Firefox reading Windows certificates */
pref("security.enterprise_roots.enabled", true);
et copiez le ici:
C:\Program Files\Mozilla Firefox\defaults\pref

au prochain reboot c'est good.

D'autres points que vous pouvez manipuler:

  • browser.startup.homepage (Page d'accueil par défaut)
  • browser.search.defaultenginename (moteur de recherche par défaut)
  • app.update.auto (activer / désactiver la mise à jour automatique)

Une solution en Ms-Dos
cd /D "%APPDATA%\Mozilla\Firefox\Profiles\*.default"

set ffile=%cd%

echo user_pref("browser.startup.homepage", "http://superuser.com");>>"%ffile%\prefs.js"
echo user_pref("browser.search.defaultenginename", "Google");>>"%ffile%\prefs.js"
echo user_pref("app.update.auto", false);>>"%ffile%\prefs.js"
set ffile=

cd %windir%

ou


cd /D "%APPDATA%\Mozilla\Firefox\Profiles\*.default"
echo user_pref("some.key", "somevalue");>>prefs.js

Sources:
https://www.olfeo.com/fr/base-de-connaissances/configurer-firefox-certificats-ssl