From 0dd3eadc7bfb1e0c4e70d4b6ddef33790102ba2a Mon Sep 17 00:00:00 2001 From: thor0215 Date: Fri, 28 Jun 2024 09:10:52 -0500 Subject: [PATCH 01/16] MQTT Sensors --- birdnet-go/HAINTEGRATION.md | 302 +++++++++++++++++++ birdnet-go/images/ha_birdnet_mqtt_sensor.png | Bin 0 -> 87729 bytes 2 files changed, 302 insertions(+) create mode 100644 birdnet-go/HAINTEGRATION.md create mode 100644 birdnet-go/images/ha_birdnet_mqtt_sensor.png diff --git a/birdnet-go/HAINTEGRATION.md b/birdnet-go/HAINTEGRATION.md new file mode 100644 index 000000000..e47b73afe --- /dev/null +++ b/birdnet-go/HAINTEGRATION.md @@ -0,0 +1,302 @@ +# Home Assistant Integration + +Birdnet-Go can be integrated with Home Assistant using a MQTT Broker. + +## MQTT Configuration + +Your Home Assistant must be setup with MQTT and Birdnet-Go MQTT integration must be enabled. Modify the Birdnet-Go config.yaml file to enable MQTT. If you are using the Mosquitto Broker addon, you will see a log message during the Birdnet-Go startup showing the internal MQTT server details needed for configuration similar to below. + +```text +Birdnet-Go log snipped showing MQTT details: +/etc/cont-init.d/33-mqtt.sh: executing +--- +MQTT addon is active on your system! Add the MQTT details below to the Birdnet-go config.yaml : +MQTT user : addons +MQTT password : Ri5ahV1aipeiw0aelerooteixai5ohtoeNg6oo3mo0thi5te0phiezuge4Phoore +MQTT broker : tcp://core-mosquitto:1883 +--- + +Edit this section of config.yaml found in addon_configs/db21ed7f_birdnet-go/: + mqtt: + enabled: true # true to enable MQTT + broker: tcp://core-mosquitto:1883 # MQTT (tcp://host:port) + topic: birdnet # MQTT topic + username: addons # MQTT username + password: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # MQTT password +``` +## Birdnet-Go MQTT Sensors + + +![Birdnet-go MQTT](https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/birdnet-go/images/ha_birdnet_markdown_card_wikipedia.png) + +Add the [MQTT sensor](https://www.home-assistant.io/integrations/sensor.mqtt/) yaml configuration below to your Home Assistant configuration.yaml + +```yaml +mqtt: + sensor: + - name: "Birdnet-Go" + state_topic: "birdnet" + value_template: "{{ today_at(value_json.Time) }}" + json_attributes_topic: "birdnet" + json_attributes_template: "{{ value_json | tojson }}" + - name: "Birdnet-Go Bird Image Url" + state_topic: "birdnet" + value_template: "{{ value_json.BirdImage.URL }}" + - name: "Birdnet-Go Clip Name" + state_topic: "birdnet" + value_template: "{{ value_json.ClipName }}" + - name: "Birdnet-Go Common Name" + state_topic: "birdnet" + value_template: "{{ value_json.CommonName }}" + - name: "Birdnet-Go Confidence" + state_topic: "birdnet" + value_template: "{{ (value_json.Confidence | float * 100) | round(2) }}" + unit_of_measurement: "%" + - name: "Birdnet-Go Date" + state_topic: "birdnet" + value_template: "{{ value_json.Date }}" + - name: "Birdnet-Go ProcessingTime" + state_topic: "birdnet" + value_template: "{{ (value_json.ProcessingTime | float / 1000000000 ) | round(4) }}" + unit_of_measurement: "s" + - name: "Birdnet-Go Scientific Name" + state_topic: "birdnet" + value_template: "{{ value_json.ScientificName }}" + - name: "Birdnet-Go Sensitivity" + state_topic: "birdnet" + value_template: "{{ value_json.Sensitivity }}" + - name: "Birdnet-Go Source" + state_topic: "birdnet" + value_template: "{{ value_json.Source }}" + - name: "Birdnet-Go Species Code" + state_topic: "birdnet" + value_template: "{{ value_json.SpeciesCode }}" + - name: "Birdnet-Go Threshold" + state_topic: "birdnet" + value_template: "{{ value_json.Threshold }}" + - name: "Birdnet-Go Time" + state_topic: "birdnet" + value_template: "{{ today_at(value_json.Time) }}" +``` + +## Birdnet-Go Events Sensor + +Then create a new template sensor using the configuration below. + +```yaml +- trigger: + - platform: mqtt + topic: "birdnet" + - platform: time + at: "00:00:00" + id: reset + sensor: + - unique_id: c893533c-3c06-4ebe-a5bb-da833da0a947 + name: BirdNET-Go Events + state: > + {% if trigger.id == 'reset' %} + {{ now() }} + {% else %} + {{ today_at(trigger.payload_json.Time) }} + {% endif %} + attributes: + bird_events: > + {% if trigger.id == 'reset' %} + {{ [] }} + {% else %} + {% set time = trigger.payload_json.Time %} + {% set name = trigger.payload_json.CommonName %} + {% set confidence = trigger.payload_json.Confidence|round(2) * 100 ~ '%' %} + {% set current = this.attributes.get('bird_events', []) %} + {% set new = dict(time=time, name=name, confidence=confidence) %} + {{ current + [new] }} + {% endif %} +``` + +### Birdnet-Go Dashboard Cards + +There are two versions listed below. One will link the Bird Name to Wikipedia the other one will link to All About Birds. You will need to modify the Confidence link to match your Home Assistant setup. + +![Birdnet-go Markdown Card Wikipedia](https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/birdnet-go/images/ha_birdnet_markdown_card_wikipedia.png) + +```yaml +type: markdown +title: Birdnet (Wikipedia) +content: >- + Time|  Bird Name|Number Today|    Max + [Confidence](http://192.168.1.25:8081/) + + :---|:---|:---:|:---: + + {%- set t = now() %} + + {%- set bird_list = state_attr('sensor.birdnet_go_events','bird_events') | + sort(attribute='time', reverse=true) | map(attribute='name') | unique | list + %} + + {%- set bird_objects = state_attr('sensor.birdnet_go_events','bird_events') | + sort(attribute='time', reverse=true) %} + + {%- for thisbird in bird_list or [] %} + + {%- set ubird = ((bird_objects | selectattr("name", "equalto", thisbird)) | + list)[0] %} + + {%- set ubird_count = ((bird_objects | selectattr("name", "equalto", + thisbird)) | list) | length %} + + {%- set ubird_max_confidence = ((bird_objects | selectattr("name", "equalto", + thisbird)) | map(attribute='confidence') | map('replace', '%', '') | + map('float') | max | round(0)) %} + + {%- if ubird_max_confidence > 70 %} + + {{ubird.time}} + |  [{{ubird.name}}](https://en.wikipedia.org/wiki/{{ubird.name | + replace(' ', '_')}}) | {{ubird_count}} | {{ ubird_max_confidence }} % + + {%- endif %} + + {%- endfor %} +card_mod: + style: + $: | + .card-header { + display: flex !important; + align-items: center; + } + .card-header:before { + content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23000' d='m23 11.5l-3.05-1.13c-.26-1.15-.91-1.81-.91-1.81a4.19 4.19 0 0 0-5.93 0l-1.48 1.48L5 3c-1 4 0 8 2.45 11.22L2 19.5s8.89 2 14.07-2.05c2.76-2.16 3.38-3.42 3.77-4.75zm-5.29.22c-.39.39-1.03.39-1.42 0a.996.996 0 0 1 0-1.41c.39-.39 1.03-.39 1.42 0s.39 1.02 0 1.41'/%3E%3C/svg%3E"); + height: 42px; + width: 42px; + margin-top: 0px; + padding-left: 0px; + padding-right: 14px; + } + @media (prefers-color-scheme: dark) { + .card-header:before { + content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23E1E1E1' d='m23 11.5l-3.05-1.13c-.26-1.15-.91-1.81-.91-1.81a4.19 4.19 0 0 0-5.93 0l-1.48 1.48L5 3c-1 4 0 8 2.45 11.22L2 19.5s8.89 2 14.07-2.05c2.76-2.16 3.38-3.42 3.77-4.75zm-5.29.22c-.39.39-1.03.39-1.42 0a.996.996 0 0 1 0-1.41c.39-.39 1.03-.39 1.42 0s.39 1.02 0 1.41'/%3E%3C/svg%3E"); + height: 42px; + width: 42px; + margin-top: 0px; + padding-left: 0px; + padding-right: 14px; + } + } +``` + +![Birdnet-go Markdown Card All About Birds](https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/birdnet-go/images/ha_birdnet_markdown_card_all_about_birds.png) + +```yaml +type: markdown +title: Birdnet (All About Birds) +content: >- + Time|  Bird Name|Number Today|    Max + [Confidence](http://ip_address_of_HA:8080/) + + :---|:---|:---:|:---: + + {%- set t = now() %} + + {%- set bird_list = state_attr('sensor.birdnet_go_events','bird_events') | + sort(attribute='time', reverse=true) | map(attribute='name') | unique | list + %} + + {%- set bird_objects = state_attr('sensor.birdnet_go_events','bird_events') | + sort(attribute='time', reverse=true) %} + + {%- for thisbird in bird_list or [] %} + + {%- set ubird = ((bird_objects | selectattr("name", "equalto", thisbird)) | + list)[0] %} + + {%- set ubird_count = ((bird_objects | selectattr("name", "equalto", + thisbird)) | list) | length %} + + {%- set ubird_max_confidence = ((bird_objects | selectattr("name", "equalto", + thisbird)) | map(attribute='confidence') | map('replace', '%', '') | + map('float') | max | round(0)) %} + + {%- if ubird_max_confidence > 70 %} + + {{ubird.time}} + |  [{{ubird.name}}](https://www.allaboutbirds.org/guide/{{ubird.name + | replace(' ', '_')}}) | {{ubird_count}} | {{ ubird_max_confidence }} % + + {%- endif %} + + {%- endfor %} +card_mod: + style: + $: | + .card-header { + display: flex !important; + align-items: center; + } + .card-header:before { + content: url("data:image/svg+xml;base64,PHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMDYuODcgMTE2LjY2Ij48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2Y0ZTUwNTt9LmNscy0ye2ZpbGw6I2UzMWUyNjt9LmNscy0ze2ZpbGw6I2ZmZjt9PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTIwNi4zNywxNi42OHMtMTYuNDQtNC4zNC0yMi43Ni00LjljMCwwLTI1LDEzLjUtMzIsMThhMTkuMTYsMTkuMTYsMCwwLDAtOC42NywxMy44OWwzNS43MS0yNi4zMmgyOEMyMDcuMzEsMTcuMzksMjA2LjM3LDE2LjY4LDIwNi4zNywxNi42OFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgMC42MykiLz48cGF0aCBkPSJNMTQ4LjU1LDI3LjMzYzcuMzItNC45LDMyLjYyLTE4LjczLDMyLjYyLTE4LjczbDAsMEEzMC42OSwzMC42OSwwLDAsMCwxNTktLjYzYTQ0LjIzLDQ0LjIzLDAsMCwwLTIwLjcxLDVIMGMwLDMuNzEsNS42LDYuNTYsMTIuMTQsNi41Nkg1Mi4zNkw4Ni42MiwzNS4xMlY3MS4zN2MwLDE1LjczLDguMjYsMjkuNDQsMjEuNzgsMzcuMzVTMTI4LjY4LDExNiwxMzguNjMsMTE2VjQ2Ljg3QzEzOC42Myw0MC43OCwxNDAuNDcsMzIuNzMsMTQ4LjU1LDI3LjMzWk0xNjcuODcsOGEyLjUxLDIuNTEsMCwxLDEtMi41MSwyLjUxQTIuNTEsMi41MSwwLDAsMSwxNjcuODcsOFptLTI5LjEzLDEzLDE1LjY5LTguNjgsNi44OS41N0wxMzguNzQsMjUuMzZaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDAuNjMpIi8+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNNTIuMzYsMTAuOTFIMTEwYy0xMi44OSwwLTIzLjQsMTAuMzUtMjMuNCwyNC4yMVoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgMC42MykiLz48cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik0xNzgsMTAuMzNBMzEuNzEsMzEuNzEsMCwwLDAsMTU3Ljc4LDIuOVYtLjYxbDEuMjUsMEEzMC42MywzMC42MywwLDAsMSwxODEuMTcsOC42WiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAwLjYzKSIvPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTE3OC42MywxNy4zOWwtMjUsMTguNDNzLS4yOS0yLjcsMy40Ny01Ljc0LDI2LjUtMTguMywyNi41LTE4LjNaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDAuNjMpIi8+PHBhdGggY2xhc3M9ImNscy0zIiBkPSJNMTI4LjE0LDY0LjQ3VjUyLjE1YzAtNS4xOC0yLjExLTguNzctNi45My0xMi4xOEwxMDAuNzksMjUuNTRhMTQuMzIsMTQuMzIsMCwwLDAsMiwyMVoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgMC42MykiLz48cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Ik0xMjguMTQsNjQuNDdWNTIuMTVjMC01LjE4LTIuMTEtOC43Ny02LjkzLTEyLjE4TDEwMC43OSwyNS41NGExNC4zMiwxNC4zMiwwLDAsMCwyLDIxWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAwLjYzKSIvPjxwYXRoIGNsYXNzPSJjbHMtMyIgZD0iTTE1MS41OSwyOS44MmM3LTQuNTQsMzItMTgsMzItMThhMTYuMjQsMTYuMjQsMCwwLDAtMi40MS0zLjE1bDAsMHMtMjUuMywxMy44My0zMi42MiwxOC43My05LjU3LDEyLjE3LTkuODcsMThsLS4wNSwxLjUxLDQuMjktMy4xNkExOS4xNiwxOS4xNiwwLDAsMSwxNTEuNTksMjkuODJaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDAuNjMpIi8+PHBhdGggY2xhc3M9ImNscy0zIiBkPSJNMTY3Ljg3LDhhMi41MSwyLjUxLDAsMSwxLTIuNTEsMi41MUEyLjUxLDIuNTEsMCwwLDEsMTY3Ljg3LDhaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDAuNjMpIi8+PHBvbHlnb24gY2xhc3M9ImNscy0zIiBwb2ludHM9IjEzOC43NCAyMS41NyAxNTQuNDMgMTIuODkgMTYxLjMyIDEzLjQ1IDEzOC43NCAyNS45OCAxMzguNzQgMjEuNTciLz48L3N2Zz4="); + height: 20px; + width: 60px; + margin-top: -10px; + padding-left: 8px; + padding-right: 18px; + } +``` + +## Setting up a RTSP Source using VLC + +VLC opens a TCP port but the stream is udp. Because of this will need to configure Birdnet-Go to use udp. Adjust the config.yaml file to udp or use the birdnet-go command line option: + +`--rtsptransport udp --rtsp rtsp://192.168.1.21:8080/stream.sdp` + +### Linux instructions + +Run vlc without an interface using one of these commands: + +```bash +# This should work for most devices +/usr/bin/vlc -I dummy -vvv alsa://hw:0,0 --no-sout-all --sout-keep --sout '#transcode{acodec=mpga}:rtp{sdp=rtsp://:8080/stream.sdp}' + +# Try this if the first command does not work +/usr/bin/vlc -I dummy -vvv alsa://hw:4,0 --no-sout-all --sout-keep --sout '#rtp{sdp=rtsp://:8080/stream.sdp}' +``` + +Run `arecord -l` to get microphone hardware info + +```text +**** List of CAPTURE Hardware Devices **** +card 0: PCH [HDA Intel PCH], device 0: ALC3220 Analog [ALC3220 Analog] + Subdevices: 1/1 + Subdevice #0: subdevice #0 +card 2: S7 [SteelSeries Arctis 7], device 0: USB Audio [USB Audio] + Subdevices: 1/1 + Subdevice #0: subdevice #0 +card 3: Nano [Yeti Nano], device 0: USB Audio [USB Audio] + Subdevices: 1/1 + Subdevice #0: subdevice #0 +card 4: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio] + Subdevices: 0/1 + Subdevice #0: subdevice #0 +``` + +hw:4,0 = **card 4**: Device [USB PnP Sound Device], **device 0**: USB Audio [USB Audio] + +Systemd service file example. Adjust the user:group accordingly. If you want to run as root, you will likely need to run vlc-wrapper instead of vlc. + +```text +[Unit] +Description=VLC Birdnet RTSP Server +Wants=network-online.target +After=network-online.target + +[Service] +Type=simple +StandardOutput=journal +ExecStart=/usr/bin/vlc -I dummy -vvv alsa://hw:0,0 --sout '#transcode{acodec=mpga}:rtp{sdp=rtsp://:8080/stream.sdp}' +User=someone +Group=somegroup + +[Install] +WantedBy=multi-user.target +``` + diff --git a/birdnet-go/images/ha_birdnet_mqtt_sensor.png b/birdnet-go/images/ha_birdnet_mqtt_sensor.png new file mode 100644 index 0000000000000000000000000000000000000000..9d60fd354e8e184a818b1b0bac6761e8f249d090 GIT binary patch literal 87729 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

tscC zer)m`Y#$~Qe>F}xK2Mz;s*H3}Z7lDeQGe$;gb;TRCVYks|2wOr9Dmd4I~Y>j&XiX% zz^kc>&AUD;q(#dgzI{f<%no4?m;dtxG^5q?Q7b=G9sW_m>(+89W8D0%mV0hafy0gg z@sX!StxLP7h7oZf9eGg7)wH`kL!)!XK^KdvM~1|B zPt3=hHN5staunE8hK0fFB2nICcp3bnoa-|j?Os!f_h7tov%XD4L)A)|^N+e@)43-caeSoR}+S+!yz3-mHjCd36 zPBHrRl=P&TSM2kRj0v2Eiv?r2Jg}oZDzE}N-LB-MUeH)a^W}!m zhs5_goRsir)fvN$*TDN*{PJev!}+%u@Q%Vf19?k%Dp}dtc@|ZHrmUQOI{L63pPpRJ zf0$#8n*S4X%*5&{5~9F7_;~Q&vj9hq6fDxD_lzTO;k5bvcq|`6Z7Gl?Av2xMyOA~_ zv@nK5MjP7IYPh@v#LVaA;PkfraYWo0SGyL?BMbEVZhQ|UMX$=YZm`-EA?e}oxo|0& zSY3zNLfTLRFpE|AbjC{lZIqd3!u!7)Ws|3B$w zx#wwz2-fuMj0qOn{n&QFk6y$-|1)_^TXYW@u;iSd8W}8bR9tx7QYA0#v-USOEbvQT z7;>x{DJs--i_`(pb(4Oe_H+lOF%KDe0fC{Aklk~J`AwYTlyp4^Fa!`Far-TJMEVDY zL4a|(<0n>lzU3j6L~N}>bho-U%T2oOgxDVA$MZr~3?vrBFGIh|#z2S?YqpZ6i$MvH zY-Su><#@a_d7u|bB=DRig$WI#=Ys^OYmxEDX?U$Gt%G0A7vyBrr-)?#xANfN78+@f zm;c(JfV+;TA3AA`Sot1&jV;ZIoqhE!E$!3n_qCKT4-tAiUbZ8T5uvhIJ7&i<8Dm*n zRy5XHX8ktZ?Cv)So2);{@~>0yt@5to;=9~DFtorOZ9~#3zhe5na$spQk_J64gZr8X zL%L5o9EMF3Y!ljUYhe8J;UY%m@C`hR>Kg_$;=>LV8DHy~Ev=bW4( zlt+lbyfuBPk?u#oxU8BGWwCoU@1GX)S)SaJ<3AUo;PXNhgI6g`Eb_~cXDJ?zgU*&6 z9B(#%t&ZHQ^wr6jlkXAtU_z5;1^E+x^hDU4BzPZ^8Bp0JHE&48%w)1NVcXvG^vra} zMfS@6b8&e;S6b}KO{>!mAIHi=#=J*6*v-xj0*?2L3DFL zqy)$sI3L0*_bWeE;_^_K1}G01H}a>3-jrU82ubz=$KObb;u&;T8LpP?O_s#%q&-UU!!WsR_hHD*VDTxQgVg#YpW^62aGQ z+O1`3efv3XrV?=Bl?T_3J58L$exPeVpR8ax9v;QW?7dr?=7QBTccuHB+tHm6iJY?H zf`3|`xBV&qSxTm+%JH`PQG|51F=W!HO6u%ccxyb!<#)uGe}E4*55+AIs~01BK)CO( z%OI`BV|+co&MIiW#`Vbe4Io1U^K=j8mjU1(GBRUa3d}-9{X_b#@`@$OHZrma#;mR` z0GaLGZ#R1JyQF4zL#?!dHp9n5)ethBF6y-M)im~Tr~B`1={?8W%JoWrOeHd!N8|HY zkF53Xhfa@}U%@<_b03^gck%Z_x31bhj|6#%A)+&4mGs>FM(F<$1V2+Eqk%)I-I#@c z<3vkM1Ay7O$XrMSjm1b0GmxTKL+Ln5a-Sb={yeJFlj-?;;r2jgdK5Tew&+ztiVe9W zvA1H(k}e5Rrti$X|D53LOkj-lQu2f-CvG(K`MQvdBm^=kaN@D2m9aHgYKdpOagB1S zJj=v0cJcV_o`LSvnmX0X9zM;43|5a4Xb4N<>ckkUCYa&>F1e_+G?<=1c72Wo9fcyR z#%Wlzr!JlmT;b$L1UZdM+8xL{O)Yl$Q;d96O_$^qjJk$Pc4|LA5jXKU0SU+fU2ke- zyjqKLtbEqOGbZo^D-hmjjyb6V1L|A4+wz19f~(nQa$zntF$WKU8Pd!v`Hf`>JDCe6 z&#HXK`y3`>X+~b?by4yPoJx;!oONh!La+YXDb8wZ$?!Foq7C(MQs_&>R||BZUVm~d=M0O8jFZXeT*~>~U*_fwV&Ww`H_S=k z?5CY+aJ^0~yu2U-HKTfdzyv0KQBjeor|dikG~Ve4M|u1&0kd#gXNg<#x0^nCnYv$3 zjEs9!tsy56)pv)3ca-Bj#{ zcV8J4SJ$nH6WlGhCTQa>2@qTZ!QF#3ZjA(oU?F(05G*7FcXxLZXxtrwYXd!p_nSNS z{H_|^0`4|!*eDK z=<{~|-x4RHF9gQNbttUPA5iyVBANEiQrCP7lRXU`qTm%Fwe5n_xG^SH#{O4PH#)9X33Tsi07{P<}Dd?=JO4^D@WpbP)gU+(T#5*5*9- z7BJJ2*UU!GJ=5Ei?#qq7G_~xE2aG9&jB{F#FZ~oL#yHm$MFY~%(75ym);&avv2`Q1 zHa9i2wR=>BmM((BIZvrgTH2#zW;`5~b=H0WS{De(rI_EEO4x&8y_tvlN#T7Jx67jo zmdSzN5RIdCmA84LHBNBQOA9kw{FQcD1taU?LldDk`OW}S#w9Xe)j0T+{AlnV0(ow^ z%~7bJD6NTde~I>Ohv7E!{Q)qd?yD9Xja6rchN-WYPyc4&kQ=zH@UhuixNI<7O7@u( zxL_>VWOic|m!&N2O;sPy*@IwS$Bn+@4RsR4=MB9}8$3 zXRG7hFZd5wZE2p4T2$fPlmxT{?2gF`Ew$%{w^oLTf!}|FT)%mwxbBU*C=BGc!R~0* zdBl&y_jMQ%cFM_3B-ri!~kAB(2z>t<4_iX_S zgX&ov8g-xa(8se?M}I3$%h#NbK`&Vv6xmjFfcI^CJf(%jTfG$(nb%=l?(|~^@kHPCR2|C0yX--p-Xx!GnW7ID#ycjq z%?j!&Bj+w4V%9|Pu^x^gxzKYzY_9%P7d%=gk`jQLR6Q%j(Xz3?yW4>4zj z`Nf-EzvYDTLb1zS|9GNnxQA8~H1+w}#k$|jondq=HXd)om@#WQP)Txo6qN-5Z-u#eTf$q1@mGu-A<+DvXxwIIgNaDO-u4i z2{I*T(ff~Q(ld@{8sftpE@1P39CTf?GqJC}_2r$AAf79AroCl%@(mpEgJnwL05z^0r#0>H&F}kTB_(i`#iJm< zUsk0?1u%z^z&+z+iIzD+p~0F+S>{5CMNOhYCb)$j1hi%%%46UvN0sFfg}S;^D35zh zFJ(&9qy}%4@!EtxcaakFh?krTxh{F*c(;IwDOAeLKNqdXE7m;mk%WB=Lk}40DRcmP zp6_O&{8Qegt7tZG7&_noSq>29`kj(;bH{-%_Hj0gW1poq>b21++Ks1Mf#O_8r8&w= z^B*CBS689d8R+15l9O>XM$RC^&t7HY)NrSzhCtS<*$3?<%@BtGJS+$Mk^xFK!}UJX zA7OZX|EtDZoV@ra>#Jd9 znaSZpYabeSt%>TKI|#cgFeq(Zj5#*EI$bc1Wp`t}uZjzTyHfwXql^4iSX$=F`xeH2 z1g#c5`SXXszcShB4d>re7@}WQ4O_(qcLUZ1p{#d?N<-M zPbvLFkrKj0ukDXt=3Qkl^?Gt;>Eb$xj7yJe)h2VAzFGYh{=1X|xaF}A!u3w`>5?Zq zbD0fV)@1{j4tHjmYUo_bXEYqDF5gJJ;W9cDSdI?6`+OyvN zh*=FHT{kfnHJ=4b^2AsbM^^FTHIG3{9>s)i;ghdC^(j0T(9;F#b`JR2Z)?^{IPwo+ zPUP%AShKq~J#%Mz=gViOE+~^UzJ`2ZMIzl!*1Dc}yFT9V^46YH^+9JFcSUW4v+!|^ z*UnSxYSy~JyCXa3*nCcdXq{@Csa%XR?Z7>LwVZ8ZENEW+>I8<~A$>JyL-X>d)sZsG z)pO7#D#86b=49~(>W#mm_N0h%^a6PAI%W)%Qs1rm&P5zRQlQmuAv}`V=nDrgVLxKF z+qx1r92eL7U_zuMynhoOy082CFxTZB$ysIZkOPCAh2!fAArpm+Y2KQS5O;n0 zVy|O*N&m5tp`AMiPAVz>MOHdyibwDG@d``Ya}_NS-9G83Gd3y6B&#hQaIhmGhsUO_ z<-KOtDgD~s9@Mo{vAMI8O9VA~j^?{!G~QMgaCk5;Q(d2Ym==N(Y1xXA-ae&mXxfNmvwM%m`7B2P37+3laI`Wt#9Q76gDI2Y0?W0Ask*rCzJZ zkQ)PO*?7^mR!+U(QsaU$;6J@WK)TNW3<=@I_DtRGKs-o zo>S@P8EE(7LL)P5#}ab}3M_??o%EH_nG@RSQlR~@v9c|#8Ty=Ng;Z7P;RP6iy~ou~*BK6<>K!GAc{9sO0K*=GkUR$3W}QSA#;G z-QO6f&(ny|_$GPLCo4W1BX-S$ZkP_1#4;#V6d-h$6z%IJsvF>TZ$SaF><(u+@a0`p z-YUv;es21TO##sdIF9#`eZsWJQri(}HR1}t@d7QI_HgqIJdV8mp)wFESLeCqeL z&V=v04y)<;uYB3bMyys7@}+WlR0otKxV?J@Y|YJpW!2Y$ghXA)_>aD6&xjm*`cyi~ z!W-F8lGX-344Z4N&Q67%d}Tu*I#-vW#Ql=RL*XZ}aepZ$(sUn^kO>%h$z^z;&X{@r zSr4otJl@OqaQ6TFiX)x}LaLLGFzXI+!6}y<>7y3H(Z+ggU!!K&){7z%^woS6I;=iNEdr^_z$Ffvta1!C`uh=jG;Kr~CJ9RbyMM zeF8TN|6Y@nF6S^M)>y!P+cD0iJ26A()GY8Lew$@mf#6Pjf!Kf3787})@hYpr`i)x6AufDMmvg6?Vn z&rxbNb3({rcPad}Sa7KkW_vB^3M1FD-d3^g{TIu0rn}F2PVPKWfbJffvQC{zcv&nE zeth{|KwckIRW(WI#Cx&)INQ|H@( zp-6kzz^Y7R&bZQFKl|z_sS4i^B_Pu7FdSS5KD})NkVNak-9V}3=jejnR;$^FBWotf zmG}@#tP&5AN(!?PSB-;`ULI>OZm5IO>}rq?32GzS_A3xFW7=c4M@#xw7i*mOIkY}U z^s`mIa?&XWTSO0qMQHnmcQHNWX$y;G|Vmn55 zgnoH(TDU?vL(*q%oY2(d4Ofxfxu!RGtr7{b;T#VS4~%((dfnYoCIOd!63^B=BW02) z!7Z*nmjscx)J+^R;T;|6=G}qW)G$vkOtANPhnrX{`jz`l$fM8a!=<_K+g^L|6kJSa z7mY^^&R(*6gg+*thGL2wZk2so1$3ZIkWGwcW_f;Y;CDlH4bN9tgP z&$@9dy2Di;go&mDtErT_q`1VL#$c3@|{l3;@(?COKssNsDCaW zVvZK2$zPNSyb~tfG;eRDI#w3~y!Ww!#Jm3}>s0!Al8jNF4K#NSnwmIt-Uo~~n1GTR z8}3?HHUPZyj0U?8dZG6T8b|ZR`zZfN{tdRH-{)WTN^AdQDVLh60d&bDLPei%%)) ziYb}z>SF^bg%bKJ0Kc$!>eohf4=6LW@wvS&3{TSxQo1`|yiu|F6Hu<2y5BSIMAieE z7r!Z3Uu-JGAEtjGhS|(v@jN zzo_|P2QJU)1&?D3%GusOS^zc@@RYWb)}g^c5nCl2g-gARQr)4a{%h|^mIN9n9+N}# z97koPb)W4!j3JtvjSVtpPh?UN4nMEWoZh}w%f)O+YG|c8xWY8z9CWX5tV)icb{@%N zjqB`aYl&}ye5@F+d<7QDmO5WsA?OC$L-tdN{Vvx(=12lRU(i%z0rTMghb5(tn2t{_ zWI0jz^OFNjw%v??^azK&1pX)?ER}{eNWNx@b}A(>N8HcaH|hYb63iV9+OX(`&gN*2 zHT@Fk2@)24;n(>viqck*why%1?W6LU{d6w!5=WLfNf!DwpYM(fmqSmBh1aeS9D+Xk z;aL`Y*JT|sdwq@j(4IJ<_*P3gVIemzMapS=Oz5D*Q9o@;L?WN|vFV5aR0t^vol|S?_;_da#T^@9c9b^GjG-T4tneRGa4@-m6r7n8{5+sdu^CB! z%|Y6%^6x1)jTc=1Aq7V>wesIna3sh6zkuccD|CArcuYxc|HJKzYpRCmh1!3F?+ezX zfu7}`>;J!D#eey$OpzI}{c9+d1jHr*5gh2 zuHgIkm#ucPK|xaJcr*n+f3mmkPVxO~9@#SaW-y7MtKF_3k5v}bk)k#OOnn2qNG=T_ z^14|cH3z<^;%v5S1pnMZsvksHNON!v`Wf5RV#Hw!iKep4KaG}?elayGE@f!_Y4n<` z07Ub-VAwFiHg{uPiW2x!ZYQeWp}qI=&{%U;t&Ic>7?2hLP3138clEFe2#`tL4m4WP z$4u{K@fuO2CMC&eY7z)7c}$~|*7bP%oIWz(>Q7g4>WBaAi`hAP_xpG^oR8oNyc9B- zt+H~+%k#euu+No6|Ca!JxEj_E;{eK&V-w*FKTw4VC1qAL24 zE%8iK=QJj(k{>@9q@;ots~#T%0c2ecAmLMpZhDBy&rsqT+Kgol0w4A{LEdMiN0Tp= z%OmUt{z5-6bt>A%!s7ArFvsoN^Q+@=%EZek6=!SHSGhuzs!gcJTXNkmf?Zcv2bw2>#a{Z8nMMf8~+qWwm|0FE=>8~@i&606jPr@{Oc)2_<$7jt0m_K@+UXElVP990_2U01esB2%RkyY6wMXu|kML@6)&cz#$l2#B$ zn*(r`VKJ3K42st|-Q@KKyA2Ql&ejsKs+>P0#PirA^ zZwA2!C)9At8Nx4zvK$%N#&*3QNp?^;Cha_!%m9#F{A_?x90-jO&Q^OGpI-jajh4&b zs2dy~w*|hqk!nnX<~wY}Vfu-w##W^&t*^m`K2>){6D}bIfpu1mgx0g=?#khD)u(YP zip}oC7jTp~m6?8g@RWMzoxEzW(%tpNfbA?|D767#AMY;h_rBY(S)ynE6J(k&z1!uj zi;-j8nvQ;-9MBu!+=0YxOIodfAH;q{jn}tlk2!HRrE$Rvp#VT{;)~Ma$7Q9(18FPJ z^*Ssy;NI&vlt&7$ZdTJvp5hX8QBlzp98r!vambao>5P|6ywT=OLHdD%a!cw$>%0WH z6jDJr3$M-y&OA8LvHAM|Fb@11$c2x874K?)8v1Nl;?E!*3`111Mb`H%^@oP?5fog- z6WZr0zBStE^4*$9J?FR(f2TZm_6}v)Kw)%98k_Dq9^ECVjdI1f{_VQGO^1F0Oc0s- zd$gth`=^k| z3$XX9R`BwB$$nmO5SzWnpwHJ=DmJPl>Ey#U{1O&O+4s?2X@}c) zso1mf>Y$eYp^u69`&XNfAHqepeoNFO-|%rMwHYXDwWl<8*Auxb14ftF2205go)mwn zU3OL=dZ}X0c=;n(kR``QYSYW?bTx6v$qXx`>s-?VBW;5PiF|Cx z)@Cg(a1CBIEd_7ABElJ^Z%PPzZ#p}$oU{Sz-JTppG1)DeRUv%8GHia5_! z@}*{^8lfwlVnZo3aZOL5%$ZHG`UEW zM`*QzA>A!kxh#|L`p~~j6Oi;-KkQOnL;9Z|2zQKd+woNbX23O5S6@fubCWqWSV=yLEh#=7MRqbl7Q zbOEJgIyb%dM=Svhw}9g#1%NY00sGj_g`a-Ku5CLGg1>;jLF))sVH*5X~T9jBb z#v0+vk4r4|FU!E0BxAIU03;ZH2SBW$mUR?td{qiga0;x(+^eZIDw8J(2FxCiU>E}u zjFe!T#Te|4f@@t9HWT4cK!PDr8+-c>CCEg%lLUdKa@6?;GQru-PIo0>$|iqJ8uTku zHia7I_$&^xtb~@%!mTEV91oQl zE_%(7II1zMD!W<5Q@*vS!ZA;9qsWmoS-J6J}{j7(p zE{|7-lw6;svM!GzzK`5T47UWLZQ1iaXt6gq@8U!yhYVb#-AEVXS3$sxZ^|t zZMZy6TtG4TjaF1q^TB&szngn*!>yZ@{-Nw39OP_C9VrKkP0sFfMv!NFx!L6vQ*;5z zLa`j>V4oxV9I`86D7X08V~A0Jz??0*Le7f>ZkRfc8MJa6i3rCvCrsqc5~wCyU_uCi z&xS`R#+_y;Q#b|T!00S;7%+((w*S1V+MeOb%0!`XRdsNR*#i0z%*a5C6kuEvZuFZ} ztZ^U99i#rRkgVVC)+{+6%))AD6lLu&t3d43=t?kq@dlc_mw8UhLqW;KKNtH7;69fr$p@P1i5P+Iw|^;w%%66*Vc zN4Y6{Y|Uz}WjK14q0(%|YK~~+K%l0dy{pPxX7}osDS;bWlQ*x+f<-2VI|d5j+|(eJ zmqz-)n;Fcr5bR)0FJTN}N%xzhJ030+?u)G!B29K3=LFdF*;8O*%K#@S*f>$uiB42& zdu{c-p_(HpmT!H^TKdUruJ=VhU|$C_URMO#bEUG*>kg(}6Xh7oT~d2-=+3)nFDgAw z9QACrwT6{iYlG@72de-xNlt6NE{}V^kC?`*2RUiJ>8&7~)f+j1@M@d}-URFG@;v)V z*j!1}0L+|lnSuf0D`71{KR+fy_9e{3ZX>xnuDI$`ixE~G^Olbhu3w$=qzrhR(UM*n zAmJ$30ayw5x2G(!0)L;SHT*50!=*9_=*g3b}YSw;)gv|*|Q&~Fnj&0aHK;lOxNXi!Irp8gvH#!(6Q05B9e_V z_F|Vn8r1s6)5R2Z4;X0|nfB}mF8~R8{Z`tOp&4p7djSqkVlyRD^&H~~PI)S717@+R z38>LayLrB|lJkMuJsm|a-UlL+1AOX9w660-e$T_ajUDGhaHNRnplTX%(#c&d{|n_4 z@LYG>PAhQ>#pp+U9>~+6hTcXasT_dZP~= z`r6A<6bPq^S-DEVMQih;@6Y{<)z=mk7fs?lA*f}kn~e)b`byonLPh1+<6K1C6`=C` zzc~zt?i>>fsypNUH{LyfH&dsQe?pUsk!Sj=QF{ZHy&UWR9X9oEfFCVXZazHkF9?r| z!Lc-jd}GZz7kcYzs=R+0v7d2Y%-hne1$RIHF*~j8k8r($^45FOM(lgQ_tdKPnj|q! z#ltO56dEuSzjeMmfO$&hxUu3n=5hTZi~5J&EQlXEY1?G1t9-70$R7mcdR%1IFpgEX zv(C!{RgXOtN#}7wdDK?g$KfH2MWS3uPKGpH+z!AeZ5QgCWb-wFxna79JBwQJc@{+& zmmv@={8TNebw$6Q>z*{{-q}eA#;nuce9x@S*he=YP6cQ!(mGtIG1bvj3Z7`6qOHZP zf(JuWOMpJy9hhnuDF=W`fGHy4wm zX2U=Cdb%AdfJad{_(W+uF->ho=tyIXi_jMUFYA9UBR{|d{=Z{a1h+4Tp~U~G!_xnA cX7LFed5OlusxeC@9s#%%->Au!Nt=cIH^yk);{X5v literal 0 HcmV?d00001 From 707138778a5ae3743c92d6289ae9a01bf0e29d24 Mon Sep 17 00:00:00 2001 From: thor0215 Date: Fri, 28 Jun 2024 09:18:52 -0500 Subject: [PATCH 02/16] MQTT Sensors --- birdnet-go/HAINTEGRATION.md | 69 +------------ birdnet-go/README.md | 187 +----------------------------------- 2 files changed, 6 insertions(+), 250 deletions(-) diff --git a/birdnet-go/HAINTEGRATION.md b/birdnet-go/HAINTEGRATION.md index e47b73afe..32a1ed6b7 100644 --- a/birdnet-go/HAINTEGRATION.md +++ b/birdnet-go/HAINTEGRATION.md @@ -1,4 +1,4 @@ -# Home Assistant Integration +# Birdnet-Go Addon: Home Assistant Integration Birdnet-Go can be integrated with Home Assistant using a MQTT Broker. @@ -26,8 +26,7 @@ Edit this section of config.yaml found in addon_configs/db21ed7f_birdnet-go/: ``` ## Birdnet-Go MQTT Sensors - -![Birdnet-go MQTT](https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/birdnet-go/images/ha_birdnet_markdown_card_wikipedia.png) +![Birdnet-go MQTT](./images/ha_birdnet_mqtt_sensor.png) Add the [MQTT sensor](https://www.home-assistant.io/integrations/sensor.mqtt/) yaml configuration below to your Home Assistant configuration.yaml @@ -115,9 +114,9 @@ Then create a new template sensor using the configuration below. ### Birdnet-Go Dashboard Cards -There are two versions listed below. One will link the Bird Name to Wikipedia the other one will link to All About Birds. You will need to modify the Confidence link to match your Home Assistant setup. +There are two versions listed below. The first example will link the Bird Name to Wikipedia. The other example will link to All About Birds. You will need to modify the Confidence link to match your Home Assistant setup. -![Birdnet-go Markdown Card Wikipedia](https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/birdnet-go/images/ha_birdnet_markdown_card_wikipedia.png) +![Birdnet-go Markdown Card Wikipedia](./images/ha_birdnet_markdown_card_wikipedia.png) ```yaml type: markdown @@ -185,7 +184,7 @@ card_mod: } ``` -![Birdnet-go Markdown Card All About Birds](https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/birdnet-go/images/ha_birdnet_markdown_card_all_about_birds.png) +![Birdnet-go Markdown Card All About Birds](./images/ha_birdnet_markdown_card_all_about_birds.png) ```yaml type: markdown @@ -242,61 +241,3 @@ card_mod: padding-right: 18px; } ``` - -## Setting up a RTSP Source using VLC - -VLC opens a TCP port but the stream is udp. Because of this will need to configure Birdnet-Go to use udp. Adjust the config.yaml file to udp or use the birdnet-go command line option: - -`--rtsptransport udp --rtsp rtsp://192.168.1.21:8080/stream.sdp` - -### Linux instructions - -Run vlc without an interface using one of these commands: - -```bash -# This should work for most devices -/usr/bin/vlc -I dummy -vvv alsa://hw:0,0 --no-sout-all --sout-keep --sout '#transcode{acodec=mpga}:rtp{sdp=rtsp://:8080/stream.sdp}' - -# Try this if the first command does not work -/usr/bin/vlc -I dummy -vvv alsa://hw:4,0 --no-sout-all --sout-keep --sout '#rtp{sdp=rtsp://:8080/stream.sdp}' -``` - -Run `arecord -l` to get microphone hardware info - -```text -**** List of CAPTURE Hardware Devices **** -card 0: PCH [HDA Intel PCH], device 0: ALC3220 Analog [ALC3220 Analog] - Subdevices: 1/1 - Subdevice #0: subdevice #0 -card 2: S7 [SteelSeries Arctis 7], device 0: USB Audio [USB Audio] - Subdevices: 1/1 - Subdevice #0: subdevice #0 -card 3: Nano [Yeti Nano], device 0: USB Audio [USB Audio] - Subdevices: 1/1 - Subdevice #0: subdevice #0 -card 4: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio] - Subdevices: 0/1 - Subdevice #0: subdevice #0 -``` - -hw:4,0 = **card 4**: Device [USB PnP Sound Device], **device 0**: USB Audio [USB Audio] - -Systemd service file example. Adjust the user:group accordingly. If you want to run as root, you will likely need to run vlc-wrapper instead of vlc. - -```text -[Unit] -Description=VLC Birdnet RTSP Server -Wants=network-online.target -After=network-online.target - -[Service] -Type=simple -StandardOutput=journal -ExecStart=/usr/bin/vlc -I dummy -vvv alsa://hw:0,0 --sout '#transcode{acodec=mpga}:rtp{sdp=rtsp://:8080/stream.sdp}' -User=someone -Group=somegroup - -[Install] -WantedBy=multi-user.target -``` - diff --git a/birdnet-go/README.md b/birdnet-go/README.md index b0d4ab31d..e7425acd3 100644 --- a/birdnet-go/README.md +++ b/birdnet-go/README.md @@ -67,192 +67,7 @@ The installation of this add-on is pretty straightforward and not different in c ## Integration with HA[^1] -Birdnet-Go can be integrated with Home Assistant using a MQTT Broker. - -### Birdnet-Go Events Sensor - -Your Home Assistant must be setup with MQTT and Birdnet-Go MQTT integration must be enabled. Modify the Birdnet-Go config.yaml file to enable MQTT. If you are using the Mosquitto Broker addon, you will see a log message during the Birdnet-Go startup showing the internal MQTT server details needed for configuration similar to below. - -```text -Birdnet-Go log snipped showing MQTT details: -/etc/cont-init.d/33-mqtt.sh: executing ---- -MQTT addon is active on your system! Add the MQTT details below to the Birdnet-go config.yaml : -MQTT user : addons -MQTT password : Ri5ahV1aipeiw0aelerooteixai5ohtoeNg6oo3mo0thi5te0phiezuge4Phoore -MQTT broker : tcp://core-mosquitto:1883 ---- - -Edit this section of config.yaml found in addon_configs/db21ed7f_birdnet-go/: - mqtt: - enabled: true # true to enable MQTT - broker: tcp://core-mosquitto:1883 # MQTT (tcp://host:port) - topic: birdnet # MQTT topic - username: addons # MQTT username - password: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # MQTT password -``` - -Then create a new template sensor using the configuration below. - -```yaml -- trigger: - - platform: mqtt - topic: "birdnet" - - platform: time - at: "00:00:00" - id: reset - sensor: - - unique_id: c893533c-3c06-4ebe-a5bb-da833da0a947 - name: BirdNET-Go Events - state: > - {% if trigger.id == 'reset' %} - {{ now() }} - {% else %} - {{ today_at(trigger.payload_json.Time) }} - {% endif %} - attributes: - bird_events: > - {% if trigger.id == 'reset' %} - {{ [] }} - {% else %} - {% set time = trigger.payload_json.Time %} - {% set name = trigger.payload_json.CommonName %} - {% set confidence = trigger.payload_json.Confidence|round(2) * 100 ~ '%' %} - {% set current = this.attributes.get('bird_events', []) %} - {% set new = dict(time=time, name=name, confidence=confidence) %} - {{ current + [new] }} - {% endif %} -``` - -### Birdnet-Go Dashboard Cards - -There are two versions listed below. One will link the Bird Name to Wikipedia the other one will link to All About Birds. You will need to modify the Confidence link to match your Home Assistant setup. - -![Birdnet-go Markdown Card Wikipedia](https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/birdnet-go/images/ha_birdnet_markdown_card_wikipedia.png) - -```yaml -type: markdown -title: Birdnet (Wikipedia) -content: >- - Time|  Bird Name|Number Today|    Max - [Confidence](http://192.168.1.25:8081/) - - :---|:---|:---:|:---: - - {%- set t = now() %} - - {%- set bird_list = state_attr('sensor.birdnet_go_events','bird_events') | - sort(attribute='time', reverse=true) | map(attribute='name') | unique | list - %} - - {%- set bird_objects = state_attr('sensor.birdnet_go_events','bird_events') | - sort(attribute='time', reverse=true) %} - - {%- for thisbird in bird_list or [] %} - - {%- set ubird = ((bird_objects | selectattr("name", "equalto", thisbird)) | - list)[0] %} - - {%- set ubird_count = ((bird_objects | selectattr("name", "equalto", - thisbird)) | list) | length %} - - {%- set ubird_max_confidence = ((bird_objects | selectattr("name", "equalto", - thisbird)) | map(attribute='confidence') | map('replace', '%', '') | - map('float') | max | round(0)) %} - - {%- if ubird_max_confidence > 70 %} - - {{ubird.time}} - |  [{{ubird.name}}](https://en.wikipedia.org/wiki/{{ubird.name | - replace(' ', '_')}}) | {{ubird_count}} | {{ ubird_max_confidence }} % - - {%- endif %} - - {%- endfor %} -card_mod: - style: - $: | - .card-header { - display: flex !important; - align-items: center; - } - .card-header:before { - content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23000' d='m23 11.5l-3.05-1.13c-.26-1.15-.91-1.81-.91-1.81a4.19 4.19 0 0 0-5.93 0l-1.48 1.48L5 3c-1 4 0 8 2.45 11.22L2 19.5s8.89 2 14.07-2.05c2.76-2.16 3.38-3.42 3.77-4.75zm-5.29.22c-.39.39-1.03.39-1.42 0a.996.996 0 0 1 0-1.41c.39-.39 1.03-.39 1.42 0s.39 1.02 0 1.41'/%3E%3C/svg%3E"); - height: 42px; - width: 42px; - margin-top: 0px; - padding-left: 0px; - padding-right: 14px; - } - @media (prefers-color-scheme: dark) { - .card-header:before { - content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23E1E1E1' d='m23 11.5l-3.05-1.13c-.26-1.15-.91-1.81-.91-1.81a4.19 4.19 0 0 0-5.93 0l-1.48 1.48L5 3c-1 4 0 8 2.45 11.22L2 19.5s8.89 2 14.07-2.05c2.76-2.16 3.38-3.42 3.77-4.75zm-5.29.22c-.39.39-1.03.39-1.42 0a.996.996 0 0 1 0-1.41c.39-.39 1.03-.39 1.42 0s.39 1.02 0 1.41'/%3E%3C/svg%3E"); - height: 42px; - width: 42px; - margin-top: 0px; - padding-left: 0px; - padding-right: 14px; - } - } -``` - -![Birdnet-go Markdown Card All About Birds](https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/birdnet-go/images/ha_birdnet_markdown_card_all_about_birds.png) - -```yaml -type: markdown -title: Birdnet (All About Birds) -content: >- - Time|  Bird Name|Number Today|    Max - [Confidence](http://ip_address_of_HA:8080/) - - :---|:---|:---:|:---: - - {%- set t = now() %} - - {%- set bird_list = state_attr('sensor.birdnet_go_events','bird_events') | - sort(attribute='time', reverse=true) | map(attribute='name') | unique | list - %} - - {%- set bird_objects = state_attr('sensor.birdnet_go_events','bird_events') | - sort(attribute='time', reverse=true) %} - - {%- for thisbird in bird_list or [] %} - - {%- set ubird = ((bird_objects | selectattr("name", "equalto", thisbird)) | - list)[0] %} - - {%- set ubird_count = ((bird_objects | selectattr("name", "equalto", - thisbird)) | list) | length %} - - {%- set ubird_max_confidence = ((bird_objects | selectattr("name", "equalto", - thisbird)) | map(attribute='confidence') | map('replace', '%', '') | - map('float') | max | round(0)) %} - - {%- if ubird_max_confidence > 70 %} - - {{ubird.time}} - |  [{{ubird.name}}](https://www.allaboutbirds.org/guide/{{ubird.name - | replace(' ', '_')}}) | {{ubird_count}} | {{ ubird_max_confidence }} % - - {%- endif %} - - {%- endfor %} -card_mod: - style: - $: | - .card-header { - display: flex !important; - align-items: center; - } - .card-header:before { - content: url("data:image/svg+xml;base64,PHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMDYuODcgMTE2LjY2Ij48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2Y0ZTUwNTt9LmNscy0ye2ZpbGw6I2UzMWUyNjt9LmNscy0ze2ZpbGw6I2ZmZjt9PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTIwNi4zNywxNi42OHMtMTYuNDQtNC4zNC0yMi43Ni00LjljMCwwLTI1LDEzLjUtMzIsMThhMTkuMTYsMTkuMTYsMCwwLDAtOC42NywxMy44OWwzNS43MS0yNi4zMmgyOEMyMDcuMzEsMTcuMzksMjA2LjM3LDE2LjY4LDIwNi4zNywxNi42OFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgMC42MykiLz48cGF0aCBkPSJNMTQ4LjU1LDI3LjMzYzcuMzItNC45LDMyLjYyLTE4LjczLDMyLjYyLTE4LjczbDAsMEEzMC42OSwzMC42OSwwLDAsMCwxNTktLjYzYTQ0LjIzLDQ0LjIzLDAsMCwwLTIwLjcxLDVIMGMwLDMuNzEsNS42LDYuNTYsMTIuMTQsNi41Nkg1Mi4zNkw4Ni42MiwzNS4xMlY3MS4zN2MwLDE1LjczLDguMjYsMjkuNDQsMjEuNzgsMzcuMzVTMTI4LjY4LDExNiwxMzguNjMsMTE2VjQ2Ljg3QzEzOC42Myw0MC43OCwxNDAuNDcsMzIuNzMsMTQ4LjU1LDI3LjMzWk0xNjcuODcsOGEyLjUxLDIuNTEsMCwxLDEtMi41MSwyLjUxQTIuNTEsMi41MSwwLDAsMSwxNjcuODcsOFptLTI5LjEzLDEzLDE1LjY5LTguNjgsNi44OS41N0wxMzguNzQsMjUuMzZaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDAuNjMpIi8+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNNTIuMzYsMTAuOTFIMTEwYy0xMi44OSwwLTIzLjQsMTAuMzUtMjMuNCwyNC4yMVoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgMC42MykiLz48cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik0xNzgsMTAuMzNBMzEuNzEsMzEuNzEsMCwwLDAsMTU3Ljc4LDIuOVYtLjYxbDEuMjUsMEEzMC42MywzMC42MywwLDAsMSwxODEuMTcsOC42WiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAwLjYzKSIvPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTE3OC42MywxNy4zOWwtMjUsMTguNDNzLS4yOS0yLjcsMy40Ny01Ljc0LDI2LjUtMTguMywyNi41LTE4LjNaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDAuNjMpIi8+PHBhdGggY2xhc3M9ImNscy0zIiBkPSJNMTI4LjE0LDY0LjQ3VjUyLjE1YzAtNS4xOC0yLjExLTguNzctNi45My0xMi4xOEwxMDAuNzksMjUuNTRhMTQuMzIsMTQuMzIsMCwwLDAsMiwyMVoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgMC42MykiLz48cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Ik0xMjguMTQsNjQuNDdWNTIuMTVjMC01LjE4LTIuMTEtOC43Ny02LjkzLTEyLjE4TDEwMC43OSwyNS41NGExNC4zMiwxNC4zMiwwLDAsMCwyLDIxWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAwLjYzKSIvPjxwYXRoIGNsYXNzPSJjbHMtMyIgZD0iTTE1MS41OSwyOS44MmM3LTQuNTQsMzItMTgsMzItMThhMTYuMjQsMTYuMjQsMCwwLDAtMi40MS0zLjE1bDAsMHMtMjUuMywxMy44My0zMi42MiwxOC43My05LjU3LDEyLjE3LTkuODcsMThsLS4wNSwxLjUxLDQuMjktMy4xNkExOS4xNiwxOS4xNiwwLDAsMSwxNTEuNTksMjkuODJaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDAuNjMpIi8+PHBhdGggY2xhc3M9ImNscy0zIiBkPSJNMTY3Ljg3LDhhMi41MSwyLjUxLDAsMSwxLTIuNTEsMi41MUEyLjUxLDIuNTEsMCwwLDEsMTY3Ljg3LDhaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDAuNjMpIi8+PHBvbHlnb24gY2xhc3M9ImNscy0zIiBwb2ludHM9IjEzOC43NCAyMS41NyAxNTQuNDMgMTIuODkgMTYxLjMyIDEzLjQ1IDEzOC43NCAyNS45OCAxMzguNzQgMjEuNTciLz48L3N2Zz4="); - height: 20px; - width: 60px; - margin-top: -10px; - padding-left: 8px; - padding-right: 18px; - } -``` +Home Assistant Integration instructions are found here, [Birdnet-Go Addon: Home Assistant Integration](./HAINTEGRATION.md) ## Setting up a RTSP Source using VLC From 0e9fef0d99d49b45e60b53bee265ed7d5fca0210 Mon Sep 17 00:00:00 2001 From: thor0215 Date: Fri, 28 Jun 2024 09:42:16 -0500 Subject: [PATCH 03/16] MQTT Sensor --- birdnet-go/HAINTEGRATION.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/birdnet-go/HAINTEGRATION.md b/birdnet-go/HAINTEGRATION.md index 32a1ed6b7..c39da5088 100644 --- a/birdnet-go/HAINTEGRATION.md +++ b/birdnet-go/HAINTEGRATION.md @@ -26,9 +26,7 @@ Edit this section of config.yaml found in addon_configs/db21ed7f_birdnet-go/: ``` ## Birdnet-Go MQTT Sensors -![Birdnet-go MQTT](./images/ha_birdnet_mqtt_sensor.png) - -Add the [MQTT sensor](https://www.home-assistant.io/integrations/sensor.mqtt/) yaml configuration below to your Home Assistant configuration.yaml +Add the [MQTT sensor](https://www.home-assistant.io/integrations/sensor.mqtt/) yaml configuration below to your Home Assistant configuration.yaml file. Reload the configuration and once Birdnet-Go publishes a new finding to MQTT the new Birdnet-Go sensors should show that latest finding data. ```yaml mqtt: @@ -77,6 +75,8 @@ mqtt: state_topic: "birdnet" value_template: "{{ today_at(value_json.Time) }}" ``` +![Birdnet-go MQTT](./images/ha_birdnet_mqtt_sensor.png) + ## Birdnet-Go Events Sensor From e127c49eb738885b0fdf66c4c3da6b0070b12b8a Mon Sep 17 00:00:00 2001 From: thor0215 Date: Fri, 28 Jun 2024 09:50:52 -0500 Subject: [PATCH 04/16] MQTT Sensor --- birdnet-go/HAINTEGRATION.md | 6 +++++- birdnet-go/README.md | 5 +---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/birdnet-go/HAINTEGRATION.md b/birdnet-go/HAINTEGRATION.md index c39da5088..712514ef1 100644 --- a/birdnet-go/HAINTEGRATION.md +++ b/birdnet-go/HAINTEGRATION.md @@ -78,7 +78,7 @@ mqtt: ![Birdnet-go MQTT](./images/ha_birdnet_mqtt_sensor.png) -## Birdnet-Go Events Sensor +## Birdnet-Go Events Sensor[^1] Then create a new template sensor using the configuration below. @@ -241,3 +241,7 @@ card_mod: padding-right: 18px; } ``` + +## Footnotes + +[^1]: [Displaying Birdnet-go detections](https://community.home-assistant.io/t/displaying-birdnet-go-detections/713611/22) diff --git a/birdnet-go/README.md b/birdnet-go/README.md index e7425acd3..f173fc73e 100644 --- a/birdnet-go/README.md +++ b/birdnet-go/README.md @@ -65,7 +65,7 @@ The installation of this add-on is pretty straightforward and not different in c 1. Check the logs of the add-on to see if everything went well. 1. Open the webUI and adapt the software options -## Integration with HA[^1] +## Integration with HA Home Assistant Integration instructions are found here, [Birdnet-Go Addon: Home Assistant Integration](./HAINTEGRATION.md) @@ -138,6 +138,3 @@ Create an issue on github ![illustration](https://raw.githubusercontent.com/tphakala/birdnet-go/main/doc/BirdNET-Go-dashboard.webp) -## Footnotes - -[^1]: [Displaying Birdnet-go detections](https://community.home-assistant.io/t/displaying-birdnet-go-detections/713611/22) From 9362595a17da1434f05d5b8115309257698228b8 Mon Sep 17 00:00:00 2001 From: thor0215 Date: Fri, 28 Jun 2024 09:51:51 -0500 Subject: [PATCH 05/16] MQTT Sensor --- birdnet-go/HAINTEGRATION.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/birdnet-go/HAINTEGRATION.md b/birdnet-go/HAINTEGRATION.md index 712514ef1..fae229f1b 100644 --- a/birdnet-go/HAINTEGRATION.md +++ b/birdnet-go/HAINTEGRATION.md @@ -1,4 +1,4 @@ -# Birdnet-Go Addon: Home Assistant Integration +# Birdnet-Go Addon: Home Assistant Integration[^1] Birdnet-Go can be integrated with Home Assistant using a MQTT Broker. From 4def56e5cda702477fde0404fc80832be2812421 Mon Sep 17 00:00:00 2001 From: thor0215 Date: Fri, 28 Jun 2024 09:52:36 -0500 Subject: [PATCH 06/16] MQTT Sensor --- birdnet-go/HAINTEGRATION.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/birdnet-go/HAINTEGRATION.md b/birdnet-go/HAINTEGRATION.md index fae229f1b..712514ef1 100644 --- a/birdnet-go/HAINTEGRATION.md +++ b/birdnet-go/HAINTEGRATION.md @@ -1,4 +1,4 @@ -# Birdnet-Go Addon: Home Assistant Integration[^1] +# Birdnet-Go Addon: Home Assistant Integration Birdnet-Go can be integrated with Home Assistant using a MQTT Broker. From 1a16faefa1ffcc191a4d87b908626d4b9041f239 Mon Sep 17 00:00:00 2001 From: thor0215 Date: Fri, 28 Jun 2024 09:59:23 -0500 Subject: [PATCH 07/16] MQTT Sensor --- birdnet-go/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/birdnet-go/README.md b/birdnet-go/README.md index f173fc73e..3519d0a27 100644 --- a/birdnet-go/README.md +++ b/birdnet-go/README.md @@ -57,6 +57,7 @@ Additional environment variables can be configured there The installation of this add-on is pretty straightforward and not different in comparison to installing any other add-on. 1. Add my add-ons repository to your home assistant instance (in supervisor addons store at top right, or click button below if you have configured my HA) + [![Open your Home Assistant instance and show the add add-on repository dialog with a specific repository URL pre-filled.](https://my.home-assistant.io/badges/supervisor_add_addon_repository.svg)](https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2Falexbelgium%2Fhassio-addons) 1. Install this add-on. 1. Click the `Save` button to store your configuration. From fb9906536a6e8b643ebdb7637c5b1697c4f4520e Mon Sep 17 00:00:00 2001 From: thor0215 Date: Fri, 28 Jun 2024 11:05:06 -0500 Subject: [PATCH 08/16] MQTT Sensor --- birdnet-go/README.md | 2 +- birdnet-go/rootfs/etc/cont-init.d/99-run.sh | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/birdnet-go/README.md b/birdnet-go/README.md index 3519d0a27..f7365af90 100644 --- a/birdnet-go/README.md +++ b/birdnet-go/README.md @@ -1,5 +1,5 @@ ## ⚠ Open Request : [✨ [REQUEST] Birdnet-Go (opened 2024-05-07)](https://github.com/alexbelgium/hassio-addons/issues/1385) by [@matthew73210](https://github.com/matthew73210) -## ⚠ Open Issue : [🐛 [Birdnet-go] Queue is full! (opened 2024-06-24)](https://github.com/alexbelgium/hassio-addons/issues/1449) by [@thor0215](https://github.com/thor0215) + # Home assistant add-on: Birdnet-Go [![Donate][donation-badge]](https://www.buymeacoffee.com/alexbelgium) diff --git a/birdnet-go/rootfs/etc/cont-init.d/99-run.sh b/birdnet-go/rootfs/etc/cont-init.d/99-run.sh index 3a6b6d248..5f39750d6 100755 --- a/birdnet-go/rootfs/etc/cont-init.d/99-run.sh +++ b/birdnet-go/rootfs/etc/cont-init.d/99-run.sh @@ -16,6 +16,10 @@ echo " " bashio::log.info "Starting app..." COMMAND="$(bashio::config "COMMAND")" # shellcheck disable=SC2086 +mkdir -p /root/.config/birdnet-go +cd /root/.config/birdnet-go +pwd + /usr/bin/birdnet-go $COMMAND & true # Wait for app to become available to start nginx From 5cc7987778c4804e94a6792fbd5b55a3251fe8ab Mon Sep 17 00:00:00 2001 From: thor0215 Date: Fri, 28 Jun 2024 11:08:27 -0500 Subject: [PATCH 09/16] thor0215 repo --- repository.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/repository.json b/repository.json index bc38043c6..ab64f38c9 100644 --- a/repository.json +++ b/repository.json @@ -1,6 +1,6 @@ { - "name": "HA Add-ons by alexbelgium", + "name": "HA Add-ons by thor0215", "udev": true, - "url": "https://github.com/alexbelgium/hassio-addons", - "maintainer": "alexbelgium" + "url": "https://github.com/thor0215/hassio-addons", + "maintainer": "thor0215" } From 33a99b554ad5f82a0a9912533c63253e8ff19dac Mon Sep 17 00:00:00 2001 From: thor0215 Date: Fri, 28 Jun 2024 11:45:32 -0500 Subject: [PATCH 10/16] Working Directory change --- birdnet-go/rootfs/etc/cont-init.d/99-run.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/birdnet-go/rootfs/etc/cont-init.d/99-run.sh b/birdnet-go/rootfs/etc/cont-init.d/99-run.sh index 5f39750d6..a41f3a70b 100755 --- a/birdnet-go/rootfs/etc/cont-init.d/99-run.sh +++ b/birdnet-go/rootfs/etc/cont-init.d/99-run.sh @@ -18,8 +18,6 @@ COMMAND="$(bashio::config "COMMAND")" # shellcheck disable=SC2086 mkdir -p /root/.config/birdnet-go cd /root/.config/birdnet-go -pwd - /usr/bin/birdnet-go $COMMAND & true # Wait for app to become available to start nginx From c68064f692d7b70e8c094853ada2af0a5fe7d319 Mon Sep 17 00:00:00 2001 From: thor0215 Date: Tue, 2 Jul 2024 07:59:24 -0500 Subject: [PATCH 11/16] master --- birdnet-go/HAINTEGRATION.md | 2 +- birdnet-go/rootfs/etc/cont-init.d/99-run.sh | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/birdnet-go/HAINTEGRATION.md b/birdnet-go/HAINTEGRATION.md index 712514ef1..f5fc35421 100644 --- a/birdnet-go/HAINTEGRATION.md +++ b/birdnet-go/HAINTEGRATION.md @@ -123,7 +123,7 @@ type: markdown title: Birdnet (Wikipedia) content: >- Time|  Bird Name|Number Today|    Max - [Confidence](http://192.168.1.25:8081/) + [Confidence](http://ip_address_of_HA:8080/) :---|:---|:---:|:---: diff --git a/birdnet-go/rootfs/etc/cont-init.d/99-run.sh b/birdnet-go/rootfs/etc/cont-init.d/99-run.sh index a41f3a70b..d1dc01d0f 100755 --- a/birdnet-go/rootfs/etc/cont-init.d/99-run.sh +++ b/birdnet-go/rootfs/etc/cont-init.d/99-run.sh @@ -16,8 +16,7 @@ echo " " bashio::log.info "Starting app..." COMMAND="$(bashio::config "COMMAND")" # shellcheck disable=SC2086 -mkdir -p /root/.config/birdnet-go -cd /root/.config/birdnet-go + /usr/bin/birdnet-go $COMMAND & true # Wait for app to become available to start nginx From e49cccce525ccb4747ed220053413e2deeae2253 Mon Sep 17 00:00:00 2001 From: thor0215 Date: Tue, 2 Jul 2024 09:32:22 -0500 Subject: [PATCH 12/16] master --- birdnet-go/HAINTEGRATION.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/birdnet-go/HAINTEGRATION.md b/birdnet-go/HAINTEGRATION.md index f5fc35421..6fc357967 100644 --- a/birdnet-go/HAINTEGRATION.md +++ b/birdnet-go/HAINTEGRATION.md @@ -1,13 +1,13 @@ -# Birdnet-Go Addon: Home Assistant Integration +# BirdNET-Go Addon: Home Assistant Integration -Birdnet-Go can be integrated with Home Assistant using a MQTT Broker. +BirdNET-Go can be integrated with Home Assistant using a MQTT Broker. ## MQTT Configuration -Your Home Assistant must be setup with MQTT and Birdnet-Go MQTT integration must be enabled. Modify the Birdnet-Go config.yaml file to enable MQTT. If you are using the Mosquitto Broker addon, you will see a log message during the Birdnet-Go startup showing the internal MQTT server details needed for configuration similar to below. +Your Home Assistant must be setup with MQTT and BirdNET-Go MQTT integration must be enabled. Modify the BirdNET-Go config.yaml file to enable MQTT. If you are using the Mosquitto Broker addon, you will see a log message during the BirdNET-Go startup showing the internal MQTT server details needed for configuration similar to below. ```text -Birdnet-Go log snipped showing MQTT details: +BirdNET-Go log snipped showing MQTT details: /etc/cont-init.d/33-mqtt.sh: executing --- MQTT addon is active on your system! Add the MQTT details below to the Birdnet-go config.yaml : @@ -24,9 +24,9 @@ Edit this section of config.yaml found in addon_configs/db21ed7f_birdnet-go/: username: addons # MQTT username password: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # MQTT password ``` -## Birdnet-Go MQTT Sensors +## BirdNET-Go MQTT Sensors -Add the [MQTT sensor](https://www.home-assistant.io/integrations/sensor.mqtt/) yaml configuration below to your Home Assistant configuration.yaml file. Reload the configuration and once Birdnet-Go publishes a new finding to MQTT the new Birdnet-Go sensors should show that latest finding data. +Add the [MQTT sensor](https://www.home-assistant.io/integrations/sensor.mqtt/) yaml configuration below to your Home Assistant configuration.yaml file. Reload the configuration and once BirdNET-Go publishes a new finding to MQTT the new BirdNET-Go sensors should show that latest finding data. ```yaml mqtt: @@ -75,10 +75,10 @@ mqtt: state_topic: "birdnet" value_template: "{{ today_at(value_json.Time) }}" ``` -![Birdnet-go MQTT](./images/ha_birdnet_mqtt_sensor.png) +![BirdNET-go MQTT](./images/ha_birdnet_mqtt_sensor.png) -## Birdnet-Go Events Sensor[^1] +## BirdNET-Go Events Sensor[^1] Then create a new template sensor using the configuration below. @@ -112,15 +112,15 @@ Then create a new template sensor using the configuration below. {% endif %} ``` -### Birdnet-Go Dashboard Cards +### BirdNET-Go Dashboard Cards There are two versions listed below. The first example will link the Bird Name to Wikipedia. The other example will link to All About Birds. You will need to modify the Confidence link to match your Home Assistant setup. -![Birdnet-go Markdown Card Wikipedia](./images/ha_birdnet_markdown_card_wikipedia.png) +![BirdNET-go Markdown Card Wikipedia](./images/ha_birdnet_markdown_card_wikipedia.png) ```yaml type: markdown -title: Birdnet (Wikipedia) +title: BirdNET (Wikipedia) content: >- Time|  Bird Name|Number Today|    Max [Confidence](http://ip_address_of_HA:8080/) @@ -184,11 +184,11 @@ card_mod: } ``` -![Birdnet-go Markdown Card All About Birds](./images/ha_birdnet_markdown_card_all_about_birds.png) +![BirdNET-go Markdown Card All About Birds](./images/ha_birdnet_markdown_card_all_about_birds.png) ```yaml type: markdown -title: Birdnet (All About Birds) +title: BirdNET (All About Birds) content: >- Time|  Bird Name|Number Today|    Max [Confidence](http://ip_address_of_HA:8080/) From 45f20af5a93a1a58e1f14d20c130089a222190c9 Mon Sep 17 00:00:00 2001 From: thor0215 Date: Tue, 2 Jul 2024 09:34:33 -0500 Subject: [PATCH 13/16] master --- birdnet-go/rootfs/etc/cont-init.d/99-run.sh | 1 - repository.json | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/birdnet-go/rootfs/etc/cont-init.d/99-run.sh b/birdnet-go/rootfs/etc/cont-init.d/99-run.sh index d1dc01d0f..3a6b6d248 100755 --- a/birdnet-go/rootfs/etc/cont-init.d/99-run.sh +++ b/birdnet-go/rootfs/etc/cont-init.d/99-run.sh @@ -16,7 +16,6 @@ echo " " bashio::log.info "Starting app..." COMMAND="$(bashio::config "COMMAND")" # shellcheck disable=SC2086 - /usr/bin/birdnet-go $COMMAND & true # Wait for app to become available to start nginx diff --git a/repository.json b/repository.json index ab64f38c9..bc38043c6 100644 --- a/repository.json +++ b/repository.json @@ -1,6 +1,6 @@ { - "name": "HA Add-ons by thor0215", + "name": "HA Add-ons by alexbelgium", "udev": true, - "url": "https://github.com/thor0215/hassio-addons", - "maintainer": "thor0215" + "url": "https://github.com/alexbelgium/hassio-addons", + "maintainer": "alexbelgium" } From da9bbff4f804f103b0ef6ff2a84864fb6e85f931 Mon Sep 17 00:00:00 2001 From: thor0215 Date: Tue, 2 Jul 2024 15:38:37 -0500 Subject: [PATCH 14/16] master --- birdnet-go/HAINTEGRATION.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/birdnet-go/HAINTEGRATION.md b/birdnet-go/HAINTEGRATION.md index 6fc357967..abe9c3c26 100644 --- a/birdnet-go/HAINTEGRATION.md +++ b/birdnet-go/HAINTEGRATION.md @@ -24,6 +24,7 @@ Edit this section of config.yaml found in addon_configs/db21ed7f_birdnet-go/: username: addons # MQTT username password: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # MQTT password ``` + ## BirdNET-Go MQTT Sensors Add the [MQTT sensor](https://www.home-assistant.io/integrations/sensor.mqtt/) yaml configuration below to your Home Assistant configuration.yaml file. Reload the configuration and once BirdNET-Go publishes a new finding to MQTT the new BirdNET-Go sensors should show that latest finding data. @@ -77,7 +78,6 @@ mqtt: ``` ![BirdNET-go MQTT](./images/ha_birdnet_mqtt_sensor.png) - ## BirdNET-Go Events Sensor[^1] Then create a new template sensor using the configuration below. From fcdf39cc0cb01368c9cbc448452ebd85bfae05a2 Mon Sep 17 00:00:00 2001 From: thor0215 Date: Tue, 2 Jul 2024 15:42:16 -0500 Subject: [PATCH 15/16] master --- birdnet-go/HAINTEGRATION.md | 1 + 1 file changed, 1 insertion(+) diff --git a/birdnet-go/HAINTEGRATION.md b/birdnet-go/HAINTEGRATION.md index abe9c3c26..e58562e2a 100644 --- a/birdnet-go/HAINTEGRATION.md +++ b/birdnet-go/HAINTEGRATION.md @@ -76,6 +76,7 @@ mqtt: state_topic: "birdnet" value_template: "{{ today_at(value_json.Time) }}" ``` + ![BirdNET-go MQTT](./images/ha_birdnet_mqtt_sensor.png) ## BirdNET-Go Events Sensor[^1] From 6304873d12012b642aaec89a418cf9ded9b0db72 Mon Sep 17 00:00:00 2001 From: thor0215 Date: Tue, 2 Jul 2024 15:49:00 -0500 Subject: [PATCH 16/16] master --- birdnet-go/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/birdnet-go/README.md b/birdnet-go/README.md index f7365af90..82619b9e7 100644 --- a/birdnet-go/README.md +++ b/birdnet-go/README.md @@ -1,5 +1,4 @@ ## ⚠ Open Request : [✨ [REQUEST] Birdnet-Go (opened 2024-05-07)](https://github.com/alexbelgium/hassio-addons/issues/1385) by [@matthew73210](https://github.com/matthew73210) - # Home assistant add-on: Birdnet-Go [![Donate][donation-badge]](https://www.buymeacoffee.com/alexbelgium)