Technische Alternative und Loxone [HTML]

Einen ähnlichen Artikel mit JSON als schnitstelle habe ich schon geschrieben: Technische Alternative und Loxone [JSON]

Bei meiner Umsetzung mit der Technischen Alternative TA und Loxone bin ich bei einer Erweiterung auf mehrere Hürden gestosen, erstmal lässt sich die JSON Abfrage beim CMI nur einmal die Minute machen, was für Temperaturwerte ok, aber Statuswerte wie ein Strömungsschalter, die unter umständen nur wenige Sekunden eingeschaltet sind ist das unzureichend. Außderm wenn ich aus meinem zweiten Node Daten abrufen will muss ich die Abfrage für beide verlängern das jede abwechselnd abgefragt werden kann, dann sind die Werte nur noch alle 120 Sekunden aktuell. Daher hab ich mich nach alternativen umgesehen und bin bei Loxone auf den Virtueller HTTP Eingang gestoßen. Also was genau hab ich mir vorgestellt, anbei ein Ausschnitt meiner fertigen Lösung:

Technische Alternative Werte an Loxone Schema

unten rechts, im Keller, ist links die Zirkulationspumpe und rechts der Strömungsschalter (z.B. TA LINK) der dann auch die Frischwasserstion einschaltet und sich darum kümmert das Warmwasser zu erzeugen. Darüber im EG (Erdgeschoss) ist von der Technische Alternative (TA) ein Raumsensor (TA LINK) der die Raumtemperatur erfasst und die Betriebsarten (RAS-State) übergibt.

Technische Alternative Raumsensor

Raumsensor mit Betriebsarten (RAS-State)

  • Standbybetrieb, Frostschutz (ganz links, Kreis mit Punkt Symbol)
  • Absenkbetrieb (zweite von links, Mond Symbol)
  • Normalbetrieb (drittes von links, Sonne Symbol)
  • Automatikbetrieb (ganz rechts, Uhr Symbol)

im Stockwerk sind also die Betriebsart, die Stockwerktemperatur (von je einem Sensor) und die Leistungsstufe der Heizungspumpe. Der Wert mit Keine Sonnsenstandsa… kommt von Loxone und ist von der Beschattung und hat mit unserem Thema hier nichts zu tun. Also nochmal zu meiner Technischen Alternative JSON abfrage, hier auf der rechten Seite zu sehen:

Technische Alternative Loxone JSON HTML Werte

die Pumpe für das Obergeschoss ist auf der Node 2 (Knoten2, zweite UVR16x2) meiner TA Steuerung. Via JSON lässt sich nur einmal Pro Minute der Statuswert auslesen, wie man im Bild schon erkennt, bei einem neustart vom Miniserver versucht er die Werte direkt nach dem neustart auszulesen bekommt er eine Node die aktuellen Werte und bei der zeiten Abfrage einen Fehler zu sehen am StatusCode = 4. Loxone behält aber die alten Werte die er mal geladen hat zu sehen an Pumpe OG … VI 100% ist beim StatusCode 4 ein falscher Wert. Dies liese sich mit einem Statusbaustein in Loxone bereinigen. Später dazu mehr. Wie bekommen wir jetzt zuverlässig Werte via HTML, theoretisch geht das, dass man die komplette HTML Seite der CMI einliest und sich dann die Werte raus nimmt.

Schema aus dem CMI der Technischen Alternative zu Loxone

Das CMI lädt sich die Werte aber dynamisch nach und das ist auch was wir wollen nur die Werte. Nicht das Schema selbst, in jedem Webbrowser können wir mithilfe der Webentwickler Werkzeuge die Seite die wir brauchen herausfinden, wir gehen auf eine Technische Alternative Schema Seite die die Werte enthält die wir wollen und öffenen die Webentwickler Werkzeuge z.B. www.XXXX.cmi.ta.co.at/webi/schema.html#71 über das Antwort Fenster sehen wir ob die Werte enthalten sind.

Webentwickler cgi Technische Alternative Werte

Die URL im Feld Datei kopieren wir uns und können uns direkt in einem neuen Fenster öffnen: theoretisch auch mit der globalen WAN Adresse, https://XXXX.cmi.ta.co.at/webi/schematic_files/71.cgi?_=1703166723937, wenn ihr allerdings nicht gerade eingelogt seit müsst ihr Username und Passwort hinzufügen, (bei Loxone dann dringend erforderlich), anbei mit localer IP adresse: http://192.168.178.5/schematic_files/71.cgi?_=1703167193663 zur id hinten raus habe ich nichts gefunden und in unserem fall reicht auch das kürzel .cgi? ohne ID, Zusammengefasst:

  • SCHEMA: http://192.168.178.5/schema.html#71
  • WERTE: http://192.168.178.5/schematic_files/71.cgi?

Die Werte in Loxone interpretieren

Kommen wir also endlich dazu die Werte in Loxone einzutragen. Für einen HTML aufruf brauchen wir einen virtuellen HTML Eingang wie das im allgemeinen Funktioniert steht auf der Loxone Homepage: https://www.loxone.com/dede/kb/virtueller-http-eingang/

Nachdem wir den Virtuellen Eingang erstellt haben geben wir ihm einen treffenden Namen den wir nächste Woche auch noch verstehen, nachdem ich hier die Werte meiner Warmwasserbereitung haben will hab ich es CMI_HTML_Warmwasser genannt ist aber euch überlassen. In den Bildern seht ihr übrigens auch meine Tests die ich noch gemacht habe, da nicht alles so funktioniert wie ich mir das im vorhinein gedacht hatte.

Loxone Virtueller Eingang

Virtueller Eingang erstellen und

  • Bezeichnung: CMI_HTML_Warmwasser
  • URL: http://user:0123@192.168.178.5/schematic_files/71.cgi?

Der User und das Passwort 0123 ist ein Beispiel in der CMI Oberfläche (/#settings_pw.cgi) müsst ihr für den Anwender einen Benutzernamen und natürlich ein sicheres Passwort eingeben.

Welche Werte will ich jetzt evektiv in Loxone zur Verfügung haben, in meinem Fall bekomme ich durch das aktuelle Schema, FETT was mich eigentlich interresiert:

  • Ladepumpe: AUS
  • Leistungsstufe 0 %
  • Ladetemperatur 55.1 °C
  • Warmwasser 36.1 °C
  • Zirku. Pumpe AUS

Zuerst mal die einfachen Werte wie wir sie auch aus dem JSON kennen, dafür brauchen wir jetzt einen Virtueller HTTP Eingang Befehl:

Loxone Virtueller HTTP Eingang Befehl

Virtueller HTTP Eingang Befehl:

  • Bezeichnung: Ladetemperatur
  • Befehlserkennung: id=“pos55″ >\nLadetemperatur \n\v
  • Einheit:<v.1>°C

Details zur Befehlserkennung, wenn wir auf den Anzeiger im Porjektfenster doppelklicken oder bei den Einstellungen bei der Befehlserkennung am rechten Eingeberand erscheinen drei Punkte … wenn wir auf diese klicken öffnet sich die Befehlserkennung bearbeiten. wenn wir über das Fragezeichen gehen bekommen wir zusätzliche Inforamationen wie wir durch den Text navigiren und Loxone die Werte zuteilen können wie wir sie wollen, ein Beispiel:

im HTML Code sehen wir warum wir diese Zeilen brauchen besonders gut im ersten Wert: id=“pos55″ >\nLadetemperatur \n\v

  • id=“pos55″ > \festerWert zum suchen
  • \n \Zeilenumbruch
  • Ladetemperatur |danach muss Ladetemperatur kommen
  • \n |noch ein Zeilenumbruch
  • \v |jetzt kommt der Wert den wir wollen
Loxone Befehlserkennung HTML
Loxone Befehlserkennung bearbeiten

Loxone Sonderlocken

So jetzt fingen meine Problem an, Loxone hat keine Problem Zahlenwerte aus einer HTML zu übernehmen, aber aus irgendeinem Grund funktionierte das auf teufel kom raus nicht mit Texten, in meinem Fall AUS und EIN. Anbei mal meine Ergebnisse:

Loxone Befehlserkennung bearbeiten
so gehts nicht id=“pos57″ >\nZirku. Pumpe \n\v

Im Bild erkennt man sehr gut das das HTML die Zirku. Pumpe ON angiebt Loxone diesen Wert aber nicht interpretieren kann und Aus zurück gibt. und nicht teuschen lassen testet die Werte die ihr braucht druch, nur weil OFF da steht und Loxone Aus schreibt heißt das nicht das ihr richtige Werte habt. Ich konnte mich damit behelfen den Wert als Byte zu interpretieren, in meinem fall die nächsten 4:

Loxone Befehlserkennung bearbeiten
so gehts mit umwegen id=“pos57″ >\nZirku. Pumpe \n\1\2\3\4

So kann man mit der Zahl 1011238479 nichts anfangen, wenn man aber einwenig damit experimentiert bekommt man raus das dieser Wert für OFF=AUS und bei ON=EIN der Wert 792481359 steht. Da die Werte immer gleich bleiben je nach Status kann man sich jetzt in Loxone einen Status dafür bauen um das wieder leserlich zu bekommen:

Loxone Status
Virtuellen Eingang mit der Byte Erkennung an einen Statusbaustein gehängt
Loxone Status bearbeiten
Status bearbeiten, die Werte für ein und Aus interpretieren, und das Symbol, den Statustext und Statuswert eintragen.

Das gleiche habe ich dann bei der Ladepumpe auch so gemacht. Bei der Ladepumpe hätte man auch über die Leistungsstufe arbeiten können. Final habe ich also eine Hybrid Lösung aus JSON und HTML für meine Übersichtsseite in Loxone und im großen und ganzen bin ich soweit damit zufrieden, lauft ca. 6 Monate ohne größere Probleme.

Technische Alternative und Loxone [JSON]

Technische Alternative (TA) Daten zu Loxone importieren, es gibt zwar schon einiges online zu finden und auch die Hersteller Dokumentation von der Technischen Alternative und Loxone [JSON] sind online recht übersichtlich, doch ist mir beim übertragen meiner ersten Werte einige Fehler passiert und die implementierung war recht langwirig. Daher jetzt mal ein HowTo, getestet habe ich alles mit einem CMI (V1.38.1), UVRx2 und der LoxConfig 13.1. mit einem Miniserver der Gen 1. Läuft auch noch mit der LoxConfig 14.5.12.7

Die TA (Technische Alternative) bietet einen JSON API Adapter an. Diesen habe ich benutzt um die Sensordaten der TA in Loxone darstellen zu können. Recht einfach gestalltet. Hilfestellung gab es auch im LoxForum.

Technische Alternative Einstellungen

Anfangen musst du bei der URL bzw. bei der IP Adresse der Technische Alternative. Z.B. über das Webportal und den Punkt Einstellungen kann man die locale IP Adresse auslesen.

Technische Alternative TA CMI LAN Einstellungen

Wenn wir schon bei den Einstellungen sind vergeben wir, fals noch nicht geschehen, ein Anwender User Passwort, möglichst kompliziert etc.

Technische Alternative TA CMI Passwort Einstellungen

Technische Alternative CMI URL für JSON Abruf erstellen

Wenn wir die IP Adresse, den Usernamen und das Passwort haben können wir über einen normalen Webbrowser die Werte die wir wollen via JSON Daten ausleiten. Kurz ein Beispiel, wir wollen alle Eingänge und Ausgänge am CAN Knoten eins auslesen, dafür müssen wir die URL wie folgt zusammenstellen:

http://192.168.10.234/INCLUDE/api.cgi?jsonnode=1&jsonparam=I,o

die „jsonnode=1“ gibt an welchen CAN Knoten wir wollen und jsonparam welche Daten wir gerne hätten, ist auch in der vollständige Dokumentation der JSON-API von Technische Alternative zu finden, anbei ein Link dazu: hier. Seite 3. Wenn wir die Seite so in einem Webbrowser aufrufen bekommst du, wenn alles gut geht, so einen Text zurück:

{ "Header":{ "Version":5, "Device":"87", "Timestamp":1672188576 }, "Data":{ "Inputs":[ { "Number":1, "AD":"A", "Value":{ "Value":56.9, "Unit":"1" } }, { "Number":2, "AD":"A", "Value":{ "Value":56.3, "Unit":"1" } }, { "Number":3, "AD":"A", "Value":{ "Value":51.0, "Unit":"1" } }, { "Number":4, "AD":"A", "Value":{ "Value":41.2, "Unit":"1" } }, { "Number":5, "AD":"A", "Value":{ "Value":50.0, "Unit":"1" } }, { "Number":6, "AD":"D", "Value":{ "Value":1, "Unit":"43" } }, { "Number":7, "AD":"A", "Value":{ "Value":35.1, "Unit":"1" } }, { "Number":8, "AD":"A", "Value":{ "Value":33.3, "Unit":"1" } }, { "Number":9, "AD":"D", "Value":{ "Value":1, "Unit":"43" } }, { "Number":10, "AD":"A", "Value":{ "Value":35.1, "Unit":"1" } }, { "Number":11, "AD":"A", "Value":{ "Value":35.9, "Unit":"1" } }, { "Number":14, "AD":"D", "Value":{ "Value":0, "Unit":"43" } }, { "Number":15, "AD":"A", "Value":{ "Value":42.1, "Unit":"1" } }, { "Number":16, "AD":"D", "Value":{ "Value":0, "Unit":"43" } }], "Outputs":[ { "Number":1, "AD":"D", "Value":{ "Value":0, "Unit":"43" } }, { "Number":2, "AD":"D", "Value":{ "Value":1, "Unit":"43" } }, { "Number":3, "AD":"D", "Value":{ "Value":0, "Unit":"43" } }, { "Number":4, "AD":"D", "Value":{ "Value":0, "Unit":"43" } }, { "Number":5, "AD":"D", "Value":{ "Value":0, "Unit":"43" } }, { "Number":10, "AD":"D", "Value":{ "Value":0, "Unit":"43" } }, { "Number":11, "AD":"D", "Value":{ "Value":0, "Unit":"43" } }, { "Number":12, "AD":"A", "Value":{ "State":0, "Value":100.0, "Unit":"8" } }, { "Number":13, "AD":"A", "Value":{ "State":0, "Value":100.0, "Unit":"8" } }, { "Number":14, "AD":"A", "Value":{ "State":0, "Value":100.0, "Unit":"8" } }, { "Number":15, "AD":"A", "Value":{ "State":0, "Value":100.0, "Unit":"8" } }, { "Number":16, "AD":"A", "Value":{ "State":1, "Value":100.0, "Unit":"8" } }]}, "Status":"OK", "Status code":0 }

Nur das Nötigste an Loxone

Jetzt könnte man sich in Loxone natürlich alle Werte von allen CAN Knoten auch so importieren und dann in Loxone ein Anlagenschema bauen. In meiner Heizung habe ich aber schon ein Can Touch im Keller und via Technische Alternative CMI schon ein Schema. Das gleiche nochmal in Loxone ist für mich jetzt überflüssig. Hinweis, man kann aus der Loxone auch auf das CMI verlinken. Einige Werte und Stausanzeigen finde ich praktisch auch gleich in Loxone sehen zu können. Daher hier mal die URL wie ich Sie für mich angepasst habe um drei Temperaturwerte aus dem DL-Bus, einem digitalen Eingang und einem Ausgang auszulesen.

http://192.168.10.234/INCLUDE/api.cgi?jsonnode=1&jsonparam=D1,D2,D3,I14,O11

nach dem Aufruf im Webbrowser:

{ "Header":{ "Version":5, "Device":"87", "Timestamp":1672183861 }, "Data":{ "DL-Bus":[ { "Number":1, "AD":"A", "Value":{ "Value":6.6, "Unit":"1" } }, { "Number":2, "AD":"A", "Value":{ "Value":21.7, "Unit":"46", "RAS":"0" } }, { "Number":3, "AD":"A", "Value":{ "Value":20.7, "Unit":"46", "RAS":"0" } }], "Inputs":[ { "Number":14, "AD":"D", "Value":{ "Value":0, "Unit":"43" } }], "Outputs":[ { "Number":11, "AD":"D", "Value":{ "Value":0, "Unit":"43" } }]}, "Status":"OK", "Status code":0 }

Anbei ein Tipp wenn du den Status Code 4 mit der Meldung: TOO MANY REQUESTS erhällst musst du ca. eine Minute warten, steht auch im Handbuch JSON API von TA Seite 8.

So wenn wir die URL mit den Werten so erstellt haben und im Browser ein Ergebis erziehlt haben müssen wir für Loxone noch den User und das Passwort voranstellen z.B. so:

http://user:0123456@192.168.10.234/INCLUDE/api.cgi?jsonnode=1&jsonparam=D1,D2,D3,I14,O11

Und nein ich empfehle nicht 0123456 als Passwort zu verwenden, ebenso den User Admin nicht. Wenn du damit fertig bist gehts zur Loxoneconfig.

Loxone Config Virtueller Eingang

unter dem Miniserver sind die „Virtuelle Eingänge“ in der LoxoneConfig zu finden dort finden wir dann auch oben in der Menue Leiste Virtueller HTTP Eingang Virtueller Eingang erstellen.

Loxone Virtueller HTTP Eingang

Ich habe die Bezeichnung CMI_TA_Parameter gewählt und dort die URL eintragen die wir oben erstellt haben. Da das C.M.I nur alle 60 Sekunden einmal abgerufen werden kann hab ich den Abfragezyklus auf 61 Sekunden gestellt.

Loxone Virtueller HTTP Eingang Eigenschaften Technische Alternative

Dannach erstellst du einen „Virtueller HTTP Eingang Befehl“ um die Technische Alternative Werte einem Loxone Element zuzuweisen.

Loxone virtueller http eingang befehl
Loxone virtueller http eingang befehl details
Beispiel für die Betriebsart, der RAS Wert

Im „Virtueller HTTP Eingang Befehl“ gebe ich die Bezeichnung immer dem gleichen Wert wie ich ihn aus der TA kenne, dann habe ich weniger Verwechslungsgefahr. Angefangen habe ich mit dem StatusCode, wenn dieser 0 ist weiß ich, dass die Abfrage erfolgreich war.

Die Befehlserkennung ist bei komplexeren Abfragen, am Anfang schwirig zu verstehen. Der StatusCode kommt nur einmal vor daher ist die Abfrage einfach mit „Status code“:\v der Platzhalter „\v“ steht bei Loxone für den Wert der zu übernehmen ist.

Loxone Virtueller HTTP Eingang Befehl Eigenschaften

für meine fünf Technische Alternative Werte brauche ich nach dem JSON StatusCode jetzt noch fünf Befehle. Jeder Technische Alternative Wert hat im JSON File seinen eigene Identification und muss über die Erkenung eindeutig identifiziert werden. Wenn wir uns die JSON Daten aus dem Browser in einen Texteditor oder noch besser eine Programmierungsumgebung ansehen sehen wir die zusammenhänge besser.

{ "Header": { "Version":5, "Device":"87", "Timestamp":1672183861 }, 
  "Data":{ 
    "DL-Bus":[ { 
      "Number":1, "AD":"A", "Value":{ "Value":6.6, "Unit":"1" } }, { 
      "Number":2, "AD":"A", "Value":{ "Value":21.7, "Unit":"46", "RAS":"0" } }, {
      "Number":3, "AD":"A", "Value":{ "Value":20.7, "Unit":"46", "RAS":"0" } }], 
    "Inputs":[ { 
      "Number":14, "AD":"D", "Value":{ "Value":0, "Unit":"43" } }], 
    "Outputs":[ { 
      "Number":11, "AD":"D", "Value":{ "Value":0, "Unit":"43" } }]}, 
  "Status":"OK", "Status code":0 }

Was in meinem Beispiel auffält ist das die Werte identifikationen = „Number“ nicht heufiger vorkommen, wenn ich den Input 1 abfragen wollte müsste ich die höhere ebene DL-Bus, Inputs, Outputs auch noch in die Befehlserkennung übernehmen. Da ich bei meinen ersten Tests viele Fehler hatte und nicht recht wuste woran es lag kann ich dir das LoxForum Artikel 121728 empfehlen. Aus diesem hab ich auch den Tip mit dem doppelten Value texten in der Abfrage.

Die Befehlserkennung von Loxone ist nicht so intuitiv aber doch verständlich:

Zeichen zum Auslesen eines Wertes:
\v = Wert

Zeichen zum Navigieren durch den Text:
\iText\i = Springe zu ‚Text‘

Also was wir suchen ist immer der Value im String: „Number“:1, „AD“:“A“, „Value“:{ „Value„:6.6, „Unit“:“1″ } }, { mit der Befehlserkennung

Number":1\iValu\i\iValu\ie":\v
Loxone Virtueller HTTP Eingang Befehl Eigenschaften
Temperatur DL Bus 3
Loxone Virtueller HTTP Eingang Befehl Eigenschaften
Strömungsschalter Warmwasser Input 14
Loxone Befehlserkennung bearbeiten
Virtueller HTTP Eingang Befehl Temperatur
Number":1\iValu\i\iValu\ie":\v => Außen
Number":2\iValu\i\iValu\ie":\v => Wintergarten
Number":3\iValu\i\iValu\ie":\v => 1.OG
Virtueller HTTP Eingang Befehl Digitalereingang
Number":14\iValu\i\iValu\ie":\v => Warmwasser zapfen 
Virtueller HTTP Eingang Befehl Digitalerausgang
Number":11\iValu\i\iValu\ie":\v => Zirku Pumpe
Virtueller HTTP Eingang Befehl Betriebsarten
Number":2\iValu\i\iValu\i\iRAS\i":"\v => Wintergarten
Number":3\iValu\i\iValu\i\iRAS\i":"\v => 1.OG

Wenn man alle Werte Auslesen will muss man die Inputs bzw. Outputs noch in die Befehlskette integrieren, da die Number werte mehrfach vorkommen und Loxone nur das erste aufkommen als wert übernimmt.

Inputs und Outputs mit der gleichen Nummer in einer Abfrage

Virtueller HTTP Eingang Befehl Eingang
Inputs\iNumber":11\i\iValu\i\iValu\ie":\v
Virtueller HTTP Eingang Befehl Ausgang 
Outputs\iNumber":11\i\iValu\i\iValu\ie":\v

NOCH NICHT GETESTET

Loxone Statusbaustein bessere Lesbarkeit

Loxone Status Betriebsart

Für die Betriebsarten empfiehlt sich noch ein Statusbaustein mit StatusCode abfrage

Loxone Status bearbeiten
Loxone Statusbaustein für Technische Alternative Betriebsarten

Technische Alternative Betriebsarten (RAS-State)

  • 0 = Automatikbetrieb
  • 1 = Normalbetrieb
  • 2 = Absenkbetrieb
  • 3 = frost/ Standbybetrieb

Technische Alternative Status code

Zu guter letzt kann man die virtuellen Eingänge in die Config setzen und z.B. in einem Anlagenschema anzeigen.

Loxone Config HTML JSON

Mittlerweile gibts auch eine Ergänzung Technische Alternative und Loxone [HTML]

Loxone Technische Alternative Schema

Wohnzimmer indirekte Beleuchtung #1

In diesem ersten Teil war ich noch sehr zuversichtlich das eine indirekte Beleuchtung meines Wohnzimmers was ganz einfaches und bestimmt sehr schnell zu realisieren ist. LED Leiste auf den Schrank geschraubt und fertig, leider Stellte sicher heraus das ich mit einigen Schwierigkeiten zu kämpfen hatte.

Der erste Versuch und „Machbarkeitsstudie“

Aber fangen wir ganz von vorne an, nach einer Google Recherche bin ich für den LED Steifen bei www.aliexpress.com gelandet. Ausschlaggeben war damals der Preis von nur 24,28€ für die 5 Meter. Laut „Hersteller“ verbraucht der LED Streifen 21 w/m macht bei 5 Metern ca. 105 Watt gesamt Leistung.

Da ich noch etwas mehr beleuchten will, in meinem Wohnzimmer, benutze ich ein 400W Netzteil. Das habe ich damals bei Amazon bestellt hatte für 61,99€, der Verkäufer vertreibt dieses aber nicht mehr. An einem wärmeren Tag habe ich eine Vermutung dafür gefunden, der eingebaute Lüfter ist leider störend, besonders wenn man sich einen Film ansieht. Welches ich dann letztendlich doch ersetzen musste durch ein 200W 12V Netzteil ohne Lüfter, dieses habe ich bei E Bay gekauft für 30,90€ welches seit dem einen sehr guten Job macht.

Netzteil_200W_12V

Danach hab ich mir über die Ansteuerung gemacht. Da ich mich für einen RGBWW Streifen also Rot, Grün, Blau und WarmWeiß entschieden hab, musste ich mir was einfallen lassen wie ich diese Einschalten lasse. Meine erste Wahl viel auf einen Arduino und später auf einen Arduino Leonardo ETH, welcher eine RJ45 Schnittstelle hat, wodurch ich ihn per Smartphone steuern lassen kann.

Flachbaugruppe Testaufbau mit Arduino

Nach den ersten Test mit dem Steckbrett (breadboard). Die Schaltung und die einzelnen Komponenten habe ich von simtronyx – Das Elektronik Blog übernommen und um den WarmWeiß Ausgang erweitert. Dort findet ihr auch die einzelnen Komponenten und den Elektroplan. Nachdem die ersten Versuche gut gelaufen sind, habe ich die einzelnen Komponenten auf eine Kupfer (CU) Flachbaugruppe gelötet.

Soweit so gut. Danach ging es an die Aluminiumleisten oder Aluminiumschienen in denen der LED Streifen. Leider kann ich dazu keine Rechnung mehr finden, daher weiß ich jetzt auch nicht mehr was ich bezahlt oder woher ich diese habe. Falls ich zufällig mal darüber stolpere, werde ich dies nachreichen. Befestigt habe ich diese mit Spax Schrauben und für die Löcher habe ich etwas mehr Platz in der Aluminiumleiste gebraucht und mit der Dremel Workstation „gefräst“. Würde ich so nicht mehr machen, hat aber in diesem Fall funktioniert.

Zuletzt das ganze auf dem Schrank befestigt und Angeschlossen. Dann an die Programmierung, bzw. zuerst den Arduino Uno mit dem Leonardo ETH ersetzt und dann einige Code Schnipsel aus dem Internet zusammen kopieren:

Arduino WEB RGBWW V1.0

#include <SPI.h> // Für Arduino Version größer als 0018
#include <Ethernet.h>
#include <SD.h>

byte sdPin = 4;                                      // Pin der SD-Karte

//Default wird durch config.txt beeinflusst:
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0F, 0x84, 0xD0 }; // MAC-Adresse des Ethernet-Shield
byte ip[]  = { 192, 168, 2, 128 };                   // IP zum aufrufen des Webservers
int LEDsRed    = 5;  // PWM 5
int LEDsGreen  = 6;  // PWM 6
int LEDsBlue   = 3;  // PWM 3
int LEDsWhite  = 9;  // PWM 9

// Color Controll Parameter
int Red_Value = 0;
int Green_Value = 0;
int Blue_Value = 0;
int White_Value = 0;
int interval = 200;

unsigned long previousMillis = 0;

void setup() {
  // put your setup code here, to run once:
 Serial.begin(9600);       // for debugging
  pinMode(10, OUTPUT);
  
      // initialize SD card
    Serial.println("Initializing SD card...");
    if (!SD.begin(sdPin)) {
        Serial.println("ERROR - SD card initialization failed!");
        return;    // init failed
    }
    Serial.println("SUCCESS - SD card initialized.");
    // check for index.htm file
    if (!SD.exists("index.htm")) {
        Serial.println("ERROR - Can't find index.htm file!");
        return;  // can't find index file
    }
    Serial.println("SUCCESS - Found index.htm file.");
    if (!SD.exists("config.txt")) {
        Serial.println("ERROR - Can't find config.txt file!");
        return;  // can't find index file
    }  
    Serial.println("SUCCESS - Found config.txt file.");
  
}

void loop() {
  unsigned long currentMillis = millis();
  // put your main code here, to run repeatedly:
      if (currentMillis - previousMillis > interval) {
      if (!Red_Value == 255 && !Green_Value == 255 && !Blue_Value == 255 && !White_Value == 255) {
        setcolor(fade(Red_Value, 255), fade(Green_Value, 255), fade(Blue_Value, 255), fade(White_Value, 255));
      }
      previousMillis = currentMillis;   // aktuelle Zeit abspeichern
    }
}

void setcolor( int red, int green, int blue, int white) {
  analogWrite(LEDsRed, red);
  analogWrite(LEDsGreen, green);
  analogWrite(LEDsBlue, blue);
  analogWrite(LEDsWhite, white);
}

int fade(int setvalue, int sollvalue) {
  if (sollvalue < 0) {
    sollvalue = 0;
  }
  if (sollvalue > 255) {
    sollvalue = 255;
  }
  if (setvalue == sollvalue) {
    return setvalue;
  }
  else if (setvalue <= sollvalue) {
    if (setvalue + 1 > 255) {
      return 255;
    }
    else {
      return setvalue + 1;
    }
  }
  else {
    if (setvalue - 1 < 0) {
      return 0;
    }
    else {
      return setvalue - 1;
    }
  }
}

Dazu kam noch die index.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<style>
body{
	background-color: #F1F1F1;
}
a{	
	float: left;
	  display: block;
	  width: 10%;
	  height: 30px;
	  background: #F1F1F1;
	  padding: 10px;
	  text-align: center;
	  border-radius: 5px;
	  color: #000;
	  font-weight: bold;
	  text-decoration : none;
}

h1{
	text-align: center;
}

.label {
 	display: block;
	float: left;
	width: 20%;
	margin: 1%;
	font-size: 2em;
}
input {
	display:NONE;
	float: left;
	margin-top: 20px;
	width: 40%;
}
.white,.red,.green,.blue,.OUT{
	 display: block;
	 float: left;
	 width: 100%;
}
.OUT {
	background-color: #ccc;
}
.OUT .label {
	width: 95%;
}

.white {
	background-color: #fff;
}
.red {
	background-color: #f00;
}
.green {
	background-color: #0f0;
}
.blue {
	background-color: #00f;
}
.content {
	width: 700px ;
 	margin-left: auto ;
  	margin-right: auto ;
}

@media only screen and (min-device-width: 375px) and (max-device-width: 667px) and (orientation : portrait) { 
    h1 {
	font-size: 5em;
	}
    .content {
	width: 100% ;
 	margin-left: auto ;
  	margin-right: auto ;
	}
	.label {
	font-size: 3em;
	}
	a{	
	font-size: 1.94em;
	  height: 100px;
	}
}
}

@media only screen and (max-width: 760px) { 
.content {
	width: 100% ;
 	margin-left: auto ;
  	margin-right: auto ;
	}
a{	
	  height: 100px;
	}
}

</style>

<script>
function fader() {
    var x = document.getElementById("white").value;
    window.location.href = "/?pinA3="+x;

    /*
    $("#swatch").click(function () {
        var red = $("#red").slider("value");
        var green = $("#green").slider("value");
        var blue = $("#blue").slider("value");
        $.post("php-ajax/cmd.php?mode=picker", {red:red, green:green, blue:blue});
    */
}
</script>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>RGB LED Controll</title>
</head>
<body>
<div class="content">
<h1>Wohnzimmer</h1>
<form class="OUT" oninput="">
<a class=label href="/?pinA9=0&pinA5=0&pinA6=0&pinA3=0" target="ifr">AUS</a>
</form> 
<br />

<form class="white" oninput="window.location.href = '/?pinA3='+WHITE.value;">
<a class=label href="/?pinA9=255" target="ifr">100%</a>
<a class=label href="/?pinA9=127" target="ifr">50%</a>
<a class=label href="/?pinA9=25" target="ifr">10%</a>
<a class=label href="/?pinA9=0" target="ifr">AUS</a>
<input id="white" type="range" name="WHITE" min="0" max="255" value="0" step="1">

</form> 
<br />
<form class="red" oninput="numerisch.value=RED.value">
<a class=label href="/?pinA5=255" target="ifr">100%</a>
<a class=label href="/?pinA5=127" target="ifr">50%</a>
<a class=label href="/?pinA5=25" target="ifr">10%</a>
<a class=label href="/?pinA5=0" target="ifr">AUS</a>
<input type="range" name="RED" min="0" max="255" value="0" step="1">

</form> 
<form class="green" oninput="numerisch.value=GREEN.value">
<a class=label href="/?pinA6=255" target="ifr">100%</a>
<a class=label href="/?pinA6=127" target="ifr">50%</a>
<a class=label href="/?pinA6=25" target="ifr">10%</a>
<a class=label href="/?pinA6=0" target="ifr">AUS</a>
<input type="range" name="GREEN" min="0" max="255" value="0" step="1">

</form> 
<form class="blue" oninput="numerisch.value=BLUE.value">
<a class=label href="/?pinA3=255" target="ifr">100%</a>
<a class=label href="/?pinA3=127" target="ifr">50%</a>
<a class=label href="/?pinA3=25" target="ifr">10%</a>
<a class=label href="/?pinA3=0" target="ifr">AUS</a>
<input type="range" name="BLUE" min="0" max="255" value="0" step="1">

</form> 

<iframe name="ifr" style="display:none;" width="0" height="0"></iframe>


</div>
</body>
</html>

Und die config.txt

[mac=0x90,0xA2,0xDA,0x0F,0x84,0xD0]
[ip=192,168,2,128]
[LEDsRed=5]
[LEDsGreen=6]
[LEDsBlue=3]
[LEDsWhite=9]

Das ganze lief auch soweit ganz gut. Wenn man die IP Adresse des Arduino eingibt bekam man die Steuerung auf dem Smartphone, Tablet und PC/Mac.

LED_Steuerung
Web Oberfläche von index.html

Tja an der Stelle hätte ich wieder an den Schreibtisch gehen und was neues machen können, aber ich wollte Fader haben und dachte die kann ich ganz einfach mit javascript an den Arduino via POST Befehl senden. Dabei habe ich ein paar Fehler gemacht und den Teil vom Arduino Leonardo mit der Weboberfläche zerstört. Danach hatte ich nie wieder zugriff darauf. Genervt habe ich die Software danach als Farbspiel umgeschrieben, ohne via Smartphone darauf zugreifen zu können. Da sich das im Alltag nicht so schön gestaltete, ging ich zum Schluss auf reines warmweiß mit ein bisschen rot.

Finales „Panorama“ Bild, in diesem Bild sind alle LEDs des RRBWW Streifens an.

Panorama – EOS 80D mit Affinity Photo

Panorama Bled Insel

Hallo zusammen, anbei mein erster Versuch eines Panorama Nacht Bildes mit meiner Kamera EOS 80D. Zusammengeschnitten habe ich es mit Affinity Photo.Panorama Bled Insel

Für den ersten Versuch bin ich soweit ganz zufrieden, das Bild ist sehr viel größer als hier hochgeladen und daher stark komprimiert.

Bild Eigenschaften:

Erstellt wurde das Panorama aus 9 Einzelbildern mit je 6000×4000 Pixel als RAW Dateien. Persönlich muss ich sagen das RAW Daten Bilder sehr viel länger dauern zu bearbeiten als jpg. Bis jetzt habe ich nicht viel Erfahrung mit dem unterschied von JPG zu RAW, aber wenn man sich etwas umhört raten einen viele zu den RAW Bildern da die Möglichkeinten um ein vielfaches höher sind. Ich würde hinzufügen, dass man auch die nötige Rechenleistung für RAW Bearbeitung braucht und je nach Einsatzzweick auch darauf verzichten könnte.

Camera Einstellungen:

  • Blende: ƒ/2
  • Kamera: Canon EOS 80D
  • Brennweite: 35mm
  • ISO: 400
  • Verschlusszeit: 15s

Roadshoots von Medana nach Bled – Slovenien

Mal wieder in Slovenien, anbei das Best of an Straßen Snapshoots von meiner EOS 80D. Genau gesagt ging es von Medana nach Bled.

Bled Slovenien

insel bled

Ich hatte das Glück über die Firma nach Bled fahren zu können und hab einiges an Fotos gemacht.

Anbei eine kleine Auswahl der Insel Bled:

Dem Wunderschönen Hotel Villa Bled in dem ich schlafen durfte:

Und was ich besonders mochte das Essen, anbei aber nur eine Auswahl:

First Night Shoot

St. Lukas

Seit kurzem bin ich stolzer Besitzer meiner ersten DSLR der Canon EOS 80D und war damit gleich in der Nacht unterwegs, anbei könnt ihr die besten Bilder sehen, (unbearbeitet):

Insgesamt war ich kurz nach Sonnenuntergang etwa 4 Stunden unterwegs und ich muss sagen für den ersten Versuch ist mir das Ganz gut gelungen.

 

Gruber Events

Gruber Events

das derzeit jüngste meiner Projekte,

die Seite wurde sehr einfach gestaltet mit WordPress und einem vorhandenen Theme. Dadurch ist sie sehr wartungsfreundlich, da die Aktualisierungen fast automatisch von sich gehen. Der liebe Herr Gruber hatte zwar fast endlos viele Wünsche, aber dafür war ich ja da, und vom Gallery view bis zum Kalender bekam er alles was er sich wünschte. Auch hier begleite ich die Seite noch über die Erstellung mit dem Update und Backup Service hinaus. Zu sehen auf http://www.gruber-events.de/

Gruber Events

Scale FPV Modelbautechnik

Scale FPV

Mein erstes großes Projekt,

Ja jeder hat mal klein angefangen, so ich auch. Die Seite wurde auf Joomla aufgebaut und von der Templateentwicklung bis zur fertigen Seite, mit dem Design vom Betreiber Thimo Schulze wird er von mir bis zum heutigen Tag unterstützt. Das fehlende Responsive Design war damals gewünscht und wird vielleicht demnächst noch ergänzt.

Scale FPV Shop