Ecrire et lire sur le port série (ARDUINO et DOMOTICZ ...)

Bonjour,

J'essaye de basculer l'état d'une entrée via DOMOTICZ.
J'ai branché mon ARDUINO en USB et paramétré la carte sur DOMOTICZ.
J'arrive à voir l'état de mon bouton :

  • Si appuis sur mon interrupteur physique, je vois le bouton changer d'état dans DOMOTICZ
    Mais quand je veux envoyer l'info "met la pin 7 en high" depuis DOMOTICZ, je n'y parviens pas.

Est-ce que quelqu'un pourrais m'aiguiller ?

Je précise que je suis débutant en ARDUINO et DOMOTICZ.

Merci.

Salut

paramétré la carte sur DOMOTICZ.

Comment ?

hbachetti:
Salut

Comment ?

N'ayant pas trop de temps en ce moment, je vais faire un tuto express pour ce qui désire utiliser domoticz pour gérer leur carte ARDUINO depuis ce logiciel.

1 - INSTALLATION DE DOMOTICZ
Voir dans google, il n'y a rien de compliquer et il existe de très bon tuto.

2- CODE DANS ARDUINO

  • Définition des pin comme suit :
#define pin_Badge 8 //pin_Badge par exemple et 8 modifiable également
  • Création de la carte dans le setup
// MySensors serial protocol:
  // node-id;child-sensor-id;message-type;ack;sub-type;payload\n
  //https://www.jeedom.com/forum/viewtopic.php?t=5381
  //https://jeedom.github.io/documentation/third_plugin/mySensors/fr_FR/index.html
  // Protocole MYSENSORS Serial.println("1;1;0;0;17;Arduino UNO\n");
  //1-Adresse du nœud sur le réseau mysensors
  //1-Numéro du capteur sur le nœud.Un nœud peut avoir plusieurs capteur température, humidité...etc
  //0-Type de Message (0,1,2,3 ou 4)
  //0-Ack pas pris en charge sur Domoticz????
  //17-types de sensors (ARDUINO pour le 17)
  Serial.println("1;1;0;0;17;Arduino UNO\n");
  Serial.println("1;2;0;0;3;Badge\n");

C'est brut mais ça fonctionne, votre ARDUINO est sur le noeud 1, le numéro du capteur sur ce même noeud, les 2 0 d'après je ne sais pas à quoi il servent et le dernier numéro (3) correspond au type de capteur 17 pour arduino 3 pour un switch on_off

Pour lire le Badge de notre exemple

if (digitalRead(pin_Badge ) == HIGH)
    {
      Serial.println("12;4;1;0;2;1");
    }
    else
    {
      Serial.println("12;4;1;0;2;0");
    }

le 1 à la fin pour avoir le bouton en ON (allumer) et 0 pour éteindre

  • Pour créer une carte :

3 - METTRE VOTRE CARTE DANS DOMOTICZ ET LA PILOTER DEPUIS LE LOGICIEL
J'ai pas mal galéré pour cette partie, pour ajouter une carte arduino branché sur le port USB de votre PC, dans DOMOTICZ faire comme suit :
(1)

  • Brancher votre ARDUINO sur le port USB
  • Cliquer sur Réglages
  • Matériel
    (2)
  • Remplir les infos comme sur limage (le nom ARDUNINO peut être modifié sans problème)
  • Choisir le port com de la carte
  • Cliquer sur Ajouter
    (3)
  • Votre ARDUINO apparait dans DOMOTICZ

[url=http://]

Ensuite :

  • Réglages
  • Dispositifs
  • Tous les dispositifs
  • Cliquer sur la flèche verte pour l'ajouter à DOMOTICZ (la flèche deviens bleu)

![](http://<a target=)">

Maintenant cliquer sur :

  • Interrupteurs
    Votre capteur apparait (normalement c'est une image d'ampoule mais si vous cliquer sur modifier, vous pouvez changer l'image)

Voilà avec ça vous avez votre carte sur DOMOTICZ en lecture mais pas en écriture (si vous cliquer sur le bouton dans DOMOTICZ ça n'a aucun effet sur le capteur) par contre si vous activer physiquement le capteur, vous devriez voir basculer l'état de votre capteur.

/!\ le délais est plus ou moins long entre l'appui physique et le visuel sur le PC (quelques secondes) /!\

Je ne connaissais pas cette possibilité.
Je travaille plutôt avec une passerelle radio à base de NRF24L01 et mes capteurs & actionneurs communiquent avec cette passerelle.

Cela dit, je pense que le principe doit être le même dans le cas USB.
Dans l'onglet interrupteur il faut éditer l'interrupteur en question et lui associer un script ON et un script OFF.
Le script utilise JSON et peut être écrit en python par exemple.

Tu peux trouver pas mal d'exemples sur le WEB.
Un script personnel commandant l'allumage de mon home-cinema :

#!/usr/bin/python
# - *- coding: utf- 8 - *-
import sys
import json
import urllib2
import re
import time
import datetime
import httplib, urllib
 
def open_port():
	pass
 
def close_port():
	pass
 
 
class Domoticz():
 
	def __init__(self, url):
		self.baseurl = url

	def __execute__(self, url):
		req = urllib2.Request(url)
		return urllib2.urlopen(req, timeout=5)

	def getDeviceId(self, name):
		"""
		Get the Domoticz device id
		"""
		url = u"%s/json.htm?type=devices&filter=light&used=true&order=Name&" % (self.baseurl)
		print url
		data = json.load(self.__execute__(url))
		for device in data['result']:
			if device['Name'] == name:
				return device['idx']
		return None

	def setDeviceInfo(self, xid, info):
		"""
		Set the Domoticz device information.
		"""
		url = "%s/json.htm?type=command&param=switchlight&idx=%s&switchcmd=%s&" % (self.baseurl, xid, info)
		print url
		data = json.load(self.__execute__(url))
		return data

url = "http://192.168.1.134:8080"
domo = Domoticz(url)
switch = domo.getDeviceId(u'Home-cinema')
print switch
domo.setDeviceInfo(switch, sys.argv[1])

Tu as codé ton ARDUINO avec MYSENSORS ?

@+

hbachetti:
Je ne connaissais pas cette possibilité.
Je travaille plutôt avec une passerelle radio à base de NRF24L01 et mes capteurs & actionneurs communiquent avec cette passerelle.

Cela dit, je pense que le principe doit être le même dans le cas USB.
Dans l'onglet interrupteur il faut éditer l'interrupteur en question et lui associer un script ON et un script OFF.
Le script utilise JSON et peut être écrit en python par exemple.

Tu peux trouver pas mal d'exemples sur le WEB.
Un script personnel commandant l'allumage de mon home-cinema :

#!/usr/bin/python

- *- coding: utf- 8 - *-

import sys
import json
import urllib2
import re
import time
import datetime
import httplib, urllib

def open_port():
pass

def close_port():
pass

class Domoticz():

def init(self, url):
self.baseurl = url

def execute(self, url):
req = urllib2.Request(url)
return urllib2.urlopen(req, timeout=5)

def getDeviceId(self, name):
"""
Get the Domoticz device id
"""
url = u"%s/json.htm?type=devices&filter=light&used=true&order=Name&" % (self.baseurl)
print url
data = json.load(self.execute(url))
for device in data['result']:
if device['Name'] == name:
return device['idx']
return None

def setDeviceInfo(self, xid, info):
"""
Set the Domoticz device information.
"""
url = "%s/json.htm?type=command&param=switchlight&idx=%s&switchcmd=%s&" % (self.baseurl, xid, info)
print url
data = json.load(self.execute(url))
return data

url = "http://192.168.1.134:8080"
domo = Domoticz(url)
switch = domo.getDeviceId(u'Home-cinema')
print switch
domo.setDeviceInfo(switch, sys.argv[1])




@+

Ton code me donne envie de pleurer :o
Je commence a peine avec arduino et on va sur du python JSON ...
Il va falloir que je regarde ça de plus prêt mais c'est pas gagné :confused:

Voilà avec ça vous avez votre carte sur DOMOTICZ en lecture mais pas en écriture (si vous cliquer sur le bouton dans DOMOTICZ ça n'a aucun effet sur le capteur) par contre si vous activer physiquement le capteur, vous devriez voir basculer l'état de votre capteur.

C'est normal. Ton device est un interrupteur, pas un récepteur comme un relais ou un dimmer.

Voilà avec ça vous avez votre carte sur DOMOTICZ en lecture mais pas en écriture (si vous cliquer sur le bouton dans DOMOTICZ ça n'a aucun effet sur le capteur) par contre si vous activer physiquement le capteur, vous devriez voir basculer l'état de votre capteur.

C'est normal. Ton device est un interrupteur, pas un récepteur comme un relais ou un dimmer.

Le python / JSON n'est peut-être pas la solution. J'ai relu ton post #2. Je vois que tu as codé ça brut de fonderie.

D'autre part je ne vois pas l'intérêt de brancher un ARDUINO sur un port USB du serveur DOMOTICZ. La vocation de DOMOTICZ est avant tout de communiquer par radio à l'aide d'une ou plusieurs passerelles 433MHz, 868MHz ou 2.4 GHz.
Il faudrait décrire plus précisément ton matos : RASPBERRY ? prises connectées ? etc.

@+

hbachetti:
C'est normal. Ton device est un interrupteur, pas un récepteur comme un relais ou un dimmer.

Le python / JSON n'est peut-être pas la solution. J'ai relu ton post #2. Je vois que tu as codé ça brut de fonderie.

D'autre part je ne vois pas l'intérêt de brancher un ARDUINO sur un port USB du serveur DOMOTICZ. La vocation de DOMOTICZ est avant tout de communiquer par radio à l'aide d'une ou plusieurs passerelles 433MHz, 868MHz ou 2.4 GHz.
Il faudrait décrire plus précisément ton matos : RASPBERRY ? prises connectées ? etc.

@+

Pour le code, je n'y connais pas grand chose, je bidouille se que je peux et quand ça marche... :smiley:

Pour le matos...
Pour le moment je fais des essai pour ma futur installation mais j'avais pour idée d'avoir :

  • Un rassberry avec DOMOTICZ installé (dans un premier temps, je voudrais le faire fonctionner avec un pc (gratuit) avant d'investir.
  • Des arduino "Maîtres" relié en USB sur ce rassberry (ou pc actuellement) pour ne pas avoir de problème de lecture/ecriture pour la partie "sensible" de l'installation (ex un arduino pour l'alarme).
  • Des arduino "Esclaves" qui communiquerais avec le "Maitre" via câble RJ45, je suis en rénovation, donc je peux tirer des câbles un peu partout. En plus j'ai une maison en pisé donc mur de 80cm donc les ondes ne passent pas forcément sur la maison entière.

Après pour le wifi, la radio et le 2.4 GHz sont possible pour les partie proche de l'arduino "Maitres"

Les Esclaves seraient utilisés pour les parties moins "sensible" (température ou gestion d'éclairage extérieur). Comme ça si une info, par exemple T° chambre 1, communique mal, ce n'est pas trop grave.

par contre l'alarme ne peut pas être aléatoire et c'est pour cela que je là veux sur le port USB.

En plus j'ai une maison en pisé donc mur de 80cm donc les ondes ne passent pas forcément sur la maison entière.

Moi aussi. Il n'y a pas de problème jusqu'à huit mètres. Au delà rien n'empêche de placer des répéteurs.

Des arduino "Esclaves" qui communiquerais avec le "Maitre" via câble RJ45

Essaie de te renseigner sur le forum domoticz.
Mais je doute que tu obtiennes beaucoup d'aide.
Qu'est qu'un esclave dans ta tête ? Un capteur d'ouverture ? Une sirène ?
Ton projet est trop brouillon. La description n'est pas assez précise.

@+

hbachetti:
Moi aussi. Il n'y a pas de problème jusqu'à huit mètres. Au delà rien n'empêche de placer des répéteurs.
Essaie de te renseigner sur le forum domoticz.
Mais je doute que tu obtiennes beaucoup d'aide.
Qu'est qu'un esclave dans ta tête ? Un capteur d'ouverture ? Une sirène ?
Ton projet est trop brouillon. La description n'est pas assez précise.

@+

Pour moi un Esclave est un ARDUINO déporté :wink:

Sur le forum DOMOTICZ je n'ai pas eu de réponse, mais je pense avoir trouvé... Je gratte encore...

En gros mon systeme

C'est un exemple

Tu relies deux esclaves UNO sur un maître UNO. Plus haut tu parlais de RJ45.
En liaison série, SoftwareSerial par exemple ?

Sur le forum DOMOTICZ je n'ai pas eu de réponse, mais je pense avoir trouvé... Je gratte encore...

Normal, tu es complètement à côté de la plaque DOMOTICZ.

Juste un détail. Cela me paraît délirant de tirer du câble série pour un thermomètre.
Pour ce qui est du portail et éclairage extérieur, OK. De toutes façons il faut leur amener du 220V. Autant tout passer dans la même gaine.

Le problème d'un thermomètre est qu'il doit être situé à au moins un mètre du sol. Cela risque d'être une maison franchement plat de spaghetti, et ce n'est pas très évolutif.

Ceux que je développe communiquent par radio et sont alimentés par batterie LITHIUM-ION (200mAH seulement)
Les détecteurs de passage également.

Pour passer facilement à travers les murs et même à l'extérieur, rien n'empêche de passer par du RFM69 433MHz.

@+

hbachetti:
Tu relies deux esclaves UNO sur un maître UNO. Plus haut tu parlais de RJ45.
En liaison série, SoftwareSerial par exemple ?

Heu tu me perds là, je suis débutant.
Je sais que l'on peut faire communiquer 1 ARDUINO avec un autre via les pin RX TX, donc je relie mes arduinos via ces 2 borne avec du câble RJ45 (car blindé).

Le schéma était un exemple, j'en suis encore loin... Le maitre serais plus un Yun ou un Léonard.

Pour les sondes, c'est un exemple, je ne sais pas encore (à part volet roulant, portail et éclairage extérieur) se que je vais piloter.

Sincèrement explore un peu MYSENSORS, tu éviteras de perdre ton temps.