Arduino Garage Controller (7 / 8 stap)

Stap 7: De Vera Code

Wilt u mijn Garage-Controller met mijn Vera2, moest ik schrijven van een "plugin". Maar het toevoegen van uw eigen plugin voor de Vera is niet gemakkelijk. Ten eerste, de weinig documentatie op hun Wiki bestaat is onvolledig of verouderd. Er is ook een forum waar u zien kunt wat andere mensen hebben gedaan en vragen.

Vera gebruikt een combinatie van UPnP en LUA Luupgenoemd. U moet ten minste twee bestanden, een "definitie" bestand en een "uitvoering"-bestand. Het probleem is dat de uitvoering-bestand een combinatie van XML- en LUA is. De enige manier om te testen uw LUA code (ten minste dat ik besef voor de Mac), is het laden van het bestand uitvoering en hoop dat het wordt uitgevoerd. Laden van uw bestanden en het opnieuw starten van de motor Luup duurt een minuut of meer, zodat het proces traag verloopt. Er is geen debugger en uw enige debugging hulpmiddel is de faciliteit van de logboekregistratie. U het logboek bekijkt, kunt u beide SSH in de Vera of gebruik de volgende URL: < yourVeraIp > / cgi-bin/cmh/log.sh? Apparaat LuaUPnP = ". Als er eenvoudigere manieren zijn, hebben ik nog niet gevonden hen.

Tenzij uw apparaat een "bekende" UPnP-type is, zal alle GSM afstandsbediening apps niet kunnen om uw apparaat te controleren. Omdat ik wil doen van de afstandsbediening, mijn Garage-Controller wordt weergegeven als een "Garage-Controller", die de volgende onderliggende apparaten heeft:

  1. Een dimbaar licht voor het beheersen van de garagedeur (herinner me, ik wil gedeeltelijk openen de deur)
  2. Drie licht Switches voor elk van de steunpunten die mijn irrigatie-zones.

Dus is hier het definitiebestand (opslaan als "D_GarageController1.xml"):

<? xml version = "1.0"? >
< wortel xmlns = "urn: schemas-upnp-org:device-1-0" >
< specVersion >
< grote > 1 < / grote >
< kleine > 0 < / kleine >
< / specVersion >
< apparaat >
< deviceType > urn: schemas-aram-perez-com:device:GarageController:1 < / deviceType >
< friendlyName > Garage Controller < / friendlyName >
< modelnummer > 1.0 < / modelnummer >
< protocol > crlf < / protocol >
< handleChildren > 1 < / handleChildren >
< implementationList >
< implementationFile > I_GarageController1.xml < / implementationFile >
< / implementationList >
< / apparaat >
< / root >

En hiernaartoe is het vijl uitvoering (opslaan als "I_GarageController1.xml"):

<? xml version = "1.0"? >
< toepassing >
< functies >
lokale GC = "Garage Controller, apparaat:"
lokale GC_SID = "urn: schemas-aram-perez-com:device:GarageController:1"
lokale SP_SID = "urn: upnp-org:serviceId:SwitchPower1"
lokale DIM_SID = "urn: upnp-org:serviceId:Dimming1"
lokale CR = string.char(13)
lokale FIXED_LEVEL = "30"
lokale CSI = string.char (27, 91)--ESC + [
lokale parentDevice
lokale garageDoorStatus

-- -------------------------------------------------------------------------
--Meld u met kleur

functie Log (apparaat, msg)
luup.log (CSI... "35m..." GC... toString(Device)... ", " .. msg... CSI... "0 m")
einde

functie LogL1 (apparaat, msg)
luup.log (CSI... "35m..." GC... toString(Device)... ", " .. msg... CSI... "0 m", 1)
einde

functie LogL2 (apparaat, msg)
luup.log (CSI... "35m..." GC... toString(Device)... ", " .. msg... CSI... "0 m", 2)
einde

functie startup(lul_device)
lokale apparaat = luup.devices[lul_device]
lokale IPAdres, negeren, ipPort = string.match (device.ip, "^ ([% w%.%-]+) (:? () %d-))$")
Als (IPAdres ~ = "") dan
parentDevice = lul_device
Als (ipPort == nihil) of (ipPort == "") dan
Als (device.port == nihil) of (device.port == "") dan
ipPort = 23;
einde
einde
Log (lul_device, ("opstarten, verbinding maken met".. IP-adres... ", poort"... ipPort))
luup.io.Open (IP-adres, lul_device, ipPort)
child_devices = luup.chdev.start(lul_device);
luup.chdev.Append (lul_device, child_devices, "GD", "garagedeur", "urn: schemas-upnp-org:device:DimmableLight:1", "D_DimmableLight1.xml", "", "", true)
luup.chdev.Append (lul_device, child_devices, "Z1", "irrigatie Zone 1", "urn: schemas-upnp-org:device:BinaryLight:1", "D_BinaryLight1.xml", "", "", true)
luup.chdev.Append (lul_device, child_devices, "Z2", "irrigatie Zone 2", "urn: schemas-upnp-org:device:BinaryLight:1", "D_BinaryLight1.xml", "", "", true)
luup.chdev.Append (lul_device, child_devices, "Z3", "irrigatie Zone 3", "urn: schemas-upnp-org:device:BinaryLight:1", "D_BinaryLight1.xml", "", "", true)
luup.chdev.Sync(lul_device,child_devices)
lokale waarde = luup.variable_get (GC_SID, "DelayPartialOpen", lul_device + 1)
Als (waarde == nihil) of (waarde == "") dan
luup.variable_set (GC_SID, "DelayPartial Open", "3", lul_device + 1)
einde
--Nemen alle irrigatie Relais zijn uitgeschakeld
luup.variable_set (GC_SID, "Status", "0", lul_device + 2)
luup.variable_set (GC_SID, "Status", "0", lul_device + 3)
luup.variable_set (GC_SID, "Status", "0", lul_device + 4)
anders
lokale err = "fout: geen IP-adres gevonden"
LogL2(lul_device, err)
geretourneerd als false, err, "Garage Controller"
einde
luup.io.write("g?")
retourneren true, "Ok", "Garage Controller"
einde

functie partialOpen(data)
luup.io.write("GB")
einde
< / functies >

< startup > opstarten < / opstarten >

< binnenkomende >
< lua >
Log (lul_device, ("ontvangen gegevens:".. toString(lul_data)))
lokale ch = lul_data:sub(1,1)
als ch == dan 'g'
de status van de lokale
CH = lul_data:sub(2,2)
als ch == ' o ' dan
garageDoorStatus = ch
status = "100"
luup.variable_set (SP_SID, "Status", "1", lul_device + 1)
elseif ch == 'c' dan
garageDoorStatus = ch
status = "0"
luup.variable_set (SP_SID, "Status", "0", lul_device + 1)
elseif ch == 'p' dan
garageDoorStatus = ch
status = FIXED_LEVEL
luup.variable_set (SP_SID, "Status", "1", lul_device + 1)
anders
Log (lul_device, "onbekende ontvangen gegevens")
einde kan retourneren
einde
luup.variable_set (DIM_SID, "LoadLevelStatus", status, lul_device + 1)
elseif ch == 'r' dan
CH = lul_data:sub(2,2)
Als (ch & gt; '0') en (ch & lt; '4')
luup.variable_set (SP_SID, "Status", lul_data:sub (3,3), lul_device + ch + 1)
anders
LogL1 (lul_device, ("ongeldig nummer:".. toString(Device)))
einde
anders
LogL2 (lul_device, "onbekende gegevens")
einde
< / lua >
< / inkomende >

< actionList >
< actie >
< serviceId > urn: upnp-org:serviceId:Dimming1 < / serviceId >
< naam > SetLoadLevelTarget < / naam >
< uitvoeren >
lokale garageLevel = lul_settings.newLoadlevelTarget
luup.variable_set (DIM_SID, "LoadLevelTarget", garageLevel, lul_device)
Log (lul_device, ("setting deur niveau to"... garageLevel))
lokale status = luup.variable_get (SP_SID, "Status", lul_device)
Als garageLevel == status dan
true retourneren
einde
Als luup.io.write("gb") == false dan
LogL1 (lul_device, ("fout bij verzenden van de opdracht"))
luup.set_failure(true)
resultaat false
einde
Als (garageLevel ~ = "0") en (garageLevel ~ = "100") dan
lokale vertraging = luup.variable_get (GC_SID, "DelayPartialOpen", lul_device)
luup.call_delay ("partialOpen", vertraging, garageLevel)
einde
true retourneren
< / run >
< / actie >

< actie >
< serviceId > urn: upnp-org:serviceId:SwitchPower1 < / serviceId >
< naam > SetTarget < / naam >
< uitvoeren >
lokale relay = lul_device - parentDevice
Als (Relais & lt; 1) of (Relais & gt; 4) dan
LogL1 (lul_device, ("geen geldige relay nummer:".. estafette))
resultaat false
einde
relay relay - 1 =
lokale newTarget = tostring(lul_settings.newTargetValue)
lokale command = ""
lokale status = luup.variable_get (SP_SID, "Status", lul_device)
als status == nihil dan
status = "?"
einde
als relay == 0 dan
als status ~ = newTarget then
Command = "gb"
einde
anders
Command = "r"... estafette... newTarget
einde
Log (lul_device, ("verzenden:".. opdracht))
luup.variable_set (SP_SID, "Target", newTarget, lul_device)
If opdracht == "" dan
true retourneren
einde
Als luup.io.write(command) == false dan
LogL1 (lul_device, "fout bij het verzenden van de opdracht")
luup.set_failure(true)
resultaat false
einde
true retourneren
< / run >
< / actie >
< / actionList >

< / uitvoering >

Op de Vera UI5 (ik heb dit getest met eerdere UIs), klik op het tabblad APPS en het "Ontwikkelen Apps" sub tabblad en vervolgens op "Luup bestanden" aan de linkerkant. Hier ziet u een lijst van huidige en een plaats om bestanden te uploaden te selecteren. Zodra u de twee bestanden uploaden, u klik op "Create apparaat" aan de linkerkant en vul de informatie. Ik voer onder "Omschrijving" "zGarage Controller" zodat het wordt weergegeven als het laatste apparaat van de UI5 interface. Zodra het apparaat is gemaakt, aanbevelen ik dat u "Reload" zodat alle onderliggende apparaten correct worden weergegeven.

U kunt planningen te openen/sluiten uw garagedeur en uw irrigatie zones toevoegen. U kunt Vera mobiele apps downloaden naar uw mobiele telefoon en de garage deur en irrigatie zones van overal in de wereld!

Gerelateerde Artikelen

Communiceren met arduino micro controller en computer door usb met een vb-programma

Communiceren met arduino micro controller en computer door usb met een vb-programma

Als u als me bent en wilt worden kundig voor zeggenschap uw items op uw arduino via uw computer aangesloten, dan moet je een manier om een verbinding tot stand brengen en communiceren met je arduino vanaf uw computer. Deze video en tutorial toont je
Arduino MIDI Controller

Arduino MIDI Controller

Een MIDI-controller is een stuk van apparatuur die genereert en stuurt MIDI-data naar MIDI-apparaten. Kortom, hebt u knoppen op uw MIDI-controller, kun je deze knoppen om elk geluid dat je door muzieksoftware wilt programmeren (ex.: Ableton, Garage B
Aangepaste Arduino MIDI Controller

Aangepaste Arduino MIDI Controller

Hallo, en welkom op dit instructable over het bouwen van een aangepaste, goedkoop en makkelijk USB MIDI-controller, gebaseerd op de Arduino. Het beste nieuws: geen gedoe met USB-naar-MIDI interfaces of softwaretools zoals Haarloze MIDI, gewoon plug '
Arduino verkeerslicht Controller w/Remote Control

Arduino verkeerslicht Controller w/Remote Control

ik had een verkeerslicht dat ik was voor het overspuiten van.  Het enige wat overblijft om te doen was om te bouwen van de controller voor het licht signaal patronen.  Als u wilt geven het een draai ik opgenomen een afstandsbediening.  Dit was ook de
Eenvoudige Basic Arduino Ethernet-Controller

Eenvoudige Basic Arduino Ethernet-Controller

ik onlangs ging naar buiten en kocht een Arduino Ethernet-Shield, maar kon niet echt zet het te gebruiken als ik een gemakkelijk tutorials vinden kon zodat ik begon te proberen code door mijzelf. Ik was in staat om te komen met een eenvoudige sectie
Plug en Play Arduino temperatuur controller

Plug en Play Arduino temperatuur controller

Ik heb een paar verschillende temperatuur controller projecten hier. Ik wilde te bouwen, met de volgende beperkingen:Gecontroleerde "stom" toestel kan worden aangesloten rechtstreeks op de eenheid. Ik wilde niet inbreken in het toestel, maar nog
Arduino MIDI-controller - techshop met scarff boarduino

Arduino MIDI-controller - techshop met scarff boarduino

ik heb gekeken rond een aantal verschillende arduino oplossingen voor MIDI. Mijn project concept omvat meer dan 100 analoge ingangen dat elk gevoel van snelheid en voorzien van MIDI-uitgang.   Met behulp van de achtergrondinfo die ik kreeg van techsh
Arduino Midi-controller met een ZX afstand en gebaar Sensor

Arduino Midi-controller met een ZX afstand en gebaar Sensor

Welkom bij dit instructable over het bouwen van een zeer basic Midi-Controller met de SparkFun ZX afstand en gebaar Sensor. Dit instructable is onderdeel van een schoolwerk.Opmerking: Dit is geen codering tutorial. De definitieve code zal worden opge
DIY ARDUINO FLIGHT CONTROLLER

DIY ARDUINO FLIGHT CONTROLLER

Laat bouwen een Arduino gebaseerd vlucht controller die draadloze afstemmen van PID, Afdrukstand lock en hoogte houdt en plaatst slot met behulp van een GPSkunt doen. OK dus deze controller DIY vlucht een educatieve module voor Arduino gebaseerd is.
Arduino Flash Controller voor fotografie

Arduino Flash Controller voor fotografie

een brak amateur fotograaf is niet eenvoudig.Film-, chemicaliën- en papier zijn niet goedkoop en een begroting voor enkele studio lampen is niet bestaand.Dus, heb ik besloten om, met de hulp van mijn trouwe arduino, maak mijn eigen sync-controller te
Eenvoudige Arduino Stoplight Controller

Eenvoudige Arduino Stoplight Controller

dit project als de naam hints is gewoon een zeer fundamentele controller voor een stop licht, ik gebruikte een arduino maar in werkelijkheid overkill was kan dit gemakkelijk worden gedaan met een ATtiny.Stap 1: benodigdhedenStoplicht (ik heb de mijne
Arduino Gamepad / controller

Arduino Gamepad / controller

Nou, Hallo er.Mijn naam is Rik Geersing.Ik ben een student aan de HKU in Utrecht, Nederland. Ik bestudeer Game Development.Nou, is het duidelijk dat wanneer iemand dit beroep bestudeert, hij/zij moet enige interesse in games hebben, en ik doen. Ik ho
Arduino Lens Controller - Zoom/Focus gesynchroniseerd met Wii Classic Controller

Arduino Lens Controller - Zoom/Focus gesynchroniseerd met Wii Classic Controller

mijn Lumix GH2 Micro Four Thirds camera schiet niet alleen fantastische high definition video's, maar met goedkope adapters kan ik gebruiken met oudere manuele lenzen die goedkoop en vaak erg hoge kwaliteit. Ik schiet veel prestaties video's voor mij
Arduino Rgb controller van Vb.net

Arduino Rgb controller van Vb.net

Hallo, dit is mijn eerste instractables, vandaag zal ik u tonen hoe maak je een rgb controller met een arduino UNO R3, bestuurd door een aanvraag ingediend in vb.netMet dit project kunt u gewoon uw led strip besturen en welke kleur u wilt aanbrengenE