[Codeschnipsel] – HOMEMATIC: Mehrere Aktoren gleichzeitig AN oder AUS oder TOGGLE

Veröffentlicht am

Zurzeit habe ich mich wieder ziemlich viel mit Programmierung beschäftigt. Unter anderem sind auch ein paar neue Skripts für meine Hauszentrale, die Homematic CCU2 von eQ-3 entstanden.

Es gibt Phasen, in denen ich gerne programmiere – und es gibt Phasen, da programmiere ich wirklich nur, wenn ich – z.B. aufgrund eines Kundenprojektes muss. In der letzten Zeit habe ich mich gerne mit der Skriptsprache für die Homematic CCU2 beschäftigt und beschlossen, gelegentlich das ein oder andere Skript hier zu teilen – um anderen Interessierten weiterzuhelfen. Als ich begann, mich mit der Thematik auseinanderzusetzen, war ich auch froh, solche Inhalte online gefunden zu haben.

Mit dem nachfolgenden Skript werden entweder a) ALLE Aktoren eines Gewerks, einer Favoritengruppe oder eines Raumes geschaltet werden oder b) nur die Aktoren eines Objekttyps, (bzw. max. dreier verschiedener Objekttypen geschaltet werden. Möglich ist AN, AUS oder TOGGLE (Geräte die an sind, werden ausgeschaltet – und Geräte die aus sind, werden angeschaltet).

Angegeben werden müssen lediglich die Bezeichnung des Gewerks, der Favoritengruppe oder des Raumes [1.], ob alle dort enthaltenen Geräte geschaltet werden [JA/NEIN bei 2A.], falls nicht alle Geräte geschaltet werden sollen die Objekttyp-IDs (z.B. HM-LC- Sw1-Pl-2) [2B.] Und in welchem Zustand die Geräte gebracht werden sollen („AN“/“AUS“/““ für TOGGLE) [3.].
 
! START ======================================================
! ===[ 1.]==========
! Die Aktoren WELCHES OBJEKTS (Gewerk, Favoritengruppe, ...)
! sollen geschaltet werden?

var Objekt = "Beleuchtung";

! ===[ 2A.]==========
! Sollen ALLE AKTOREN geschaltet werden?
! > Auswahl aus "JA"/"NEIN"

var AlleTypen = "JA";

!===[ 2B.]==========
! Falls NEIN:
: WELCHE GERÄTETYPEN sollen geschaltet werden?

var Typ1 = "HM-LC-Sw1-Pl-2";
var Typ2 = "";
var Typ3 = "";

!===[ 3.]==========
! In welchen NEUEN ZUSTAND soll geschaltet werden?
! > Auswahl aus "AN"/ "AUS" / "T"=Toggle

var Schaltung = "AUS";

! ===================================================================
! Ab hier sollten keine Änderungen mehr vorgenommen werden, sollten
! Sie keine Programmierroutine haben!
! ===================================================================

var Durchsuchen = dom.GetObject(Objekt);
var Zaehlen = "NEIN";
var count = 0;

if (Schaltung == "AN") { var Neu = 1;}
if (Schaltung == "AUS") { var Neu = 0;}
string itemId;
foreach(itemId, Durchsuchen.EnumUsedIDs())
{
var item = dom.GetObject(itemId);
if (item.IsTypeOf(OT_CHANNEL)) {
var device = dom.GetObject(item.Device());

! ===[1. AlleTypen = JA]==============================================
if (AlleTypen == "JA") {
if (Schaltung=="") {
var Ist = item.State();
var dev = dom.GetObject(item);
if (Ist==0) {
Neu = 1;
item.State(Neu);
}
if (Ist==1) {
Neu = 0;
item.State(Neu);
}
WriteLine("Toggle: schalte " # dev # " von " # Ist # " zu " # Neu # ".");
}

if (Schaltung=="AN") {
Neu = 1;
item.State(Neu);
}

if (Schaltung=="AUS") {
Neu = 0;
item.State(Neu);
}
Zaehlen = "JA";
}

! ===[2. AlleTypen = NEIN]============================================
if (AlleTypen == "NEIN") {

! ---[2.1 Typ1]------------------------------------------------------
if (device.HssType() == Typ1) {
if (Schaltung=="") {
var Ist = item.State();
var dev = dom.GetObject(item);
if (Ist==0) {
Neu = 1;
item.State(Neu);
}
if (Ist==1) {
Neu = 0;
item.State(Neu);
}
WriteLine("Toggle: schalte " # dev # " von " # Ist # " zu " # Neu # ".");
}

if (Schaltung=="AN") {
Neu = 1;
item.State(Neu);
}

if (Schaltung=="AUS") {
Neu = 0;
item.State(Neu);
}
Zaehlen = "JA";
}

! ---[2.2 Typ2]------------------------------------------------------
if (device.HssType() == Typ2) {
if (Schaltung=="") {
var Ist = item.State();
var dev = dom.GetObject(item);
if (Ist==0) {
Neu = 1;
item.State(Neu);
}
if (Ist==1) {
Neu = 0;
item.State(Neu);
}
WriteLine("Toggle: schalte " # dev # " von " # Ist # " zu " # Neu # ".");
}

if (Schaltung=="AN") {
Neu = 1;
item.State(Neu);
}

if (Schaltung=="AUS") {
Neu = 0;
item.State(Neu);
}
Zaehlen = "JA";
}

! ---[2.3 Typ3]------------------------------------------------------
if (device.HssType() == Typ3) {
if (Schaltung=="") {
var Ist = item.State();
var dev = dom.GetObject(item);
if (Ist==0) {
Neu = 1;
item.State(Neu);
}
if (Ist==1) {
Neu = 0;
item.State(Neu);
}
WriteLine("Toggle: schalte " # dev # " von " # Ist # " zu " # Neu # ".");
}

if (Schaltung=="AN") {
Neu = 1;
item.State(Neu);
}

if (Schaltung=="AUS") {
Neu = 0;
item.State(Neu);
}
Zaehlen = "JA";
}
}
}

if (Zaehlen == "JA") {
count = count + 1;
Zaehlen = "NEIN";
}
}

WriteLine("OK!\n" # count # " Aktoren " # Schaltung # ".");
! ENDE =======================================================

Photo by luis gomes from Pexels

Das Internet ist für das Schwarzwald-Baar-Klinikum immernoch Neuland

Veröffentlicht am

Ich komme grade aus dem “neuen“ Schwarzwald-Baar-Klinikum, weil mich ein langjähriger Kunde beauftragt hat, ihm dabei zu helfen, ins Internet zu kommen. Dieses jetzt schon veraltete und komplett unfähige “Krankenhaus“ ist DAS perfekte Beispiel dafür, wie sehr das Internet für Deutschland noch “Neuland“ ist. Ich bin gerade so verdammt wütend!

Um Internetzugang zu erhalten soll man – so die Rezeptionistin im UG unten – in die Station nach oben (in meinem Fall der 5.OG) gehen, ein kostenpflichtiges (!) “Ticket“ holen, mit diesem wieder nach unten kommen, dieses dann – wieder im UG – am Automaten scannen und aktivieren lassen, um den dort erhaltenen Code dann wieder oben am PC einzugeben.
Ich bin zu Fuß recht schnell unterwegs. Aber ein Weg vom Zimmer im obersten Stockwerk bis zur Rezeption dauert trotzdem mindestens 6 Minuten.

Kurzes Rechenbeispiel:
Rezeption > Station, 6 Minuten
+ Station > Rezeption, 6 Minuten
+ Rezeption > Automat, 1 Minuten
+ Automat > Station, 6 Minuten
= rund 20 Minuten

Wie mag es aber wohl älteren Menschen oder Personen gehen, die wegen Krankheit nicht gut zu Fuß sind?

Nachdem ich diese Schritte ausgeführt hatte, erfuhr ich schließlich von einer weiteren Mitarbeiterin, dass ich diese Schritte überhaupt nicht hätte durchführen müssen und ich zuvor also eine Fehlauskunft erhalten hatte. Privatpatienten bräuchten diese Schritte generell nicht durchführen.

Ich habe alles versucht… – der Zugang zum Internet blieb verwehrt! Weder mit dem Gerät meines Kunden konnte eine Verbindung hergestellt werden; noch mit meinem Arbeitslaptop oder meinem Smartphone. Auch mit Unterstützung einer Krankenschwester – die leider kaum zu verstehen war, weil sie der deutschen Sprache nur sehr eingeschränkt mächtig war – funktionierte es nicht.

  1. Warum gibt es hier immer noch eine 2-Klassen-Gesellschaft?
  2. Warum bekommt es das Klinikum nicht auf die Reihe, eine zeitgemäße Internetversorgung zu gewährleisten?
  3. Warum wird es Patienten – wobei… Kunden ist hier wahrscheinlich das bessere Wort – so schwer gemacht, ins Internet zu kommen?
  4. Warum ist Internet im Jahr 2020 für Patienten überhaupt noch kostenpflichtig?

Artikel 13: Mail an EU-Abgeordneten Dr. Andreas Schwab

Veröffentlicht am

Wenn wir als Bürger nicht reagieren, geht es – zumindest wenn es nach dem EU-Parlament geht – bald Foren, Musik- oder Videoplattformen (z.B. Youtube) und Bilder-Webseiten (z.B. Instagram) an den Kragen, wenn nicht schon während des Hochladens Inhalte auf Urheberrechte Dritter geprüft werden. Tut es mir nach und schreibt Eurem Abgeordneten!

Ich habe an meinen EU-Abgeordneten geschrieben. Also nicht an meinen, sondern den meines Wahlkreises. Grund dafür ist, dass sich das Internet wohl bald grundsätzlich verändern wird, wenn es nach den Plänen des EU-Parlaments geht. Artikel 13 soll bald regeln, dass Internetplattformen bald bereits WÄHREND des Hochladens von Inhalten dazu verpflichtet werden soll, ob Inhalte einem anderen Urheber gehören, also beispielsweise sollen Plattformen wie Youtube prüfen, ob Inhalte Anderer vorhanden sind. Aber WOHER soll Youtube das wissen? Eigentlich lässt sich das nicht umsetzen und stehen Plattforminhaber damit automatisch mit einem Bein im Gefängnis.

Übersicht: Kostenlose Cloud-Speicher

Veröffentlicht am

Ich nutze die Cloud mittlerweile nicht nur für geschäftliche Zwecke*, z.B. für das Archivieren riesiger Dateiarchive von Kundenprojekten, Mustervorlagen für Vertragsdokumente oder zum Abspeichern der eigenen Logos – nein, auch Privat sind die praktischen Speicherplätze nicht mehr wegzudenken. Und weil ich immer wieder zu diesem Thema von meinen Kunden befragt werde, habe ich kurz erklärt, was eine Cloud ist, was sie kann – und eine kleine Aufstellung kostenloser Cloud-Dienste erstellt:

Was IST eine Cloud?

Um es ganz einfach und kurz zu erklären: Statt auf der Festplatte des Computers werden die Daten an einem Ort gespeichert, an dem Sie rund um die Uhr zur Verfügung stehen – nämlich auf einer Festplatte eines „Computers“ (Server) in einem (meist) riesigen Datencenter.

Was KANN „eine Cloud“?

Dank der Cloud – oder „DEN“ Clouddiensten habe ich alle geschäftlichen Daten, sowie meine private Musik, privaten Erinnerungs-Fotos seit 2006 und sogar meine Software und Backups nicht nur immer parat – ich kann sie auch mit nur einem Knopfdruck teilen. Mit voller Kontrolle wer oder was Zugriff auf die Daten erhält und wie lange.