Ankündigung

Einklappen
Keine Ankündigung bisher.

Keyless In mit misterhouse

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Keyless In mit misterhouse

    Hallo,

    ich möchte inspiriert von dem Smart Home Blog von Jon Scott, den Link hatte mal ein Forumsmitglied gepostet, mit den vorhandenen Bordmitteln eine Keyless In Lösung basteln.

    Die Boardmittel:
    misterhouse
    mmh
    Wlan am Eingang
    Mobotix M12 an Eingang
    iphone oder wlan-fähiges Handy

    Misterhouse pingt das iphone alle 5 s an ob im Netzwerk verfügbar und schreibt den Status ins Log.
    Sobald man mit seinem iphone das Haus und damit den Wlan-Bereich verlässt meldet Misterhouse Netzwerkgerät iphone abgemeldet.
    Besteht der Status abgemeldet für länger als 5 Minuten wartet Misterhouse auf die Aktion Tür öffnen für iphone mit IP/Mac Adresse X/Y.
    Komme ich nun zurück meldet sich mein iphone im Wlan mit wpa2 Schlüssel an. Misterhouse vergleicht IP-Adresse und Mac Adresse und meldet Iphone erfolgreich angemeldet ins Log.
    Die Mobotix löst bei Betreten der Eingangstreppe durch Bewegungsmelder oder PIR einen Event aus und schickt eine Netzwerkmeldung an Misterhouse. Vom Anmelden des iphones im Wlan und des Auslösens des Events soll ein Zeitfenster vorgegeben werden. Betritt man während dieses Zeitfensters die Treppe öffnet Misterhouse die Tür.

    Status:

    Das An und Abmelden des iphones funktioniert ziemlich schnell und zuverlässig. Hab das auch mit einem Blackberry ausprobiert der deutlich länger braucht um die Wlan Verbindung wieder herzustellen.

    Code:
    use Network_Item;

    $network_phone1 = new Network_Item('xxx.xxx.xxx.xxx', 5);
    $network_phone2 = new Network_Item('xxx.xxx.xxx.xxx', 5);

    print_log "phone1 ist $state" if $state = state_changed $network_phone1;
    print_log "phone1 ist $state" if new_second 60 and $state = state $network_phone1;

    print_log "phone2 ist $state" if $state = state_changed $network_network_phone2;
    print_log "phone2 ist $state" if new_second 60 and $state = state $network_phone2;

    Wie kann ich denn die Mac Adresse des iphones als zusätzlichen Parameter abfragen?

    Bei Misterhouse habe ich eine Dummy Adresse erstellt für die Mobotix Kamera.

    EIB1, 9/1/0, Mobotix,

    Die wird beim Auslösen des Events Betreten der Trepppe von der Mobotix auf ON gesetzt.
    Die Mobotix verschickt foldenden http Request an Misterhouse:http:// misterhouse:8080/bin/SET;&html_list(EIB1_Item)?$Mobotix=on

    Code:

    if (time_idle $network_phone1 ("5 m aus")) {
    if (state_changed $network_phone1 eq 'an' and state_changed $Mobotix eq ON innerhalb von Zeitfenster X) {

    set $Tuer ON;

    print_log "Haus offen";
    }
    }

    Den Status der Mobotix würde ich mit set_with_timer nach gewünschter Zeit wieder auf off setzen. Ab wie sieht der Code für den Zustand aus der sich in einem zukünftigen Zeitfenster erfüllen soll?

    Klaus

    #2
    Zitat von sunnyhd Beitrag anzeigen
    Wie kann ich denn die Mac Adresse des iphones als zusätzlichen Parameter abfragen?
    Nach einem PING kann man sich mit 'arp -n' in einer Unix shell die IP Adressen und zugehörigen MAC Adressen anzeigen lassen, ARP gibt es aber auch direkt für PERL:
    Code:
    use Net::ARP;
    Gruß,
    Marc

    Kommentar


      #3
      'arp -n' in der Shell funktioniert. Vielleicht kannst Du oder jemand der Perl Experten mir einen Code-Schnipsel hinwerfen wie man die MAC-Adresse abfragt und nur nach Übereinstimmung die Anmeldung in Misterhouse bestätigt. Ist für mich Schwerstarbeit...

      Das Skript für meinen Keyless In Versuch sieht bisher so aus:

      use Network_Item;

      $network_phone1 = new Network_Item('xxx.xxx.xxx.xxx', 5);

      print_log "kb ist $state" if $state = state_changed $network_phone1;
      print_log "kb ist $state" if new_second 60 and $state = state $network_phone1;

      #Keyless In

      my $iphonekb;

      if (state_now $network_phone1 eq 'an') {

      $iphonekb=time();
      }

      if (state_changed $network_phone1 eq 'aus') {

      $iphonekb=0;
      }

      if (state_now $Mobotix eq ON && $iphonekb > time-60 && $iphonekb > 0) {

      set $Tuer ON;

      print_log "Haus offen";

      }

      Funktioniert soweit. Wenn das iphone sich wieder im Wlan anmeldet habe ich 60 Sekunden um den Bewegungsmelder auszulösen und der elektrische Türöffner summt sobald ich bei normalem Schritttempo die Türe erreiche.

      Wollte eigentlich noch den time_idle Befehl in der ersten if Schleife verwenden.

      if (time_idle $network_phone1 (5 m 'aus') and state_now $network_phone1 eq 'an')

      Funktioniert aber nicht. Jemand eine Idee woran es liegt?
      Noch keiner Bedenken wegen der Sicherheit?

      Klaus

      Kommentar


        #4
        Zitat von sunnyhd Beitrag anzeigen
        if (time_idle $network_phone1 (5 m 'aus') and state_now $network_phone1 eq 'an')

        Funktioniert aber nicht. Jemand eine Idee woran es liegt?
        "and" gibt es nicht, richtig wäre:
        Code:
        if (time_idle $network_phone1 (5 m 'aus') && state_now $network_phone1 eq 'an'){
        ...
        }
        Gruß,
        Marc

        Kommentar


          #5
          Zitat von sunnyhd Beitrag anzeigen
          Vielleicht kannst Du oder jemand der Perl Experten mir einen Code-Schnipsel hinwerfen wie man die MAC-Adresse abfragt und nur nach Übereinstimmung die Anmeldung in Misterhouse bestätigt.
          Code:
          use Net::ARP;
          my $mac = Net::ARP::arp_lookup($dev,"192.168.1.1");
          print "192.168.1.1 has got mac $mac\n";
          Gruß,
          Marc

          Kommentar


            #6
            und falls das Packet nicht installiert ist, per mcpan installieren oder ggf. hier herunterladen:
            HTML-Code:
            http://search.cpan.org/CPAN/authors/id/C/CR/CRAZYDJ/Net-ARP-1.0.tgz
            Gruß,
            Marc

            Kommentar


              #7
              Zitat von aggie89go Beitrag anzeigen
              "and" gibt es nicht, richtig wäre:
              Das stimmt nicht, er kann ebenso "and" nutzen...
              Gruß Dirk

              Kommentar


                #8
                Wirklich? man lernt nie aus ...
                Dann sieht die Abfrage aber okay aus, oder siehst du einen Fehler?
                Gruß,
                Marc

                Kommentar


                  #9
                  Zitat von aggie89go Beitrag anzeigen
                  Wirklich? man lernt nie aus ...
                  Dann sieht die Abfrage aber okay aus, oder siehst du einen Fehler?
                  Ne mir fällt nix auf. Wobei ich den time_idle Befehl noch nie genutzt habe.

                  @sunnyhd
                  Funktioniert denn der time_idle Befehl ohne die UND-Verknüpfung wie erwartet?
                  Gruß Dirk

                  Kommentar


                    #10
                    Da scheint tatsächlich was mit dem time_idle Befehl nicht zu funktionieren zumindest in meiner misterhouse Installation. Nach einem Restart wird der time_idle Befehl einmal ausgeführt und dann passiert nichts mehr...

                    if (state_changed $Licht_Bad ON and time_idle $network_phone1 ('20 s')) {

                    set $Deckenleuchte_Buero ON;

                    print_log "Test time_idle";
                    }

                    Könnte zur Bestätigung von euch einer testen ob der time_idle Befehl in mh funktioniert?

                    Danke für den Code zur Überprüfung der Mac Adresse. Mir ist eingefallen das der Router per Einstellung keine neuen Wlan Geräte zulässt außer den Bekannten. Damit findet ja die Überprüfung der MAC-Adresse bereits auf dieser Ebene statt.
                    Macht wohl keinen Sinn dies im Skript nochmals zu integrieren oder?

                    Klaus

                    Kommentar

                    Lädt...
                    X