Erste Schritte, erste Fragen - Skripte, Rechte

  • Guten Morgen,
    wie angedroht habe ich mich mit Smarthome und OpenHAB beschäftigt und wie überhall zu lesen ist hat es natürlich erst mal gar nicht geklappt.
    Mir als Vertriebler ist zwar immer ein Rätsel, warum eine Software "by design" scchon Einsteigerunfreundlich sein muss, aber gut. Da gehts jetzt durch.

    Mein Grundsetup ist OpenHAB (ich meine 2.4) als Docker Container in meiner Synology.
    Ich hoffe einfach mal dass das Grundsetup stimmt, ich habe die Verzeichnisse und Rechte meiner Meinung nach passend gesetzt und durchgereicht.
    Das mache ich nicht zum ersten Mal, bin aber auch kein ausgewiesener Experte. Gerade wens an LInux geht bin ich oft unbeholfen, wenn ich CHMOD lese könnte ich schon reiern.

    Die Architektur von Openhab gefällt mir gut, ich habe das Gefühl mal kommt damit flexibel und rellativ leicht an seine Ziele.

    Da ich kein richtiges Smarthome habe, möchtet ich mich an 2 Dingen abarbeiten und üben:

    1. TV Headend Status auslesen und anzeigen
    2. SMA Smart Meter der Solaranlage auslesen und anzeigen

    Gestern habe ich mich mal 6 Stunden mit Punkt 1 beschäftigt und es geht NICHTS.

    Folgendes Beispiel habe ich rausgesucht, das sieht vielversprechend aus und hat vies was ich brauchen könnte.

    https://community.openhab.org/t/tvheadend-in…c-for-now/39577

    Leider ist das kein Anfänger Guide und setzt ganz viele Dinge vorraus die ich mir nicht beantworten kann oder einfach nach Gefühl umgesetzt habe.
    Grundsätzlich habe ich alles waws da steht abgearbeitet und angepasst.

    So, dann fange ich mal an:

    1. Welche Bindings, Action, Transformations oder sonstigen DInge muss ich denn vorher installiert haben damit das funktioniert? Exec Binding habe ich mir zussammengereimt, HTTP Request und irgendwas mit JSON auch.

    2. Man soll ein Shell Script anlegen, das habe ich getan, es liegt im gemounteten Ordner und ist innerhalb des Containers auch verfügbar, geprüft per Terminal im Docker.
    Muss das Skript noch irgendwie verhätscheln, ausführbar machen oder sonst was? Über die Syno Oberfläche (da liegt die Datei ja in Wahrheit) oder im Container, wo es dann durchgereicht ist?
    Muss man das Skript unbedingt im Dateisystem ablegen oder kann man das nicht in Openhab verwalten, was mir wesentlich sympathischer wäre?

    3. Muss man je Think eine .things Datei anlegen, oder kann alles in eine? oder darf es sogar nur eine geben?
    Ich habe mal alle Things als dem Beispiel in eine Things Datei gepackt.

    4. Den Pfad vom Skript habe ich den einzelnen Things Zeilen angepasst, so dass es passenn müsste:

    XML
    /openhab/userdata/etc/scripts/shell/jsonpathtransform.sh /api/dvr/entry/grid_failed?limit=0 .total

    Trotzdem steht auf der "Controls" Seite von der PaperUI immer
    Cannot run program "/openhab/userdata/etc/scripts/shell/jsonpathtransform.sh": error=2, No such file or directory

    Warum? sieht er das Skript nicht? Oder ist ein Fehler im Skript?
    Wenn ich das SSkript über das Terminal von Docker aufrufe kommen auch Fehlermeldungen.

    Diese 4 Sachen passen schon nicht, daher laufen meine "Things" auch nicht da darin ja das Skript steckt.

    Wie komme ich jetzt weiter, wer kann mir helfen?

  • Ich denke und glaube dass der Pfad stimmt.

    So sehen meine Things aus (ein Beispiel)
    Thing exec:command:TVH_VERSION_THING "TVH_VERSION" @ "TVH" [command="/openhab/userdata/etc/scripts/shell/jsonpathtransform.sh /api/serverinfo .sw_version",interval=150]


    So sieht es im Terminal aus:


    Das sagt Paper UI:

  • ich hab das beispiel aus dem forum auch vor ner weile mal getestet, hatte genau das gleiche problem.
    ich weiss das ich es irgendwann auf meiner testumgebung zum laufen gebracht hatte.
    im endeffekt hab ich es aber nicht in meine produktivumgebung übernommen, da ich das ganze vom code her nicht für besonders gut gelöst halte und der wirkliche nutzen ganz objektiv betrachtet sehr übersichtlich ist.
    für wichtige infos, bspw was gerade läuft kannst du das kodi binding nutzen, das ist in dem punkt 1000x flexibler. da kannst du dann auch cover/senderlogos, einbinden.
    wenn du die nächste aufnahme sehen willst kann das auch viiieeell einfacher abgefragt werden als in diesem beispiel.
    und der rest wie tvh version, anzahl der abgeschlossenen aufnahmen, anzahl der kommenden aufnahmen usw ist doch wirkklich völlig unwichtig.

    3. Muss man je Think eine .things Datei anlegen, oder kann alles in eine? oder darf es sogar nur eine geben?
    Ich habe mal alle Things als dem Beispiel in eine Things Datei gepackt.

    eine datei reicht, das gilt auch für die items und rules datei.

    ich hab zwar nicht zur lösungsfindung beigetragen (sry dafür) aber überdenke, ob du nicht mit etwas anderem einsteigen möchtest.

  • Ja, alles Mist, auch wenn ich Bock auf TVH gehabt hätte.

    Nun habe ich mir erst mal paar Sachen zusammengebaut, quasi also dumb home weil ich bisher nix smartes hab.

    Anzeige auf der Sitemap:
    -Smartphome von mir und meiner Frau, online oder offline.
    -Büro PCs online oder offline.
    -Uhrzeit Sonnenuntergang
    -Bezogene/Eingenspeiste Energie Solaranlage
    -Testswitch

    Bindings:
    -Network
    -SMA Energymeter
    -Telegram
    -Astro
    -Fritzbox
    -Kodi

    Regeln/Aktionen:
    -Wenn Sonnenuntergang > Notification in Kodi
    -Wenn beide Smartphones außer Haus > Bot-Nachricht in Telegram
    -Wenn Testswitch ON/OFF > Testnachricht in Telegram

    Ganz lustig soweit, macht Spaß.
    Hab mir nun ne WLAN Steckdose im Obi geholt und werde mal die Tage versuchen Tasmota drauf zu flashen > Obi flash

    Was mich sehr stört: Alles was man Paper UI macht geht nicht in Config files sondern in die interne DB. Das ist blöd weil man grade am Anfang die Syntanx nicht kann und somit auch nichts abgucken kann.
    Und wenn man dann mit den config files loslegt ist es in der UI vermischt und man blickt schwer durch was in Dateien und was in der DB liegt.

    Schöner Spielkram.

  • Nööö, dafür bin ich zu ungeduldig. Ich wollte und will Ergebnisse und da klickt man sich schneller was zusammen.
    Die files lerne ich schon noch, oder es bleibt so chaotisch. ;)

    Was ziemlich geil ist, wenn auch mit geringem Nutzen:

    Man kann den Telegram Bot auch in Gruppen holen und dann in diese Gruppen schreiben.
    Es geht sogar mehrere Bots in der Config anzulegen, aber in Wahrheit nur den gleichen Bot mit verschiedenen Message IDs, also Chats.

    Naja, auf jeden Fall schickt uns der Bot das Nasa Astronomie Bild des Tages hinterher, wenn alle das heimische WLAN verlassen haben.
    Vorher wird das Bild per Skript von der Synology runtergeladen und ins Docker Verzeichnis von Openhab gelegt.

    Fühlt sich so an als hätte ich was automatisiert. ;)

  • so würde ich das umsetzen

    Code
    DateTime    Sunrise_Time    "Sonnenaufgang heute [%1$tH:%1$tM Uhr]"    <sunrise>    {channel="astro:sun:home:rise#start"}
    DateTime    Sunset_Time    "Sonnenuntergang heute [%1$tH:%1$tM Uhr]"    <sunset>    {channel="astro:sun:home:set#start"}
    String    Tageslicht_Dummy    "Tageslicht [%s]"    <sun>

    rule:

    Code
    rule "sonne"
    when
        Channel "astro:sun:home:rise#event" triggered START or
        Channel "astro:sun:home:set#event" triggered START
    then
    var String startzeit = Sunrise_Time.state.format("%1$tH:%1$tM")
    var String endzeit = Sunset_Time.state.format("%1$tH:%1$tM")
    Tageslicht_Dummy.postUpdate(startzeit + "Uhr bis " + endzeit + "Uhr") 
    end

    auf die bildchen würde ich verzichten, die kann man auf mobilgeräten sowieso nicht erkennen.
    was du als trigger für die rule nimmst musst du mal schauen....ich hab keine ahnung wann sich die werte für sonnenauf/untergang ändern. könntest bspw auch einen cron trigger um 00.01Uhr für die rule nutzen wenn sich das mitternacht ändert.

    Drehen wir den Spieß mal um? Zeig mal deine Lösung dafür (mit Zeitangabe)

    zeitangabe für die erstellung der rule? 5min (kaffee holen inklusive)

  • Wow, alles klar.

    Das ist tatsächlich ganz nah an meiner aus dem Internet zusammengestoppelten Lösung.
    Wahrscheinlich machst du das aber Vollzeit, also bist Programmierer, oder hast dieses Hobby schon sehr lange.

    Denn woher weiß man sowas: Sunrise_Time.state.format("%1$tH:%1$tM")?

    Oder bei dem Dummystring: String Tageslicht_Dummy "Tageslicht [%s]" <sun>
    Warum muss man da dieses [%s] schreiben? Was macht das oder wofür wird es gebraucht?
    Offensichtlich funktioniert es nicht einfach nur eine String Variable zu nehmen wie ich es vom Programmieren kenne, denn dann geht es nicht.

    Kann man eine Textvariable nicht "frei" belegen? denn das anfängliche "Tageslicht" bleibt ja bei .postUpdate erhalten.

    Warum überhaupt .postUpdate? Alle andere Sprachen die ich kenne machen Variable = "a" + "b" oder so ähnlich.

    Meine Zeit frisst dass die Syntax für mich irre komliziert ist und man mehr Zeit mit Typumwandlung und Formatierungsfehlern verbringt als dass man was produktives tut.

    Wahrscheinlich Übungssache.

    Achso: Was macht eigenlich diese Eigenschaft "state" die man mal nehmen muss und mal nicht wenn man einen Wert aus einem Item oder einer Variablen haben möchte?

  • Denn woher weiß man sowas: Sunrise_Time.state.format("%1$tH:%1$tM")?

    naja die variablen sind wiederkehrend, mit der zeit wirst du dir da schon einiges einprägen.
    die datumsformatierung hab ich vor nicht allzu langer zeit für meinen briefkasten genutzt, daher konnte ich mich daran recht schnell erinnern.

    Meine Zeit frisst dass die Syntax für mich irre komliziert ist und man mehr Zeit mit Typumwandlung und Formatierungsfehlern verbringt als dass man was produktives tut.

    Wahrscheinlich Übungssache.

    definitiv übungssache...für mich ist auch das saubere erstellen von variablen und die formatierung sowie "umwandlung" das schwerste bzw langwierigste.

    Kann man eine Textvariable nicht "frei" belegen? denn das anfängliche "Tageslicht" bleibt ja bei .postUpdate erhalten.

    ja kann man.

    Warum überhaupt .postUpdate? Alle andere Sprachen die ich kenne machen Variable = "a" + "b" oder so ähnlich.

    aber ohne postupdate/sendcommand hast du doch keine möglichkeit werte zu anderen items zu senden

    Achso: Was macht eigenlich diese Eigenschaft "state" die man mal nehmen muss und mal nicht wenn man einen Wert aus einem Item oder einer Variablen haben möchte?

    state muss man doch eigentlich immer nutzen. hast du ein beispiel?

  • Hey, danke für deine Antworten.

    Das mit dem .state verwirrt mich halt aus folgenden Gründen: Ich würde erwarten dass Eigenschaften und Werte von Objekten in verschiedenen Eigenschaften stecken die per .xyz zugreifbar sind.
    Jetzt müsste es aber unterschiedliche Objekte (Items, Channels, Variablen, und und und) geben und vor allem unterschiedliche Datenformate (String, Number, Boolean).
    Trotzdem ist immer alles in .state gespeichert, egal was es ist?

    Wenn ich eine Variable auf der Sitemap verwende (Tageslicht_Dummy) dann muss ich nicht .state schreiben.
    Wenn ich auf den Text zugreifen will muss ich .state schreiben.
    Wenn ich ein PostUpdate schreiben muss ich auch nicht .state schreiben.
    Ist der Text jetzt in der Variable selbst oder in der .state Eigenschaft gespeichert?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!