Samstag, 25. Juli 2015

Himbeere mit Blauzahn

Für Anwesenheitserkennung im Haus gibt es viele Varianten. Mittels Bluetooth ist eine davon, die wollte ich schon immer mal probieren. Jetzt steht vielleicht eine Umstellung durch das neue FRITZ!OS an, deshalb schnell mal getestet. Wie installiert man Bluetooth auf dem Raspberry? Das hat mir grundlegend geholfen. Ich schreibe hier mal wieder genau auf, wie ich es gemacht habe:

Zuerst den Stick bestellt, der hier funktioniert am Raspberry unter debian wheezy problemlos: "CSL USB Nano Stick V4.0 Model BSN23966"
Je nach Modell ist der Raspberry sensibel, wenn man USB Geräte steckt, also besser runterfahren und erst dann anstecken. Obwohl bei einem Versuch der BT Stick nach dem einstecken erkannt wurde, lief trotzdem nach der Installation der Bluetooth Dienst nicht. Nach einem Reboot funktionierte alles.
Der Befehl
 lsusb  
listet mir diese Gerät:
 Bus 001 Device 004: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)  
Sieht also erstmal gut aus.

Jetzt noch Software installieren, update muss einmal am Tag sein, upgrade und autoremove kann man ab und zu mal machen um aktuell zu sein
 sudo apt-get update  
 sudo apt-get upgrade  
 sudo apt-get autoremove  

Die eigentlichen Dinge werden jetzt installiert
 sudo apt-get install bluetooth bluez-utils blueman  

Danach kann man den Status abfragen:
 /etc/init.d/bluetooth status  
Die Quittung sollte so aussehen
 [ ok ] bluetooth is running.  

Jetzt aktiviert man z.B. am Smartphone Bluetooth und macht es für einen Zeitraum sichtbar. Dann kann man folgendem Befehl die Bluetooth Umgebung scannen.
 hcitool scan  

Die Ausgabe sieht dann etwa so aus
 11:22:33:44:55:66    Nexus  

Auch wenn Bluetooth am Smartphone jetzt wieder nicht mehr auf sichtbar steht, kann man die Erreichbarkeit testen solange Bluetooth aktiv ist.
 sudo l2ping -c 1 11:22:33:44:55:66  

Damit ist die Einrichtung und der Test abgeschlossen. Jetzt kann man Bluetooth zur Anwesenheitserkennung von Geräten nutzen.

Die Reichweite ist nicht hoch, es geht also wirklich Zimmer oder Etagenweise. Ein paar Meter und eine Wand schafft er aber schon. Die Erkennung ist schneller als mit Wlan, dass werde ich mir vor allem für die "Ich bin wieder da" Erkennung zu nutze machen.

Die Zeiten ändern sich

AVM hat es angekündigt und nun umgesetzt: FRITZ!OS 06.24 ist das letzte Betriebssystem wo Telnet noch aktivierbar ist und die WEBCM CGI Schnittstelle vorhanden ist. Seit ein paar Tagen ist für die FB7490 das neue FRITZ!OS 06.30 offiziell verfügbar.

Beide Schnittstellen wurden aus Sicherheitsgründen entfernt. Als einzige Schnittstelle wird jetzt TR-064 unterstützt.

Damit ist es an der Zeit das Konstrukt mit der FHEM Instanz auf der Fritzbox zu überdenken. Das System soll ja "supported" bleiben. Im Vordergrund steht für mich nach wie vor die Anwesenheitserkennung über Wlan.

Umstellung FHEM auf neues FB Interface

Das FRITZBOX Modul wurde von seinem Entwickler in den letzten Wochen kräftig überarbeitet.

Installation des Fritzbox Moduls

Update FHEM neue Version (FRITZBOX.pm mindestens 8978 2015-07-15)

Eingeleitet wird jede Installation mit Aptitude täglich mit einer Aktualisierung
sudo apt-get update
Wenn man noch mit telnet experimentieren will (macht nur Sinn bis Version 06.24 oder mit Freetz) braucht man telnet
sudo apt-get install libnet-telnet-perl

Auf alle Fälle braucht man folgende perl Module, bei mir waren die alle schon installiert (Basis, Sonos und netatmo)
sudo apt-get install libjson-perl libwww-perl libsoap-lite-perl libjson-xs-perl

Jetzt kann das FRITZBOX Device angelegt werden
define FB7490 FRITZBOX
set FB7490 password xxxx
attr FB7490 allowTR064Command 1

Wenn die Fritzbox nicht über die Namensauflösung fritz.box im Netz erreichbar ist, muss das Attribute fritzBoxIP mit der IP Adresse bestückt werden.
Jetzt spricht FHEM mit der FB über telnet oder/und TR064 und das Device sollte mit Werten gefüllt werden. Es dauert eventuell zwei drei Abfragerunden eh alles komplett ist. In den Internals kann man ablesen ob die FB überprüft ist (APICHECKED) und welche Schnittstellen zur Verfügung stehen (LUAQUERY, TELNET, TR064, WBCM)

Über das Attribute INTERVALL kann man das Abfrageintervall auf 60 sec stellen.

Jetzt spricht FHEM mit der FB über telnet oder/und TR064.

Anwesenheit von WLAN Geräten ermitteln.

Aktive Wlan Geräte werden in den Readings gelistet:
mac_xx_xx_xx_xx_xx_xx Name

Werden Geräte im Wlan abgemeldet, erscheinen sie kurzzeitig mit dem Namen "inactive" und werden später nicht mehr gelistet.
Eine Abfrage liefert den Namen des Gerätes zurück oder nichts, eventuell auch "inactive". Das kann man direkt in der Befehlszeile von FHEM testen:
{ReadingsVal("FB7490","mac_11_22_33_44_55_66","")}

Daraus habe ich nun folgende Abfrage gebaut


Zunächst wird eine Routine in 99_myUtils eingefügt. Ist die 99_myUtils.pm noch nicht vorhanden kann man das Template von FHEM verwenden. War die Datei schon vorhanden, darf man nach dem editieren ein reload 99_myUtils nicht vergessen. Wie es genau geht steht im Wiki 
Das ist meine erste wirklich selbstgeschrieben Perl Routine:

######## Netzwerk Gerät über Fritzbox abfragen ############
sub
NetDevDa($$$)
{
       my ($FB, $Reading, $Device) = @_;
       my $Name = ReadingsVal($FB,$Reading,"");

       if( $Name eq $Device) {
           return 1;
       }
       else {
           return 0;
       }
}

Definition mit dem PRESENCE Modul

Die interne Fritzbox Funktion aus dem Modul können wir derzeit so nicht mehr verwenden. Sie funktioniert nur wenn FHEM lokal auf der Fritzbox läuft.
Die Abfrage im PRESENCE Modul kann auch mit eigenen Funktionen erfolgen. Die Funktion habe ich in der 99_myUtils vorbereitet.

define Wlan_Device PRESENCE function {NetDevDa("FB7490","mac_xx_xx_xx_xx_xx_xx","<Name aus dem Reading>")} 10 30

Das PRESENCE Modul würde nach dieser Definition alle 30 Sekunden zwei Events feuern, man kann sich das gut im "Event monitor" anschauen. Einen Event mit <state> und einen Event mit "presence: <state>". Egal ob sich am Status was geändert hat oder nicht. Das wollen wir nicht, deshalb setzt man noch das Attribute event-on-change-reading auf den Wert state. Damit wird nur ein Event mit dem Inhalt <state> gesendet in dem Moment wo sich der Status ändert. Das ist für die angeschlossene Auswertelogik von Bedeutung.
attr Wlan_Device event-on-change-reading state

Jetzt könnte man noch die Anwesenheit protokollieren:
define FileLog_MobileGeraete FileLog ./log/MobileGeraete-%Y.log Wlan_Device:.*|Wlan_Device2:.* 

Diese Abfrage der Fritzbox funktioniert im Gegensatz zur simplen LAN-PING Methode des PRESENCE Modules auch für Geräte, die die Wlan Schnittstelle bei Inaktivität abschalten (z.B. iPhone).

Etwas mehr Komfort

Die obige Abfrage erfüllt ihren Zweck auf die Schnelle, ist aber etwas unkomfortabel. Eigentlich werden MAC Adressen in der Form 11:22:33:44:55:66 verwendet und eigentlich will man ja nur wissen ob eine bestimmte MAC Adresse im Netzwerk vorhanden ist. Ob eine oder mehrere Fritzboxen oder Fritz Repeater im Netz vorhanden sind, sowie der konkrete Name des Gerätes sollte dabei egal sein.
In Anlehnung an diesen Beitrag im Forum habe ich den Code noch etwas ergänzt. Im Wiki gibt es jede Menge Varianten und Informationen dazu.

######## Netzwerk Gerät über Fritzbox abfragen ############
sub
NetDevDa($)
{
    my $n = 0;
    my ($Reading) = @_;
    $Reading =~ tr/:/_/;
    my @fbs = devspec2array("TYPE=FRITZBOX");
       foreach( @fbs ) {
          my $Name = ReadingsVal($_,"mac_" . $Reading,"");
          if( ($Name ne "") && ($Name ne "inactive") ) {
              $n++;
          }
       }
    if( $n == 0) {
        return 0;
    } else {
        return 1;
    }
}
Damit wird die Definition im PRESENCE Modul einfacher und wesentlich flexibler:
define Wlan_Device PRESENCE function {NetDevDa("xx:xx:xx:xx:xx:xx")} 10 30

Fritzbox auf neues System aktualisieren

Damit ich relativ sicher bin, das die Anwesenheitserkennung reibungslos funktioniert hatte ich Telnet auf der FB deaktiviert und die FHEM Instanz beendet. Nach ein paar Wochen Test ist es an der Zeit die Umstellung durch Update der Fritzbox zu beenden.

Ich habe eine Sicherung der Fritzbox Einstellungen gemacht, die Wiederherstellungsprogramme von AVM für die Version 6.24 und 6.30 heruntergeladen und dann einfach Update gedrückt.
Funktioniert!
Man bekommt über die FRITZ!NAS Funktion immer noch den alten fhem Pfad, der wird nicht gelöscht. Wer also vergessen hat, dass nach dem Update FHEM nicht mehr läuft und auf ein anderes System umziehen will, kann jetzt immer noch alles retten.
Was bleibt ist die Ausschrift auf der Startseite "Vom Hersteller nicht unterstützte Änderungen". Wer also sein System noch ganz sauber machen will, kann jetzt das Recovery Programm starten und anschließend die Sicherung der Einstellung zurückspielen. Dazu unbedingt die Hinweise  von AVM beachten.
Dabei wird der Speicher der Fritzbox komplett gelöscht. Also vorher alle Daten über FRITZ!NAS sichern!

Sonntag, 19. Juli 2015

Es ist Sommer

Ich habe eine Bose Mini Soundlink und die will natürlich mit Musik gefüttert werden. Vor allem wenn man irgendwo im Indischen Ozean am Pool liegt ...
Vielleicht ist der Artikel nicht ganz so technisch wie die Anderen, er hat auch nicht Anspruch auf Vollständigkeit und Werbung für irgendetwas will ich schon gar nicht machen, aber wie gesagt: es ist Sommer...
Also ich habe alles mit: Soundbox, Smartphone, Ultrabook. Internet ist vor Ort, alles ist einfach vernetzt. Ich habe etwas von meiner Lieblingsmusik dabei, aber wollen die anderen die auch hören? Und vor Ort gibt es doch ganz andere Musik. Also vielleicht Internetradio streamen?
Naja, die Begeisterung ist schnell an der Grenze. Internetradios haben überall auf der Welt das Problem, dass der Stream immer mal abbricht. Das hat mit Wlan oder der Bandbreite wenig zu tun. Ist das eventuell Methode. Und dann die Werbung! Als erstes kommt jeden Tag die gleiche Werbung, wenn man den Stream startet und neuerdings auch dann, wenn man mal Pause drückt - das nervt! Und die meisten Stationen haben eh bloß eine Playlist, die eine Stunde reicht, danach geht es wieder von vorne los. Da hat dann auch die Musik des Sega oder Seggae relativ schnell den exotischen Bonus verloren.

Ein Kumpel hatte mir vor einiger Zeit gesagt: Ich kaufe keine CDs mehr, ich habe jetzt ein Spotify Abo - für 10 € im Monat kann man immer hören was man will. Genau, das wollte ich doch auch mal probieren! Und jetzt ist die Zeit!

In unserem schöne Ferienhaus gab es noch folgende technische Herausforderung: Der Internetanschluss lag im Wohnzimmer, 5 meter und 3 Wände weiter war die Küche, da war dann Wlan an einer gaaanz ausgesuchten Stelle. An der Stelle wo man die Box gut hören konnte jedenfalls nicht. Also bildete das Smartphone mittels Bluetooth die Brücke zwischen Wlan und Box. Das Smartphone hat offenbar keine so weitreichende Blauzahn Antenne - immer wenn einer durch die Küche lief, blubberte es in der Box.
Der Pool lag noch weiter weg als die Küche, wenn ich den Router aus dem Fenster etwas zweckentfremdet auf ein ansonsten unnützes Stilmöbel aus dem Vorraum stellte, gab es eine Stelle im Garten an der ich das Smartphone als Brücke zur Box in hörbarer Nähe zum Pool platzieren konnte.
Schau an: Das Notebook hat bessere Antennen, kein Wunder, ist ja auch größer.

Übrigens: Dass die Internetbandbreite auch im Indischen Ozean für Streaming nicht das primäre Problem darstellt, habe ich anhand vom Streamingdienst Deezer mitbekommen. Da gab es nämlich die Musik des dortigen großen internationalen Musikfestivals "Sakifo" zum Probe hören, das funktionierte astrein! Also die Internetradios wollen das so! Nach dem Abbruch kommt immerhin die "täglich grüßt das Murmeltier" Werbung.

Weil das Notebook die besser Antenne hat, bin ich also in den Windows App Store und habe gesucht. Siehe da: eine Musik App ist schon vorinstalliert --> xbox music. Wie alle Namen von Microsoft - verwirrend. Nein man braucht keine xbox, der Dienst heißt einfach so. Einfach: Probeabo für 30 Tage, einen MS Account habe ich sowieso schon, also einfach los geht's!
Was wollt ihr hören? Suche, Auswahl, Musik läuft.
Radio - was verbirgt sich hinter dieser Funktion? Welche Sender gibt es da? Hmmm...
Coole Sache: Man nimmt einfach einen Titel den man jetzt gerne hören möchte, startet die Radiofunktion und er spielt diesen Titel und danach immer weiter, irgendwie nach einem hinterlegten Schema, aus dieser Musik oder Interpreten Richtung, ohne Ende. Wenn einem die Richtung nicht gefällt, dann ein neuer Versuch. Das ist eigentlich die Revolution der Radiomusik: keine Werbung, ich muss nicht lange suchen, meine Stimmung entscheidet die Musik und nicht der Sender. Ich finde das wirklich genial.

Nach dem Urlaub sind natürlich die 30 Tage irgendwann um, ich will Nägel mit Köpfen machen. Welchen Dienst von den vielen nimmt man denn nun? Appel kündigt gerade seinen Streaming Dienst an, noch einer...
Welches ist mein Kriterium? Ach ja, zu Hause steht ja Sonos. Da sollte der Dienst natürlich auch gehen! Xbox Music und Sonos? Fehlanzeige, offenbar können die sich nicht leiden, kein xbox music auf der Sonos, gar nicht! Also? Spotify, Probeabo 60 Tage. Und? Sonos? Geht, aber auch Radiofunktion? Ne, das was da in Sonos mit Spotify geht, ist sehr dürftig. OK, nächstes Kriterium, was habe ich schon, wo bin ich schon? Android! Google Music ist schon da. App, Account alles vorhanden. Also Probeabo, in Sonos aktivieren - und? Radio? Geht! Aus meiner Sicht geht auf dem Handy und in der Sonos ziemlich das Gleiche, super!
Und nun? Ich bin ja fair, teste alles noch etwas zu Ende. Xbox music ist storniert, das war ganz easy. Es gab 'ne faire vorab Info, dass es in ein paar Tagen kostenpflichtig wird. Bei Google gab es die Info, dass es jetzt kostet, zu spät für Storno. Bei Spotify gefällt mir die App unter Windows, aber unter Android finde ich sie doof und ganz mickrig unter Sonos.
Es wird wohl bei Google Music bleiben, gute App unter Android, gute Integration in Sonos.
Und welche Musik ist vorhanden? Ich habe bisher bei allen alles gefunden und jede Menge neu kennengelernt. Das ist wirklich 'ne geile Sache!

Pimp my HMLAN

Ich habe eine kritische Stelle in meiner Homematic Umgebung: mein Keller unter der Terrasse. Hier ist zunächst ein 4 fach Hutschienen Aktor verbaut, weiteres soll aber folgen. Mit meiner CCU1 hatte ich seinerzeit das Problem: Wenn die Jalousien runter gingen schaltete die Adventsdekobeleuchtung im Garten nicht mehr aus. Bis ich den Zusammenhang mitbekam verging eine Weile. Schuld waren die grenzwertigen Send- und Empfangsbedingungen zwischen CCU1 und Aktor:
-> 10 meter Luftlinie und je nach Anordnung zwei Decken und zwei Wände. Die Jalousie unten war dann zuviel!
Bei der Umstellung auf HMLAN und FHEM konnte ich das zunächst durch die Platzierung des HMLAN umgehen. Allerdings wollte ich das noch zuverlässiger machen. Der HMLAN hat prinzipiell ein ähnliches Problem mit seiner eingesperrten Mini Draht Antennne. Bei der CCU1 bin ich seinerzeit nach diesem Artikel vorgegangen.
Auch im FHEMWIKI findet  man diesen Artikel und einfacherer Varianten für den HMLAN.
Ich hatte aus einem Bausatz HM-SEN-MDIR-SM noch die kleine Gummitülle die die neue Antenne nach außen etwas in Form bringt. Am Gehäuse des HMLAN muss man minmal ein paar Kerben feilen um die Antenne und den Gegenpol nach außen zu bringen.


Die Abdeckung/Lichtleitung für die LEDs habe ich weggelassen, da mich das helle Blinkern eh gestört hat. Im Boden des HMLAN habe ich seitlich drei kleine Löcher in Nähe der LED gebohrt, da dringt genug Licht nach außen wenn der HMLAN an der Wand nicht in Augenhöhe hängt.

Die RSSI Werte zum kritischen Aktor im Keller vor
    LichtKeSW1      HMLAN1          LichtKeSW1      -102.0  -98.4 -107.0< -82.0    24
    LichtKeSW1      LichtKeSW1      HMLAN1           -93.0  -95.0 -103.0< -84.0    19
und nach dem Umbau
    LichtKeSW1      HMLAN1          LichtKeSW1       -79.0  -81.0  -84.0< -76.0     6 
    LichtKeSW1      LichtKeSW1      HMLAN1           -76.0  -77.7  -81.0< -74.0     6 
zeigen deutlich die Verbesserung. Vor allem ist "-80" eine Art kritische Schwelle und die habe ich jetzt doch meist unterschritten. 
Die RSSI Werte kann man sich gut mit dem HMinfo Modul ausgeben lassen.

Dienstag, 7. April 2015

Computer mit FHEM an- und ausschalten

Wake On LAN mit FHEM

Kann ein Rechner im Netzwerk Wake on Lan so können wir ihn ganz einfach auch mit FHEM aufwecken. Wir brauchen die MAC Adresse und die IP Adresse des Rechners. Die IP Adresse wird von dem WOL Gerät in FHEM verwendet, um mit Ping zu prüfen, ob der Rechner im Netzwerk erreichbar ist. Entsprechend wird der Status auf on oder off gesetzt. Ich verwende in meinem Beispiel die UDP Methode. Für diese Methode muss nichts weiter installiert werden. In der Commandref  sind noch die Methoden mit den Tools ether-wake oder wakeonlan beschrieben, dafür müssen die entsprechenden Tools installiert werden.
define <Rechnername> WOL xx:xx:xx:xx:xx:xx 192.168.x.x UDP
Generell ist es sinnvoll zu konfigurieren, in welches Netzwerk das UDP Broadcast Packet versendet wird. Dazu muss die Broadcast Adresse konfiguriert werden. Dies geschieht mit dem entsprechendem  Attribut:
attr <Rechnername> useUdpBroadcast 192.168.x.255
Mit einem Druck auf on (oder set <Rechnername> on) sollte den Rechner aufwecken. Geschieht das nicht, ist der Rechner nicht richtig auf WOL konfiguriert. Man hat leider kein Feedback von der Weboberfläche, man "spürt" nicht ob man gedrückt hat oder nicht.
Sollte nach ca. 1 min der Status des eingeschalteten Rechners nicht auf on aktualisiert werden, ist zu prüfen ob der Rechner auf Ping reagiert, falls nicht muss eventuell noch die Windows Firewall konfiguriert werden (siehe weiter unten).


Um den Rechner auch ausschalten zu können, müssen wir ihn natürlich ordentlich herunterfahren. Für einen Windows Computer müssen wir folgende Vorarbeit leisten.

Benutzerverwaltung unter Windows

Um shutdown von der übrigen Verwaltung von Windows sauber zu trennen und mit maximaler Sicherheit für das System zu arbeiten, legen wir einen separaten Benutzer an.

Hinweis: Wer das alles kurz mit ein paar Zeilen Powershell Script machen will, sollte hier schauen.

Die Einrichtung neuer Benutzer ist auf jedem Windows System etwas anders zu finden, dass hängt leider nicht nur von der konkreten Version sondern auch persönlicher Konfiguration ab. Zumindest seit Windows 7 geht es einfach auf jedem deutschen System mit der Eingabe des Wortes "Benutzerkonten" im Suchfeld.
Generell führt uns die "Windows Taste" auf der Tastatur ins Suchfeld wenn wir uns auf dem Desktop befinden. Mit der Maus geht es so:
Windows 7 und Server 2008 - Startknopf ( -> Startmenü) und dann einfach tippen
Windows 8 und Server 2012 - Windows Knopf ( -> Kacheloberfläche) und dann einfach tippen


Wer sich manuell durch hangeln will, der muss das in etwa so tun:
Systemsteuerung --> Benutzerkonten --> Benutzerkonten verwalten
Leider ist das von Windows zu Windows Version immer wieder etwas verschieden.


Hier erstellen wir  ein neues Konto z.B. den "UserShutdown" als Standardbenutzer. Da wir später den Account im Klartext in der FHEM Konfiguration eintragen, bekommt dieser Benutzer nur minimale Rechte. Ich begnüge mich mit Standardbenutzer und einem zusätzlichem Recht. Man könnte ihm eventuell weitere Rechte entziehen.

Wir müssen ein sicheres Kennwort vergeben. Sichere Passwörter bestehen aus Groß- und Kleinbuchstaben, Zahlen und Sonderzeichen. Sonderzeichen sollte man sorgsam verwenden, es gibt nicht alle in jeder Sprache.

Beispiel: P@ssw0rd


Dieser Benutzer braucht jetzt noch entsprechende Rechte. Dazu öffnen wir die lokale Sicherheitsrichtlinie. Das geht mit dem Begriff "secpol.msc" im Suchfeld (siehe oben). Bei Windows 8 ist das allerdings etwas umständlich, da wird die App nicht sofort sondern erst ganz links im Bing Fenster angezeigt. Alternativ kann man gpedit.msc eingeben und verwenden, die Sicherheitseinstellungen sind eine Untermenge von Gpedit.

Der Benutzer bekommt das Recht das System herunterzufahren. Weitere Rechte sind nicht notwendig.


Soll der am Windows Computer angemeldete Benutzer eine Nachricht bekommen, muss ein Dienst aktiviert werden. Dazu tippen wir einfach services.msc im Suchfeld ein (siehe oben). Der Dienst Remoteregistrierung wird auf automatisch gestellt und gestartet. Für die Remote Shutdown Funktion alleine ist es nicht notwendig.








Der Dienst Remoteregistrierung ist wohl auch für den Eintrag des Shutdowngrundes im Eventlog zuständig.
Will man den Remote Shutdown von einem Windows System einleiten, müssen eventuell noch folgende Dienste aktiviert sein:
- Windows-Remoteverwaltung
- Windows-Verwaltungsinstrumentation





Firewalleinstellung unter Windows

Wenn wir Firewallregeln ändern müssen, empfehle ich die direkte Methode über Windows Firewall: Wir tippen im Suchfeld (langsam sollte jeder wissen wie es geht) firewall ein und öffnen das Tool "Windows-Firewall mit erweiterter Sicherheit".

Hier klicken wir auf Eingehende Regeln, es kann etwas dauern bis die Regeln angezeigt werden.
Für die Überwachung muss Ping zulässig sein, dafür müssen wir die beiden Regeln "Datei- und Druckfreigabe (Echoanforderung -ICMPvx eingehend) aktivieren. Sicher reicht uns v4, aber ich habe beide aktiviert.

Beispiel: Windows Server 2012

Für den Shutdownbefehl von Linux muss offenbar die Standardeinstellung der Firewall nicht angepasst werden, falls wenigstens Datei und Druckfreigabe aktiviert ist. Ansonsten je nach Windows Version überprüfen, dass SMB eingehend (Port 445) aktiviert ist. Für den Shutdown Befehl von einem Windows System muss unter Umständen mehr aktiviert werden:
Technet Artikel
Mit Powershell cmdlet Stop-Computer funktioniert es bei mir auch ohne.



Windows Shutdown mit FHEM

Das hier gezeigte Beispiel geht von FHEM auf einem Linux System aus.

Voraussetzung für den "net" Befehl unter Linux ist das Packet samba-common-bin. Ist bisher kein Samba installiert, muss jetzt zumindest dieses Packet installiert werden:

sudo apt-get install samba-common-bin
Wenn Windows ein remote shutdown zulässt, können wir mit dem Attribute shutdownCmd den Befehl eintragen. Ein Druck auf off lässt dann den PC innerhalb einer Minute herunterfahren.
attr <Rechnername> shutdownCmd "net rpc shutdown -I <Rechnername> -U UserShutdown%P@ssw0rd"


Man kann mit dem attr interval noch das Interval für die Ping Überprüfung konfigurieren. Als Standard ist die Ping Überprüfung aus und man kann mit set <Rechnername> refresh den Zustand aktualisieren.


Ein Linux System remote herunterfahren


Der shutdown Befehl für ein Linux System lässt sich am einfachsten per ssh realisieren. Das habe ich in dem Artikel beschrieben:
Per ssh Remote Befehle direkt ausführen

Die Sache mit der Broadcast Adresse

Bei Geräten mit mehreren Netzwerkanschlüssen ist es möglich, dass das Magic Packet ins falsche Netzwerk gesendet wird und damit beim Empfänger gar nicht ankommt. Mit dem Route Befehl kann man sich anschauen, was passieren würde:
IPv4-Routentabelle
===========================================================================
Aktive Routen:
     Netzwerkziel    Netzwerkmaske          Gateway    Schnittstelle Metrik
          0.0.0.0          0.0.0.0    192.168.178.1   192.168.178.54     25
        127.0.0.0        255.0.0.0   Auf Verbindung         127.0.0.1    331
        127.0.0.1  255.255.255.255   Auf Verbindung         127.0.0.1    331
  127.255.255.255  255.255.255.255   Auf Verbindung         127.0.0.1    331
   172.28.130.240  255.255.255.240   Auf Verbindung    172.28.130.241    271
   172.28.130.241  255.255.255.255   Auf Verbindung    172.28.130.241    271
   172.28.130.255  255.255.255.255   Auf Verbindung    172.28.130.241    271
    192.168.178.0    255.255.255.0   Auf Verbindung    192.168.178.54    281
   192.168.178.54  255.255.255.255   Auf Verbindung    192.168.178.54    281
  192.168.178.255  255.255.255.255   Auf Verbindung    192.168.178.54    281
        224.0.0.0        240.0.0.0   Auf Verbindung         127.0.0.1    331
        224.0.0.0        240.0.0.0   Auf Verbindung    192.168.178.54    281
        224.0.0.0        240.0.0.0   Auf Verbindung    172.28.130.241    271
  255.255.255.255  255.255.255.255   Auf Verbindung         127.0.0.1    331
  255.255.255.255  255.255.255.255   Auf Verbindung    192.168.178.54    281
  255.255.255.255  255.255.255.255   Auf Verbindung    172.28.130.241    271
===========================================================================
Ein Packet für das Netzwerk 192.168.178.x an die Broadcast Adresse 255.255.255.255 versendet würde hier im falschen Subnetz landen. Das Packet muss also an die richtige Broadcast Adresse 192.168.178.255 versendet werden. Die Tools arbeiten da unterschiedlich, blöd ist wenn man die Broadcast Adresse nicht angeben kann.

Montag, 6. April 2015

FHEM - kann ich nicht einfach bei null beginnen?

Diese Frage wird immer mal gestellt - Aber: Was ist eigentlich null?

Warnung: Was ich jetzt beschreibe löscht wirklich alle eigenen Definitionen. Falls man etwas behalten will, sollte man den Pfad /opt/fhem vorher komplett sichern!!! Zumindest die Textdatei fhem.cfg sollte man aufheben, eventuell stehen dort nützliche Definitionen drin, die man wieder übernehmen kann.

Also dann - setzen wir FHEM zurück:
- erstmal shutdown in der Befehlszeile von FHEM und tschüss Browser

Alles weitere über Terminal oder WinSCP
- die leere fhem.cfg gibt es hier, die ersetzt die bisherige fhem.cfg
Jetzt müssen wir noch ein paar Dateien unterhalb von /opt/fhem löschen:
- Inhalt von ./log löschen.
- Inhalt von ./backup löschen
- Inhalt von ./restoreDir löschen
- ./FHEM/controls_fhem.txt löschen
- ./FHEM/99_myUtils.pm kann man löschen oder behalten.

Jetzt können wir FHEM wieder starten und anschließend im Browser neu beginnen.

Diese Script würde das erledigen. Vorsicht die bestehende FHEM Installation wird damit zurückgesetzt auf null!

wget https://svn.fhem.de/fhem/trunk/fhem/fhem.cfg
sudo systemctl stop fhem
# Kopie anlegen
sudo cp -R /opt/fhem/ ~/Sicherung/
# Ab hier wird zurück gesetzt
sudo cp fhem.cfg /opt/fhem/
sudo chown fhem:dialout /opt/fhem/fhem.cfg
sudo rm -R /opt/fhem/log/*
sudo rm -R /opt/fhem/backup/*
sudo rm -R /opt/fhem/restoreDir/*
sudo rm /opt/fhem/FHEM/controls_fhem.txt
sudo rm /opt/fhem/FHEM/99_myUtils.pm
# FHEM neu starten
sudo systemctl start fhem

Sonntag, 29. März 2015

Browser Timeout und FHEM

Schon mal einen Befehl in FHEM ausgeführt und nach ca. zwei Minuten einen Time-out bekommen? Schon mal gewundert, dass ein Backup doppelt ausgeführt wurde?

Warum das so ist? Den Hinweis fand ich im Forum.
Mir sind zwei Situationen aufgefallen in denen der Browser beim Zugriff auf FHEM in einen Time-out gerät. Beim Backup und beim update force. In beiden Fällen bekommt der Browser keine Quittung für den Befehl und wartet eine Minute. Läuft der angeforderte Befehl länger als eine Minute sendet der Browser einmalig den Request neu. Damit erhält FHEM erneut den Request und führt ihn aus, der Browser zeigt nach der zweiten Minute einen Time-out.
Blöd ist: Man hat anschließend das Backup doppelt in kurzem Abstand. Das update force läuft unnötigerweise auch zweimal.
Nicht besonders schlimm, aber man kann das auch verhindern: Befehl ausführen und einfach Browser schließen.

Beim Backup gibt es noch die gute Idee es nicht manuell zu starten sondern automatisch auszuführen. z.B. vor dem Update:
attr global backup_before_update 1
Oder man richtet ein zyklisches Backup ein.