Hab ein bissl mit der Oscam api rumgespielt, da nach dem letzten Neustart meines System eine Karte in Oscam nicht korrekt initialisiert wurde....warum auch immer.
das hat 2 stunden später (ich war nicht mehr zuhause) mit der chefin ärger "erzeugt".
deshalb das hier:
über die oscam api wird der reader alle 60s nach dem status abgefragt und ggf eine telegram nachricht gesendet wenn was nicht passt.
das ganze ist über http binding und xpath transformation realisiert.
falls jemand interesse daran hat poste ich das hier gerne.
Oscam -> Openhab
-
horschte -
28. April 2019 um 18:49 -
Unerledigt
-
-
Immer raus damit. Sehe es als Backup für dich an
-
-
openhab paper ui -> bindings -> "http binding" installieren
openhab paper ui -> transformations -> "Map Transformation" installieren
openhab paper ui -> transformations -> "XPath Transformation" installierenDesktop.zip runterladen, entpacken, datei sky.svg nach /srv/openhab2-conf/icons/classic verschieben und datei oscam.map nach /srv/openhab2-conf/transform
1.
eintrag in der /srv/openhab2-conf/services/http.cfg erstellen:Codeskyreader1.url=http://oscamname:oscampasswort@192.168.2.85:16002/oscamapi.html?part=status skyreader1.updateInterval=60000
skyreader1: uniqe name, es kann frei gewählt werden, muss dann aber auch später in der items datei angepasst werden.
oscamname und oscampasswort muss natürlich ersetzt werden mit euren oscam zugangsdaten fürs webinterface.
ip & port: eure oscam ip sowie port
updateInterval: update intervall in millisekunden2.
eintrag in der itemsdatei erstellenCodeGroup Skyreader "Sky Reader " <sky> String Sky_Reader_1 "Cardreader 1 [MAP(oscam.map):%s]" <sky> (Skyreader) {http="<[skyreader1:30000:XPATH(//client[@name='Sky_Reader_1']/connection/text())]"}
aufbau des eintrags hinten bei der http abfrage:
skyreader1 = der name aus der /srv/openhab2-conf/services/http.cfg
client[@name='Sky_Reader_1' : das ist das label eures readers welches angepasst werden muss, der name ist in eurer oscam.server datei hinterlegt unter:eintrag in der sitemap datei:
Text item=Sky_Reader_1beispielrule:
Coderule "oscam alarm" when Member of Skyreader changed then if(triggeringItem.state.toString.contains("CARDOK")){ Skyreader.postUpdate("Alles in Ordnung") } else sendTelegram("Botname", "Achtung! Der " + triggeringItem.label + " arbeitet nicht mehr korrekt! Bitte überprüfe das umgehend!") end
anmerkung:
in der oscam.map sind nicht alle möglichen "zustände" des readers enthalten....es fehlt bspw ERROR, NOTOK, NEEDINIT usw....
da man das aber eigentlich nicht benötigt (wenn der reader nicht läuft dann muss man sowieso nachschauen) hab ich das nicht eingetragenverbesserungsvorschläge oder sonstige kommentare sind willkommen.
gibts was zu bemängeln? -
falls hier noch jemand oscam nutzt und manuell emm schreibt um zwangs-ehen zu umgehen:
//emmstats/emm[14]/text() ist der xpath wert in der oscam-api für geblockte unique emms.
damit kann man sich per rule (bspw per telegram) eine nachricht schicken lassen wenn ein unique emm key angekommen ist.ein eintrag in der http.cfg sähe dann bspw so aus (name, pw, ip, port, label muss auf euren wert angepasst werden):
Codeskyreader_unique.url=http://name:passwort@192.168.2.85:16002/oscamapi.html?part=readerstats&label=Sky_Reader skyreader_unique.updateInterval=60000
der dazugehörige item eintrag so:
CodeNumber Sky_Reader_unique"Sky Reader[%s]" { http="<[skyreader_unique:30000:XPATH(//emmstats/emm[14]/text())]"}
und eine rule bspw so (telegram config muss auf eure werte angepasst werden):
-
-
OK ... das ist nerdcore, der einen Nerv bei mir trifft.
-
Hallo,
ich würde gern noch zusätzlich den Bereich AU und last Channel in ein Item packen. Nun sind meine XML Kenntnisse sehr bescheiden. Wie müsste der Bereich
aussehen um die beiden Bereiche zu parsen ? Wäre nett von dir wenn du mir helfen könntest.Gruß
Frank -
-
//client[@name='username']/request/text() gibt den aktiven kanalnamen eines bestimmten users aus. username musst du natürlich mit dem usernamen aus deiner oscam config ersetzen
//client[@name='readername']/request/text() gibt den kanalnamen des gerade entschlüsselten vom reader aus, also ohne userzuordnung readername musst du natürlich mit dem readernamen aus deiner oscam config ersetzenkanalname eines users wäre dann bspw:
String Kanalname_User "firstfacility schaut [%s]" <screen> {http="<[skyreader1:30000:XPATH(//client[@name='username']/request/text())]"}
die abfrage des gesamten readers ohne userzuordnung bspw:
String Kanalname_Reader "Kanal entschlüsselt [%s]" <screen> {http="<[skyreader1:30000:XPATH(//client[@name='readername']/request/text())]"}
was willst du bei AU genau abfragen?
musst mir mal den bereich deiner api abfrage hier posten. -
das läuft schon mal, besten dank.
Ich baue das in meine Cometviso ein. Ich möchte mit der AU sehen ob die Karten auch ein update bekommen. Man könnte das sicher auch über die Elements machen aber ich denke Au reicht erstmal.Code<client thid="[b]id_0xdf28f8[/b]" au="[b]1[/b]" protocolext="[b][/b]" protocol="[b]smartreader[/b]" desc="[b][/b]" name="[b]Orf[/b]" type="[b]r[/b]"><request answered="[b][/b]" ecmhistory="[b]92,92,93,112,92,93,91,91,91,94,90,95,91,92,91,90[/b]" ecmtime="[b]90[/b]" srvid="[b]132F[/b]" provid="[b]000004[/b]" caid="[b]0D98[/b]">ORF1 HD [ORF Digital]</request><times idle="[b]1007[/b]" online="[b]2419971[/b]" login="[b]2020-04-05T09:09:02+0200[/b]"/><connection port="[b]0[/b]" ip="[b]127.0.0.1[/b]">CARDOK</connection></Client>
-
-
das was du gepostet hast sagt nur, das ein client updaten kann. nicht ob da irgendwas reingekommen ist.
wenn du sehen möchtest ob deine karte geupdatet wurde solltest du bspw die unique emm abfragen und wenn sie sich ändern ein datetime item per rule aktualisieren. -
ja genau, der Status ändert sich aber wenn ein Update läuft. Im Webif ändert es sich dann von "On" zu "Aktive" Diese Info würde mir reichen. Klar du hast recht um sicher zu sein sollte ich die emm Abfragen, aber im Moment reicht mir das.
-
-
Stimmt beim schreiben ändert sich das kurzzeitig. Das mit nem Datum ist aber auch nicht wirklich aufwendig, dafür aber hübscher. Falls du das nicht allein hinbekommst kann ich dir morgen was posten.
-
Das wäre nett von Dir danke.
-
-
hier ein beispiel um den zeitpunkt des zuletzt geschriebenen unique emm darzustellen
das hier zusätzlich in deine http.cfgCodeskyreader_unique.url=http://name:passwort@192.168.2.85:16002/oscamapi.html?part=readerstats&label=Sky_Reader skyreader_unique.updateInterval=60000
werte wie in diesem beitrag beschrieben anpassen Oscam -> Openhab
also den namen ganz vorn, name, user, passwort, ip und ganz hinten bei label den namen des readers den du abfragen möchtest und wie er in oscam hinterlegt ist.
das hier in deine items datei (zeile 1 -> channel hinten auf deinen namen aus der http.cfg anpassen). die zweite zeile ist der dummy der später dargestellt werden sollCodeNumber Sky_Reader_EMM "Sky Reader[%s]" { http="<[skyreader_unique:30000:XPATH(//emmstats/emm[6]/text())]"} String Letzter_EMM "EMM geschrieben [%s]" <calendar> (Pflanzen_Status)
rule
Coderule "Letzter EMM Key" when Item Sky_Reader_EMM changed then val String zeitpunkt = String::format( "%1$tH:%1$tM" + " Uhr, am " + "%1$td.%1$tm.%1$ty", new java.util.Date ) Letzter_EMM.postUpdate(zeitpunkt) end
sitemap
Text item=Letzter_EMMin der rule musst du nur in zeile 3 den itemnamen ändern falls du etwas anderes bei items eingetragen hast.
du kannst das ganze konstrukt nach fertigstellung und openhab neustart manuell anstoßen indem du einen unique emm im oscam webif auf den reader schreibst. -
Hallo,
versuche vergeblich das ans laufen zu bringen.
Habe openHAB3 (Synology, Docker) und http, map und xpath installiert.
oscam.map ins transform Verzeichnis verschoben.
Items und Sitemap erstellt.
bekomme jetzt aber immer nur den Wert Null angezeigt.
Wo mach ich den Fehler? -
-
gut möglich, dass docker da probleme macht. du musst ja einen externen aufruf per api starten.
grundsätzlich kannst du natürlich erstmal im browser testen, ob dir http://192.168.2.6:16002/oscamapi.html?part=readerstats&label=hdplus ein ergebnis ausgibt. (ip,port,label natürlich anpassen)
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!