Webserver IIS för Tellstick

Moderator: Telldus

Dale
Posts: 75
Joined: Fri Mar 17, 2023 9:45 am

Post by Dale »

Kort e de ett VBScript som körs en gång i minuten som kollar i databasen vilket läge pryttlarna ska stå i. Via ett webb formulär så kan jag se aktuell status samt slå på och stänga av å lägga in tider, datum å så vidare. Kanske inte snyggaste lösningen å så blir de iofs en fördröjning på max en minut men de funkar iaf för de jag ska använda pryttlarna till.
\\d
4 Net, 3 Duo & 64 sensorer + 14 RPi's
4 Net, 3 Duo, 14 RPi, 2 reporter & 64+ givare
This message was made using 100% recycled electrons!
Quart
Posts: 9
Joined: Fri Mar 17, 2023 9:45 am

Post by Quart »

Sitter och pillar lite med detta oxå.
Har du lust att lägga in koden ifrån din sida så man får lite hjälp ?
cok
Posts: 3
Joined: Fri Mar 17, 2023 9:45 am

Post by cok »

Sitter med samma problem. Att jag kan inte styra tellstick från en web service. Kör jag den genom visual studio så går det bra. Jag kör web servicen med administratorbehörighet. Vad menas med skyddat läge?

Kan man ändra detta på något sätt?

Använder ISS 5.1, VS 2005.
jocke
Posts: 7
Joined: Fri Mar 17, 2023 9:45 am

Post by jocke »

Hallå... nu har även jag testat och fått detta på Vista med IIS7. Jag kan köra från VS2008exp men inte direkt från IIS. Ska rota lite i access rights... Samt även testa att wrappa dll-en och köra igen.

EDIT:
Har nu testat lite och det är rättigheterna på användaren som kör webapplikationen som är redigt strypt. I Vista kör normalt usern NetworkService programpoolen och efter jag ändrat denna så att jag själv kör så fungerar det. Men som sagt man skulle behöva skapa en ny användare utifrån NetworkService och sedan ge denne rättigheter att köra Telldus dll. Att det fungerar när Visual Studio skapar en egen webbserver beror på att jag själv kör.
cok
Posts: 3
Joined: Fri Mar 17, 2023 9:45 am

Post by cok »

jocke wrote:Hallå... nu har även jag testat och fått detta på Vista med IIS7. Jag kan köra från VS2008exp men inte direkt från IIS. Ska rota lite i access rights... Samt även testa att wrappa dll-en och köra igen.

EDIT:
Har nu testat lite och det är rättigheterna på användaren som kör webapplikationen som är redigt strypt. I Vista kör normalt usern NetworkService programpoolen och efter jag ändrat denna så att jag själv kör så fungerar det. Men som sagt man skulle behöva skapa en ny användare utifrån NetworkService och sedan ge denne rättigheter att köra Telldus dll. Att det fungerar när Visual Studio skapar en egen webbserver beror på att jag själv kör.
Jag får det att fungera på IIS 6 genom att skapa upp en application pool och ha en användare där med tillräckliga rättigegheter. Problemet kvarstår på IIS5.1. Där vet jag inte hur jag ska få det att fungera.
jocke
Posts: 7
Joined: Fri Mar 17, 2023 9:45 am

Post by jocke »

Det var ett tag sedan men jag tror du kanske kan hitta lite hjälp i denna länk (dcomcfg) Om det visar sig att du hittar Telldusen i dcomlistan. Det skall gå att ändra körande user på COM objekten. Kanske bara gäller distributed och inte ditt fall.

http://support.sas.com/rnd/itech/doc9/a ... h_app.html

Har du lagt den i MTS? Där kan du också sätta rättigheter.
Gunwald
Posts: 9
Joined: Fri Mar 17, 2023 9:45 am

Post by Gunwald »

Dale wrote:
micke.prag wrote:Att den "hoppar" nummer är avsiktligt. Numret är ett idnummer och ska vara unikt för varje enhet.
Ok, tänkte bara om man gör bat-filer å sen när manhar tagit bort å lagt till nya så får man göra nya bat-filer me. :-)
Du kan ändra tillbaka numret/ID't i win-registret så får enheten sitt "gamla" ID igen. HKEY_CURRENT_USER\Software\Telldus\Devices

Vill du flytta din konfiguration till en annan dator är det bara att exportera ut config'en ifrån registret (från \Devices\..) till en .reg fil och importera i den nya datorn efter du kopplat i stickan och installerat drivarna förståss. När du efter importen startar TelldusSetup på nya maskinen så finns alla enheter där redan konfade,namngivna och klara! Samma ID'n som på gamla datorn.

Hoppas detta kan vara nytta för några?
Micke: Du kanske skulle lägga till en Export/import funktion för de som är blyga för registret?
leidner
Posts: 18
Joined: Fri Mar 17, 2023 9:45 am

Berhörighet att köra tdtool.exe via bat och IIS5

Post by leidner »

Är det någon som lyckats köra en bat-fil som startar tdtool i Windows xp?
Som alla andra tidigare lyckas jag bara när jag kör via Visual studios inbyggda webserver.

Det är så tråkigt att hela tiden se texten "Number of devices: -1". När man kör via iis.
riksvag
Posts: 51
Joined: Fri Mar 17, 2023 9:45 am

Min kod

Post by riksvag »

Jag har skrivit en extremt simpel asp-kod som visar en lista på enheter, och länkar upp on/off.

Lås hela tråden först gällande rättigheter, som standard fungerar detta inte, utan du måste beroende på IIS-version ge IUSR lämpliga rättigheter.

Som sagt, detta är extremt simpelt, om någon vill ändra eller lägga till snyggare layout och så, så vore det kul om ni postade koden.

Batfilen ser ut så här:

"c:\program files\telldus\tdtool.exe" --%1 %2

asp-filen heter telldus.asp och ser ut så här:

<%
a=request("a")
l=request("l")
response.write "<pre>" & func_switch(a,l) & "</pre>"
str = func_switch("list","")
sokefter = "Number of devices: "
start = instr(str,sokefter) + len(sokefter)
devices = mid(str,start,len(str))
'hitta första brej kefter detta
redigstart = instr(devices,vbcrlf)+1
'kapa antalet devices
devices = right(devices,len(devices)-redigstart)
devices = replace(devices,vbcrlf,"---")
'kapa sista ---
devices = left(devices,len(devices)-3)
arr = split(devices,"---")
response.write "<table border=1><tr><td>ID</td><td>Plats</td><td>På</td><td>Av</td></tr>"
For i=0 to UBound(arr)
'hitta första tab i arr
plats = instr(arr(i),vbTab)
devid = left(arr(i),plats-1)
response.write "<tr>"
response.write "<td>" & devid & "</td>"
response.write "<td>" & right(arr(i),len(arr(i))-plats) & "</td>"
response.write "<td><a href=telldus.asp?a=on&l="&devid&">on</a></td>"
response.write "<td><a href=telldus.asp?a=off&l="&devid&">off</a></td>"
response.write "</tr>"
next
response.write "</table>"

function func_switch(action,device)
set wshell = CreateObject("WScript.Shell")
set objcmd = wshell.Exec("c:\inetpub\wwwroot\telldus\telldus.bat " & action & " " & device)
func_switch = objcmd.StdOut.Readall()
set wshell = nothing
set objcmd = nothing
End function

%>
riksvag
Posts: 51
Joined: Fri Mar 17, 2023 9:45 am

Post by riksvag »

Har gjort ett par förbättringar.
-Resultatet vid sidan av enheten så att man inte får olika lägen på tabellen mellan klicken
-Lagt in on/off på alla enheter samtidigt, en sorts gruppfunktion för alla enheter.

Det finns ingen bifogafunktion så att man kan bifoga koden i stället för att klistra in den?

=====================
<%
a=request("a")
l=request("l")
str = func_switch("list","")
sokefter = "Number of devices: "
start = instr(str,sokefter) + len(sokefter)
devices = mid(str,start,len(str))
redigstart = instr(devices,vbcrlf)+1
devices = right(devices,len(devices)-redigstart)
devices = replace(devices,vbcrlf,"---")
devices = left(devices,len(devices)-3)
arr = split(devices,"---")
response.write "<table border=1><tr><td>ID</td><td>Plats</td><td>På</td><td>Av</td><td>Rapport</td></tr>"
For i=0 to UBound(arr)
plats = instr(arr(i),vbTab)
devid = left(arr(i),plats-1)
response.write "<tr>"
response.write "<td>" & devid & "</td>"
response.write "<td>" & right(arr(i),len(arr(i))-plats) & "</td>"
response.write "<td><a href=telldus.asp?a=on&l="&devid&">on</a></td>"
response.write "<td><a href=telldus.asp?a=off&l="&devid&">off</a></td>"
response.write "<td>"
if request("x")<>"" then
g = func_switch(request("x"),devid)
g = mid(g, instr(g,"Turn"),len(g)-instr(g,"Turn"))
response.write g
end if
if l=devID then
g = func_switch(a,l)
g = mid(g, instr(g,"Turn"),len(g)-instr(g,"Turn"))
response.write g
end if
response.write "&nbsp;</td></tr>"
next
response.write "<tr>"
response.write "<td>X</td>"
response.write "<td>Alla</td>"
response.write "<td><a href=telldus.asp?x=on>on</a></td>"
response.write "<td><a href=telldus.asp?x=off>off</a></td>"
response.write "<td>&nbsp;</td>"
response.write "</tr>"
response.write "</table>"

function func_switch(action,device)
set wshell = CreateObject("WScript.Shell")
set objcmd = wshell.Exec("c:\inetpub\wwwroot\telldus\telldus.bat " & action & " " & device)
'wshell.run "c:\inetpub\wwwroot\telldus\telldus.bat " & action & " " & device
func_switch = objcmd.StdOut.Readall()
set wshell = nothing
set objcmd = nothing
End function
%>
Talla3
Posts: 3
Joined: Fri Mar 17, 2023 9:45 am
Location: Norrköping
Contact:

Hade samma problem med Lotus Domino server, men löste sig!

Post by Talla3 »

Jag jobbar med Lotus Domino om dagarna, så självklart sätte jag upp en webbsida för Domino servern för att kunna styra tellstick.
Jag kör Windows XP Prof. SP3 Svensk.
Men precis som tidigare inlägg så får man returnerat -1 när man kör en --list. Provade att anropa tdtool.exe direkt och även via en .bat fil men det hjälpte inte, fick 'failed' vid försök att tända eller släcka en device.

Egentligen är det inte så konstigt, eftrsom device inställningarna ligger i registret under HKEY_CURRENT_USER. En webbservice kör ju som en annan användare, och den användaren har inte device listan.

Löste det genom att exportera telldus + undernycklar till en .reg fil. editerade filen genom att byta HKEY_CURRENT_USER till HKEY_USERS/xxxx/software/telldus/... (Där ligger nämligen övriga användare även webbservice). Jag hade 4 under users (S-1-5-18, S-1-5-19, ...) la in nyckeln under alla 4 eftersom jag inte visste vilken user som användes av webbservicen. Dom som hette ..._Classes struntade jag i.

När jag sedan försökte igen så funkade det både att anropa .bat filen eller tdtool.exe direkt.

Min fråga är ju varför inte device listan läggs under HKEY_LOCAL_MACHINE istället, det hade ju varit bättre. Då finns den där oavsett user, tror ju knappast att man behöver ha olika device-listor vid ett fleranvändarsystem.

Någon annan som kör Lotus Domino och tellstick?
__
/alla3
fredrik.gullberg
Site Admin
Posts: 285
Joined: Fri Mar 17, 2023 9:45 am
Location: Lund
Contact:

Post by fredrik.gullberg »

En uppdatering i v1.2.2 av mjukvaran gör att man genom att sätta HKLM\Software\Telldus\Devices - SharedDevices till 1, läser/sparar enheter i HKLM istället för HKCU.
http://trac.telldus.se/ticket/1
Fredrik Gullberg
Telldus Technologies
jackjson
Posts: 2
Joined: Fri Mar 17, 2023 9:45 am

Post by jackjson »

fredrik.jacobsson wrote:En uppdatering i v1.2.2 av mjukvaran gör att man genom att sätta HKLM\Software\Telldus\Devices - SharedDevices till 1, läser/sparar enheter i HKLM istället för HKCU.
http://trac.telldus.se/ticket/1
Perfekt!
Då blir konfigurationen lite enklare.

Jag har byggt en wrapper i form av en ActiveX DLL som man enkelt hanterar från ASP.
DLL-filen skall placeras i System32 och registreras med RegSvr32.
Shared Devices måste vara aktiverat (.reg-fil inkluderad) eller så måste DLL-filen köras i en annan application pool i IIS, som då har tillgång till rätt inställningar.
En teknisk spec över DLL-filens funktioner och ett enkelt ASP-exempel är inkluderat i ZIP-filen.

http://www.jackjson.se/tellstick/TellstickASP.v0.3.zip

Tacksam för konstruktiv respons.

/Jack

PS. First post! DS.
riksvag
Posts: 51
Joined: Fri Mar 17, 2023 9:45 am

Post by riksvag »

Det var ett trevligt initiativ. Jag är dock inte helt på det klara med vad funktionerna gör, kan du inte utveckla bara en aning?
jackjson
Posts: 2
Joined: Fri Mar 17, 2023 9:45 am

Post by jackjson »

riksvag wrote:Det var ett trevligt initiativ. Jag är dock inte helt på det klara med vad funktionerna gör, kan du inte utveckla bara en aning?
Den exempelkod som jag inkluderade i zip-filen bör underlätta förståelsen för de grundläggande funktionerna.

Här kommer en överblick:

Property Get NumberOfDevices() As Long
Returnerar hur många enheter som finns configurerade på datorn.

Function GetDeviceId(DeviceIndex As Long) As Long
Hämtar ett unikt id-nummer för enhet på platsen [DeviceIndex].
[DeviceIndex] kan vara från och med 0 till och med antalet konfigurerade enheter (alltså NumberOfDevices, se ovan) minus ETT.

Function GetDeviceName(DeviceId As Long) As String
Hämtar alias/titel/namn på en specifik enhet. [DeviceId] är det unika id-nummer som du hämtar med GetDeviceId()-funktionen ovan.

Function CanTurnOn(DeviceId As Long) As Boolean
Svarar true/false om en specifik enhet klarar av att slås på.
[DeviceId] är samma som ovan.

Function CanTurnOff(DeviceId As Long) As Boolean
Svarar true/false om en specifik enhet klarar av att slås av.
[DeviceId] är samma som ovan.

Function CanDim(DeviceId As Long) As Boolean
Svarar true/false om en specifik enhet klarar av att dimmas.
[DeviceId] är samma som ovan.

Function CanBell(DeviceId As Long) As Boolean
Svarar true/false om en specifik enhet klarar av att ringa (tror jag, kan ej testa).
[DeviceId] är samma som ovan.

Function DoTurnOn(DeviceId As Long) As Boolean
Slår igång en specifik enhet. [DeviceId] är precis som ovan det unika enhets-id som du får fram från GetDeviceId().

Function DoTurnOff(DeviceId As Long) As Boolean
Slår av en specifik enhet. [DeviceId] är samma som ovan.

Function DoDim(DeviceId As Long, DimLevel As Byte) As Boolean
Dimmar av en specifik enhet. [DimLevel] är en siffra 1-255 som anger ljusstyrkan.
[DeviceId] är samma som ovan.

Function DoBell(DeviceId As Long) As Boolean
Ringer på en specifik enhet (tror jag, kan ej testa denna).
[DeviceId] är samma som ovan.
Post Reply