Seite 1 von 1

Aktivieren/deaktivieren motion_alarm IP Cam

Verfasst: Freitag 14. Februar 2014, 11:18
von diveteufel
Hallo,
ich bin python einsteiger und versuche seit geraumer Zeit den motion_alarm einer IP Cam 7Links Px615-675 per script zu ändern.
die Statusabfrage mit urllib funktioniert reibungslos.
Leider habe ich keine Idee wie ich die Daten im cgi script der Camera ändern kann.

Wäre für Ansätze echt dankbar

Update:

im iceweasel setzt ich die aktivierung/deaktivierung per url ebenfalls Problemlos
hier die url:
"http://admin:123456@xxx.xxx.xxx.xxx/set_alarm.cgi?next_url=alarm.htm&motion_armed=1&input_armed=0&motion_sensitivity=5&iolinkage=0&mail=0&upload_interval=0&schedule_enable=0&schedule_sun_0=0&schedule_sun_1=0&schedule_sun_2=0&schedule_mon_0=0&schedule_mon_1=0&schedule_mon_2=0&schedule_tue_0=0&schedule_tue_1=0&schedule_tue_2=0&schedule_wed_0=0&schedule_wed_1=0&schedule_wed_2=0&schedule_thu_0=0&schedule_thu_1=0&schedule_thu_2=0&schedule_fri_0=0&schedule_fri_1=0&schedule_fri_2=0&schedule_sat_0=0&schedule_sat_1=0&schedule_sat_2=0&set_alarm()"

Re: Aktivieren/deaktivieren motion_alarm IP Cam

Verfasst: Freitag 14. Februar 2014, 14:59
von Zennoe
Willkomen im Forum! :lol:

Du lässt einige Fragen offen. Bitte versuche diese näher zu erklären.
Was ist das denn für ein CGI-Skript? Warum willst du es bearbeiten? Soll dein Skript das bearbeiten? Kannst du das vllt mitschicken? Wenn du jedoch versucht das Skript zu bekommen, dann solltest du lieber Googlen.

Übrigens .cgi-Skripte sind C bzw. Perl geschrieben.

Re: Aktivieren/deaktivieren motion_alarm IP Cam

Verfasst: Freitag 14. Februar 2014, 15:51
von BlackJack
@Zennoe: CGI-Skripte kann man in jeder Programmiersprache schreiben die von der Standardeingabe lesen und auf die Standardausgabe schreiben kann. Zugriff auf Umgebungsvariablen ist auch hilfreich. Und C dürfte, auch wenn es möglich ist, eher unterrepräsentiert sein, bei CGI-Skripten.

Re: Aktivieren/deaktivieren motion_alarm IP Cam

Verfasst: Freitag 14. Februar 2014, 16:29
von diveteufel
hi,

das .cgi script selbst befindet sich auf der IP cam. Ich versuche die eigenschaft motion-alarm per url zu ändern.
d.h bei bestimmter aktion soll die IP cam deaktiviert/ aktiviert werden.
wenn ich die o.g. URL auf dem RPi im iceweasel aufrufe funzt dies wunderbar.
jetzt versuche ich dies per python zu steuern nur leider ohne erfolg.

selbst der versuch mit webbrowser.open(url) per python zu starten scheitert

wie bereits erwähnt den status der IP Cam auslesen ist kein Problem.

Re: Aktivieren/deaktivieren motion_alarm IP Cam

Verfasst: Freitag 14. Februar 2014, 16:57
von Sirius3
@diveteufel: Was hast Du denn versucht?

Re: Aktivieren/deaktivieren motion_alarm IP Cam

Verfasst: Freitag 14. Februar 2014, 17:10
von diveteufel
mein Versuch:

Code: Alles auswählen

params = urllib.urlencode({"motion_armed": "1", "motion_sensitivity": "2", "input_armed": "0", "iolinkage": "0","mail": "0", "upload_interval": "0", "schedule_enabled": "0","schedule_sun_0":"0","schedule_sun_1": "0", "schedule_sun_2": "0","schedule_mon_0": "0", "schedule_mon_1": "0", "schedule_mon_2": "0", "schedule_tue_0": "0", schedule_tue_1": "0","schedule_tue_2": "0", "schedule_wed_0": "0", "schedule_wed_1": "0", "schedule_wed_2": "0", "schedule_thu_0": "0","schedule_thu_1": "0", "schedule_thu_2": "0", "schedule_fri_0": "0", "schedule_fri_1": "0", "schedule_fri_2": "0","schedule_sat_0": "0", "schedule_sat_1": "0", "schedule_sat_2": "0", "submit": "set_alarm()"})

headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
conn = httplib.HTTPConnection("http://admin:123456@.192.168.xxx.xxx:xxxx")
conn.request("POST", "/set_alarm.cgi?next_url=alarm.htm", params, headers)
response= conn.getresponse()
print response.status, response.reason
data= response.read()
print data
con.close()
______________________________________________________

Edit(cofi): In Code-Tags gesetzt

Re: Aktivieren/deaktivieren motion_alarm IP Cam

Verfasst: Freitag 14. Februar 2014, 17:24
von Sirius3
@diveteufel:oben hast Du einen GET-Request gezeigt, hier machst Du einen gemischten GET/POST-Request. Ob damit der Server umgehen kann, ist nicht sicher.

Re: Aktivieren/deaktivieren motion_alarm IP Cam

Verfasst: Freitag 14. Februar 2014, 17:30
von diveteufel
@sirius: Danke für die Antwort, aber könntest du mir das etwas nächer erklären?
hab versucht mir das mittels Google zurecht zu frickeln :(

Re: Aktivieren/deaktivieren motion_alarm IP Cam

Verfasst: Donnerstag 20. Februar 2014, 09:00
von diveteufel
so habe es lösen können.
der Hauptgrund lag in einem schreibfehler.

Für alle dies interessiert hier die Lösung:

Code: Alles auswählen

def fetch_url(url, params, method):
    params= urllib.urlencode(params)
    if method=="GET":
        f = urllib.urlopen(url+"?"+params)
    else:
        f=urllib.urlopen(url,params)
    return(f.read(), f.code)

url="http://xxx.xxx.xxx.xxx/set_alarm.cgi"
method="GET"
params={'next_url':'alarm.htm','motion_armed': 0, 'input_armed': 0, 'motion_sensitivity': 2, 'iolinkage': 0,
        'mail': 0, 'upload_interval': 0, 'schedule_enable': 0, 'schedule_sun_0': 0, 'schedule_sun_1': 0, 'schedule_sun_2': '0',
        'schedule_mon_0': 0, 'schedule_mon_1': 0, 'schedule_mon_2': 0, 'schedule_tue_0': 0, 'schedule_tue_1': 0,
        'schedule_tue_2': 0, 'schedule_wed_0': 0, 'schedule_wed_1': 0, 'schedule_wed_2': 0, 'schedule_thu_0': 0,
        'schedule_thu_1': 0, 'schedule_thu_2': 0, 'schedule_fri_0': 0, 'schedule_fri_1': 0, 'schedule_fri_2': 0,
        'schedule_sat_0': 0, 'schedule_sat_1': 0, 'schedule_sat_2': 0}
[content, response_code]=fetch_url(url, params, method)

if (response_code==200):
    print content
else:
    print response_code

Re: Aktivieren/deaktivieren motion_alarm IP Cam

Verfasst: Donnerstag 20. Februar 2014, 09:19
von Hyperion
Zeile 4 sieht gar nicht gut aus! Dafür sollte es einen passenden API-Aufruf geben; wäre ja noch schöner, wenn man sich einen GET-Request immer dermaßen umständlich zusammen schustern müsste :-) Da solltest Du noch einmal gucken...

... oder aber auf *das* Modul für HTTP setzen: Requests