Oscam -> Openhab

  • 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.

  • openhab paper ui -> bindings -> "http binding" installieren
    openhab paper ui -> transformations -> "Map Transformation" installieren
    openhab paper ui -> transformations -> "XPath Transformation" installieren


    Desktop.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:

    Code
    skyreader1.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 millisekunden

    2.
    eintrag in der itemsdatei erstellen

    Code
    Group   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:

    Code
    [reader]
    label                         = XXXXXXXX

    eintrag in der sitemap datei:
    Text item=Sky_Reader_1

    beispielrule:

    Code
    rule "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 eingetragen

    verbesserungsvorschläge oder sonstige kommentare sind willkommen.
    gibts was zu bemängeln? :rolleyes:

  • 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):

    Code
    skyreader_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:

    Code
    Number 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):

    Code
    rule "sky alarm"
    when
        Item Sky_Reader_unique changed
    then
    val telegramAction = getActions("telegram","telegram:telegramBot:bot")
    telegramAction.sendTelegram("Botname", "Hallo! Der " + triggeringItem.label + " hat gerade einen Verlängerungskey erhalten.")
    end
  • 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

    Code
    (//client[@name='Kabel']/connection/text())]"}


    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 ersetzen

    kanalname 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.

  • hier ein beispiel um den zeitpunkt des zuletzt geschriebenen unique emm darzustellen
    das hier zusätzlich in deine http.cfg

    Code
    skyreader_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 soll

    Code
    Number 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

    Code
    rule "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_EMM

    in 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?

Jetzt mitmachen!

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