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()"
Aktivieren/deaktivieren motion_alarm IP Cam
Willkomen im Forum! 
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.

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.
Code: Alles auswählen
print("Zennoe sprach!")
@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.
-
- User
- Beiträge: 5
- Registriert: Freitag 14. Februar 2014, 11:09
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.
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.
-
- User
- Beiträge: 5
- Registriert: Freitag 14. Februar 2014, 11:09
mein Versuch:
______________________________________________________
Edit(cofi): In Code-Tags gesetzt
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
-
- User
- Beiträge: 5
- Registriert: Freitag 14. Februar 2014, 11:09
@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
hab versucht mir das mittels Google zurecht zu frickeln

-
- User
- Beiträge: 5
- Registriert: Freitag 14. Februar 2014, 11:09
so habe es lösen können.
der Hauptgrund lag in einem schreibfehler.
Für alle dies interessiert hier die Lösung:
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
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
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

... oder aber auf *das* Modul für HTTP setzen: Requests
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert