Hallo,
kennt sich jemand mit zoneminder aus? Ich würde gerne über einen externen Schalter (z.B. Homematic) von fhem aus die Bewegungserkennung einer Kamera unter zoneminder an- und ausschalten. Das Web-GUI von zoneminder benutzt an der nötigen Stelle (modect / monitor) ein Listenfeld und ich weiß nicht wie ich das mit einem externen Link bedienen soll.
Danke :-)
Hi,
ich kenne zoneminder zwar nicht, habe aber auch zum Auslesen des Schul-Vertretungsplans meiner Tochter einen Weg gesucht, Webseiten fernzusteuern. Vielleicht hilft mein kleines Script für dein Problem. Ich rufe es zu passenden Uhrzeiten per cron, sowie auf Anforderung aus tabletui per systemcall auf.
use strict;
use warnings;
use POSIX;
use Modern::Perl;
use HTML::TableExtract;
use WWW::Mechanize;
use LWP::Simple;
use URI::Escape;
my %data=parseVertretungsplanURL();
sub getCSRFToken{
my $token="";
my $content=get("http://myfhem/fhem");
die "Couldn't get it!" unless defined $content;
my $index1=index($content,"fwcsrf=");
$index1+=8;
print "1: ".$index1;
my $index2=index($content,"'",$index1);
print "\n2: ".$index2;
$token=substr($content,$index1,$index2-($index1));
print "\ncontent: ".substr($content,$index1-12,$index2-($index1)+5)."\n";
print "\ntoken: ".$token."\n";
return $token;
}
sub parseVertretungsplanURL{
my $token=getCSRFToken;
get("http://myfhem/fhem?cmd.dummy_Vertretungsplan=set%20dummy_Vertretungsplan%20doUpdate%20inProgress&fwcsrf=".$token);
my ($mech) = WWW::Mechanize->new();
$mech->get('https://schule.de/login/');
my $res =$mech->submit_form(
form_id => 'login',
fields => { username => 'user' , password => 'passwort' },
);
return "Couldn't submit form" unless $res->is_success;
my %AllRows=();
my @info=();
my @header=();
my @stand=();
my $infost="";
my $headerst="";
my $standst="";
my $datumst="";
my $details="";
...
Seite und Unterseiten auslesen
...
#Daten in FHEM aktualisieren:
get("http://myfhem/fhem?cmd.dummy_Vertretungsplan=set%20dummy_Vertretungsplan%20f_Table%20".uri_escape("<table>".$headerst.$details."</table>")."&fwcsrf=".$token);
get("http://myfhem/fhem?cmd.dummy_Vertretungsplan=set%20dummy_Vertretungsplan%20d_Details%20".uri_escape($details)."&fwcsrf=".$token);
get("http://myfhem/fhem?cmd.dummy_Vertretungsplan=set%20dummy_Vertretungsplan%20c_Header%20".uri_escape($headerst)."&fwcsrf=".$token);
get("http://myfhem/fhem?cmd.dummy_Vertretungsplan=set%20dummy_Vertretungsplan%20b_Info%20".uri_escape($infost)."&fwcsrf=".$token);
sleep(1); # Wegen des notifys auf Stand sicherheitshalber warten bis die anderen Readings upgedatet sind, daher stand auch zuletzt ;-)
get("http://myfhem/fhem?cmd.dummy_Vertretungsplan=set%20dummy_Vertretungsplan%20a_Stand%20".uri_escape($standst)."&fwcsrf=".$token);
my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime;
my $hms = sprintf("%02d.%02d.%04d %02d:%02d", $mday, $month+1, $year+1900, $hour, $min);
get("http://myfhem/fhem?cmd.dummy_Vertretungsplan=set%20dummy_Vertretungsplan%20z_LastUpdate%20".uri_escape($hms)."&fwcsrf=".$token);
get("http://myfhem/fhem?cmd.dummy_Vertretungsplan=set%20dummy_Vertretungsplan%20doUpdate%20done"."&fwcsrf=".$token);
return %AllRows;
}
PS: Vielleicht gehen manche Sachen einfacher, bin noch am perl lernen. :D
vielen Dank,
aber ich glaube nicht, dass ich das für mich umgebogen bekomme. Zoneminder ist sehr in kleine Einzelprogramme aufgeteilt, wenn man wüsste wo, dann sollte es an der GUI vorbei am geschicktesten gehen. Ich forsche noch...
Ich habe gerade mal nach zoneminder api gesucht und
http://zoneminder.readthedocs.io/en/stable/api.html (http://zoneminder.readthedocs.io/en/stable/api.html)
gefunden. Da stehen curl-Befehle zum login und zum lesen und setzen von config-Parametern:
curl -d "username=XXXX&password=YYYY&action=login&view=console" -c cookies.txt http://yourzmip/zm/index.php
curl -b cookies.txt -XPUT http://server/zm/api/configs/edit/ZM_X10_HOUSE_CODE.json -d "Config[Value]=B"
X10_HOUSE_CODE ist natürlich nicht der passende parameter für dein Problem, damit solte aber ein shellscript hinzubekommen sein. Und das könnte dann aus fhem aufgerufen werden.
Hi,
das sieht gut aus! Ich dachte das ganze über Aufrufe der einzelnen Programme machen zu müssen aber die von dir gefundene API hat hat ein disable/enable für jede Kamera. Das tuts auch :)
Hallo, ich habe auch Zoneminder laufen, folgendes kann ich bei mir direkt in der FHEM Kommandozeile eingeben:
"sudo wget -O /dev/null -q http://192.169.1.26/zm/api/monitors/alarm/id:3/command:on.json"
damit wird dann eine Aufnahme der 3. angelegten Kamera gestartet.
Hiermit wird die Aufnahme wieder gestoppt:
"sudo wget -O /dev/null -q http://192.169.1.26/zm/api/monitors/alarm/id:3/command:off.json"
es gibt noch weitere Befehle, die ich aber so nicht nutze.
Welche Version hast du laufen, es geht glaube mit der API erst ab 1.29.0
Grüße Marcel
####Edit1:
Damit wäre dann z.B. per Button eine Aufnahme bei mir möglich:
define HM_Button1_on_notify notify HM_Button1:on "sudo wget -O /dev/null -q http://192.169.1.26/zm/api/monitors/alarm/id:3/command:on.json"
define HM_Button1_off_notify notify HM_Button1:off "sudo wget -O /dev/null -q http://192.169.1.26/zm/api/monitors/alarm/id:3/command:off.json"