Hallo zusammen,
hatte irgendwie obwohl ich regalmäßig hier vorbei schaue die Frage nach der Migration zu OH2.x verschlafen.
Auch wenn udo1toni bereits geholfen hat, hier der Vollständigkeit halber der Verweis auf meine Lösung für OH2 die ich gerade im Englisch-sprachigen beschrieben habe.
Mfg
Sebastian
Ankündigung
Einklappen
Keine Ankündigung bisher.
Müllentsorgung
Einklappen
X
-
Besten Dank,
jetzt verstehe ich das Exec-Binding so langsam.
Einen Kommentar schreiben:
-
Ups... Frühdienst... Es muss natürlich trash_yellow heißen. Ich habe das Posting von mir entsprechend geändert.
Was den meckernden Designer berifft: Eigentlich sollte das nicht passieren, aber vielleicht wurde dieser Import im Designer noch nicht eingepflegt. Leider ist der Designer ja auf einem sehr alten Stand, was dann dazu führt, dass inzwischen einige Statements angemeckert werden, obwohl sie korrekt sind.
Die Alternative (VSCode) ist allerdings auch noch nicht so weit, was Syntxprüfung betrifft. Aber sie sind auf einem guten Weg
So als Ausblick: VSCode greift auf die laufende OH2-Installation zurück und lässt dort die Syntaxprüfung erledigen. Dazu muss OH2 auf dem aktuellen Snapshot sein, dort muss ja auch die Funktionalität bereitgestellt werden. Damit ist dann das leidige Thema "passende Versionen" hoffentlich erledigt.
Wenn der Code ansonsten funktioniert und insbesondere in openhab.log keine Fehlermeldungen auftauchen, würde ich das also nur als Schönheitsfehler werten.
Einen Kommentar schreiben:
-
Ich sehe gerade im Log folgendes:
??????????Code:Cannot delegate update '2017-10-30' for item 'Exec_TrashYellow' to handler for channel 'exec:command:yellow:output', because no thing with the UID 'exec:command:yellow' could be found.
Einen Kommentar schreiben:
-
Bin gerade nach hause und habe es sofort umgesetzt. Zumindestens auf der Konsole und auch im PaperUI werden die richtigen Daten ausgegeben. Im BasicUI und im ClassicUI leider noch nicht, obwohl ich in der Rule den Cron angepasst habe, damit ich zeitnah eine Anzeige bekomme.
Erstmal besten Dank dafür. Jetzt kann ich mich weiter durch OH2.1 hangeln.
Aber eine Frage in dem Zusammenhang habe ich jetzt noch, nachdem ich alle Importe aus der Rule gelöscht habe, meckert der Designer jetzt immer:
Code:DateTime cannot be resolved to a type.
Ist das schlimm??Code:Import 'DateTime' (org.joda.time)
Einen Kommentar schreiben:
-
Importe dürfen weiterhin genutzt werden, aber die wichtigen sind jetzt als Standard aktiv (openhab.core, joda, datetime...). Wenn es nötig ist, einen import zu nutzen, darf der nun keinen Stern beinhalten, die imports müssen also komplett ausgeschrieben werden (und im Zweifel muss man dann eventuell mehrere imports vornehmen, wo vorher ein "allgemeiner" reichte.
Der Standardpfad für die Konfiguration heißt nun /etc/openhab2/ (wenn Du z.B. per apt-get installiert hast) Ein Verzeichnis shellscripts/ gibt es eigentlich nicht, aber natürlich hindert Dich niemand daran eines am neuen Platz anzulegen
Für exec2 musst Du eine Datei für die Things anlegen (unterhalb /etc/openhab2/things/)
z.B. garbage.things
Und in den Items musst Du entsprechend auf diese Things verweisen:Code:Thing exec:command:trash_blue "Exec test" [command="bash /etc/openhab2/scripts/trash.sh blue",interval=60,timeout=5,transform="REGEX((.*?))"] Thing exec:command:trash_black "Exec test" [command="bash /etc/openhab2/scripts/trash.sh black",interval=60,timeout=5,transform="REGEX((.*?))"] Thing exec:command:trash_yellow "Exec test" [command="bash /etc/openhab2/scripts/trash.sh yellow",interval=60,timeout=5,transform="REGEX((.*?))"]
Code:String Exec_TrashBlue {channel="exec:command:trash_blue:output"} String Exec_TrashBlack {channel="exec:command:trash_black:output"} String Exec_TrashYellow {channel="exec:command:trash_yellow:output"}Zuletzt geändert von udo1toni; 25.10.2017, 03:32. Grund: Thing-Namen in der item-definition korrigiert
Einen Kommentar schreiben:
-
Hallo Udo1toni,
auf die Idee das alte Binding weiter zu benutzen, bin ich gar nicht gekommen.
Ich möchte aber konsequent alles auf OH2 umstellen.
Ich weiß, daß man hier ein Thing definieren muss und ich habe auch gelesen, daß man keine Importe mehr in den Rules haben darf. Ist das richtig?
Anbei meine Konfig:
So sieht die trash.sh aus. Wahrscheinlich muss hier der Pfad geändert werden.
Hier meine Items. Hier muss wahrscheinlich auch der Pfad geändert werden, aber auch die Items, weiß allerdings nicht wie.Code:#!/bin/bash #Aktuelles Datum einlesen (inkl. Uhrzeit) datum=$(date +%s) #Müllart aus 1. Argument einlesen trash_kind=$1 #entsprechend der gewählten Müllart die zu durchsuchende Datei festlegen trash_file="/etc/openhab/configurations/shellscripts/trash_$trash_kind.txt" #Schleife, die die Textdatei zeilenweise durchläuft, und beim 1. größeren Datum abbricht und dieses ausgibt #eingelesenes Datum ohne Zeit ist immer 00:00:00h #86399sec = 23:59:59h -> somit wird der aktuelle Tag mitgezählt while read datum_line do datum_line_sec=$(date -d $datum_line +%s) let datum_diff=$datum-$datum_line_sec if [ $datum_diff -lt 86399 ] then echo $datum_line exit 0 fi done < $trash_file echo "Error"
Hier die Rule exemplarisch für blaue Tonne. Wahrscheinlich muss hier nichts geändert werden, ausser das die Importe aus der Rule genommen werden müssen.Code:/* Muellabfuhr */ String Exec_TrashBlack {exec="<[/etc/openhab/configurations/shellscripts/trash.sh black:60000:REGEX((.*?))]"} String TrashBlack "Normaler Müll [%s]" String Exec_TrashYellow {exec="<[/etc/openhab/configurations/shellscripts/trash.sh yellow:60000:REGEX((.*?))]"} String TrashYellow "Gelber Sack [%s]" String Exec_TrashBlue {exec="<[/etc/openhab/configurations/shellscripts/trash.sh blue:60000:REGEX((.*?))]"} String TrashBlue "Blaue Tonne [%s]"
Code:rule "Calculate trash dates blau" //aus Exec-Input Anzeige für Mülltermine berechnen when Time cron "0 0 1 * * ?" then var DateTime date_blue var DateTime date_now var String trash_blue date_blue = parse(""+Exec_TrashBlue.state) date_now = parse(""+now.getYear+"-"+now.getMonthOfYear+"-"+now.getDayOfMonth) if (date_now.equals(date_blue)) { trash_blue="heute" } else if (date_now.equals(date_blue.minusDays(1))) { trash_blue="morgen" } else if (date_now.equals(date_blue.minusDays(2))) { trash_blue="übermorgen" } else { trash_blue=date_blue.toString("dd.MM.yyyy") } TrashBlue.postUpdate(""+trash_blue) endZuletzt geändert von teasy1; 24.10.2017, 13:42.
Einen Kommentar schreiben:
-
Das Problem an so langen Threads ist allgemein, dass bei einem Posting wie Deinem nicht klar ist, wie die bisherige Konfiguration exakt aussieht.
Bei der Umstellung auf OH2 fallen eventuell ein paar Imports weg, Scripte und Rules werden sich sonst aber vermutlich nicht ändern.
Wenn Du das exec1-Binding verwendest, ändert sich noch nicht mal die Item Definition. Wenn Du exec 2 verwenden willst, musst Du die Konfiguration natürlich erheblich ändern, da Du die exec-Anweisung nun in ein Thing einpacken musst. das betrifft aber nur das Item. Wenn Du uns die bisherige Konfiguration verrätst, können wir versuchen, das zu "übersetzen".
Einen Kommentar schreiben:
-
Ich muss das hier nochmal hervor holen.
Ich benutze diesen Müllkalender schon sehr lange und auch gerne. Nun habe ich aber auf OH 2.1 umgestellt. Nach zig Stunden der Migration bin ich jetzt an dem Exec-Binding angekommen.
Irgendwie sehe ich den Wald vor lauter Bäumen nicht. Wie muss ich das jetzt für OH 2.1 umschreiben? Wo muss das Script und die Text-Dateien hin? Wie soll die Items aussehen.
Es wäre nett, wenn mir mal jemand auf die Sprünge helfen könnte.
Gruß Teasy
Einen Kommentar schreiben:
-
Das ist normalerweise nicht notwendig, wenn man diese als default in der pushover.cfg abgelegt hat.Zitat von eLeven Beitrag anzeigenIch musste allerdings beim Pushover mit dem API Token und User Key arbeiten.
Aber solange es funktioniert: never change a running system ...
Einen Kommentar schreiben:
-
So, nach diversen Tests kann ich euch eine Positive Rückmeldung geben. Es funktioniert wunderbar.
Ich musste allerdings beim Pushover mit dem API Token und User Key arbeiten. Die Regel sieht dann wie folgt aus
Danke an alle die mir geholfen haben!!!!HTML-Code:rule "Calculate trash dates gelb" //aus Exec-Input Anzeige für Mülltermine berechnen when Time cron "0 15 6 1/1 * ? *" then var DateTime date_yellow var DateTime date_now var String trash_yellow date_yellow = parse(""+Exec_TrashYellow.state) date_now = parse(""+now.getYear+"-"+now.getMonthOfYear+"-"+now.getDayOfMonth) if (date_now.equals(date_yellow)) { trash_yellow="heute" pushover("API Token","User Key","Heute wird die gelbe Tonne abgeholt!") } else if (date_now.equals(date_yellow.minusDays(1))) { trash_yellow="morgen" pushover("API Token","User Key","Morgen wird die gelbe Tonne abgeholt!") } else if (date_now.equals(date_yellow.minusDays(2))) { trash_yellow="übermorgen" pushover("API Token","User Key","Übermorgen wird die gelbe Tonne abgeholt!") } else { trash_yellow=date_yellow.toString("dd.MM.yyyy") } TrashYellow.postUpdate(""+trash_yellow) end
Einen Kommentar schreiben:
-
Danke Udo1toni.
Ich werde es gleich mal ausprobieren und berichten.
Einen Kommentar schreiben:
-
Ich nutze kein Pushover, aber laut Doku sollte es so gehen:
Die Doku zur pushover-Action befindet sich hier. Die Action muss zuerst installiert werden. Falls Du den Designer zum Konfigurieren nutzt, wird die pushover-Action als fehler angezeigt. Der Code funktioniert trotzdem - das ist dem Beta-Stand des Designers geschuldet.Code:rule "Calculate trash dates gelb" //aus Exec-Input Anzeige für Mülltermine berechnen when Time cron "0 0 1 * * ?" then var DateTime date_yellow var DateTime date_now var String trash_yellow date_yellow = parse(""+Exec_TrashYellow.state) date_now = parse(""+now.getYear+"-"+now.getMonthOfYear+"-"+now.getDayOfMonth) if (date_now.equals(date_yellow)) { trash_yellow="heute" pushover("heute gelbe Tonne!") } else if (date_now.equals(date_yellow.minusDays(1))) { trash_yellow="morgen" pushover("morgen gelbe Tonne!") } else if (date_now.equals(date_yellow.minusDays(2))) { trash_yellow="Übermorgen" } else { trash_yellow=date_yellow.toString("dd.MM.yyyy") } TrashYellow.postUpdate(""+trash_yellow) end
Einen Kommentar schreiben:
-
Das hört sich ziemlich einfach an, so wie Du es sagst! Den Zeitpunkt wann die Rule triggert würde ich auf 6 Uhr setzen.
Ich verstehe trotzdem gerade nur Bahnhof. Bin halt noch ein ziemlicher Anfänger.
Könntest Du mir evtl die Pushover Nachricht in die Rule einbauen?
Einen Kommentar schreiben:
-
Die Frage ist ja, wann willst Du die pushover Nachricht erhalten? Deine Rule triggert um 1 Uhr, wenn das als Zeitpunkt gut ist, musst du ja nur überprüfen, ob in der Variablen trash_yellow am Ende "heute" drin steht und gegebenenfalls die Nachricht verschicken.
Einen Kommentar schreiben:


Einen Kommentar schreiben: