Faire de la domotique par internet

Portail, portes, volets et stores de terrasse obéiront aux ordres du Raspberry Pi

Modérateur : Francois

Répondre
Niky33
Messages : 5
Enregistré le : mar. 26 juin 2018 08:19

Faire de la domotique par internet

Message par Niky33 » dim. 29 juil. 2018 12:50

Petit débutant, mon but est de faire de la domotique, je voudrais piloter mon arrosage, chauffage etc... depuis internet.
Dans l'excellent livre de M. Jansee ''RPi l'alliance de la programmation et de l'électronique, 45 applications pour l'électronicien'' celui-ci décrit chapitre 12 des applis Client-Serveur (commande de LED, etc..) qui fonctionnent très bien mais en réseau local c.a.d. derrière une BOX.
Comment ''modifier'' ces programmes(python) pour que les commandes puissent passer par internet.
Merci d'avance pour votre aide.
Voici les 2 programmes ci_dessous :

PROGRAMME INSTALLE SUR LE RPi :
# -*- coding: utf-8 -*-
# Serveur TCP
import os
import RPi.GPIO as GPIO
import socket
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.OUT)
GPIO.setup(26, GPIO.OUT)
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("192.168.1.27", 5000)) #GAZINET
#server.bind(("192.168.8.102", 5000)) #DENIA
server.listen(5)
print "Serveur TCP a l'ecoute du port 5000"
while 1:
myclient, address = server.accept()
print "Connected to ", address
# etablir la liaison
myclient.send('0')
while 1:
# attendre les donnees client
data = myclient.recv(512)
if data == "q" or data == "qq":
myclient.close()
break
else:
if data == '1':
GPIO.output(4, 1)
GPIO.output(26, 1)
print "Recu : " , data,
newdata = 'LED 4 on'
else:
GPIO.output(4, 0)
GPIO.output(26, 0)
newdata = 'LED 4 off'
print " envoi :" ,newdata
myclient.send(newdata)
if data == "qq":
server.close()
print "Le serveur TCP est fermé"
break
else:
print "Serveur TCP a l'ecoute du port 5000"

PROGRAMME INSTALLE SUR LE PC:
# Client TCP
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(("192.168.1.27", 5000))
# connexion avec serveur
data = client.recv(512)
if data <> "0":
print "Reponse inattendue du serveur fermeture"
print data
client.send("q")
client.close()
exit()
# boucle de communication
while 1:
data = raw_input ("Envoi (q pour quitter, qq pour arreter le serveur) :")
client.send(data)
if data == "q" or data == "qq":
client.close()
break;
data = client.recv(512)
print "Recu :" , data

domi
Administrateur
Messages : 2192
Enregistré le : mer. 17 sept. 2014 18:12
Localisation : Seine et Marne

Re: Faire de la domotique par internet

Message par domi » dim. 29 juil. 2018 17:02

Bonjour,

Dans un premier temps, sans regarder ce que fait le script, voici déjà ce qui m'alerte que ce script ne peut pas fonctionner via nternet.
Les adresses IP notées en dur dans le code sont des adresses locales, il faut donc adapter avec l'adresse IP public.
Ensuite il faut faire une redirection de port vers la bonne machine depuis ton routeur.

++

Niky33
Messages : 5
Enregistré le : mar. 26 juin 2018 08:19

Re: Faire de la domotique par internet

Message par Niky33 » lun. 30 juil. 2018 16:56

Tout d'abord un grand merci de prendre sur ton temps pour m'aider.
Oui les adresses sont des adresses locales, ce sont celles qui fonctionnent quand je suis derrière ma Freebox.
Et c'est bien là mon pb, car j'avoue que j'ai du mal à digérer la redirection de port.
Pour info en suivant un tuto concernant la création d'un site internet, je suis arrivé après pas mal de déboire à le créer, j'ai donc un nom de domaine qui me permet d'accéder au site(une modeste page statique HTML).
Seulement tout était expliqué de A à Z.
Pour revenir à mes 2 programmes, j'imagine que le prog ''client'' qui fonctionnera sur un autre PC derrière une autre box doit être modifié et qu'il me faudra aussi paramétrer cette box en conséquence ?
Quant au programme ''serveur'' qui est sur le Rpi faut-il aussi le modifier  et comment ?

Répondre

Retourner vers « Gestion centralisée ouverture/fermeture »