Broadlink RM 3 Mini + Apple TV Fernbedienung

Broadlink RM 3 Mini + Apple TV FernbedienungVor kurzem entdeckte ich den Broadlink RM 3 Mini und das ist wahrlich ein super „Gateway“ in die Welt der nicht-WLAN-fähigen Geräte. Der kleine Kasten (10-25€) kann Infrarotsignale einer Fernbedienung lernen und wieder geben. Es gibt auch eine Handyapp dazu, wo man die Fernbedienung nachbilden kann. Ich möchte das aber im IoBroker nutzen.

Zum IOBroker nur kurz: Die Einrichtung des RM Mini 3 muss abgebrochen werden, sobald sich das Gerät mit eurem WLAN verbunden hat. Keine Zuweisung von Namen, Raum oder sonstewas. 

2. Hinweis IOBroker in der Aktuellen Version 2.0.x ist die Eingabe der IP Adresse noch nicht möglich (wenn ihr ein anderes SUBNET verwendet) – Installiert hier direkt von GitHub (Katze).

Broadlink RM 3 Mini + Apple TV FernbedienungWenn ihr nun versucht die Fernbedienung (2015er) anzulernen, werdet ihr feststellen, dass nur die Laut und Leiser Tasten erkannt werden 🙁 Denn(!) die anderen Tasten funktionieren per Bluetooth (juhu). Nichts destotrotz kann der Apple TV auch IR-Kommands auswerden. Und diese kann man manuell einfügen.

Broadlink RM 3 Mini + Apple TV Fernbedienung

Zuerst im IOBroker die Taste Lauter und Leiser anlernen, damit der entsprechende Ordner angelegt wird. Bei mir hat er ihn L genannt … Jetzt dieses Ordner anklicken und dann (2) oben auf das PLUS drücken.

hier muss der State auf button gesetzt werden und unter NATIV muss ein Feld mit der Bezeichnung „code“ angelegt werden. Hier kommt dann der eigentliche „Sendecode“ rein. Den Namen im IOBroker kann man beliebig wählen. Am Ende sollte man in den Objekten einen Button sehen.

Codes:

Home

2600a8000001269511131337123712371213133712371237143613361435141114121214121212371237143713111312131311131413111312371313111312131213131313121213120005940001284913000c4e0001274a12000c4f0001274914000c4d0001274a12000c4f0001274a12000c4f0001274913000c4f0001274913000c4e0001274a12000c4f0001284814000c4e0001274912000c4f0001284913000c4e0001264a13000d05

Menu

260050000001269513121237133614361312123714361337123613371237131212131313121213371238123713111412121412131113131313361312121313121214111312131213120005950001264a13000d050000000000000000

OK

260098000001289b11151139103a11381313123812391139103a113912381214101510151015103a121410151139113911391015113912141138111511150f1510151114111510141100054d0001279c111411391239103a1114113911391239113a103912381115101413131015113a0f3a1114123812131214101510160f1511391115101511131115101510160f160f00054e0001284b11000d05

Back

260050000001289312131237133712371312133713371137143613361237141114121411131213361237153512141212121312141113131312371312141211131214121214111411140005930001274b11000d050000000000000000

Up

260050000001279413131137133713371213123614361336133613381137131311141212131214371212123713121338111312131313111312371511131212141114121311131312130005940001274a13000d050000000000000000

Down

260050000001279414121137143612371411123812371237133712371435131314101412121312371214111313361337131311131312131213371313111411131313111411131313120005940001274a13000d050000000000000000

Left

260050000001289312131337133612371412123614361237143614351238131212131312131213361336141213121237121411131312141213361312121313131312121312121313120005940001284913000d050000000000000000

Right

260050000001279314121237123713371214133513361436123713361436131311141312121213371214113713361312131411131510141112371412121312131312111413121213120005950001274917000d050000000000000000

Play

260098000001299a1213113a103a103a1214103a103a103a103a103a14361214121310151015103a113912381238113a1139121411381213123912131213101511141115101412141000054d0001279c1213113a1238103a1114113912381239103a103a123812131213111511151039113912141036161211151015111510151138121312140f151214101510160f151000054e0001274c10000d05

Stop

260050000001269414371114113712141212133712371336143612371336141113131312131313351336141213121214113712381213131212381114121312121312141212131312120005950001264a13000d050000000000000000

Pause

260098000001279c111510391338113911151039113911371439103a113912140f1612131015103a1139123811391239113911150f3a1213113911141214111411141114111411141200054c0001289b11141238123912381015103a1238113a1139113911391114121313121313103a103a1114113911151113121411150f15113911141115111311141213111412141000054e0001284a11000d05

Fast Forward

260050000001289313361411133811131214113713371336133614361336151013121312141212381114133514121435133613131212151015341413121212141113131213121412120005940001274a12000d050000000000000000

Fast Backward

260050000001279313381113133613121411143612371336133713361237141212131312131311381212141113371435123813121213131212371312131213121313121312141213110005950001274913000d050000000000000000

Skip Forward

260050000001289313351413133614121212123812371237133613371237141212131212141213361237133614121312131312361214111313371411131311131214121311141410130005940001274a12000d050000000000000000

Skip Backward

260050000001269512371214113713121313123712371436123712371337121412121312131212371337131311371213141213361213121312371312141213121214131013131312130005940001274913000d050000000000000000

Next Chapter

260050000001279313371213133613131212123713371436133612371336131312131213131212381236133712131313121214361411131213361313111411141114121213131312130005930001274a14000d050000000000000000

Prev Chapter

260050000001269413361213123713131213123712371337133613361536131213121213111313361535121313361412131212371214111313361313121312131313111312141114120005940001264b12000d050000000000000000

Video Mode

2600500000012793131314351237133712131237123713361337123714361213121312141212123713371237123713131336121412121312123615121312121313121313121312121200054d0001264a14000d050000000000000000
Veröffentlicht unter Heimautomatisierung | Verschlagwortet mit , , , , , , , , , | Schreib einen Kommentar

TP-Link WN823n v3 mit schlechtem Empfang unter Linux beheben

Wer einen „guten“ und günstigen WLAN USB Stik sucht wird wohl um den TP-Link 823n v3 nicht drumherum kommen. Für unter 10€ bei Amazon ein Schnäpschen. 

Beim Einrichten unter Ubuntu am Intel NUC zeigte er aber mit dem Standard-Treiber sehr schlechte Empfangswerte. Selbst der <30cm entfernt stehende Access-Point zeigte schlechte Werte und der ~8m entfernte UniFi AC-Pro an der Decke war schlecht bis garnicht hörbar.

Wie sich zeigte, liegt das wohl an dem Treiber den Ubuntu mit bringt. Aber es gibt Abhilfe mit dem rtl8192eu linux treiber => https://github.com/Mange/rtl8192eu-linux-driver

Treiber bauen und installieren mittels DKMS

(1) Installieren der Tools und DKMS:

1
sudo apt-get install git linux-headers-generic build-essential dkms

(2) Klone das Repository und wechsele in den Ordner:

1
git clone https://github.com/Mange/rtl8192eu-linux-driver
1
cd rtl8192eu-linux-driver

(3) Füge den Treiber dem DKMS hinzu. Das wird den Quellcode in ein Systemverzeichnis kopieren, so dass er für ein „rebuild“ (neubauen) der Module bei einem Kernel-Upgrade verwendet werden kann. 

1
sudo dkms add .

(4) Kompilieren und installieren des Treibers mittels DKMS

1
sudo dkms install rtl8192eu/1.0

(5) Distries die auf Debian oder Ubuntu basieren haben einen RTL8XXXU Treiber bereits enthalten und dieser läuft im Kernelspace. Um den RTL8192EU Treiber verwenden zu können muss also der RTL8XXXU Treiber auf die blacklist, damit er nicht geladen wird.

1
echo "blacklist rtl8xxxu" | sudo tee /etc/modprobe.d/rtl8xxxu.conf

(6) Nun setzen sorgen wir dafür, dass der neue Treiber RTL8192EU aktiv wird beim laden:

1
echo -e "8192eu\n\nloop" | sudo tee /etc/modules;

(7)  Neuere Versionen von Ubuntu haben merkwürdige Probleme beim Einstecken und Umstecken (Check #94). Dies schließt seltsame Leerlaufprobleme ein, um dies zu beheben:

1
echo "options 8192eu rtw_power_mgnt=0 rtw_enusbss=0" | sudo tee /etc/modprobe.d/8192eu.conf

(8) Änderungen an Grub & initramfs aktualisieren:

1
sudo update-grub; sudo update-initramfs -u

(9) Neustart des Systems, um neue Änderungen von neu generierten Initramfs zu laden.

1
systemctl reboot

(10) Nach dem Neustart kannst Du überprüfen, ob dein Kernel das richtige Modul geladen hat:

1
sudo lshw -c network

Jetzt sollte man die Zeile sehen:

1
driver=8192eu
Veröffentlicht unter Blogroll, Linux-Welt | Verschlagwortet mit , , , , , , , , , , , , | Schreib einen Kommentar

Hitze Index berechnen im IoBroker

Jetzt wo es wieder wärmer wird ist eine Kennzahl wieder wichtig: Der Hitze Index – die gefühlte Wärme. Dieser berechnet sich aus der Temperatur und der Luftfeuchte. Je feuchte es ist umso wärmer fühlt es sich an. Jedenfalls bei „hohen“ Temperaturen.

Hitze Index berechnen im IoBroker

Hitze Index berechnen im IoBroker

Daneben gibt es noch den WindChill-Faktor wo die Windgeschwindigkeit eine Rolle spielt.

Die untere Formel für den Hitzeindex in Grad Celsius bzw. Grad Fahrenheit hat eine Genauigkeit von ±0,7 °C bzw. ±1,3 °F. Sie ist bei Temperaturen von mindestens 26,7 °C bzw. 80 °F und einer relativen Luftfeuchtigkeit von mindestens 40 % anwendbar. Als Variablen sind für ϑ die Temperatur in °C bzw. °F und für  die relative Luftfeuchtigkeit in % einzusetzen.

Hitze Index berechnen im IoBroker
Quelle: Wikipedia

 

Über den „Skript“-Adapter im IoBroker lasse ich nun aller 5min den Hitzeindex für Innen und außen berechnen.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function Start() {
BerechneAussen();
BerechneInnen();
}function BerechneHitzeIndex(temp, hum){
var t =temp
var f = hum;var t2 = Math.pow(t,2);
var f2 = Math.pow(f,2);

var r =
-8.784695 + 1.61139411*t + 2.338549*f - 0.14611605*t*f - 0.012308094*t2
- 0.016424828*f2 + 0.002211732*t2*f + 0.00072546*t*f2 - 0.000003582*t2*f2;

return r;
}

function BerechneInnen(){
var t = parseFloat( getState("netatmo.0.Wetterstation.Innen_Wetterstation.Temperature.Temperature").val);
var f =parseFloat( getState("netatmo.0.Wetterstation.Innen_Wetterstation.Humidity.Humidity").val);
var r = BerechneHitzeIndex(t,f);
setState("0_userdata.0.Hausdaten.Klima.HeatIndex_Innen",r.toFixed(1));
}

function BerechneAussen(){
var t = parseFloat( getState("netatmo.0.Wetterstation.Aussen_Wetterstation.Temperature.Temperature").val);
var f =parseFloat( getState("netatmo.0.Wetterstation.Aussen_Wetterstation.Humidity.Humidity").val);
var r = BerechneHitzeIndex(t,f);
setState("0_userdata.0.Hausdaten.Klima.HeatIndex",r.toFixed(1));
}

schedule('*/5 * * * *',function(){
Start();
});
Veröffentlicht unter Heimautomatisierung | Verschlagwortet mit , , , , , | Schreib einen Kommentar

IOBroker´s Schreibvolumen reduzieren

Der IOBroker ist eine coole Software um die vielfältigsten Systeme zu vereinen. Dazu rufen Adapter die Daten ab und stellen Kommandos zum steuern bereit. Die Daten werden dabei hierarisch gespeichert. Die Persistierung ist dabei sehr simple. Das Datenobjekt wird als JSON auf die Platte geschrieben. Bei vielen tausend Datenpunkten wird diese Datei aber recht groß und viele Schreibvorgänge erzeugen „Traffic“.

IOBroker´s Schreibvolumen reduzierenDas wäre nicht unbedingt das Problem, meine NVME kann das locker ab. Aber was ich in den Statistiken dann gesehen habe ich das Schreibvolumen auf die Platte:

IOBroker´s Schreibvolumen reduzierenUnd Schreibvorgänge sind nicht gut für die Lebensdauer der Festwertspeicher.
Also ging ich auf Suche und sah, dass ioBroker zyklich die objects.json speichert die 50MB umfasste. Mittels dem Programm iotop konnte man in der kumulierenden Ansicht sehen, dass schnell GigaBytes an Daten zusammen kommen.

Die Lösung

Eine Möglichkeit wäre natürlich ein träges Dateisystem was als Cache fungiert. Aber besser ist das „Backend“ vom IOBroker zu ändern. Das kann man umstellen auf CouchDB oder auch redis. 

Meine Wahl fiel auf redis da es „Leichtgewichtiger“ ist. Was ioBroker nur leider noch nicht kann bzw. ich noch nicht gefunden habe, ist die Möglichkeit zur Authentifizierung gegenüber redis. Auth per Token geht leider nicht. Da muss ich mal noch forschen. Gerade für den Multihostbetrieb brauch man eine geschützte Datenbank.

Die Umstellung

Installation redis

$ sudo apt update 
$ sudo apt install redis-server

Durch die Problematik mit der Auth empfiehlt sich eine Installation auf der ioBroker Maschine. 

Redis ist in dem Moment noch nicht „systemverwaltet“ das sollte man in der /etc/redis/redis.conf anpassen:

IOBroker´s Schreibvolumen reduzieren

sudo systemctl restart redis.service

Danach kann man den Status abfragen:

sudo systemctl status redis

Jetzt kann man testen:IOBroker´s Schreibvolumen reduzierenUmstellung ioBroker

Als ersten muss man ioBroker mit stop beenden. Man kann auch mit „pkill io“ alles schnell beenden 🙂

dann startet man das custom setup und trägt die Daten ein

iobroker setup custom
Type of objects DB [(f)ile, (c)ouch, (r)edis], default [file]: r
Host / Unix Socket of objects DB(file), default[127.0.0.1]: >ENTER
Port of states DB (redis), default[6379]: >ENTER
Type of states DB [(f)file, (r)edis], default [file]: r
Host / Unix Socket of states DB (redis), default[127.0.0.1]: >ENTER 
Port of states DB (redis), default[6379]: >ENTER
Data directory (file), default[../../../iobroker-data/]: >ENTER
Host name of this machine [iobroker]: >ENTER
creating conf/iobroker.json

Es folgt die Migration von File auf redis. Mit den ganzen Dateien kann das schon 10min dauern bei größeren Installationen.

Danach den iobroker wieder mit start starten und mit iobroker status kontrollieren ob alles läuft:

IOBroker´s Schreibvolumen reduzieren

Im Redis Client kann man mit „keys *“ sich auch alle Keys auflisten lassen die es gibt. Bei mir etwas über 150.000 – das ist schon Heftig

Endresultat

Was hat´s nun gebracht?

IOBroker´s Schreibvolumen reduzierenDie Schreibvorgänge sind erstmal massiv weniger geworden – Ziel erreicht. Aber auch die CPU Last hat sich gebessert:

IOBroker´s Schreibvolumen reduzieren

Der Disk IO ist fast auf 0, dafür mehr Net IO und RAM Auslastung ist auch etwas gesunken am ioBroker.

Auf dem VM Host sieht man „etwas“ weniger CPU – aber der redis benötigt natürlich auch etwas CPU Leistung. Aber dadurch, dass die Schreibvorgänge auf die NVME nun drastich weniger sind ist das Ziel erreicht.

Fazit

Ich denke mal, dass auch viele Raspberry Pi Besitzer auf redis als Backend umschalten sollten um die SD Karte zu entlasten. In meinem Beispiel wurden im Monat Mai 10TB an Daten geschrieben – sicher nicht alles der ioBroker aber ganz bestimmt ein Großteil.

Hinweise / Links:

  • Redis selbst speichert die Daten auch (Siehe „save“ in der config)
  • IOBroker speichert (backup) weiter die Daten – aber nicht mehr so oft.
  • redis Installieren => Link
  • Redis im Bereich Multihost in der IoBroker Doku Link
Veröffentlicht unter Heimautomatisierung | Verschlagwortet mit , , , , , , , | Schreib einen Kommentar

Xiaomi Aqara Cube mit NodeRed + Google Sheets

Cube + NodeRed + Google Sheets = Zeiterfassung Pro

Im PanOffice (Pandemie Office trifft’s eher als Home-Office) möchte man seine Arbeitszeit im Auge behalten und muss auf verschiedene Situationen „schnell“ reagieren. So war es nun der Wunsch von mir die Arbeitszeit zu erfassen – ohne ständig auf die Uhr zu schauen und Zeiten zu schreiben. Vorhandene Lösungen waren mir dann aber zu teuer 😉

Ich will also die aktuelle Aufgabe auf dem Würfel oben sehen und wenn sich was ändert den Würfel einfach auf die Aufgabe drehen. Ich habe da jetzt z. B. Freizeit, Arbeit, Meeting und Pause aktuell. 

Xiaomi Aqara Cube mit NodeRed + Google Sheets

Was der Würfel leider nicht erkennt ist es, wenn man ihn aufnimmt und auf eine andere Fläche stellt. Der Lagesensor reagiert dann nicht – man muss ihn richtig von A nach B kippen. Man kann den Würfel aber auf den Tisch stellen und schieben oder 2x klopfen. 🙂

Den Cube von Xiaomi habe ich bei EBay für 12,08€ gekauft – dauert nur rund 4 Wochen.

Den Cube habe ich über DeConz (ZigBee USB Stik) als Schalter eingebunden:

Dazu muss man nur den Deckel mit dem mitgelieferten Metallteil öffnen – das geht etwas schwer aber durchhalten – es klappt 🙂 Dann einfach den Link Button drücken und etwas Geduld haben.

Ganz wichtig zu wissen ist jetzt, dass DeConz das Gerät 2x publiziert. Im Node Red kann man die leider nicht unterscheiden:

Xiaomi Aqara Cube mit NodeRed + Google Sheets

Hier kann man nun leider nur probieren was man für Daten bekommt. Es gibt immer das „buttonevent“ und die gesture. Ein Gerät liefert Daten zur Lage und was mit dem Würfel gemacht wird und das zweite Gerät liefert Daten wenn das Gerät gedreht wird.

Xiaomi Aqara Cube mit NodeRed + Google Sheets

Würfelfelder

Xiaomi Aqara Cube mit NodeRed + Google Sheets

Darstellung im Web Phoscon

zur Lage

Es gibt folgende Gesten:

  • 1 wedeln
  • 2 in die Luft geworfen ==> button event 7008
  • 3 kippen
  • Update: Kippen um 180°
  • 5 status stehen/ schieben
  • 6 klopfen 2x

Das Buttonevent ist immer eine 4-stellige Zahl – interessant ist aber nur die 1. und 4. Stelle. so kommt z.B. die Zahl 1002 mit geste 3 => der Würfel zeigt nun die Fläche 1 und vorher war die Fläche 2 aktiv. 

Ein Sonderfall ist die Fläche 7. Schüttelt man den Würfel kommt 7007. Wirft man den Würfel in die Luft kommt 7008. Klopft man den Würfel 2x auf den Tisch (nicht in der Hand halten!!) kommt die aktuelle Fläche 2x  also z.b.  3003 oder 4004.

Nach dem Anschalten kommt 7000 (Ruhemodus).

Schiebt man den Würfel horizontal kommt zur Geste 5 das buttonevent  5000 oder z.B. 1000. Hier wird also die aktuelle Fläche (1. Stelle) geliefert und die vorherige Fläche ist 0.

Zur Drehung

wenn der Würfel auf dem Tisch liegt kann man ihn links und rechts drehen (z.b. für Helligkeit oder Lautstärke). Als Buttonevent erhält man die Angabe wie stark der Würfel gedreht wurde in Grad aber mit Faktor 100. Wenn der Wert 4324 kommt, bedeutet dies der Würfel wurde um 43,24° nach rechts gedreht. Ein negativer Wert bedeutet nach links.

Zusätzlich zeigt die Geste 7 (rechts) und 8(links) an in welche Richtung gedreht wurde.

 

Node Red

Im Node Red habe ich nun also 4 DeConz Adapter die mir von jedem Zauberwürfel den buttonevent und gesture liefert. Die Drehung nutze ich aktuell noch nicht.

Aus der Lage extrahiere ich durch simple Mathematik die aktuelle Fläche und die vorherige Fläche (letztes nutze ich auch noch nicht). Der Fläche habe ich für mich Aufgaben zugeordnet und bis auf die 7 nutze ich alle.

Xiaomi Aqara Cube mit NodeRed + Google Sheets

Node Red selbst schreibt über den node-red-contrib-google-sheets Adapter die Daten zu Google Tabellen. Das Einrichten ist etwas „tricky“ aber in der README erklärt. Was nicht drinnen steht, ist dass man in dem Projekt noch die API für Sheets (Tabellen) aktivieren muss. Das kann man aber nachträglich noch machen und die Debug Console zeigt hilfreiche Fehlermeldungen.

Die Payload Merge Funktion hier sammelt die Payload Objekte und gibt sie als vereintes Objekt nach einer Zeit X weiter. Also 1. Objekt lautet { aktuell: 1, vorheriges: 2} und das 2. Objekt {geste: 3} dann kommt am raus: { aktuell: 1, vorheriges: 2, geste: 3}. Node Red Code hier: payload merge.

Xiaomi Aqara Cube mit NodeRed + Google Sheets

 

Ich verwende in dem Adapter dann die „Append Row“ Funktion um eine neue Zeile anzufügen. Für mich reicht hier die aktuelle Fläche und die Uhrzeit mit sekunden. Folgt ein weiteres Event, weiß ich ja wie lange die andere Fläche aktiv war. 

Da beim einfügen der Zeile wird nicht einfach die letzte Zeile beschrieben, sondern wirklich eine Zeile eingefügt. Ich kann somit in der Tabelle keine Formeln in die z.B. 3. oder 4. Spalte setzen. Node Red muss die mit einfügen. Einerseits möchte ich aber das Ende in einer Zeile stehen haben und 2. die Dauer daraus berechnen. Für weitere Berechnungen benötige ich noch das Datum ohne Uhrzeit:

Xiaomi Aqara Cube mit NodeRed + Google SheetsDafür benötigt man noch 3 Formeln. Da wir nicht wissen in welcher Zeile wir sind benötigt man die Funktion INDIREKT mit RC-Notation.

Bevor man die Daten nun also an Excel senden kann muss man ein 2-Dimensionales Array erschaffen. Eine Liste von Zeilen also. Jedes Element ist eine Spalte. Formeln können direkt übergeben werden.

Xiaomi Aqara Cube mit NodeRed + Google SheetsHier wird nun jeweils das Start-Datum des Nächsten Events als Ende genommen. Wenn das da ist wird die Differenz berechnet und das Datum gebildet. 

Xiaomi Aqara Cube mit NodeRed + Google SheetsIn meinem Beispiel lass ich das Tablett noch die aktuelle Tätigkeit sprechen mittels Text-To-Speech was der Fully Kiosk Browser super per API kann.

Noch als Tipp: Nach dem Append to Row liefert der GSheet Adapter noch Informationen wo er die Zeile eingefügt hat. Damit kann man dann noch mehr machen 🙂

Xiaomi Aqara Cube mit NodeRed + Google SheetsDen Node Red Code gibt es hier Zeiterfassung Node Red

Google Skills

Jetzt muss man das ganze ja noch in Tabelle / Excel auswerten was man da an Daten hat.

Zuerst erstellen wir eine Liste von den Tagen die erfasst wurden. Mit der Funktion UNIQUE bekomme ich alle Elemente und SORT zeigt mir diese in der Spalte noch an

=SORT(UNIQUE(Rohdaten!E2:E40035);1;TRUE

Zu dem Datum kann ich nun die Arbeitszeiten raussuchen mit einer SUMIFS Funktion. Da die nur UND Verknüpfungen kennen muss man jedes Event einzeln zählen. Daher hier mehrere SUMIFS addiert.

=IF(B2<>""; SUMIFS(Rohdaten!$D$2:$D$10033;Rohdaten!$E$2:$E$10033;B2;Rohdaten!$B$2:$B$10033;5)+SUMIFS(Rohdaten!$D$2:$D$10033;Rohdaten!$E$2:$E$10033;B2;Rohdaten!$B$2:$B$10033;6);"")

Alternativ kann man hier auch die Pausen berechnen – also das jeweilige Event.

Ich berechne aus dem Datum dann noch die Kalenderwoche und beginne das Spiel dann noch einmal und zähle zu der Woche (vorher ja zum Datum) die Stunden und kann so die Wochenarbeitszeit berechnen.

Die Funktion INDIREKT kennt Excel nun nicht. Ich stelle aber trotzdem mal hier den Export der Sheets Datei bereit. Da kann man die Formeln mal sehen und vielleicht auch wieder reimportieren nach Excel.

Zeiterfassung.xlsx

Veröffentlicht unter Heimautomatisierung | Verschlagwortet mit , , , , , , , , , , , | 2 Kommentare