Krachtig zelfstandig domoticasysteem - Pi, Sonoff, ESP8266 en Node-Red - Ajarnpa
Krachtig zelfstandig domoticasysteem - Pi, Sonoff, ESP8266 en Node-Red - Ajarnpa

Video: Krachtig zelfstandig domoticasysteem - Pi, Sonoff, ESP8266 en Node-Red - Ajarnpa

Video: Krachtig zelfstandig domoticasysteem - Pi, Sonoff, ESP8266 en Node-Red - Ajarnpa
Video: Vrijheid: het groepsdenken en het zelfstandige denken 2025, Januari-
Anonim
Krachtig zelfstandig domoticasysteem - Pi, Sonoff, ESP8266 en Node-Red
Krachtig zelfstandig domoticasysteem - Pi, Sonoff, ESP8266 en Node-Red

Deze gids zou je naar het eerste honk moeten brengen waar je een lamp of een apparaat aan/uit kunt zetten via elk apparaat dat verbinding kan maken met je lokale netwerk, en met een geweldige aanpasbare webinterface. De mogelijkheden voor uitbreiding/toevoeging van functies zijn enorm, waaronder het verzenden van e-mails, twitterberichten, het uitlezen van sensoren (bijv. temperatuur). U kunt eenvoudig regels instellen, b.v. – als de temperatuur om 23:00 uur onder de 15C is, zet u de elektrische deken 30 minuten aan. Het systeem gebruikt het MQTT-protocol met TCP dat aanzienlijk betrouwbaarder is dan UDP - dat verrassend genoeg wordt gebruikt door sommige commerciële domotica-apparaten. Zodra het harde werk van het opzetten van het systeem, zoals hier beschreven, gedaan is, kan het plezier beginnen. Node Red biedt een fantastische gebruikersinterface die intuïtief, snel en eenvoudig in te stellen is en geweldige mogelijkheden biedt.

Het resultaat is een krachtig domoticasysteem dat volledig in eigen beheer is en volledig op een lokaal netwerk staat. Veel van de systemen die op Instructables worden getoond, werken met cloudgebaseerde servers en vormen daarom een beveiligingsrisico en kunnen een abonnement vereisen. Deze zijn eenvoudiger in te stellen, maar hebben een hoger beveiligingsrisico en mogelijk hogere kosten. Ik moet hieraan toevoegen dat men een VPN (virtueel particulier netwerk) op de Pi kan instellen om een veilige verbinding met het thuisnetwerk/systeem mogelijk te maken als toegang van buitenaf nuttig zou zijn (Google Pi OpenVPN voor instructies).

Dit systeem vereist herprogrammering van Sonoff-apparaten met een geweldig open source-systeem genaamd Sonoff-Tasmoda. Dit kan met een speciale Arduino setup en een USB naar serieel converter. De Sonoff-apparaten gebruiken de ESP8266 Wi-Fi-chip, zodat u ook uw eigen apparaten kunt maken met ESP8266-modules of ze op andere items kunt monteren om draadloze connectiviteit te leveren.

De grootste taak is het opzetten van een Raspberry Pi als hub. Dit voert de MQTT-broker (of server) uit die de communicatie met de aangesloten apparaten beheert. De Pi heeft ook een systeem genaamd Node-Red dat berichten en gegevens kan onderscheppen en opdrachten kan uitvoeren, zoals wanneer de elektrische deken moet worden ingeschakeld. Node-Red biedt ook een interface om de webpagina te bedienen waarop u kunt inloggen via smartphone/tablet/pc/laptop, om te zien wat er aan de hand is en om handmatig schakelen van lichten en dergelijke mogelijk te maken.

Mijn doel met deze instructable is om elke stap voldoende gedetailleerd te geven zodat een beginner het systeem kan laten werken.

De stappen zijn:

  • Laad een Pi met Rasbian Stretch
  • Functies bijwerken en toevoegen aan Node-Red
  • Installeer de Mosquitto MQTT-makelaar
  • Stel de Arduino-omgeving in voor het uploaden van de Sonoff-Tasmota-firmware
  • Een Sonoff-schakelaar opnieuw programmeren
  • De Node-Red-interface instellen
  • Test het werkt allemaal.

Hardware die je nodig hebt:

  • Raspberry Pi en voeding (en toetsenbord en monitor voor eerste installatie) (model B hier gebruikt)
  • Sonoff-schakelaar
  • USB seriële converter
  • Optioneel - ESP-ontwikkelbord zoals de NodeMCU.

Mijn ervaring met de Raspberry Pi is dat het opzetten van iets aanzienlijk meer pijn lijkt te veroorzaken dan je ooit voor mogelijk zou kunnen houden met dingen die niet werken of vastlopen op een triviale stap waar de uitleg beter had kunnen zijn. De forums krijgen niet altijd advies dat werkt! Ik vond verschillende routes die om de een of andere reden gewoon niet werkten. Dit kostte 3 dagen! Ik veegde toen alles af en begon opnieuw en voltooide in minder dan een (lange) dag. Deze gebruikte echter de oudere Raspian Jessie. Hierna vond ik een manier om de huidige en recent uitgebrachte versie (Stretch) te gebruiken en deed het allemaal opnieuw. Deze handleiding maakt het kopiëren en plakken van instructies in de Pi mogelijk. Je moet dus binnen een paar uur klaar zijn. Hoe dan ook, ik hoop dat je hierdoor sneller op de leercurve komt en met veel minder pijn. Geloof me, het is het waard voor het eindresultaat.

Stap 1: Laad een Pi met Rasbian Stretch

Dit zou vrij eenvoudig moeten zijn. Begin met een 8Gb of 16Gb SD-kaart. Download de laatste versie van:

www.raspberrypi.org/downloads/

De rode draad hier gaat ervan uit dat de volledige versie is geladen. U kunt echter de lite-versie gebruiken om ruimte te besparen. Als u Raspbian Stretch Lite gebruikt, gaat u door deze stap en gaat u aan het einde naar stap 9.

Het uitpakken van het gedownloade bestand geeft een map met het.img-bestand. 7Zip wordt aanbevolen voor Windows (en The Unarchiver Mac). De afbeelding moet op de SD-kaart worden gebrand, maar er moet een speciaal programma worden gebruikt omdat het bestandssysteem niet compatibel is met Windows. De aanbevolen software heet Etcher en kan worden gedownload van:

etcher.io/

De instructies voor Etcher staan op hun website en kunnen nauwelijks eenvoudiger. Selecteer de afbeelding en de schijf en klik op Flash.

Nu met onze geflitste SD-kaart met kan de Pi draaiende worden.

Als u het IP-adres weet dat uw Pi gebruikt of het graag vindt door u aan te melden bij uw router, kunt u de noodzaak voor toetsenbord en monitor vermijden en onmiddellijk SSH gebruiken. Voeg gewoon een leeg bestand met de naam SSH toe aan de SD-kaart, plaats het, maak verbinding met Ethernet en schakel het in. Volg anders de onderstaande gids.

Sluit de Pi aan op internet, scherm, muis en toetsenbord en sluit hem aan op stroom. Het eerste dat we zullen doen, is SSH inschakelen, zodat we het grootste deel van de installatie comfortabel op een pc kunnen doen. Het kan natuurlijk direct worden gedaan, maar het helpt enorm om deze handleiding te kunnen volgen op hetzelfde apparaat als degene die de Pi bestuurt en kopiëren en plakken voor de meeste instructies. Ook in mijn geval is mijn pc-werkstation mooi en comfortabel, maar ook niet groot genoeg voor een pi.

Er is een handleiding voor een groot deel van het werk aan een YouTube-video. Hier ben ik begonnen. U kunt de video samen met deze instructies uitvoeren. Maar toen ik het proces opnieuw doorliep terwijl ik dit schreef, vond ik het gemakkelijker om gewoon de instructies hier te volgen. Er zijn enkele belangrijke afwijkingen. Er zijn ook enkele secties waar ik heb geadviseerd de video te volgen in plaats van de stappen hier op te sommen. Ik zou echter aanraden ernaar te kijken om inzicht te krijgen in MQTT, Node-Red en het brede installatieproces. De video duurt 38 minuten, dus maak het jezelf gemakkelijk. De video begint met te laten zien wat Node Red kan doen, en behandelt vervolgens de Pi-installatie en -configuratie, gevolgd door het upgraden van Node Red en als laatste het installeren van Mosquitto. Belangrijkste timings voor het geval je terug wilt naar een sectie:

00:00 Inleiding tot video

03:00 Knooppunt Rode demonstratie

14:14 Dashboarditems importeren in Node Red

21:05 Pi initiële setup, inclusief SSH

23:35 Installatie van Node Red ondersteunende code

27:00 Inleiding tot MQTT

29:12 Mosquitto (MQTT) installatie (Opmerking werkt alleen voor Raspian Jessie)

33:00 Node Red voorbeelden

Ik zal de commando's vet cursief weergeven (in plaats van ""). Deze opmaak wordt genegeerd wanneer u ze kopieert en in de Pi plakt.

De introductie tot Node Red geeft je een idee van wat het systeem kan en geeft een beeld van waar we zullen eindigen.

De YouTube-video is op:

Volg de installatieprocedure van 21:05 tot 23:35. Merk op dat de standaard login gebruiker: pi en wachtwoord: framboos is. Zoek het IP-adres van de pi voordat u opnieuw opstart. Klik op het pictogram 'pijl omhoog + omlaag' in de bovenste balk van het bureaublad of voer de volgende instructie in het terminal-/terminalvenster in:

sudo ifconfig adres

Noteer vervolgens het IP-adres na: inet addr:. Het heeft de vorm 192.168.x.y

Noteer dit adres en start opnieuw (voer in: sudo shutdown -r now)

De sleutel op dit punt is dat SSH is ingeschakeld en dat men een link naar de Pi vanaf een pc kan opzetten (Mac en Linux bevatten SSH-interfaces). Een goed programma om dit te doen is een gratis download genaamd PuTTY die ook als seriële interface kan worden gebruikt en voor Telnet kan. Putty is verkrijgbaar bij:

www.chiark.greenend.org.uk/~sgtatham/putty…

Download en installeer PuTTY.

Nu de Pi opnieuw is opgestart, start u PuTTY en voert u het eerder vermelde IP-adres in. Zie voorbeeld hieronder:

Klik nu op Openen

Na inloggen als: voer pi. in

Voer vervolgens uw wachtwoord in.

Volg nu de instructies hier en start eventueel de video vanaf 23:35. U kunt in de meeste gevallen kopiëren en plakken. Markeer de tekst en gebruik ctrl+C om te kopiëren. Klik vervolgens met de rechtermuisknop in PuTTY om te plakken. Soms verschijnt de tekst niet meteen, dus wacht een paar seconden. Als u twee keer invoert, gebruikt u backspace om de tweede invoer te verwijderen. Druk op enter om elke instructie uit te voeren.

sudo raspi-update

Ik kreeg een opdracht niet gevonden en negeerde deze en de volgende instructie voor afsluiten / opnieuw opstarten:

sudo shutdown -r nu

sudo apt-get -y update

sudo apt-get -y upgrade

Dit duurt even…..

sudo apt-get autoremove

sudo apt-get -y update

sudo shutdown -r nu

Op dit punt hebben we het Pi-besturingssysteem geladen en bijgewerkt, klaar voor de volgende stap.

Stap 2: Update en voeg functies toe aan Node-Red

De PuTTY-verbinding is verloren gegaan door de herstart aan het einde van de vorige stap. Sluit PuTTY dus af en nadat u hebt gewacht tot de Pi is opgestart, logt u opnieuw in zoals voorheen.

Ik ben overgestapt op een eenvoudigere en betrouwbaardere methode om Node-Red te laden - volgens de aanpak op https://nodered.org/docs/hardware/raspberrypi. Dit gebruikt een script en zal Node-Red installeren of upgraden - dus de aanpak is hetzelfde als werkend vanuit de volledige of lite-versies van Raspbian Stretch. Dus voer in:

bash <(curl -sL

Voer Y in wanneer daarom wordt gevraagd (tweemaal). Dit script laadt ook bestanden die nodig zijn om automatisch starten van Node-Red in te schakelen.

Dus op dit moment hebben we onze pi geladen en bijgewerkt en met de updates die nodig zijn voor Node Red. Het kan geen kwaad om voor de volgende fase een herstart te doen.

sudo shutdown -r nu

Stap 3: Mosquitto MQTT-installatie

Als je dat nog niet hebt gedaan, is het de moeite waard om vanaf 27:00 uur de video-introductie tot MQTT op de video te bekijken.

Hier moeten we een andere weg inslaan. De procedure die in de video wordt beschreven, werkt alleen voor de oudere Jessie-versie van Raspian. Er is een discussie op de muggensite, maar er wordt geen duidelijk resultaat getoond en daarom blijft het bij een eenvoudigere en veiligere route.

Log dus in met PuTTY en voer het volgende in:

sudo apt-get update

sudo apt-get install mosquitto mosquitto-clients

Y

sudo /etc/init.d/mosquitto stop

sudo /etc/init.d/mosquitto start

De laatste twee instructies stoppen en starten mug en laten zien dat onze MQTT-makelaar werkt.

Open voor een snelle test nog twee PuTTY-sessies en meld u bij elk aan.

U zult inmiddels weten dat MQTT werkt door het apparaat dat gegevens nodig heeft om u op een 'onderwerp' te abonneren. De makelaar stuurt alle gegevens met hetzelfde 'onderwerp'. Vervolgens publiceert het apparaat dat gegevens/instructies wil verzenden dit naar de makelaar met hetzelfde 'onderwerp'.

Dus voer in één PuTTY-sessie het volgende in:

mosquitto_sub -d -t hallo/wereld

Dit is een instructie om u te abonneren op het onderwerp: hallo/wereld.

Vul in de andere in:

mosquitto_pub -d -t hello/world -m "Hallo vanaf Terminal-venster 2!"

Dit is een publicatie-instructie met hetzelfde onderwerp met een bericht. De tekst: "Hallo vanuit Terminal-venster 2!" zou nu in de andere terminal moeten verschijnen.

Goed gedaan om zo ver te komen. We hebben de Pi nu geladen en bijgewerkt met updates die nodig zijn voor Node-Red en met de mug MQTT-makelaar geïnstalleerd en getest. Vanaf nu wordt het leven makkelijker een beetje leuker. Sluit de twee PuTTY-sessies die zijn gebruikt voor de MQTT-test.

Stap 4: De Node Red-interface instellen

Eerst moeten we Node Red starten. Voer de instructie in:

node-red-pi --max-old-space-size=256

Wacht tot het aan de gang is en je ziet de tekst 'Gestarte stromen'.

Open nu een browser, ik gebruik Chrome en voer het eerder genoteerde pi-IP-adres in, gevolgd door: 1880, d.w.z. zoiets als 192.168.0.8:1880

U zou nu de programmeerpagina van Node Red in beeld moeten hebben, zoals hieronder:

Je kunt nu de Node Red-voorbeelden volgen vanaf 33.00 uur of direct doorgaan naar een klein beetje extra instellingen en de eerste stroom laden die de link naar MQTT laat zien en klaar zijn om onze switch te rijden.

De aanvullende configuratie die nodig is, is om de dashboarditems toe te voegen die een webinterface mogelijk maken.

Deze worden getoond op de video om 14:14.

Volg de instructies om node-red-dashboard te laden.

Nu kunnen we een beetje spelen en laten zien dat MQTT werkt en wordt bestuurd door Node-Red. Dit staat niet op de video, maar is de sleutel tot dit project. U kunt ofwel mijn instructies volgen en/of de stromen importeren uit het bijgevoegde NRtest1.txt-bestand.

Voeg eerst een input inject node en een output mqtt node toe en koppel ze aan elkaar.

Dubbelklik op het injecteerknooppunt (dat in eerste instantie een tijdstempel is). Gebruik in het gedeelte Payload de twiddly om naar string te veranderen en voer in: Hallo van mij. Laat het onderwerp leeg omdat we dit kunnen invoeren in de MQTT-node. Klik op Gereed

Dubbelklik nu op het MQTT-knooppunt. Klik op het potloodpictogram rechts van het gedeelte Server. Dit opent een nieuw dialoogvenster. Typ: localhost in het gedeelte Server. Klik op Toevoegen. Nu, terug in het knooppunt Edit mqtt out, voer je ons onderwerp in de Onderwerp sectie in: hallo/wereld. Stel QoS in op 1. Klik op Gereed. Klik nu op Implementeren. Je zou een groene klodder en 'verbonden' moeten zien onder het mqtt-knooppunt.

Voeg nu nog twee knooppunten toe - invoer mqtt en uitvoer debug, en verbind deze met elkaar. Dubbelklik nu op het invoer-mqtt-knooppunt en voer hello/world in het onderwerpgedeelte in. De server zou al localhost:1883 moeten tonen. Stel QoS in op 1. Klik op Gereed. Klik vervolgens op Implementeren en klik op het tabblad foutopsporing in het rechterdeelvenster. Klik nu op het grijze vierkantje links van de ‘Hallo van mij’ inject node. Dit stuurt de tekstlading naar de MQTT-makelaar met het onderwerp hallo/wereld. De broker weet dat het mqtt-invoerknooppunt zich heeft geabonneerd op hetzelfde onderwerp en stuurt dus de payload door. Het mqtt-invoerknooppunt stuurt dit vervolgens naar het debug-tabblad (RHS) en de tekst 'Hallo van mij' zou moeten verschijnen.

Dit vinkt een ander vakje aan, omdat Node Red met onze MQTT-makelaar praat. Merk op dat Node Red slechts een klant van de makelaar is - zoals de Sonoff-apparaten die we later zullen verbinden. Het maakt echter geavanceerde automatisering mogelijk en biedt een geweldige gebruikersinterface.

Nu kunnen we een paar kleine wijzigingen aanbrengen en de stromen instellen voor onze Sonoff-schakelaar.

Dus verwijder het invoerinjectieknooppunt (klik om te markeren en druk op de delete-toets). Voeg nu een schakelaar toe vanuit het dashboardgedeelte en sluit deze aan op de mqtt-uitgang. Dubbelklik schakelaar. Klik op het potlood rechts van Groep. Voer in Naam: Licht. Klik vervolgens op het potlood rechts van Tab en ga naar het gedeelte Naam: Lounge. Klik op Toevoegen/bijwerken en nogmaals op Toevoegen/bijwerken. Nu, terug in het schakelknooppunt Bewerken, stelt u de aan en uit Payloads in. Gebruik de twidlys om string te selecteren en voer ON in voor de On-payload en OFF voor de OFF-payload. Klik op Gereed

Ga nu naar elk van de mqtt-knooppunten en verander het onderwerp in cmnd/sonoff/POWER. Als u kopieert en plakt, controleer dan of u aan het einde geen spatie hebt toegevoegd. Dit is een ander onderwerp en zal niet werken met de Sonoff. Het vinden van een verdwaalde ruimte kan een uur of zo duren - geloof me! Ik ging ook naar het dashboard>Thema en selecteerde: Donker. Klik op Implementeren en selecteer het tabblad foutopsporing.

Open nu een nieuwe browsersessie in een nieuw venster en verklein deze als een mobiele telefoon via de Node Red-sessie. Voer het adres in: uw Pi IP-adres:1880/ui/#/0 d.w.z. zoiets als 192.168.0.8:1880/ui/#/0. Je zou een scherm met Lounge en Light moeten zien en schakelen. Klik op de schakelaar aan en vervolgens uit. Het foutopsporingsvenster moet de AAN- en UIT-payloads tonen. Nu als je wilt ook inloggen via een mobiel ook. Merk op dat de schakelaarpositie gesynchroniseerd is. Het maakt niet uit dat onze Sonoff nog niet is aangesloten. Wanneer dit het geval is, zal het, door zich te abonneren op het onderwerp, het bericht/de nuttige lading oppikken en ernaar handelen.

Een laatste kleine stap is om Node Red automatisch te laten starten nadat de Pi is opgestart.

Node Red heeft een handleiding op:

De benodigde bestanden zijn echter al geladen, dus er is geen installatie vereist.

Om vervolgens Node-RED automatisch te laten werken bij elke keer opstarten en bij crashes, voer je in (open PuTTY-sessie):

sudo systemctl enable nodered.service

Als u dit ooit moet uitschakelen, voert u het volgende in:

sudo systemctl schakel nodered.service uit

Sluit nu de pi af met sudo shutdown nu en verwijder de stroom.

Hierdoor is onze Pi nu vergrendeld en geladen, klaar voor actie. We hebben onze pc/mobiele telefoon die is verbonden met Node Red en deze praat met onze MQTT-server. Dit is een lange weg geweest en een schouderklopje waard. Goed gedaan. Ik vond de volgende, Arduino-bit, een stuk eenvoudiger!

Stap 5: Het Arduino-systeem instellen voor het herprogrammeren van Sonoff-apparaten

Alle informatie om dit te doen staat op de Sonoff-Tasmota GitHub. Het enige deel waar ik moeite mee had, was de Topic-tekst – maar ik heb je op sluwe wijze zover gekregen om dit al in te voeren!

Ga naar

U vindt de installatie-instructies op het tabblad Wiki in het gedeelte Uploadtools:

In plaats van elke stap te doorlopen, zal ik alleen de belangrijkste aspecten noteren waarvan ik dacht dat ze belangrijk waren of waarop ik vastliep.

De instructies zijn goed, maar hebben veel aandacht voor detail nodig. Ik struikelde over de behoefte aan een ESP8266-map in een map die zich in een andere map met de naam ESP8266 bevond en miste daarom twee niveaus.

Ik volgde de aanbeveling voor een geheel aparte Arduino-setup. Ik heb een nieuwe map gemaakt met de naam 'ArduinoSonoff' die los staat van mijn bestaande Arduino-map. De opstelling is behoorlijk geavanceerd en daarom is het een heel goed idee om het gescheiden te houden. Als dit je eerste Arduino-configuratie is, zorg er dan voor dat je deze een tweede keer installeert in een 'Arduino'- of andere map voor ander Arduino-werk, inclusief werk aan ESP8266's.

Download de nieuwste Arduino IDE van https://www.arduino.cc/en/Main/Software. Pak het bestand uit in uw nieuwe map.

De instructies omvatten het downloaden van het Sonoff-Tasmoda-systeem van de hoofdpagina van https://github.com/arendst/Sonoff-Tasmota via: Clone of Download>Download ZIP. Pak het bestand uit in uw nieuwe map.

Volg de instructies zorgvuldig. Ik heb de sectie Optioneel: Bereid je voor op OTA-upload niet gedaan. We laten dit voor een andere dag.

Start nu de Arduino IDE (dubbelklik op arduino.exe). Laad de Sonoff-Tasmota-schets via Bestand> Schetsboek> sonoff. Het is niet nodig om bewerkingen uit te voeren. Alle instellingen worden gedaan via een seriële verbinding nadat de firmware is geladen. Deze worden opgeslagen in EEPROM. Zo kan de firmware worden bijgewerkt en kunnen alle instellingen behouden blijven. Dit is best slim spul. U kunt hier echter een paar stappen vermijden door naar het user-config.h-bestand te gaan en uw wifi-SSID en wachtwoord en MQTT_HOST in te voeren (vervang 'domus1' - tweede referentie, door uw Pi IP-adres). Later wilt u misschien ook een MQTT-gebruiker en wachtwoord invoeren. Controleer voor het downloaden de bordinstellingen onder Tools. Deze hebben een aantal wijzigingen nodig om te voldoen aan de vereisten die in de Wiki zijn uiteengezet. Klik nu op compileren (vinkje aan). Het zou goed moeten compileren. Als dit niet het geval is of als de vereiste bordinstellingen niet beschikbaar zijn, ga dan terug en controleer elke stap van de installatie.

Stap 6: Een Sonoff-schakelaar herprogrammeren

We zijn nu klaar om te downloaden. In dit stadium kan men ofwel rechtdoor gaan en een Sonoff-schakelaar flashen of men kan eerst een ESP8266-module flashen. Ik deed het laatste, deels omdat mijn schakelaars nog niet waren aangekomen (net aangekomen terwijl ik dit typ!) Ik ben mij ervan bewust. Ik heb een paar NodeMCU-borden. Deze zijn eenvoudig aan te sluiten dankzij hun ingebouwde USB-naar-serieel-converter. De nodemcu-resetmethode werkt echter niet met dit systeem. Laat de Tools>Reset-methode dus op "ck" staan. Voer de normale handmatige flitsinstelling uit door de flitsknop (GPIO 0 naar aarde) ingedrukt te houden terwijl u Reset (Reset naar aarde) ingedrukt houdt. Ik weet niet zeker of dit een time-out heeft of misschien heb ik GPIO 0 niet lang genoeg laag gehouden, maar ik had verschillende pogingen nodig, waaronder dit terwijl de Arduino IDE aan het compileren was!

Als u de reacties wilt controleren, is de relaisuitgang D6 op NodeMCU-kaarten. Op ESP12's is dit GPIO 12. De LED-uitgang is D7 (NodeMCU) of GPIO 13 (ESP12's).

Sonoff-schakelaar.

WAARSCHUWING: Ik moet zeggen "maak in geen geval verbinding met het lichtnet als de behuizing open is". Houd er rekening mee dat de PCB (in ieder geval op de Sonoff Basic (in-line schakelaar) slechts 'enkele isolatie'-afstanden heeft tussen het laagspanningsgedeelte en het lichtnet. Dus moet men elk onderdeel van het Sonoff-circuit als netspanning beschouwen. De Sonoff- Tasmota GitHub toont aansluiting van een temperatuur- en vochtigheidssensor op een Sonoff S20. Ik zou dit niet doen vanwege isolatieproblemen. - dus als je dit wilt doen, koop dan een ESP12- of NodeMCU-module en stel deze afzonderlijk in met een goede dubbel geïsoleerde of geaarde voeding.

De Sonoff S20 plug-in switch is een goed startpunt omdat er geen netsnoer voor nodig is. Deze kan worden geopend door één schroef (onder de veiligheidszegel) te verwijderen en de behuizing open te wrikken. Op de onderstaande foto is te zien waar de tags zijn. Knijpen in de zaak op deze punten helpt.

USB seriële converter

Mijn favoriete converter is de FTDI-versie. Dit heeft echter niet voldoende capaciteit om aan de Sonoff 3.3v-behoeften te voldoen. De FTDI-specificatie zegt maximaal 50ma. Het op één na beste alternatief is er een met de CP2102-chip. Deze heeft echter een limiet van 100 ma die nog steeds niet genoeg is. Het is duidelijk dat velen deze converter direct gebruiken, maar er zijn ook meldingen dat het laden mislukt. Ik zou de tijd dat het is aangesloten beperken, omdat het onder de belasting zal opwarmen. Doe dit op eigen risico. De ideale oplossing is om ook een 3.3v-regelaar te hebben, b.v. een AMS1117 3.3. Ik heb een kleine PCB gemaakt om dit mogelijk te maken. Zie Programmeur voor Sonoff-apparaten.

Mijn volgorde voor het programmeren is als volgt:

Open de Arduino-IDE.

Controleer onder Tools of de instellingen zijn zoals op de Wiki.

Breng eventuele wijzigingen aan in user_config.h. Ik heb de Wifi SSID en het wachtwoord en het MQTT-makelaaradres en de tijdzone/zomertijdgegevens ingesteld.

Klik op 'verifiëren' om te controleren of het compileert OK.

Sluit de USB seriële converter (op zichzelf) aan op de pc. Noteer het poortnummer.

Koppel nu de USB-seriële kabel los van de pc en sluit deze aan op de Sonoff-schakelaar. Controleer of de massa- en 3v3-aansluitingen correct zijn (aarde is verbonden met het massavlak op de Sonoff-printplaat).

Houd de programmer vast zodat de contacten veilig zijn terwijl u ook op de knop drukt.

Steek nu de USB-kabel in de pc, controleer of het poortnummer correct is (in Extra) en klik vervolgens op downloaden.

Ik blijf de knop ingedrukt houden tijdens de programmering omdat ik de verbindingen niet wil verstoren.

Als u klaar bent, ziet u een scherm zoals hieronder:

Afbeelding
Afbeelding

De Sonoff heeft een paar stukjes informatie nodig om verbinding te maken met ons systeem: de wifi-SSID en het wachtwoord van het lokale netwerk, en het Pi IP-adres. Er zijn verschillende manieren om dit te doen, een daarvan is om het config.ino-bestand te wijzigen, zoals eerder vermeld. Als je een smartphone hebt kun je (na het weer in elkaar zetten van de schakelaar) redelijk snel 4 keer op de Sonoff-knop drukken om hem in een webserver-modus te zetten. De LED zal knipperen. Ik heb verschillende keren moeten proberen om dit werkend te krijgen. Zoek vervolgens op uw smartphone naar het nieuwe Sonoff-netwerk en maak verbinding. Er verschijnt een webpagina waar u de benodigde gegevens kunt instellen. Het Pi IP-adres gaat in hostnaam. Ik heb ook de tweede SSID en het wachtwoord gewijzigd in iets lang en in principe onbruikbaar.

Als alternatief kan het worden ingesteld via de seriële verbinding net na het laden. Open de Arduino Seriële Monitor (onder Tools).

Commando's om in te voeren:

SSID uwWiFiSSID

Wachtwoord yourWiFiPassword

MqttHost 192.168.x.y (PI IP-adres)

U kunt ook SSId1 en Password1 invoeren, gevolgd door iets lang en onbruikbaars om dit effectief uit te schakelen.

Nu kun je de Sonoff-schakelaar inpakken, Node-Red en het Node-red-dashboard openen en op de schakelknop klikken en naar het debug-tabblad kijken dat nu de reacties van de Sonoff moet bevatten. We hebben dus weer een belangrijke stap gezet: onze eerste switch wordt aangestuurd vanaf een pc/smartphone.

Tot nu toe hebben we veiligheid niet genoemd. Er is de mogelijkheid om versleutelde communicatie te gebruiken. Dit is vrij complex om in te stellen en waarschijnlijk meer geschikt wanneer een cloudgebaseerde makelaar wordt gebruikt. Er is ook de mogelijkheid om gebruikersnamen en wachtwoorden toe te voegen voor alle aangesloten apparaten en om anonieme gebruikers niet toe te staan. Dit is vrij eenvoudig in te stellen. En dus nu naar Beveiliging.

Stap 7: Beveiliging

MQTT staat gebruikersnamen en wachtwoorden toe voor elke klant. Dit is eenvoudig in te stellen. Het is waarschijnlijk gemakkelijker om eerst elk apparaat te hernoemen en vervolgens hun gebruikersnamen en wachtwoorden in te stellen. Dit kan via MQTT-commando's en Node-Red is waarschijnlijk de gemakkelijkste manier om deze te verzenden. Bepaal eerst een naamgevingsconventie. Een optie is om namen te baseren op locatie en functie. Vervolgens wilt u de naam (onderwerp) gebruikersnaam en het wachtwoord samen met het terugvalonderwerp opnemen. Merk op dat er ook een 'reset-optie' is om de Sonoff-instellingen terug te zetten naar de originele download (zie Wiki-gebruik>Knopfunctionaliteit).

Zet de pi aan en open na een paar seconden een browser naar Node-Red (IP-adres: 1880).

Stel in Node-Red een inject node in en koppel deze aan een mqtt output en zet de mqtt server op localhost. Laat onderwerp, gebruiker en wachtwoord leeg, aangezien we deze in de inject-node zullen instellen. Stel ook een mqtt-invoerknooppunt in en verbind dit met een foutopsporingsknooppunt zodat we de reacties kunnen zien. Stel de mqtt-invoernotitie in op localhost (zou al moeten zijn ingesteld) en voer +/+/+ in voor onderwerp zodat het al het verkeer opvangt.

Voer de volgende reeks instellingen in het injectieknooppunt in.

Controleer eerst de verbinding met

Onderwerp: cmnd/sonoff/Status

Bericht: 6

klik op 'Eenmaal injecteren bij start'. Aanwenden. We zouden debug moeten zien, inclusief 7 regels met gegevens van stat/sonoff/STATUS6

Enter Topic: cmnd/sonoff/Topic andMessage: loungelight. Aanwenden. Dit verandert de naam van de schakelaar van sonoff in loungelight

Het debug-tabblad zou moeten laten zien dat het apparaat opnieuw wordt opgestart met zijn nieuwe naam/onderwerp

Onderwerp: cmnd/loungelight/MqttUser

Bericht: loungelight

Klik op implementeren. Een debug zou moeten worden gezien vanuit stat/loungelight/RESULT met {“MtqqUser”:”loungelight”}

Onderwerp: cmnd/loungelight/MqttPassword

Bericht: loungelightPW (let op, wees fantasierijker dan dit!)

Wis het tabblad foutopsporing en implementeer.

Er zou een antwoord moeten zijn van stat/loungelight/RESULT met {"MqttPassword":"loungelightPW"}

Voer nu NodeRed en NodeRedPW in als gebruikersnaam en wachtwoord in het mqtt out-knooppunt. Dit gaat via het serverpotloodpictogram en het beveiligingstabblad in het geopende venster. Dit wordt automatisch gekopieerd naar de andere MQTT-knooppunten.

Controleer opnieuw met

Onderwerp: cmnd/loungelight/Status en bericht: 6. Aanwenden.

En dat de reactie wordt verzonden.

Dus op dit moment hebben we ons Sonof-apparaat hernoemd, zodat het naar cmnd/loungelight/……-onderwerpen luistert en op de MQTT-server inlogt met gebruikersnaam loungelight en wachtwoord loungelightPW. We hebben ook een gebruikersnaam en wachtwoord ingesteld voor Node-Red.

Vervolgens moeten we de MQTT-server van de mug vertellen om alleen clients met gebruikersnamen te accepteren en de gebruikersnamen en wachtwoorden op te geven die moeten worden geaccepteerd.

De werkwijze is:

  • Stop mug
  • Eigen configuratiebestand maken
  • Configuratiebestand bewerken
  • Wachtwoordbestand maken
  • Gebruikers/wachtwoorden toevoegen.

Log dus in met een nieuwe PuTTY-sessie en doorloop de volgende opdrachten:

sudo /etc/init.d/mosquitto stop

cd /etc/mosquitto/conf.d/

sudo nano mosquitto.conf Hiermee wordt de editor gestart.

Voeg regels toe:

allow_anonymous false

wachtwoord_bestand /etc/mosquitto/conf.d/passwd

vereisen_certificaat onwaar

Opslaan en afsluiten (Ctrl+X), Y, enter.

sudo touch passwd Hiermee wordt een wachtwoordbestand gemaakt en de volgende instructies voegen namen en wachtwoorden toe.

sudo mosquitto_passwd -b /etc/mosquitto/conf.d/passwd loungelight loungelightPW

sudo mosquitto_passwd -b /etc/mosquitto/conf.d/passwd NodeRed NodeRedPW

sudo /etc/init.d/mosquitto herstart

Let op: wanneer u een nieuw apparaat toevoegt, moet u ofwel de gebruiker en het wachtwoord invoeren via de seriële poort en deze toevoegen aan het wachtwoordbestand of tijdelijk het Mosquitto-configuratiebestand wijzigen en commentaar geven (voeg # toe aan het begin van de regel) de regels "allow_anonymous false " en "password_file /etc/mosquitto/conf.d/passwd" en reset deze vervolgens wanneer de details naar het apparaat zijn verzonden en zijn toegevoegd aan het wachtwoordbestand zoals hierboven.

We hebben de naam van de sonoff gewijzigd in loungelight en werken daarom het mqtt-uitgangsknooppunt (verbonden met de switch) bij om het onderwerp cmnd/loungelight/POWER te gebruiken.

Klik op Deploy en controleer of de mqtt-nodes 'connected' weergeven.

Probeer vervolgens de schakelknop en zoek naar de foutopsporing die aangeeft dat de Sonoff-schakelaar reageert. U zult merken dat het apparaat de wijziging toont met een onderwerp: stat/loungelight/POWER. Dus verander nu het invoerknooppunt dat was ingesteld op cmnd/sonoff/POWER naar stat/loungelight/POWER. We kunnen hiermee een hiaat in onze functionaliteit afdekken. Het systeem zoals aanvankelijk ingesteld, wordt gesynchroniseerd met alle aangemelde gebruikers, maar wordt niet gesynchroniseerd met schakelaarwijzigingen die zijn gemaakt door op de knop op de Sonoff-schakelaar te drukken. Sluit nu dus de uitgang van de stat/loungelight/POWER mqtt input node aan op de switch input (LHS). Dubbelklik nu op de schakelaar en verwijder het vinkje bij "if msg arrives on input, pass through to output". Dit brengt enkele nieuwe opties naar voren - selecteer 'schakelpictogram toont status van de invoer'. Aanwenden. Dus nu hebben we een goede feedbackloop. De positie van de dashboardschakelaar verandert altijd wanneer de Sonoff-schakelaar verandert, ongeacht waar de wijziging is gestart.

We hebben nu dus een veilig, op zichzelf staand domoticasysteem in gebruik en klaar voor uitbreiding naar wat u maar wilt. In het volgende gedeelte zal ik enkele van mijn experimenten tot nu toe bespreken en de uitdagingen die ik van plan ben aan te pakken.

Stap 8: Eerste stappen voor uitbreiding

Ik heb nog een Instructable Home Automation Sonoff-Tasmota Sensors LEDs Development Board die enkele van de verdere mogelijkheden van de Sonoff-Tasmota-firmware laat zien:

Temperatuur- en vochtigheidsmeting

Inbraakdetectie (schakelaaringang)

IR-afstandsbediening (voor tv's enz.)

LED-strings - zowel RGB als NeoPixel (afzonderlijk adresseerbaar)

I2C-sensoren

Voor het bovenstaande gebruik ik een ESP12F en een aangepaste PCB. Een NodeMCU en breadboard kunnen evengoed worden gebruikt. Dit maakt deze extra functies mogelijk zonder bedrading naar een Sonoff-apparaat, en is daarom een veel veiligere benadering. Met de temperatuur invoer heb ik mijn elektrische deken automatisering kunnen voltooien.

Muziek en internetradio kunnen eenvoudig worden toegevoegd. Dit opent opties om specifieke stations of albums op gezette tijden te laten verschijnen of misschien als reactie op het detecteren van een bezoeker (telefoon). Deze bijbehorende instructable is van hoge kwaliteit muziekspeler en internetradio met smartphonebediening. Aangezien dit ook wordt aangestuurd door Node-RED, zou het zelfs mogelijk moeten zijn om meer dan één geluidssysteem te hebben en MQTT-communicatie te gebruiken om ze aan te sturen.

Ik heb ook Node-Red verkend, inclusief het verzenden van e-mails en het maken van gesproken waarschuwingen. Het systeem kan ook detecteren wanneer u binnen of buiten bent - door het IP-adres van uw mobiele telefoon te pingen. Node-Red heeft ook toegang tot weer en nieuws - dus men kan zowel informatie toevoegen als automatiseren.

Er zijn een paar trucjes te leren - maar deze worden de tweede keer doodeenvoudig.

Een andere mogelijkheid is het toevoegen van een display aan de pi om het dashboard weer te geven. Dit is 'work in progress' - of met andere woorden, ik ben niet al te blij. Het scherm dat ik heb gekregen, is moeilijk in de portretmodus te draaien en de Chromium-browser is pijnlijk traag. Een alternatief zou zijn om een oude tablet op eBay op te halen en die te gebruiken. Ik kan het proberen met een Pi 2 en kijken of dat genoeg verbetering oplevert (model B dat voor deze ontwikkeling is gebruikt).

Ik hoop dat dit je op weg helpt en je fantasie de vrije loop laat. De potentiële reikwijdte is enorm. Indien nodig zou men zelfs de Sonoff-code voor andere sensoren kunnen aanpassen.

Over het algemeen ben ik verbaasd over wat dit systeem kan doen. Mijn oorspronkelijke doel was om gewoon op een betrouwbare manier een switch van een smartphone aan te sturen via een standalone systeem. Ik had visioenen gehad over het beheren van servers en clients en het schrijven van html voor een gebruikersinterface. Waar dit uiteindelijk op uitkwam, is dit ver vooruit, met meer veiligheid, uitstekende betrouwbaarheid, fantastische gebruikersinterface, drag-and-drop-programmering en een enorm potentieel voor uitbreiding. En dit alles met veel minder moeite.

Mike

Stap 9: Addendum - Laden vanuit Raspbian Stretch Lite

Deze optie vermijdt de bloatware die bij de volledige Raspbian Stretch-versie wordt geleverd. Het meeste hiervan is niet nodig bij het gebruik van een Pi voor domotica. Node-Red moet echter wel geïnstalleerd worden.

Ga verder zoals in stap 1, maar gebruik Raspbian Stretch Lite in plaats van Raspbian Stretch.

Doe in plaats van Stap2 het volgende:

sudo apt -y install npm

npm -v moet terugkeren: 1.4.21 of later

sudo npm install -g n

sudo n 8.9.0

We kunnen nu node packet manager gebruiken om Node-Red te installeren:

sudo npm install node-red --global --unsafe-perm

Dit geeft een aantal foutmeldingen vanwege een onjuist adres. Het systeem voert echter een 'broncompilatie' uit om dit probleem te verhelpen. Als u de bovenstaande instructie herhaalt (niet nodig), treden de fouten niet op.

We hebben nu Node-Red en de ondersteunende pakketten geïnstalleerd en kunnen doorgaan naar stap 3, het laden van mosquitto.

Draadloze wedstrijd
Draadloze wedstrijd
Draadloze wedstrijd
Draadloze wedstrijd

Tweede plaats in de draadloze wedstrijd