Seite 1 von 1
Abfallkalender Javascript OH3 > OH4
Verfasst: 15. Nov 2023 18:32
von technick90
Hallo,
ich habe nun endlich von OH3 auf OH4 migrieren. Vielen Dank an udo1toni für die Anleitung hier im Forum.
Mein Abfallkalender ist das einzige was noch nicht wieder funktioniert.
Dazu habe ich folgende textbasierte Items:
Code: Alles auswählen
String ABF1_NAME { channel="http:url:06f8dbd034:ics"[profile="transform:JS", function="abfall_naechste_abholung_name.js"] }
DateTime ABF1_DATE { channel="http:url:06f8dbd034:ics"[profile="transform:JS", function="abfall_naechste_abholung_datum.js"] }
Das JS Addon habe ich installiert, im Log kommt aber nun folgender Fehler:
Code: Alles auswählen
2023-11-15 18:18:21.070 [ERROR] [.module.script.profile.ScriptProfile] - Neither 'toItemScript' nor 'toHandlerScript' defined in link 'ABF1_NAME -> http:url:06f8dbd034:ics'. Profile will discard all states and commands.
2023-11-15 18:18:21.073 [ERROR] [.module.script.profile.ScriptProfile] - Neither 'toItemScript' nor 'toHandlerScript' defined in link 'ABF1_DATE -> http:url:06f8dbd034:ics'. Profile will discard all states and commands.
Von dem was ich gelesen habe, muss ich wohl den Aufruf der Transform Datei anders gestalten, leider verstehe ich nicht wie.
Kann mir einer erklären was ich tun muss? Gerne dann gleich als UI-basiertes Item.
Gruß
Robert
Re: Abfallkalender Javascript OH3 > OH4
Verfasst: 15. Nov 2023 22:02
von tim.l
Hallo @technick90,
leider kann ich bei dem JS transform nicht direkt helfen, platziere aber immer wieder gerne meinen müll.io Dienst für openHAB:
https://müll.io/integration/openhab Falls du dies benutzen willst und dein Anbieter dort fehlt, lass es mich gerne wissen, dann würde ich diesen ergänzen
Beste Grüße,
Tim
Re: Abfallkalender Javascript OH3 > OH4
Verfasst: 16. Nov 2023 01:40
von udo1toni
Also eigentlich steht in der Fehlermeldung genau drin, was da schief geht

Parameter fehlen.
Und ein Blick in die offizielle Doku verrät auch, wie das unter openHAB4 zu konfigurieren ist:
Code: Alles auswählen
Number <itemName> { channel="<channelUID>"[profile="transform:JS", toItemScript="decode_json.js", toHandlerScript="encode_json.js" ] }
Hier halt am Beispiel eines Number Items.
Der Punkt ist, dass man die Transformation jetzt in beide Richtungen verwenden kann, da aber mit extrem hoher Wahrscheinlichkeit die Transformation in Empfangsrichtung eine andere ist als in Senderichtung, kann man jetzt zwei Scripte angeben. Deshalb wurde der Parametername geändert.
Re: Abfallkalender Javascript OH3 > OH4
Verfasst: 16. Nov 2023 15:39
von technick90
@tim.l
Tatsächlich ist mein Ort (Schwerin, M-V) bisher nicht enthalten.
Ich habe derzeit in meiner Sitemap aber auch nur eine Zeile für alle Tonnen, siehe Screenshot.
Sonst nimmt es mir zu viel Platz weg.
@udo1toni
Sowas habe ich mir schon auch gedacht. Aber es geht trotzdem nicht.
Beispiel:
Code: Alles auswählen
String ABF1_NAME { channel="http:url:06f8dbd034:ics"[profile="transform:JS", toItemScript="abfall_naechste_abholung_name.js"] }
Egal ob ich toItemScript oder toHandlerScript nehme oder beides, es kommt trotzdem der selbe Fehler im Log.
Müssen vielleicht die Transform-Dateien auch noch angepasst werden? Habe sie mal beigefügt.
Re: Abfallkalender Javascript OH3 > OH4
Verfasst: 16. Nov 2023 20:50
von int5749
Hi,
nutzt Du dafür das http-Binding? Ich erledige die Transformation direkt im Thing und habe bisher keine Probleme
Thing
Code: Alles auswählen
/* HTTP Binding */
Bridge http:url:abfallkalender "Abfallkalender" @ "Internet" [
baseURL="https://www.umwelt-webmedia.de/caldownload/56448759806804803.ics",
refresh=360,
ignoreSSLErrors=true,
commandMethod="GET",
timeout=3000,
bufferSize=2048
] {
Channels:
Type string : cABF1_NAME "Nächste Abholung" [ stateTransformation="JS:abfall_naechste_abholung_name.js", mode="READONLY"]
Type datetime : cABF1_DATE "Datum nächste Abholung" [ stateTransformation="JS:abfall_naechste_abholung_datum.js", mode="READONLY"]
Type string : cABFALL_ICAL_heute "Abholung heute" [ stateTransformation="JS:abfall_heute.js", mode="READONLY"]
Type string : cABFALL_ICAL_morgen "Abholung morgen" [ stateTransformation="JS:abfall_morgen.js", mode="READONLY"]
}
Items
Code: Alles auswählen
//Abfallkalender
// Nächste Abholung
String ABF1_NAME "Nächste Abholung [%s]" (gWasteCollection) ["Point"] {channel="http:url:abfallkalender:cABF1_NAME"}
DateTime ABF1_DATE "Termin: [%1$ta, %1$td.%1$tm.%1$ty]" (gWasteCollection) ["Point", "Timestamp"] {channel="http:url:abfallkalender:cABF1_DATE"}
//Abfall heute
String ABFALL_ICAL_heute {channel="http:url:abfallkalender:cABFALL_ICAL_heute"}
Switch ABFALL_AKTIV_heute
String ABFALL_NAME_heute
//Abfall morgen
String ABFALL_ICAL_morgen {channel="http:url:abfallkalender:cABFALL_ICAL_morgen"}
Switch ABFALL_AKTIV_morgen
String ABFALL_NAME_morgen
Die dazu gehörenden Rules hast Du ja sicher?
Viele Grüße
Re: Abfallkalender Javascript OH3 > OH4
Verfasst: 17. Nov 2023 07:01
von technick90
@int5749
Vielen Dank! So funktioniert alles wieder!
Rules habe ich keine mehr. Das ging zuletzt irgendwie alles nicht mehr (schon laaaange her), seitdem nutze ich nur noch nächste Abholung und Datum nächste Abholung.
Die Rules waren für Abfall heute und Abfall morgen oder?
Viele Grüße
Re: Abfallkalender Javascript OH3 > OH4
Verfasst: 17. Nov 2023 08:24
von int5749
technick90 hat geschrieben: ↑17. Nov 2023 07:01
Vielen Dank! So funktioniert alles wieder!
Prima, das freut mich.
technick90 hat geschrieben: ↑17. Nov 2023 07:01
Rules habe ich keine mehr. Das ging zuletzt irgendwie alles nicht mehr (schon laaaange her), seitdem nutze ich nur noch nächste Abholung und Datum nächste Abholung.
Die Rules waren für Abfall heute und Abfall morgen oder?
Ja, genau. Anbei dann noch die Rules, falls Du es wieder nutzen möchtest
Rules
Code: Alles auswählen
/* Abfallkalender */
rule "Abfallkalender heute"
when
Item ABFALL_ICAL_heute changed
then
//Prüfen ob heute Abfall abgeholt wird
if (ABFALL_ICAL_heute.state != "false" && ABFALL_ICAL_heute.state != "Uninitialized"){
postUpdate(ABFALL_AKTIV_heute,ON)
postUpdate(ABFALL_NAME_heute,ABFALL_ICAL_heute.state)
} else {
postUpdate(ABFALL_AKTIV_heute,OFF)
postUpdate(ABFALL_NAME_heute,"false")
}
end
rule "Abfallkalender morgen"
when
Item ABFALL_ICAL_morgen changed
then
//Prüfen ob morgen Abfall abgeholt wird
if (ABFALL_ICAL_morgen.state != "false" && ABFALL_ICAL_morgen.state != "Uninitialized"){
postUpdate(ABFALL_AKTIV_morgen,ON)
postUpdate(ABFALL_NAME_morgen,ABFALL_ICAL_morgen.state)
} else {
postUpdate(ABFALL_AKTIV_morgen,OFF)
postUpdate(ABFALL_NAME_morgen,"false")
}
end
Ich lasse mir dann noch eine entsprechende Nachricht auf die Handy's schicken.
Code: Alles auswählen
rule "Abfallerinnerung heute"
when
Time cron "0 45 06 ? * * *"
then
val actions = getActions("pushover", "pushover:pushover-account:account")
if (ABFALL_AKTIV_heute.state == ON){
actions.sendMessageToDevice("alle", "An den " + ABFALL_NAME_heute.state + " denken.", "Notification")
}
end
rule "Abfallerinnerung morgen"
when
Time cron "0 30 18 ? * * *"
then
val actions = getActions("pushover", "pushover:pushover-account:account")
if (ABFALL_AKTIV_morgen.state == ON){
actions.sendMessageToDevice("alle", "Morgen den " + ABFALL_NAME_morgen.state + " rausstellen.", "Notification")
}
end
Re: Abfallkalender Javascript OH3 > OH4
Verfasst: 17. Nov 2023 15:01
von technick90
Die Rules habe ich nun auch wieder hingelegt, inklusive Pushnachricht für nächsten Tag.
Vielen Dank!
Bis zur nächsten OH Version mit weiteren Änderungen.