Vloersensor

Problemen, Tips of tricks met ETS programmatie post je hier.
prensel
Berichten: 19
Lid geworden op: zo 20 jan 2013, 15:21

Arduino metering en HomeServer met bijv 1Wire

Bericht door prensel » za 02 feb 2013, 09:40

In navolging op mijn vorige post over vloersensoren heb ik een kleine wijziging in mijn systeem aangebracht.
In eerste instantie had ik de 1Wire sensoren in parasite modus staan maar daar ben ik van terug gekomen. Voor korte afstanden werkt dat prima maar omdat ik onlangs een 10-tal extra sensoren toegevoegd heb kwam ik in de problemen.
Ik heb het systeem daarom omgebouwd naar gevoede sensoren met Arduino datalogging naar HomeServer.

Hoe zit het nu:

De DS18B20 sensoren zijn ieder voorzien van een stuk CAT5 netwerkkabel waarbij je drie draden gebruikt en aan het uiteinde een RJ45 stekker gemonteerd zit. De lengte kun je of standaard op 1, 3 of 5 meter houden of gewoon naar wat je nodig hebt.
Je kan deze kabels of zelf maken of een netwerkkabel van geschikte lengte opofferen door een stekker er af te knippen.
De blauwe draad verbind je met pin 2 (DQ) van de DS18B20 sensor, de blauw/wit met pin 1 (GND) blauw en dan OF de oranje draad OF de groene draad met pin 3 (Vdd) van de sensor. Let op de keuze die je hier maakt want dat bepaalt de verdere opbouw van je 1-wire netwerk. Er is niet echt een standaard over welke draad nu de Vdd zou moeten zijn en de ene schrijft pin 2 voor van de RJ45 stekker en de ander pin 6. Beide worden gebruikt voor een +5V signaal. De andere draden kun je afknippen en gebruik dan een krimpkousje om alles netjes af te werken. Je kunt steeds vaker 1wire sensoren kopen met reeds aangezette kabel en RJ45 stekker maar die zijn wel een stuk duurder.

Als master gebruik ik nu een Arduino Ethernet (compatible). Ik heb op pin 8 van de Arduino en de +5v en GND ook weer een stuk CAT5 kabel bevestigd met RJ45 stekker. Gebruik dezelfde kleuren als hierboven genoemd. Zet over de pin8 en de Vcc een 4k7 weerstandje anders werkt het niet met de 1Wire sensoren.

De RJ45 stekkers zijn dus allemaal op dezelfde manier bedraad en kun je nu met RJ45 splitters op elkaar aansluiten. 2op1 splitterblokjes kun je voor een paar euro makkelijk kopen en ik gebruik ze als aftakkers. Dus 1 stekker als invoer, 1 stekker als doorgaand naar de volgende splitter en de laatste dan als aftakker naar de sensoren. Heb je meerdere sensoren vlakbij elkaar zitten dan kun je evt 1op4 of 1op6 splitters gebruiken.

Het programma in de Arduino is relatief eenvoudig. Het maakt via DHCP automatisch verbinding met je netwerk en gaat daarna periodiek, in mijn geval elke 10 seconden, alle sensoren zoeken. Van iedere gevonden sensor wordt dan de waarde uitgelezen en dmv een UDP pakketje op het netwerk gezet richting de HomeServer. De inhoud van ieder UDP pakketje is een text regel zoals "OneWire Sensor: 286DD169020000: 21.5" In de HomeServer maak je per sensor nummer een ontvangregel aan via 'Communication IP/EIB telegram [reception]' In het tabblad From kies je voor UDP, poort 9988 en bijv 192.168.1.0 / 255.255.255.0 als verzendende netwerk.

In het tabblad Receive definieer je 3 blokken, als eerste 'Any desired data', dit om evt rommel op de lijn te negeren.
Als tweede blok kies je 'Text' met Value ' OneWire Sensor: 286DD169020000:' , dit is om de juiste UDP pakket te detecteren
En als derde blok kies je de bestemming 'Value as plain text' en kies je het GroepAdres. Hierbij wordt dan de waarde volgend op het vorige blok in het opgegeven GA geplaatst. Eventueel kun je in het tabblad Commands nog een extra actie uit laten voeren, bijv knipper een lamp als er een pakketje binnenkomt.

De mogelijkheden zijn vrijwel onbegrensd want behalve temperaturen kun je natuurlijk ook nog andere signalen op deze manier doorsturen naar de HomeServer.

Via je webbrowser HS/debug list kun je bij Event Empfang zien of het allemaal goed verloopt.

747driver
Berichten: 1354
Lid geworden op: za 19 feb 2011, 10:06

Re: Vloersensor

Bericht door 747driver » zo 03 feb 2013, 00:18

Je kan deze kabels of zelf maken of een netwerkkabel van geschikte lengte opofferen door een stekker er af te knippen.
Of een netwekkabel doormidden knippen en je hebt er 2.
Ben van plan bij de vloerverwarming verdeler wat sensors te plaatsen en deze met netwerkkabel aan te sluiten op een gesloten patch paneel.
Gezien het aantal sensoren lijkt me dat een nettere oplossing dan het gebruik van een groot aantal splitters.
Met deze kabel markeerders kan je dan makkelijk met een lijstje bijhouden wat het adres is van de sensoren.

prensel
Berichten: 19
Lid geworden op: zo 20 jan 2013, 15:21

Re: Vloersensor

Bericht door prensel » zo 03 feb 2013, 12:39

"Markeerders van 0 t/m 9"

gaat niet werken want de adressen zijn in HEX ;-)

747driver
Berichten: 1354
Lid geworden op: za 19 feb 2011, 10:06

Re: Vloersensor

Bericht door 747driver » zo 03 feb 2013, 13:29

Werkt wel met een lijstje in een spreadsheetje of zo.
Kan dan max 100 sensoren markeren, lijkt me voorlopig wel voldoende ;)

747driver
Berichten: 1354
Lid geworden op: za 19 feb 2011, 10:06

Re: Vloersensor

Bericht door 747driver » zo 03 feb 2013, 14:20

Ben jouw UDP pakketjes methode eens aan het uitproberen en het werkt!
Communication - IP/EIB telegram (reception) - New UDPtest
Tabje From: UDPtest, UDP, 1234, 192.168.1.114 (IP van laptop), 255.255.255.0
Tabje Receive: 3 data blocks: Any desired data, Text (UDPtest), Value as plain text, Communication object "UDPtest txt"
In QC config op m'n testpagina een functie Date toegevoegd met als Date een lege dummy text en Als time het "UDPtest txt" communicatie object.

In Terminal (OSX) "nc -u 192.168.1.201 1234" intikken en op de volgende regel bv UDPtest12345
Dan verschijnt op m'n testpagina op de iPad (Gira app) bij UDPtest "12345".

Ben een volledige netwerk noob en heb de volgende vraag.
M'n netwerk begint met 192.168.1
Zie dat jij 192.168.1.0 als verzendend netwerk gebruikt.
Dat lijkt bij mij niet te werken.
Alleen wanneer ik het IP adres van de laptop waarop ik nc (netcat) heb draaien invul als sender IP or network werkt het.
Klopt dat of moet het toch iets anders zijn?
Laatst gewijzigd door 747driver op zo 03 feb 2013, 14:59, 1 keer totaal gewijzigd.

747driver
Berichten: 1354
Lid geworden op: za 19 feb 2011, 10:06

Re: Vloersensor

Bericht door 747driver » zo 03 feb 2013, 14:48

Ah, met 192.168.1.1 lijkt het wel te werken.

prensel
Berichten: 19
Lid geworden op: zo 20 jan 2013, 15:21

Re: Vloersensor

Bericht door prensel » zo 03 feb 2013, 20:58

Het is de combi netwerk en masker wat bepaald welke ontvangen worden.
Met een netmasker van 255.255.255.0 zijn alleen de 1e 3 getallen van het ip adres van belang.

747driver
Berichten: 1354
Lid geworden op: za 19 feb 2011, 10:06

Re: Vloersensor

Bericht door 747driver » zo 03 feb 2013, 22:36

Ok, de reden dat het met 192.168.1.0 in eerste instantie niet werkte was het feit dat ik met nc een te kort pakketje verstuurde.
Haal meerdere temperaturen gelijktijdig op en als het aantal niet overeenkomt met het aantal data blocks in het Receive tabje dan gebeurt er niets.

Heb je een specifieke reden om per individuele sensor een UDP pakketje op het netwerk te zetten?
Zou denken dat je veel minder overhead kwijt bent met het versturen van meerdere waarden in 1 pakket.

prensel
Berichten: 19
Lid geworden op: zo 20 jan 2013, 15:21

Re: Vloersensor

Bericht door prensel » ma 04 feb 2013, 22:52

De Arduino scanned per keer de 1wire bus en stuurt van elk gevonden sensor de waarde door.
Als ik een sensor toevoeg komt deze dus automatisch in willekeurige volgorde bij de homeserver aan.

Ik hoef in de HS dus alleen maar per sensor een nieuwe regel toe te voegen, de volgorde maakt daarbij niet uit.
Zou ik dat in een soort van een verzamelregel doen dan gaat dat mis als bijv een sensor een keer niet antwoord, dan gaat de toewijzing op volgorde van de daarop volgende sensoren fout.

747driver
Berichten: 1354
Lid geworden op: za 19 feb 2011, 10:06

Re: Vloersensor

Bericht door 747driver » ma 04 feb 2013, 23:42

Ok duidelijk.
Die toewijzing op volgorde gaat niet fout indien je na iedere temperatuur een separator invoegd dmv een blocktype Text.
Bv "S05=" voor sensor #5
Het is idd wel zo dat niets van het pakket wordt gebruikt indien er een foutje in zo'n separator blokje zit.
Vind afzonderlijke pakketjes met detectie tekst (OneWire Sensor: gevolgd door family code en serienummer) en dan de temperatuur wel een goeie.
Zoveel busverkeer produceert dat natuurlijk niet ook al zou je 50 sensoren gebruiken en die iedere 5s inlezen.

Plaats reactie