Archiv der Kategorie: linux

[openhab] FS20 Bewegungsmelder

Manchmal ist es nicht nur hilfreich das Licht einzuschalten wenn es dunkel wird und jemand zu Hause ist, sondern wenn es dunkel ist und eine Bewegung erkannt wird.

Da ich bereits FS20 Geräte im Einsatz habe, habe ich mir für die Bewegungserkennung den FS20 Funk-Bewegungsmelder zugelegt. Für das einbinden neuer Geräte hatte ich im Vorfeld den Artikel https://www.itbasic.de/openhab-fs20-fernbedienung-und-switch-status-aktualisierung/ geschrieben.

Registriert der Bewegungsmelder eine Bewegung soll ein Aktor, in diesem Fall eine FS20 Steckdose, geschaltet werden.
In der entsprechenden items Datei wurde nun der Aktor, der Bewegungsmelder und ein weiterer Schalter angelegt

items Datei
Switch LampeOb "Flur Stehlampe" (flur) {fs20="010101"}
Switch Beweg1 "Bewegungssensor 1" (fs) {fs20="000000"}
Switch FlurBewegung1 "Bewegungsmelder auto" (flur) {ON,OFF}

Der Schalter FlurBewegung1 dient dazu das Automatische schalten zu deaktivieren, so das der Aktor dauerhaft geschaltet werden kann.

rules Datei
rule Bewegung1
when
Item Beweg1 received update
then
if(FlurBewegung1.state == ON && LampeOb.state == OFF){
sendCommand(LampeOb, ON)
}
end

Wurde die LampeOb eingeschaltet und der Schalter FlurBewegung1 steht auf ON, wird die Lampe nach 360 Sekunden wieder ausgeschaltet.

rule LampeObBewegung
when
Item LampeOb received command ON
then
if(FlurBewegung1.state == ON){
timer = createTimer(now.plusSeconds(360)) [
sendCommand(LampeOb, OFF)
]
}
end

[dashing] Wetter Widget

Auf der Suche nach einem Wetter Widget für das Dashboard bin ich auf das Verbinski Widget gestoßen.

Das Widget benötigt 3 Kacheln und zeigt das Wetter im Moment, das heutige und 7 Tage im voraus an. Neben normalen Wetterdaten wird unter anderem der Zeitpunkt des Sonnenaufgangs bzw. Sonnenuntergangs angegeben, sowie Windgeschwindigkeit und Feuchtigkeit.

Die Wetterdaten werden über http://forecast.io/ abgerufen. Für den Zugriff auf die Daten wird ein API KEY benötigt, diesen erhält man nach kostenloser Registrierung.
Der API KEY sowie die LAT LONG Informationen werden in der verbinski.rb hinterlegt.

# Forecast API Key from https://developer.forecast.io
forecast_api_key = "82827928342934729387492837492374"

# Latitude, Longitude for location
forecast_location_lat = "53.167075"
forecast_location_long = "8.199514"

Auf Deutsch umstellen

Möchte man alle Informationen auf Deutsch darstellen, müssen kleinere Anpassungen in der verbinski.html Datei vorgenommen werden. Für die Wochentage unter „this week“ wurde eine Funktion in der verbinski.rb wie folgt angepasst:

this_week = []
for day in (1..7)
day = forecast["daily"]["data"][day]
tagGer = "tes"
if day_to_str(day["time"]) == "Sun"
tagGer = "Son"
elsif day_to_str(day["time"]) == "Mon"
tagGer = "Mon"
elsif day_to_str(day["time"]) == "Tue"
tagGer = "Die"
elsif day_to_str(day["time"]) == "Wed"
tagGer = "Mit"
elsif day_to_str(day["time"]) == "Thu"
tagGer = "Don"
elsif day_to_str(day["time"]) == "Fri"
tagGer = "Frei"
elsif day_to_str(day["time"]) == "Sat"
tagGer = "Sam"
end
this_day = {
max_temp: day["temperatureMax"].round,
min_temp: day["temperatureMin"].round,
time: tagGer,
icon: day["icon"]
}
this_week.push(this_day)

Um nun die Wetterinformationen in deutscher Sprache zu erhalten, muss der Zeile 34 (verbinski.rb) &lang=de hinzugefügt werden.

....ng}?units=#{forecast_units}&lang=de"))

verbinski Wetter Widget

[dashing] Ausgabe auf einem großen Fernseher

Wenn das erstellte Dashboard auf einem größeren Bildschirm ausgegeben wird, kann es je nach Anzahl der Widgets vorkommen, das nicht die gesamte Bildschirmfläche genutzt wird.

Das Problem lässt sich sehr schnell lösen, in dem man in der Dashboard(erb)Datei folgendes hinzufügt.

<script type='text/javascript'>

$(function() {

Dashing.widget_base_dimensions = [370, 340]

Dashing.numColumns = 5

});
<script>

Die Lösung hatte ich hier gefunden: https://github.com/Shopify/dashing/issues/388

[dashing] Widget blinkt bei neuen Daten

Je nachdem wieviele Widgets auf dem Dashboard aufgeführt sind, ist es hilfreich das das Widget hervorgehoben wird auf dem zum Beispiel die Daten aktualisiert werden oder ein bestimmter Status erreicht wird.

In diesem Beispiel blinkt das Widget auf, wenn neue Daten ausgegeben werden.

Hierfür wurde in der scss Datei folgendes hinterlegt:
@keyframes blink {
50% { opacity : 0.0; }
}

Vor dem letzten } der Widget Klasse wurde zusätzlich folgendes eingefügt:
&.blinking {
animation: blink 1s linear infinite;
animation-iteration-count: 2;
}

Der Aufruf der Klasse erfolgt bei neuen Daten in der coffee Datei:
class Dashing.Text extends Dashing.Widget
onData: (data) ->
node = $(@node)
node.addClass("blinking")
setTimeout ( =>
node.removeClass("blinking")
), 5000

Damit das Widget nur blinkt wenn sich auch der Inhalt der Daten ändert, wurde in der coffee Datei eine Zeile hinzugefügt:
class Dashing.Text extends Dashing.Widget
onData: (data) ->
if data.blink
node = $(@node)
node.addClass("blinking")
setTimeout ( =>
node.removeClass("blinking")
), 5000

Das Widget blinkt nur wenn die Variable blink mit übergeben wurde.

Die Prüfung ob neue Werte mit übergeben werden, erfolgt hier in dem eingerichtetem Job.
Von dem aktuellen und dem neuen Datenarray wird zum Vergleich ein hash generiert, stimmt der hash nicht überein, wird die blink Variable mit übermittelt.
if ausgabe_hash == ausgabe.to_set.hash
send_event("widget1",{ values: ausgabe.values })
else
send_event("widget1",{ values: ausgabe.values, blink: ausgabe.length })
end

ausgabe_hash = ausgabe.to_set.hash

[dashing] unter Suse

Bei dem ersten Start vom dashing Dashboard unter Suse kam es zu folgender Fehlermeldung:
bundler: command not found: thin
Install missing gem executables with `bundle install`

Mit Hilfe von gem list konnte festgestellt werden, das das gem thin installiert war.

Die Lösung war letztendlich sehr einfach, vor dem Start des dashings musste folgende Zeile ausgeführt werden.

export PATH=$PATH:/usr/lib64/ruby/gems/2.1.0/gems/thin-1.6.4/bin/thin