Dobiss2mqtt

hey @spobo ,denk niet dat het de can programmer is …
mijne webserver heeft vorige week de geest gegeven, de can2usb module krijgt spanning van mijn webserver, dus die can2usb is ook zonder spanning nu in mijn kast

op zich niet erg, ik gebruik de webserver toch niet meer echt
polling en werkt nog steeds , want je polt toch op de master zelf , en niet op de webserver / can module?

Je communiceert denk ik wel via de CAN programmer hoor. Enkel dat ding exposed een socket waarop je berichten kan sturen en replies kan lezen. De can2usb dat is nog iets anders denk ik. En de webserver zeker. Dat is een extra laag bovenop de CAN controller denk ik.

ja idd, zal een extra laag zijn, die heb ik nu niet meer in gebruik, daar heb ik de esp module nu opgezet
ik zie mooi de canbus info doorkomen
esp kan je makkelijk koppelen met mqtt hoor, zijn genoeg voorbeeldjes voor, zo kan je rechstreeks iets schakelen, in jouw project dus zeer handig

ik ga me er deze avond eens mee bezig houden, eens de canbus info bekijken, ook de unieke id’s uitlezen enzo

Hey Spobo

Thanks for the quick reply! Ik heb de poll interval nu op 2000 ms staan. Enig idee wat een goede waarde is? Ik zit ook met een Ambiance PRO systeem. Ik zag de network interface als een ‘webserver’. Ik denk wel dat het eerder aan mijn server zelf ligt. Ik ben voor de derde keer van server aan het wisselen aangezien ik vaak tegen limieten loop. Ge gaan van een raspberry pi 2 => 3 => oude laptop naar nu een 4670k based system. Hopelijk lost dit het dan op.

Ik ga ook zo een module bestellen dat ik die knoppen kan uitlezen. Een losse dimmer output lijkt daar ideaal voor. Kan je 'id’s doorgeven aan de brightness setting. Ik zou die ook willen gebruiken voor tv/spotify/mijn hue lampen aan te sturen zonder het contact te schakelen.

@spobo @pergola.fabio Als ik ergens kan helpen met het converteren van mqtt messages naar entities in de code, let me know.

let op, met oudere systemen, de drukknoppen zitten NIET op de canbus, je zal dus een ghost programma moeten starten dat je aanmaakt via de software, dit ghost programma zet je achter een drukknop, je leest dan via de canbus wanneer her programma aangaat, dmv de knop die je induwt

Dit moet dan ook werken met een dim output? Je zet een waarde als brightness wat de id van de knop voorstelt? Zover mijn electronica kennis gaat is dat geen probleem als het een losse uitgang betreft.

welicht wel, ik zie hier steeds mijn dimmers op de canbus voorbij komen

deze zijn de waarde van mijn dimmers momenteel

[19:31:06][D][canbus:046]: received can message can_id=-2130641152 size=4
[19:31:06][V][canbus:052]: can_message.data[0]=01
[19:31:06][V][canbus:052]: can_message.data[1]=45
[19:31:06][V][canbus:052]: can_message.data[2]=00
[19:31:06][V][canbus:052]: can_message.data[3]=00
[19:31:06][D][canbus:046]: received can message can_id=-2130641152 size=4
[19:31:06][V][canbus:052]: can_message.data[0]=01
[19:31:06][V][canbus:052]: can_message.data[1]=45
[19:31:06][V][canbus:052]: can_message.data[2]=01
[19:31:06][V][canbus:052]: can_message.data[3]=5a
[19:31:06][D][canbus:046]: received can message can_id=-2130641152 size=4
[19:31:06][V][canbus:052]: can_message.data[0]=01
[19:31:06][V][canbus:052]: can_message.data[1]=45
[19:31:06][V][canbus:052]: can_message.data[2]=02
[19:31:06][V][canbus:052]: can_message.data[3]=0a
[19:31:06][D][canbus:046]: received can message can_id=-2130641152 size=4
[19:31:06][V][canbus:052]: can_message.data[0]=01
[19:31:06][V][canbus:052]: can_message.data[1]=45
[19:31:06][V][canbus:052]: can_message.data[2]=03
[19:31:06][V][canbus:052]: can_message.data[3]=1e

Met ambiance PRO ga je de knoppen niet kunnen uitlezen vrees ik. De button presses komen niet op de CANbus bij de oudere systemen zo blijkt. Zoals @pergola.fabio zegt.

Maar zwier de polling gerust op 10000 of zelfs 20000 ofzo. Dat is gewoon de tijd die tussen polls zit. Dus in het slechtste geval moet je dan 20 seconden wachten vooraleer de state update in HA nadat je de knop de op muur gebruikt hebt. Of de app. Vooraleer de state daar juist is. Op zich geen ramp. Als je via HA zelf de switch aanpast is de state direct juist.

idd, polling moet niet zo laag zijn, het is puur om de states door te geven naar HA

alleen maar interessant als je ook een automation wilt startennadat je iets aandoet , maar daar dient het canbus project voor

Knoppen ga ik doen via een dim output. Was een voorzien in mijn keuken die ik niet ga gebruiken. Lijkt mij een beter use om mijn 60 schakelaars een id te kunnen geven en opvangen.

Die polling doet dus niet meer dan de state in orde zetten? Het aan en uit zetten kan dus wel gebeuren zonder dat de state in ha correct is? Ik heb namelijk dit voor:

Ik zet de lamp aan, en hij gaat direct uit. Als ik dan snel dubbel klik gaat de lamp terug uit. Maar de state is dus nooit direct correct. Daarmee dat ik de polling zo snel had staan. Enig idee vanwaar dit komt en hoe ik dit best oplos?

edit: een input dat terug springt is nog ok, maar ik kan het ook laten dansen met meerdere inputs. Of ligt dit ook aan mijn te snel interval?

@pergola.fabio Ik probeerde dat nu te doen met node-red waardoor de polling zo laag staat. Mijn kitje is besteld op ali om op de canbus te werken :smiley:

ja, ik had dat issue in het begin ook, wat ik doe, bij het aanzetten van mijn teplate lights bevatten allemaal 2 services
1 service voor effectief lamp aan te zetten
1 service puur voor alleen het icoontje ook aan/uit te zetten, omdat idd anders pas het icoontje actief na de volgende polling :

bv:

    bureau:
      friendly_name: "Bureau"
      value_template: "{{ states.sensor.prog.state[4:6] == '01' }}"
      turn_on:
        - service: shell_command.dobiss
          data_template:
            module: 41
            id: 0
            power: 01
        - service: shell_command.dobiss_state
          data_template:
            power: "on"
            name: "Bureau"
            icon: "mdi:lightbulb-on"
            api: "light.bureau"
      turn_off:
        - service: shell_command.dobiss
          data_template:
            module: 41
            id: 0
            power: 00
        - service: shell_command.dobiss_state
          data_template:
            power: "off"
            name: "Bureau"
            icon: "mdi:lightbulb-on"
            api: "light.bureau"

Als het puur komt doordat de state nog niet veranderd is zou ik in de dobiss2mqtt een tussentijdse mqtt message voor die entity kunnen doorsturen. Dit zodat deze al de juiste state heeft voor de poll. Dan kan ik de poll ook verhogen naar 20 seconden omdat die dan veel minder uitmaakt. Geen idee wat @spobo hier van denkt?

PS: Beiden een big thanks voor de snelle feedback en het meedenken!

klopt, je kan ook eens proberen een assumed state toe te passen via je customize, dan heb je geen slider icoon maar een power icoon, dan zie je tenminste dat slidertje zo niet schuiven
zo een power icoon, het voordeel is dan dat je een lamp kan aanzetten, ookal staat hij al aan (zonder state dus)


light.bureau:
  assumed_state: true

dit gebruik ik trouwens om states aan te passen, daar hier geen service voor bestaat, ik doe dat via een shell command, met variablen zoals icon, name, api naam …

dobiss_state-: "curl -k -X POST -H \"Authorization: Bearer XXX\" -d '{\"state\": \"{{power}}\",\"attributes\": {\"assumed_state\": true,\"friendly_name\": \"{{name}}\",\"icon\": \"{{icon}}\"}}' http://127.0.0.1:8123/api/states/{{api}}"

Dit klopt niet… bij mij is het instant en direct in de juiste state. Omdat direct na de state switch ik ook een poll doe in dobiss2mqtt.

Kan je je dobiss installatie ff herstarten en dan direct met een tragere poll werken ? Ik vermoed dat het dan gewoon moet werken.

Wat ik kan doen is config toevoegen dat je https://www.home-assistant.io/integrations/light.mqtt/#optimistic op true kan zetten. Op die manier is de state altijd direct juist. Maar in mijn geval is dit dus niet nodig.

misschien is het een idee om die extra poll check weg te doen? en gewoon de state aanpassen zoals ik het doe? dat veroorzaakt mss het ophangen vanwege te snelle polls achter elkaar ?

Ik heb de indruk dat de poll erachter niet correct is. Heb de poll interval nu op 20 seconden gezet. Als ik nu enkele minuten wacht, gaat de state nog niet juist.

Hoe kan ik dit best debuggen? Ik kan de code lokaal draaien maar weet niet goed waar ik moet begin te zoeken. Any pointer? Anders zal ik dit weekend eens zoeken.

ik had dat destijds ook toen ik dobiss2mqtt even had getest, was wel heel in het begin …

@spobo, ik ben bijna klaar met mijn canbus projectje :slight_smile:
ik struggel nog even met de code, mss kan jij helpen

het gaat vooral om de condition op deze lijn:
lambda: 'return x[1] == 0x41, return x[2] == 0x00;'
ik wil 2 waardes eerst checken namelijk x[1] moet 0x41 zijn, en x[2] moet 0x00 zijn, in 1 conditie
x[3] is de waarde van de lamp, die zet dan een binary_sensor aan als test in mijn geval

met 1 conditie, dan werkt het wel, maar dan check ik heel relays module 41 :slight_smile:

            condition:
              lambda: 'return x[1] == 0x41;'
    - can_id: -2130641152
      then:
        - if:
            condition:
              lambda: 'return x[1] == 0x41, return x[2] == 0x00;'
          
            then:
              - lambda: |-
                  switch(x[3]) {
                    case 0x0: id(can_bus_button).publish_state(false); break; // button release
                    case 0x1: id(can_bus_button).publish_state(true); break;  // button down
                  }

Kan je niet dit doen?

condition:
  condition: and
  conditions:
    - condition
      lambda: return x[1] == 0x41
    - condition
      lambda: return x[2] == 0x00

ok, gevonden :slight_smile:
voor de geinstersseerde, hierbij code dat werkt, en is echt INSTANT
heb er nu even een binary sensor op gehangen als test, maar je kan eender wat doen!!
nu kan ik eindelijk muurschakelaars gebruiken om stuff te bedienen in HA :slight_smile:


spi:
  id: McpSpi
  clk_pin: GPIO16
  mosi_pin: GPIO5
  miso_pin: GPIO4
  
canbus:
  - platform: mcp2515
    id: my_mcp2515
    spi_id: McpSpi
    cs_pin: GPIO14
    can_id: 4
    #mode: NORMAL
    on_frame:
    - can_id: -2130641152
      then:
        - if:
            condition:
              lambda: 'return x[1] == 0x41 and x[2] == 0x00;'
          
            then:
              - lambda: |-
                  switch(x[3]) {
                    case 0x0: id(can_bus_button).publish_state(false); break; // button release
                    case 0x1: id(can_bus_button).publish_state(true); break;  // button down
                  }           

binary_sensor:

  - platform: template
    name: "CAN Bus Button"
    id: "can_bus_button"
2 Likes