Archiv der Kategorie: programmiertes

API Zugriff auf den Google Kalender

Neulich dachte ich mir, es könnte doch interessant sein den privaten Google Kalender per Ruby auszulesen und auf dem Dashboard auszugeben.

Für den API Zugriff muss zunächst ein Projekt in der google cloud unter https://console.cloud.google.com/projectcreate?hl=de ein Projekt erstellt werden. Nachdem das Projekt angelegt wurde kann unter dem Menüpunkt IAM ein Dienstkonto erstellt werden. Bei dem Erstellen des Dienstkontos sollte gleich der Schlüssel generiert werden als json Datei, diese wird später noch benötigt(dienstbenutzer.json).

Um die Daten abrufen zu können, muss das Dienstkonto auf den Google Kalender berechtigt werden.

Folgende gems wurden installiert: google-api-client, google-apis-calendar_v3, googleauth, json

Das Script selbst ist wie folgt aufgebaut:

require 'google/apis/calendar_v3'
require 'googleauth'
require 'json'

t = Time.now
zeit =  t.strftime("%Y-%d-%mT%H:%M:%Sz")
content = Google::Apis::CalendarV3::CalendarService.new
scope = 'https://www.googleapis.com/auth/calendar.readonly'

content.authorization = Google::Auth::ServiceAccountCredentials.make_creds(
  json_key_io: File.open('./dienstbenutzer.json'),
  scope: scope)
content.authorization.fetch_access_token!
termine = content.list_events(calenderid='<EmailAdresse des Kalenders>' )
events = termine.items.map do |e|
  {
     title: e.summary,
     start: e.start.date || e.start.date_time.strftime('%d.%m.%y %H:%M')}

end
puts events

Als weiteren Parameter kann neben der calenderid auch time_min und time_max verwendet werden, um die Ausgabe der Termine zu begrenzen.

Was soll auf einem Display angezeigt werden

In vielen Unternehmen beziehungsweise auch an öffentlichen Stellen hängen Display, die die verschiedensten Inhalte ausgeben. Es werden die nächsten Besucher angekündigt, das aktuelle Wetter, der Speiseplan oder andere verschiedene Dashboards. Die womöglich billigste Variante ist vermutlich einen Monitor / Fernseher zu verwenden, der an einem Raspberry Pi angeschlossen ist. Auf dem Raspberry Pi wird der Browser in dem Kiosk Modus gestartet und gibt die gewünschte Seite aus. Soll die Seite gewechselt werden, so wird die Konfiguration auf dem Raspberry Pi angepasst und der Browser wird neu gestartet. Gibt es mehrere Display die verwaltet werden müssen, so ist dies vermutlich ein gewisser Aufwand. Die kleine in Ruby on Rails geschriebene Webapplikation übernimmt die Verteilung der URL.

In der Webapplikation werden die Rasperry Pis hinterlegt und auf dem Raspberry Pis werden entsprechende Scripte eingerichtet. Damit die Webapplikation auf die Raspberry Pis zugreifen kann, muss der Public Key des Benutzers unter dem die Webapplikation läuft, auf dem Pi hinterlegt werden. Nun kann per Mausklick eine neue Url hinterlegt oder der Pi heruntergefahren bzw. neugestartet werden.

In der Webapplikation können Gruppen angelegt werden, Benutzer und Raspberry Pis werden der Gruppe zugeordnet. Die angelegten Benutzer können nur Raspberry Pis verwalten, die sich in der gleichen Gruppe befinden.

Verwaltung der Raspberry Pis

Git Repository https://github.com/Ostfriese26802/DashboardViewController

Betriebshandbuch

Für die Umgebung der IT gibt es die verschiedensten Möglichkeiten die Applikationen, Komponenten, Server usw. zu dokumentieren. In vielen Fällen kommt ein Wiki zum Einsatz, hier wird in Teilen eine Einheitliche Struktur verwendet. Was mich bislang daran gestört hat ist, das einige Punkte manuell gepflegt werden müssen bzw. Sie können nicht einfach miteinander verknüpft werden.
Bei Änderungen an Hardware wie RAM oder Festplatte, muss dies manuell angepasst werden. Wird zum Beispiel nach einem Change die Festplatte d erweitert, muss dieses im Nachgang im Wiki angepasst werden. An dieser Stelle wäre eine automatische Aktualisierung von Vorteil.

Ich habe mir hierzu ein paar Gedanken gemacht und ein kleines Ruby on Rails Projekt gestartet. Aktuell können dort folgende Punkte hinterlegt werden.

  • Kunden
  • Server
  • Hardware der Server
  • Applikationen
  • Komponenten
  • Monitoring
  • Technische Benutzer
  • Staging Stufe
  • interne Fachgruppen / Teams
  • externe Dienstleister
  • Supportmatrix

Es werden noch weitere Punkte hinzukommen wie automatischer Import der Server Hardware oder die Möglichkeit das gesamte BFH als PDF zu exportieren. Hierbei soll es eine Möglichkeit geben die zu exportierenden Punkte auszuwählen.

Wenn es Anregungen gibt was noch geben sollte, immer her damit.

Link zum Repository: https://github.com/Ostfriese26802/betriebshandbuch

Raum-Temperatur auf dem Dashboard

Temperatur und Feuchtigkeit mit dem Wemos D1 Mini werden gemessen und auf dem Dashboard ausgegeben

Ich beschäftige mich aktuell mit dem Wemos D1 Mini und dem messen von Temperaturen sowie dem versenden der Daten. Ursprünglich bin ich auf das Thema gestoßen, da ich auf dem Boot verschiedene Stellen überwachen möchte, wie bspw. die Temperatur im Motorraum. Unter anderem bestellte ich mir dafür den bereits genannten Wemos D1 Mini und dazu unterschiedliche Sensoren wie bspw. den DHT22. Der DHT22 ist ein Temperatur- und Feuchtigkeitssensor. Der Wemos D1 Mini bringt auch gleich einen WLAN-Chip mit.

Um an Bord die gemessenen Werte an den Raspberry zu senden und nicht quer durchs Boot neue Kabel verlegen zu müssen, war die Übertragung mittels WLAN eine charmante Alternative.
Bis hierhin war das eigentlich nur die Vorgeschichte.
Interessant finde ich auch daheim die Temperatur und Feuchtigkeit, um zu erkennen wann wieder gelüftet werden muss. Die Darstellung auf dem Dashboard bot sich dafür an.
Keine Kabel verlegen zu müssen, bis auf für die Stromversorgung ggf. (3.3V oder 5V für den Betrieb werden benötigt), ist zu Hause genauso von Vorteil.

Da ich (aktuell) keinen Bedarf habe eine Historie der Werte zu speichern, kam mir die Idee die Werte direkt mittels API-Aufruf vom Wemos auf dem Dashboard aktualisieren zu lassen.
Das war die perfekte Übung für spätere Projekte an Bord.

Später kommt das ganze in ein Gehäuse.
Der Versuchsaufbau sieht wie folgt aus:

Auf dem Dashboard sieht die Kachel dann so aus:

Das ganze habe ich im Git gepflegt und ihr findet es mit entsprechender Anleitung zum nachbauen hier: https://github.com/janneshecht/Room-temperature

Tabelle in SQLite Datenbank löschen

Aktuell spiele ich ein wenig mit Ruby on Rails rum und musste neulich eine Tabelle in der Datenbank löschen. Ich musste ein klein wenig suchen bis ich die einfache Lösung gefunden habe.

Zunächst mit rails c mit der console verbinden, im Anschluss über

ActiveRecord::Migration.drop_table(:table_name)

die entsprechende Tabelle löschen.