Jeedom4 et 1Wire

Bonjour,
juste pour partager ma solution et peut etre que cela aidera certains.

J’utilise en 1Wire des sondes de T° et des relais. Tres pratiques, tres peu couteux, tres fiable, si on alimente bien le bus en 5V et que l’on évite des chaînages complexes.

Sur Jeedom3 j’uilisais un plugin in 1Wire, qui permettait d’utiliser simplement la suite logicielle OWFS (owfs Development Site - Software)

Sur Jeedom4, plus de trace dans le market, j’ai donc cherché un plan B.
La solution que j’ai retenue est d’utiliser l’excellent et simplissime SSH Commander et d’utiliser le module owfs qui permet de voir son bus 1wire comme un systeme de fichiers.

Pour éviter de grandes longueurs de cables, et des passages de cable embetants, et des tranchées, j’utilise plusieurs raspberry3 avec chacun un controlleur USB 1wire et son propre bus.

Sur chaque raspberry, j’utilise owserver, le moteur principal, owhttpd pour installation et debug, et owfs pour la production

Mon script de lancement :

#!/bin/bash
killall owserver
killall owhttpd
killall owfs
/usr/bin/owserver --masterhub=/dev/MasterHub &
sleep 10
#/usr/bin/owhttpd -s 127.0.0.1:4304 -p 2121 &
/usr/bin/owfs -s 127.0.0.1:4304 -m /home/pi/1wire &

et ainsi :
root@RaspberryST:/# ls /home/pi/1wire
05.300332000000 05.E00432000000 28.616411BFC949 statistics
05.300332000000 28.616411BDB57F 28.616411BFC949 structure
05.A10832000000 28.616411BDB57F alarm system
05.A10832000000 28.616411BFC1B2 bus.0 uncached
05.D60932000000 28.616411BFC1B2 bus.1
05.D60932000000 28.616411BFC7F9 settings
05.E00432000000 28.616411BFC7F9 simultaneous

On peut alors simplement lire une température :
root@RaspberryST:/# cat /home/pi/1wire/28.616411BFC1B2/temperature
19

Ou changer l’état d’un relais :
echo 0 > /home/pi/1wire/05.300332000000/PIO
Ou connaitre son etat :
root@RaspberryST:/# cat /home/pi/1wire/uncached/05.300332000000/sensed
1

Pour me simplifier la tache j’ai juste créer un petit script pour les relays.
J’ai fait 2 scripts différents selon mes modeles de chip 1wire, mais on peut facilement adapter à son cas et meme fusionner le code en un seul script…

type 05 : qui changent d’état lorsque que l’on écrit 0 dans PIO

#!/bin/bash
value=$(cat "/home/pi/1wire/uncached/$1/sensed")

#ON
if [ $value -eq 1 ] && [ $2 = "ON" ]
        then
        echo 0 > /home/pi/1wire/$1/PIO
        echo "ON"
fi

#OFF
if [ $value -eq 0 ] && { [ $2 = "OFF" ] || [ $2 = "SWITCH" ] ;}
        then
        echo 0 > /home/pi/1wire/$1/PIO
        echo "OFF"
fi

#Switch
if [ $2 = "SWITCH" ]
        then
        echo 0 > /home/pi/1wire/$1/PIO
        sleep 0.5
        echo 0 > /home/pi/1wire/$1/PIO
        echo "SWITCH"
fi

Type 29 : 8 relays sur une carte, allumé à 1 , éteint à 0

#!/bin/bash
PIO="PIO"$3
echo $PIO

#ON
if [ $2 = "ON" ]
        then
        echo 1 > /home/klona/1wire/$1/$PIO
        echo "ON"
fi

#OFF
if [ $2 = "OFF" ]
        then
        echo 0 > /home/klona/1wire/$1/$PIO
        echo "OFF"
fi

#Switch
if [ $2 = "SWITCH" ]
        then
        echo 1 > /home/klona/1wire/$1/PIO
        sleep 0.5
        echo 0 > /home/klona/1wire/$1/PIO
        echo "SWITCH"
fi

Et voila, il n’y a plus qu’à renseigner SSH Commander :
05:
/home/pi/1wire_relays05.sh 05.E00432000000 ON
/home/pi/1wire_relays05.sh 05.E00432000000 OFF
ou
/home/pi/1wire_relays05.sh 05.E00432000000 SWITCH

29:
/home/klona/1wire_relays29.sh 29.1A2208000000 OFF .2
/home/klona/1wire_relays29.sh 29.1A2208000000 ON .2
/home/klona/1wire_relays29.sh 29.1A2208000000 SWITCH .2

Temperatures :
/bin/cat /home/pi/1wire/28.616411BDB57F/temperature
/bin/cat /home/pi/1wire/10.5474DF741641/temperature

Il reste ensuite simplement à créer un petit scénario qui va exécuter toutes les minutes la série de commandes SSH Commander pour les températures.

/Klona

Peut on ajouter un tag 1wire dans le forum ?

2 « J'aime »

Salut,

Très intéressant , merci pour le partage !

Qquelques questions (je n’ai pas encore testé « ssh commander ») :

  • Pourrais-tu poster un ou deux screenshot pour montrer comment les sondes se matérialisent côté Jeedom ?
  • Est-ce que les composants DS2405 et DS2406 sont compatibles ?
  • Si oui, comment faire pour trouver la bonne syntaxe pour les piloter (output à 0 ou 1)

Merci.

Hello,
coté SSH commander, tres simple.
On créé des équipements , et on y ajoute des commandes :
Annotation 2020-04-13 113159


Dés que l’on a executé la commande une fois, cela crée la valeur de retour.
Annotation 2020-04-13 113458
Que l’on mets ensuite en forme par un virtuel
Annotation 2020-04-13 113529
Juste un petit scenario et on est bon

Tous les composants DS sont supportés par OWFS, c’est un tres beau dévelloppement logiciel.

Le plus simple est de tester. Il y a l’interface web pour tester à un premier niveau et visualiser simplement son bus, et apres tu tapes en ligne de commande directement dans ton raspberry pour voir le comportement. Selon le composant, mais également selon le montage réalisé, cela peut différer un peu.

En fiat il faut déja faire fonctionner correctement OWFS sur le raspberry. Puis s’occuper de l’intégrer à Jeedom.

/Klona

1 « J'aime »

@klona,
Merci, c’est plus clair avec ce complément.

Questions subsidiaires :

  • Mon contrôleur 1wire étant sur ma machine Jeedom, pas besoin de « ssh commander », je peux créer les scripts directement sous Jeedom. => C’est bien cela ?

  • Où trouver les infos permettant de créer les scripts adaptés à ses propres composants ? (J’ai des DS2405 pour mes vannes chauffage).

  • Dans ton script, la partie PIO pilote quel composant ?

Tes précisions vont peut-être me permettre de migrer vers Jeedom V4
plus vite que prévu :smile:

@+

Hello,
oui avec SH commander tu peux l’utiliser vers ton jeedom (tu crée juste un equipment avec l’adresse IP du jeedom ou 127.0.0.1)

Les DS2405 sont supportés sans souci. Mon script « 05 » devrait fonctionner.
Mais pas besoin de programmer pour comprendre ce qu’il fait et modifier un peu selon le besoin.

Le PIO pilote justement le DS2405. Apres cela dépend aussi du circuit complet et de comment il est conçu.
Mais simplement, tu fais des tests dans la session SSH de ton jeedom, avec echo 1 ou 0 vers le PIO de ton DS2405 et tu verras le comportement
echo 0 > /home/pi/1wire/05.xxxxxxxx/PIO
echo 1 > /home/pi/1wire/05.xxxxxxxx/PIO

De meme pour savoir quelle valeur correspond à ton relais activé, tu vas lire dans /uncached/sensed en fonction de l’état de ton relais.
cat /home/pi/1wire/uncached/05.xxxxxxxx/sensed

Mais avant cela, en toute premiere étape, il faut que tu installes et configure correctement ton OWFS. Le plus simple pour tester est de lancer d’abord à la main owserver avec l’option --debug, où tu devrais voir tes devices passer si c’est bien configurer, et des messages d’erreur sinon.
Apres tu lances owhttpd pour ouvrir la page web. Tu pourras voir tes composants et changer leur état.
Et au final tu lances owfs vers le répertoire de ton choix (/home/pi/1wire dans mon exemple)
Mais pour des questions pures OWFS, un thread séparé serait mieux je pense

Y’a plus qu’à plonger !

/klona

1 « J'aime »

Salut,
Oui c’est exact, mais c’est le seul point sur lequel je coince :slight_smile:
Sachant que j’ai réussi à afficher la température d’un DS1820 via script + virtuel, je ne vois pas l’utilité de ssh commander en local. Ai-je loupé un truc ?

Parfait, je vais aller lire le contenu des fichiers et tester.

Très clair, je note la nuance « uncached ».
En fait dès lors qu’on a installé les outils owserver, owfs, etc…, tout est à portée de main. Il suffit d’aller lire/exploiter dans (chez moi) => /mnt/1wire

C’est fait : regarde, j’ai les cheveux mouillés :slight_smile:
J’ai finalisé tout ça hier dans la nuit et c’est parfaitement fonctionnel !

Une fois finalisé, j’essaierai de faire un post dédié pour aider ceux qui veulent nous rejoindre.

MERCI 1000 FOIS POUR LE PARTAGE.
J’étais parti sur un boitier ow-server-enet2 qui est très bien, mais me contraignait à modifier le hardware de toutes mes cartes, car DS2405 non supporté. Migration obligatoire vers DS2406 non TO92 (pour éviter le mode parasite).

Grâce à toi, je vais pouvoir réactiver mon 1wire via contrôleur usb Dallas sous Jeedom V4.
J’ai une carte par pièce, tu n’imagines par le temps gagné…

@++

[EDIT]
@klona
Je viens de décrire les prérequis ici :
Installer owfs sous Buster (pour Jeedom v4)

As-tu ce problème de doublon aussi ?
Une idée ?

Merci.

Hello.
Super !

non effectivement, le script en local va bien… J’étais resté sur mon idée de SSH Commander …

/Klona

@klona

Dernière ligne droite…

Toutes les commandes fonctionnent sur terminal et scripts « en dur ». En revanche, pour le script générique, je n’ai pas compris comment on passe les valeurs à $1 et $2.

Où sont donc « OFF », « ON » et la liste des « id » des PIO ?
Est-ce dans un scénario ou un objet « ssh commander » ?

Je veux bien un complément d’explication si tu passes par là …

Question subsidiaire :
Je suppose que pour avoir le statut temps réel du PIO sur le Dashboard, il faut lancer la commande sensed après chaque commande de changement état du PIO. Tu confirmes ?

Si oui comment procèdes-tu ?

Merci.

@+

Bonjour à vous deux,
Moi aussi j’utilise le plugin 1 Wire depuis plusieurs années, et comme vous je me suis aperçu que le plugin 1 wire avait disparu du market mais pas seulement le plugin GPIO du même développeur a également disparu !
D’après ce que j’ai compris l’équipe jeedom n’accepte plus certains plugins qui ne rentrent plus dans le standard pour le core de jeedom (je crois que c’est ça ?).
pour ma part je suis loin d’avoir votre niveau, je ne suis pas informaticien et les lignes de codes c’est pas mon truc.
Donc pour l’instant de croise les doigts mes deux plugins fonctionnent ! Jusqu’à quand ?
peut être qu’un développeur reprendra le plugin 1 Wire (l’espoir fait vivre)

Par contre j’ai une petite question, je remarque de temps en temps sur mon réseau 1 Wire des pics vers le haut ou vers le bas sur mes courbes, avez-vous des explications à cela ?
Exemple sur mes sondes de températures j’ai de nombreux décrochages vers le bas (à 0°C) cela dure plusieurs secondes. Idem DS2438 pics vers le haut et le bas.
Si vous voulez des screenshots, dites le moi

Merci de votre retour
Bonne journée

Hello,
désolé je n’ai pas vu passé la notification de nouveau post… D’ou une réponse tres tardive…
J’ai eu des problèmes du genre en 1wire, et c’était lié à des problèmes de bus :

  • Câbles trop longs, trop de câblages en étoiles ou en série, faux contact, etc…
  • Pas ou mauvaise alimentation 5V du bus 1 wire

Dans mon cas, j’ai mis plusieurs zone 1Wire avec un raspberry à chaque fois, simplifié mes circuits en les mettant tous en étoile, 1 device par cable, vers un « concentrateur » avec un injecteur séparé.

Ci dessous l’injecteur, fait depuis un schéma qui trainait sur mon PC (je pense que cela vient de chez Hobby-Boards, malheureusement disparu maintenant)

1wire Injector

Bonsoir Klona,
Décidément la communication sur le forum on a du mal :joy: désolé
Ok je prends note de tes conseils et comme toi je pense que cela est lié à un problème de filerie, moi je suis partie dans tous les sens, série étoile …
Pour info j’ai acheté un module 1 Wire de chez ESERA le gateway 11 c’est un produit plus industriel donc normalement cela devrait le faire pour mes problèmes de pics sinon je reverrai mon câblage (et là. J’ai du taff)
Par contre petite question, aurais tu une idée de ta consommation sur le plus 5 vols en mA et cela sur combien de sondes (que tu possèdes) ?

Merci

Cdt`

Hello,

Quel script local utilises tu pour récupérer les infos de tes sondes DS18B20 ?

J’ai aussi longtemps utilisé le plugin et maintenant j’utilise le plugin script pour lire mes sondes ou gérer mes relais.

SONDE DS18B20

owread /28.100BA8030000/temperature

CARTE « RELAIS » (fil pilote) à base de DS2408S+

ON :

owwrite 29.87900B000000/PIO.0 0

OFF :

owwrite 29.87900B000000/PIO.0 1

Bonjour,
pour recuperer l’info du compteur pulse ??? J’ai un compteur Gianola avec un capteur à impulsion mais je ne vois pas comment recuperer les infos, je suis avec un cela :
OW-SERVER: 1-Wire to Ethernet ServerOWServer

Ça m’arrive de temps en temps lorsque le script retourne une erreur. La commande prend ainsi la valeur zéro. J’ai pas mal lutté (plusieurs années) pour trouver la bonne ligne de commande afin ne pas remonter de valeur lorsqu’il y a une erreur de lecture.

Voici mon script

#!/bin/bash
device=$1

value=`(owread /$device/temperature 2>&1 | tee)`
error="ServerRead: Data error on /$device/temperature"

if [ "$value" == "$error" ]
then
    echo -n 85
else
    echo -n $value
fi

En cas d’erreur, il retourne un message précis. Et dans ce cas, la valeur 85°C est renvoyée.
Ensuite, dans la gestion des valeurs, je filtre la valeur 85, ainsi il n’y a pas de nouvelle valeur erronée.

Au lieu de retourner la valeur 85°C avec echo -n 85, on pourrait aussi retourner le message d’erreur avec echo -n $error mais il faut passer la commande en Autre au lieu de Numérique. C’est sympa de lire le message « ServerRead: Data error on /$device/temperature » en cas de souci mais on perd le graphique. Ça 2 scripts et il faut doubler la lecture des sondes, bof !

Bonsoir et merci Domatizer

Lorsque j’aurai un peu de temps de je regarde

Super merci

Bonsoir, comment trouver le chemin d’accés ?

Tes lignes de commandes m’ont l’air bien compliquées.

Mon tuto pour la clé USB DS9490

Installer de OW Server
sudo apt install owfs ow-shell

Editer le fichier de configuration
sudo nano /etc/owfs.conf

Décommenter la ligne

# USB device: DS9490
server: usb = all

Redémarrer le service pour prendre en compte les modifications
sudo systemctl restart owserver.service

Vérification du service
sudo systemctl status owserver.service

Test
owdir

Puis
owread /28.XXXXXX000080/temperature

Enfin appliquer le script de mon post précédent dans Jeedom