Beiträge von Kelvin

    Das Umschreiben war noch der einfache Teil und funktioniert trotz der stümperhaften Umsetzung :angel:

    JavaScript
    1. const [hours, minutes] = time.split(':').map(x => parseInt(x));

    wurde zu

    JavaScript
    1. var hours = parseInt(time.split(':')[0]); 
    2. var minutes = parseInt(time.split(':')[1]);

    und im Browser funktionierte alles perfekt. Google Sheets hatte jedoch teilweise "NaN.NaN.NaN NaN:NaN" als Zeitstempel eingetragen... nach langem herumspielen, testen und debuggen stellte sich dann heraus, dass Googles Server parseInt() wohl etwas anders handhaben und dadurch ein paar Daten invalidiert wurden. Und ich war scheinbar nicht der erste, der dieses Problem hatte: https://stackoverflow.com/a/17204291/2153629 :lol:

    sieht man, dass es funktioniert

    Geil, habe nicht so schnell mit so einer ausführlichen Antwort gerechnet ^^


    Allerdings sind die letzten beiden Zeitstempel falsch

    Code
    1. [
    2. ["11.1.2019, 23:13:00",361],
    3. ["11.1.2019, 23:47:00",369],
    4. ["11.1.2019, 23:58:00",379],
    5. ["12.1.2019, 00:03:00",385], // neuer Tag, 12.1
    6. ["12.1.2019, 00:18:00",391],
    7. ["12.1.2019, 01:36:00",396],
    8. ["12.1.2019, 00:31:00",396], // neuer Tag, 13.1
    9. ["12.1.2019, 23:59:00",100]
    10. ]


    Deine Funktion läuft aber schon besser als meine :lol:

    Code
    1. [
    2. ["11.1.2019 23:13", 361]
    3. ["10.1.2019 23:47", 369]
    4. ["10.1.2019 23:58", 379]
    5. ["11.1.2019 00:03", 385]
    6. ["11.1.2019 00:18", 391]
    7. ["11.1.2019 01:36", 396]
    8. ["12.1.2019 00:31", 396]
    9. ["12.1.2019 23:59", 100]
    10. ]

    Moin,


    vorab: Ja ich weiß, dass es hier um JavaScript geht und es eigentlich ins andere Unterforum gehört, doch mir geht es nicht um die Sprache, sondern nur um's Konzept. Hilfestellungen in Python, C oder sogar Brainfuck sind gerne gesehen, die Umsetzung in JS wird der einfachere Teil sein.


    Ich ziehe mir Wasserstände von einer Website, doch diese gibt mir nur die Uhrzeit und den Wasserstand zurück, jedoch nicht das Datum. Das Problem ist nun, dass der Zeitraum über 24h läuft und es ohne Datumsangabe zu doppelten Uhrzeiten kommt.


    Beispiel des aktuellen Arrays: [["23:13", 361], ["23:47", 369], ["23:58", 379], ["00:03", 385], ["00:18", 391], ["01:36", 396], ..., ["00:31", 396]]

    (Die Anzahl der Elemente und Uhrzeiten sind immer unterschiedlich/unregelmäßig. Immerhin die Reihenfolge stimmt :angel:)


    Nun brauche ich eine zuverlässige und elegantere Lösung, die mir zu jeder Uhrzeit das richtige Datum liefert, damit der endgültige Zeitstempel so vorliegt: "10.01.2019 17:14"



    Mein erster Ansatz:

    • Halte die Differenz der unterschiedlichen Tage in einer Variable fest
    • Vergleiche immer zwei Uhrzeiten: Wenn i-1 > i (beginnend mit Index 1), dann ist es bereits der nächste Tag (Heute+1). Bsp: 23:58 > 00:03 ==> 00:03 ist bereits der nächste Tag ==> Variable TagesDifferenz += 1
    • Füge das heutige Datum + TagesDifferenz einer Uhrzeit zu. Bsp: (11.01.2019 + 1) 00:03, weil diese Uhrzeit ja schon der nächste Tag ist
    • Ich habe noch eine Art Sicherheit eingebaut, doch ich weiß gerade nicht mehr für welchen Fall das gedacht war :S. Wenn die Minute des ersten Datensatzes > aktuelle Minute, dann TagesDifferenz -= 1. Ist wahrscheinlich für den Fall um die 0 Uhr herum...
      Mir ist es wieder eingefallen. Bsp.: Es ist 00:05 Uhr; die ersten beiden Datensätze sind 23:50 und 00:10. Weil nun 23:50 > 00:10 ist, muss man für 00:10 einen Tag vom heutigen Tag drauflegen. Doch, es ist ja schon 00:05 und das ist derselbe Tag wie 00:10.
      Deshalb vergleiche ich beim ersten Datensatz die Minute. 50 ist größer 10, deshalb ziehe ich einen Tag Differenz ab, der beim Vergleich 23:50 > 00:10 wieder dazuaddiert wird ==> -1 + 1 = 0 ==> 00:10 ist heute, weil es aktuell 00:05 Uhr ist.


    Das funktioniert soweit ganz gut, doch was ist nun bei einem Monatswechsel? 31.01 + 1 sollte nicht in 32.01 resultieren, bei einem Jahreswechsel das gleiche Spiel.



    Danke

    Kelvin

    Der nicht unerhebliche oder nicht absehbare Zeitaufwand.

    Das bringen DIY-Projekte so mit sich. Wenn du darauf keine Lust hast, dann kaufe dir einen fertigen digitalen Bilderrahmen, der:

    • min. HD- Bildschirm (1920x1080px)
    • 10 bis 13“
    • soll nicht wie „selbstgebastelt“ aussehen
    • (Bewegungssensor)
    • (Lichtsensor)
    • (Touch)

    erfüllt.

    Moin,


    hat hier schon jemand seine Heizung smart gemacht, indem diese auch die aktuelle Wettervorhersage mit einbezieht? Es geht um ein Passivhaus (/Passivwohnung), welches nur über Fußbodenheizungen und TADs verfügt - klassische Heizkörper an den Wänden gibt es weit und breit nicht zu sehen. Der Nachteil daran ist, dass man nicht mal eben schnell die Bude aufheizen kann, wenn die Temperaturen schnell fallen. Momentan müssen wir auf die Wettervorhersage achten und bei Kälteeinbrüchen schon mind. 24h vorher die Heizung manuell regulieren, damit man am nächsten Tag nicht fröstelt.

    Mein Ziel ist es, einem Pi diese Steuerung zu überlassen, der in einem Intervall die Vorhersage und aktuelle Raumtemperatur abgreift und automatisch die Heizung reguliert, um die Temperatur in der Wohnung konstant zu halten. Sollte das funktionieren, würde ich das Ganze noch etwas verfeinern wollen, bei dem dann noch weitere Faktoren einbezogen werden können (Anzahl Personen im Gebäude, Wind, Windrichtung, Sonnenstand, usw.).


    So etwas könnte man bestimmt mit einem selbsterrechneten Kennfeld lösen, das statisch bei Vorhersage x und Raumtemperatur y die Heizung auf z stellt, doch da würde ich lieber dem Hype hinterherlaufen und etwas dynamischeres ausprobieren: Künstliche Intelligenz, die mit der Zeit dazulernt und immer besser wird.

    Ehrlich gesagt habe ich wenig Erfahrung mit z.B. Tensorflow und weiß nicht, wie ich die verschiedenen Daten in Korrelation setze und der KI "sagen" kann, welchen Regler sie setzen soll, um die Variable Raumtemperatur möglichst konstant zu halten.


    Gibt es unter euch KI-Spezialisten, die Anleitungen zu dem Projekt haben oder eventuell selbst so etwas ähnliches umgesetzt haben? Google nutzt seit ein paar Jahren schon eine KI für ihre Rechenzentren und das würde ich gerne in einem ((sehr) viel) kleinerem Rahmen umsetzen (Ja, Google ist eine Koryphäe auf so ziemlich jedem technischen Gebiet und ich bin im Vergleich nur ein ganz kleiner Zwerg, aber Versuch macht bekanntlich kluch :P).



    tl;dr

    Ich möchte einen "Thermostat" bauen, der nicht die aktuelle Raumtemperatur zur Regelung einbezieht, sondern die Wettervorhersage, aufgrund der Trägheit unserer Heizung.

    Doch, sonst hätte ich es nicht bemerkt. AAber lange Zeit war es 500g. Darauf beruht ja der Trick.

    Dazu habe ich mal ein schönes Video auf YouTube gesehen, finde dieses jedoch leider nicht mehr. Es gibt eine Formel, die genau besagt wie sehr man z.B. das Gewicht einer Schokolade oder die Füllmenge einer Flasche über die Jahre reduzieren kann, sodass es beim Kunden unbemerkt bleibt.


    Hier mal eine PDF mit zahlreichen "Mogelpackungen": https://www.vzhh.de/sites/defa…te_Preiserhoehungen_0.pdf

    Ich habe das Display in einer Nummer kleiner (7") und mit nur 1024x600 Pixeln: https://www.amazon.de/dp/B078NB33JB


    Zum Betreiben braucht man 1x HDMI und 2x USB, wenn alles reibungslos funktionieren soll. Du kannst für alle 3 Anschlüsse einen Pi nehmen, der dann jedoch ziemlich am Ende ist, wenn er sich selbst und zusätzlich noch das Display mit Strom versorgen muss. Ich möchte Pi und Display ins Auto einbauen und werde für beide Geräte jeweils einen vernünftigen Netzstecker nehmen, damit niemand "hungern" muss.


    Mit dem Touch an sich bin ich ziemlich zufrieden. Auf dem Pi hat es mit der Einrichtung etwas gedauert, doch funktioniert letztendlich. Unter Windows ist das ganz Plug & Play und die Präzision ist auch gut.

    Die drei Tutorials sind ja schon fast des Rätsels Lösung und wenn du alle erfolgreich nachgebaut hast, hast du auch schon genügend Python-Erfahrung sammeln können.

    Chip auflegen - Display zeigt zb. Namen an und schaltet das Relais und das Tor geht auf.

    Man kann dein Vorhaben, in genau dieser Reihenfolge, auch so im Code umsetzen: Erst prüfst du, welche Karte aufgelegt wird (Tutorial 3) und vergleichst diese ID mit den IDs, die du zulassen willst. Ist die Authentifizierung erfolgreich, gibst du auf dem Display z.B. den Namen aus (Tutorial 2) und steuerst das Relais an (Tutorial 1). Wie willst du das Relais eigentlich anschließen? Hast du einen Garagentormotor oder willst du es über einen anderen Taster machen?

    Um die gelesene ID mit deinen gespeicherten IDs zu vergleiche gibt es unterschiedliche Möglichkeiten, die unterschiedlich sicher sind:

    • Ganz einfach: wenn (gelesene_id == "abcd1234") dann öffne Tor
    • in einer Liste, ggfs. mit Namen, speichern: [("abcd1234", "Alice"), ("blabla", "Bob"), ...]
    • in einer externen Datei

    Je nach Sicherheitslevel sollten diese IDs noch "gehashed" werden, weil man Schlüssel nämlich nicht als Klartext, also unverschlüsselt, speichern sollte. Das sind aber die kleinen Feinheiten, die ganz zum Schluss kommen.

    Eine Alternative


    Es gibt einfachere Methoden, doch so würde ich es wohl angehen. Die Datei wird lokal auf dem neusten Stand gehalten; in mehreren Tabs geöffnet, wobei jeder Tab eine Seite weiter springt; Chrome wechselt automatisch zwischen den Tabs (Diashow) und aktualisiert sie alle x Minuten.


    Ändert sich die Anzahl der Seiten? Wenn nicht, dann muss man nur einmal alle Tabs einrichten und kann es dann laufen lassen.

    Welchen Browser benutzt du? Teilweise werden Webseiten blockiert, weil sie als gefährlich eingestuft werden. Probiere es mit unterschiedlichen Browsern und Geräten (PC, Smartphone, ...).

    Zusätzlich könnte dein Router blockieren, wenn du eine IP-Adresse direkt aufrufen willst. Bei der Fritzbox wird dann aber extra eine Meldung angezeigt, falls man es versuchen sollte. Hier würde ich es mal aus dem mobilen Netz mit dem Handy versuchen, um den Fehler auf dein Heimnetz zurückführen zu können.


    Edit: Habe nach #9 erst angefangen zu schreiben

    DISPLAY=:0.0 xinput --set-prop '3M 3M USB Touchscreen - EX II' 'Coordinate Transformation Matrix' 0 1 0 -1 0 1 0 0 1

    geht rechts und links.

    Letzter Versuch: 0 -1 0 -1 0 1 0 0 1


    Wenn das mit rechts und links funktioniert hat und oben und unten vertauscht sind (?), dann bräuchte man es ja nur an der x-Achse zu spiegeln :/


    Aufgeben ist immer die schlechteste Lösung ;)



    Wenn du viel Zeit hast, könntest du auch alle Kombinationen durchprobieren, bis es dann endlich funktioniert.