Arduino Garage Controller (7 / 8 steg)

Steg 7: Vera koden

För att använda min Garage Controller med min Vera2, jag var tvungen att skriva en "plugin". Men att lägga till din egen plugin för Vera är inte lätt. Först, föga dokumentationen som finns på deras Wiki är inaktuellt eller inte. Det finns också ett forum där du kan se vad andra människor har gjort och ställa frågor.

Vera använder en kombination av UPnP och LUA heter Luup. Du behöver minst två filer, en "definition" fil och en "genomförande" fil. Problemet är att genomförandet filen är en kombination av XML- och LUA. Det enda sättet att testa din LUA kod (åtminstone att jag är medveten om för Mac), är att ladda filen genomförande och hoppas det går. Ladda dina filer och starta om Luup motorn tar en minut eller mer, så processen är långsam. Det finns ingen debugger och din enda felsökningsverktyg är skogsavverkning anläggning. Du Visa loggen, du kan antingen köra SSH till Vera eller Använd följande URL: < yourVeraIp > / cgi-bin/cmh/log.sh? Device = LuaUPnP ". Om det finns lättare sätt, har jag inte hittat dem än.

Såvida inte din enhet är en "välkända" UPnP, kommer alla mobiltelefon fjärrkontroll apps inte att kunna styra enheten. Eftersom jag vill göra fjärrkontrollen, visas mitt Garage styrenhet som en "Garage Controller" som har följande underordnade enheter:

  1. En dimbar ljus för att styra garageporten (kom ihåg, jag vill delvis öppna dörren)
  2. Tre ljus Strömställare för var och en av reläer som styr min bevattning zoner.

Så är här den definitionsfil (Spara som "D_GarageController1.xml"):

<? XML-version = "1.0"? >
< root xmlns = "urn: schemas-upnp-org:device-1-0" >
< specVersion >
< stora > 1 < / stora >
< mindre > 0 < / mindre >
< / specVersion >
< enhet >
< deviceType > urn: schemas-aram-perez-com:device:GarageController:1 < / deviceType >
< friendlyName > Garage Controller < / friendlyName >
< modelNumber > 1,0 < / modelNumber >
< protokoll > crlf < / protokollet >
< handleChildren > 1 < / handleChildren >
< implementationList >
< implementationFile > I_GarageController1.xml < / implementationFile >
< / implementationList >
< / enhet >
< / root >

Och här är implementeringsfilen (Spara som "I_GarageController1.xml"):

<? XML-version = "1.0"? >
< tillämpning >
< funktioner >
lokala GC = "Garage Controller, enhet:"
lokala GC_SID = "urn: schemas-aram-perez-com:device:GarageController:1"
lokala SP_SID = "urn: upnp-org:serviceId:SwitchPower1"
lokala DIM_SID = "urn: upnp-org:serviceId:Dimming1"
lokala CR = string.char(13)
lokala FIXED_LEVEL = "30"
lokala CSI = string.char (27, 91)--ESC + [
lokala parentDevice
lokala garageDoorStatus

-- -------------------------------------------------------------------------
--Logga in med färg

funktionen Log (enhet, msg)
luup.log (CSI... "35m"... GC... toString(Device)... ", " .. MSG... CSI... "0 m")
slutet

funktion LogL1 (enhet, msg)
luup.log (CSI... "35m"... GC... toString(Device)... ", " .. MSG... CSI... "0 m", 1)
slutet

funktion LogL2 (enhet, msg)
luup.log (CSI... "35m"... GC... toString(Device)... ", " .. MSG... CSI... "0 m", 2)
slutet

funktion startup(lul_device)
lokal enhet = luup.devices[lul_device]
lokala IP-adress, ignorera, ipPort = string.match (device.ip, "^ ([% w%.%-]+) (:? () %d-))$")
om (IP-adress ~ = "") sedan
parentDevice = lul_device
om (ipPort == nil) eller (ipPort == "") sedan
om (device.port == nil) eller (device.port == "") sedan
ipPort = 23.
slutet
slutet
Log (lul_device, ("startar upp, ansluter till"... IP-adress... ", port"... ipPort))
luup.IO.Open (lul_device, IP-adress, ipPort)
child_devices = luup.chdev.start(lul_device);
luup.ChDev.append (lul_device, child_devices, "GD", "Garage Door", "urn: schemas-upnp-org:device:DimmableLight:1", "D_DimmableLight1.xml", "", "", sant)
luup.ChDev.append (lul_device, child_devices, "Z1", "bevattning zon 1", "urn: schemas-upnp-org:device:BinaryLight:1", "D_BinaryLight1.xml", "", "", sant)
luup.ChDev.append (lul_device, child_devices, "Z2", "bevattning zon 2", "urn: schemas-upnp-org:device:BinaryLight:1", "D_BinaryLight1.xml", "", "", sant)
luup.ChDev.append (lul_device, child_devices, "Z3", "bevattning zonplanerar 3", "urn: schemas-upnp-org:device:BinaryLight:1", "D_BinaryLight1.xml", "", "", sant)
luup.ChDev.Sync(lul_device,child_devices)
lokala värde = luup.variable_get (GC_SID, "DelayPartialOpen", lul_device + 1)
om (värde == nil) eller (värde == "") sedan
luup.variable_set (GC_SID, "DelayPartial öppna", "3", lul_device + 1)
slutet
--Anta alla bevattning reläer är avstängda
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)
annat
lokala err = "fel: ingen IP-adress hittas"
LogL2(lul_device, err)
returnera false, fela, "Garage Controller"
slutet
luup.IO.write("g?")
return true, "Ok", "Garage Controller"
slutet

funktion partialOpen(data)
luup.IO.write("GB")
slutet
< / funktioner >

< Autostart > Start < / Start >

< inkommande >
< lua >
Log (lul_device, ("upplysningar:".. toString(lul_data)))
lokala ch = lul_data:sub(1,1)
om ch == 'g' då
lokala status
CH = lul_data:sub(2,2)
om ch == ' o ' då
garageDoorStatus = ch
status = "100"
luup.variable_set (SP_SID, "Status", "1", lul_device + 1)
ElseIf ch == "c" och sedan
garageDoorStatus = ch
status = "0"
luup.variable_set (SP_SID, "Status", "0", lul_device + 1)
ElseIf ch == "p" och sedan
garageDoorStatus = ch
status = FIXED_LEVEL
luup.variable_set (SP_SID, "Status", "1", lul_device + 1)
annat
Log (lul_device, "okänd mottagna data")
skicka tillbaka slutet
slutet
luup.variable_set (DIM_SID, "LoadLevelStatus", status, lul_device + 1)
ElseIf ch == "r" och sedan
CH = lul_data:sub(2,2)
om (ch & gt; '0') och (ch & lt; "4") sedan
luup.variable_set (SP_SID, "Status", lul_data:sub (3,3), lul_device + ch + 1)
annat
LogL1 (lul_device, ("Ogiltig området nr:".. toString(Device)))
slutet
annat
LogL2 (lul_device, "okänd data")
slutet
< / lua >
< / inkommande >

< actionList >
< åtgärder >
< serviceId > urn: upnp-org:serviceId:Dimming1 < / serviceId >
< namn > SetLoadLevelTarget < / namn >
< kör >
lokala garageLevel = lul_settings.newLoadlevelTarget
luup.variable_set (DIM_SID, "LoadLevelTarget", garageLevel, lul_device)
Log (lul_device, ("ställa in dörren nivå"... garageLevel))
lokala status = luup.variable_get (SP_SID, "Status", lul_device)
om garageLevel == status sedan
returnera sant
slutet
om luup.io.write("gb") == false sedan
LogL1 (lul_device, ("fel skicka kommandot"))
luup.set_failure(true)
returnera false
slutet
om (garageLevel ~ = "0") och (garageLevel ~ = "100") sedan
lokala dröjsmål = luup.variable_get (GC_SID, "DelayPartialOpen", lul_device)
luup.call_delay ("partialOpen", dröjsmål, garageLevel)
slutet
returnera sant
< / run >
< / action >

< åtgärder >
< serviceId > urn: upnp-org:serviceId:SwitchPower1 < / serviceId >
< namn > SetTarget < / namn >
< kör >
lokala relä = lul_device - parentDevice
om (relä & lt; 1) eller (relä & gt; 4) sedan
LogL1 (lul_device, ("inte ett giltigt relay tal:".. relä))
returnera false
slutet
Relay = relä - 1
lokala newTarget = tostring(lul_settings.newTargetValue)
lokala kommandot = ""
lokala status = luup.variable_get (SP_SID, "Status", lul_device)
om status == noll då
status = "?"
slutet
om reläet == 0 då
om status ~ = newTarget sedan
kommandot = "gb"
slutet
annat
kommandot = "r"... Relay... newTarget
slutet
Log (lul_device, ("Skicka:".. kommandot))
luup.variable_set (SP_SID, "Mål", newTarget, lul_device)
Om kommandot == "" sedan
returnera sant
slutet
om luup.io.write(command) == false sedan
LogL1 (lul_device, "fel vid sändning kommandot")
luup.set_failure(true)
returnera false
slutet
returnera sant
< / run >
< / action >
< / åtgärdslista >

< / genomförandet >

På Vera UI5 (jag har testat detta med tidigare UIs), klicka på fliken program, klicka på fliken "Utveckla Apps" sub och sedan på "Luup filer" till vänster. Du kommer att se en lista över aktuella och en plats att välja filer att ladda upp. När du har överfört filerna kan du klicka på "Skapa enhet" till vänster och fyll i informationen. Jag ange under "Beskrivning" "zGarage Controller" så att det visas som den sista enheten på gränssnittet UI5. När enheten skapas så rekommenderar jag att du "ladda om" så att alla underordnade enheter visas på rätt sätt.

Du kan lägga till scheman att öppna/stänga din garageport och zonerna bevattning. Du kan hämta Vera mobila appar till din mobiltelefon och hantera garage dörren och bevattning zonerna från var som helst i världen!

Se Steg
Relaterade Ämnen

Kommunicera med arduino micro controller och dator via usb med en vb program

Om du är som mig och vill kunna styra dina objekt anslutna till din arduino via datorn måste du ett sätt att upprätta en anslutning och kommunicera med din arduino från datorn. Denna video och handledning visar dig hur man gör just det! Jag har tagit...

Arduino thumbstick controller

I detta projekt jag hjälper dig att sätta ihop en enkel och från scratch Arduino thumbstick controller, att styra dina projekt (servon & DC-motorer). Detta är en enkel guide för att hjälpa nya Arduino användare på sina projekt utan kräver lite lödnin...

Arduino MIDI Controller

En MIDI-controller är någon utrustning som genererar och sänder MIDI-data till MIDI-aktiverade enheter. Kort sagt, om du har knappar på din MIDI-controller, kan du programmera dessa knappar till alla ljud du vill ha via musikaliska programvara (ex.:...

Anpassade Arduino MIDI Controller

Hej och Välkommen till detta instructable om hur man bygger en anpassad, Billigt och enkelt USB MIDI-controller, baserat på Arduino. Den bästa nyheten: inget krångel med USB-till-MIDI-gränssnitt eller programvaruverktyg som Hårlösa MIDI, bara plug 'n...

Arduino Flash Controller för fotografering

är en pank amatörfotograf är inte lätt.Film, kemikalier och papper är inte billigt och en budget för vissa studioljus är obefintlig.Så, jag bestämde mig för att, med hjälp av min trogna arduino, skapa min egen sync controller att använda med engångsk...

DIY ARDUINO flyg CONTROLLER

Kan bygga en Arduino baserat flygning styrenhet som kan göra trådlösa PID tuning, orientering lås och höjd håller och placerar lås med hjälp av en GPS. OK så här DIY flyg controller är en pedagogisk Arduino baserad modul. Det är enkelt att göra, lätt...

Lätt grundläggande Arduino Ethernet Controller

jag nyligen gick ut och köpte en Arduino Ethernet Shield men kunde inte riktigt ta den i bruk som jag inte kunde hitta några lätt tutorials så jag började att försöka kod själv. Jag kunde komma med en enkel del av koden som visade på en LED från din...

Arduino lins Controller - synkroniseras Zoom/fokus med Wii Classic Controller

min Lumix GH2 Micro Four Thirds kamera skjuter inte bara fantastiskt hög definitionen video, men med billiga adaptrar kan jag använda den med äldre manuella objektiv som är billig och ofta mycket hög kvalitet. Jag skjuter en hel del prestanda videor...

Arduino MIDI-controller med en ZX avstånd och gest Sensor

Välkommen till detta instructable om hur man bygger en mycket grundläggande MIDI-Controller med SparkFun ZX avståndet och gest Sensor. Detta instructable är del av en skoluppgift.Obs: Detta är ingen kodning handledning. Den final koden kommer att ing...

Arduino MIDI-controller - techshop använder scarff boarduino

jag har tittat på ett antal olika arduino lösningar för MIDI. Mitt projekt omfattar över 100 analoga ingångar att varje känsla hastighet och ge MIDI-utgången. Med den bakgrunden info jag fick från techshop klass beslutat jag att ställa in det först m...

Enkla Arduino stoppljus Controller

detta projekt som namn tips är bara en mycket grundläggande controller för ett stoppljus, jag använde en arduino men i verkligheten var overkill kan detta enkelt göras med en ATtiny.Steg 1: leveranserStoppljus (jag fick min från en farbror... jag ber...

Arduino Gamepad / controller

Ja, Hej där.Mitt namn är Rik Geersing.Jag är en student på HKU i Utrecht, Nederländerna. Jag studerar spelutveckling.Jo, är det uppenbart att när någon studerar detta yrke, ha något intresse för spel, och jag gör. Jag älskar verkligen simuleringsspel...

Arduino Rgb controller från Vb.net

Hej, detta är min första instractables, idag ska jag visa dig hur man gör en rgb-styrenhet med en arduino UNO R3, kontrolleras av en ansökan i vb.netMed detta projekt kan du enkelt styra din lysdiodsrand och vilken färg duUrsäkta mig för min engelska...

Arduino Garage dörröppnare

Detta projekt använder en Arduino mikrokontroller och en RDM630 RFID-mottagare för att kontrollera åtkomst till mitt garage. Detta är mycket praktiskt när jag behöver få in med en handfull av dagligvaror. Jag bär ett RFID-kort i min plånbok som funge...

Arduino gms controller för webasto

Detta är ett enkelt projekt där du kan ändra relay staten genom att skicka ett textmeddelande till GPRS sköld ansluten till arduino. Detta kan lätt ändras för att styra många olika projekt.Jag har sett många människor bygga dessa med arduino och blue...

E-licktronic Arduino MIDI-controller

E-licktronic skapa 3 olika block att bygga din MIDI-hårdvaraMer information http://www.e-licktronic.com/en/...

Min GBRL cnc controller med Arduino

Här, Visa jag dig min färdiga GBRL - Arduino CNC controller. För förpackningen använde jag gamla matlådaSteg 1: ledningar Jag fast det som det visas på Github, och ladda upp GBRL 8.0 med x loaderSteg 2: Dess alla packadged i gamla matlåda. Jag kapade...

Steg för steg guide till Micro trollkarl robot controller (Arduino kompatibel)

Micro trollkarl från DAGU är en låg kostnad Arduino kompatibel controller speciellt för nybörjare som vill bygga en liten robot. Styrelsen har ett antal användbara tillbehör inbyggd så att i de flesta fall sköldar är inte obligatoriska och yttre ledn...

Bygga en grundläggande MIDI-Controller del 1 - lätt 3 effekter Pot (Potentiometer) Arduino Uno MIDI-Controller (Serial-USB)... Snabb, enkel och billig!

Hej alla,Jag är relativt ny på Arduino och så har kämpat mitt sätt att göra min egen MIDI-controllers. Det finns en enorm mängd information runt om men jag kunde inte hitta en enkel handledning för sådan en enkel enhet; så här går.Min ursprungliga av...